From 7ff568a03f24b1f933bacb46687580b4ada2b357 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=BF=D0=B0=D0=BD=D0=B8=D1=8F=201=D0=A1?= Date: Fri, 12 Oct 2012 14:38:00 +0300 Subject: [PATCH] 2_1_1_22 --- .../Forms/ВнешнееДействиеВыполнить/Form.form | 820 +-- .../Forms/ВнешнееДействиеВыполнить/Module.bsl | 24 +- .../Задание/Forms/ДействиеВыполнить/Form.form | 703 ++- .../Задание/Forms/ДействиеПроверить/Form.form | 771 +-- .../Forms/ФормаБизнесПроцесса/Form.form | 1502 ++--- .../Forms/ФормаБизнесПроцесса/Module.bsl | 45 +- .../Задание/Forms/ФормаСписка/Form.form | 9 +- .../BusinessProcesses/Задание/Help/ru.html | 2 +- .../Задание/ManagerModule.bsl | 15 +- .../Задание/ObjectModule.bsl | 41 +- SSL/src/BusinessProcesses/Задание/Задание.mdo | 4 +- .../Form.form | 152 +- .../ПодборВалютИзКлассификатора/Help/ru.html | 17 + .../ПодборВалютИзКлассификатора/Module.bsl | 115 + .../Валюты/Forms/ФормаВыбора/Form.form | 13 +- .../Валюты/Forms/ФормаВыбора/Module.bsl | 30 +- .../Forms/ФормаПодбораВалютИзОКВ/Module.bsl | 73 - .../Валюты/Forms/ФормаСписка/Form.form | 101 +- .../Валюты/Forms/ФормаСписка/Help/ru.html | 5 - .../Валюты/Forms/ФормаСписка/Module.bsl | 27 +- .../Валюты/Forms/ФормаЭлемента/Form.form | 299 +- .../Валюты/Forms/ФормаЭлемента/Help/ru.html | 23 + .../Валюты/Forms/ФормаЭлемента/Module.bsl | 74 +- SSL/src/Catalogs/Валюты/Help/ru.html | 32 +- SSL/src/Catalogs/Валюты/ObjectModule.bsl | 33 +- .../Template.txt | 12 +- SSL/src/Catalogs/Валюты/Валюты.mdo | 51 +- .../Forms/ФормаСписка/Module.bsl | 2 +- .../Commands/Открыть/CommandModule.bsl | 7 + .../РазместитьВРазделах/CommandModule.bsl | 7 + .../CommandModule.bsl | 86 + .../Forms/НастройкаБыстрогоДоступа/Form.form | 606 -- .../Forms/НастройкаБыстрогоДоступа/Module.bsl | 103 - .../НастройкаГруппировкиПоРазделам/Module.bsl | 337 - .../Forms/НастройкаПодсистем/Form.form | 555 -- .../Forms/НастройкаПодсистем/Module.bsl | 96 - .../Forms/ПереместитьВариантВРаздел/Form.form | 466 -- .../ПереместитьВариантВРаздел/Module.bsl | 80 - .../Form.form | 873 ++- .../Forms/РазмещениеВРазделах/Help/ru.html | 3 + .../Forms/РазмещениеВРазделах/Module.bsl | 286 + .../Forms/СкопироватьВариантВРаздел/Form.form | 842 --- .../СкопироватьВариантВРаздел/Module.bsl | 128 - .../Список/ExtInfo/ListSettings.dcss | 15 - .../Forms/ФормаВыбора/Form.form | 838 --- .../Forms/ФормаВыбора/Module.bsl | 171 - .../Forms/ФормаСписка/Form.form | 2029 ++++-- .../Forms/ФормаСписка/Module.bsl | 390 +- .../Forms/ФормаЭлемента/Form.form | 1099 +++- .../Forms/ФормаЭлемента/Help/ru.html | 30 + .../Forms/ФормаЭлемента/Module.bsl | 380 +- SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html | 41 +- .../Catalogs/ВариантыОтчетов/ObjectModule.bsl | 91 +- .../ВариантыОтчетов/ВариантыОтчетов.mdo | 403 +- .../Forms/ФормаСпискаВерсийФайла/Module.bsl | 4 +- .../Forms/ФормаЭлемента/Module.bsl | 6 +- SSL/src/Catalogs/ВерсииФайлов/Help/ru.html | 2 +- .../Catalogs/ВерсииФайлов/ObjectModule.bsl | 10 +- .../ВидыДокументовФизическихЛиц/Help/ru.html | 2 +- .../ManagerModule.bsl | 4 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../ВидыКонтактнойИнформации/Help/ru.html | 2 +- .../Commands/ВнешнийДоступ/CommandModule.bsl | 29 +- .../ExtInfo/ListSettings.dcss | 7 +- .../Forms/ФормаСписка/Form.form | 109 +- .../Forms/ФормаСписка/Module.bsl | 442 +- .../Forms/ФормаЭлемента/Form.form | 272 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 989 ++- .../Catalogs/ВнешниеПользователи/Help/ru.html | 2 +- .../ВнешниеПользователи/ManagerModule.bsl | 34 + .../ВнешниеПользователи/ObjectModule.bsl | 106 +- .../ВнешниеПользователи.mdo | 49 +- .../ВопросыШаблонаАнкеты/ObjectModule.bsl | 4 + .../Forms/ФормаСписка/Module.bsl | 4 +- .../Forms/ФормаЭлемента/Form.form | 72 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 554 +- .../ГруппыВнешнихПользователей/Help/ru.html | 2 +- .../ObjectModule.bsl | 427 +- .../Forms/ВыборПоАдминистратору/Module.bsl | 24 +- .../Module.bsl | 15 +- .../Forms/ФормаГруппы/Module.bsl | 37 +- .../Forms/ФормаСписка/Help/ru.html | 2 +- .../Forms/ФормаСписка/Module.bsl | 62 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 743 ++- SSL/src/Catalogs/ГруппыДоступа/Help/ru.html | 2 +- .../Catalogs/ГруппыДоступа/ObjectModule.bsl | 90 +- .../ГруппыИсполнителейЗадач/ObjectModule.bsl | 4 + .../Forms/ФормаСписка/Module.bsl | 4 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 19 +- .../Catalogs/ГруппыПользователей/Help/ru.html | 2 +- .../ГруппыПользователей/ObjectModule.bsl | 123 +- .../ГруппыПользователей.mdo | 1 + .../Form.form | 20 +- .../Forms/ПодборРазделов/Form.form | 2 + .../ФормаСписка/ConditionalAppearance.dcssca | 2 +- .../Forms/ФормаСписка/Form.form | 235 +- .../Forms/ФормаСписка/Module.bsl | 6 +- .../Forms/ФормаЭлемента/Form.form | 2505 +++++--- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 443 +- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 389 +- .../ДополнительныеОтчетыИОбработки.mdo | 22 +- .../Заметки/Forms/ВсеЗаметки/Form.form | 12 + .../Заметки/Forms/МоиЗаметки/Form.form | 5 + .../Заметки/Forms/ФормаЭлемента/Form.form | 8 + SSL/src/Catalogs/Заметки/ObjectModule.bsl | 4 + SSL/src/Catalogs/Заметки/Заметки.mdo | 24 + .../Список/ExtInfo/ListSettings.dcss | 15 - .../Forms/ФормаВыбора/Module.bsl | 71 - .../Forms/ФормаВыбораГруппы/Form.form | 239 - .../Forms/ФормаГруппы/Form.form | 185 + .../Forms/ФормаГруппы/Module.bsl | 61 + .../Список/ExtInfo/ListSettings.dcss | 12 + .../Forms/ФормаСписка/Form.form | 349 +- .../Forms/ФормаСписка/Module.bsl | 177 +- .../Forms/ФормаЭлемента/Form.form | 105 +- .../Forms/ФормаЭлемента/Help/ru.html | 1 - .../Forms/ФормаЭлемента/Module.bsl | 62 +- .../ЗначенияСвойствОбъектов/Help/ru.html | 7 +- .../ЗначенияСвойствОбъектов}/ObjectModule.bsl | 0 .../ЗначенияСвойствОбъектов.mdo | 71 +- .../Список/ExtInfo/ListSettings.dcss | 17 +- .../Forms/ФормаСписка/Form.form | 516 ++ .../Forms/ФормаСписка/Module.bsl | 151 + .../Forms/ФормаЭлемента/Form.form | 246 + .../Forms/ФормаЭлемента/Module.bsl | 61 + .../Help/ru.html | 4 + .../ObjectModule.bsl} | 0 .../ЗначенияСвойствОбъектовИерархия.mdo | 193 + .../Forms/ФормаВыбора/Form.form | 230 - .../Список/ExtInfo/ListSettings.dcss | 24 +- .../Forms/ФормаСписка/Form.form | 117 +- .../Forms/ФормаСписка/Module.bsl | 64 + .../Forms/ФормаЭлемента/Form.form | 139 +- .../Forms/ФормаЭлемента/Module.bsl | 37 +- .../ManagerModule.bsl | 1537 ++--- .../ObjectModule.bsl | 64 +- .../ИдентификаторыОбъектовМетаданных.mdo | 212 +- .../Forms/НастройкаНовогоКалендаря/Form.form | 1 - .../Forms/НастройкаНовогоКалендаря/Module.bsl | 2 + .../Календари/Forms/ФормаСписка/Form.form | 4 + .../Календари/Forms/ФормаСписка/Module.bsl | 13 + .../Календари/Forms/ФормаЭлемента/Form.form | 4 + .../Forms/ФормаЭлемента/Help/ru.html | 9 +- .../Календари/Forms/ФормаЭлемента/Module.bsl | 32 +- SSL/src/Catalogs/Календари/ManagerModule.bsl | 4 + SSL/src/Catalogs/Календари/Календари.mdo | 1 + .../Forms/ЗагрузкаКлассификатора/Form.form | 290 +- .../Forms/ЗагрузкаКлассификатора/Module.bsl | 209 +- .../Forms/ФормаВыбора/Module.bsl | 2 +- .../Forms/ФормаСписка/Module.bsl | 2 +- .../КлассификаторБанковРФ/Help/ru.html | 2 +- .../КлассификаторБанковРФ/ManagerModule.bsl | 5 +- .../КлассификаторБанковРФ/ObjectModule.bsl | 4 + .../Forms/ФормаВыбора/Module.bsl | 31 - .../КлассификаторВалют/ObjectModule.bsl | 1 - .../КлючевыеОперации/ObjectModule.bsl | 7 +- .../ДеревоСвойств/ExtInfo/ListSettings.dcss | 45 - .../Forms/ПодборСвойств/Form.form | 582 -- .../Forms/ПодборСвойств/Module.bsl | 188 - .../РедактированиеСоставаНаборов}/Form.form | 6 + .../РедактированиеСоставаНаборов}/Module.bsl | 16 +- .../Forms/ФормаГруппы/Form.form | 793 +-- .../Forms/ФормаСписка/Help/ru.html | 2 - .../Forms/ФормаЭлемента/Form.form | 352 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 - .../Forms/ФормаЭлемента/Module.bsl | 420 +- .../Help/ru.html | 4 +- .../ObjectModule.bsl | 4 + ...аборыДополнительныхРеквизитовИСведений.mdo | 67 +- .../Forms/ФормаПравила/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../ОбщиеДанныеИнформационногоЦентра.mdo | 258 + .../ПапкиФайлов/Forms/ФормаЭлемента/Form.form | 8 + .../Forms/ФормаЭлемента/Module.bsl | 125 +- SSL/src/Catalogs/ПапкиФайлов/Help/ru.html | 2 +- SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl | 16 +- SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo | 4 + .../ПапкиЭлектронныхПисем/ObjectModule.bsl | 4 + .../Commands/ПользователиИБ/CommandModule.bsl | 16 +- .../Forms/ПользователиИБ/Help/ru.html | 2 +- .../Forms/ПользователиИБ/Module.bsl | 102 +- .../ФормаВыбораПользователяОС/Help/ru.html | 2 +- .../ФормаВыбораПользователяОС/Module.bsl | 11 +- .../ExtInfo/ListSettings.dcss | 12 +- .../Пользователи/Forms/ФормаСписка/Form.form | 70 +- .../Пользователи/Forms/ФормаСписка/Module.bsl | 302 +- .../Forms/ФормаЭлемента/Form.form | 58 +- .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 864 +-- SSL/src/Catalogs/Пользователи/Help/ru.html | 2 +- .../Catalogs/Пользователи/ManagerModule.bsl | 8 + .../Catalogs/Пользователи/ObjectModule.bsl | 232 +- .../Catalogs/Пользователи/Пользователи.mdo | 29 +- .../ПоставляемыеДанные/ObjectModule.bsl | 14 + .../ПоставляемыеДанные/ПоставляемыеДанные.mdo | 296 + .../Forms/ПрименениеПравил/Module.bsl | 10 +- .../ManagerModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../Forms/ФормаЭлемента/Form.form | 15 - .../Forms/ФормаЭлемента/Module.bsl | 7 +- .../ManagerModule.bsl | 16 +- .../Forms/ФормаСписка/Help/ru.html | 2 +- .../Forms/ФормаСписка/Module.bsl | 19 +- .../Forms/ФормаЭлемента/Form.form | 68 +- .../Forms/ФормаЭлемента/Module.bsl | 797 ++- .../Catalogs/ПрофилиГруппДоступа/Help/ru.html | 2 +- .../ПрофилиГруппДоступа/ObjectModule.bsl | 18 +- .../ВыполнитьСейчас/CommandModule.bsl | 2 +- .../Forms/ПараметрыFTP/Form.form | 5 +- .../Forms/ПараметрыFTP/Help/ru.html | 8 +- .../Forms/ПараметрыFTP/Module.bsl | 4 +- .../Forms/ФормаВыбораГруппы/Help/ru.html | 2 +- .../Forms/ФормаГруппы/Help/ru.html | 2 +- .../Forms/ФормаСписка/Form.form | 120 +- .../Forms/ФормаЭлемента/Form.form | 2014 +++--- .../Forms/ФормаЭлемента/Help/ru.html | 8 +- .../Forms/ФормаЭлемента/Module.bsl | 346 +- SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html | 15 +- .../Catalogs/РассылкиОтчетов/ObjectModule.bsl | 5 +- .../РассылкиОтчетов/РассылкиОтчетов.mdo | 8 +- .../Forms/ФормаВыбора/Form.form | 89 +- .../Forms/ФормаЭлемента/Form.form | 504 +- .../Forms/ФормаЭлемента/Module.bsl | 10 +- .../Catalogs/РолиИсполнителей/Help/ru.html | 15 +- .../РолиИсполнителей/ObjectModule.bsl | 4 + .../РолиИсполнителей/РолиИсполнителей.mdo | 12 +- .../СообщенияСистемы/ObjectModule.bsl | 18 + SSL/src/Catalogs/СтраныМира/Help/ru.html | 2 +- .../Module.bsl | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 10 +- .../СценарииОбменовДанными/ManagerModule.bsl | 8 +- .../СценарииОбменовДанными/ObjectModule.bsl | 6 +- .../ТипыИнформацииИнформационногоЦентра.mdo | 109 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 5 +- .../Catalogs/ТомаХраненияФайлов/Help/ru.html | 2 +- .../ТомаХраненияФайлов/ObjectModule.bsl | 8 +- .../Help/ru.html | 2 +- .../ManagerModule.bsl} | 0 .../ObjectModule.bsl | 5 + .../УдалитьКлассификаторВалют.mdo} | 18 +- .../CommandModule.bsl | 0 .../Form.form | 1117 ++-- .../Help/ru.html | 2 +- .../Forms/ФормаВыбора/Form.form | 2 +- .../Forms/ФормаЭлемента/Form.form | 6 + .../Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Forms/ФормаЭлемента/Module.bsl | 14 + .../Help/ru.html | 2 +- .../ObjectModule.bsl | 4 + .../УчетныеЗаписиЭлектроннойПочты.mdo | 13 +- .../Forms/ВопросПриИмпортеФайлов/Help/ru.html | 2 +- .../Forms/ВопросПриИмпортеФайлов/Module.bsl | 2 +- .../Файлы/Forms/ВыборКодировки/Help/ru.html | 10 +- .../Help/ru.html | 2 +- .../Forms/НастройкаСканирования/Help/ru.html | 2 +- .../НастройкаСканированияНаСеанс/Help/ru.html | 2 +- .../Help/ru.html | 18 +- .../РедактированиеТекстовогоФайла/Module.bsl | 12 +- .../Файлы/Forms/РедактируемыеФайлы/Form.form | 2 +- .../Forms/РедактируемыеФайлы/Help/ru.html | 2 +- .../Module.bsl | 2 +- .../Forms/РезультатСканирования/Help/ru.html | 2 +- .../Forms/СписокЗанятыхСВопросом/Form.form | 2 +- .../Forms/СписокЗанятыхСВопросом/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 6 +- .../Forms/ФормаВозвратаФайла/Help/ru.html | 2 +- .../Файлы/Forms/ФормаВопроса/Module.bsl | 2 +- .../ФормаВыбораРежимаОткрытия/Help/ru.html | 2 +- .../Forms/ФормаИмпортаПапки/Help/ru.html | 2 +- .../Forms/ФормаИмпортаФайлов/Help/ru.html | 2 +- .../Файлы/Forms/ФормаИмпортаФайлов/Module.bsl | 4 +- .../Файлы/Forms/ФормаНового/Help/ru.html | 2 +- .../Файлы/Forms/ФормаОтчета/Module.bsl | 4 +- .../Forms/ФормаПеретаскивания/Module.bsl | 4 +- .../Файлы/Forms/ФормаСписка/Form.form | 96 +- .../Module.bsl | 50 +- .../Forms/ФормаЭкспортаПапки/Help/ru.html | 2 +- .../Файлы/Forms/ФормаЭкспортаПапки/Module.bsl | 66 +- .../Файлы/Forms/ФормаЭлемента/Form.form | 8 + .../Файлы/Forms/ФормаЭлемента/Help/ru.html | 2 +- .../Файлы/Forms/ФормаЭлемента/Module.bsl | 1443 ++--- .../Файлы/Forms/ХранилищеФайлов/Help/ru.html | 2 +- .../Файлы/Forms/ХранилищеФайлов/Module.bsl | 31 +- SSL/src/Catalogs/Файлы/Help/ru.html | 2 +- SSL/src/Catalogs/Файлы/ObjectModule.bsl | 6 +- SSL/src/Catalogs/Файлы/Файлы.mdo | 4 + SSL/src/Catalogs/ФизическиеЛица/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ФормаМастераТабличныхВопросов/Module.bsl | 3 - .../Forms/ФормаЭлемента/Module.bsl | 6 +- .../ВидыДоступа/Forms/ФормаВыбора/Module.bsl | 9 +- .../ВидыДоступа/Forms/ФормаСписка/Module.bsl | 11 +- .../ВидыДоступа/ObjectModule.bsl | 4 + .../ВопросыДляАнкетирования/ObjectModule.bsl | 5 +- .../CommandModule.bsl | 20 + .../Список/ExtInfo/ListSettings.dcss | 2 +- .../ФормаВыбора}/ConditionalAppearance.dcssca | 11 +- .../Forms/ФормаВыбора/Form.form | 226 +- .../Forms/ФормаВыбора/Module.bsl | 131 + .../Forms/ФормаГруппы/Form.form | 2 +- .../Forms/ФормаСписка/Form.form | 47 +- .../Forms/ФормаСписка/Module.bsl | 50 + .../Forms/ФормаЭлемента/Form.form | 126 +- .../Forms/ФормаЭлемента/Module.bsl | 202 +- .../Help/ru.html | 9 +- .../ManagerModule.bsl | 4 + .../ДополнительныеРеквизитыИСведения.mdo | 240 +- .../Forms/ФормаСписка/Form.form | 2 + .../ОбъектыАдресацииЗадач/Help/ru.html | 4 +- .../ObjectModule.bsl | 4 + .../ОбластьДанных/ОбластьДанных.mdo | 74 +- .../АвтономнаяРабота/CommandModule.bsl | 10 + .../АвтономнаяРабота/АвтономнаяРабота.mdo | 10 + .../CommandModule.bsl | 11 + .../АвтономнаяРаботаВМоделиСервиса.mdo | 10 + .../ДополнительныеСведения/CommandModule.bsl | 15 - .../CommandModule.bsl | 21 + .../ДополнительныеСведенияКоманднаяПанель.mdo | 16 + .../CommandModule.bsl | 22 + ...ДополнительныеСведенияПанельНавигации.mdo} | 7 +- .../ЗагрузитьКурсыВалют/CommandModule.bsl | 25 + .../ЗагрузитьКурсыВалют.mdo | 10 + .../CommandModule.bsl | 13 +- .../CommandModule.bsl | 8 + .../ОткрытьИнформационныйЦентр.mdo | 10 + .../CommandModule.bsl | 11 +- .../CommandModule.bsl | 11 +- .../ПраваДоступа/CommandModule.bsl | 12 +- .../ПраваПоЗначениямДоступа/CommandModule.bsl | 4 +- .../CommandModule.bsl | 9 +- .../СоздатьРезервнуюКопию/CommandModule.bsl | 13 + .../СоздатьРезервнуюКопию.mdo | 10 + .../CommonForms/АвтономнаяРабота/Form.form | 1230 ++++ .../CommonForms/АвтономнаяРабота/Module.bsl | 412 ++ .../АвтономнаяРабота.mdo} | 6 +- .../АвтономнаяРаботаВМоделиСервиса/Form.form | 2054 +++++++ .../АвтономнаяРаботаВМоделиСервиса/Module.bsl | 289 + .../АвтономнаяРаботаВМоделиСервиса.mdo | 10 + .../Help/ru.html | 2 +- SSL/src/CommonForms/АдреснаяКнига/Form.form | 17 +- SSL/src/CommonForms/АдреснаяКнига/Module.bsl | 4 +- .../CommonForms/БиблиотекаФайлов/Module.bsl | 4 +- SSL/src/CommonForms/ВводАдреса/Help/ru.html | 2 +- SSL/src/CommonForms/ВводАдреса/Module.bsl | 35 +- .../ВводПароляСОписаниями/Help/ru.html | 2 +- SSL/src/CommonForms/ВводТелефона/Help/ru.html | 2 +- SSL/src/CommonForms/Вопрос/Form.form | 2 +- SSL/src/CommonForms/Вопрос/Module.bsl | 32 +- SSL/src/CommonForms/Вопрос/Вопрос.mdo | 2 +- .../ВсеОтчеты/ConditionalAppearance.dcssca | 90 - SSL/src/CommonForms/ВсеОтчеты/Form.form | 1869 ------ SSL/src/CommonForms/ВсеОтчеты/Help/ru.html | 5 - SSL/src/CommonForms/ВсеОтчеты/Module.bsl | 637 -- .../CommonForms/ВходВОбластьДанных/Form.form | 8 +- .../CommonForms/ВходВОбластьДанных/Module.bsl | 24 +- .../Module.bsl | 2 +- .../Module.bsl | 2 +- .../СписокРоли/ExtInfo/ListSettings.dcss | 1 + .../ВыборИсполнителяБизнесПроцесса/Form.form | 165 +- .../Help/ru.html | 2 +- .../ВыборИсполнителяБизнесПроцесса/Module.bsl | 39 +- SSL/src/CommonForms/ВыборКонтакта/Form.form | 29 +- SSL/src/CommonForms/ВыборКонтакта/Module.bsl | 9 + .../Module.bsl | 20 +- .../ВыборОбъектовМетаданных/Module.bsl | 7 +- .../CommonForms/ВыборПодписей/Help/ru.html | 2 +- .../ВыборПроизвольногоПериода}/Form.form | 168 +- .../ВыборПроизвольногоПериода/Module.bsl | 38 + .../ВыборПроизвольногоПериода.mdo | 10 + .../ВыборПутиКАрхивуФайловТомов/Module.bsl | 2 +- .../ВыборРолиИсполнителя/Form.form | 309 +- .../ВыборРолиИсполнителя/Module.bsl | 26 +- .../CommonForms/ВыборСертификата/Help/ru.html | 2 +- .../ВыборСертификатовШифрования/Help/ru.html | 2 +- .../ВыборФорматаВложений/Form.form | 501 ++ .../ВыборФорматаВложений/Module.bsl | 102 + .../ВыборФорматаВложений.mdo} | 6 +- .../ВыполнениеОбменаДанными/Form.form | 1293 ---- .../CommonForms/ДлительнаяОперация/Form.form | 2 +- .../CommonForms/ДлительнаяОперация/Module.bsl | 12 +- .../ДобавлениеПодписиИзФайла/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 4 +- .../Help/ru.html | 2 +- .../Module.bsl | 4 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ДокументооборотВыборФайла/Help/ru.html | 2 +- .../ДокументооборотВыборФайла/Module.bsl | 2 +- .../ДокументооборотДокументы/Help/ru.html | 2 +- .../ДокументооборотЗадачи/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 4 +- .../Help/ru.html | 2 +- .../ДокументооборотКарточкаФайла/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 2 +- .../Help/ru.html | 2 +- .../ДокументооборотФайлы/Help/ru.html | 2 +- .../ДокументооборотФайлы/Module.bsl | 18 +- .../ДополнительноеОписание/Form.form | 122 + .../ДополнительноеОписание/Module.bsl | 18 + .../ДополнительноеОписание.mdo | 11 + .../ДополнительныеОтчетыИОбработки/Form.form | 94 +- .../ДополнительныеОтчетыИОбработки/Module.bsl | 16 +- .../ЗагрузкаДанныхВОбласть/Module.bsl | 50 +- .../Module.bsl | 2 +- .../CommonForms/ИнформационныйЦентр/Form.form | 869 +++ .../ИнформационныйЦентр/Module.bsl | 348 ++ .../ИнформационныйЦентр.mdo | 10 + .../НастройкаЛокальногоКэшаФайлов/Form.form | 14 +- .../Help/ru.html | 2 +- .../НастройкаЛокальногоКэшаФайлов/Module.bsl | 102 +- .../НастройкаМоихОтчетовИОбработок/Form.form | 2 + .../НастройкаМоихОтчетовИОбработок/Module.bsl | 4 +- .../НастройкаОбменаСообщениями/Form.form | 35 - .../НастройкаОбменаСообщениями/Module.bsl | 57 +- .../Module.bsl | 40 - .../Form.form | 1384 +++++ .../Module.bsl | 87 + ...стройкиРезервногоКопированияПриложений.mdo | 11 + SSL/src/CommonForms/НастройкиЭЦП/Form.form | 54 +- SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html | 5 +- SSL/src/CommonForms/НастройкиЭЦП/Module.bsl | 445 +- .../CommonForms/НастройкиЭЦП/НастройкиЭЦП.mdo | 2 +- .../НерекомендуемаяВерсияПлатформы/Form.form | 1 - SSL/src/CommonForms/ОбменыДанными/Form.form | 1196 ++-- .../CommonForms/ОбменыДанными/Help/ru.html | 2 +- SSL/src/CommonForms/ОбменыДанными/Module.bsl | 25 + .../ОписаниеИзмененийСистемы/Help/ru.html | 2 +- .../ОписаниеИзмененийСистемы/Module.bsl | 2 +- .../Form.form | 1129 ++++ .../Module.bsl | 541 ++ .../ОтключениеАвтономногоРабочегоМеста.mdo | 10 + .../CommonForms/ОтображениеНовостей/Form.form | 366 ++ .../ОтображениеНовостей/Module.bsl | 142 + .../ОтображениеНовостей.mdo | 10 + .../ОтправкаПечатнойФормыПоПочте/Form.form | 986 +++ .../ОтправкаПечатнойФормыПоПочте/Module.bsl | 184 + .../ОтправкаПечатнойФормыПоПочте.mdo | 11 + .../ОтправкаСообщенияВТехподдержку/Form.form | 450 ++ .../ОтправкаСообщенияВТехподдержку/Module.bsl | 114 + .../ОтправкаСообщенияВТехподдержку.mdo | 10 + .../Form.form | 462 ++ .../Module.bsl | 252 + .../ОтправкаТабличныхДокументовПоПочте.mdo | 11 + SSL/src/CommonForms/ПанельОтчетов/Form.form | 2265 ++++++- .../CommonForms/ПанельОтчетов/Help/ru.html | 23 + SSL/src/CommonForms/ПанельОтчетов/Module.bsl | 1507 +++-- .../ПанельОтчетов/ПанельОтчетов.mdo | 5 + .../Help/ru.html | 2 +- .../Module.bsl | 54 +- .../ПараметрыАдминистрированияСервернойИБ.mdo | 1 - .../ПараметрыПроксиСервера/Form.form | 27 + .../ПараметрыПроксиСервера/Help/ru.html | 5 +- .../ПараметрыПроксиСервера/Module.bsl | 13 +- .../ПарольДляСинхронизацииДанных/Form.form | 354 ++ .../ПарольДляСинхронизацииДанных/Help/ru.html | 3 + .../ПарольДляСинхронизацииДанных/Module.bsl | 87 + .../ПарольДляСинхронизацииДанных.mdo} | 7 +- .../ПерсональныеНастройкиЭЦП/Help/ru.html | 2 +- .../ConditionalAppearance.dcssca | 14 +- .../CommonForms/ПечатьДокументов/Form.form | 2451 ++++---- .../CommonForms/ПечатьДокументов/Module.bsl | 825 ++- .../ПечатьДокументов/ПечатьДокументов.mdo | 2 +- SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html | 2 +- .../Form.form | 12 + .../Help/ru.html | 2 +- SSL/src/CommonForms/ПоискПоИндексу/Module.bsl | 11 +- .../ПользователиСервиса/Module.bsl | 19 +- SSL/src/CommonForms/ПраваДоступа/Form.form | 286 +- SSL/src/CommonForms/ПраваДоступа/Module.bsl | 479 +- .../ПраваДоступаУпрощенно/Module.bsl | 355 +- .../ПраваПоЗначениямДоступа/Module.bsl | 497 +- .../CommonForms/ПрисоединенныеФайлы/Form.form | 278 +- .../ПрисоединенныеФайлы/Module.bsl | 200 +- .../CommonForms/ПрисоединенныйФайл/Form.form | 12 +- .../CommonForms/ПрисоединенныйФайл/Module.bsl | 110 +- .../Form.form | 286 +- .../Module.bsl | 71 +- .../РедактированиеДополнительныхСведений.mdo} | 4 +- .../РедактированиеНовогоПисьма/Form.form | 215 +- .../РедактированиеНовогоПисьма/Help/ru.html | 2 +- .../РедактированиеНовогоПисьма/Module.bsl | 31 +- .../CommonForms/СертификатЭЦП/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 11 +- .../СозданиеРезервнойКопии/Form.form | 475 ++ .../СозданиеРезервнойКопии/Module.bsl | 150 + .../СозданиеРезервнойКопии.mdo | 10 + .../СохранениеПечатнойФормы/Form.form | 856 +++ .../СохранениеПечатнойФормы/Module.bsl | 161 + .../СохранениеПечатнойФормы.mdo | 11 + .../СтруктураПодчиненности/Help/ru.html | 2 +- .../СтруктураПодчиненности/Module.bsl | 46 +- .../УстановкаПодписиЭЦП/Help/ru.html | 2 +- .../CommonForms/ФормаВариантаОтчета/Form.form | 3967 ++++++++++++ .../ФормаВариантаОтчета/Module.bsl | 375 ++ .../ФормаВариантаОтчета.mdo | 10 + .../CommonForms/ФормаНастроекОтчета/Form.form | 302 + .../ФормаНастроекОтчета/Module.bsl | 23 + .../ФормаНастроекОтчета.mdo | 10 + .../ФормаОтчета/ConditionalAppearance.dcssca | 40 + SSL/src/CommonForms/ФормаОтчета/Form.form | 2658 ++++++++ SSL/src/CommonForms/ФормаОтчета/Module.bsl | 2283 +++++++ .../CommonForms/ФормаОтчета/ФормаОтчета.mdo | 10 + .../Module.bsl | 25 + .../АвтономнаяРаботаВызовСервераСлужебный.mdo | 10 + .../АвтономнаяРаботаСлужебный/Module.bsl | 829 +++ .../АвтономнаяРаботаСлужебный.mdo | 11 + .../АдресныйКлассификатор/Module.bsl | 81 +- .../АдресныйКлассификатор.mdo | 1 - .../Module.bsl | 71 + .../АдресныйКлассификаторВызовСервера.mdo | 10 + .../АдресныйКлассификаторКлиент/Module.bsl | 82 +- .../Module.bsl | 6 +- .../CommonModules/Анкетирование/Module.bsl | 33 +- .../Анкетирование/Анкетирование.mdo | 1 - .../АнкетированиеКлиентСервер/Module.bsl | 25 + .../Module.bsl | 488 +- .../БизнесПроцессыИЗадачиВызовСервера.mdo | 2 + .../БизнесПроцессыИЗадачиКлиент/Module.bsl | 15 +- .../Module.bsl | 63 - .../БизнесПроцессыИЗадачиСервер/Module.bsl | 331 +- .../БизнесПроцессыИЗадачиСобытия/Module.bsl | 20 +- .../БизнесПроцессыИЗадачиСобытия.mdo | 1 - .../CommonModules/ВариантыОтчетов/Module.bsl | 2564 ++++---- .../ВариантыОтчетов/ВариантыОтчетов.mdo | 1 - .../Module.bsl | 26 - .../ВариантыОтчетовВызовСервераПовтИсп.mdo | 11 - .../ВариантыОтчетовКлиент/Module.bsl | 324 +- .../Module.bsl | 28 - .../ВариантыОтчетовКлиентСервер/Module.bsl | 33 + .../ВариантыОтчетовКлиентСервер.mdo} | 8 +- .../Module.bsl | 203 +- .../ВариантыОтчетовПереопределяемый.mdo | 3 +- .../ВариантыОтчетовПовтИсп/Module.bsl | 61 + .../ВариантыОтчетовПовтИсп.mdo} | 6 +- .../ВерсионированиеОбъектов/Module.bsl | 102 +- .../ВерсионированиеОбъектов.mdo | 3 +- .../ВерсионированиеОбъектовСобытия/Module.bsl | 18 +- .../ВерсионированиеОбъектовСобытия.mdo | 1 - .../CommonModules/Взаимодействия/Module.bsl | 120 +- .../ВзаимодействияВызовСервера/Module.bsl | 70 +- .../ВзаимодействияКлиентСервер/Module.bsl | 40 +- .../ВнешниеЗадачиВызовСервера/Module.bsl | 3 +- .../ВнешниеПользователи/Module.bsl | 506 +- .../ВнешниеПользователи.mdo | 3 +- .../ВыгрузкаЗагрузкаДанных/Module.bsl | 88 +- .../Module.bsl | 57 - .../ДатыЗапретаИзменения/Module.bsl | 844 ++- .../Module.bsl | 4 - .../ДатыЗапретаИзмененияПовтИсп/Module.bsl | 39 +- .../ДатыЗапретаИзмененияСлужебный/Module.bsl | 98 +- .../ДлительныеОперации/Module.bsl | 40 +- .../ДлительныеОперации/ДлительныеОперации.mdo | 1 - .../ДлительныеОперацииКлиент/Module.bsl | 16 +- .../Module.bsl | 2 +- .../ДополнительныеОтчетыИОбработки/Module.bsl | 435 +- .../ДополнительныеОтчетыИОбработки.mdo | 3 +- .../Module.bsl | 31 + ...нительныеОтчетыИОбработкиВызовСервера.mdo} | 8 +- .../Module.bsl | 35 +- .../Module.bsl | 2 +- .../Module.bsl | 1 - ...ельныеОтчетыИОбработкиПереопределяемый.mdo | 1 - .../Module.bsl | 59 - .../ЖурналРегистрации/Module.bsl | 67 +- .../ЖурналРегистрации/ЖурналРегистрации.mdo | 2 +- .../ЖурналРегистрацииКлиент/Module.bsl | 4 + .../ЗащитаПерсональныхДанных/Module.bsl | 312 + .../ЗащитаПерсональныхДанных.mdo | 9 + .../Module.bsl | 34 +- ...щитаПерсональныхДанныхПереопределяемый.mdo | 1 - .../ЗащитаПерсональныхДанныхПовтИсп.mdo | 2 +- .../ИнформационныйЦентрКлиент/Module.bsl | 58 + .../ИнформационныйЦентрКлиент.mdo} | 6 +- .../ИнформационныйЦентрСервер/Module.bsl | 383 ++ .../ИнформационныйЦентрСервер.mdo | 11 + .../Module.bsl | 116 + ...рмационныйЦентрСерверПереопределяемый.mdo} | 9 +- .../КалендарныеГрафики/Module.bsl | 4 +- .../КалендарныеГрафики/КалендарныеГрафики.mdo | 1 - .../Module.bsl | 133 +- .../КомандыРаботыСФайламиКлиент/Module.bsl | 11 +- .../Module.bsl | 57 - .../КурсыВалютВМоделиСервиса/Module.bsl | 494 ++ .../КурсыВалютВМоделиСервиса.mdo | 11 + .../Module.bsl | 22 +- .../НапоминанияПользователяКлиент/Module.bsl | 7 +- .../НапоминанияПользователяСервер/Module.bsl | 29 + .../ОбменДаннымиВМоделиСервиса/Module.bsl | 272 +- .../Module.bsl | 58 + .../ОбменДаннымиВМоделиСервисаКлиент.mdo} | 6 +- .../Module.bsl | 35 + ...нДаннымиВМоделиСервисаПереопределяемый.mdo | 11 + .../Module.bsl | 16 +- .../ОбменДаннымиВызовСервера/Module.bsl | 809 +++ .../ОбменДаннымиВызовСервера.mdo | 10 + .../ОбменДаннымиГлобальный/Module.bsl | 40 + .../ОбменДаннымиГлобальный.mdo | 11 + .../ОбменДаннымиКлиент/Module.bsl | 143 +- .../Module.bsl | 9 + .../ОбменДаннымиКлиентСервер/Module.bsl | 42 + .../ОбменДаннымиКлиентСервер.mdo | 12 + .../ОбменДаннымиПереопределяемый/Module.bsl | 34 +- .../ОбменДаннымиПереопределяемый.mdo | 1 - .../ОбменДаннымиПовтИсп/Module.bsl | 179 +- .../ОбменДаннымиПовтИсп.mdo | 1 - .../ОбменДаннымиСервер/Module.bsl | 1920 +++--- .../ОбменДаннымиСервер/ОбменДаннымиСервер.mdo | 3 +- .../ОбменДаннымиСобытия/Module.bsl | 660 +- .../ОбменДаннымиСобытия.mdo | 1 - .../CommonModules/ОбменСообщениями/Module.bsl | 2 +- .../ОбменСообщениями/ОбменСообщениями.mdo | 3 +- .../ОбменСообщениямиВнутренний/Module.bsl | 136 +- .../ОбменСообщениямиВнутренний.mdo | 3 +- .../ОбменСообщениямиВызовСервера/Module.bsl | 20 + .../ОбменСообщениямиВызовСервера.mdo | 10 + .../ОбменСообщениямиКлиент/Module.bsl | 2 +- .../Module.bsl | 41 +- .../ОбменСообщениямиПереопределяемый.mdo | 2 + .../ОбменСообщениямиПовтИсп/Module.bsl | 4 +- .../ОбменСообщениямиПовтИсп.mdo | 2 + .../ОбменФайламиВызовСервера/Module.bsl | 29 +- .../ОбменФайламиСобытия/Module.bsl | 157 - .../ОбновлениеИнформационнойБазы/Module.bsl | 263 +- .../ОбновлениеИнформационнойБазы.mdo | 3 +- .../Module.bsl | 52 +- ...влениеИнформационнойБазыВМоделиСервиса.mdo | 3 +- .../Module.bsl | 25 + ...новлениеИнформационнойБазыВызовСервера.mdo | 10 + .../Module.bsl | 50 +- .../Module.bsl | 10 +- ...ениеИнформационнойБазыПереопределяемый.mdo | 2 + .../Module.bsl | 58 + .../ОбновлениеИнформационнойБазыСобытия.mdo} | 6 +- .../ОбновлениеКонфигурации/Module.bsl | 65 +- .../ОбновлениеКонфигурации.mdo | 1 - .../Module.bsl | 37 + .../ОбновлениеКонфигурацииВызовСервера.mdo | 10 + .../ОбновлениеКонфигурацииКлиент/Module.bsl | 62 +- ...ОбновлениеКонфигурацииПереопределяемый.mdo | 1 - .../Module.bsl | 304 + ...кКаналовСообщенийИнформационногоЦентра.mdo | 11 + .../Module.bsl | 1 + ...овСообщенийОбменаДаннымиВРежимеСервиса.mdo | 2 + .../Module.bsl | 322 + ...тчикКаналовСообщенийПоставляемыхДанных.mdo | 11 + .../Module.bsl | 718 --- ...овСообщенийУдаленногоАдминистрирования.mdo | 2 + .../Module.bsl | 4 + ...общенийУправлениеРезервнымКопированием.mdo | 11 + .../Module.bsl | 698 +++ ...икСообщенийУдаленногоАдминистрирования.mdo | 11 + .../Module.bsl | 79 + ...общенийУправленияРезервнымКопированием.mdo | 11 + .../CommonModules/ОбщегоНазначения/Module.bsl | 814 ++- .../Module.bsl | 63 + ...НазначенияВызовСервераПереопределяемый.mdo | 10 + .../ОбщегоНазначенияКлиент/Module.bsl | 88 +- .../Module.bsl | 18 + .../ОбщегоНазначенияКлиентСервер/Module.bsl | 111 +- .../Module.bsl | 112 +- .../ОбщегоНазначенияПереопределяемый.mdo | 1 - .../ОбщегоНазначенияПовтИсп/Module.bsl | 393 +- .../Module.bsl | 129 +- .../ОценкаПроизводительностиКлиент/Module.bsl | 3 +- .../Module.bsl | 22 + .../ОценкаПроизводительностиПовтИсп.mdo | 1 - .../CommonModules/ОчередьЗаданий/Module.bsl | 148 +- .../ОчередьЗаданийПереопределяемый/Module.bsl | 17 - .../ПерепрефиксацияОбъектов/Module.bsl | 1471 +++++ .../ПерепрефиксацияОбъектов.mdo | 11 + .../Module.bsl | 32 - .../ПолнотекстовыйПоискСервер/Module.bsl | 75 +- .../ПолнотекстовыйПоискСервер.mdo | 3 +- .../ПолучениеФайловИзИнтернета/Module.bsl | 31 +- .../Module.bsl | 5 +- .../Module.bsl | 44 +- SSL/src/CommonModules/Пользователи/Module.bsl | 2350 +++---- .../Пользователи/Пользователи.mdo | 3 +- .../ПользователиВМоделиСервиса/Module.bsl | 69 +- .../ПользователиКлиентСервер/Module.bsl | 85 + .../ПользователиКлиентСервер.mdo | 12 + .../ПользователиПереопределяемый/Module.bsl | 90 +- .../ПользователиПереопределяемый.mdo | 3 +- .../ПользователиСлужебный/Module.bsl | 3140 ++++++++++ .../ПользователиСлужебный.mdo} | 5 +- .../Module.bsl | 34 + .../ПользователиСлужебныйВызовСервера.mdo | 10 + .../ПользователиСлужебныйКлиент/Module.bsl | 79 + .../ПользователиСлужебныйКлиент.mdo | 10 + .../Module.bsl | 51 + .../ПользователиСлужебныйКлиентСервер.mdo | 12 + .../Module.bsl | 62 +- .../ПользователиСлужебныйПовтИсп.mdo} | 7 +- .../ПользователиСобытия/Module.bsl | 69 - .../ПоставляемыеДанные/Module.bsl | 738 ++- .../ПоставляемыеДанные/ПоставляемыеДанные.mdo | 1 - .../Module.bsl | 30 +- .../ПоставляемыеДанныеПереопределяемый.mdo | 2 +- .../ПоставляемыеДанныеПовтИсп/Module.bsl | 2 +- .../ПоставляемыеДанныеПовтИсп.mdo | 2 +- .../Module.bsl | 15 +- .../ПрефиксацияОбъектовВызовСервера.mdo} | 4 +- .../Module.bsl | 121 + .../ПрефиксацияОбъектовПереопределяемый.mdo} | 7 +- .../ПрефиксацияОбъектовПовтИсп/Module.bsl | 36 +- .../ПрефиксацияОбъектовПовтИсп.mdo | 3 +- .../ПрефиксацияОбъектовСобытия/Module.bsl | 58 +- .../ПрефиксацияОбъектовСобытия.mdo | 1 - .../ПрисоединенныеФайлы/Module.bsl | 1337 +--- .../ПрисоединенныеФайлы.mdo | 5 +- .../ПрисоединенныеФайлыКлиент/Module.bsl | 1001 +-- .../ПрисоединенныеФайлыСлужебный/Module.bsl | 1232 ++++ .../ПрисоединенныеФайлыСлужебный.mdo | 11 + .../Module.bsl | 89 + ...исоединенныеФайлыСлужебныйВызовСервера.mdo | 10 + .../Module.bsl | 976 +++ .../ПрисоединенныеФайлыСлужебныйКлиент.mdo | 10 + .../ПрисоединенныеФайлыСобытия/Module.bsl | 277 - .../Module.bsl | 23 +- .../РаботаВМоделиСервиса/Module.bsl | 861 ++- .../Module.bsl | 14 + .../РаботаВМоделиСервисаПовтИсп/Module.bsl | 196 +- .../Module.bsl | 8 +- .../РаботаС1СДокументооборотКлиент/Module.bsl | 28 +- .../CommonModules/РаботаСБанками/Module.bsl | 205 +- .../РаботаСБанкамиВызовСервера/Module.bsl | 134 - .../РаботаСБиблиотекойФайловКлиент/Module.bsl | 2 +- .../РаботаСКурсамиВалют/Module.bsl | 107 +- .../РаботаСКурсамиВалют.mdo | 1 - .../Module.bsl | 16 + .../РаботаСКурсамиВалютВызовСервера.mdo | 10 + .../Module.bsl | 2 +- .../РаботаСПочтовымиСообщениями.mdo | 1 - .../Module.bsl | 4 +- .../CommonModules/РаботаСФайлами/Module.bsl | 68 + .../РаботаСФайлами.mdo} | 5 +- .../РаботаСФайламиВызовСервера/Module.bsl | 2083 ++++--- .../Module.bsl | 5 + .../РаботаСФайламиКлиент/Module.bsl | 494 +- .../Module.bsl | 5 + .../РаботаСФайламиКлиентПовтИсп/Module.bsl | 6 +- .../РаботаСФайламиКлиентСервер/Module.bsl | 11 +- .../РаботаСФайламиПереопределяемый/Module.bsl | 4 + .../РаботаСФайламиСлужебный/Module.bsl | 315 + .../РаботаСФайламиСлужебный.mdo | 11 + .../РаботаСФайламиСобытия/Module.bsl | 247 - .../РаботаСоСканеромКлиент/Module.bsl | 88 +- .../CommonModules/РассылкаОтчетов/Module.bsl | 366 +- .../РассылкаОтчетовВызовСервера/Module.bsl | 4 +- .../РассылкаОтчетовКлиент/Module.bsl | 87 +- .../Module.bsl | 52 - .../РассылкаОтчетовКлиентСервер/Module.bsl | 41 +- .../Module.bsl | 201 +- .../РассылкаОтчетовПовтИсп/Module.bsl | 40 +- .../Module.bsl | 14 +- .../РегламентныеЗаданияКлиент/Module.bsl | 229 +- .../РегламентныеЗаданияСервер/Module.bsl | 1297 +--- .../РегламентныеЗаданияСервер.mdo | 3 +- .../РегламентныеЗаданияСлужебный/Module.bsl | 1229 ++++ .../РегламентныеЗаданияСлужебный.mdo | 11 + .../Module.bsl | 45 + ...гламентныеЗаданияСлужебныйВызовСервера.mdo | 10 + .../Module.bsl | 22 +- ...егламентныеЗаданияСлужебныйГлобальный.mdo} | 4 +- .../Module.bsl | 222 + .../РегламентныеЗаданияСлужебныйКлиент.mdo | 10 + .../Module.bsl | 112 + .../РезервноеКопированиеИБВызовСервера.mdo | 10 + .../РезервноеКопированиеИБКлиент/Module.bsl | 29 +- .../Module.bsl | 12 +- .../РезервноеКопированиеИБСервер/Module.bsl | 94 +- .../РезервноеКопированиеИБСервер.mdo | 1 - .../Module.bsl | 472 ++ .../РезервноеКопированиеОбластейДанных.mdo} | 6 +- .../Module.bsl | 184 + ...ервноеКопированиеОбластейДанныхПовтИсп.mdo | 13 + SSL/src/CommonModules/СоединенияИБ/Module.bsl | 28 +- .../СоединенияИБ/СоединенияИБ.mdo | 3 +- .../СоединенияИБВызовСервера/Module.bsl | 194 + .../СоединенияИБВызовСервера.mdo | 10 + .../СоединенияИБГлобальный/Module.bsl | 17 +- .../СоединенияИБКлиент/Module.bsl | 14 +- .../Module.bsl | 21 + .../СоединенияИБКлиентПереопределяемый.mdo | 10 + .../СоединенияИБКлиентСервер/Module.bsl | 22 +- .../СообщенияВМоделиСервиса/Module.bsl | 416 ++ .../СообщенияВМоделиСервиса.mdo | 11 + .../СообщенияВМоделиСервисаПовтИсп/Module.bsl | 140 + .../СообщенияВМоделиСервисаПовтИсп.mdo | 12 + .../Module.bsl | 110 - .../СообщенияУдаленногоАдминистрирования.mdo | 11 - .../Module.bsl | 255 - .../Module.bsl | 59 +- .../Module.bsl | 194 +- .../СтандартныеПодсистемыКлиент/Module.bsl | 534 +- .../Module.bsl | 424 +- .../Module.bsl | 13 +- .../Module.bsl | 7 +- .../Module.bsl | 3357 +++++++--- .../СтандартныеПодсистемыСервер/Module.bsl | 125 +- .../СтроковыеФункцииКлиентСервер/Module.bsl | 11 +- .../УправлениеДоступом/Module.bsl | 2823 +-------- .../УправлениеДоступом/УправлениеДоступом.mdo | 3 +- .../Module.bsl | 4 +- .../Module.bsl | 15 +- .../УправлениеДоступомПереопределяемый.mdo | 3 +- .../УправлениеДоступомСлужебный/Module.bsl | 2863 +++++++++ .../УправлениеДоступомСлужебный.mdo} | 5 +- .../Module.bsl | 2 +- .../УправлениеДоступомСлужебныйПовтИсп.mdo} | 7 +- .../УправлениеДоступомСобытия/Module.bsl | 226 - .../УправлениеИтогамиИАгрегатамиСобытия.mdo | 1 - .../Module.bsl | 96 +- .../УправлениеКонтактнойИнформацией.mdo | 3 +- .../Module.bsl | 276 +- .../Module.bsl | 62 +- .../УправлениеПечатью/Module.bsl | 282 +- .../УправлениеПечатью/УправлениеПечатью.mdo | 3 +- .../УправлениеПечатьюMSWordКлиент/Module.bsl | 14 +- .../УправлениеПечатьюВызовСервера/Module.bsl | 73 + .../УправлениеПечатьюВызовСервера.mdo | 10 + .../УправлениеПечатьюКлиент/Module.bsl | 35 +- .../Module.bsl | 17 + .../УправлениеПечатьюПереопределяемый.mdo | 1 - .../УправлениеСвойствами/Module.bsl | 975 ++- .../УправлениеСвойствамиКлиент/Module.bsl | 69 +- .../Module.bsl | 50 +- .../УправлениеЭлектроннойПочтой/Module.bsl | 91 +- .../УправлениеЭлектроннойПочтой.mdo | 1 - .../Module.bsl | 7 +- .../CommonModules/ФайловыеФункции/Module.bsl | 845 +-- .../ФайловыеФункции/ФайловыеФункции.mdo | 5 +- .../ФайловыеФункцииКлиентПовтИсп/Module.bsl | 32 - .../Module.bsl | 326 - .../ФайловыеФункцииПереопределяемый.mdo | 12 - .../ФайловыеФункцииПовтИсп/Module.bsl | 14 - .../ФайловыеФункцииСлужебный/Module.bsl | 750 +++ .../ФайловыеФункцииСлужебный.mdo | 11 + .../Module.bsl | 44 + .../ФайловыеФункцииСлужебныйВызовСервера.mdo | 10 + .../Module.bsl | 240 +- .../ФайловыеФункцииСлужебныйКлиент.mdo} | 4 +- .../Module.bsl | 91 + ...ФайловыеФункцииСлужебныйКлиентПовтИсп.mdo} | 4 +- .../Module.bsl | 93 +- .../ФайловыеФункцииСлужебныйКлиентСервер.mdo} | 4 +- .../Module.bsl | 189 + .../ФайловыеФункцииСлужебныйПовтИсп.mdo} | 7 +- .../CommonModules/ФизическиеЛица/Module.bsl | 229 - .../ФизическиеЛица/ФизическиеЛица.mdo | 1 - .../ФизическиеЛицаКлиентСервер/Module.bsl | 219 + .../ФизическиеЛицаКлиентСервер.mdo | 12 + .../ФизическиеЛицаПереопределяемый/Module.bsl | 18 - .../ФизическиеЛицаПереопределяемый.mdo | 12 - .../Module.bsl | 55 + .../ФормаОтчетаКлиентПереопределяемый.mdo | 10 + .../ФормаОтчетаПереопределяемый/Module.bsl | 64 + .../ФормаОтчетаПереопределяемый.mdo | 11 + .../ФункцииОтчетовКлиентСервер/Module.bsl | 863 +++ .../ФункцииОтчетовКлиентСервер.mdo | 12 + .../CommonModules/ЭлектроннаяПочта/Module.bsl | 104 +- .../ЭлектроннаяПочта/ЭлектроннаяПочта.mdo | 1 - .../ЭлектроннаяПочтаВызовСервера/Module.bsl | 27 + .../ЭлектроннаяПочтаВызовСервера.mdo | 10 + .../ЭлектроннаяЦифроваяПодпись/Module.bsl | 25 +- .../ЭлектроннаяЦифроваяПодпись.mdo | 1 - .../ЭлектроннаяЦифроваяПодписьПовтИсп.mdo | 1 - .../БыстрыеНастройкиОтчета/Picture.png | Bin 0 -> 542 bytes .../БыстрыеНастройкиОтчета.mdo | 8 + .../CommonPictures/БыстрыйДоступ/Picture.png | Bin 0 -> 1181 bytes .../БыстрыйДоступ/БыстрыйДоступ.mdo | 8 + .../БыстрыйДоступДобавить/Picture.png | Bin 0 -> 1351 bytes .../БыстрыйДоступДобавить.mdo | 8 + .../БыстрыйДоступУдалить/Picture.png | Bin 0 -> 1209 bytes .../БыстрыйДоступУдалить.mdo | 8 + .../ЗакрепитьВариантОтчета/Picture.png | Bin 635 -> 0 bytes .../ЗакрепитьВариантОтчета.mdo | 8 - .../ЗаставкаВнешнейОперации/Picture.bmp | Bin 515256 -> 0 bytes .../ЗаставкаВнешнейОперации/Picture.png | Bin 0 -> 43519 bytes .../ОткрепитьВариантОтчета/Picture.png | Bin 126 -> 0 bytes .../ОткрепитьВариантОтчета.mdo | 8 - .../Picture.png | Bin 0 -> 913 bytes .../ПрочиеПользовательскиеНастройки.mdo | 8 + .../РассылкаОтчетов/Picture.png | Bin 0 -> 1635 bytes .../РассылкаОтчетов/РассылкаОтчетов.mdo | 8 + .../CommonPictures/СправкаВНачало/Picture.png | Bin 0 -> 905 bytes .../СправкаВНачало/СправкаВНачало.mdo | 8 + .../СправкаПереходВниз/Picture.png | Bin 0 -> 1051 bytes .../СправкаПереходВниз/СправкаПереходВниз.mdo | 8 + .../СтатусыДокумента/Picture.png | Bin 0 -> 685 bytes .../СтатусыДокумента/СтатусыДокумента.mdo | 8 + .../СтрелкаВнизСправка/Picture.png | Bin 0 -> 584 bytes .../СтрелкаВнизСправка/СтрелкаВнизСправка.mdo | 8 + .../ЭлектронноеПисьмо/Picture.png | Bin 0 -> 491 bytes .../ЭлектронноеПисьмо/ЭлектронноеПисьмо.mdo | 8 + .../Template.htmldoc | 4 + .../ru.html | 11 + ...КакВыполнитьУстановкуОбновленияВручную.mdo | 9 + SSL/src/Configuration/Configuration.mdo | 246 +- .../ManagedApplicationModule.bsl | 7 +- .../OrdinaryApplicationModule.bsl | 7 +- .../Configuration/ParentConfigurations.bin | 2 +- SSL/src/Configuration/SessionModule.bsl | 6 + .../АдресАгентаСервиса/АдресАгентаСервиса.mdo | 1 - .../АдресВебСервиса1СДокументооборот.mdo | 1 - .../АдресВебСервисаБиблиотекиФайлов.mdo | 1 - .../АдресСервисаПоставляемыхДанных.mdo | 1 - ...атыПолученияОтчетаПоЖурналуРегистрации.mdo | 25 - .../АлгоритмПодписи/АлгоритмПодписи.mdo | 1 - .../АлгоритмХеширования.mdo | 1 - .../АлгоритмШифрования/АлгоритмШифрования.mdo | 1 - .../ВерсияКлассификатораБанковРФ.mdo | 1 - .../ВнутреннийАдресМенеджераСервиса.mdo | 1 - .../ВыполнятьЗамерыПроизводительности.mdo | 1 - .../ВыполнятьПроверкуЭЦПНаСервере.mdo | 1 - ...овленияПовторноИспользуемыхЗначенийМРО.mdo | 1 - .../ДатаУведомленияОНовыхЗадачах.mdo | 1 - .../ValueManagerModule.bsl | 5 +- ...обавлятьРуководителямДоступПодчиненных.mdo | 1 - .../ЗаголовокСистемы/ЗаголовокСистемы.mdo | 1 - .../ЗапрещатьЗагрузкуФайловПоРасширению.mdo | 1 - ...орКорневойПапкиФайлов1СДокументооборот.mdo | 1 - .../ИзвлекатьТекстыФайловНаСервере.mdo | 1 - .../ИзменятьЗаданияЗаднимЧислом.mdo | 1 - .../ИмяПользователяАгентаСервиса.mdo | 1 - .../ИмяПользователяБиблиотекиФайлов.mdo | 1 - ...СлужебногоПользователяМенеджераСервиса.mdo | 1 - ...оПользователяСервисаПоставляемыхДанных.mdo | 1 - ...льзоватьАвтономнуюРаботуВМоделиСервиса.mdo | 19 + .../ИспользоватьАнкетирование.mdo | 1 - .../ИспользоватьБиблиотекуФайлов.mdo | 1 - .../ИспользоватьБизнесПроцессыИЗадачи.mdo | 1 - .../ИспользоватьВерсионированиеОбъектов.mdo | 1 - .../ИспользоватьВнешниеЗадачи.mdo | 1 - .../ИспользоватьВнешнихПользователей.mdo | 1 - .../ИспользоватьГруппыПользователей.mdo | 1 - .../ИспользоватьДатуИВремяВСрокахЗадач.mdo | 1 - .../ИспользоватьДатуНачалаЗадач.mdo | 1 - ...зоватьДополнительныеРеквизитыИСведения.mdo | 1 - .../ИспользоватьЗаметки.mdo | 1 - ...пользоватьИнтеграциюС1СДокументооборот.mdo | 1 - .../ИспользоватьНапоминанияПользователя.mdo | 1 - .../ValueManagerModule.bsl | 4 + .../ИспользоватьОбменДанными.mdo | 1 - ...пользоватьОбменДаннымиВЛокальномРежиме.mdo | 1 - ...ИспользоватьОбменДаннымиВМоделиСервиса.mdo | 1 - .../ИспользоватьПодчиненныеБизнесПроцессы.mdo | 1 - .../ИспользоватьПолнотекстовыйПоиск.mdo | 1 - .../ИспользоватьПочтовыйКлиент.mdo | 1 - .../ИспользоватьПризнакРассмотрено.mdo | 1 - .../ИспользоватьПрочиеВзаимодействия.mdo | 1 - .../ValueManagerModule.bsl | 19 +- ...ИспользоватьРазделениеПоОбластямДанных.mdo | 1 - ...ИспользоватьЭлектронныеЦифровыеПодписи.mdo | 1 - .../КаталогВременныхФайловДляLinux.mdo} | 5 +- .../ValueManagerModule.bsl | 0 .../КаталогВременныхФайловДляWindows.mdo} | 5 +- .../КлючОбластиДанных/КлючОбластиДанных.mdo | 22 + .../КодКорневойПапкиБиблиотекиФайлов.mdo | 1 - .../КонечнаяТочкаМенеджераСервиса.mdo | 1 - .../КопироватьОбластиДанныхИзЭталонной.mdo | 1 - ...ьВыполненияИсполняющегоФоновогоЗадания.mdo | 1 - ...ноеКоличествоИсполняющихФоновыхЗаданий.mdo | 1 - .../МаксимальныйРазмерФайла.mdo | 1 - ...змерФайлаДляПередачиВ1СДокументооборот.mdo | 1 - .../МаксимальныйРазмерФайлаОбластиДанных.mdo | 1 - ...иеКорневойПапкиФайлов1СДокументооборот.mdo | 1 - ...ройкаАвтономногоРабочегоМестаЗавершена.mdo | 19 + .../НастройкаПодчиненногоУзлаРИБЗавершена.mdo | 1 - .../НастройкаПроксиСервера.mdo | 1 - ...НастройкиВыполненияРегламентныхЗаданий.mdo | 1 - ...ИспользоватьРазделениеПоОбластямДанных.mdo | 1 - .../НомерЗагрузкиПоставляемыхДанных.mdo | 1 - .../ОбщийКаталогВременныхФайлов.mdo | 1 - .../ОбщийКаталогВременныхФайловLinux.mdo | 1 - .../ValueManagerModule.bsl | 15 +- .../ОграничиватьДоступНаУровнеЗаписей.mdo | 1 - .../ValueManagerModule.bsl | 4 + .../ОтправлятьПисьмаВФорматеHTML.mdo | 1 - .../ПараметрыАдминистрированияИБ.mdo | 1 - .../ПарольПользователяАгентаСервиса.mdo | 1 - .../ПарольПользователяБиблиотекиФайлов.mdo | 1 - ...СлужебногоПользователяМенеджераСервиса.mdo | 1 - ...оПользователяСервисаПоставляемыхДанных.mdo | 1 - .../ValueManagerModule.bsl | 0 .../ПоддержкаРезервногоКопирования.mdo | 19 + ...фиксПоследнегоАвтономногоРабочегоМеста.mdo | 23 + ...ксУзлаРаспределеннойИнформационнойБазы.mdo | 1 - .../Constants/ПровайдерЭЦП/ПровайдерЭЦП.mdo | 1 - .../РазмерБлокаПередачиФайла.mdo | 1 - .../РежимИспользованияИнформационнойБазы.mdo | 1 - ...ВИнтернетеПриЗавершенииРаботыПрограммы.mdo | 19 + ...ниемВИнтернетеПриНачалеРаботыПрограммы.mdo | 19 + ...ниеБлокировкиПриОбновленииКонфигурации.mdo | 1 - .../СообщениеОбменаДаннымиИзГлавногоУзла.mdo | 19 + .../СписокЗапрещенныхРасширений.mdo | 1 - ...исокЗапрещенныхРасширенийОбластиДанных.mdo | 1 - .../СписокРасширенийТекстовыхФайлов.mdo | 1 - .../СписокРасширенийФайловOpenDocument.mdo | 1 - ...ширенийФайловOpenDocumentОбластиДанных.mdo | 1 - .../СтатусОбновленияКонфигурации.mdo | 1 - .../ТипПровайдераЭЦП/ТипПровайдераЭЦП.mdo | 1 - .../ТребуетсяОбновлениеИнформационнойБазы.mdo | 19 + .../УдалитьИспользоватьВзаимодействия.mdo | 1 - .../УдалитьТипХраненияФайлов.mdo | 1 - .../ХранитьФайлыВТомахНаДиске.mdo | 1 - .../ЭтоАвтономноеРабочееМесто.mdo | 19 + .../Forms/Форма/Module.bsl | 75 +- .../Help/ru.html | 2 +- .../Forms/Форма/Module.bsl | 59 +- .../Help/ru.html | 2 +- .../Form.form | 9 +- .../Help/ru.html | 2 +- .../Module.bsl | 30 +- .../АктивныеПользователи/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 4 + .../Forms/Форма/Form.form | 2437 ++++++++ .../Forms/Форма}/Module.bsl | 403 +- .../ВыполнениеОбменаДанными.mdo | 23 + .../Forms/Настройка/Help/ru.html | 2 +- .../Forms/Форма/Form.form | 45 +- .../Forms/Форма/Module.bsl | 50 +- .../ГрупповоеИзменениеОбъектов/Help/ru.html | 2 +- .../ManagerModule.bsl | 4 + .../ObjectModule.bsl | 33 +- .../ГрупповоеИзменениеОбъектов.mdo | 7 +- .../Forms/ЖурналРегистрации/Form.form | 191 +- .../Forms/ЖурналРегистрации/Module.bsl | 71 +- .../Forms/ОтборЖурналаРегистрации/Form.form | 52 +- .../Forms/ОтборЖурналаРегистрации/Module.bsl | 23 + .../Forms/РедакторСоставаСвойства/Form.form | 75 +- .../Forms/РедакторСоставаСвойства/Module.bsl | 62 +- .../Forms/ФормаСобытия/Form.form | 257 +- .../Forms/ФормаСобытия/Help/ru.html | 2 +- .../Forms/ФормаСобытия/Module.bsl | 12 + .../ЖурналРегистрации/Help/ru.html | 2 +- .../ЖурналРегистрации/ManagerModule.bsl | 4 + .../ЗагрузкаКурсовВалют/Forms/Форма/Form.form | 134 +- .../Forms/Форма/Help/ru.html | 2 - .../ЗагрузкаКурсовВалют/Help/ru.html | 26 +- .../ЗагрузкаКурсовВалют/ObjectModule.bsl | 4 + .../ЗагрузкаКурсовВалют.mdo | 17 +- .../ManagerModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../Forms/Форма/Form.form | 4 + .../Forms/Форма/Module.bsl | 30 +- .../ManagerModule.bsl | 4 + .../Forms/Форма/Form.form | 603 +- .../Forms/Форма/Module.bsl | 25 +- .../КартаМаршрутаБизнесПроцесса.mdo | 2 +- .../ObjectModule.bsl | 4336 ++++++++----- .../КонвертацияОбъектовИнформационныхБаз.mdo | 156 +- .../ObjectModule.bsl | 4 + .../КонтрольЖурналаРегистрации/Form.form | 642 -- .../КонтрольЖурналаРегистрации/Module.bsl | 83 - .../Help/ru.html | 6 - .../Module.bsl | 68 - .../КонтрольЖурналаРегистрации/Help/ru.html | 9 - .../ManagerModule.bsl | 275 - .../КонтрольЖурналаРегистрации.mdo | 49 - .../УсловияРаспространенияОбновлений/ru.html | 2 +- .../Help/ru.html | 2 +- .../Module.bsl | 97 +- .../CommandModule.bsl | 8 + .../НастройкиПользователя/CommandModule.bsl | 8 + .../CommandModule.bsl | 8 + .../Forms/ВыборНастроек/Form.form | 2316 +++++++ .../Forms/ВыборНастроек/Help/ru.html | 6 + .../Forms/ВыборНастроек/Module.bsl | 593 ++ .../ConditionalAppearance.dcssca | 16 +- .../Forms/ВыборПользователей/Form.form | 1711 ++++++ .../Forms/ВыборПользователей/Help/ru.html | 3 + .../Forms/ВыборПользователей/Module.bsl | 402 ++ .../Form.form | 824 +++ .../Help/ru.html | 5 + .../Module.bsl | 449 ++ .../Forms/НастройкиПользователей/Form.form | 3209 ++++++++++ .../Forms/НастройкиПользователей/Help/ru.html | 13 + .../Forms/НастройкиПользователей/Module.bsl | 933 +++ .../ОчисткаНастроекПользователей/Form.form | 683 +++ .../ОчисткаНастроекПользователей/Help/ru.html | 4 + .../ОчисткаНастроекПользователей/Module.bsl | 284 + .../Form.form | 245 + .../Module.bsl | 24 + .../НастройкиПользователей/ManagerModule.bsl | 1121 ++++ .../НастройкиПользователей/ObjectModule.bsl | 385 ++ .../НастройкиПользователей.mdo | 140 + .../Forms/НастройкаРасписания/Form.form | 5 +- .../Forms/НастройкаРасписания/Module.bsl | 4 +- .../Forms/НастройкаРезервнойКопии/Form.form | 270 +- .../Forms/Обозреватель/Form.form | 136 +- .../Forms/ПредупреждениеWMI/Form.form | 3 +- .../Forms/Форма/Form.form | 2820 +++++---- .../Forms/Форма/Module.bsl | 364 +- .../ОбновлениеКонфигурации/Help/ru.html | 2 +- .../ОбновлениеКонфигурации/ManagerModule.bsl | 4 + .../ОбновлениеКонфигурации/ObjectModule.bsl | 4 + .../Template.txt | 370 +- .../Template.txt | 633 +- .../ОбновлениеКонфигурации.mdo | 52 +- .../Form.form | 0 .../Module.bsl | 10 - .../Forms/НастройкаПодсистемы/Form.form | 127 +- .../Forms/НастройкаПодсистемы/Module.bsl | 4 +- .../Forms/Форма/Form.form | 82 +- .../Forms/Форма/Module.bsl | 218 +- .../Forms/ФормаОтбора/Module.bsl | 37 +- .../ОценкаПроизводительности/Help/ru.html | 2 +- .../ОценкаПроизводительности/ObjectModule.bsl | 114 +- .../ОценкаПроизводительности.mdo | 88 +- .../ПереносФайловВТома/Forms/Форма/Form.form | 15 + .../ПереносФайловВТома/Forms/Форма/Module.bsl | 59 +- .../ПереносФайловВТома/Help/ru.html | 2 +- .../Forms/УпрощеннаяФорма/Form.form | 7 +- .../Forms/УпрощеннаяФорма/Module.bsl | 45 +- .../Forms/ФормаПоиска/Form.form | 244 +- .../Forms/ФормаПоиска/Module.bsl | 373 +- .../ПолнотекстовыйПоискВДанных/Help/ru.html | 2 +- .../Forms/Форма/Form.form | 786 ++- .../Forms/Форма/Module.bsl | 701 ++- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 40 +- .../Forms/ДополнительноеОписание/Form.form | 124 + .../Forms/ДополнительноеОписание/Module.bsl | 16 + .../Form.form | 1874 ++++++ .../Picture.png | Bin 0 -> 30975 bytes .../Module.bsl | 505 ++ .../Forms/НастройкаНаСторонеСервиса/Form.form | 2863 +++++++++ .../Picture.png | Bin 0 -> 30975 bytes .../НастройкаНаСторонеСервиса/Module.bsl | 766 +++ .../ManagerModule.bsl | 16 + .../ObjectModule.bsl | 362 ++ .../Template.htmldoc | 4 + .../ru.html | 39 + .../Template.htmldoc | 4 + .../ru.html | 21 + ...мощникСозданияАвтономногоРабочегоМеста.mdo | 102 + .../Forms/ДополнительноеОписание/Form.form | 2 +- .../Forms/ДополнительноеОписание/Module.bsl | 7 + .../Form.form | 2 +- .../Forms/Форма/Form.form | 962 +-- .../Forms/Форма/Module.bsl | 141 +- .../Help/ru.html | 2 +- .../ObjectModule.bsl | 209 +- .../КакОпределитьПараметрыПодключения/ru.html | 2 +- .../ru.html | 4 +- .../ru.html | 5 +- .../ru.html | 2 +- .../ru.html | 2 +- .../ПомощникСозданияОбменаДанными.mdo | 24 + .../ВыполнениеРегламентныхЗаданий/Module.bsl | 10 +- .../Help/ru.html | 2 +- .../Module.bsl | 15 +- .../Forms/РегламентноеЗадание/Form.form | 185 +- .../Forms/РегламентноеЗадание/Help/ru.html | 2 +- .../Forms/РегламентноеЗадание/Module.bsl | 9 +- .../РегламентныеИФоновыеЗадания/Form.form | 49 +- .../РегламентныеИФоновыеЗадания/Module.bsl | 64 +- .../Forms/ФоновоеЗадание/Help/ru.html | 2 +- .../Forms/ФоновоеЗадание/Module.bsl | 10 +- .../РегламентныеИФоновыеЗадания/Help/ru.html | 2 +- .../ManagerModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../Help/ru.html | 2 +- .../Module.bsl | 100 +- .../Help/ru.html | 2 +- .../Module.bsl | 128 +- .../ЗаставкаВосстановления/Template.txt | 300 +- .../Template.txt | 294 +- .../МакетФайлаЗагрузкаИБ/Template.txt | 10 +- .../Template.txt | 12 +- .../Forms/Форма/Module.bsl | 2 +- .../ManagerModule.bsl | 4 + .../Help/ru.html | 2 +- .../ObjectModule.bsl | 4 + .../Forms/АрхивАнкет/Module.bsl | 2 +- .../ObjectModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../Forms/ОсновнаяФорма/Form.form | 207 +- .../Forms/ОсновнаяФорма/Module.bsl | 143 +- .../УдалениеПомеченныхОбъектов/Help/ru.html | 2 +- .../ManagerModule.bsl | 26 +- .../Forms/УправляемаяФорма/Form.form | 5442 +++++++++++++++++ .../Forms/УправляемаяФорма/Module.bsl | 1642 +++++ .../Form.form | 960 +++ .../Module.bsl | 270 + .../Form.form | 281 + .../Forms/Форма/Form.oform | Bin 214003 -> 214107 bytes .../Form.oform | Bin 40900 -> 41006 bytes .../Form.oform | Bin 8811 -> 5985 bytes .../ФормаСообщенияОбОбычномРежиме/Form.form | 137 - .../УниверсальныйОбменДаннымиXML/Help/ru.html | 6 +- .../ObjectModule.bsl | 34 +- .../ОбщиеПроцедурыФункции/Template.txt | 15 - .../УниверсальныйОбменДаннымиXML.mdo | 38 +- .../Forms/ОсновнаяФорма/Form.form | 14 +- .../Forms/ОсновнаяФорма/Module.bsl | 23 +- .../Forms/ФормаВыбораПериода/Form.form | 19 - .../Forms/ФормаВыбораПериода/Help/ru.html | 2 +- .../Forms/ФормаВыбораПериода/Module.bsl | 2 +- .../ФормаПараметровПерестроения/Help/ru.html | 2 +- .../УправлениеИтогамиИАгрегатами/Help/ru.html | 2 +- .../Forms/Форма/Form.form | 792 --- .../Forms/Форма/Module.bsl | 207 - .../УправлениеНастройкамиФорм/Help/ru.html | 5 - .../ObjectModule.bsl | 220 - .../УправлениеНастройкамиФорм.mdo | 28 - .../Forms/Форма/Module.bsl | 4 +- .../Help/ru.html | 2 +- .../Forms/НастройкиРаботыСПочтой/Module.bsl | 2 + .../Forms/ПечатьЭлектронногоПисьма/Module.bsl | 1 - .../Forms/ФормаСписка/Module.bsl | 4 +- .../Анкета/Forms/ФормаДокумента/Help/ru.html | 2 +- .../Анкета/Forms/ФормаДокумента/Module.bsl | 4 +- .../Анкета/Forms/ФормаСписка/Module.bsl | 2 +- SSL/src/Documents/Анкета/ObjectModule.bsl | 4 + .../Встреча/Forms/ФормаДокумента/Form.form | 4 + .../Встреча/Forms/ФормаДокумента/Module.bsl | 44 +- SSL/src/Documents/Встреча/ManagerModule.bsl | 4 + SSL/src/Documents/Встреча/ObjectModule.bsl | 4 + .../Forms/ФормаДокумента/Form.form | 4 + .../Forms/ФормаДокумента/Module.bsl | 62 +- .../ManagerModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../Forms/ФормаДокумента/Form.form | 4 + .../Forms/ФормаДокумента/Module.bsl | 45 +- .../ТелефонныйЗвонок/ManagerModule.bsl | 4 + .../ТелефонныйЗвонок/ObjectModule.bsl | 4 + .../Forms/ФормаДокумента/Form.form | 4 + .../Forms/ФормаДокумента/Module.bsl | 64 +- .../ManagerModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../Forms/ФормаДокумента/Form.form | 9 +- .../Forms/ФормаДокумента/Module.bsl | 256 +- .../ManagerModule.bsl | 5 +- .../ObjectModule.bsl | 4 + ...ликацииДополнительныхОтчетовИОбработок.mdo | 14 +- .../ДоступныеПериодыОтчета.mdo | 87 + .../СтатусыОбластейДанных.mdo | 7 - .../ТипыОтчетов.mdo} | 55 +- .../ФорматыСохраненияОтчетов.mdo | 51 +- ...олнитьЗначениеРеквизитаУпорядочивания.mdo} | 4 +- ...роситьЗначениеРеквизитаУпорядочивания.mdo} | 4 +- ...олнитьЗначениеРеквизитаУпорядочивания.mdo} | 4 +- ...роситьЗначениеРеквизитаУпорядочивания.mdo} | 5 +- .../ЗаписатьГруппыИВидыДоступа.mdo | 2 +- ...ЗаписатьЗависимыеНаборыЗначенийДоступа.mdo | 2 +- .../ЗаписатьНаборыЗначенийДоступа.mdo | 2 +- ...ватьОтправкуНеразделенныхДанныхВСервис.mdo | 14 + ...тьПолучениеНеразделенныхДанныхВСервисе.mdo | 14 + ...овитьПредставлениеВнешнегоПользователя.mdo | 2 +- ...хронизациюДанныхСПриложениемВИнтернете.mdo | 14 + .../ПриОтправкеДанныхГлавному.mdo | 13 + .../ПриОтправкеДанныхПодчиненному.mdo | 4 +- .../ПриПолученииДанныхОтГлавного.mdo | 13 + .../ПриПолученииДанныхОтПодчиненного.mdo | 4 +- ...диненныйФайлПередЗаписьюВзаимодействия.mdo | 2 +- ...ненныйФайлПередУдалениемВзаимодействия.mdo | 2 +- ...соединенныйФайлПриЗаписиВзаимодействия.mdo | 2 +- .../СкопироватьРеквизитыВерсииФайловВФайл.mdo | 2 +- ...икиОбщихПоставляемыхДанныхПередЗаписью.mdo | 2 +- ...енияПрисоединенныхФайловВзаимодействия.mdo | 2 +- .../ManagerModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../ИзмененияПоставляемыхДанных.mdo | 7 - .../ОбменВнешнимиЗаданиями/ManagerModule.bsl | 4 + .../ОбменВнешнимиЗаданиями/ObjectModule.bsl | 4 + .../Templates/ПравилаОбмена/Template.txt | 9 +- .../ОбменВнешнимиЗаданиями.mdo | 15 + .../ManagerModule.bsl | 4 + .../ObjectModule.bsl | 4 + .../Templates/ПравилаОбмена/Template.txt | 9 +- ...менВнешнимиЗаданиямиС1СДокументооборот.mdo | 15 + .../ОбменСообщениями/ManagerModule.bsl | 6 +- ...льзоватьАвтономнуюРаботуВМоделиСервиса.mdo | 11 + .../ИспользоватьВнешнихПользователей.mdo | 1 - ...зоватьДополнительныеРеквизитыИСведения.mdo | 3 +- ...пользоватьОбменДаннымиВЛокальномРежиме.mdo | 19 - ...ИспользоватьОбменДаннымиВМоделиСервиса.mdo | 1 + .../ПоддержкаРезервногоКопирования.mdo | 14 + .../РаботаВАвтономномРежиме.mdo | 10 + ...СтандартныеПодсистемыВАвтономномРежиме.mdo | 15 + .../СтандартныеПодсистемыВЛокальномРежиме.mdo | 1 - .../СтандартныеПодсистемыВМоделиСервиса.mdo | 7 +- .../CommandModule.bsl | 2 +- .../Form.form | 384 +- .../Help/ru.html | 2 + .../Module.bsl | 31 +- .../Form.form | 408 +- .../Help/ru.html | 2 +- .../Module.bsl | 11 +- .../Help/ru.html | 1 - .../Form.form | 938 +-- .../Help/ru.html | 6 + .../Module.bsl | 265 +- .../Form.form | 0 .../Help/ru.html | 2 + .../Module.bsl | 0 .../Forms/ФормаВыбора/Module.bsl | 25 +- .../Help/ru.html | 11 - .../Help/ru.html | 7 - .../Forms/ФормаСписка/Form.form | 62 +- .../Forms/ФормаСписка/Help/ru.html | 2 +- .../АдресныйКлассификатор/Help/ru.html | 4 +- .../АдресныйКлассификатор.mdo | 16 +- .../Forms/ВыборХранимыхВерсий/Form.form | 465 +- .../Forms/ВыборХранимыхВерсий/Module.bsl | 68 +- .../Forms/ОтчетПоВерсиямОбъекта/Form.form | 35 +- .../Forms/ОтчетПоВерсиямОбъекта/Module.bsl | 97 +- .../Forms/ФормаСписка/Form.form | 1 + .../Forms/ФормаСписка/Module.bsl | 4 +- .../Template.mxlx | 16 +- .../ВерсииОбъектов/ВерсииОбъектов.mdo | 4 +- .../ДанныеБизнесПроцессов/Help/ru.html | 2 +- .../RecordSetModule.bsl | 4 + .../Template.txt | 365 ++ .../ДанныеПроизводственногоКалендаря.mdo | 2 +- .../Forms/ДатыЗапретаИзменения/Module.bsl | 816 +-- .../ДатыЗапретаИзменения/Help/ru.html | 2 +- .../ДокументыФизическихЛиц/Help/ru.html | 2 +- .../ДокументыФизическихЛиц/ManagerModule.bsl | 4 + .../RecordSetModule.bsl | 17 +- .../ДокументыФизическихЛиц.mdo | 2 +- .../ДополнительныеСведения/Help/ru.html | 2 +- .../RecordSetModule.bsl | 4 + .../ЗамерыВремени/ЗамерыВремени.mdo | 69 + .../ManagerModule.bsl | 4 + .../ИзмененияОбщихДанныхУзлов.mdo | 1 - .../ИсполнителиРоли/CommandModule.bsl | 7 + .../Forms/АдресацияПоОбъекту/Help/ru.html | 2 +- .../Forms/АдресацияПоОбъекту/Module.bsl | 2 +- .../АдресацияПоОбъектуИРоли/Help/ru.html | 2 +- .../Исполнители}/ExtInfo/ListSettings.dcss | 38 +- .../Forms/ИсполнителиРоли}/Form.form | 173 +- .../Forms/ИсполнителиРоли/Help/ru.html | 6 + .../Forms/ИсполнителиРоли/Module.bsl | 24 + .../ИсполнителиЗадач/Help/ru.html | 2 +- .../ИсполнителиЗадач/RecordSetModule.bsl | 8 +- .../ИсполнителиЗадач/ИсполнителиЗадач.mdo | 29 +- .../КалендарныеГрафики/Help/ru.html | 2 +- .../КурсыВалют/ManagerModule.bsl | 0 .../КурсыВалют/RecordSetModule.bsl | 69 +- .../Forms/ФормаЗаписи/Module.bsl | 30 +- .../Forms/Напоминание/Form.form | 6 +- .../Forms/Напоминание/Module.bsl | 2 +- .../Forms/ФормаОповещения/Form.form | 5 +- .../RecordSetModule.bsl | 4 + .../НастройкиВариантовОтчетов/Help/ru.html | 1 + .../ManagerModule.bsl | 60 + .../НастройкиВариантовОтчетов.mdo | 141 + .../Form.form | 129 +- .../ВерсионированиеОбъектов/Help/ru.html | 5 + .../Module.bsl | 5 +- .../Help/ru.html | 5 - .../RecordSetModule.bsl | 4 + .../НастройкиВерсионированияОбъектов.mdo | 6 +- .../НастройкиОтправителя/ManagerModule.bsl | 4 + .../НастройкаПодключенияКСервису}/Form.form | 417 +- .../НастройкаПодключенияКСервису/Module.bsl | 84 + .../Forms/ФормаЗаписи/Form.form | 420 +- .../Forms/ФормаЗаписи/Module.bsl | 114 +- .../НастройкиТранспортаОбмена/Help/ru.html | 6 +- .../ManagerModule.bsl | 17 +- .../RecordSetModule.bsl | 19 + .../НастройкиТранспортаОбмена.mdo | 67 +- .../Commands/Настройки/CommandModule.bsl | 33 +- .../Forms/ФормаЗаписи/Module.bsl | 29 +- .../ManagerModule.bsl | 5 +- .../ОбластиДанных/Forms/ФормаСписка/Form.form | 68 +- .../ОбластиДанных/ОбластиДанных.mdo | 18 + .../ОбластиКРезервномуКопированию.mdo | 73 + .../ОбластиПерсональныхДанных.mdo | 93 + ...тиТребующиеОбработкиПоставляемыхДанных.mdo | 106 + .../ManagerModule.bsl | 33 + .../ОбщиеНастройкиУзловИнформационныхБаз.mdo | 16 + .../ОчередьЗаданий/ОчередьЗаданий.mdo | 1 - .../ПодпискиПолучателей/ManagerModule.bsl | 4 + .../ПодпискиПолучателей/RecordSetModule.bsl | 4 + .../ВыбораРежимаОткрытияМакета/Form.form | 2 +- .../ВыбораРежимаОткрытияМакета/Help/ru.html | 2 +- .../Forms/МакетыПечатныхФорм/Form.form | 80 +- .../НастройкаКаталогаФайловПечати/Module.bsl | 2 +- .../ПоставляемыеДанныеТребующиеОбработки.mdo | 105 + .../ПраваПоЗначениямДоступа.mdo | 4 +- .../ПравилаКонвертацииОбъектов/Form.form | 1390 +++++ .../ПравилаКонвертацииОбъектов/Help/ru.html | 13 + .../ПравилаКонвертацииОбъектов/Module.bsl | 428 ++ .../Form.form | 117 +- .../ПравилаРегистрацииОбъектов}/Help/ru.html | 8 +- .../Module.bsl | 43 +- .../ПравилаДляОбменаДанными/ManagerModule.bsl | 41 + .../RecordSetModule.bsl | 138 + .../ПравилаДляОбменаДанными.mdo | 191 +- .../РабочиеКаталогиФайлов/RecordSetModule.bsl | 8 + .../СвязиПоставляемыхДанных.mdo | 25 +- .../СообщенияОбменаДанными/ManagerModule.bsl | 4 + .../ManagerModule.bsl | 4 + .../RecordSetModule.bsl | 4 + .../СостоянияОбменовДанными/ManagerModule.bsl | 4 + .../ManagerModule.bsl | 4 + .../ManagerModule.bsl | 4 + .../ТаблицыГруппДоступа.mdo | 4 +- .../RecordSetModule.bsl | 7 +- .../УдалитьКурсыВалютПоКлассификатору.mdo} | 6 +- .../СведенияОРегламентномЗадании/Form.form | 271 + .../СведенияОРегламентномЗадании/Module.bsl | 87 + .../Forms/ФормаОтчета/Form.form | 622 ++ .../Forms/ФормаОтчета/Module.bsl | 227 + .../АнализЖурналаРегистрации/Help/ru.html | 11 + .../ManagerModule.bsl | 1541 +++++ .../АнализЖурналаРегистрации/ObjectModule.bsl | 215 + .../Template.mxlx | 2 +- .../Template.dcs | 2233 +++++++ .../Template.mxlx | 3215 ++++++++++ .../Template.mxlx | 1123 ++++ .../АнализЖурналаРегистрации.mdo | 68 + SSL/src/Reports/АнализОпроса/ObjectModule.bsl | 4 + .../Reports/БизнесПроцессы/БизнесПроцессы.mdo | 1 + .../ДатыЗапретаЗагрузки/ObjectModule.bsl | 4 + .../ДатыЗапретаИзменения/ObjectModule.bsl | 4 + SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html | 2 +- .../Reports/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo | 1 + SSL/src/Reports/Задания/Задания.mdo | 1 + SSL/src/Reports/Задачи/Help/ru.html | 2 +- SSL/src/Reports/Задачи/Задачи.mdo | 1 + .../ЗадачиИстекающиеНаДату/Help/ru.html | 2 +- .../ЗадачиИстекающиеНаДату.mdo | 1 + .../ПраваДоступа/Forms/ФормаОтчета/Module.bsl | 472 +- .../Templates/Макет/Template.mxlx | 16 +- .../Reports/ПросроченныеЗадачи/Help/ru.html | 2 +- .../ПросроченныеЗадачи/ПросроченныеЗадачи.mdo | 1 + .../Roles/АдминистраторСистемы/Rights.rights | 1321 +++- SSL/src/Roles/Администрирование/Rights.rights | 19 + SSL/src/Roles/БазовыеПрава/Rights.rights | 397 +- .../Rights.rights | 803 ++- .../ВыполнениеОбменовДанными/Rights.rights | 380 +- .../Rights.rights | 406 +- .../Rights.rights | 417 ++ .../ДобавлениеИзменениеВариантовОтчетов.mdo | 2 +- .../Rights.rights | 362 ++ .../Rights.rights | 352 ++ .../Rights.rights | 955 ++- .../ДобавлениеИзменениеЗаданий/Rights.rights | 352 ++ .../Rights.rights | 370 +- .../Rights.rights | 409 +- .../ДобавлениеИзменениеОпросов/Rights.rights | 741 ++- .../Rights.rights | 741 ++- .../Rights.rights | 741 ++- .../Rights.rights | 352 ++ .../Rights.rights | 402 +- .../Rights.rights | 359 ++ .../Rights.rights | 741 ++- .../Rights.rights | 741 ++- SSL/src/Roles/ЗапускAutomation/Rights.rights | 803 ++- SSL/src/Roles/ЗапускВебКлиента/Rights.rights | 803 ++- .../Roles/ЗапускТолстогоКлиента/Rights.rights | 803 ++- .../Roles/ЗапускТонкогоКлиента/Rights.rights | 803 ++- .../ИзменениеВыполнениеЗадач/Rights.rights | 352 ++ .../Rights.rights | 793 ++- .../Rights.rights | 741 ++- .../Rights.rights | 352 ++ .../Rights.rights | 352 ++ .../Rights.rights | 352 ++ .../Rights.rights | 811 ++- .../Rights.rights | 701 +++ .../ИспользованиеВариантовОтчетов.mdo} | 4 +- .../Rights.rights | 748 ++- .../Roles/ИспользованиеЗаметок/Rights.rights | 352 ++ .../Rights.rights | 352 ++ .../Rights.rights | 433 ++ .../ИспользованиеИнформационногоЦентра.mdo | 8 + .../ИспользованиеНапоминаний/Rights.rights | 352 ++ .../Rights.rights | 354 +- SSL/src/Roles/ИспользованиеЭЦП/Rights.rights | 352 ++ .../Rights.rights | 23 + .../Rights.rights | 354 +- SSL/src/Roles/ПолныеПрава/Rights.rights | 1458 +++-- .../Rights.rights | 352 ++ .../РаботаСБиблиотекойФайлов/Rights.rights | 352 ++ .../Roles/РаботаСПапкамиФайлов/Rights.rights | 741 ++- .../Rights.rights | 741 ++- SSL/src/Roles/РежимВсеФункции/Rights.rights | 352 ++ .../Rights.rights | 352 ++ .../Rights.rights | 352 ++ .../Rights.rights | 527 +- .../Rights.rights | 527 +- .../Rights.rights | 6 - .../УдалитьПолныеПраваОбластиДанных.mdo | 8 - SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights | 359 ++ .../ЧтениеВариантовОтчетов/Rights.rights | 175 - .../Roles/ЧтениеВерсийОбъектов/Rights.rights | 352 ++ .../ЧтениеВнешнихПользователей/Rights.rights | 352 ++ .../Rights.rights | 752 ++- SSL/src/Roles/ЧтениеЗаданий/Rights.rights | 352 ++ SSL/src/Roles/ЧтениеЗадач/Rights.rights | 352 ++ .../ЧтениеОтветовНаВопросыАнкет/Rights.rights | 741 ++- .../Rights.rights | 741 ++- .../Roles/ЧтениеФизическихЛиц/Rights.rights | 741 ++- .../ЗагрузкаКурсовВалют/Schedule.schedule | 2 +- .../ЗаполнениеДанныхДляОграниченияДоступа.mdo | 2 +- .../ИзвлечениеТекста/ИзвлечениеТекста.mdo | 2 +- .../КонтрольЖурналаРегистрации.mdo | 14 - .../ПланированиеОбработкиЗаданий.mdo | 1 + .../Schedule.schedule | 22 + ...хронизацияДанныхСПриложениемВИнтернете.mdo | 15 + .../Schedule.schedule | 4 +- .../УдалениеНеактуальныхСообщенийОбмена.mdo | 15 + .../Forms/ВыборВариантаОтчета/Form.form | 711 +-- .../Forms/ВыборВариантаОтчета/Help/ru.html | 17 +- .../Forms/ВыборВариантаОтчета/Module.bsl | 269 +- .../ConditionalAppearance.dcssca | 105 +- .../Forms/СохранениеВариантаОтчета/Form.form | 2447 ++++---- .../СохранениеВариантаОтчета/Help/ru.html | 16 +- .../Forms/СохранениеВариантаОтчета/Module.bsl | 942 +-- .../ManagerModule.bsl | 318 +- .../ХранилищеВариантовОтчетов.mdo | 30 +- .../ВидДняВоскресеньеЦвет.mdo | 13 + .../ВидДняНеУказанЦвет/ВидДняНеУказанЦвет.mdo | 13 + .../ВидДняПраздникЦвет/ВидДняПраздникЦвет.mdo | 13 + .../ВидДняПредпраздничныйЦвет.mdo | 13 + .../ВидДняРабочийЦвет/ВидДняРабочийЦвет.mdo | 13 + .../ВидДняСубботаЦвет/ВидДняСубботаЦвет.mdo | 13 + .../ВидимыйВариантОтчета.mdo | 15 + .../ГруппаВариантовОтчетов.mdo | 14 + .../ДобавленныйРеквизитФон.mdo | 15 + .../ЗаголовокУдаленногоРеквизитаФон.mdo | 13 + .../ИзмененноеЗначениеРеквизитаФон.mdo | 13 + .../ИзмененноеЗначениеРеквизитаЦвет.mdo | 13 + ...ИнформацияСРедактированиемВДиалогеЦвет.mdo | 13 + .../СкрытыйВариантОтчета.mdo | 13 + .../УдаленныйРеквизитФон.mdo | 13 + .../ФонУправляющегоПоля.mdo} | 4 +- .../АдресныйКлассификатор.mdo | 1 + .../Help/ru.html | 4 +- .../АнализЖурналаРегистрации.mdo | 16 + .../Анкетирование/Анкетирование.mdo | 4 +- .../БазоваяФункциональность.mdo | 29 +- .../Subsystems/Банки/Банки.mdo | 1 - .../БизнесПроцессыИЗадачи/Help/ru.html | 2 +- .../Subsystems/Валюты/Help/ru.html | 2 +- .../Subsystems/Валюты/Валюты.mdo | 1 + .../ВариантыОтчетов/ВариантыОтчетов.mdo | 31 +- .../ВерсионированиеОбъектов/Help/ru.html | 2 +- .../ВерсионированиеОбъектов.mdo | 5 + .../Взаимодействия/Взаимодействия.mdo | 1 - .../ГрупповоеИзменениеОбъектов/Help/ru.html | 2 +- .../Help/ru.html | 2 +- .../ДополнительныеОтчетыИОбработки.mdo | 2 +- .../Help/ru.html | 2 +- .../ЗавершениеРаботыПользователей.mdo | 2 + .../Help/ru.html | 2 +- .../ЗащитаПерсональныхДанных.mdo | 2 + .../ИнформационныйЦентр.mdo | 21 + .../КалендарныеГрафики/Help/ru.html | 2 +- .../КалендарныеГрафики/КалендарныеГрафики.mdo | 6 + .../КонтактнаяИнформация/Help/ru.html | 2 +- .../КонтактнаяИнформация.mdo | 5 +- .../Help/ru.html | 2 +- .../КонтрольЖурналаРегистрации.mdo | 19 - .../НастройкаПорядкаЭлементов/Help/ru.html | 2 +- .../Subsystems/ОбменДанными/Help/ru.html | 2 +- .../Subsystems/ОбменДанными/ОбменДанными.mdo | 15 +- .../ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo | 3 + .../ОбновлениеКонфигурации/Help/ru.html | 2 +- .../ОбновлениеКонфигурации.mdo | 1 + .../CommandInterface.cmi | 6 - .../Subsystems/Печать/Help/ru.html | 2 +- .../Subsystems/Печать/Печать.mdo | 7 +- .../ПолнотекстовыйПоиск/Help/ru.html | 2 +- .../ПолнотекстовыйПоиск.mdo | 1 - .../ПолучениеФайловИзИнтернета/Help/ru.html | 2 +- .../Subsystems/Пользователи/Help/ru.html | 2 +- .../Subsystems/Пользователи/Пользователи.mdo | 10 +- .../ПрефиксацияОбъектов/Help/ru.html | 2 +- .../ПрефиксацияОбъектов.mdo | 4 +- .../ПрисоединенныеФайлы.mdo | 6 +- .../БазоваяФункциональностьВМоделиСервиса.mdo | 5 +- .../ВалютыВМоделиСервиса.mdo | 7 +- .../ОбменДаннымиВМоделиСервиса.mdo | 21 + .../ОбменСообщениями/ОбменСообщениями.mdo | 1 + .../ПоставляемыеДанные/ПоставляемыеДанные.mdo | 5 + .../РезервноеКопированиеОбластейДанных.mdo | 22 + .../УдаленноеАдминистрирование.mdo | 7 +- .../РаботаВМоделиСервиса.mdo | 1 + .../РаботаСПочтовымиСообщениями/Help/ru.html | 2 +- .../РаботаСПочтовымиСообщениями.mdo | 1 + .../Subsystems/РаботаСФайлами/Help/ru.html | 2 +- .../РаботаСФайлами/РаботаСФайлами.mdo | 6 +- .../РассылкаОтчетов/РассылкаОтчетов.mdo | 16 +- .../РегламентныеЗадания/Help/ru.html | 2 +- .../РегламентныеЗадания.mdo | 5 +- .../РезервноеКопированиеИБ.mdo | 1 + .../Subsystems/Свойства/Help/ru.html | 2 +- .../Subsystems/Свойства/Свойства.mdo | 6 +- .../УправлениеДоступом/Help/ru.html | 2 +- .../УправлениеДоступом/УправлениеДоступом.mdo | 4 +- .../УправлениеИтогамиИАгрегатами/Help/ru.html | 2 +- .../ФайловыеФункции/ФайловыеФункции.mdo | 14 +- .../ФизическиеЛица/ФизическиеЛица.mdo | 2 +- .../СтандартныеПодсистемы.mdo | 3 +- .../Forms/Дополнительно/Form.form | 77 +- .../Forms/Дополнительно/Help/ru.html | 2 +- .../Forms/ЗадачиПоБизнесПроцессу/Form.form | 187 +- .../Forms/ЗадачиПоБизнесПроцессу/Module.bsl | 78 +- .../Forms/ЗадачиПоПредмету/Form.form | 128 +- .../Forms/ЗадачиПоПредмету/Module.bsl | 17 +- .../Forms/МоиЗадачи/Help/ru.html | 2 +- .../МоиЗадачиДляРабочегоСтола/Help/ru.html | 2 +- .../Forms/ПеренаправитьЗадачи/Form.form | 12 +- .../Forms/ПеренаправитьЗадачи/Help/ru.html | 2 +- .../Forms/ФормаЗадачи/Form.form | 1049 ++-- .../Forms/ФормаЗадачи/Module.bsl | 13 + .../Forms/ФормаСписка/Form.form | 8 +- SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html | 2 +- .../Tasks/ЗадачаИсполнителя/ObjectModule.bsl | 12 +- SSL/src/WebServices/Exchange/Module.bsl | 12 +- .../Exchange_2_0_1_6/Exchange_2_0_1_6.mdo | 62 + .../WebServices/Exchange_2_0_1_6/Module.bsl | 63 +- SSL/src/WebServices/Files/Module.bsl | 4 +- .../WebServices/InterfaceVersion/Module.bsl | 8 +- .../WebServices/MessageExchange/Module.bsl | 9 +- .../MessageExchange_2_0_1_6.mdo | 14 + .../MessageExchange_2_0_1_6/Module.bsl | 14 +- .../Module.bsl | 5 + ...RemoteAdministrationOfExchange_2_0_1_6.mdo | 14 + .../CurrencyRates/CurrencyRates.mdo | 9 + .../XDTOPackages/CurrencyRates/Package.xdto | 8 + .../XDTOPackages/SuppliedData/Package.xdto | 51 + .../SuppliedData/SuppliedData.mdo | 9 + .../Package.xdto | 15 + ...вногоКопированияОбластейДанных_1_0_2_1.mdo | 9 + .../Package.xdto | 20 - .../Package.xdto | 12 + ...льУдаленногоАдминистрирования_1_0_2_1.mdo} | 8 +- SSL/src/XDTOPackages/Сообщения/Package.xdto | 27 + SSL/src/XDTOPackages/Сообщения/Сообщения.mdo | 9 + .../Package.xdto | 53 - .../Package.xdto | 42 + ...министрированиеВМоделиСервиса_1_0_2_1.mdo} | 8 +- .../Package.xdto | 12 + ...внымКопированиемОбластейДанных_1_0_2_1.mdo | 9 + 1669 files changed, 180835 insertions(+), 76818 deletions(-) rename SSL/src/Catalogs/Валюты/Forms/{ФормаПодбораВалютИзОКВ => ПодборВалютИзКлассификатора}/Form.form (80%) create mode 100644 SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html create mode 100644 SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl delete mode 100644 SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Module.bsl delete 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/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl create mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl create mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Form.form delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Module.bsl delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Module.bsl delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Form.form delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Module.bsl delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Form.form delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Module.bsl rename SSL/src/Catalogs/ВариантыОтчетов/Forms/{НастройкаГруппировкиПоРазделам => РазмещениеВРазделах}/Form.form (50%) create mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html create mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Form.form delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Module.bsl delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Form.form delete mode 100644 SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Module.bsl 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 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/ФормаЭлемента/Help/ru.html rename SSL/src/{DataProcessors/КонтрольЖурналаРегистрации => Catalogs/ЗначенияСвойствОбъектов}/ObjectModule.bsl (100%) rename SSL/src/Catalogs/{ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы => ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка}/Attributes/Список/ExtInfo/ListSettings.dcss (76%) create mode 100644 SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form create mode 100644 SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl create mode 100644 SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form create mode 100644 SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl create mode 100644 SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html rename SSL/src/Catalogs/{КлассификаторВалют/ManagerModule.bsl => ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl} (100%) create mode 100644 SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo delete mode 100644 SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form delete mode 100644 SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Module.bsl delete mode 100644 SSL/src/Catalogs/КлассификаторВалют/ObjectModule.bsl delete mode 100644 SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Attributes/ДеревоСвойств/ExtInfo/ListSettings.dcss delete mode 100644 SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Form.form delete mode 100644 SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Module.bsl rename SSL/src/{ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов => Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов}/Form.form (98%) rename SSL/src/{ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов => Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов}/Module.bsl (90%) delete mode 100644 SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Help/ru.html delete mode 100644 SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html create mode 100644 SSL/src/Catalogs/ОбщиеДанныеИнформационногоЦентра/ОбщиеДанныеИнформационногоЦентра.mdo create mode 100644 SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl create mode 100644 SSL/src/Catalogs/ПоставляемыеДанные/ПоставляемыеДанные.mdo create mode 100644 SSL/src/Catalogs/ТипыИнформацииИнформационногоЦентра/ТипыИнформацииИнформационногоЦентра.mdo rename SSL/src/Catalogs/{КлассификаторВалют => УдалитьКлассификаторВалют}/Help/ru.html (96%) rename SSL/src/{Constants/АдресатыПолученияОтчетаПоЖурналуРегистрации/ValueManagerModule.bsl => Catalogs/УдалитьКлассификаторВалют/ManagerModule.bsl} (100%) create mode 100644 SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl rename SSL/src/Catalogs/{КлассификаторВалют/КлассификаторВалют.mdo => УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo} (90%) rename SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/{ПроверкаУчетнойЗаписи => ПроверитьУчетнуюЗапись}/CommandModule.bsl (100%) create mode 100644 SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Commands/ЗначенияСвойстваОбъектов/CommandModule.bsl rename SSL/src/{Catalogs/КлассификаторВалют => ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения}/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss (94%) rename SSL/src/{Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств => ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора}/ConditionalAppearance.dcssca (81%) rename SSL/src/{Catalogs/ЗначенияСвойствОбъектов => ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения}/Forms/ФормаВыбора/Form.form (53%) create mode 100644 SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаВыбора/Module.bsl create mode 100644 SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаСписка/Module.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 delete mode 100644 SSL/src/CommonCommands/ДополнительныеСведения/CommandModule.bsl create mode 100644 SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/CommandModule.bsl create mode 100644 SSL/src/CommonCommands/ДополнительныеСведенияКоманднаяПанель/ДополнительныеСведенияКоманднаяПанель.mdo create mode 100644 SSL/src/CommonCommands/ДополнительныеСведенияПанельНавигации/CommandModule.bsl rename SSL/src/CommonCommands/{ДополнительныеСведения/ДополнительныеСведения.mdo => ДополнительныеСведенияПанельНавигации/ДополнительныеСведенияПанельНавигации.mdo} (79%) 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/CommonCommands/СоздатьРезервнуюКопию/CommandModule.bsl create mode 100644 SSL/src/CommonCommands/СоздатьРезервнуюКопию/СоздатьРезервнуюКопию.mdo create mode 100644 SSL/src/CommonForms/АвтономнаяРабота/Form.form create mode 100644 SSL/src/CommonForms/АвтономнаяРабота/Module.bsl rename SSL/src/CommonForms/{ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo => АвтономнаяРабота/АвтономнаяРабота.mdo} (57%) create mode 100644 SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Form.form create mode 100644 SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/Module.bsl create mode 100644 SSL/src/CommonForms/АвтономнаяРаботаВМоделиСервиса/АвтономнаяРаботаВМоделиСервиса.mdo delete mode 100644 SSL/src/CommonForms/ВсеОтчеты/ConditionalAppearance.dcssca 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 rename SSL/src/{DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета => CommonForms/ВыборПроизвольногоПериода}/Form.form (52%) create mode 100644 SSL/src/CommonForms/ВыборПроизвольногоПериода/Module.bsl create mode 100644 SSL/src/CommonForms/ВыборПроизвольногоПериода/ВыборПроизвольногоПериода.mdo create mode 100644 SSL/src/CommonForms/ВыборФорматаВложений/Form.form create mode 100644 SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl rename SSL/src/CommonForms/{НастройкаПечатныхФормПередОтправкой/НастройкаПечатныхФормПередОтправкой.mdo => ВыборФорматаВложений/ВыборФорматаВложений.mdo} (56%) delete mode 100644 SSL/src/CommonForms/ВыполнениеОбменаДанными/Form.form create mode 100644 SSL/src/CommonForms/ДополнительноеОписание/Form.form create mode 100644 SSL/src/CommonForms/ДополнительноеОписание/Module.bsl create mode 100644 SSL/src/CommonForms/ДополнительноеОписание/ДополнительноеОписание.mdo create mode 100644 SSL/src/CommonForms/ИнформационныйЦентр/Form.form create mode 100644 SSL/src/CommonForms/ИнформационныйЦентр/Module.bsl create mode 100644 SSL/src/CommonForms/ИнформационныйЦентр/ИнформационныйЦентр.mdo delete mode 100644 SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Module.bsl create mode 100644 SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Form.form create mode 100644 SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Module.bsl create mode 100644 SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/НастройкиРезервногоКопированияПриложений.mdo create mode 100644 SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Form.form create mode 100644 SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl create mode 100644 SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/ОтключениеАвтономногоРабочегоМеста.mdo create mode 100644 SSL/src/CommonForms/ОтображениеНовостей/Form.form create mode 100644 SSL/src/CommonForms/ОтображениеНовостей/Module.bsl create mode 100644 SSL/src/CommonForms/ОтображениеНовостей/ОтображениеНовостей.mdo create mode 100644 SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/Form.form create mode 100644 SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/Module.bsl create mode 100644 SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/ОтправкаПечатнойФормыПоПочте.mdo create mode 100644 SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Form.form create mode 100644 SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Module.bsl create mode 100644 SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/ОтправкаСообщенияВТехподдержку.mdo create mode 100644 SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form create mode 100644 SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl create mode 100644 SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/ОтправкаТабличныхДокументовПоПочте.mdo create mode 100644 SSL/src/CommonForms/ПанельОтчетов/Help/ru.html create mode 100644 SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Form.form create mode 100644 SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Help/ru.html create mode 100644 SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Module.bsl rename SSL/src/CommonForms/{ВсеОтчеты/ВсеОтчеты.mdo => ПарольДляСинхронизацииДанных/ПарольДляСинхронизацииДанных.mdo} (59%) rename SSL/src/{SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета => CommonForms/ПечатьДокументов}/ConditionalAppearance.dcssca (69%) rename SSL/src/CommonForms/{РедактированиеЗначенийСвойств => РедактированиеДополнительныхСведений}/Form.form (88%) rename SSL/src/CommonForms/{РедактированиеЗначенийСвойств => РедактированиеДополнительныхСведений}/Module.bsl (81%) rename SSL/src/CommonForms/{РедактированиеЗначенийСвойств/РедактированиеЗначенийСвойств.mdo => РедактированиеДополнительныхСведений/РедактированиеДополнительныхСведений.mdo} (66%) create mode 100644 SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form create mode 100644 SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl create mode 100644 SSL/src/CommonForms/СозданиеРезервнойКопии/СозданиеРезервнойКопии.mdo create mode 100644 SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form create mode 100644 SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl create mode 100644 SSL/src/CommonForms/СохранениеПечатнойФормы/СохранениеПечатнойФормы.mdo create mode 100644 SSL/src/CommonForms/ФормаВариантаОтчета/Form.form create mode 100644 SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl create mode 100644 SSL/src/CommonForms/ФормаВариантаОтчета/ФормаВариантаОтчета.mdo create mode 100644 SSL/src/CommonForms/ФормаНастроекОтчета/Form.form create mode 100644 SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl create mode 100644 SSL/src/CommonForms/ФормаНастроекОтчета/ФормаНастроекОтчета.mdo create mode 100644 SSL/src/CommonForms/ФормаОтчета/ConditionalAppearance.dcssca create mode 100644 SSL/src/CommonForms/ФормаОтчета/Form.form create mode 100644 SSL/src/CommonForms/ФормаОтчета/Module.bsl create mode 100644 SSL/src/CommonForms/ФормаОтчета/ФормаОтчета.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 create 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 create mode 100644 SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl rename SSL/src/CommonModules/{ОбменФайламиСобытия/ОбменФайламиСобытия.mdo => ВариантыОтчетовКлиентСервер/ВариантыОтчетовКлиентСервер.mdo} (63%) create mode 100644 SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl rename SSL/src/CommonModules/{СообщенияУдаленногоАдминистрированияПовтИсп/СообщенияУдаленногоАдминистрированияПовтИсп.mdo => ВариантыОтчетовПовтИсп/ВариантыОтчетовПовтИсп.mdo} (57%) create mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl rename SSL/src/CommonModules/{ДополнительныеОтчетыИОбработкиСобытия/ДополнительныеОтчетыИОбработкиСобытия.mdo => ДополнительныеОтчетыИОбработкиВызовСервера/ДополнительныеОтчетыИОбработкиВызовСервера.mdo} (60%) delete mode 100644 SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/Module.bsl create mode 100644 SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl create mode 100644 SSL/src/CommonModules/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo create mode 100644 SSL/src/CommonModules/ИнформационныйЦентрКлиент/Module.bsl rename SSL/src/CommonModules/{ВариантыОтчетовКлиентПереопределяемый/ВариантыОтчетовКлиентПереопределяемый.mdo => ИнформационныйЦентрКлиент/ИнформационныйЦентрКлиент.mdo} (54%) 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} (54%) delete mode 100644 SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/Module.bsl create mode 100644 SSL/src/CommonModules/КурсыВалютВМоделиСервиса/Module.bsl create mode 100644 SSL/src/CommonModules/КурсыВалютВМоделиСервиса/КурсыВалютВМоделиСервиса.mdo create mode 100644 SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl rename SSL/src/CommonModules/{РассылкаОтчетовКлиентПереопределяемый/РассылкаОтчетовКлиентПереопределяемый.mdo => ОбменДаннымиВМоделиСервисаКлиент/ОбменДаннымиВМоделиСервисаКлиент.mdo} (54%) 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 create mode 100644 SSL/src/CommonModules/ОбменДаннымиКлиентСервер/ОбменДаннымиКлиентСервер.mdo create mode 100644 SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl create mode 100644 SSL/src/CommonModules/ОбменСообщениямиВызовСервера/ОбменСообщениямиВызовСервера.mdo delete mode 100644 SSL/src/CommonModules/ОбменФайламиСобытия/Module.bsl create mode 100644 SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl create mode 100644 SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/ОбновлениеИнформационнойБазыВызовСервера.mdo create mode 100644 SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/Module.bsl rename SSL/src/CommonModules/{КонтрольЖурналаРегистрацииСлужебный/КонтрольЖурналаРегистрацииСлужебный.mdo => ОбновлениеИнформационнойБазыСобытия/ОбновлениеИнформационнойБазыСобытия.mdo} (56%) 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 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 create mode 100644 SSL/src/CommonModules/ОбщегоНазначенияВызовСервераПереопределяемый/ОбщегоНазначенияВызовСервераПереопределяемый.mdo create mode 100644 SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl create mode 100644 SSL/src/CommonModules/ПерепрефиксацияОбъектов/ПерепрефиксацияОбъектов.mdo delete mode 100644 SSL/src/CommonModules/ПолнотекстовыйПоискКлиентПереопределяемый/Module.bsl create mode 100644 SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl create mode 100644 SSL/src/CommonModules/ПользователиКлиентСервер/ПользователиКлиентСервер.mdo create mode 100644 SSL/src/CommonModules/ПользователиСлужебный/Module.bsl rename SSL/src/CommonModules/{ПользователиСобытия/ПользователиСобытия.mdo => ПользователиСлужебный/ПользователиСлужебный.mdo} (71%) 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 rename SSL/src/CommonModules/{ПользователиСерверПовтИсп => ПользователиСлужебныйПовтИсп}/Module.bsl (87%) rename SSL/src/CommonModules/{ПользователиСерверПовтИсп/ПользователиСерверПовтИсп.mdo => ПользователиСлужебныйПовтИсп/ПользователиСлужебныйПовтИсп.mdo} (54%) delete mode 100644 SSL/src/CommonModules/ПользователиСобытия/Module.bsl rename SSL/src/CommonModules/{ПрефиксацияОбъектов => ПрефиксацияОбъектовВызовСервера}/Module.bsl (86%) rename SSL/src/CommonModules/{ПрефиксацияОбъектов/ПрефиксацияОбъектов.mdo => ПрефиксацияОбъектовВызовСервера/ПрефиксацияОбъектовВызовСервера.mdo} (63%) create mode 100644 SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl rename SSL/src/CommonModules/{ПрисоединенныеФайлыСобытия/ПрисоединенныеФайлыСобытия.mdo => ПрефиксацияОбъектовПереопределяемый/ПрефиксацияОбъектовПереопределяемый.mdo} (56%) 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 delete mode 100644 SSL/src/CommonModules/ПрисоединенныеФайлыСобытия/Module.bsl delete mode 100644 SSL/src/CommonModules/РаботаСБанкамиВызовСервера/Module.bsl create mode 100644 SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl create mode 100644 SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/РаботаСКурсамиВалютВызовСервера.mdo create mode 100644 SSL/src/CommonModules/РаботаСФайлами/Module.bsl rename SSL/src/CommonModules/{РаботаСФайламиСобытия/РаботаСФайламиСобытия.mdo => РаботаСФайлами/РаботаСФайлами.mdo} (70%) create mode 100644 SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl create mode 100644 SSL/src/CommonModules/РаботаСФайламиСлужебный/РаботаСФайламиСлужебный.mdo delete mode 100644 SSL/src/CommonModules/РаботаСФайламиСобытия/Module.bsl delete mode 100644 SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl create mode 100644 SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl create mode 100644 SSL/src/CommonModules/РегламентныеЗаданияСлужебный/РегламентныеЗаданияСлужебный.mdo create mode 100644 SSL/src/CommonModules/РегламентныеЗаданияСлужебныйВызовСервера/Module.bsl create mode 100644 SSL/src/CommonModules/РегламентныеЗаданияСлужебныйВызовСервера/РегламентныеЗаданияСлужебныйВызовСервера.mdo rename SSL/src/CommonModules/{РегламентныеЗаданияГлобальный => РегламентныеЗаданияСлужебныйГлобальный}/Module.bsl (74%) rename SSL/src/CommonModules/{РегламентныеЗаданияГлобальный/РегламентныеЗаданияГлобальный.mdo => РегламентныеЗаданияСлужебныйГлобальный/РегламентныеЗаданияСлужебныйГлобальный.mdo} (66%) 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} (59%) 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 create mode 100644 SSL/src/CommonModules/СообщенияВМоделиСервиса/СообщенияВМоделиСервиса.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/СообщенияУдаленногоАдминистрирования/СообщенияУдаленногоАдминистрирования.mdo delete mode 100644 SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияПовтИсп/Module.bsl create mode 100644 SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl rename SSL/src/CommonModules/{УправлениеДоступомСобытия/УправлениеДоступомСобытия.mdo => УправлениеДоступомСлужебный/УправлениеДоступомСлужебный.mdo} (68%) rename SSL/src/CommonModules/{УправлениеДоступомСерверПовтИсп => УправлениеДоступомСлужебныйПовтИсп}/Module.bsl (99%) rename SSL/src/CommonModules/{УправлениеДоступомСерверПовтИсп/УправлениеДоступомСерверПовтИсп.mdo => УправлениеДоступомСлужебныйПовтИсп/УправлениеДоступомСлужебныйПовтИсп.mdo} (51%) delete mode 100644 SSL/src/CommonModules/УправлениеДоступомСобытия/Module.bsl 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 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 rename SSL/src/CommonModules/{ФайловыеФункцииКлиент => ФайловыеФункцииСлужебныйКлиент}/Module.bsl (53%) rename SSL/src/CommonModules/{ФайловыеФункцииКлиент/ФайловыеФункцииКлиент.mdo => ФайловыеФункцииСлужебныйКлиент/ФайловыеФункцииСлужебныйКлиент.mdo} (72%) create mode 100644 SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl rename SSL/src/CommonModules/{ФайловыеФункцииКлиентПовтИсп/ФайловыеФункцииКлиентПовтИсп.mdo => ФайловыеФункцииСлужебныйКлиентПовтИсп/ФайловыеФункцииСлужебныйКлиентПовтИсп.mdo} (68%) rename SSL/src/CommonModules/{ФайловыеФункцииКлиентСервер => ФайловыеФункцииСлужебныйКлиентСервер}/Module.bsl (93%) rename SSL/src/CommonModules/{ФайловыеФункцииКлиентСервер/ФайловыеФункцииКлиентСервер.mdo => ФайловыеФункцииСлужебныйКлиентСервер/ФайловыеФункцииСлужебныйКлиентСервер.mdo} (69%) create mode 100644 SSL/src/CommonModules/ФайловыеФункцииСлужебныйПовтИсп/Module.bsl rename SSL/src/CommonModules/{ФайловыеФункцииПовтИсп/ФайловыеФункцииПовтИсп.mdo => ФайловыеФункцииСлужебныйПовтИсп/ФайловыеФункцииСлужебныйПовтИсп.mdo} (52%) 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/ФизическиеЛицаПереопределяемый/ФизическиеЛицаПереопределяемый.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 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/CommonPictures/БыстрыеНастройкиОтчета/Picture.png create mode 100644 SSL/src/CommonPictures/БыстрыеНастройкиОтчета/БыстрыеНастройкиОтчета.mdo create mode 100644 SSL/src/CommonPictures/БыстрыйДоступ/Picture.png create mode 100644 SSL/src/CommonPictures/БыстрыйДоступ/БыстрыйДоступ.mdo create mode 100644 SSL/src/CommonPictures/БыстрыйДоступДобавить/Picture.png create mode 100644 SSL/src/CommonPictures/БыстрыйДоступДобавить/БыстрыйДоступДобавить.mdo create mode 100644 SSL/src/CommonPictures/БыстрыйДоступУдалить/Picture.png create mode 100644 SSL/src/CommonPictures/БыстрыйДоступУдалить/БыстрыйДоступУдалить.mdo delete mode 100644 SSL/src/CommonPictures/ЗакрепитьВариантОтчета/Picture.png delete mode 100644 SSL/src/CommonPictures/ЗакрепитьВариантОтчета/ЗакрепитьВариантОтчета.mdo delete mode 100644 SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.bmp create mode 100644 SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png delete mode 100644 SSL/src/CommonPictures/ОткрепитьВариантОтчета/Picture.png delete mode 100644 SSL/src/CommonPictures/ОткрепитьВариантОтчета/ОткрепитьВариантОтчета.mdo create mode 100644 SSL/src/CommonPictures/ПрочиеПользовательскиеНастройки/Picture.png create mode 100644 SSL/src/CommonPictures/ПрочиеПользовательскиеНастройки/ПрочиеПользовательскиеНастройки.mdo create mode 100644 SSL/src/CommonPictures/РассылкаОтчетов/Picture.png create mode 100644 SSL/src/CommonPictures/РассылкаОтчетов/РассылкаОтчетов.mdo create mode 100644 SSL/src/CommonPictures/СправкаВНачало/Picture.png create mode 100644 SSL/src/CommonPictures/СправкаВНачало/СправкаВНачало.mdo create mode 100644 SSL/src/CommonPictures/СправкаПереходВниз/Picture.png create mode 100644 SSL/src/CommonPictures/СправкаПереходВниз/СправкаПереходВниз.mdo create mode 100644 SSL/src/CommonPictures/СтатусыДокумента/Picture.png create mode 100644 SSL/src/CommonPictures/СтатусыДокумента/СтатусыДокумента.mdo create mode 100644 SSL/src/CommonPictures/СтрелкаВнизСправка/Picture.png create mode 100644 SSL/src/CommonPictures/СтрелкаВнизСправка/СтрелкаВнизСправка.mdo create mode 100644 SSL/src/CommonPictures/ЭлектронноеПисьмо/Picture.png create mode 100644 SSL/src/CommonPictures/ЭлектронноеПисьмо/ЭлектронноеПисьмо.mdo create mode 100644 SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/Template.htmldoc create mode 100644 SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html create mode 100644 SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ИнструкцияКакВыполнитьУстановкуОбновленияВручную.mdo delete mode 100644 SSL/src/Constants/АдресатыПолученияОтчетаПоЖурналуРегистрации/АдресатыПолученияОтчетаПоЖурналуРегистрации.mdo create mode 100644 SSL/src/Constants/ИспользоватьАвтономнуюРаботуВМоделиСервиса/ИспользоватьАвтономнуюРаботуВМоделиСервиса.mdo rename SSL/src/Constants/{КаталогВременныхФайловСообщенийОбменаДляLinux/КаталогВременныхФайловСообщенийОбменаДляLinux.mdo => КаталогВременныхФайловДляLinux/КаталогВременныхФайловДляLinux.mdo} (77%) rename SSL/src/Constants/{КаталогВременныхФайловСообщенийОбменаДляWindows => КаталогВременныхФайловДляWindows}/ValueManagerModule.bsl (100%) rename SSL/src/Constants/{КаталогВременныхФайловСообщенийОбменаДляWindows/КаталогВременныхФайловСообщенийОбменаДляWindows.mdo => КаталогВременныхФайловДляWindows/КаталогВременныхФайловДляWindows.mdo} (77%) create mode 100644 SSL/src/Constants/КлючОбластиДанных/КлючОбластиДанных.mdo create mode 100644 SSL/src/Constants/НастройкаАвтономногоРабочегоМестаЗавершена/НастройкаАвтономногоРабочегоМестаЗавершена.mdo create mode 100644 SSL/src/Constants/ПоддержкаРезервногоКопирования/ValueManagerModule.bsl create mode 100644 SSL/src/Constants/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo create mode 100644 SSL/src/Constants/ПрефиксПоследнегоАвтономногоРабочегоМеста/ПрефиксПоследнегоАвтономногоРабочегоМеста.mdo create mode 100644 SSL/src/Constants/СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы/СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы.mdo create mode 100644 SSL/src/Constants/СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы/СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы.mdo create mode 100644 SSL/src/Constants/СообщениеОбменаДаннымиИзГлавногоУзла/СообщениеОбменаДаннымиИзГлавногоУзла.mdo create mode 100644 SSL/src/Constants/ТребуетсяОбновлениеИнформационнойБазы/ТребуетсяОбновлениеИнформационнойБазы.mdo create mode 100644 SSL/src/Constants/ЭтоАвтономноеРабочееМесто/ЭтоАвтономноеРабочееМесто.mdo create mode 100644 SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form rename SSL/src/{CommonForms/ВыполнениеОбменаДанными => DataProcessors/ВыполнениеОбменаДанными/Forms/Форма}/Module.bsl (65%) create mode 100644 SSL/src/DataProcessors/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo delete mode 100644 SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Help/ru.html 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/УстановкаПочтовыхАдресовДляОтправкиОтчета/Help/ru.html delete mode 100644 SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Module.bsl delete mode 100644 SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Help/ru.html delete mode 100644 SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ManagerModule.bsl delete mode 100644 SSL/src/DataProcessors/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo create mode 100644 SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl create mode 100644 SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl 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/ВыборНастроек/Help/ru.html create mode 100644 SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl rename SSL/src/{Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем => DataProcessors/НастройкиПользователей/Forms/ВыборПользователей}/ConditionalAppearance.dcssca (62%) 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/НастройкиПользователей/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/НастройкиПользователей/ManagerModule.bsl create mode 100644 SSL/src/DataProcessors/НастройкиПользователей/ObjectModule.bsl create mode 100644 SSL/src/DataProcessors/НастройкиПользователей/НастройкиПользователей.mdo rename SSL/src/DataProcessors/ОценкаПроизводительности/Forms/{ИсторияВыполнения => ИсторияВыполнеия}/Form.form (100%) rename SSL/src/DataProcessors/ОценкаПроизводительности/Forms/{ИсторияВыполнения => ИсторияВыполнеия}/Module.bsl (82%) 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/НастройкаНаСторонеАвтономногоРабочегоМеста/Items/КартинкаСозданиеЛокальногоРабочегоМеста/Picture.png create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Module.bsl create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Items/КартинкаСозданиеЛокальногоРабочегоМеста/Picture.png create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Module.bsl create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ManagerModule.bsl create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/Template.htmldoc create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/Template.htmldoc create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html create mode 100644 SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ПомощникСозданияАвтономногоРабочегоМеста.mdo create mode 100644 SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form create mode 100644 SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl create mode 100644 SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form create mode 100644 SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl create mode 100644 SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаРедактораТекстовогоДокумента/Form.form delete mode 100644 SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаСообщенияОбОбычномРежиме/Form.form delete mode 100644 SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Form.form delete mode 100644 SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Module.bsl delete mode 100644 SSL/src/DataProcessors/УправлениеНастройкамиФорм/Help/ru.html delete mode 100644 SSL/src/DataProcessors/УправлениеНастройкамиФорм/ObjectModule.bsl delete mode 100644 SSL/src/DataProcessors/УправлениеНастройкамиФорм/УправлениеНастройкамиФорм.mdo create mode 100644 SSL/src/Enums/ДоступныеПериодыОтчета/ДоступныеПериодыОтчета.mdo rename SSL/src/Enums/{ТипыВариантовОтчетов/ТипыВариантовОтчетов.mdo => ТипыОтчетов/ТипыОтчетов.mdo} (74%) rename SSL/src/EventSubscriptions/{НастроитьПорядокВариантовОтветовАнкет/НастроитьПорядокВариантовОтветовАнкет.mdo => ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания.mdo} (65%) rename SSL/src/EventSubscriptions/{СброситьПорядокВариантовОтветовАнкет/СброситьПорядокВариантовОтветовАнкет.mdo => ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания.mdo} (65%) rename SSL/src/EventSubscriptions/{НастроитьПорядокВидовКонтактнойИнформации/НастроитьПорядокВидовКонтактнойИнформации.mdo => ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания.mdo} (64%) rename SSL/src/EventSubscriptions/{СброситьПорядокВидовКонтактнойИнформации/СброситьПорядокВидовКонтактнойИнформации.mdo => ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания.mdo} (64%) create mode 100644 SSL/src/EventSubscriptions/ИгнорироватьОтправкуНеразделенныхДанныхВСервис/ИгнорироватьОтправкуНеразделенныхДанныхВСервис.mdo create mode 100644 SSL/src/EventSubscriptions/ИгнорироватьПолучениеНеразделенныхДанныхВСервисе/ИгнорироватьПолучениеНеразделенныхДанныхВСервисе.mdo create mode 100644 SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете/ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете.mdo create mode 100644 SSL/src/EventSubscriptions/ПриОтправкеДанныхГлавному/ПриОтправкеДанныхГлавному.mdo create mode 100644 SSL/src/EventSubscriptions/ПриПолученииДанныхОтГлавного/ПриПолученииДанныхОтГлавного.mdo create mode 100644 SSL/src/FunctionalOptions/ИспользоватьАвтономнуюРаботуВМоделиСервиса/ИспользоватьАвтономнуюРаботуВМоделиСервиса.mdo create mode 100644 SSL/src/FunctionalOptions/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo create mode 100644 SSL/src/FunctionalOptions/РаботаВАвтономномРежиме/РаботаВАвтономномРежиме.mdo create mode 100644 SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo rename SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/{ОткрытьАдресныйКлассификатор => АдресныйКлассификатор}/CommandModule.bsl (78%) rename SSL/src/{CommonForms/НастройкаПечатныхФормПередОтправкой => InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте}/Form.form (56%) create mode 100644 SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html rename SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/{АутентификацияНаПользовательскомСайте => АвторизацияНаПользовательскомСайте}/Module.bsl (68%) rename SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/{ФормаУправленияАдреснымКлассификатором => АдресныйКлассификатор}/Form.form (100%) rename SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/{ФормаУправленияАдреснымКлассификатором => АдресныйКлассификатор}/Help/ru.html (91%) rename SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/{ФормаУправленияАдреснымКлассификатором => АдресныйКлассификатор}/Module.bsl (89%) delete mode 100644 SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Help/ru.html rename SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/{ФормаЗагрузкиАдресногоКлассификатора => ЗагрузкаАдресногоКлассификатора}/Form.form (71%) create mode 100644 SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html rename SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/{ФормаЗагрузкиАдресногоКлассификатора => ЗагрузкаАдресногоКлассификатора}/Module.bsl (77%) rename SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/{ФормаОчисткиАдресногоКлассификатора => ОчисткаАдресногоКлассификатора}/Form.form (100%) create mode 100644 SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html rename SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/{ФормаОчисткиАдресногоКлассификатора => ОчисткаАдресногоКлассификатора}/Module.bsl (100%) delete mode 100644 SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Help/ru.html delete mode 100644 SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Help/ru.html create mode 100644 SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl rename SSL/src/{Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Attributes/Список => InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Attributes/Исполнители}/ExtInfo/ListSettings.dcss (55%) rename SSL/src/{Catalogs/КлассификаторВалют/Forms/ФормаВыбора => InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли}/Form.form (60%) create mode 100644 SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html create mode 100644 SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl create mode 100644 SSL/src/InformationRegisters/КурсыВалют/ManagerModule.bsl create mode 100644 SSL/src/InformationRegisters/НастройкиВариантовОтчетов/Help/ru.html create mode 100644 SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl create mode 100644 SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo rename SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/{ФормаНастройкиВерсионированияОбъектов => ВерсионированиеОбъектов}/Form.form (94%) create mode 100644 SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Help/ru.html rename SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/{ФормаНастройкиВерсионированияОбъектов => ВерсионированиеОбъектов}/Module.bsl (98%) delete mode 100644 SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Help/ru.html rename SSL/src/InformationRegisters/{АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте => НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису}/Form.form (53%) create mode 100644 SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl create mode 100644 SSL/src/InformationRegisters/ОбластиКРезервномуКопированию/ОбластиКРезервномуКопированию.mdo create mode 100644 SSL/src/InformationRegisters/ОбластиПерсональныхДанных/ОбластиПерсональныхДанных.mdo create mode 100644 SSL/src/InformationRegisters/ОбластиТребующиеОбработкиПоставляемыхДанных/ОбластиТребующиеОбработкиПоставляемыхДанных.mdo create mode 100644 SSL/src/InformationRegisters/ПоставляемыеДанныеТребующиеОбработки/ПоставляемыеДанныеТребующиеОбработки.mdo create mode 100644 SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form create mode 100644 SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html create mode 100644 SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl rename SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/{ФормаЗаписи => ПравилаРегистрацииОбъектов}/Form.form (92%) rename SSL/src/InformationRegisters/ПравилаДляОбменаДанными/{ => Forms/ПравилаРегистрацииОбъектов}/Help/ru.html (58%) rename SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/{ФормаЗаписи => ПравилаРегистрацииОбъектов}/Module.bsl (87%) rename SSL/src/InformationRegisters/{КурсыВалютПоКлассификатору => УдалитьКурсыВалютПоКлассификатору}/RecordSetModule.bsl (84%) rename SSL/src/InformationRegisters/{КурсыВалютПоКлассификатору/КурсыВалютПоКлассификатору.mdo => УдалитьКурсыВалютПоКлассификатору/УдалитьКурсыВалютПоКлассификатору.mdo} (94%) create mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form create mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl create mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form create 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 rename SSL/src/{DataProcessors/КонтрольЖурналаРегистрации => Reports/АнализЖурналаРегистрации}/Templates/МакетОтчетаПоОшибкамВЖурналеРегистрации/Template.mxlx (98%) create mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs create mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx create mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/Templates/РасшифровкаРегламентныхЗаданий/Template.mxlx create mode 100644 SSL/src/Reports/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo create mode 100644 SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights rename SSL/src/Roles/{ЧтениеВариантовОтчетов/ЧтениеВариантовОтчетов.mdo => ИспользованиеВариантовОтчетов/ИспользованиеВариантовОтчетов.mdo} (57%) create mode 100644 SSL/src/Roles/ИспользованиеИнформационногоЦентра/Rights.rights create 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/ScheduledJobs/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo create mode 100644 SSL/src/ScheduledJobs/СинхронизацияДанныхСПриложениемВИнтернете/Schedule.schedule create mode 100644 SSL/src/ScheduledJobs/СинхронизацияДанныхСПриложениемВИнтернете/СинхронизацияДанныхСПриложениемВИнтернете.mdo rename SSL/src/ScheduledJobs/{КонтрольЖурналаРегистрации => УдалениеНеактуальныхСообщенийОбмена}/Schedule.schedule (74%) create mode 100644 SSL/src/ScheduledJobs/УдалениеНеактуальныхСообщенийОбмена/УдалениеНеактуальныхСообщенийОбмена.mdo rename SSL/src/{Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам => SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета}/ConditionalAppearance.dcssca (50%) create mode 100644 SSL/src/StyleItems/ВидДняВоскресеньеЦвет/ВидДняВоскресеньеЦвет.mdo create mode 100644 SSL/src/StyleItems/ВидДняНеУказанЦвет/ВидДняНеУказанЦвет.mdo create mode 100644 SSL/src/StyleItems/ВидДняПраздникЦвет/ВидДняПраздникЦвет.mdo create mode 100644 SSL/src/StyleItems/ВидДняПредпраздничныйЦвет/ВидДняПредпраздничныйЦвет.mdo create mode 100644 SSL/src/StyleItems/ВидДняРабочийЦвет/ВидДняРабочийЦвет.mdo create mode 100644 SSL/src/StyleItems/ВидДняСубботаЦвет/ВидДняСубботаЦвет.mdo create mode 100644 SSL/src/StyleItems/ВидимыйВариантОтчета/ВидимыйВариантОтчета.mdo create mode 100644 SSL/src/StyleItems/ГруппаВариантовОтчетов/ГруппаВариантовОтчетов.mdo create mode 100644 SSL/src/StyleItems/ДобавленныйРеквизитФон/ДобавленныйРеквизитФон.mdo create mode 100644 SSL/src/StyleItems/ЗаголовокУдаленногоРеквизитаФон/ЗаголовокУдаленногоРеквизитаФон.mdo create mode 100644 SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаФон/ИзмененноеЗначениеРеквизитаФон.mdo create mode 100644 SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаЦвет/ИзмененноеЗначениеРеквизитаЦвет.mdo create mode 100644 SSL/src/StyleItems/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет.mdo create mode 100644 SSL/src/StyleItems/СкрытыйВариантОтчета/СкрытыйВариантОтчета.mdo create mode 100644 SSL/src/StyleItems/УдаленныйРеквизитФон/УдаленныйРеквизитФон.mdo rename SSL/src/StyleItems/{ФонВыделенияЦвет/ФонВыделенияЦвет.mdo => ФонУправляющегоПоля/ФонУправляющегоПоля.mdo} (80%) rename SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/{КонтрольЖурналаРегистрации => АнализЖурналаРегистрации}/Help/ru.html (56%) create mode 100644 SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo create mode 100644 SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнформационныйЦентр/ИнформационныйЦентр.mdo delete mode 100644 SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo create mode 100644 SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/РезервноеКопированиеОбластейДанных/РезервноеКопированиеОбластейДанных.mdo create mode 100644 SSL/src/XDTOPackages/CurrencyRates/CurrencyRates.mdo create mode 100644 SSL/src/XDTOPackages/CurrencyRates/Package.xdto create mode 100644 SSL/src/XDTOPackages/SuppliedData/Package.xdto create mode 100644 SSL/src/XDTOPackages/SuppliedData/SuppliedData.mdo create mode 100644 SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1/Package.xdto create mode 100644 SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1.mdo delete mode 100644 SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/Package.xdto create mode 100644 SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_1/Package.xdto rename SSL/src/XDTOPackages/{КонтрольУдаленногоАдминистрирования/КонтрольУдаленногоАдминистрирования.mdo => КонтрольУдаленногоАдминистрирования_1_0_2_1/КонтрольУдаленногоАдминистрирования_1_0_2_1.mdo} (58%) create mode 100644 SSL/src/XDTOPackages/Сообщения/Package.xdto create mode 100644 SSL/src/XDTOPackages/Сообщения/Сообщения.mdo delete mode 100644 SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/Package.xdto create mode 100644 SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1/Package.xdto rename SSL/src/XDTOPackages/{УдаленноеАдминистрированиеВМоделиСервиса/УдаленноеАдминистрированиеВМоделиСервиса.mdo => УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1.mdo} (56%) create mode 100644 SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1/Package.xdto create mode 100644 SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1.mdo diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Form.form index fb190f449..86f92baf6 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Form.form @@ -12,7 +12,7 @@ false ГруппаСостояниеРасширеннаяПодсказка - 238 + 260 Label true true @@ -31,28 +31,115 @@ - ГруппаШапка - 154 + Шапка + 232 - ГруппаЗаголовок - 109 - - Автор - 51 - - <key>ru</key> - <value>Автор</value> - + ГруппыШапки + 233 + + ГруппаАвторИсполнитель + 234 + + Автор + 235 + true + true + + true + + + Объект.Автор + + + АвторРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 236 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Исполнитель + 237 + true + true + + true + + + Объект.Исполнитель + + + ru + Исполнитель + + + ИсполнительРасширеннаяПодсказка + 266 + Label + true + true + + Left + + + + ИсполнительКонтекстноеМеню + 238 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + true + true + true + true + Normal + + + true true true - - Объект.Автор - + + <key>ru</key> + <value>Автор и исполнитель</value> + - АвторРасширеннаяПодсказка - 241 + ГруппаАвторИсполнительРасширеннаяПодсказка + 263 Label true true @@ -60,45 +147,122 @@ Left - - АвторКонтекстноеМеню - 52 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - - АвторСтрокой - 160 - - <key>ru</key> - <value>Автор</value> - + + ГруппаДатаИСрок + 239 + + Дата + 240 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 269 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 241 + true + + InputField + true + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + СрокИсполнения + 242 + true + true + + true + + + Объект.СрокИсполнения + + + ru + Срок исполнения + + + СрокИсполненияРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + СрокИсполненияКонтекстноеМеню + 243 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + false + true + true + true + true + Normal + + true true true - - Объект.АвторСтрокой - + + <key>ru</key> + <value>Дата и срок</value> + - АвторСтрокойРасширеннаяПодсказка - 243 + ГруппаДатаИСрокРасширеннаяПодсказка + 268 Label true true @@ -106,168 +270,124 @@ Left - - АвторСтрокойКонтекстноеМеню - 161 - true - - InputField - true - Enter - true - Left - true - - 20 - true - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - - Дата - 152 - true - true - - true - - - Объект.Date - - - ДатаРасширеннаяПодсказка + + ГруппаНомерИВажность + 244 + + Номер 245 - Label - true - true - - Left + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 246 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal - - - ДатаКонтекстноеМеню - 153 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - Номер - 149 + + + Важность + 247 + true + true + + true + + + Объект.Важность + + + ВажностьРасширеннаяПодсказка + 276 + Label + true + true + + Left + + + + ВажностьКонтекстноеМеню + 248 + true + + InputField + Enter + true + Left + true + Left + + 10 + true + true + false + true + true + true + Normal + + true true true - - Объект.Number - - - НомерРасширеннаяПодсказка - 247 - Label - true - true - - Left - - - - НомерКонтекстноеМеню - 150 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа заголовок</value> - - - ru - Группа заголовок - - - ГруппаЗаголовокРасширеннаяПодсказка - 240 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаИсполнение - 28 - - Исполнитель - 20 <key>ru</key> - <value>Исполнитель</value> + <value>Номер и важность</value> - true - true - - true - - - ИсполнительСтрокой - - - ru - Исполнитель - + + System.DefaultGUIFont + true + false + false + false + + true - ИсполнительРасширеннаяПодсказка - 250 + ГруппаНомерИВажностьРасширеннаяПодсказка + 273 Label true true @@ -275,117 +395,14 @@ Left - - ИсполнительКонтекстноеМеню - 21 - true - - InputField - true - Enter - true - Left - true - Left - - 20 - true - true - true - true - true - true - Normal - - - - СрокИсполнения - 12 - true - true - - true - - - Объект.СрокИсполнения - - - ru - Срок исполнения - - - СрокИсполненияРасширеннаяПодсказка - 252 - Label - true - true - - Left - - - - СрокИсполненияКонтекстноеМеню - 13 - true - - InputField - true - Enter - true - Left - true - Left - - true - true - true - true - true - true - Normal - - - - Важность - 16 - true - true - - true - - - Объект.Важность - - - ВажностьРасширеннаяПодсказка - 254 - Label - true - true - - Left - - - - ВажностьКонтекстноеМеню - 17 - true - - InputField - Enter - true - Left - true - Left - - 10 - true - true - false - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -395,19 +412,11 @@ <key>ru</key> - <value>Исполнение</value> + <value>Группы шапки</value> - - System.DefaultGUIFont - true - false - false - false - - true - ГруппаИсполнениеРасширеннаяПодсказка - 249 + ГруппыШапкиРасширеннаяПодсказка + 262 Label true true @@ -426,10 +435,10 @@ ГруппаПриоритет - 155 + 249 СрокНачалаИсполнения - 119 + 250 true true @@ -448,7 +457,7 @@ СрокНачалаИсполненияРасширеннаяПодсказка - 257 + 279 Label true true @@ -458,7 +467,7 @@ СрокНачалаИсполненияКонтекстноеМеню - 120 + 251 true InputField @@ -482,7 +491,7 @@ СрокНачалаИсполненияВремя - 135 + 252 true true @@ -498,7 +507,7 @@ СрокНачалаИсполненияВремяРасширеннаяПодсказка - 259 + 281 Label true true @@ -508,7 +517,7 @@ СрокНачалаИсполненияВремяКонтекстноеМеню - 136 + 253 true InputField @@ -538,7 +547,7 @@ ГруппаПриоритетРасширеннаяПодсказка - 256 + 278 Label true true @@ -560,9 +569,13 @@ true + + <key>ru</key> + <value>Шапка</value> + - ГруппаШапкаРасширеннаяПодсказка - 239 + ШапкаРасширеннаяПодсказка + 261 Label true true @@ -574,6 +587,7 @@ Vertical Auto + StrongSeparation true true Auto @@ -602,7 +616,7 @@ НаименованиеРасширеннаяПодсказка - 264 + 286 Label true true @@ -649,7 +663,7 @@ Left СодержаниеРасширеннаяПодсказка - 266 + 288 Label true true @@ -700,7 +714,7 @@ ГруппаНаименованиеСодержаниеРасширеннаяПодсказка - 263 + 285 Label true true @@ -744,7 +758,7 @@ ФайлыПодписанЭЦПРасширеннаяПодсказка - 298 + 320 Label true true @@ -791,7 +805,7 @@ ФайлыЗашифрованРасширеннаяПодсказка - 300 + 322 Label true true @@ -841,7 +855,7 @@ ФайлыИндексКартинкиРасширеннаяПодсказка - 303 + 325 Label true true @@ -889,7 +903,7 @@ ФайлыНаименованиеРасширеннаяПодсказка - 305 + 327 Label true true @@ -926,7 +940,7 @@ ФайлыОписаниеРасширеннаяПодсказка - 307 + 329 Label true true @@ -964,7 +978,7 @@ ФайлыГруппаНаименованиеРасширеннаяПодсказка - 302 + 324 Label true true @@ -1006,10 +1020,10 @@ ФайлыСтрокаПоиска - 289 + 311 ФайлыСтрокаПоискаРасширеннаяПодсказка - 291 + 313 Label true true @@ -1019,7 +1033,7 @@ ФайлыСтрокаПоискаКонтекстноеМеню - 290 + 312 true Файлы @@ -1029,10 +1043,10 @@ ФайлыСостояниеПросмотра - 292 + 314 ФайлыСостояниеПросмотраРасширеннаяПодсказка - 294 + 316 Label true true @@ -1042,7 +1056,7 @@ ФайлыСостояниеПросмотраКонтекстноеМеню - 293 + 315 true ViewStatusAddition @@ -1053,10 +1067,10 @@ ФайлыУправлениеПоиском - 295 + 317 ФайлыУправлениеПоискомРасширеннаяПодсказка - 297 + 319 Label true true @@ -1066,7 +1080,7 @@ ФайлыУправлениеПоискомКонтекстноеМеню - 296 + 318 true SearchControlAddition @@ -1077,7 +1091,7 @@ ФайлыРасширеннаяПодсказка - 288 + 310 Label true true @@ -1098,7 +1112,7 @@ ФайлыКонтекстноеМенюСоздатьРасширеннаяПодсказка - 268 + 290 Label true true @@ -1132,7 +1146,7 @@ ГруппаКонтекстноеМенюРасширеннаяПодсказка - 269 + 291 Label true true @@ -1154,7 +1168,7 @@ ФайлыКонтекстноеМенюОткрытьФайлРасширеннаяПодсказка - 270 + 292 Label true true @@ -1180,7 +1194,7 @@ ФайлыКонтекстноеМенюРедактироватьРасширеннаяПодсказка - 271 + 293 Label true true @@ -1206,7 +1220,7 @@ ФайлыКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка - 272 + 294 Label true true @@ -1232,7 +1246,7 @@ ФайлыКонтекстноеМенюЗанятьРасширеннаяПодсказка - 273 + 295 Label true true @@ -1258,7 +1272,7 @@ ФайлыКонтекстноеМенюСохранитьИзмененияРасширеннаяПодсказка - 274 + 296 Label true true @@ -1284,7 +1298,7 @@ ФайлыКонтекстноеМенюСохранитьКакРасширеннаяПодсказка - 275 + 297 Label true true @@ -1310,7 +1324,7 @@ ФайлыКонтекстноеМенюОсвободитьРасширеннаяПодсказка - 276 + 298 Label true true @@ -1336,7 +1350,7 @@ ФайлыКонтекстноеМенюОбновитьИзФайлаНаДискеРасширеннаяПодсказка - 277 + 299 Label true true @@ -1368,7 +1382,7 @@ ФайлыКонтекстноеМенюПодписатьФайлРасширеннаяПодсказка - 280 + 302 Label true true @@ -1394,7 +1408,7 @@ ФайлыКонтекстноеМенюДобавитьЭЦПИзФайлаРасширеннаяПодсказка - 281 + 303 Label true true @@ -1420,7 +1434,7 @@ ФайлыКонтекстноеМенюСохранитьВместеСЭЦПРасширеннаяПодсказка - 282 + 304 Label true true @@ -1451,7 +1465,7 @@ ФайлыКонтекстноеМенюГруппаЭЦПРасширеннаяПодсказка - 279 + 301 Label true true @@ -1474,7 +1488,7 @@ ФайлыКонтекстноеМенюЗашифроватьРасширеннаяПодсказка - 284 + 306 Label true true @@ -1500,7 +1514,7 @@ ФайлыКонтекстноеМенюРасшифроватьРасширеннаяПодсказка - 285 + 307 Label true true @@ -1531,7 +1545,7 @@ ФайлыКонтекстноеМенюГруппаШифрованиеРасширеннаяПодсказка - 283 + 305 Label true true @@ -1556,7 +1570,7 @@ ФайлыКонтекстноеМенюГруппаЭЦПИШифрованиеРасширеннаяПодсказка - 278 + 300 Label true true @@ -1583,7 +1597,7 @@ ФайлыКонтекстноеМенюИмпортФайловРасширеннаяПодсказка - 287 + 309 Label true true @@ -1614,7 +1628,7 @@ ГруппаИмпортРасширеннаяПодсказка - 286 + 308 Label true true @@ -1678,7 +1692,7 @@ ГруппаЗадачаФайлыРасширеннаяПодсказка - 262 + 284 Label true true @@ -1715,7 +1729,7 @@ ДекорацияПредметРасширеннаяПодсказка - 319 + 341 Label true true @@ -1749,7 +1763,7 @@ None ПредметРасширеннаяПодсказка - 320 + 342 Label true true @@ -1792,7 +1806,7 @@ ГруппаПодписьСсылкаРасширеннаяПодсказка - 318 + 340 Label true true @@ -1827,7 +1841,7 @@ None ПредметHTMLРасширеннаяПодсказка - 322 + 344 Label true true @@ -1872,7 +1886,7 @@ None ПредметMXLРасширеннаяПодсказка - 324 + 346 Label true true @@ -1923,7 +1937,7 @@ ГруппаПредметРасширеннаяПодсказка - 317 + 339 Label true true @@ -1950,16 +1964,10 @@ ru Содержание - - System.DefaultGUIFont - true - false - false - false - + ГруппаСодержаниеРасширеннаяПодсказка - 261 + 283 Label true true @@ -1971,10 +1979,9 @@ Vertical Auto - WeakSeparation + NormalSeparation true true - auto Auto Auto @@ -2001,7 +2008,7 @@ ОписаниеРезультатаРасширеннаяПодсказка - 327 + 349 Label true true @@ -2044,7 +2051,7 @@ false ВыполненоРасширеннаяПодсказка - 330 + 352 Label true true @@ -2057,6 +2064,7 @@ Normal PictureAndText true + 1 true UserCmds Auto @@ -2072,7 +2080,7 @@ false ОтклоненоРасширеннаяПодсказка - 331 + 353 Label true true @@ -2083,10 +2091,14 @@ UsualButton Form.Command.Отменено Normal - Auto + PictureAndText true + 1 true UserCmds + + StdPicture.Stop + Auto @@ -2110,7 +2122,7 @@ ДатаИсполненияРасширеннаяПодсказка - 332 + 354 Label true true @@ -2161,7 +2173,7 @@ ДатаИсполненияВремяРасширеннаяПодсказка - 334 + 356 Label true true @@ -2201,7 +2213,7 @@ ГруппаВыполненоДатаРасширеннаяПодсказка - 329 + 351 Label true true @@ -2227,16 +2239,10 @@ ru Результат выполнения задания - - System.DefaultGUIFont - true - false - false - false - + ГруппаРезультатРасширеннаяПодсказка - 326 + 348 Label true true @@ -2248,7 +2254,7 @@ Vertical Auto - WeakSeparation + NormalSeparation true true auto @@ -2270,7 +2276,7 @@ false ЗаписатьИЗакрытьРасширеннаяПодсказка - 232 + 254 Label true true @@ -2296,7 +2302,7 @@ ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 233 + 255 Label true true @@ -2318,7 +2324,7 @@ ФормаПринятьКИсполнениюРасширеннаяПодсказка - 234 + 256 Label true true @@ -2344,7 +2350,7 @@ ФормаОтменитьПринятиеКИсполнениюРасширеннаяПодсказка - 235 + 257 Label true true @@ -2372,7 +2378,7 @@ false ДополнительноРасширеннаяПодсказка - 236 + 258 Label true true @@ -2400,7 +2406,7 @@ false СправкаРасширеннаяПодсказка - 237 + 259 Label true true diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Module.bsl index cf451b7ac..9cffb3900 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ВнешнееДействиеВыполнить/Module.bsl @@ -188,7 +188,7 @@ СтандартнаяОбработка = Ложь; - КакОткрывать = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ДействиеПоДвойномуЩелчкуМыши; + КакОткрывать = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ДействиеПоДвойномуЩелчкуМыши; Если КакОткрывать = "ОткрыватьКарточку" Тогда ОткрытьЗначение(ВыбраннаяСтрока); Возврат; @@ -239,10 +239,8 @@ РежимСоздания = 1; РаботаСФайламиКлиент.СозданиеНовогоФайла(ВладелецФайла, ЭтаФорма, РежимСоздания, Истина); Исключение - Инфо = ИнформацияОбОшибке(); - Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка создания нового файла: %1'"), - КраткоеПредставлениеОшибки(Инфо))); + Предупреждение(ФайловыеФункцииСлужебныйКлиентСервер.ОшибкаСозданияНовогоФайла( + ИнформацияОбОшибке())); КонецПопытки; Иначе РаботаСФайламиКлиент.СкопироватьФайл(ВладелецФайла, ФайлОснование); @@ -372,10 +370,9 @@ Если НЕ КомандыРаботыСФайламиКлиент.Расшифровать(ДанныеФайла, УникальныйИдентификатор, МассивДанныхДляЗанесенияВБазу) Тогда Возврат; - КонецЕсли; - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяРабочегоКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + КонецЕсли; + + ИмяРабочегоКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); РасшифроватьСервер(МассивДанныхДляЗанесенияВБазу, ИмяРабочегоКаталога, ОбъектСсылка); @@ -503,10 +500,9 @@ Если НЕ КомандыРаботыСФайламиКлиент.Зашифровать(ДанныеФайла, УникальныйИдентификатор, МассивДанныхДляЗанесенияВБазу, МассивОтпечатков) Тогда Возврат; - КонецЕсли; - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяРабочегоКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + КонецЕсли; + + ИмяРабочегоКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); МассивФайловВРабочемКаталогеДляУдаления = Новый Массив; @@ -660,7 +656,7 @@ // Если уже занят для редактирования, то не спрашивать - сразу открывать Если ДанныеФайла.Редактирует.Пустая() Тогда - СпрашиватьРежимРедактированияПриОткрытииФайла = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпрашиватьРежимРедактированияПриОткрытииФайла; + СпрашиватьРежимРедактированияПриОткрытииФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СпрашиватьРежимРедактированияПриОткрытииФайла; Если СпрашиватьРежимРедактированияПриОткрытииФайла = Истина Тогда КакОткрывать = Неопределено; diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form index c6f7396c2..31247f274 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form.form @@ -12,7 +12,7 @@ false ГруппаСостояниеРасширеннаяПодсказка - 166 + 172 Label true true @@ -31,29 +31,115 @@ - ГруппаШапка + Шапка 154 - ГруппаЗаголовок - 109 - - Автор - 51 + ГруппыШапки + 165 + + ГруппаАвторИсполнитель + 160 + + Автор + 161 + true + true + + true + + + Объект.Автор + + + АвторРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 162 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Исполнитель + 163 + true + true + + true + + + Объект.Исполнитель + + + ru + Исполнитель + + + ИсполнительРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + + ИсполнительКонтекстноеМеню + 164 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + true + true + true + true + Normal + + + true + true + + true + <key>ru</key> - <value>Автор</value> + <value>Автор и исполнитель</value> - true - true - - true - - - Объект.Автор - - АвторРасширеннаяПодсказка - 169 + ГруппаАвторИсполнительРасширеннаяПодсказка + 175 Label true true @@ -61,256 +147,121 @@ Left - - АвторКонтекстноеМеню - 52 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - - Дата - 152 + + ГруппаДатаИСрок + 109 + + Дата + 152 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 153 + true + + InputField + true + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + СрокИсполнения + 12 + true + true + + true + + + Объект.СрокИсполнения + + + ru + Срок исполнения + + + СрокИсполненияРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + СрокИсполненияКонтекстноеМеню + 13 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + false + true + true + true + true + Normal + + true true true - - Объект.Date - - - ДатаРасширеннаяПодсказка - 171 - Label - true - true - - Left - - - - ДатаКонтекстноеМеню - 153 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - Номер - 149 - true - true - - true - - - Объект.Number - - - НомерРасширеннаяПодсказка - 173 - Label - true - true - - Left - - - - НомерКонтекстноеМеню - 150 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа заголовок</value> - - - ru - Группа заголовок - - - ГруппаЗаголовокРасширеннаяПодсказка - 168 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаИсполнение - 28 - - Исполнитель - 20 <key>ru</key> - <value>Исполнитель</value> + <value>Дата и срок</value> - true - true - - true - - - Объект.Исполнитель - - - ru - Исполнитель - - ИсполнительРасширеннаяПодсказка - 176 - Label - true - true - - Left - - - - ИсполнительКонтекстноеМеню - 21 - true - - InputField - true - Enter - true - Left - true - Left - - true - true - true - true - true - true - Normal - - - - СрокИсполнения - 12 - true - true - - true - - - Объект.СрокИсполнения - - - ru - Срок исполнения - - - СрокИсполненияРасширеннаяПодсказка - 178 - Label - true - true - - Left - - - - СрокИсполненияКонтекстноеМеню - 13 - true - - InputField - true - Enter - true - Left - true - Left - - true - true - true - true - true - true - Normal - - - - Важность - 16 - true - true - - true - - - Объект.Важность - - - ВажностьРасширеннаяПодсказка + ГруппаДатаИСрокРасширеннаяПодсказка 180 Label true @@ -319,26 +270,139 @@ Left - - ВажностьКонтекстноеМеню - 17 - true - - InputField - Enter - true - Left - true - Left - - 10 + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаНомерИВажность + 28 + + Номер + 149 + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 150 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + Важность + 16 + true + true + + true + + + Объект.Важность + + + ВажностьРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + + ВажностьКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + Left + + 10 + true + true + false + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Номер и важность</value> + + + System.DefaultGUIFont + true + false + false + false + + true + + ГруппаНомерИВажностьРасширеннаяПодсказка + 185 + Label true true - false - true - true - true - Normal + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -348,19 +412,11 @@ <key>ru</key> - <value>Исполнение</value> + <value>Группы шапки</value> - - System.DefaultGUIFont - true - false - false - false - - true - ГруппаИсполнениеРасширеннаяПодсказка - 175 + ГруппыШапкиРасширеннаяПодсказка + 174 Label true true @@ -401,7 +457,7 @@ СрокНачалаИсполненияРасширеннаяПодсказка - 183 + 191 Label true true @@ -451,7 +507,7 @@ СрокНачалаИсполненияВремяРасширеннаяПодсказка - 185 + 193 Label true true @@ -491,7 +547,7 @@ ГруппаПриоритетРасширеннаяПодсказка - 182 + 190 Label true true @@ -513,9 +569,13 @@ true + + <key>ru</key> + <value>Шапка</value> + - ГруппаШапкаРасширеннаяПодсказка - 167 + ШапкаРасширеннаяПодсказка + 173 Label true true @@ -527,6 +587,7 @@ Vertical Auto + StrongSeparation true true Auto @@ -549,7 +610,7 @@ НаименованиеРасширеннаяПодсказка - 188 + 196 Label true true @@ -591,7 +652,7 @@ ПредметРасширеннаяПодсказка - 190 + 198 Label true true @@ -633,7 +694,7 @@ None СодержаниеРасширеннаяПодсказка - 192 + 200 Label true true @@ -674,7 +735,7 @@ 126 <key>ru</key> - <value>История сообщений</value> + <value>История выполнения</value> true true @@ -686,7 +747,7 @@ РезультатВыполненияРасширеннаяПодсказка - 194 + 202 Label true true @@ -735,7 +796,7 @@ ГруппаСодержаниеРасширеннаяПодсказка - 187 + 195 Label true true @@ -747,10 +808,9 @@ Vertical Auto - WeakSeparation + NormalSeparation true true - auto Auto Auto @@ -777,7 +837,7 @@ ОписаниеРезультатаРасширеннаяПодсказка - 197 + 205 Label true true @@ -799,6 +859,7 @@ true 2 true + false true true true @@ -820,7 +881,7 @@ false ВыполненоРасширеннаяПодсказка - 200 + 208 Label true true @@ -833,6 +894,7 @@ Normal PictureAndText true + 1 true UserCmds Auto @@ -848,7 +910,7 @@ false ОтклоненоРасширеннаяПодсказка - 201 + 209 Label true true @@ -859,10 +921,14 @@ UsualButton Form.Command.Отменено Normal - Auto + PictureAndText true + 1 true UserCmds + + StdPicture.Stop + Auto @@ -886,7 +952,7 @@ ДатаИсполненияРасширеннаяПодсказка - 202 + 210 Label true true @@ -937,7 +1003,7 @@ ДатаИсполненияВремяРасширеннаяПодсказка - 204 + 212 Label true true @@ -977,7 +1043,7 @@ ГруппаВыполненоДатаРасширеннаяПодсказка - 199 + 207 Label true true @@ -1001,18 +1067,12 @@ <key>ru</key> - <value>Результат выполнения задания</value> + <value>Результат выполнения задания:</value> - - System.DefaultGUIFont - true - false - false - false - + ГруппаРезультатРасширеннаяПодсказка - 196 + 204 Label true true @@ -1024,7 +1084,6 @@ Vertical Auto - WeakSeparation true true auto @@ -1046,7 +1105,7 @@ false ЗаписатьИЗакрытьРасширеннаяПодсказка - 160 + 166 Label true true @@ -1072,7 +1131,7 @@ ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 161 + 167 Label true true @@ -1094,7 +1153,7 @@ ФормаПринятьКИсполнениюРасширеннаяПодсказка - 162 + 168 Label true true @@ -1120,7 +1179,7 @@ ФормаОтменитьПринятиеКИсполнениюРасширеннаяПодсказка - 163 + 169 Label true true @@ -1148,7 +1207,7 @@ false ДополнительноРасширеннаяПодсказка - 164 + 170 Label true true @@ -1176,7 +1235,7 @@ false СправкаРасширеннаяПодсказка - 165 + 171 Label true true diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form index 8fc3a4756..181e9d84c 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ДействиеПроверить/Form.form @@ -12,7 +12,7 @@ false ГруппаСостояниеРасширеннаяПодсказка - 171 + 193 Label true true @@ -31,29 +31,119 @@ - ГруппаШапка - 153 + Шапка + 165 - ГруппаЗаголовок - 109 - - Автор - 51 + ГруппыШапки + 166 + + ГруппаАвторИсполнитель + 167 + + Автор + 168 + true + true + + true + + + Объект.Автор + + + АвторРасширеннаяПодсказка + 197 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 169 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Исполнитель + 170 + + <key>ru</key> + <value>Проверяющий</value> + + true + true + + true + + + Объект.Исполнитель + + + ru + Исполнитель + + + ИсполнительРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + + ИсполнительКонтекстноеМеню + 171 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + true + true + true + true + Normal + + + true + true + + true + <key>ru</key> - <value>Автор</value> + <value>Автор и исполнитель</value> - true - true - - true - - - Объект.Автор - - АвторРасширеннаяПодсказка - 174 + ГруппаАвторИсполнительРасширеннаяПодсказка + 196 Label true true @@ -61,41 +151,122 @@ Left - - АвторКонтекстноеМеню - 52 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - - Дата - 149 + + ГруппаДатаИСрок + 172 + + Дата + 173 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 202 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 174 + true + + InputField + true + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + СрокИсполнения + 175 + true + true + + true + + + Объект.СрокИсполнения + + + ru + Срок исполнения + + + СрокИсполненияРасширеннаяПодсказка + 204 + Label + true + true + + Left + + + + СрокИсполненияКонтекстноеМеню + 176 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + false + true + true + true + true + Normal + + true true true - - Объект.Date - + + <key>ru</key> + <value>Дата и срок</value> + - ДатаРасширеннаяПодсказка - 176 + ГруппаДатаИСрокРасширеннаяПодсказка + 201 Label true true @@ -103,121 +274,124 @@ Left - - ДатаКонтекстноеМеню - 150 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - - Номер - 151 - true - true - - true - - - Объект.Number - - - НомерРасширеннаяПодсказка + + ГруппаНомерИВажность + 177 + + Номер 178 - Label - true - true - - Left + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 179 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal - - - НомерКонтекстноеМеню - 152 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа заголовок</value> - - - ru - Группа заголовок - - - ГруппаЗаголовокРасширеннаяПодсказка - 173 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаИсполнение - 28 - - Исполнитель - 20 + + + Важность + 180 + true + true + + true + + + Объект.Важность + + + ВажностьРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + + ВажностьКонтекстноеМеню + 181 + true + + InputField + Enter + true + Left + true + Left + + 10 + true + true + false + true + true + true + Normal + + + true + true + + true + <key>ru</key> - <value>Проверяющий</value> + <value>Номер и важность</value> - true - true - - true - - - Объект.Исполнитель - + + System.DefaultGUIFont + true + false + false + false + + true - ИсполнительРасширеннаяПодсказка - 181 + ГруппаНомерИВажностьРасширеннаяПодсказка + 206 Label true true @@ -225,116 +399,14 @@ Left - - ИсполнительКонтекстноеМеню - 21 - true - - InputField - true - Enter - true - Left - true - Left - - true - true - true - true - true - true - Normal - - - - СрокИсполнения - 12 - true - true - - true - - - Объект.СрокИсполнения - - - ru - Срок исполнения - - - СрокИсполненияРасширеннаяПодсказка - 183 - Label - true - true - - Left - - - - СрокИсполненияКонтекстноеМеню - 13 - true - - InputField - true - Enter - true - Left - true - Left - - true - true - true - true - true - true - Normal - - - - Важность - 16 - true - true - - true - - - Объект.Важность - - - ВажностьРасширеннаяПодсказка - 185 - Label - true - true - - Left - - - - ВажностьКонтекстноеМеню - 17 - true - - InputField - Enter - true - Left - true - Left - - 10 - true - true - false - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -344,19 +416,11 @@ <key>ru</key> - <value>Исполнение</value> + <value>Группы шапки</value> - - System.DefaultGUIFont - true - false - false - false - - true - ГруппаИсполнениеРасширеннаяПодсказка - 180 + ГруппыШапкиРасширеннаяПодсказка + 195 Label true true @@ -375,10 +439,10 @@ ГруппаПриоритет - 154 + 182 СрокНачалаИсполнения - 155 + 183 true true @@ -397,7 +461,7 @@ СрокНачалаИсполненияРасширеннаяПодсказка - 188 + 212 Label true true @@ -407,7 +471,7 @@ СрокНачалаИсполненияКонтекстноеМеню - 156 + 184 true InputField @@ -431,7 +495,7 @@ СрокНачалаИсполненияВремя - 157 + 185 true true @@ -447,7 +511,7 @@ СрокНачалаИсполненияВремяРасширеннаяПодсказка - 190 + 214 Label true true @@ -457,7 +521,7 @@ СрокНачалаИсполненияВремяКонтекстноеМеню - 158 + 186 true InputField @@ -487,7 +551,7 @@ ГруппаПриоритетРасширеннаяПодсказка - 187 + 211 Label true true @@ -511,11 +575,11 @@ <key>ru</key> - <value>Группа шапка</value> + <value>Шапка</value> - ГруппаШапкаРасширеннаяПодсказка - 172 + ШапкаРасширеннаяПодсказка + 194 Label true true @@ -527,6 +591,7 @@ Vertical Auto + StrongSeparation true true Auto @@ -549,7 +614,7 @@ НаименованиеРасширеннаяПодсказка - 193 + 217 Label true true @@ -563,6 +628,7 @@ true InputField + true Enter true Left @@ -590,7 +656,7 @@ ПредметРасширеннаяПодсказка - 195 + 219 Label true true @@ -636,7 +702,7 @@ None СодержаниеРасширеннаяПодсказка - 197 + 221 Label true true @@ -677,7 +743,7 @@ 126 <key>ru</key> - <value>История сообщений</value> + <value>История выполнения</value> true true @@ -689,7 +755,7 @@ РезультатВыполненияРасширеннаяПодсказка - 199 + 223 Label true true @@ -729,17 +795,11 @@ ru Содержание - - System.DefaultGUIFont - true - false - false - false - + true ГруппаСодержаниеРасширеннаяПодсказка - 192 + 216 Label true true @@ -751,10 +811,9 @@ Vertical Auto - WeakSeparation + NormalSeparation true true - auto Auto Auto @@ -781,7 +840,7 @@ ОписаниеРезультатаРасширеннаяПодсказка - 202 + 226 Label true true @@ -803,6 +862,7 @@ true 2 true + false true true true @@ -810,34 +870,6 @@ Normal - - ИзменитьПоручение - 130 - true - true - - true - - false - - ИзменитьПоручениеРасширеннаяПодсказка - 204 - Label - true - true - - Left - - - Hyperlink - Form.Command.ИзменитьЗадание - Normal - Auto - true - true - UserCmds - Auto - ГруппаВыполненаДата 54 @@ -852,7 +884,7 @@ false ВыполненоРасширеннаяПодсказка - 206 + 229 Label true true @@ -865,6 +897,7 @@ Normal PictureAndText true + 1 true UserCmds Auto @@ -880,7 +913,7 @@ false ОтмененоРасширеннаяПодсказка - 207 + 230 Label true true @@ -891,10 +924,14 @@ UsualButton Form.Command.Отменено Normal - Auto + PictureAndText true + 1 true UserCmds + + StdPicture.Stop + Auto @@ -908,7 +945,7 @@ false ВозвращеноРасширеннаяПодсказка - 208 + 231 Label true true @@ -919,10 +956,14 @@ UsualButton Form.Command.Возвращено Normal - Auto + PictureAndText true + 1 true UserCmds + + CommonPicture.ЗаполнитьФорму + Auto @@ -942,7 +983,7 @@ ДатаИсполненияРасширеннаяПодсказка - 209 + 232 Label true true @@ -989,7 +1030,7 @@ None ДатаИсполненияВремяРасширеннаяПодсказка - 211 + 234 Label true true @@ -1022,6 +1063,34 @@ Normal + + ИзменитьЗадание + 130 + true + true + + true + + false + + ИзменитьЗаданиеРасширеннаяПодсказка + 236 + Label + true + true + + Left + + + Hyperlink + Form.Command.ИзменитьЗадание + Normal + Auto + true + true + UserCmds + Auto + true true @@ -1038,7 +1107,7 @@ true ГруппаВыполненаДатаРасширеннаяПодсказка - 205 + 228 Label true true @@ -1062,19 +1131,13 @@ <key>ru</key> - <value>Результат проверки задания</value> + <value>Результат проверки задания:</value> - - System.DefaultGUIFont - true - false - false - false - + true ГруппаРезультатРасширеннаяПодсказка - 201 + 225 Label true true @@ -1086,7 +1149,7 @@ Vertical Auto - WeakSeparation + NormalSeparation true true auto @@ -1108,7 +1171,7 @@ false ЗаписатьИЗакрытьРасширеннаяПодсказка - 165 + 187 Label true true @@ -1134,7 +1197,7 @@ ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 166 + 188 Label true true @@ -1156,7 +1219,7 @@ ФормаПринятьКИсполнениюРасширеннаяПодсказка - 167 + 189 Label true true @@ -1182,7 +1245,7 @@ ФормаОтменитьПринятиеКИсполнениюРасширеннаяПодсказка - 168 + 190 Label true true @@ -1210,7 +1273,7 @@ false ДополнительноРасширеннаяПодсказка - 169 + 191 Label true true @@ -1238,7 +1301,7 @@ false СправкаРасширеннаяПодсказка - 170 + 192 Label true true @@ -1492,7 +1555,7 @@ Возвращено <key>ru</key> - <value>Возвращено</value> + <value>Возвращено исполнителю</value> 4 diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form index 3069843eb..e7f8dee3a 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form.form @@ -13,7 +13,7 @@ ДекорацияЗначокРасширеннаяПодсказка - 108 + 109 Label true true @@ -26,14 +26,14 @@ 94 true - 4 + 2 true - 2 + 1 true false - CommonPicture.Информация32 + CommonPicture.Информация @@ -51,7 +51,7 @@ ДекорацияТекстРасширеннаяПодсказка - 109 + 110 Label true true @@ -66,7 +66,7 @@ Label true - 2 + 1 true false @@ -81,7 +81,7 @@ true ГруппаСостояниеРасширеннаяПодсказка - 107 + 108 Label true true @@ -112,7 +112,7 @@ ГлавнаяЗадачаРасширеннаяПодсказка - 110 + 111 Label true true @@ -141,575 +141,26 @@ - ГруппаСрокВажность - 27 - - ЗаголовокЗадания - 19 - true - true - - true - - - Объект.Наименование - - true - - ЗаголовокЗаданияРасширеннаяПодсказка - 113 - Label - true - true - - Left - - - - ЗаголовокЗаданияКонтекстноеМеню - 20 - true - - InputField - Enter - true - Left - true - Left - - 30 - true - true - true - true - true - - Style.BorderColor - - Normal - - - - Важность - 57 - true - true - - true - - - Объект.Важность - - - ВажностьРасширеннаяПодсказка - 115 - Label - true - true - - Left - - - - ВажностьКонтекстноеМеню - 58 - true - - InputField - Enter - true - Left - true - - 8 - true - true - false - true - true - true - Normal - - - - Номер - 103 - true - true - - - Объект.Number - - - НомерРасширеннаяПодсказка - 117 - Label - true - true - - Left - - - - НомерКонтекстноеМеню - 104 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - true - - ГруппаСрокВажностьРасширеннаяПодсказка - 112 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаИсполнение - 67 - - Исполнитель - 69 - true - true - - true - - - Объект.Исполнитель - - - OnChange - ИсполнительПриИзменении - - - ИсполнительРасширеннаяПодсказка - 120 - Label - true - true - - Left - - - - ИсполнительКонтекстноеМеню - 70 - true - - InputField - Enter - true - Left - true - - - AutoComplete - ИсполнительАвтоПодбор - - - StartChoice - ИсполнительНачалоВыбора - - - TextEditEnd - ИсполнительОкончаниеВводаТекста - - - ChoiceProcessing - ИсполнительОбработкаВыбора - - 25 - true - true - false - false - true - true - true - Normal - - - - СрокИсполнения - 21 - - <key>ru</key> - <value>Срок</value> - - true - true - - true - - - Объект.СрокИсполнения - - - ru - Срок исполнения - - - OnChange - СрокИсполненияПриИзменении - - - СрокИсполненияРасширеннаяПодсказка - 122 - Label - true - true - - Left - - - - СрокИсполненияКонтекстноеМеню - 22 - true - - InputField - Enter - true - Left - true - Left - - 10 - true - true - - ru - ДЛФ=D - - true - true - true - Normal - - - - СрокИсполненияВремя - 88 - - <key>ru</key> - <value>Срок</value> - - true - true - - true - - - Объект.СрокИсполнения - - None - - ru - Срок исполнения (время) - - - СрокИсполненияВремяРасширеннаяПодсказка - 124 - Label - true - true - - Left - - - - СрокИсполненияВремяКонтекстноеМеню - 89 - true - - InputField - Enter - true - Left - true - Left - - 8 - true - true - false - - ru - ДЛФ=T - - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Исполнение</value> - - - System.DefaultGUIFont - true - false - false - false - - true - - ГруппаИсполнениеРасширеннаяПодсказка - 119 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаСодержание - 75 - - Предмет - 86 - true - true - - true - - - ПредметСтрокой - - - ПредметРасширеннаяПодсказка - 127 - Label - true - true - - Left - - - - ПредметКонтекстноеМеню - 87 - true - - LabelField - Enter - true - Left - true - - - Click - ПредметНажатие - - true - true - - - - Содержание - 17 - - <key>ru</key> - <value>Содержание</value> - - true - true - - true - - - Объект.Содержание - - None - - СодержаниеРасширеннаяПодсказка - 129 - Label - true - true - - Left - - - - СодержаниеКонтекстноеМеню - 18 - true - - InputField - Enter - true - Left - true - Left - - true - 5 - true - true - true - true - true - - Style.BorderColor - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Содержание</value> - - - System.DefaultGUIFont - true - false - false - false - - - ГруппаСодержаниеРасширеннаяПодсказка - 126 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - - ГруппаПроверка - 56 - - НаПроверке - 54 - - <key>ru</key> - <value>Проверить выполнение:</value> - - true - true - - true - - - Объект.НаПроверке - - Right - - OnChange - НаПроверкеПриИзменении - - - НаПроверкеРасширеннаяПодсказка - 132 - Label - true - true - - Left - - - - НаПроверкеКонтекстноеМеню - 55 - true - - CheckBoxField - Enter - true - Left - true - - + ГруппаВсеПоля + 105 - ГруппаПроверяющий - 28 + ГруппаСрокВажность + 27 - Проверяющий - 14 + ЗаголовокЗадания + 19 true true true - Объект.Проверяющий + Объект.Наименование - None - - OnChange - ПроверяющийПриИзменении - + true - ПроверяющийРасширеннаяПодсказка - 135 + ЗаголовокЗаданияРасширеннаяПодсказка + 115 Label true true @@ -718,38 +169,20 @@ - ПроверяющийКонтекстноеМеню - 15 + ЗаголовокЗаданияКонтекстноеМеню + 20 true InputField - false Enter true Left true Left - - AutoComplete - ПроверяющийАвтоПодбор - - - StartChoice - ПроверяющийНачалоВыбора - - - TextEditEnd - ПроверяющийОкончаниеВводаТекста - - - ChoiceProcessing - ПроверяющийОбработкаВыбора - + 20 true true - false - false true true true @@ -760,8 +193,181 @@ - СрокПроверки - 23 + Важность + 57 + true + true + + true + + + Объект.Важность + + + ВажностьРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + + ВажностьКонтекстноеМеню + 58 + true + + InputField + Enter + true + Left + true + + 8 + true + true + false + true + true + true + Normal + + + + Номер + 103 + true + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 104 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + true + + ГруппаСрокВажностьРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаИсполнение + 67 + + Исполнитель + 69 + true + true + + true + + + Объект.Исполнитель + + + OnChange + ИсполнительПриИзменении + + + ИсполнительРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + + ИсполнительКонтекстноеМеню + 70 + true + + InputField + Enter + true + Left + true + + + AutoComplete + ИсполнительАвтоПодбор + + + StartChoice + ИсполнительНачалоВыбора + + + TextEditEnd + ИсполнительОкончаниеВводаТекста + + + ChoiceProcessing + ИсполнительОбработкаВыбора + + 35 + true + true + false + false + true + true + true + Normal + + + + СрокИсполнения + 21 <key>ru</key> <value>Срок</value> @@ -772,19 +378,19 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Объект.СрокПроверки</segments> + <segments>Объект.СрокИсполнения</segments> </dataPath> <toolTip> <key>ru</key> - <value>Срок проверки</value> + <value>Срок исполнения</value> </toolTip> <handlers> <event>OnChange</event> - <name>СрокПроверкиПриИзменении</name> + <name>СрокИсполненияПриИзменении</name> </handlers> <extendedTooltip> - <name>СрокПроверкиРасширеннаяПодсказка</name> - <id>137</id> + <name>СрокИсполненияРасширеннаяПодсказка</name> + <id>124</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -793,8 +399,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>СрокПроверкиКонтекстноеМеню</name> - <id>24</id> + <name>СрокИсполненияКонтекстноеМеню</name> + <id>22</id> <autoFill>true</autoFill> </contextMenu> <type>InputField</type> @@ -814,15 +420,12 @@ <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> <textSize>Normal</textSize> </extInfo> </items> <items xsi:type="form:FormField"> - <name>СрокПроверкиВремя</name> - <id>90</id> + <name>СрокИсполненияВремя</name> + <id>88</id> <title> <key>ru</key> <value>Срок</value> @@ -833,16 +436,16 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>Объект.СрокПроверки</segments> + <segments>Объект.СрокИсполнения</segments> </dataPath> <titleLocation>None</titleLocation> <toolTip> <key>ru</key> - <value>Срок проверки (время)</value> + <value>Срок исполнения (время)</value> </toolTip> <extendedTooltip> - <name>СрокПроверкиВремяРасширеннаяПодсказка</name> - <id>139</id> + <name>СрокИсполненияВремяРасширеннаяПодсказка</name> + <id>126</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -851,8 +454,8 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>СрокПроверкиВремяКонтекстноеМеню</name> - <id>91</id> + <name>СрокИсполненияВремяКонтекстноеМеню</name> + <id>89</id> <autoFill>true</autoFill> </contextMenu> <type>InputField</type> @@ -873,9 +476,6 @@ <chooseType>true</chooseType> <typeDomainEnabled>true</typeDomainEnabled> <textEdit>true</textEdit> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> <textSize>Normal</textSize> </extInfo> </items> @@ -884,9 +484,21 @@ <userVisible> <common>true</common> </userVisible> + <title> + <key>ru</key> + <value>Исполнение</value> + + + System.DefaultGUIFont + true + false + false + false + + true - ГруппаПроверяющийРасширеннаяПодсказка - 134 + ГруппаИсполнениеРасширеннаяПодсказка + 121 Label true true @@ -903,106 +515,113 @@ Auto - true - true - - true - - - <key>ru</key> - <value>Проверка</value> - - - System.DefaultGUIFont - true - false - false - false - - - ГруппаПроверкаРасширеннаяПодсказка - 131 - Label - true - true - - Left - - - UsualGroup - - Auto - WeakSeparation - true - true - auto - Auto - Auto - - - - ГруппаОбщиеСведения - 81 - - Автор - 79 + + ГруппаСодержание + 75 + + Предмет + 86 + true + true + + true + + + ПредметСтрокой + + + ПредметРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + ПредметКонтекстноеМеню + 87 + true + + LabelField + Enter + true + Left + true + + + Click + ПредметНажатие + + true + true + + + + Содержание + 17 + + <key>ru</key> + <value>Содержание</value> + + true + true + + true + + + Объект.Содержание + + None + + СодержаниеРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + + СодержаниеКонтекстноеМеню + 18 + true + + InputField + Enter + true + Left + true + Left + + true + 5 + true + true + true + true + true + + Style.BorderColor + + Normal + + true true true - - Объект.Автор - - - АвторРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - - АвторКонтекстноеМеню - 80 - true - - InputField - Enter - true - Left - true - - true - true - false - false - true - true - true - Normal - - - - Дата - 97 <key>ru</key> - <value>Начато</value> + <value>Содержание</value> - true - true - - true - - - Объект.Date - + - ДатаРасширеннаяПодсказка - 144 + ГруппаСодержаниеРасширеннаяПодсказка + 128 Label true true @@ -1010,25 +629,442 @@ Left - - ДатаКонтекстноеМеню - 98 - true - - InputField - true - Enter - true - Left - true - + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаПроверка + 56 + + НаПроверке + 54 + + <key>ru</key> + <value>Проверить выполнение:</value> + + true + true + + true + + + Объект.НаПроверке + + Right + + OnChange + НаПроверкеПриИзменении + + + НаПроверкеРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + + НаПроверкеКонтекстноеМеню + 55 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаПроверяющий + 28 + + Проверяющий + 14 + true + true + + true + + + Объект.Проверяющий + + None + + OnChange + ПроверяющийПриИзменении + + + ПроверяющийРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + + ПроверяющийКонтекстноеМеню + 15 + true + + InputField + false + Enter + true + Left + true + Left + + + AutoComplete + ПроверяющийАвтоПодбор + + + StartChoice + ПроверяющийНачалоВыбора + + + TextEditEnd + ПроверяющийОкончаниеВводаТекста + + + ChoiceProcessing + ПроверяющийОбработкаВыбора + + 34 + true + true + false + false + false + true + true + true + + Style.BorderColor + + Normal + + + + СрокПроверки + 23 + + <key>ru</key> + <value>Срок</value> + + true + true + + true + + + Объект.СрокПроверки + + + ru + Срок проверки + + + OnChange + СрокПроверкиПриИзменении + + + СрокПроверкиРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + СрокПроверкиКонтекстноеМеню + 24 + true + + InputField + Enter + true + Left + true + Left + + 10 + true + true + + ru + ДЛФ=D + + true + true + true + + Style.BorderColor + + Normal + + + + СрокПроверкиВремя + 90 + + <key>ru</key> + <value>Срок</value> + + true + true + + true + + + Объект.СрокПроверки + + None + + ru + Срок проверки (время) + + + СрокПроверкиВремяРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + СрокПроверкиВремяКонтекстноеМеню + 91 + true + + InputField + Enter + true + Left + true + Left + + 8 + true + true + false + + ru + ДЛФ=T + + true + true + true + + Style.BorderColor + + Normal + + + true + true + + true + + + ГруппаПроверяющийРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Проверка</value> + + + true + + ГруппаПроверкаРасширеннаяПодсказка + 133 + Label true true - true - true - true - true - Normal + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + ГруппаОбщиеСведения + 81 + + Автор + 79 + true + true + + true + + + Объект.Автор + + + АвторРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 80 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + false + true + true + true + Normal + + + + Дата + 97 + + <key>ru</key> + <value>Начато</value> + + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 98 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Автор</value> + + + System.DefaultGUIFont + true + false + false + false + + + ru + Группа общие сведения + + true + + ГруппаОбщиеСведенияРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto true @@ -1038,23 +1074,11 @@ <key>ru</key> - <value>Автор</value> + <value>Все поля</value> - - System.DefaultGUIFont - true - false - false - false - - - ru - Группа общие сведения - - true - ГруппаОбщиеСведенияРасширеннаяПодсказка - 141 + ГруппаВсеПоляРасширеннаяПодсказка + 113 Label true true @@ -1064,8 +1088,8 @@ UsualGroup + Vertical Auto - NormalSeparation true true Auto @@ -1087,7 +1111,7 @@ ФормаОстановитьРасширеннаяПодсказка - 105 + 106 Label true true @@ -1113,7 +1137,7 @@ ФормаПродолжитьРасширеннаяПодсказка - 106 + 107 Label true true diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl index 5bfa7f39c..9b6795f8b 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Module.bsl @@ -1,3 +1,8 @@ +&НаКлиенте +Перем ОткрытаФормаВыбораИсполнителя; // признак того, что исполнитель выбирается из формы, а не быстрым вводом +&НаКлиенте +Перем ОткрытаФормаВыбораПроверяющего; // признак того, что проверяющий выбирается из формы, а не быстрым вводом + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -5,7 +10,6 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) НачальныйПризнакСтарта = Объект.Стартован; - ТолькоПросмотр = Объект.Завершен; ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); Элементы.СрокИсполненияВремя.Видимость = ИспользоватьДатуИВремяВСрокахЗадач; @@ -22,8 +26,14 @@ НСтр("ru = 'Задание выполнено %1.'"), НСтр("ru = 'Задание отменено %1.'")); Элементы.ДекорацияТекст.Заголовок = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСостояния, - ДатаЗавершенияСтрокой); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСостояния, ДатаЗавершенияСтрокой); + + Для каждого Элемент Из Элементы Цикл + Если ТипЗнч(Элемент) <> Тип("ПолеФормы") И ТипЗнч(Элемент) <> Тип("ГруппаФормы") Тогда + Продолжить; + КонецЕсли; + Элемент.ТолькоПросмотр = Истина; + КонецЦикла; КонецЕсли; Если Объект.ГлавнаяЗадача = Неопределено Или Объект.ГлавнаяЗадача.Пустая() Тогда @@ -37,7 +47,7 @@ Элементы.ГлавнаяЗадача.Видимость = Ложь; КонецЕсли; - ИспользоватьВнешниеЗадачиИБизнесПроцессы = БизнесПроцессыИЗадачиПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы(); + ИспользоватьВнешниеЗадачиИБизнесПроцессы = СтандартныеПодсистемыПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы(); УстановитьДоступностьПроверяющего(ЭтаФорма); КонецПроцедуры @@ -89,8 +99,9 @@ &НаКлиенте Процедура ГлавнаяЗадачаНажатие(Элемент, СтандартнаяОбработка) - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.ГлавнаяЗадача); - + Если Не БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.ГлавнаяЗадача) Тогда + ОткрытьЗначение(Объект.ГлавнаяЗадача); + КонецЕсли; СтандартнаяОбработка = Ложь; КонецПроцедуры @@ -99,14 +110,17 @@ Процедура ИсполнительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - БизнесПроцессыИЗадачиКлиент.ВыбратьИсполнителя( - Элемент, Объект.Исполнитель, Истина, Ложь); + БизнесПроцессыИЗадачиКлиент.ВыбратьИсполнителя(Элемент, Объект.Исполнитель); КонецПроцедуры &НаКлиенте Процедура ИсполнительПриИзменении(Элемент) + Если ОткрытаФормаВыбораИсполнителя = Истина Тогда + Возврат; + КонецЕсли; + ОсновнойОбъектАдресации = Неопределено; ДополнительныйОбъектАдресации = Неопределено; @@ -134,11 +148,10 @@ &НаКлиенте Процедура ИсполнительОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + ОткрытаФормаВыбораИсполнителя = ТипЗнч(ВыбранноеЗначение) = Тип("Структура"); + Если ОткрытаФормаВыбораИсполнителя Тогда СтандартнаяОбработка = Ложь; - Объект.Исполнитель = ВыбранноеЗначение.РольИсполнителя; - Модифицированность = Истина; КонецЕсли; @@ -168,14 +181,17 @@ Процедура ПроверяющийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - БизнесПроцессыИЗадачиКлиент.ВыбратьИсполнителя( - Элемент, Объект.Проверяющий, Истина, Ложь); + БизнесПроцессыИЗадачиКлиент.ВыбратьИсполнителя(Элемент, Объект.Проверяющий); КонецПроцедуры &НаКлиенте Процедура ПроверяющийПриИзменении(Элемент) + Если ОткрытаФормаВыбораПроверяющего = Истина Тогда + Возврат; + КонецЕсли; + ОсновнойОбъектАдресации = Неопределено; ДополнительныйОбъектАдресации = Неопределено; @@ -201,7 +217,8 @@ &НаКлиенте Процедура ПроверяющийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда + ОткрытаФормаВыбораПроверяющего = ТипЗнч(ВыбранноеЗначение) = Тип("Структура"); + Если ОткрытаФормаВыбораПроверяющего Тогда СтандартнаяОбработка = Ложь; Объект.Проверяющий = ВыбранноеЗначение.РольИсполнителя; diff --git a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form index 8b2c65df8..ad4f92383 100644 --- a/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form +++ b/SSL/src/BusinessProcesses/Задание/Forms/ФормаСписка/Form.form @@ -44,6 +44,7 @@ true true + false true true true @@ -90,6 +91,7 @@ true true + false true true true @@ -136,6 +138,7 @@ true true + false true true true @@ -1217,7 +1220,7 @@ ПоАвтору <key>ru</key> - <value>По автору</value> + <value>Автор</value> 2 @@ -1234,7 +1237,7 @@ ПоИсполнителю <key>ru</key> - <value>По исполнителю</value> + <value>Исполнитель</value> 3 @@ -1251,7 +1254,7 @@ ПоПроверяющему <key>ru</key> - <value>По проверяющему</value> + <value>Проверяющий</value> 4 diff --git a/SSL/src/BusinessProcesses/Задание/Help/ru.html b/SSL/src/BusinessProcesses/Задание/Help/ru.html index ec63a67c0..ca1b82952 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 f10569432..d436cdbd7 100644 --- a/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -18,14 +20,15 @@ // Функция ФормаВыполненияЗадачи(ЗадачаСсылка, ТочкаМаршрутаБизнесПроцесса) Экспорт - Результат = Новый Структура; - Результат.Вставить("ПараметрыФормы", Новый Структура("Ключ", ЗадачаСсылка)); - Если БизнесПроцессыИЗадачиПереопределяемый.ЭтоВнешняяЗадача(ЗадачаСсылка) Тогда - Результат.Вставить("ИмяФормы", "БизнесПроцесс.Задание.Форма.ВнешнееДействие" + ТочкаМаршрутаБизнесПроцесса.Имя); + Если СтандартныеПодсистемыПереопределяемый.ЭтоВнешняяЗадача(ЗадачаСсылка) Тогда + ИмяФормы = "БизнесПроцесс.Задание.Форма.ВнешнееДействие" + ТочкаМаршрутаБизнесПроцесса.Имя; Иначе - Результат.Вставить("ИмяФормы", "БизнесПроцесс.Задание.Форма.Действие" + ТочкаМаршрутаБизнесПроцесса.Имя); + ИмяФормы = "БизнесПроцесс.Задание.Форма.Действие" + ТочкаМаршрутаБизнесПроцесса.Имя; КонецЕсли; + Результат = Новый Структура; + Результат.Вставить("ПараметрыФормы", Новый Структура("Ключ", ЗадачаСсылка)); + Результат.Вставить("ИмяФормы", ИмяФормы); Возврат Результат; КонецФункции @@ -105,3 +108,5 @@ Возврат Результат; КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl index df55095d7..01219709b 100644 --- a/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl +++ b/SSL/src/BusinessProcesses/Задание/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -13,7 +15,7 @@ // Изменение - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, // Удаление - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, // -// Вызывается из процедуры УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(), +// Вызывается из процедуры УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступа(), // если объект зарегистрирован в "ПодпискаНаСобытие.ЗаписатьНаборыЗначенийДоступа" и // из таких же процедур объектов, у которых наборы значений доступа зависят от наборов этого // объекта (в этом случае объект зарегистрирован в "ПодпискаНаСобытие.ЗаписатьЗависимыеНаборыЗначенийДоступа"). @@ -144,9 +146,9 @@ Если Не ЗадачаИсточник.Пустая() Тогда БылЗавершен = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭтотОбъект.Ссылка, "Завершен"); Если Завершен = Истина И БылЗавершен = Ложь Тогда - БизнесПроцессыИЗадачиПереопределяемый.ВыполнитьЗадачуИсточник(ЭтотОбъект); - КонецЕсли; - КонецЕсли; + СтандартныеПодсистемыПереопределяемый.ВыполнитьЗадачуИсточник(ЭтотОбъект); + КонецЕсли; + КонецЕсли; Если ОбменДанными.Загрузка Тогда Возврат; @@ -154,9 +156,9 @@ Если Автор <> Неопределено И Не Автор.Пустая() Тогда АвторСтрокой = Строка(Автор); - КонецЕсли; + КонецЕсли; - Если БизнесПроцессыИЗадачиПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы() Тогда + Если СтандартныеПодсистемыПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы() Тогда Если ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") И Не Исполнитель.Пустая() И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Исполнитель, "ВнешняяРоль") = Истина Тогда @@ -165,27 +167,25 @@ Если ТипЗнч(Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей") И Не Проверяющий.Пустая() И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Проверяющий, "ВнешняяРоль") = Ложь Тогда Отказ = Истина; - КонецЕсли; + КонецЕсли; // Проверяющий не должен быть пользователем Если ТипЗнч(Проверяющий) = Тип("СправочникСсылка.Пользователи") И Не Проверяющий.Пустая() Тогда Отказ = Истина; - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; КонецЕсли; КонецЕсли; - Если Не ЗначениеЗаполнено(Состояние) Тогда - Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; - КонецЕсли; + БизнесПроцессыИЗадачиСервер.ПроверитьПраваНаИзменениеСостоянияБизнесПроцесса(ЭтотОбъект); Если ЗначениеЗаполнено(ГлавнаяЗадача) И ОбщегоНазначения.ПолучитьЗначениеРеквизита(ГлавнаяЗадача, "БизнесПроцесс") = ЭтотОбъект.Ссылка Тогда ВызватьИсключение НСтр("ru = 'Собственная задача бизнес-процесса не может быть указана как главная задача.'"); - КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -242,6 +242,7 @@ Подтверждено = Ложь; РезультатВыполнения = ""; ДатаЗавершения = '00010101000000'; + Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; КонецПроцедуры @@ -278,16 +279,18 @@ Возврат; КонецЕсли; - Если БизнесПроцессыИЗадачиПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы() Тогда + Если СтандартныеПодсистемыПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы() Тогда Если ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Исполнитель, "ВнешняяРоль") = Истина Тогда - СтрокаHTML = БизнесПроцессыИЗадачиПереопределяемый.ПолучитьПредставлениеПредметаВнешнейЗадачи(Предмет); + СтрокаHTML = ""; + СтандартныеПодсистемыПереопределяемый.ПолучитьПредставлениеПредметаВнешнейЗадачи(Предмет, СтрокаHTML); СодержаниеПредмета = Новый ХранилищеЗначения(СтрокаHTML, Новый СжатиеДанных()); // Заполняем список файлов - МассивФайлов = БизнесПроцессыИЗадачиПереопределяемый.ПолучитьСписокФайлов(Предмет); + МассивФайлов = Неопределено; + СтандартныеПодсистемыПереопределяемый.ПолучитьСписокФайлов(Предмет, МассивФайлов); Если МассивФайлов <> Неопределено Тогда Для каждого Элемент Из МассивФайлов Цикл НовыйФайл = РаботаСФайламиВызовСервера.СкопироватьФайл(Элемент, Ссылка); @@ -354,14 +357,14 @@ Процедура ЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ) - ДатаЗавершения = БизнесПроцессыИЗадачиВызовСервера.ДатаЗавершенияБизнесПроцесса(Ссылка); + ДатаЗавершения = БизнесПроцессыИЗадачиСервер.ДатаЗавершенияБизнесПроцесса(Ссылка); Записать(); КонецПроцедуры Процедура СтартПередСтартом(ТочкаМаршрутаБизнесПроцесса, Отказ) - Если БизнесПроцессыИЗадачиПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы() Тогда + Если СтандартныеПодсистемыПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы() Тогда Если ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") И Не Исполнитель.Пустая() И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Исполнитель, "ВнешняяРоль") = Истина Тогда @@ -490,3 +493,5 @@ Возврат Результат; КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/BusinessProcesses/Задание/Задание.mdo b/SSL/src/BusinessProcesses/Задание/Задание.mdo index a42bc6027..a4ebc5ac0 100644 --- a/SSL/src/BusinessProcesses/Задание/Задание.mdo +++ b/SSL/src/BusinessProcesses/Задание/Задание.mdo @@ -247,9 +247,7 @@ ShowError - - Catalog.Пользователи.EmptyRef - + Index Use Use diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Form.form b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Form.form similarity index 80% rename from SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Form.form rename to SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Form.form index b7325bd51..48d6387b5 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Form.form @@ -38,7 +38,7 @@ КодВалютыРасширеннаяПодсказка - 30 + 38 Label true true @@ -80,7 +80,7 @@ КраткоеНаименованиеРасширеннаяПодсказка - 32 + 40 Label true true @@ -122,7 +122,7 @@ НаименованиеРасширеннаяПодсказка - 34 + 42 Label true true @@ -164,7 +164,7 @@ СтраныИТерриторииРасширеннаяПодсказка - 36 + 44 Label true true @@ -208,7 +208,7 @@ ЗагружаетсяРасширеннаяПодсказка - 38 + 46 Label true true @@ -243,7 +243,7 @@ false ВыбратьРасширеннаяПодсказка - 17 + 24 Label true true @@ -252,7 +252,6 @@
Form.Command.Выбрать - Auto true true true @@ -270,7 +269,7 @@ false НайтиРасширеннаяПодсказка - 18 + 25 Label true true @@ -297,7 +296,7 @@ false ОтменитьПоискРасширеннаяПодсказка - 19 + 26 Label true true @@ -313,6 +312,32 @@ UserCmds Auto
+ + ФормаСправка + 17 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left @@ -321,10 +346,10 @@ СписокВалютСтрокаПоиска - 21 + 29 СписокВалютСтрокаПоискаРасширеннаяПодсказка - 23 + 31 Label true true @@ -334,7 +359,7 @@ СписокВалютСтрокаПоискаКонтекстноеМеню - 22 + 30 true СписокВалют @@ -344,10 +369,10 @@ СписокВалютСостояниеПросмотра - 24 + 32 СписокВалютСостояниеПросмотраРасширеннаяПодсказка - 26 + 34 Label true true @@ -357,7 +382,7 @@ СписокВалютСостояниеПросмотраКонтекстноеМеню - 25 + 33 true ViewStatusAddition @@ -368,10 +393,10 @@ СписокВалютУправлениеПоиском - 27 + 35 СписокВалютУправлениеПоискомРасширеннаяПодсказка - 29 + 37 Label true true @@ -381,7 +406,7 @@ СписокВалютУправлениеПоискомКонтекстноеМеню - 28 + 36 true SearchControlAddition @@ -392,7 +417,7 @@ СписокВалютРасширеннаяПодсказка - 20 + 28 Label true true @@ -403,6 +428,84 @@ СписокВалютКонтекстноеМеню 2 + + СписокВалютКонтекстноеМенюВыбрать + 18 + true + true + + true + + + СписокВалютКонтекстноеМенюВыбратьРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Выбрать + Normal + Auto + true + true + UserCmds + Auto + + + СписокВалютКонтекстноеМенюНайти + 19 + true + true + + true + + + СписокВалютКонтекстноеМенюНайтиРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Item.СписокВалют.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + СписокВалютКонтекстноеМенюОтменитьПоиск + 20 + true + true + + true + + + СписокВалютКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Item.СписокВалют.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + true true @@ -444,7 +547,7 @@ OnCreateAtServer ПриСозданииНаСервере - 80 + 90 DontBlock true true @@ -476,7 +579,7 @@ КодВалютыЦифровой <key>ru</key> - <value>Код валюты</value> + <value>Код числовой</value> 1 @@ -512,7 +615,7 @@ Наименование <key>ru</key> - <value>Наименование</value> + <value>Наименование валюты</value> 3 @@ -548,7 +651,7 @@ Загружается <key>ru</key> - <value>Загружается</value> + <value>Загружается из интернета</value> 5 @@ -594,6 +697,9 @@ true + + StdPicture.ChooseValue + ВыбратьВыполнить diff --git a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html new file mode 100644 index 000000000..8f68815c9 --- /dev/null +++ b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Help/ru.html @@ -0,0 +1,17 @@ + +

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

+

Реквизиты:

+

+

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

     

    +

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl new file mode 100644 index 000000000..96a303c8e --- /dev/null +++ b/SSL/src/Catalogs/Валюты/Forms/ПодборВалютИзКлассификатора/Module.bsl @@ -0,0 +1,115 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Заполнение списка валют из ОКВ + ЗакрыватьПриВыборе = Ложь; + ЗаполнитьТаблицуВалют(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВалют + +&НаКлиенте +Процедура СписокВалютВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОбработатьВыборВСпискеВалют(СтандартнаяОбработка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВыбратьВыполнить() + + ОбработатьВыборВСпискеВалют(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьТаблицуВалют() + + // Заполняет список валют из макета ОКВ + + КлассификаторXML = Справочники.Валюты.ПолучитьМакет("ОбщероссийскийКлассификаторВалют").ПолучитьТекст(); + + КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные; + + Для Каждого ЗаписьОКВ Из КлассификаторТаблица Цикл + НоваяСтрока = Валюты.Добавить(); + НоваяСтрока.КодВалютыЦифровой = ЗаписьОКВ.Code; + НоваяСтрока.КодВалютыБуквенный = ЗаписьОКВ.CodeSymbol; + НоваяСтрока.Наименование = ЗаписьОКВ.Name; + НоваяСтрока.СтраныИТерритории = ЗаписьОКВ.Description; + НоваяСтрока.Загружается = ЗаписьОКВ.RBCLoading; + НоваяСтрока.ПараметрыПрописиНаРусском = ЗаписьОКВ.NumerationItemOptions; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция СохранитьВыбранныеСтроки(Знач ВыбранныеСтроки, ЕстьКурсы) + + ЕстьКурсы = Ложь; + ТекущаяСсылка = Неопределено; + + Для каждого НомерСтроки Из ВыбранныеСтроки Цикл + ТекущиеДанные = Валюты[НомерСтроки]; + + СтрокаВБазе = Справочники.Валюты.НайтиПоКоду(ТекущиеДанные.КодВалютыЦифровой); + Если ЗначениеЗаполнено(СтрокаВБазе) Тогда + Если НомерСтроки = Элементы.СписокВалют.ТекущаяСтрока Тогда + ТекущаяСсылка = СтрокаВБазе; + КонецЕсли; + Продолжить; + КонецЕсли; + + НоваяСтрока = Справочники.Валюты.СоздатьЭлемент(); + НоваяСтрока.Код = ТекущиеДанные.КодВалютыЦифровой; + НоваяСтрока.Наименование = ТекущиеДанные.КодВалютыБуквенный; + НоваяСтрока.НаименованиеПолное = ТекущиеДанные.Наименование; + НоваяСтрока.ЗагружаетсяИзИнтернета = ТекущиеДанные.Загружается; + НоваяСтрока.ПараметрыПрописиНаРусском = ТекущиеДанные.ПараметрыПрописиНаРусском; + НоваяСтрока.Записать(); + + Если НомерСтроки = Элементы.СписокВалют.ТекущаяСтрока Тогда + ТекущаяСсылка = НоваяСтрока.Ссылка; + КонецЕсли; + + Если ТекущиеДанные.Загружается Тогда + ЕстьКурсы = Истина; + КонецЕсли; + + КонецЦикла; + + Возврат ТекущаяСсылка; + +КонецФункции + +&НаКлиенте +Процедура ОбработатьВыборВСпискеВалют(СтандартнаяОбработка = Неопределено) + Перем ЕстьКурсы; + + // Добавление элемента справочника и вывод результата пользователю + СтандартнаяОбработка = Ложь; + + ТекущаяСсылка = СохранитьВыбранныеСтроки(Элементы.СписокВалют.ВыделенныеСтроки, ЕстьКурсы); + + ОповеститьОВыборе(ТекущаяСсылка); + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Валюты добавлены.'"), , + ?(ОбщегоНазначенияПовтИсп.РазделениеВключено() И ЕстьКурсы, НСтр("ru = 'Курсы будут загружены автоматически через непродолжительное время.'"), ""), + БиблиотекаКартинок.Информация32 + ); + Закрыть(); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Form.form index 61466b94e..80209244a 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Form.form @@ -436,8 +436,8 @@ true - NotificationProcessing - ОбработкаОповещения + ChoiceProcessing + ОбработкаВыбора OnCreateAtServer @@ -466,9 +466,6 @@ true - - Список.ЗагружаетсяИзИнтернета -
    true
    ВЫБРАТЬ @@ -491,8 +488,7 @@ КОГДА КурсыВалют.Кратность = 1 ТОГДА " " ИНАЧЕ Валюты.Наименование - КОНЕЦ КАК КраткоеНаименование, - Валюты.ЗагружаетсяИзИнтернета + КОНЕЦ КАК КраткоеНаименование ИЗ Справочник.Валюты КАК Валюты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&КонецПериода, ) КАК КурсыВалют @@ -509,7 +505,7 @@ ПодобратьИзКлассификатора <key>ru</key> - <value>Подобрать из классификатора</value> + <value>Подобрать из классификатора...</value> 1 @@ -524,7 +520,6 @@ ПодобратьИзКлассификатора
    - FunctionalOption.СтандартныеПодсистемыВМоделиСервиса Auto Auto diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl index 02695b659..60b39f6cc 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаВыбора/Module.bsl @@ -14,17 +14,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ИмяСобытия = "ОбновитьПослеДобавления" Тогда - Элементы.Валюты.Обновить(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Валюты @@ -37,12 +26,7 @@ Если Результат = КодВозвратаДиалога.Да Тогда Отказ = Истина; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); - ОткрытьФорму(СтандартныеПодсистемыКлиентПереопределяемый.ИмяФормыВыбораКлассификатораВалют(), ПараметрыФормы, Этаформа); - Иначе - ОткрытьФорму("Справочник.Валюты.Форма.ФормаПодбораВалютИзОКВ", , ЭтаФорма); - КонецЕсли; + ОткрытьФорму("Справочник.Валюты.Форма.ПодборВалютИзКлассификатора", , ЭтаФорма); КонецЕсли; КонецПроцедуры @@ -53,8 +37,16 @@ &НаКлиенте Процедура ПодобратьИзКлассификатора(Команда) - ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); - ОткрытьФорму(СтандартныеПодсистемыКлиентПереопределяемый.ИмяФормыВыбораКлассификатораВалют(), ПараметрыФормы, Этаформа); + ОткрытьФорму("Справочник.Валюты.Форма.ПодборВалютИзКлассификатора",, ЭтаФорма); КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + + Элементы.Валюты.Обновить(); + Элементы.Валюты.ТекущаяСтрока = ВыбранноеЗначение; + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Module.bsl deleted file mode 100644 index 4765c3d1a..000000000 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаПодбораВалютИзОКВ/Module.bsl +++ /dev/null @@ -1,73 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Заполнение списка валют из ОКВ - ЗакрыватьПриВыборе = Ложь; - ЗаполнитьТаблицуВалют(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВалют - -&НаКлиенте -Процедура СписокВалютВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - // Оповещает о выборе вызывающую форму. Форма закрывается. - ОбработатьВыборВСпискеВалют(Элемент.ТекущиеДанные); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ВыбратьВыполнить() - - ОбработатьВыборВСпискеВалют(Элементы.СписокВалют.ТекущиеДанные); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура ЗаполнитьТаблицуВалют() - - // Заполняет список валют из макета ОКВ - - КлассификаторXML = Справочники.Валюты.ПолучитьМакет("ОбщероссийскийКлассификаторВалют").ПолучитьТекст(); - - КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные; - - Для Каждого ЗаписьОКВ Из КлассификаторТаблица Цикл - НоваяСтрока = Валюты.Добавить(); - НоваяСтрока.КодВалютыЦифровой = ЗаписьОКВ.Code; - НоваяСтрока.КодВалютыБуквенный = ЗаписьОКВ.CodeSymbol; - НоваяСтрока.Наименование = ЗаписьОКВ.Name; - НоваяСтрока.СтраныИТерритории = ЗаписьОКВ.Description; - НоваяСтрока.Загружается = ЗаписьОКВ.RBCLoading; - НоваяСтрока.ПараметрыПрописиНаРусском = ЗаписьОКВ.NumerationItemOptions; - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработатьВыборВСпискеВалют(ТекущиеДанные) - - // Оповещает о выборе вызывающую форму. Форма закрывается. - - ПараметрыВыбор = Новый Структура("КодВалюты, НаименованиеКраткое, НаименованиеПолное, Загружается, ПараметрыПрописиНаРусском"); - ПараметрыВыбор.КодВалюты = ТекущиеДанные.КодВалютыЦифровой; - ПараметрыВыбор.НаименованиеКраткое = ТекущиеДанные.КодВалютыБуквенный; - ПараметрыВыбор.НаименованиеПолное = ТекущиеДанные.Наименование; - ПараметрыВыбор.Загружается = ТекущиеДанные.Загружается; - ПараметрыВыбор.ПараметрыПрописиНаРусском = ТекущиеДанные.ПараметрыПрописиНаРусском; - - ОповеститьОВыборе(ПараметрыВыбор); - -КонецПроцедуры - diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form index d641416b3..06be40cfc 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Form.form @@ -26,7 +26,7 @@ КодРасширеннаяПодсказка - 63 + 61 Label true true @@ -67,7 +67,7 @@ НаименованиеРасширеннаяПодсказка - 65 + 63 Label true true @@ -108,7 +108,7 @@ НаименованиеПолноеРасширеннаяПодсказка - 67 + 65 Label true true @@ -149,7 +149,7 @@ КурсРасширеннаяПодсказка - 69 + 67 Label true true @@ -187,7 +187,7 @@ None РубЗаРасширеннаяПодсказка - 71 + 69 Label true true @@ -228,7 +228,7 @@ КратностьРасширеннаяПодсказка - 73 + 71 Label true true @@ -266,7 +266,7 @@ None КраткоеНаименованиеРасширеннаяПодсказка - 75 + 73 Label true true @@ -302,10 +302,10 @@ ВалютыСтрокаПоиска - 54 + 52 ВалютыСтрокаПоискаРасширеннаяПодсказка - 56 + 54 Label true true @@ -315,7 +315,7 @@ ВалютыСтрокаПоискаКонтекстноеМеню - 55 + 53 true Валюты @@ -325,10 +325,10 @@ ВалютыСостояниеПросмотра - 57 + 55 ВалютыСостояниеПросмотраРасширеннаяПодсказка - 59 + 57 Label true true @@ -338,7 +338,7 @@ ВалютыСостояниеПросмотраКонтекстноеМеню - 58 + 56 true ViewStatusAddition @@ -349,10 +349,10 @@ ВалютыУправлениеПоиском - 60 + 58 ВалютыУправлениеПоискомРасширеннаяПодсказка - 62 + 60 Label true true @@ -362,7 +362,7 @@ ВалютыУправлениеПоискомКонтекстноеМеню - 61 + 59 true SearchControlAddition @@ -373,7 +373,7 @@ ВалютыРасширеннаяПодсказка - 53 + 51 Label true true @@ -435,7 +435,7 @@ ФормаЗагрузитьКурсыВалютРасширеннаяПодсказка - 50 + 49 Label true true @@ -461,7 +461,7 @@ ФормаПодборИзОКВРасширеннаяПодсказка - 51 + 50 Label true true @@ -477,32 +477,6 @@ UserCmds Auto
    - - ПодобратьИзКлассификатора - 49 - true - true - - true - - - ПодобратьИзКлассификатораРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - Form.Command.ПодобратьИзКлассификатора - Normal - Auto - true - true - UserCmds - Auto - Left true @@ -584,12 +558,12 @@ ПодборИзОКВ <key>ru</key> - <value>Подбор из классификатора</value> + <value>Подобрать из классификатора...</value> 1 ru - Подбор валют из Общероссийского классификатора валют + Подобрать валюты из Общероссийского классификатора валют @@ -606,7 +580,6 @@ ПодборИзОКВ - FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме Auto Auto @@ -614,7 +587,7 @@ ЗагрузитьКурсыВалют <key>ru</key> - <value>Загрузить курсы валют</value> + <value>Загрузить курсы валют...</value> 2 @@ -640,36 +613,6 @@ Auto Auto - - ПодобратьИзКлассификатора - - <key>ru</key> - <value>Подобрать из классификатора</value> - - 3 - - ru - Подобрать из классификатора - - - - true - Role.ДобавлениеИзменениеБазовойНСИ - - - true - Role.ПолныеПрава - - - - - ПодобратьИзКлассификатора - - - FunctionalOption.СтандартныеПодсистемыВМоделиСервиса - Auto - Auto - diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Help/ru.html deleted file mode 100644 index 270241f33..000000000 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Help/ru.html +++ /dev/null @@ -1,5 +0,0 @@ - -

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

    -

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

    -

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

    -

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl index c8fb00f0e..14337dc1f 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаСписка/Module.bsl @@ -16,9 +16,8 @@ &НаКлиенте Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора) - Если ТипЗнч(РезультатВыбора) = Тип("Структура") Тогда - ОткрытьФорму("Справочник.Валюты.ФормаОбъекта", РезультатВыбора,ЭтаФорма); - КонецЕсли; + Элементы.Валюты.Обновить(); + Элементы.Валюты.ТекущаяСтрока = РезультатВыбора; КонецПроцедуры @@ -30,12 +29,6 @@ Элементы.Валюты.Обновить(); КонецЕсли; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ИмяСобытия = "ОбновитьПослеДобавления" Тогда - Элементы.Валюты.Обновить(); - КонецЕсли; - КонецЕсли; - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -50,12 +43,7 @@ Если Результат = КодВозвратаДиалога.Да Тогда Отказ = Истина; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); - ОткрытьФорму(СтандартныеПодсистемыКлиентПереопределяемый.ИмяФормыВыбораКлассификатораВалют(), ПараметрыФормы, Этаформа); - Иначе - ОткрытьФорму("Справочник.Валюты.Форма.ФормаПодбораВалютИзОКВ", , ЭтаФорма); - КонецЕсли; + ОткрытьФорму("Справочник.Валюты.Форма.ПодборВалютИзКлассификатора", , ЭтаФорма); КонецЕсли; КонецПроцедуры @@ -66,7 +54,7 @@ &НаКлиенте Процедура ПодборИзОКВ(Команда) - ОткрытьФорму("Справочник.Валюты.Форма.ФормаПодбораВалютИзОКВ",, ЭтаФорма); + ОткрытьФорму("Справочник.Валюты.Форма.ПодборВалютИзКлассификатора",, ЭтаФорма); КонецПроцедуры @@ -77,11 +65,4 @@ КонецПроцедуры -&НаКлиенте -Процедура ПодобратьИзКлассификатора(Команда) - - ПараметрыФормы = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); - ОткрытьФорму(СтандартныеПодсистемыКлиентПереопределяемый.ИмяФормыВыбораКлассификатораВалют(), ПараметрыФормы, Этаформа); - -КонецПроцедуры diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form index 479edb3de..33850ab4b 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Form.form @@ -1,56 +1,56 @@ + + НаименованиеПолное + 4 + true + true + + true + + + Объект.НаименованиеПолное + + + НаименованиеПолноеРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + НаименованиеПолноеКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + Left + + true + true + true + true + true + true + + Style.BorderColor + + Normal + + Странницы 47 ОсновныеСведения 48 - - НаименованиеПолное - 4 - true - true - - true - - - Объект.НаименованиеПолное - - - НаименованиеПолноеРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - - НаименованиеПолноеКонтекстноеМеню - 23 - true - - InputField - Enter - true - Left - true - Left - - true - true - true - true - true - true - - Style.BorderColor - - Normal - - Код 2 @@ -140,47 +140,12 @@ Normal - - ГруппаКодыВалюты - 7 - true - true - - true - - - <key>ru</key> - <value>Группа коды валюты</value> - - - ru - Группа коды валюты - - - ГруппаКодыВалютыРасширеннаяПодсказка - 80 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - Прочее 38 ЗагружаетсяИзИнтернета - 41 + 70 true true @@ -196,7 +161,7 @@ ЗагружаетсяИзИнтернетаРасширеннаяПодсказка - 82 + 81 Label true true @@ -206,7 +171,7 @@ ЗагружаетсяИзИнтернетаКонтекстноеМеню - 42 + 71 true CheckBoxField @@ -237,7 +202,7 @@ ЗависимыйКурсВалютРасширеннаяПодсказка - 85 + 84 Label true true @@ -270,7 +235,7 @@ ОсновнаяВалютаРасширеннаяПодсказка - 87 + 86 Label true true @@ -311,10 +276,6 @@ Наценка 6 - - <key>ru</key> - <value>Наценка %</value> - true true @@ -325,7 +286,7 @@ НаценкаРасширеннаяПодсказка - 89 + 88 Label true true @@ -379,7 +340,7 @@
    ГруппаЗависимыйКурсВалютРасширеннаяПодсказка - 84 + 83 Label true true @@ -413,7 +374,7 @@ true ПрочееРасширеннаяПодсказка - 81 + 80 Label true true @@ -447,7 +408,7 @@ ОсновныеСведенияРасширеннаяПодсказка - 73 + 75 Label true true @@ -488,7 +449,7 @@ ПолеПрописи4наРусскомРасширеннаяПодсказка - 93 + 92 Label true true @@ -561,7 +522,7 @@ 10 <key>ru</key> - <value>один</value> + <value>Один</value> true true @@ -577,7 +538,7 @@ ПолеПрописи1наРусскомРасширеннаяПодсказка - 95 + 94 Label true true @@ -614,7 +575,7 @@ 11 <key>ru</key> - <value>два</value> + <value>Два</value> true true @@ -630,7 +591,7 @@ ПолеПрописи2наРусскомРасширеннаяПодсказка - 97 + 96 Label true true @@ -667,7 +628,7 @@ 12 <key>ru</key> - <value>пять</value> + <value>Пять</value> true true @@ -683,7 +644,7 @@ ПолеПрописи3наРусскомРасширеннаяПодсказка - 99 + 98 Label true true @@ -726,7 +687,7 @@ ГруппаПрописанийЦелойЧастиРасширеннаяПодсказка - 92 + 91 Label true true @@ -776,7 +737,7 @@ ПолеПрописи8наРусскомРасширеннаяПодсказка - 103 + 102 Label true true @@ -849,7 +810,7 @@ 17 <key>ru</key> - <value>один</value> + <value>Один</value> true true @@ -865,7 +826,7 @@ ПолеПрописи5наРусскомРасширеннаяПодсказка - 105 + 104 Label true true @@ -902,7 +863,7 @@ 16 <key>ru</key> - <value>два</value> + <value>Два</value> true true @@ -918,7 +879,7 @@ ПолеПрописи6наРусскомРасширеннаяПодсказка - 107 + 106 Label true true @@ -955,7 +916,7 @@ 15 <key>ru</key> - <value>пять</value> + <value>Пять</value> true true @@ -971,7 +932,7 @@ ПолеПрописи7наРусскомРасширеннаяПодсказка - 109 + 108 Label true true @@ -1014,7 +975,7 @@ ГруппаПрописанийДробнойЧастиРасширеннаяПодсказка - 102 + 101 Label true true @@ -1055,7 +1016,7 @@ ДлинаДробнойЧастиРасширеннаяПодсказка - 112 + 111 Label true true @@ -1134,9 +1095,10 @@ ru Группа число разрядов дробной части + true ГруппаЧислоРазрядовДробнойЧастиРасширеннаяПодсказка - 111 + 110 Label true true @@ -1179,7 +1141,7 @@ СуммаЧислоРасширеннаяПодсказка - 115 + 114 Label true true @@ -1220,7 +1182,7 @@ СуммаПрописьюРасширеннаяПодсказка - 117 + 116 Label true true @@ -1263,7 +1225,7 @@ ГруппаПримерПрописиРасширеннаяПодсказка - 114 + 113 Label true true @@ -1274,7 +1236,7 @@ UsualGroup Auto - StrongSeparation + WeakSeparation true true auto @@ -1297,7 +1259,7 @@ ГруппаПараметрыДробнойЧастиРасширеннаяПодсказка - 101 + 100 Label true true @@ -1332,7 +1294,7 @@ ГруппаСуммаПрописьюРасширеннаяПодсказка - 91 + 90 Label true true @@ -1357,7 +1319,7 @@ СтранницыРасширеннаяПодсказка - 72 + 74 Label true true @@ -1374,7 +1336,6 @@ ТекстРучногоИзменения 68 - true true true @@ -1385,7 +1346,7 @@ None ТекстРучногоИзмененияРасширеннаяПодсказка - 119 + 118 Label true true @@ -1413,58 +1374,6 @@ ФормаКоманднаяПанель -1 - - Изменить - 64 - true - true - - true - - - ИзменитьРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - Form.Command.Изменить - Normal - Auto - true - true - UserCmds - Auto - - - ОбновитьИзКлассификатора - 65 - true - true - - true - - - ОбновитьИзКлассификатораРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - Form.Command.ОбновитьИзКлассификатора - Normal - Auto - true - true - UserCmds - Auto - Left true @@ -1775,52 +1684,6 @@ true - - Изменить - - <key>ru</key> - <value>Изменить</value> - - 1 - - ru - Изменить - - - true - - - - Изменить - - - FunctionalOption.СтандартныеПодсистемыВМоделиСервиса - Auto - Auto - - - ОбновитьИзКлассификатора - - <key>ru</key> - <value>Обновить из классификатора</value> - - 2 - - ru - Обновить из классификатора - - - true - - - - ОбновитьИзКлассификатора - - - FunctionalOption.СтандартныеПодсистемыВМоделиСервиса - Auto - Auto - diff --git a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..9892f0c7b --- /dev/null +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,23 @@ + +

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

    +

    Реквизиты:

    +

    +

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

    + +
    Рекомендация
    Для того, чтобы в печатных формах правильно указывалось наименование валюты прописью, необходимо задать параметры прописи целой и дробной части валюты. В случае если дробная часть в печатных формах отображается числом, то можно установить нужное количество разрядов при выводе печатных форм документов. Например, если установлено количество разрядов 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 7c3d2b1a9..6d4bd5298 100644 --- a/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Валюты/Forms/ФормаЭлемента/Module.bsl @@ -47,24 +47,14 @@ Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Если ЗависимыйКурсВалют Тогда - Если Не ЗначениеЗаполнено(Объект.ОсновнаяВалюта) Тогда + Если НЕ ЗначениеЗаполнено(Объект.ОсновнаяВалюта) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Необходимо указать основную валюту'"), , "Объект.ОсновнаяВалюта", , - Отказ); + Отказ + ); КонецЕсли; - - Если Не ЗначениеЗаполнено(Объект.Наценка) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Необходимо установить коэфициент подчинения курса'"), , - "Объект.Наценка", , - Отказ); - КонецЕсли; - - КонецЕсли; - - // Устанавливаем реквизиты загрузки и зависимости валюты - Если НЕ ЗависимыйКурсВалют Тогда + Иначе Объект.ОсновнаяВалюта = Неопределено; Объект.Наценка = 0; КонецЕсли; @@ -76,8 +66,6 @@ ТекущийОбъект.ПараметрыПрописиНаРусском = ПараметрыПрописиНаРусском(ЭтаФорма); - СтандартныеПодсистемыПереопределяемый.ЗаписатьФлагРучногоИзменениеПоставляемыхДанных(ЭтаФорма); - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -213,26 +201,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура Изменить(Команда) - - СтандартныеПодсистемыКлиентПереопределяемый.ИзменитьРазделенныйЭлемент(ЭтаФорма); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьИзКлассификатора(Команда) - - Если СтандартныеПодсистемыКлиентПереопределяемый.ОбновитьЭлементИзОбщихДанных(ЭтаФорма) Тогда - ОбновитьНаСервере(); - ОповеститьОбИзменении(Объект.Ссылка); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -247,14 +215,7 @@ УстановитьСклоненияПараметровПрописи(ЭтаФорма); УстановитьСуммуПрописью(ЭтаФорма); - СтандартныеПодсистемыПереопределяемый.СчитатьФлагРучногоИзмененияПоставляемыхДанных(ЭтаФорма); - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьНаСервере() - - СтандартныеПодсистемыПереопределяемый.ВосстановитьЭлементИзОбщихДанных(ЭтаФорма); +// СтандартныеПодсистемыПереопределяемый.СчитатьФлагРучногоИзмененияПоставляемыхДанных(ЭтаФорма); КонецПроцедуры @@ -355,25 +316,25 @@ Элементы = Форма.Элементы; Если Форма.ПолеПрописи4наРусском = "Женский" Тогда - Элементы.ПолеПрописи1наРусском.Заголовок = НСтр("ru = 'одна'"); - Элементы.ПолеПрописи2наРусском.Заголовок = НСтр("ru = 'две'"); + Элементы.ПолеПрописи1наРусском.Заголовок = НСтр("ru = 'Одна'"); + Элементы.ПолеПрописи2наРусском.Заголовок = НСтр("ru = 'Две'"); ИначеЕсли Форма.ПолеПрописи4наРусском = "Мужской" Тогда - Элементы.ПолеПрописи1наРусском.Заголовок = НСтр("ru = 'один'"); - Элементы.ПолеПрописи2наРусском.Заголовок = НСтр("ru = 'два'"); + Элементы.ПолеПрописи1наРусском.Заголовок = НСтр("ru = 'Один'"); + Элементы.ПолеПрописи2наРусском.Заголовок = НСтр("ru = 'Два'"); Иначе - Элементы.ПолеПрописи1наРусском.Заголовок = НСтр("ru = 'одно'"); - Элементы.ПолеПрописи2наРусском.Заголовок = НСтр("ru = 'два'"); + Элементы.ПолеПрописи1наРусском.Заголовок = НСтр("ru = 'Одно'"); + Элементы.ПолеПрописи2наРусском.Заголовок = НСтр("ru = 'Два'"); КонецЕсли; Если Форма.ПолеПрописи8наРусском = "Женский" Тогда - Элементы.ПолеПрописи5наРусском.Заголовок = НСтр("ru = 'одна'"); - Элементы.ПолеПрописи6наРусском.Заголовок = НСтр("ru = 'две'"); + Элементы.ПолеПрописи5наРусском.Заголовок = НСтр("ru = 'Одна'"); + Элементы.ПолеПрописи6наРусском.Заголовок = НСтр("ru = 'Две'"); ИначеЕсли Форма.ПолеПрописи8наРусском = "Мужской" Тогда - Элементы.ПолеПрописи5наРусском.Заголовок = НСтр("ru = 'один'"); - Элементы.ПолеПрописи6наРусском.Заголовок = НСтр("ru = 'два'"); + Элементы.ПолеПрописи5наРусском.Заголовок = НСтр("ru = 'Один'"); + Элементы.ПолеПрописи6наРусском.Заголовок = НСтр("ru = 'Два'"); Иначе - Элементы.ПолеПрописи5наРусском.Заголовок = НСтр("ru = 'одно'"); - Элементы.ПолеПрописи6наРусском.Заголовок = НСтр("ru = 'два'"); + Элементы.ПолеПрописи5наРусском.Заголовок = НСтр("ru = 'Одно'"); + Элементы.ПолеПрописи6наРусском.Заголовок = НСтр("ru = 'Два'"); КонецЕсли; КонецПроцедуры @@ -447,3 +408,4 @@ КонецФункции + diff --git a/SSL/src/Catalogs/Валюты/Help/ru.html b/SSL/src/Catalogs/Валюты/Help/ru.html index 44a4dd867..5195907da 100644 --- a/SSL/src/Catalogs/Валюты/Help/ru.html +++ b/SSL/src/Catalogs/Валюты/Help/ru.html @@ -1,8 +1,24 @@ - -

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

    -

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

    -

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

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

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

    \ 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 f911a0613..53860dabd 100644 --- a/SSL/src/Catalogs/Валюты/ObjectModule.bsl +++ b/SSL/src/Catalogs/Валюты/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -17,8 +19,15 @@ Отказ = Истина; КонецЕсли; - Если РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(Ссылка).Количество() > 0 - И ЗначениеЗаполнено(ОсновнаяВалюта) Тогда + Если НЕ ЗначениеЗаполнено(ОсновнаяВалюта) Тогда + ИсключаемыеРеквизиты = Новый Массив; + ИсключаемыеРеквизиты.Добавить("Наценка"); + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ИсключаемыеРеквизиты); + КонецЕсли; + + Если НЕ ЭтоНовый() + И РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(Ссылка).Количество() > 0 + И ЗначениеЗаполнено(ОсновнаяВалюта) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Валюта не может быть подчиненной, так как она является основной для других валют.'") ); @@ -39,4 +48,24 @@ РаботаСКурсамиВалют.ЗаписатьСведенияДляПодчиненногоРегистра(ОсновнаяВалюта, Ссылка); КонецЕсли; + Если ДополнительныеСвойства.Свойство("ОбновитьКурсы") Тогда + СтандартныеПодсистемыПереопределяемый.ОбновитьКурсыВалютВМоделиСервиса(ЭтотОбъект); + КонецЕсли; + КонецПроцедуры + +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если Ссылка.Пустая() Или Ссылка.Код <> Код Или Ссылка.ЗагружаетсяИзИнтернета <> ЗагружаетсяИзИнтернета Тогда + ДополнительныеСвойства.Вставить("ОбновитьКурсы"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt index ef4c05a92..e5698e85a 100644 --- a/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt +++ b/SSL/src/Catalogs/Валюты/Templates/ОбщероссийскийКлассификаторВалют/Template.txt @@ -10,8 +10,8 @@ - - + + @@ -69,7 +69,7 @@ " RBCLoading="ложь"/> - + @@ -105,7 +105,7 @@ - + @@ -125,14 +125,14 @@ - + - + diff --git a/SSL/src/Catalogs/Валюты/Валюты.mdo b/SSL/src/Catalogs/Валюты/Валюты.mdo index c5d6d6a9c..b8ceb4a02 100644 --- a/SSL/src/Catalogs/Валюты/Валюты.mdo +++ b/SSL/src/Catalogs/Валюты/Валюты.mdo @@ -187,7 +187,7 @@ Наценка ru - Наценка + Наценка, % Number @@ -198,7 +198,7 @@ ru - Коэффициент пересчета курса базовой валюты в текущий + Коэффициент, который применяется к курсу основной валюты для вычисления курса текущей валюты. @@ -256,11 +256,11 @@ Use Use - - ФормаСписка + + ПодборВалютИзКлассификатора ru - Форма списка + Общероссийский классификатор валют @@ -270,24 +270,6 @@ PersonalComputer MobileDevice - - ФормаЭлемента - - ru - Форма элемента - - PersonalComputer - MobileDevice - - - ФормаПодбораВалютИзОКВ - - ru - Общероссийский классификатор валют - - PersonalComputer - MobileDevice - ФормаВыбора @@ -297,6 +279,29 @@ PersonalComputer MobileDevice + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + + ФормаЭлемента + + ru + Валюта + + + + ru + + + PersonalComputer + MobileDevice + ОбщероссийскийКлассификаторВалют diff --git a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl index b7e5b6a6c..30ff4715b 100644 --- a/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Module.bsl @@ -9,7 +9,7 @@ Возврат; КонецЕсли; - Если НЕ ЗначениеЗаполнено(ВнешниеПользователи.ТекущийВнешнийПользователь()) Тогда + Если НЕ ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Варианты ответов анкет используются только внешними пользователями.'"),,,,Отказ); КонецЕсли; diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl new file mode 100644 index 000000000..1e8f7934e --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule.bsl @@ -0,0 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ВариантыОтчетовКлиент.ОткрытьВариантОтчета(ПараметрыВыполненияКоманды.Источник); +КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl new file mode 100644 index 000000000..c403c1620 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule.bsl @@ -0,0 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(МассивВариантов, ПараметрыВыполненияКоманды) + ВариантыОтчетовКлиент.ОткрытьДиалогРамещенияВариантовВРазделах(МассивВариантов); +КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl new file mode 100644 index 000000000..c7b73ac15 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule.bsl @@ -0,0 +1,86 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +&НаКлиенте +Процедура ОбработкаКоманды(МассивВариантов, ПараметрыВыполненияКоманды) + КоличествоВариантов = МассивВариантов.Количество(); + Если КоличествоВариантов = 0 Тогда + Возврат; + КонецЕсли; + + Если НЕ ЕстьПользовательскиеНастройкиСервер(МассивВариантов) Тогда + Предупреждение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пользовательские настройки выбранных вариантов отчетов (%1 шт) не заданы или уже сброшены.'"), + Формат(КоличествоВариантов, "ЧГ=") + ) + ); + Возврат; + КонецЕсли; + + ТекстВопроса = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Внимание, операция ""Сбросить настройки пользователей"" необратима. + | + |Нажмите ""Продолжить"" что бы сбросить пользовательские настройки + |быстрого доступа и видимости выбранных вариантов отчетов (%1 шт).'"), + Формат(КоличествоВариантов, "ЧГ=") + ); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(1, НСтр("ru = 'Продолжить'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(ТекстВопроса, Кнопки, , КодВозвратаДиалога.Отмена); + Если Ответ <> 1 Тогда + Возврат; + КонецЕсли; + + СброситьНастройкиПользователейСервер(МассивВариантов); + Если КоличествоВариантов = 1 Тогда + ПоказатьОповещениеПользователя( + НСтр("ru = 'Сброшены пользовательские настройки варианта отчета'"), + ПолучитьНавигационнуюСсылку(МассивВариантов[0]), + Строка(МассивВариантов[0]) + ); + Иначе + ПоказатьОповещениеПользователя( + , + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сброшены пользовательские настройки + |вариантов отчетов (%1 шт.).'"), + Формат(МассивВариантов.Количество(), "ЧН=0; ЧГ=0") + ) + ); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция СброситьНастройкиПользователейСервер(МассивВариантов) + НачатьТранзакцию(); + Для Каждого ВариантСсылка Из МассивВариантов Цикл + РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройкиВариантаОтчета(ВариантСсылка); + КонецЦикла; + ЗафиксироватьТранзакцию(); +КонецФункции + +&НаСервере +Функция ЕстьПользовательскиеНастройкиСервер(МассивВариантов) + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("МассивВариантов", МассивВариантов); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК Поле1 + |ИЗ + | РегистрСведений.НастройкиВариантовОтчетов КАК Настройки + |ГДЕ + | Настройки.Вариант В(&МассивВариантов)"; + + ЕстьПользовательскиеНастройки = НЕ Запрос.Выполнить().Пустой(); + Возврат ЕстьПользовательскиеНастройки; +КонецФункции + diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Form.form deleted file mode 100644 index beeaae0d3..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Form.form +++ /dev/null @@ -1,606 +0,0 @@ - - - - <key>ru</key> - <value>Настройка быстрого доступа</value> - - - Пользователи - 1 - true - true - - true - - - Пользователи - - None - - ГруппаКолонок - 10 - - БыстрыйДоступПользователя - 6 - true - true - - true - - - Пользователи.БыстрыйДоступПользователя - - - БыстрыйДоступПользователяРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - - БыстрыйДоступПользователяКонтекстноеМеню - 7 - true - - CheckBoxField - Auto - true - Left - true - - - - Пользователь - 11 - true - true - - true - - - Пользователи.Пользователь - - - ПользовательРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - - ПользовательКонтекстноеМеню - 12 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Роль</value> - - - ru - Роль - - true - - ГруппаКолонокРасширеннаяПодсказка - 34 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - Top - - ПользователиКоманднаяПанель - 3 - - ОтметитьВсе - 19 - true - true - - true - - - ОтметитьВсеРасширеннаяПодсказка - 22 - Label - true - true - - Left - - - Form.Command.ОтметитьВсе - Normal - Auto - true - true - UserCmds - Auto - - - СнятьОтметки - 20 - true - true - - true - - - СнятьОтметкиРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - Form.Command.СнятьОтметки - Normal - Auto - true - true - UserCmds - Auto - - Left - - - ПользователиСтрокаПоиска - 25 - - ПользователиСтрокаПоискаРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - - ПользователиСтрокаПоискаКонтекстноеМеню - 26 - true - - Пользователи - - true - - - - ПользователиСостояниеПросмотра - 28 - - ПользователиСостояниеПросмотраРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - ПользователиСостояниеПросмотраКонтекстноеМеню - 29 - true - - ViewStatusAddition - Пользователи - - true - - - - ПользователиУправлениеПоиском - 31 - - ПользователиУправлениеПоискомРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - - ПользователиУправлениеПоискомКонтекстноеМеню - 32 - true - - SearchControlAddition - Пользователи - - true - - - - ПользователиРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - - ПользователиКонтекстноеМеню - 2 - true - - Tree - true - true - true - 15 - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - ExpandAllLevels - true - true - true - true - None - None - None - true - - - - БыстрыйДоступ - 8 - true - true - - true - - - БыстрыйДоступ - - Right - - БыстрыйДоступРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - - БыстрыйДоступКонтекстноеМеню - 9 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаКоманднаяПанель - 21 - - Принять - 16 - - <key>ru</key> - <value>ОК</value> - - true - true - - true - - - ПринятьРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - Form.Command.Принять - Auto - true - true - true - UserCmds - Auto - - - Закрыть - 17 - - <key>ru</key> - <value>Отмена</value> - - true - true - - true - - - ЗакрытьРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа командная панель</value> - - - ru - Группа командная панель - - - ГруппаКоманднаяПанельРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - CommandBar - - Right - - - None - false - - ФормаКоманднаяПанель - -1 - Right - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - БыстрыйДоступ - - <key>ru</key> - <value>Быстрый доступ к отчету для новых пользователей</value> - - 1 - - Boolean - - - true - - - true - - - - Пользователи - - <key>ru</key> - <value>Пользователи</value> - - 2 - - ValueTable - - - true - - - true - - - Пользователь - - <key>ru</key> - <value>Пользователь</value> - - 1 - - CatalogRef.Пользователи - - - true - - - true - - - - БыстрыйДоступПользователя - - <key>ru</key> - <value>Быстрый доступ пользователя</value> - - 2 - - Boolean - - - true - - - true - - - - - Принять - - <key>ru</key> - <value>Принять</value> - - 1 - - true - - - - Принять - - - Auto - Auto - - - ОтметитьВсе - - <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 - - - ИсключенияБыстрогоДоступа - - ValueList - - - - БыстрыйДоступ - - Boolean - - - - Вариант - - CatalogRef.ВариантыОтчетов - - - - - - - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Module.bsl deleted file mode 100644 index a294edd04..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаБыстрогоДоступа/Module.bsl +++ /dev/null @@ -1,103 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Запрос = Новый Запрос; - - Если Параметры.Свойство("Вариант") И ЗначениеЗаполнено(Параметры.Вариант) Тогда - БыстрыйДоступ = Параметры.Вариант.БыстрыйДоступ; - Запрос.УстановитьПараметр("Вариант", Параметры.Вариант); - - ТекстЗапроса = - "ВЫБРАТЬ - | ИсключенияБыстрогоДоступа.Пользователь, - | (НЕ &БыстрыйДоступ) КАК БыстрыйДоступПользователя - |ПОМЕСТИТЬ втИсключения - |ИЗ - | Справочник.ВариантыОтчетов.ИсключенияБыстрогоДоступа КАК ИсключенияБыстрогоДоступа - |ГДЕ - | ИсключенияБыстрогоДоступа.Ссылка = &Вариант - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Пользователи.Ссылка КАК Пользователь, - | ЕСТЬNULL(Исключения.БыстрыйДоступПользователя, &БыстрыйДоступ) КАК БыстрыйДоступПользователя - |ИЗ - | Справочник.Пользователи КАК Пользователи - | ЛЕВОЕ СОЕДИНЕНИЕ втИсключения КАК Исключения - | ПО Пользователи.Ссылка = Исключения.Пользователь" - Иначе - - ИсключенияБыстрогоДоступа = Новый ТаблицаЗначений; - ИсключенияБыстрогоДоступа.Колонки.Добавить("Пользователь", Новый ОписаниеТипов("СправочникСсылка.Пользователи")); - Для Каждого ЭлементСписка Из Параметры.ИсключенияБыстрогоДоступа Цикл - ИсключенияБыстрогоДоступа.Добавить().Пользователь = ЭлементСписка.Значение; - КонецЦикла; - - БыстрыйДоступ = Параметры.БыстрыйДоступ; - Запрос.УстановитьПараметр("ИсключенияБыстрогоДоступа", ИсключенияБыстрогоДоступа); - - ТекстЗапроса = - "ВЫБРАТЬ - | ИсключенияБыстрогоДоступа.Пользователь, - | (НЕ &БыстрыйДоступ) КАК БыстрыйДоступПользователя - |ПОМЕСТИТЬ втИсключения - |ИЗ - | &ИсключенияБыстрогоДоступа КАК ИсключенияБыстрогоДоступа - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Пользователи.Ссылка КАК Пользователь, - | ЕСТЬNULL(Исключения.БыстрыйДоступПользователя, &БыстрыйДоступ) КАК БыстрыйДоступПользователя - |ИЗ - | Справочник.Пользователи КАК Пользователи - | ЛЕВОЕ СОЕДИНЕНИЕ втИсключения КАК Исключения - | ПО Пользователи.Ссылка = Исключения.Пользователь" - КонецЕсли; - - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("БыстрыйДоступ", БыстрыйДоступ); - - УстановитьПривилегированныйРежим(Истина); - Пользователи.Загрузить(Запрос.Выполнить().Выгрузить()); - УстановитьПривилегированныйРежим(Ложь); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура Принять(Команда) - - Результат = Новый Структура("БыстрыйДоступ, ИсключенияБыстрогоДоступа", БыстрыйДоступ, Новый СписокЗначений); - ИсключенияБыстрогоДоступа = Пользователи.НайтиСтроки(Новый Структура("БыстрыйДоступПользователя", НЕ БыстрыйДоступ)); - Для Каждого СтрокаПользователь Из ИсключенияБыстрогоДоступа Цикл - Результат.ИсключенияБыстрогоДоступа.Добавить(СтрокаПользователь.Пользователь); - КонецЦикла; - Закрыть(Результат); - -КонецПроцедуры - -&НаКлиенте -Процедура ОтметитьВсе(Команда) - - БыстрыйДоступ = Истина; - Для Каждого СтрокаПользователь Из Пользователи Цикл - СтрокаПользователь.БыстрыйДоступПользователя = Истина; - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура СнятьОтметки(Команда) - - БыстрыйДоступ = Ложь; - Для Каждого СтрокаПользователь Из Пользователи Цикл - СтрокаПользователь.БыстрыйДоступПользователя = Ложь; - КонецЦикла; - -КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Module.bsl deleted file mode 100644 index 6288ec656..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Module.bsl +++ /dev/null @@ -1,337 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЗагузитьСтруктураПодсистем(); - - // заполним вариантами группировки - - ТЗ = "ВЫБРАТЬ - | ВариантыОтчетовПодсистемы.Подсистема, - | ВариантыОтчетовПодсистемы.Ссылка, - | ВариантыОтчетовПодсистемы.Ссылка.Наименование КАК Представление, - | ВариантыОтчетовПодсистемы.Ссылка.КлючВарианта, - | ВариантыОтчетовПодсистемы.Ссылка.КлючОбъекта КАК Отчет, - | ВариантыОтчетовПодсистемы.Предопределенная - |ИЗ - | Справочник.ВариантыОтчетов.Подсистемы КАК ВариантыОтчетовПодсистемы - |ГДЕ - | (НЕ ВариантыОтчетовПодсистемы.Ссылка.ПометкаУдаления)"; - - Запрос = Новый Запрос(ТЗ); - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - - МассивСтрок = СоответсвиеПодсистемИСтрок.НайтиСтроки(Новый Структура("Путь", Выборка.Подсистема)); - Если МассивСтрок.Количество() > 0 тогда - СтрокаПодсистемы = ДеревоПодсистем.НайтиПоИдентификатору(МассивСтрок[0].ИдентификаторСтроки); - Иначе - Продолжить;; - КонецЕсли; - - Если СтрокаПодсистемы = Неопределено тогда - Продолжить; - КонецЕсли; - СтрокаВарианта = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); - - СтрокаВарианта.Путь = СтрокаПодсистемы.Путь; - СтрокаВарианта.Представление = Выборка.Представление; - СтрокаВарианта.Вариант = Выборка.Ссылка; - СтрокаВарианта.Ключ = Выборка.КлючВарианта; - СтрокаВарианта.Отчет = Выборка.Отчет; - СтрокаВарианта.Предопредленная = Выборка.Предопределенная; - - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем - -&НаКлиенте -Процедура ДеревоПодсистемПриАктивизацииСтроки(Элемент) - - Если Элемент.ТекущиеДанные <> Неопределено тогда - Если Элемент.ТекущиеДанные.Предопредленная или Элемент.ТекущиеДанные.Отчет = "" тогда - Элементы.ДеревоПодсистемПереместитьВариант.Доступность = Ложь; - Элементы.Удалить.Доступность = Ложь; - Иначе - Элементы.ДеревоПодсистемПереместитьВариант.Доступность = истина; - Элементы.Удалить.Доступность = истина; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоПодсистемПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - СтандартнаяОбработка = ложь; - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Массив") тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - Возврат; - КонецЕсли; - - СтрокаВставки = ДеревоПодсистем.НайтиПоИдентификатору(Строка); - ПеретаскиваемыеДанные = Неопределено; - Если ПараметрыПеретаскивания.Значение.Количество() > 0 тогда - ИндексСтроки = ПараметрыПеретаскивания.Значение[0]; - ПеретаскиваемыеДанные = ДеревоПодсистем.НайтиПоИдентификатору(ИндексСтроки); - КонецЕсли; - - - Если НЕ ((СтрокаВставки <> Неопределено и СтрокаВставки.Отчет = "") - и (ПеретаскиваемыеДанные <> Неопределено и ПеретаскиваемыеДанные.Отчет <> "")) тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - КонецЕсли; - - Если ПеретаскиваемыеДанные <> Неопределено и ПеретаскиваемыеДанные.Предопредленная - и ПараметрыПеретаскивания.Действие <> ДействиеПеретаскивания.Копирование тогда - ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоПодсистемПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) - - Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Массив") тогда - СтандартнаяОбработка = ложь; - Возврат; - КонецЕсли; - - ПеретаскиваемыеДанные = Неопределено; - Если ПараметрыПеретаскивания.Значение.Количество() > 0 тогда - ИндексСтроки = ПараметрыПеретаскивания.Значение[0]; - ПеретаскиваемыеДанные = ДеревоПодсистем.НайтиПоИдентификатору(ИндексСтроки); - КонецЕсли; - СтандартнаяОбработка = ложь; - СтрокаВставки = ДеревоПодсистем.НайтиПоИдентификатору(Строка); - ПутьПодсистемы = СтрокаВставки.Путь; - - // опредлим формирование отчетности - СтрокаВарианта = Неопределено; - Для каждого СтркаВарианта из СтрокаВставки.ПолучитьЭлементы() Цикл - Если СтркаВарианта.Ключ = ПеретаскиваемыеДанные.Ключ - И СтркаВарианта.Отчет = ПеретаскиваемыеДанные.Отчет - И ПутьПодсистемы = ПеретаскиваемыеДанные.ПолучитьРодителя().Путь тогда - СтрокаВарианта = СтркаВарианта; - Прервать; - КонецЕсли; - КонецЦикла; - - Если СтрокаВарианта <> Неопределено тогда - Возврат; - КонецЕсли; - - Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование тогда - НоваяСтрока = СтрокаВставки.ПолучитьЭлементы().Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеретаскиваемыеДанные); - НоваяСтрока.Путь = ПутьПодсистемы; - НоваяСтрока.Предопредленная = ложь; - ИначеЕсли ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение тогда - - НоваяСтрока = СтрокаВставки.ПолучитьЭлементы().Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеретаскиваемыеДанные); - НоваяСтрока.Путь = ПутьПодсистемы; - НоваяСтрока.Предопредленная = ложь; - РодительСтроки = ПеретаскиваемыеДанные.ПолучитьРодителя(); - РодительСтроки.ПолучитьЭлементы().Удалить(ПеретаскиваемыеДанные); - - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ПрименитьКомандыйИнтерфейс(Команда) - - ПрименитьНастройки(); - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура СкопироватьВариант(Команда) - - Результат = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.СкопироватьВариантВРаздел", , ЭтаФорма); - Если Результат <> Неопределено тогда - МассивСтрок = СоответсвиеПодсистемИСтрок.НайтиСтроки(Новый Структура("Путь", Результат.Путь)); - Если МассивСтрок.Количество() > 0 тогда - СтрокаПодсистемы = ДеревоПодсистем.НайтиПоИдентификатору(МассивСтрок[0].ИдентификаторСтроки); - Иначе - Возврат; - КонецЕсли; - НоваяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); - НоваяСтрока.Путь = Результат.Путь; - НоваяСтрока.Отчет = Результат.Отчет; - НоваяСтрока.Ключ = Результат.Вариант; - НоваяСтрока.Вариант = Результат.Ссылка; - НоваяСтрока.Представление = Результат.ПредставлениеВарианта; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПреместитьВариант(Команда) - - Результат = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.ПереместитьВариантВРаздел", , ЭтаФорма); - Если Результат <> Неопределено тогда - МассивСтрок = СоответсвиеПодсистемИСтрок.НайтиСтроки(Новый Структура("Путь", Результат)); - Если МассивСтрок.Количество() > 0 тогда - СтрокаПодсистемы = ДеревоПодсистем.НайтиПоИдентификатору(МассивСтрок[0].ИдентификаторСтроки); - Иначе - Возврат; - КонецЕсли; - ПеретаскиваемыеДанные = Элементы.ДеревоПодсистем.ТекущиеДанные; - Если ПеретаскиваемыеДанные.Предопредленная тогда - Возврат; - КонецЕсли; - НоваяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, ПеретаскиваемыеДанные); - НоваяСтрока.Путь = Результат; - - РодительСтроки = ПеретаскиваемыеДанные.ПолучитьРодителя(); - РодительСтроки.ПолучитьЭлементы().Удалить(ПеретаскиваемыеДанные); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Отмена(Команда) - Закрыть(); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура ПрименитьНастройки() - - //список вариантов - СписокВариантов = Новый ТаблицаЗначений; - - СписокВариантов.Колонки.Добавить("Вариант"); - СписокВариантов.Колонки.Добавить("Путь"); - СписокВариантов.Колонки.Добавить("ПутьПредставление"); - - - Для каждого СтрокаВарианта из ДеревоПодсистем.ПолучитьЭлементы() Цикл - Если НЕ СтрокаВарианта.Вариант.Пустая() и НЕ СтрокаВарианта.Предопредленная тогда - СтркаВарианта = СписокВариантов.Добавить(); - СтркаВарианта.Вариант = СтрокаВарианта.Вариант; - СтркаВарианта.Путь = СтрокаВарианта.Путь; - СтркаВарианта.ПутьПредставление = СтрокаВарианта.ПолучитьРодителя().Представление; - Иначе - СкопироватьПодчиенныеВарианты(СтрокаВарианта, СписокВариантов); - КонецЕсли; - - КонецЦикла; - - СписокВариантовБезПодсистем = СписокВариантов.Скопировать(); - СписокВариантовБезПодсистем.Свернуть("Вариант"); - - НачатьТранзакцию(); - Попытка - Для каждого СтрокаВарианта из СписокВариантовБезПодсистем Цикл - - ОбъектВарианта = СтрокаВарианта.Вариант.ПолучитьОбъект(); - - МассивСтрокДляУдаления = Новый Массив; - - // удалим подсистемы - Для каждого СтрокаПодсиситемы из ОбъектВарианта.Подсистемы Цикл - Если НЕ СтрокаПодсиситемы.Предопределенная тогда - МассивСтрокДляУдаления.Добавить(СтрокаПодсиситемы); - КонецЕсли; - КонецЦикла; - - Для каждого СтрокаПодсиситемы из МассивСтрокДляУдаления Цикл - ОбъектВарианта.Подсистемы.Удалить(СтрокаПодсиситемы) - КонецЦикла; - - // формирование строк подсистемы - МассивСтрокДляДобавления = СписокВариантов.НайтиСтроки(Новый Структура("Вариант", СтрокаВарианта.Вариант)); - - Для каждого СтрокаПодсистемы из МассивСтрокДляДобавления Цикл - НоваяСтрокаПодсистемы = ОбъектВарианта.Подсистемы.Добавить(); - НоваяСтрокаПодсистемы.Подсистема = СтрокаПодсистемы.Путь; - НоваяСтрокаПодсистемы.Название = СтрокаПодсистемы.ПутьПредставление - КонецЦикла; - ОбъектВарианта.ЗАписать(); - КонецЦикла; - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Варианты отчетов. Настройка группировки по разделам'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); - КонецПопытки; - - ЗафиксироватьТранзакцию(); - -КонецПроцедуры - -&НаСервере -Процедура СкопироватьПодчиенныеВарианты(СтрокаВарианта, СписокВариантов) - - Для каждого СтрокаВариантаПодчиненная из СтрокаВарианта.ПолучитьЭлементы() Цикл - Если НЕ СтрокаВариантаПодчиненная.Вариант.Пустая() И НЕ СтрокаВариантаПодчиненная.Предопредленная тогда - СтркаВарианта = СписокВариантов.Добавить(); - СтркаВарианта.Вариант = СтрокаВариантаПодчиненная.Вариант; - СтркаВарианта.Путь = СтрокаВариантаПодчиненная.Путь; - СтркаВарианта.ПутьПредставление = СтрокаВариантаПодчиненная.ПолучитьРодителя().Представление; - Иначе - СкопироватьПодчиенныеВарианты(СтрокаВариантаПодчиненная, СписокВариантов); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ЗагузитьСтруктураПодсистем() - - ДеревоПодсистемДляКопирования = Новый ДеревоЗначений; - ДеревоПодсистемДляКопирования.Колонки.Добавить("Подсистема"); - ДеревоПодсистемДляКопирования.Колонки.Добавить("Название"); - - СписокПодсистем = Новый СписокЗначений; - СписокПодсистем.Добавить(""); - - // Сделаем список отчетов - СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(СписокПодсистем, ДеревоПодсистемДляКопирования); - - СтрокаКонфигурации = ДеревоПодсистем.ПолучитьЭлементы().Добавить(); - СтрокаКонфигурации.Путь = ""; - СтрокаКонфигурации.Представление = "Конфигурация"; - СтрокаКонфигурации.Предопредленная = истина; - - СкопироватьДеревоЗначений(СтрокаКонфигурации.ПолучитьЭлементы(), ДеревоПодсистемДляКопирования.Строки, СоответсвиеПодсистемИСтрок); - -КонецПроцедуры - -&НаСервере -Процедура СкопироватьДеревоЗначений(КолекцияПриемник, КолекцияИсточник, СоответсвиеПодсистемИСтрок) - - Для каждого Элемент из КолекцияИсточник Цикл - СтрокаЗначение = КолекцияПриемник.Добавить(); - СтрокаЗначение.Путь = Элемент.Подсистема; - СтрокаЗначение.Представление = Элемент.Название; - СтрокаЗначение.Предопредленная = Метаданные.НайтиПоПолномуИмени("Подсистема." + СтрЗаменить(Элемент.Подсистема, "\", ".Подсистема.")) <> Неопределено; - СтрокаВарианта = СоответсвиеПодсистемИСтрок.Добавить(); - СтрокаВарианта.Путь = СтрокаЗначение.Путь; - СтрокаВарианта.ИдентификаторСтроки = СтрокаЗначение.ПолучитьИдентификатор(); - СкопироватьДеревоЗначений(СтрокаЗначение.ПолучитьЭлементы(), Элемент.Строки, СоответсвиеПодсистемИСтрок); - КонецЦикла; - -КонецПроцедуры - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Form.form deleted file mode 100644 index 9f1c8b4c1..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Form.form +++ /dev/null @@ -1,555 +0,0 @@ - - - - <key>ru</key> - <value>Разделы</value> - - - ДеревоПодсистем - 1 - true - true - - true - - - ДеревоПодсистем - - None - - ДеревоПодсистемГруппаПодсистема - 12 - - ДеревоПодсистемИспользование - 10 - true - true - - true - - - ДеревоПодсистем.Использование - - - ДеревоПодсистемИспользованиеРасширеннаяПодсказка - 28 - Label - true - true - - Left - - - - ДеревоПодсистемИспользованиеКонтекстноеМеню - 11 - true - - CheckBoxField - Auto - true - Left - true - - - - ДеревоПодсистемНазвание - 6 - true - true - - true - - - ДеревоПодсистем.Название - - - ДеревоПодсистемНазваниеРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - ДеревоПодсистемНазваниеКонтекстноеМеню - 7 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Дерево подсистем группа подсистема</value> - - - ru - Дерево подсистем группа подсистема - - - ДеревоПодсистемГруппаПодсистемаРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - None - - ДеревоПодсистемКоманднаяПанель - 3 - Left - true - - - ДеревоПодсистемСтрокаПоиска - 18 - - ДеревоПодсистемСтрокаПоискаРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - - ДеревоПодсистемСтрокаПоискаКонтекстноеМеню - 19 - true - - ДеревоПодсистем - - true - - - - ДеревоПодсистемСостояниеПросмотра - 21 - - ДеревоПодсистемСостояниеПросмотраРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - - ДеревоПодсистемСостояниеПросмотраКонтекстноеМеню - 22 - true - - ViewStatusAddition - ДеревоПодсистем - - true - - - - ДеревоПодсистемУправлениеПоиском - 24 - - ДеревоПодсистемУправлениеПоискомРасширеннаяПодсказка - 26 - Label - true - true - - Left - - - - ДеревоПодсистемУправлениеПоискомКонтекстноеМеню - 25 - true - - SearchControlAddition - ДеревоПодсистем - - true - - - - ДеревоПодсистемРасширеннаяПодсказка - 17 - Label - true - true - - Left - - - - ДеревоПодсистемКонтекстноеМеню - 2 - true - - Tree - true - true - true - 15 - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - true - Auto - Auto - ExpandAllLevels - true - true - true - true - None - None - None - true - - - Панель - 16 - - Принять - 14 - true - true - - true - - - ПринятьРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - Form.Command.Принять - Auto - true - true - true - UserCmds - Auto - - - Закрыть - 15 - - <key>ru</key> - <value>Отмена</value> - - true - true - - true - - - ЗакрытьРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Панель</value> - - - ru - Панель - - - ПанельРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - CommandBar - - Right - - - None - false - - ФормаКоманднаяПанель - -1 - Left - true - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - ДеревоПодсистем - - <key>ru</key> - <value>Дерево подсистем</value> - - 1 - - ValueTree - - - true - - - true - - - ПутьКПодсистеме - - <key>ru</key> - <value>Путь к подсистеме</value> - - 1 - - String - - - - true - - - true - - - - Название - - <key>ru</key> - <value>Название</value> - - 2 - - String - - - - true - - - true - - - - Предопределенная - - <key>ru</key> - <value>Предопределенная</value> - - 3 - - Boolean - - - true - - - true - - - - Использование - - <key>ru</key> - <value>Использование</value> - - 4 - - Boolean - - - true - - - true - - - - - Подсистемы - - <key>ru</key> - <value>Подсистемы</value> - - 2 - - ValueTable - - - true - - - true - - - Подсистема - - <key>ru</key> - <value>Подсистема</value> - - 1 - - String - - - - true - - - true - - - - Название - - <key>ru</key> - <value>Название</value> - - 2 - - String - - - - true - - - true - - - - Предопределенная - - <key>ru</key> - <value>Предопределенная</value> - - 3 - - Boolean - - - true - - - true - - - - - АдресДереваПодсистем - - <key>ru</key> - <value>Адрес дерева подсистем</value> - - 3 - - String - - - - true - - - true - - - - Принять - - <key>ru</key> - <value>ОК</value> - - 1 - - true - - - - Принять - - - Auto - Auto - - - - - - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Module.bsl deleted file mode 100644 index 7766676ec..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/Module.bsl +++ /dev/null @@ -1,96 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Ожидаемые параметры: ДеревоПодсистем, Подсистемы, НовыйЭлементСправочника - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - АдресДереваПодсистем = Параметры.АдресДереваПодсистем; - ДеревоЗначений = ПолучитьИзВременногоХранилища(АдресДереваПодсистем); - УдалитьИзВременногоХранилища(Параметры.АдресДереваПодсистем); - - Найденные = ДеревоЗначений.Строки.НайтиСтроки(Новый Структура("Предопределенная", Истина), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - СтрокаДерева.Предопределенная = Ложь; - КонецЦикла; - - Если Параметры.Свойство("Подсистемы") Тогда - ТаблицаЗначений = Параметры.Подсистемы.Выгрузить(); - - Для Каждого СтрокаТаблицы Из ТаблицаЗначений Цикл - Найденные = ДеревоЗначений.Строки.НайтиСтроки(Новый Структура("ПутьКПодсистеме", СтрокаТаблицы.Подсистема), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - СтрокаДерева.Использование = Истина; - СтрокаДерева.Предопределенная = СтрокаТаблицы.Предопределенная; - КонецЦикла; - КонецЦикла; - - ЗначениеВРеквизитФормы(ТаблицаЗначений, "Подсистемы"); - КонецЕсли; - - ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПодсистем"); - - Если Параметры.НовыйЭлементСправочника Тогда - Если УсловноеОформление.Элементы.Количество() > 0 Тогда - УсловноеОформление.Элементы.Получить(0).Использование = Ложь; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура Принять(Команда) - - Подсистемы.Очистить(); - - Для каждого СтрокаПодсистемы из ДеревоПодсистем.ПолучитьЭлементы() Цикл - Если СтрокаПодсистемы.Использование тогда - ГруппировкаПодсистемы = Подсистемы.Добавить(); - ГруппировкаПодсистемы.Подсистема = СтрокаПодсистемы.ПутьКПодсистеме; - ГруппировкаПодсистемы.Название = СтрокаПодсистемы.Название; - ГруппировкаПодсистемы.Предопределенная = СтрокаПодсистемы.Предопределенная; - КонецЕсли; - ДобавитьПодсистемы(СтрокаПодсистемы) - КонецЦикла; - - ВозвращаемыеПараметры = Новый Структура("СписокПодсистем, АдресДереваПодсистем"); - ВозвращаемыеПараметры.СписокПодсистем = Подсистемы; - ВозвращаемыеПараметры.АдресДереваПодсистем = АдресДереваПодсистем; - - ПодготовитьРезультатНастройкиПодсистем(ВозвращаемыеПараметры); - - Закрыть(ВозвращаемыеПараметры); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаКлиенте -Процедура ДобавитьПодсистемы(СтрокаПодсистемы) - - Для каждого СтрокаПодсистемы из СтрокаПодсистемы.ПолучитьЭлементы() Цикл - Если СтрокаПодсистемы.Использование тогда - ГруппировкаПодсистема = Подсистемы.Добавить(); - ГруппировкаПодсистема.Подсистема = СтрокаПодсистемы.ПутьКПодсистеме; - ГруппировкаПодсистема.Название = СтрокаПодсистемы.Название; - ГруппировкаПодсистема.Предопределенная = СтрокаПодсистемы.Предопределенная; - КонецЕсли; - ДобавитьПодсистемы(СтрокаПодсистемы) - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ПодготовитьРезультатНастройкиПодсистем(ВозвращаемыеПараметры) - - ДеревоЗначений = ДанныеФормыВЗначение(ДеревоПодсистем, Тип("ДеревоЗначений")); - ПоместитьВоВременноеХранилище(ДеревоЗначений, ВозвращаемыеПараметры.АдресДереваПодсистем); - -КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Form.form deleted file mode 100644 index c7ca75f33..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Form.form +++ /dev/null @@ -1,466 +0,0 @@ - - - - <key>ru</key> - <value>Переместить вариант в раздел</value> - - - ДеревоПодсистем - 1 - true - true - - true - - - ДеревоПодсистем - - None - Add - Change - Copy - CopyToClipboard - Delete - EndEdit - HierarchicalList - List - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - Tree - - ДеревоПодсистемПредставление - 4 - - <key>ru</key> - <value>Раздел</value> - - true - true - - true - - - ДеревоПодсистем.Представление - - - ДеревоПодсистемПредставлениеРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - - ДеревоПодсистемПредставлениеКонтекстноеМеню - 5 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - Bottom - - ДеревоПодсистемКоманднаяПанель - 3 - - ДеревоПодсистемОК - 6 - true - true - - true - - - ДеревоПодсистемОКРасширеннаяПодсказка - 8 - Label - true - true - - Left - - - Form.Command.ОК - Auto - true - true - true - UserCmds - Auto - - - ДеревоПодсистемОтмена - 7 - true - true - - true - - - ДеревоПодсистемОтменаРасширеннаяПодсказка - 9 - Label - true - true - - Left - - - Form.Command.Отмена - Normal - Auto - true - true - UserCmds - Auto - - Right - - - Selection - ДеревоПодсистемВыбор - - - ДеревоПодсистемСтрокаПоиска - 11 - - ДеревоПодсистемСтрокаПоискаРасширеннаяПодсказка - 13 - Label - true - true - - Left - - - - ДеревоПодсистемСтрокаПоискаКонтекстноеМеню - 12 - true - - ДеревоПодсистем - - true - - - - ДеревоПодсистемСостояниеПросмотра - 14 - - ДеревоПодсистемСостояниеПросмотраРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - - ДеревоПодсистемСостояниеПросмотраКонтекстноеМеню - 15 - true - - ViewStatusAddition - ДеревоПодсистем - - true - - - - ДеревоПодсистемУправлениеПоиском - 17 - - ДеревоПодсистемУправлениеПоискомРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - - ДеревоПодсистемУправлениеПоискомКонтекстноеМеню - 18 - true - - SearchControlAddition - ДеревоПодсистем - - true - - - - ДеревоПодсистемРасширеннаяПодсказка - 10 - Label - true - true - - Left - - - - ДеревоПодсистемКонтекстноеМеню - 2 - true - - Tree - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - ExpandAllLevels - true - true - true - true - None - None - None - true - - None - false - - ФормаКоманднаяПанель - -1 - Left - true - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - ДеревоПодсистем - - <key>ru</key> - <value>Дерево подсистем</value> - - 2 - - ValueTree - - - true - - - true - - - Путь - - <key>ru</key> - <value>Путь</value> - - 1 - - String - - - - true - - - true - - - - Представление - - <key>ru</key> - <value>Представление</value> - - 2 - - String - - - - true - - - true - - - - Предопредленная - - <key>ru</key> - <value>Предопредленная</value> - - 3 - - Boolean - - - true - - - true - - - - Использование - - <key>ru</key> - <value>Использование</value> - - 4 - - Boolean - - - true - - - true - - - - Вариант - - <key>ru</key> - <value>Вариант</value> - - 5 - - CatalogRef.ВариантыОтчетов - - - 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> - - 1 - - ru - ОК - - - true - - - - ОК - - - Auto - Auto - - - Отмена - - <key>ru</key> - <value>Отмена</value> - - 2 - - ru - Отмена - - - true - - - - Отмена - - - Auto - Auto - - - - - - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Module.bsl deleted file mode 100644 index fc4fac1c7..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ПереместитьВариантВРаздел/Module.bsl +++ /dev/null @@ -1,80 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Загрузка структуры подсистем - ДеревоПодсистемДляКопирования = Новый ДеревоЗначений; - ДеревоПодсистемДляКопирования.Колонки.Добавить("Подсистема"); - ДеревоПодсистемДляКопирования.Колонки.Добавить("Название"); - - СписокПодсистем = Новый СписокЗначений; - СписокПодсистем.Добавить(""); - - // Сделаем список отчетов - СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(СписокПодсистем, ДеревоПодсистемДляКопирования); - - СтрокаКонфигурации = ДеревоПодсистем.ПолучитьЭлементы().Добавить(); - СтрокаКонфигурации.Путь = ""; - СтрокаКонфигурации.Представление = "Конфигурация"; - СтрокаКонфигурации.Предопредленная = истина; - - СоответсвиеПодсистемИСтрок = Новый Соответствие; - - СкопироватьДеревоЗначений(СтрокаКонфигурации.ПолучитьЭлементы(), ДеревоПодсистемДляКопирования.Строки, СоответсвиеПодсистемИСтрок); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем - -&НаКлиенте -Процедура ДеревоПодсистемВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Если Элементы.ДеревоПодсистем.ТекущиеДанные = Неопределено тогда - Предупреждение("Не выбран раздел отчета"); - Возврат; - КонецЕсли; - - Путь = Элементы.ДеревоПодсистем.ТекущиеДанные.Путь; - Закрыть(Путь); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ОК(Команда) - - Если Элементы.ДеревоПодсистем.ТекущиеДанные = Неопределено тогда - Предупреждение("Не выбран раздел отчета"); - Возврат; - КонецЕсли; - - Путь = Элементы.ДеревоПодсистем.ТекущиеДанные.Путь; - Закрыть(Путь); - -КонецПроцедуры - -&НаКлиенте -Процедура Отмена(Команда) - - Закрыть(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура СкопироватьДеревоЗначений(КолекцияПриемник, КолекцияИсточник, СоответсвиеПодсистемИСтрок) - - Для каждого Элемент из КолекцияИсточник Цикл - СтрокаЗначение = КолекцияПриемник.Добавить(); - СтрокаЗначение.Путь = Элемент.Подсистема; - СтрокаЗначение.Представление = Элемент.Название; - СтрокаЗначение.Предопредленная = Метаданные.НайтиПоПолномуИмени("Подсистема." + СтрЗаменить(Элемент.Подсистема, "\", ".Подсистема.")) <> Неопределено; - СоответсвиеПодсистемИСтрок.Вставить(СтрокаЗначение.Путь, СтрокаЗначение); - СкопироватьДеревоЗначений(СтрокаЗначение.ПолучитьЭлементы(), Элемент.Строки, СоответсвиеПодсистемИСтрок); - КонецЦикла; - -КонецПроцедуры - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form similarity index 50% rename from SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Form.form rename to SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form index 389fdb565..df1a412a6 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form.form @@ -1,12 +1,63 @@ - - <key>ru</key> - <value>Настройка группировки по разделам</value> - + + ИзменяемыеВарианты + 56 + true + true + + true + + + ИзменяемыеВарианты + + + OnChange + ИзменяемыеВариантыПриИзменении + + + ИзменяемыеВариантыРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ИзменяемыеВариантыКонтекстноеМеню + 57 + true + + InputField + true + Enter + true + Left + true + + true + true + true + false + true + false + false + false + true + true + true + true + + Style.ФонУправляющегоПоля + + Normal + + ДеревоПодсистем - 2 + 7 true true @@ -17,33 +68,147 @@ None Add - Change Copy - CopyToClipboard - EndEdit + Delete HierarchicalList List MoveDown MoveUp - OutputList - SelectAll SortListAsc SortListDesc Tree + + ГруппаКолонок + 73 + + ДеревоПодсистемИспользование + 69 + true + true + + true + + + ДеревоПодсистем.Использование + + None + + OnChange + ДеревоПодсистемИспользованиеПриИзменении + + + ДеревоПодсистемИспользованиеРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + ДеревоПодсистемИспользованиеКонтекстноеМеню + 70 + true + + CheckBoxField + Auto + true + Left + true + + true + + + + ДеревоПодсистемПредставление + 61 + true + true + + true + + + ДеревоПодсистем.Представление + + + ДеревоПодсистемПредставлениеРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + ДеревоПодсистемПредставлениеКонтекстноеМеню + 62 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа колонок</value> + + + ru + Группа колонок + + + ГруппаКолонокРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + - ДеревоПодсистемНазвание - 7 + ДеревоПодсистемВажность + 71 true true true - ДеревоПодсистем.Представление + ДеревоПодсистем.Важность + + OnChange + ДеревоПодсистемВажностьПриИзменении + - ДеревоПодсистемНазваниеРасширеннаяПодсказка - 32 + ДеревоПодсистемВажностьРасширеннаяПодсказка + 101 Label true true @@ -52,20 +217,26 @@
    - ДеревоПодсистемНазваниеКонтекстноеМеню - 8 + ДеревоПодсистемВажностьКонтекстноеМеню + 72 true InputField - true Auto true Left true + 8 true true true + false + true + true + false + false + true true true true @@ -74,109 +245,15 @@
    ДеревоПодсистемКоманднаяПанель - 4 - - ФормаСкопироватьВариант - 14 - true - true - - true - - - ФормаСкопироватьВариантРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - Form.Command.СкопироватьВариант - Normal - Auto - true - true - UserCmds - Auto - - - ДеревоПодсистемПереместитьВариант - 12 - true - true - - true - - - ДеревоПодсистемПереместитьВариантРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - Form.Command.ПереместитьВариант - Normal - Auto - true - true - UserCmds - Auto - - - Удалить - 16 - - <key>ru</key> - <value>Удалить вариант</value> - - true - true - - true - - - УдалитьРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - Form.Item.ДеревоПодсистем.StandardCommand.Delete - Normal - Auto - true - true - UserCmds - Auto - + 9 Left - - DragCheck - ДеревоПодсистемПроверкаПеретаскивания - - - OnActivateRow - ДеревоПодсистемПриАктивизацииСтроки - - - Drag - ДеревоПодсистемПеретаскивание - ДеревоПодсистемСтрокаПоиска - 23 + 87 ДеревоПодсистемСтрокаПоискаРасширеннаяПодсказка - 25 + 89 Label true true @@ -186,7 +263,7 @@ ДеревоПодсистемСтрокаПоискаКонтекстноеМеню - 24 + 88 true ДеревоПодсистем @@ -196,10 +273,10 @@ ДеревоПодсистемСостояниеПросмотра - 26 + 90 ДеревоПодсистемСостояниеПросмотраРасширеннаяПодсказка - 28 + 92 Label true true @@ -209,7 +286,7 @@ ДеревоПодсистемСостояниеПросмотраКонтекстноеМеню - 27 + 91 true ViewStatusAddition @@ -220,10 +297,10 @@ ДеревоПодсистемУправлениеПоиском - 29 + 93 ДеревоПодсистемУправлениеПоискомРасширеннаяПодсказка - 31 + 95 Label true true @@ -233,7 +310,7 @@ ДеревоПодсистемУправлениеПоискомКонтекстноеМеню - 30 + 94 true SearchControlAddition @@ -244,7 +321,7 @@ ДеревоПодсистемРасширеннаяПодсказка - 22 + 86 Label true true @@ -254,15 +331,68 @@ ДеревоПодсистемКонтекстноеМеню - 3 + 8 + + ДеревоПодсистемКонтекстноеМенюСнятьФлажки + 78 + true + true + + true + + + ДеревоПодсистемКонтекстноеМенюСнятьФлажкиРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + ДеревоПодсистемКонтекстноеМенюПеречитать + 77 + true + true + + true + + + ДеревоПодсистемКонтекстноеМенюПеречитатьРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + Form.Command.Перечитать + Normal + Auto + true + true + UserCmds + Auto + + true Tree true - true true + 15 true true - MultiRow +
    true
    1 1 AutoUse @@ -276,29 +406,25 @@ ExpandAllLevels true true - true - true None None None true
    - Bottom - true ФормаКоманднаяПанель -1 - ФормаПрименитьКомандыйИнтерфейс - 1 + Разместить + 58 true true true - ФормаПрименитьКомандыйИнтерфейсРасширеннаяПодсказка - 17 + РазместитьРасширеннаяПодсказка + 79 Label true true @@ -306,8 +432,7 @@ Left - Form.Command.ПрименитьКомандыйИнтерфейс - Auto + Form.Command.Разместить true true true @@ -315,16 +440,16 @@ Auto - ФормаОтмена - 13 + ДеревоПодсистемСнятьФлажки + 76 true true true - ФормаОтменаРасширеннаяПодсказка - 18 + ДеревоПодсистемСнятьФлажкиРасширеннаяПодсказка + 80 Label true true @@ -332,22 +457,61 @@ Left - Form.Command.Отмена + Form.Command.СнятьФлажки Normal Auto true true UserCmds Auto + InAdditionalSubmenu - Right + + ДеревоПодсистемПеречитать + 75 + true + true + + true + + + ДеревоПодсистемПеречитатьРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + Form.Command.Перечитать + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + BeforeClose + ПередЗакрытием + OnCreateAtServer ПриСозданииНаСервере - LockOwner + + OnClose + ПриЗакрытии + + 50 + DontBlock true + true true Vertical true @@ -356,13 +520,103 @@ UseIfNecessary auto true + + ПолныеПраваНаВарианты + + <key>ru</key> + <value>Полные права на варианты</value> + + 4 + + Boolean + + + true + + + true + + + + ТолькоДляАвтора + + <key>ru</key> + <value>Только для автора</value> + + 8 + + Boolean + + + true + + + true + + + + Автор + + <key>ru</key> + <value>Автор</value> + + 9 + + CatalogRef.Пользователи + + + true + + + true + + + + ВидимостьПоУмолчанию + + <key>ru</key> + <value>По умолчанию виден в панелях отчетов всех пользователей</value> + + 7 + + Boolean + + + true + + + true + + + + ИзменяемыеВарианты + + <key>ru</key> + <value>Варианты отчетов</value> + + 1 + + ValueList + + + true + + + true + + + + CatalogRef.ВариантыОтчетов + + + ДеревоПодсистем <key>ru</key> - <value>Дерево подсистем</value> + <value>Раздел, группа</value> - 1 + 3 ValueTree @@ -373,15 +627,14 @@ true - Путь + Ссылка <key>ru</key> - <value>Путь</value> + <value>Ссылка</value> 1 - String - + CatalogRef.ИдентификаторыОбъектовМетаданных true @@ -394,7 +647,7 @@ Представление <key>ru</key> - <value>Представление</value> + <value>Раздел, Группа</value> 2 @@ -409,14 +662,55 @@ - Предопредленная + Имя <key>ru</key> - <value>Предопредленная</value> + <value>Имя</value> 3 - Boolean + String + + 100 + + + + true + + + true + + + + ПолноеИмя + + <key>ru</key> + <value>Полное имя</value> + + 4 + + String + + + + true + + + true + + + + Приоритет + + <key>ru</key> + <value>Приоритет</value> + + 5 + + String + + 100 + true @@ -431,44 +725,12 @@ ru Использование - 4 - - Boolean - - - true - - - true - - - - Вариант - - <key>ru</key> - <value>Вариант</value> - - 5 - - CatalogRef.ВариантыОтчетов - - - true - - - true - - - - Ключ - - <key>ru</key> - <value>Ключ</value> - 6 - String - + Number + + 1 + true @@ -478,50 +740,17 @@ - Отчет + Важность <key>ru</key> - <value>Отчет</value> + <value>Важность</value> - 7 + 9 String - - - - true - - - true - - - - - СоответсвиеПодсистемИСтрок - - <key>ru</key> - <value>Соответсвие подсистем и строк</value> - - 2 - - ValueTable - - - true - - - true - - - Путь - - <key>ru</key> - <value>Путь</value> - - 1 - - String - + + 15 + true @@ -531,12 +760,12 @@ - ИдентификаторСтроки + ИспользованиеПоУмолчанию <key>ru</key> - <value>Идентификатор строки</value> + <value>0 - выключено у всех, 1 - включено у всех, 2 - у части выключено у части включено</value> - 2 + 8 Number @@ -550,98 +779,170 @@ true + + ВажностьПоУмолчанию + + <key>ru</key> + <value>Важность по умолчанию</value> + + 7 + + String + + 15 + + + + true + + + true + + + + ИзмененПользователем + + <key>ru</key> + <value>Изменен пользователем</value> + + 10 + + Boolean + + + true + + + true + + - - ПрименитьКомандыйИнтерфейс + + КоличествоВариантов <key>ru</key> - <value>ОК</value> + <value>Количество вариантов</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + Заполнение + + <key>ru</key> + <value>Заполнение</value> + + 10 + + + true + + + true + + + + ТекущийПользователь + + <key>ru</key> + <value>Текущий пользователь</value> + + 11 + + CatalogRef.Пользователи + + + true + + + true + + + + Разместить + + <key>ru</key> + <value>Разместить</value> 1 ru - Применить командый интерфейс - - - true - - - - ПрименитьКомандыйИнтерфейс - - - Auto - Auto - - - ПереместитьВариант - - <key>ru</key> - <value>Переместить вариант</value> - - 2 - - ru - Переместить вариант + Разместить true - StdPicture.MoveItem + StdPicture.WriteAndClose - ПреместитьВариант + Разместить Auto Auto - Отмена + СнятьФлажки <key>ru</key> - <value>Отмена</value> + <value>Снять флажки</value> 3 ru - Отмена - - - true - - - - Отмена - - - Auto - Auto - - - СкопироватьВариант - - <key>ru</key> - <value>Добавить вариант</value> - - 4 - - ru - Добавить вариант + Снять флажки true - StdPicture.CreateListItem + StdPicture.UncheckAll - СкопироватьВариант + СнятьФлажки + TextPicture + Auto + Auto + + + Перечитать + + <key>ru</key> + <value>Перечитать</value> + + 4 + + ru + Перечитать + + + true + + + StdPicture.Reread + + + + Перечитать + + + TextPicture Auto Auto diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html new file mode 100644 index 000000000..f2f1faf47 --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Help/ru.html @@ -0,0 +1,3 @@ + +

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

    +

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl new file mode 100644 index 000000000..bd5f8cf7d --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Module.bsl @@ -0,0 +1,286 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); + ТекущийПользователь = Пользователи.ТекущийПользователь(); + + Заполнение = Новый Структура("Подсистема, Действие, ИсключаемыеПодсистемы", + Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка(), + "", + Новый Массив + ); + ЗаполнитьЗначенияСвойств(Заполнение, Параметры); + Если Заполнение.Действие = "Перенести" Тогда + ПодсистемаРодитель = Заполнение.Подсистема.Родитель; + Пока ПодсистемаРодитель <> Справочники.ИдентификаторыОбъектовМетаданных.Подсистемы Цикл + Заполнение.ИсключаемыеПодсистемы.Добавить(ПодсистемаРодитель); + ПодсистемаРодитель = ПодсистемаРодитель.Родитель; + КонецЦикла; + Заполнение.ИсключаемыеПодсистемы = Новый ФиксированныйМассив(Заполнение.ИсключаемыеПодсистемы); + КонецЕсли; + Заполнение = Новый ФиксированнаяСтруктура(Заполнение); + + // Контроль количества вариантов осуществляется до открытия формы + ИзменяемыеВарианты.ЗагрузитьЗначения(Параметры.МассивВариантов); + + ПерезаполнитьДерево(); + + ВариантыОтчетов.ДеревоПодсистемДобавитьУсловноеОформление(ЭтаФорма); + + ТекущийЭлемент = Элементы.ДеревоПодсистем; +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + Если ВариантыОтчетовКлиент.СохранитьДанныеПроизвольнойФормы(Модифицированность, Отказ) Тогда + ЗаписатьНаКлиенте(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + Если ВариантыОтчетовКлиент.СохранитьДанныеПроизвольнойФормы(Модифицированность) Тогда + ЗаписатьНаКлиенте(); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ИзменяемыеВариантыПриИзменении(Элемент) + ОчиститьСообщения(); + ПерезаполнитьДерево(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем + +&НаКлиенте +Процедура ДеревоПодсистемИспользованиеПриИзменении(Элемент) + ВариантыОтчетовКлиент.ДеревоПодсистемИспользованиеПриИзменении(ЭтаФорма, Элемент); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемВажностьПриИзменении(Элемент) + ВариантыОтчетовКлиент.ДеревоПодсистемВажностьПриИзменении(ЭтаФорма, Элемент); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Разместить(Команда) + ЗаписатьНаКлиенте(); + Закрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура Перечитать(Команда) + ПерезаполнитьДерево(Ложь); + Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистем.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СнятьФлажки(Команда) + ПерезаполнитьДерево(Истина); + Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистем.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Клиент + +&НаКлиенте +Функция ЗаписатьНаКлиенте() + Результат = ЗаписатьНаСервере(); + ПоказатьОповещениеПользователя( + , + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Изменены настройки вариантов отчетов (%1 шт.).'"), + Формат(ИзменяемыеВарианты.Количество(), "ЧН=0; ЧГ=0") + ) + ); + Модифицированность = Ложь; + + ВариантыОтчетовКлиент.ОбновитьОткрытыеПанелиОтчетов(); + + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера + +&НаСервере +Функция ПерезаполнитьДерево(ТолькоСнятьФлажки = Ложь) + ИзменяемыеВариантыОтфильтроватьПоПравам(); + + КоличествоВариантов = ИзменяемыеВарианты.Количество(); + Если КоличествоВариантов = 0 Тогда + Элементы.ДеревоПодсистем.Доступность = Ложь; + Возврат Ложь; + Иначе + Элементы.ДеревоПодсистем.Доступность = Истина; + КонецЕсли; + + Если ТолькоСнятьФлажки Тогда + ДеревоПриемник = РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); + Найденные = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("Использование", 1), Истина); + Для Каждого СтрокаДерева Из Найденные Цикл + СтрокаДерева.Использование = 0; + Если СтрокаДерева.Использование <> СтрокаДерева.ИспользованиеПоУмолчанию Тогда + СтрокаДерева.ИзмененПользователем = Истина; + КонецЕсли; + КонецЦикла; + + Найденные = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("Использование", 2), Истина); + Для Каждого СтрокаДерева Из Найденные Цикл + СтрокаДерева.Использование = 0; + Если СтрокаДерева.Использование <> СтрокаДерева.ИспользованиеПоУмолчанию Тогда + СтрокаДерева.ИзмененПользователем = Истина; + КонецЕсли; + КонецЦикла; + + ЗначениеВРеквизитФормы(ДеревоПриемник, "ДеревоПодсистем"); + Возврат Истина; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетовРазмещение.РазделИлиГруппа КАК Ссылка, + | СУММА(1) КАК Количество, + | МИНИМУМ(ВЫБОР + | КОГДА ВариантыОтчетовРазмещение.Важный + | ТОГДА &ПредставлениеВажный + | КОГДА ВариантыОтчетовРазмещение.СмТакже + | ТОГДА &ПредставлениеСмТакже + | ИНАЧЕ """" + | КОНЕЦ) КАК Важность + |ИЗ + | Справочник.ВариантыОтчетов.Размещение КАК ВариантыОтчетовРазмещение + |ГДЕ + | ВариантыОтчетовРазмещение.Ссылка В(&МассивВариантов) + | И ВариантыОтчетовРазмещение.Использование = ИСТИНА + | + |СГРУППИРОВАТЬ ПО + | ВариантыОтчетовРазмещение.РазделИлиГруппа"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("МассивВариантов", ИзменяемыеВарианты.ВыгрузитьЗначения()); + Запрос.УстановитьПараметр("ПредставлениеВажный", ВариантыОтчетовКлиентСервер.ПредставлениеВажный()); + Запрос.УстановитьПараметр("ПредставлениеСмТакже", ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже()); + + Запрос.Текст = ТекстЗапроса; + ВхожденияПодсистем = Запрос.Выполнить().Выгрузить(); + + ДеревоИсточник = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); + + ДеревоПриемник = РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); + ДеревоПриемник.Строки.Очистить(); + + ДобавитьПодсистемыВДерево(ДеревоПриемник, ДеревоИсточник, ВхожденияПодсистем); + + ЗначениеВРеквизитФормы(ДеревоПриемник, "ДеревоПодсистем"); + Возврат Истина; +КонецФункции + +&НаСервере +Функция ЗаписатьНаСервере() + Кэш = Новый Структура; + + НачатьТранзакцию(); + Для Каждого ЭлементСписка Из ИзменяемыеВарианты Цикл + ВариантОбъект = ЭлементСписка.Значение.ПолучитьОбъект(); + ВариантыОтчетов.ДеревоПодсистемЗаписать(ЭтаФорма, ВариантОбъект, Кэш); + ВариантОбъект.Записать(); + КонецЦикла; + ЗафиксироватьТранзакцию(); + + Возврат Истина; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Сервер + +&НаСервере +Процедура ДобавитьПодсистемыВДерево(ПриемникРодитель, ИсточникРодитель, ВхожденияПодсистем) + Для Каждого Источник Из ИсточникРодитель.Строки Цикл + + Приемник = ПриемникРодитель.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(Приемник, Источник); + + Вхождение = ВхожденияПодсистем.Найти(Приемник.Ссылка, "Ссылка"); + Если Вхождение <> Неопределено Тогда + ВключеныПодчиненные = Истина; + Приемник.ВажностьПоУмолчанию = Вхождение.Важность; + Если Вхождение.Количество = КоличествоВариантов Тогда + Приемник.ИспользованиеПоУмолчанию = 1; + Иначе + Приемник.ИспользованиеПоУмолчанию = 2; + КонецЕсли; + КонецЕсли; + + Приемник.Важность = Приемник.ВажностьПоУмолчанию; + Приемник.Использование = Приемник.ИспользованиеПоУмолчанию; + + // Заполнение по данным открытия + Если Приемник.ИспользованиеПоУмолчанию = 0 Тогда + // Включение подсистем по данным открытия + Если Заполнение.Действие = "Перенести" И Приемник.Ссылка = Заполнение.Подсистема Тогда + Приемник.Использование = 1; + Приемник.ИзмененПользователем = Истина; + КонецЕсли; + Иначе + // Отключение подсистем по данным открытия + Если Заполнение.Действие = "Очистить" ИЛИ ( + Заполнение.Действие = "Перенести" + И Заполнение.ИсключаемыеПодсистемы.Найти(Приемник.Ссылка) <> Неопределено + ) Тогда + Приемник.Использование = 0; + Приемник.ИзмененПользователем = Истина; + КонецЕсли; + КонецЕсли; + + // Рекурсия + ДобавитьПодсистемыВДерево(Приемник, Источник, ВхожденияПодсистем); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ИзменяемыеВариантыОтфильтроватьПоПравам() + Количество = ИзменяемыеВарианты.Количество(); + Для Номер = 1 По Количество Цикл + Индекс = Количество - Номер; + Вариант = ИзменяемыеВарианты[Индекс].Значение; + Если Вариант.ПометкаУдаления Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" помечен на удаление.'"), + Строка(Вариант) + ), + , + "ИзменяемыеВарианты" + ); + ИзменяемыеВарианты.Удалить(Индекс); + ИначеЕсли НЕ ПолныеПраваНаВарианты И Вариант.Автор <> ТекущийПользователь Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для изменения ""%1"".'"), + Строка(Вариант) + ), + , + "ИзменяемыеВарианты" + ); + ИзменяемыеВарианты.Удалить(Индекс); + КонецЕсли; + КонецЦикла; +КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Form.form deleted file mode 100644 index d717b1481..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Form.form +++ /dev/null @@ -1,842 +0,0 @@ - - - - <key>ru</key> - <value>Добавить вариант в раздел</value> - - - СписокОтчетовИВариантов - 8 - true - true - - true - - - СписокОтчетовИВариантов - - None - Add - CancelSearch - Change - Copy - CopyToClipboard - Delete - EndEdit - Find - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - - СписокОтчетовИВариантовПредставлениеВарианта - 17 - - <key>ru</key> - <value>Вариант</value> - - true - true - - true - - - СписокОтчетовИВариантов.ПредставлениеВарианта - - - СписокОтчетовИВариантовПредставлениеВариантаРасширеннаяПодсказка - 31 - Label - true - true - - Left - - - - СписокОтчетовИВариантовПредставлениеВариантаКонтекстноеМеню - 18 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СписокОтчетовИВариантовПредставлениеОтчета - 15 - - <key>ru</key> - <value>Отчет</value> - - true - true - - true - - - СписокОтчетовИВариантов.ПредставлениеОтчета - - - СписокОтчетовИВариантовПредставлениеОтчетаРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - - СписокОтчетовИВариантовПредставлениеОтчетаКонтекстноеМеню - 16 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - СписокОтчетовИВариантовКоманднаяПанель - 10 - Left - true - - - СписокОтчетовИВариантовСтрокаПоиска - 22 - - СписокОтчетовИВариантовСтрокаПоискаРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - - СписокОтчетовИВариантовСтрокаПоискаКонтекстноеМеню - 23 - true - - СписокОтчетовИВариантов - - true - - - - СписокОтчетовИВариантовСостояниеПросмотра - 25 - - СписокОтчетовИВариантовСостояниеПросмотраРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - - СписокОтчетовИВариантовСостояниеПросмотраКонтекстноеМеню - 26 - true - - ViewStatusAddition - СписокОтчетовИВариантов - - true - - - - СписокОтчетовИВариантовУправлениеПоиском - 28 - - СписокОтчетовИВариантовУправлениеПоискомРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - СписокОтчетовИВариантовУправлениеПоискомКонтекстноеМеню - 29 - true - - SearchControlAddition - СписокОтчетовИВариантов - - true - - - - СписокОтчетовИВариантовРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - - СписокОтчетовИВариантовКонтекстноеМеню - 9 - true - - true - true - true - true - true - true - MultiRow -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - true - true - None - None - None - true - -
    - - ДеревоПодсистем - 1 - true - true - - true - - - ДеревоПодсистем - - None - Add - Change - Copy - CopyToClipboard - Delete - EndEdit - HierarchicalList - List - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - Tree - - ДеревоПодсистемПредставление - 4 - - <key>ru</key> - <value>Раздел</value> - - true - true - - true - - - ДеревоПодсистем.Представление - - - ДеревоПодсистемПредставлениеРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - - ДеревоПодсистемПредставлениеКонтекстноеМеню - 5 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - Bottom - - ДеревоПодсистемКоманднаяПанель - 3 - Right - - - Selection - ДеревоПодсистемВыбор - - - ДеревоПодсистемСтрокаПоиска - 44 - - ДеревоПодсистемСтрокаПоискаРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - - ДеревоПодсистемСтрокаПоискаКонтекстноеМеню - 45 - true - - ДеревоПодсистем - - true - - - - ДеревоПодсистемСостояниеПросмотра - 47 - - ДеревоПодсистемСостояниеПросмотраРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - - ДеревоПодсистемСостояниеПросмотраКонтекстноеМеню - 48 - true - - ViewStatusAddition - ДеревоПодсистем - - true - - - - ДеревоПодсистемУправлениеПоиском - 50 - - ДеревоПодсистемУправлениеПоискомРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - - ДеревоПодсистемУправлениеПоискомКонтекстноеМеню - 51 - true - - SearchControlAddition - ДеревоПодсистем - - true - - - - ДеревоПодсистемРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - - ДеревоПодсистемКонтекстноеМеню - 2 - true - - Tree - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - ExpandAllLevels - true - true - true - true - None - None - None - true - - Bottom - true - - ФормаКоманднаяПанель - -1 - - ДеревоПодсистемОК - 6 - true - true - - true - - - ДеревоПодсистемОКРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - Form.Command.ОК - Auto - true - true - true - UserCmds - Auto - - - ДеревоПодсистемОтмена - 7 - true - true - - true - - - ДеревоПодсистемОтменаРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - Form.Command.Отмена - Normal - Auto - true - true - UserCmds - Auto - - Right - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - true - true - true - true - true - UseIfNecessary - auto - true - - ДеревоПодсистем - - <key>ru</key> - <value>Дерево подсистем</value> - - 2 - - ValueTree - - - true - - - true - - - Путь - - <key>ru</key> - <value>Путь</value> - - 1 - - String - - - - true - - - true - - - - Представление - - <key>ru</key> - <value>Представление</value> - - 2 - - String - - - - true - - - true - - - - Предопредленная - - <key>ru</key> - <value>Предопредленная</value> - - 3 - - Boolean - - - true - - - true - - - - Использование - - <key>ru</key> - <value>Использование</value> - - 4 - - Boolean - - - true - - - true - - - - Вариант - - <key>ru</key> - <value>Вариант</value> - - 5 - - CatalogRef.ВариантыОтчетов - - - 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> - - 1 - - String - - - - true - - - true - - - - Вариант - - <key>ru</key> - <value>Вариант</value> - - 3 - - String - - - - true - - - true - - - - СписокОтчетовИВариантов - - <key>ru</key> - <value>Список отчетов и вариантов</value> - - 4 - - ValueTable - - - true - - - true - - - Отчет - - <key>ru</key> - <value>Отчет</value> - - 1 - - String - - - - true - - - true - - - - Вариант - - <key>ru</key> - <value>Вариант</value> - - 2 - - String - - - - true - - - true - - - - ПредставлениеОтчета - - <key>ru</key> - <value>Представление отчета</value> - - 3 - - String - - - - true - - - true - - - - ПредставлениеВарианта - - <key>ru</key> - <value>Представление варианта</value> - - 4 - - String - - - - true - - - true - - - - Ссылка - - <key>ru</key> - <value>Ссылка</value> - - 5 - - CatalogRef.ВариантыОтчетов - - - true - - - true - - - - - ОК - - <key>ru</key> - <value>ОК</value> - - 1 - - ru - ОК - - - true - - - - ОК - - - Auto - Auto - - - Отмена - - <key>ru</key> - <value>Отмена</value> - - 2 - - ru - Отмена - - - true - - - - Отмена - - - Auto - Auto - - - - - -
    diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Module.bsl deleted file mode 100644 index 735757684..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/СкопироватьВариантВРаздел/Module.bsl +++ /dev/null @@ -1,128 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Загрузка структуры подсистем - ДеревоПодсистемДляКопирования = Новый ДеревоЗначений; - ДеревоПодсистемДляКопирования.Колонки.Добавить("Подсистема"); - ДеревоПодсистемДляКопирования.Колонки.Добавить("Название"); - - СписокПодсистем = Новый СписокЗначений; - СписокПодсистем.Добавить(""); - - СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(СписокПодсистем, ДеревоПодсистемДляКопирования); - - СтрокаКонфигурации = ДеревоПодсистем.ПолучитьЭлементы().Добавить(); - СтрокаКонфигурации.Путь = ""; - СтрокаКонфигурации.Представление = "Конфигурация"; - СтрокаКонфигурации.Предопредленная = истина; - - СоответсвиеПодсистемИСтрок = Новый Соответствие; - - СкопироватьДеревоЗначений(СтрокаКонфигурации.ПолучитьЭлементы(), ДеревоПодсистемДляКопирования.Строки, СоответсвиеПодсистемИСтрок); - - // Загрузка списка вариантов и отчетов - ТЗ = "ВЫБРАТЬ - | ВариантыОтчетов.КлючОбъекта КАК Отчет, - | ВариантыОтчетов.ПредставлениеОбъекта КАК ПредставлениеОтчета, - | ВариантыОтчетов.КлючВарианта КАК Вариант, - | ВариантыОтчетов.Наименование КАК ПредставлениеВарианта, - | ВариантыОтчетов.Ссылка - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов"; - - Запрос = Новый Запрос(ТЗ); - Выборка = Запрос.Выполнить().Выбрать(); - - СписокОтчетовИВариантов.Очистить(); - - Пока Выборка.Следующий() Цикл - - СтрокаДвижения = СписокОтчетовИВариантов.Добавить(); - СтрокаДвижения.Отчет = Выборка.Отчет; - СтрокаДвижения.Ссылка = Выборка.Ссылка; - СтрокаДвижения.Вариант = Выборка.Вариант; - СтрокаДвижения.ПредставлениеОтчета = Выборка.ПредставлениеОтчета; - СтрокаДвижения.ПредставлениеВарианта = Выборка.ПредставлениеВарианта; - - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем - -&НаКлиенте -Процедура ДеревоПодсистемВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - Если Элементы.ДеревоПодсистем.ТекущиеДанные = Неопределено тогда - Предупреждение("Не выбран раздел отчета"); - Возврат; - КонецЕсли; - - Если Элементы.СписокОтчетовИВариантов.ТекущиеДанные = Неопределено тогда - Предупреждение("Не выбран вариант."); - Возврат; - КонецЕсли; - Структура = Новый Структура("Путь, Отчет, Вариант, ССылка, ПредставлениеВарианта"); - - Структура.Путь = Элементы.ДеревоПодсистем.ТекущиеДанные.Путь; - Структура.Вариант = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Вариант; - Структура.Отчет = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Отчет; - Структура.Ссылка = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Ссылка; - Структура.ПредставлениеВарианта = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.ПредставлениеВарианта; - Закрыть(Структура); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ОК(Команда) - - Если Элементы.ДеревоПодсистем.ТекущиеДанные = Неопределено тогда - Предупреждение("Не выбран раздел отчета"); - Возврат; - КонецЕсли; - - Если Элементы.СписокОтчетовИВариантов.ТекущиеДанные = Неопределено тогда - Предупреждение("Не выбран вариант."); - Возврат; - КонецЕсли; - Структура = Новый Структура("Путь, Отчет, Вариант, ССылка, ПредставлениеВарианта"); - - Структура.Путь = Элементы.ДеревоПодсистем.ТекущиеДанные.Путь; - Структура.Вариант = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Вариант; - Структура.Отчет = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Отчет; - Структура.Ссылка = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.Ссылка; - Структура.ПредставлениеВарианта = Элементы.СписокОтчетовИВариантов.ТекущиеДанные.ПредставлениеВарианта; - Закрыть(Структура); - -КонецПроцедуры - -&НаКлиенте -Процедура Отмена(Команда) - - Закрыть(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура СкопироватьДеревоЗначений(КолекцияПриемник, КолекцияИсточник, СоответсвиеПодсистемИСтрок) - - Для каждого Элемент из КолекцияИсточник Цикл - СтрокаЗначение = КолекцияПриемник.Добавить(); - СтрокаЗначение.Путь = Элемент.Подсистема; - СтрокаЗначение.Представление = Элемент.Название; - СтрокаЗначение.Предопредленная = Метаданные.НайтиПоПолномуИмени("Подсистема." + СтрЗаменить(Элемент.Подсистема, "\", ".Подсистема.")) <> Неопределено; - СоответсвиеПодсистемИСтрок.Вставить(СтрокаЗначение.Путь, СтрокаЗначение); - СкопироватьДеревоЗначений(СтрокаЗначение.ПолучитьЭлементы(), Элемент.Строки, СоответсвиеПодсистемИСтрок); - КонецЦикла; - -КонецПроцедуры - - 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 91027f589..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss +++ /dev/null @@ -1,15 +0,0 @@ - - - - Normal - dfcece9d-5077-440b-b6b3-45a5cb4538eb - - - Normal - 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - Normal - b75fecce-942b-4aed-abc9-e6a02e460fb3 - - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Form.form deleted file mode 100644 index 7c7363239..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Form.form +++ /dev/null @@ -1,838 +0,0 @@ - - - - РазделыИВарианты - 31 - - Разделы - 32 - - ДеревоРазделов - 21 - true - true - - true - - - ДеревоРазделов - - true - None - Add - Change - Copy - CopyToClipboard - Delete - EndEdit - HierarchicalList - List - MoveDown - MoveUp - OutputList - SortListAsc - SortListDesc - Tree - - ДеревоРазделовПредставление - 28 - true - true - - true - - - ДеревоРазделов.Представление - - - ДеревоРазделовПредставлениеРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - - ДеревоРазделовПредставлениеКонтекстноеМеню - 29 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - true - Normal - - - None - - ДеревоРазделовКоманднаяПанель - 23 - Left - true - - - OnActivateRow - ДеревоРазделовПриАктивизацииСтроки - - - ДеревоРазделовСтрокаПоиска - 38 - - ДеревоРазделовСтрокаПоискаРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - - ДеревоРазделовСтрокаПоискаКонтекстноеМеню - 39 - true - - ДеревоРазделов - - true - - - - ДеревоРазделовСостояниеПросмотра - 41 - - ДеревоРазделовСостояниеПросмотраРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - - ДеревоРазделовСостояниеПросмотраКонтекстноеМеню - 42 - true - - ViewStatusAddition - ДеревоРазделов - - true - - - - ДеревоРазделовУправлениеПоиском - 44 - - ДеревоРазделовУправлениеПоискомРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - - ДеревоРазделовУправлениеПоискомКонтекстноеМеню - 45 - true - - SearchControlAddition - ДеревоРазделов - - true - - - - ДеревоРазделовРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - - ДеревоРазделовКонтекстноеМеню - 22 - true - - Tree - true - 10 - true - true - true -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - false - false - true - Auto - true - true - true - true - None - None - None - true -
    - true - true - - true - - - <key>ru</key> - <value>Разделы</value> - - - ru - Разделы - - true - true - - РазделыРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - -
    - - Варианты - 33 - - Список - 1 - true - true - - true - - - Список - - true - None - Change - Copy - CopyToClipboard - Create - Delete - Refresh - SetDeletionMark - - ПредставлениеОбъекта - 18 - - <key>ru</key> - <value>Отчет</value> - - true - true - - - Список.ПредставлениеОбъекта - - - ПредставлениеОбъектаРасширеннаяПодсказка - 68 - Label - true - true - - Left - - - - ПредставлениеОбъектаКонтекстноеМеню - 19 - true - - LabelField - Enter - true - Left - true - - 20 - true - true - true - - - - Наименование - 4 - true - true - - true - - - Список.Description - - true - - НаименованиеРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 5 - true - - LabelField - Enter - true - Left - true - - 20 - true - true - true - - - - Администратор - 8 - - <key>ru</key> - <value>Автор</value> - - true - true - - true - - - Список.Администратор - - - АдминистраторРасширеннаяПодсказка - 72 - Label - true - true - - Left - - - - АдминистраторКонтекстноеМеню - 9 - true - - LabelField - Enter - true - Left - true - - 11 - true - true - false - - - - ТипВариантаОтчета - 12 - - <key>ru</key> - <value>Тип настройки</value> - - true - true - - - Список.ТипВариантаОтчета - - - ТипВариантаОтчетаРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - - ТипВариантаОтчетаКонтекстноеМеню - 13 - true - - LabelField - Enter - true - Left - true - - 10 - true - true - false - - - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска - 59 - - СписокСтрокаПоискаРасширеннаяПодсказка - 61 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 60 - true - - Список - - true - - - - СписокСостояниеПросмотра - 62 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 64 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 63 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 65 - - СписокУправлениеПоискомРасширеннаяПодсказка - 67 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 66 - true - - SearchControlAddition - Список - - true - - - - СписокРасширеннаяПодсказка - 58 - Label - true - true - - Left - - - - СписокКонтекстноеМеню - 2 - true - - true - true - true - true - true - true - true - MultiRow -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - ExpandTopLevel - true - true - true - - Список.DefaultPicture - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - true - -
    - true - true - - true - - - <key>ru</key> - <value>Варианты</value> - - - ru - Варианты - - true - true - - ВариантыРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - -
    - true - true - - true - - - <key>ru</key> - <value>Разделы и варианты</value> - - - ru - Разделы и варианты - - true - true - - РазделыИВариантыРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - -
    - - ФормаКоманднаяПанель - -1 - - ДействияСписка - 30 - true - true - - true - - - <key>ru</key> - <value>Действия списка</value> - - - ru - Действия списка - - - ДействияСпискаРасширеннаяПодсказка - 34 - Label - true - true - - Left - - - - Item.Список - - - Left - true - - - OnCreateAtServer - ПриСозданииНаСервере - - Abort - Cancel - CancelSearch - Change - Choose - Close - Copy - Create - CustomizeForm - Delete - Find - Help - Ignore - ListSettings - No - OK - OutputList - Refresh - RestoreValues - Retry - SaveValues - SetDeletionMark - Yes - 90 - LockOwner - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Список - 1 - - DynamicList - - - true - - - true - -
    true
    - - ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - ВариантыОтчетов.Ссылка, - ВариантыОтчетов.ВерсияДанных, - ВариантыОтчетов.ПометкаУдаления, - ВариантыОтчетов.Предопределенный, - ВариантыОтчетов.Наименование, - ВариантыОтчетов.КлючОбъекта, - ВариантыОтчетов.Администратор, - ВЫРАЗИТЬ(ВариантыОтчетов.Описание КАК СТРОКА(1000)) КАК Описание, - ВариантыОтчетов.ТипВариантаОтчета, - ВариантыОтчетов.КлючВарианта, - ВариантыОтчетов.БыстрыйДоступ, - ВариантыОтчетов.ПредставлениеОбъекта -ИЗ - Справочник.ВариантыОтчетов КАК ВариантыОтчетов - ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.ИсключенияБыстрогоДоступа КАК ВариантыОтчетовИсключенияБыстрогоДоступа - ПО ВариантыОтчетов.Ссылка = ВариантыОтчетовИсключенияБыстрогоДоступа.Ссылка - И (ВариантыОтчетовИсключенияБыстрогоДоступа.Пользователь = &ТекущийПользователь) -ГДЕ - (&Подсистема = "" - ИЛИ ВариантыОтчетов.Подсистемы.Подсистема ПОДОБНО &Подсистема + "%") - И ВариантыОтчетов.КлючОбъекта В(&СписокОтчетов) - И ВариантыОтчетов.ТипВариантаОтчета В(&СписокТипов) - И ВЫБОР - КОГДА ВариантыОтчетовИсключенияБыстрогоДоступа.Пользователь ЕСТЬ NULL - ТОГДА ВариантыОтчетов.БыстрыйДоступ = ИСТИНА - ИНАЧЕ ВариантыОтчетов.БыстрыйДоступ = ЛОЖЬ - КОНЕЦ - Catalog.ВариантыОтчетов - true - true - true - true - true - -
    - - ДеревоРазделов - - <key>ru</key> - <value>Дерево разделов</value> - - 4 - - ValueTree - - - 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> - - 5 - - String - - - - true - - - true - - - - Картинка - - <key>ru</key> - <value>Картинка</value> - - 6 - - Picture - - - true - - - true - - - - - - - - -
    diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Module.bsl deleted file mode 100644 index ca7e7460f..000000000 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаВыбора/Module.bsl +++ /dev/null @@ -1,171 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - ОтборПоОтчетам = ВариантыОтчетовВызовСервераПовтИсп.ОтчетыТекущегоПользователя(); - - // Инициализация параметров запроса динамического списка - Список.Параметры.УстановитьЗначениеПараметра("СписокОтчетов", ОтборПоОтчетам.ВыгрузитьЗначения()); - Список.Параметры.УстановитьЗначениеПараметра("ТекущийПользователь", Пользователи.ТекущийПользователь()); - Если Параметры.Свойство("ОтборПоТипу") Тогда - Список.Параметры.УстановитьЗначениеПараметра("СписокТипов", Параметры.ОтборПоТипу.ВыгрузитьЗначения()); - Иначе - Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "И ВариантыОтчетов.ТипВариантаОтчета В(&СписокТипов)", ""); - КонецЕсли; - - ДеревоРазделовЗаполнить(); - - ЭлементыДерева = ДеревоРазделов.ПолучитьЭлементы(); - Если ЭлементыДерева.Количество() > 0 Тогда - ТекущаяСтрокаДерева = ЭлементыДерева[0]; - Элементы.ДеревоРазделов.ТекущаяСтрока = ТекущаяСтрокаДерева.ПолучитьИдентификатор(); - Список.Параметры.УстановитьЗначениеПараметра("Подсистема", ТекущаяСтрокаДерева.ПолныйПутьКПодсистеме); - Иначе - Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "(&Подсистема = """"", "ИСТИНА"); - Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "ИЛИ ВариантыОтчетов.Подсистемы.Подсистема ПОДОБНО &Подсистема + ""%"")", ""); - КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоРазделов - -&НаКлиенте -Процедура ДеревоРазделовПриАктивизацииСтроки(Элемент) - ПодключитьОбработчикОжидания("ДеревоРазделовОбработчикАктивизацииСтроки", 0.2, Истина); -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура ДеревоРазделовЗаполнить() - УстановитьПривилегированныйРежим(Истина); - - ДеревоЗначений = Новый ДеревоЗначений; - ДеревоЗначений.Колонки.Добавить("ПолныйПутьКПодсистеме", Новый ОписаниеТипов("Строка")); - ДеревоЗначений.Колонки.Добавить("Подсистема"); - ДеревоЗначений.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); - ДеревоЗначений.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); - ДеревоЗначений.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); - - ВиртуальныеПодсистемы = ВариантыОтчетовПереопределяемый.ОписаниеВиртуальныхПодсистем(); - - // Запрос по подсистемам доступных вариантов - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВЫРАЗИТЬ(Подсистемы.Подсистема КАК СТРОКА(1000)) КАК Подсистема - |ИЗ - | Справочник.ВариантыОтчетов.Подсистемы КАК Подсистемы - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.ИсключенияБыстрогоДоступа КАК Исключения - | ПО Подсистемы.Ссылка = Исключения.Ссылка - | И (Исключения.Пользователь = &ТекущийПользователь) - |ГДЕ - | Подсистемы.Ссылка.КлючОбъекта В(&СписокОтчетов) - | И Подсистемы.Ссылка.ТипВариантаОтчета В(&СписокТипов) - | И ВЫБОР - | КОГДА Исключения.Пользователь ЕСТЬ NULL - | ТОГДА Подсистемы.Ссылка.БыстрыйДоступ = ИСТИНА - | ИНАЧЕ Подсистемы.Ссылка.БыстрыйДоступ = ЛОЖЬ - | КОНЕЦ"; - - Для Каждого ПараметрКД Из Список.Параметры.Элементы Цикл - Запрос.УстановитьПараметр(Строка(ПараметрКД.Параметр), ПараметрКД.Значение); - КонецЦикла; - - Если НЕ Параметры.Свойство("ОтборПоТипу") Тогда - Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "И Подсистемы.Ссылка.ТипВариантаОтчета В(&СписокТипов)", ""); - КонецЕсли; - - Разделитель = "\"; - - // Доступные подсистемы - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - Если Выборка.Подсистема = "" Тогда - Продолжить; - КонецЕсли; - - // Разбор полного пути к подсистеме в массив - ТекущийРодитель = 0; - ПолныйПутьКПодсистеме = ""; - - МассивПодсистем = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Выборка.Подсистема, Разделитель); - Для Каждого ИмяПодсистемы Из МассивПодсистем Цикл - Если ИмяПодсистемы = "" Тогда - Продолжить; - КонецЕсли; - - ПолныйПутьКПодсистеме = ?(ПолныйПутьКПодсистеме = "", "", ПолныйПутьКПодсистеме + Разделитель) + ИмяПодсистемы; - - НаборСтрокРодителя = ?(ТекущийРодитель = 0, ДеревоЗначений.Строки, ТекущийРодитель.Строки); - - СтрокаДерева = НаборСтрокРодителя.Найти(ПолныйПутьКПодсистеме, "ПолныйПутьКПодсистеме", Ложь); - Если СтрокаДерева = Неопределено Тогда - // Добавление строки дерева - СтрокаДерева = НаборСтрокРодителя.Добавить(); - СтрокаДерева.ПолныйПутьКПодсистеме = ПолныйПутьКПодсистеме; - СтрокаДерева.Имя = ИмяПодсистемы; - - // Получение представления - ПредставлениеУстановлено = Ложь; - - // Через метаданные - Если НЕ ПредставлениеУстановлено Тогда - ПодсистемаРодителя = ?(ТекущийРодитель = 0, Метаданные, ТекущийРодитель.Подсистема); - Если ПодсистемаРодителя <> Неопределено Тогда - МетаданныеПодсистемы = ПодсистемаРодителя.Подсистемы.Найти(ИмяПодсистемы); - Если МетаданныеПодсистемы <> Неопределено Тогда - СтрокаДерева.Подсистема = МетаданныеПодсистемы; - СтрокаДерева.Представление = МетаданныеПодсистемы.Представление(); - ПредставлениеУстановлено = Истина; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // Через виртуальные подсистемы - Если НЕ ПредставлениеУстановлено Тогда - ВиртуальнаяПодсистема = ВиртуальныеПодсистемы.НайтиПоЗначению(ПолныйПутьКПодсистеме); - Если ВиртуальнаяПодсистема <> Неопределено Тогда - СтрокаДерева.Представление = ВиртуальнаяПодсистема.Представление; - ПредставлениеУстановлено = Истина; - КонецЕсли; - КонецЕсли; - - // Как есть - Если НЕ ПредставлениеУстановлено Тогда - СтрокаДерева.Представление = ИмяПодсистемы; - КонецЕсли; - КонецЕсли; - - ТекущийРодитель = СтрокаДерева; - КонецЦикла; - - КонецЦикла; - - КорневаяСтрокаДерева = ДеревоЗначений.Строки.Добавить(); - КорневаяСтрокаДерева.Представление = НСтр("ru = 'Все отчеты'"); - - ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоРазделов"); -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоРазделовОбработчикАктивизацииСтроки() - ДанныеСтроки = Элементы.ДеревоРазделов.ТекущиеДанные; - Если ДанныеСтроки = Неопределено Тогда - Возврат; - КонецЕсли; - - Параметр = Список.Параметры.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Подсистема")); - Если Параметр.Значение <> ДанныеСтроки.ПолныйПутьКПодсистеме Тогда - Параметр.Значение = ДанныеСтроки.ПолныйПутьКПодсистеме; - КонецЕсли; -КонецПроцедуры - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form index f43c43465..bb4f7ca18 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form.form @@ -1,32 +1,27 @@ - - Список - 1 - true - true - - true - - - Список - - false - None + + БыстрыеОтборы + 44 - ПредставлениеОбъекта - 32 + ОтборНаименование + 60 true true true - Список.ПредставлениеОбъекта + ОтборНаименование + None + + OnChange + ОтборНаименованиеПриИзменении + - ПредставлениеОбъектаРасширеннаяПодсказка - 58 + ОтборНаименованиеРасширеннаяПодсказка + 93 Label true true @@ -35,34 +30,50 @@ - ПредставлениеОбъектаКонтекстноеМеню - 33 + ОтборНаименованиеКонтекстноеМеню + 61 true - LabelField + InputField Enter true Left true - + + 32 true true + false + true + true + false + true + false + false + true + true + true + Normal - Наименование - 34 + ОтборАвтор + 58 true true true - Список.Description + ОтборАвтор + + OnChange + ОтборАвторПриИзменении + - НаименованиеРасширеннаяПодсказка - 60 + ОтборАвторРасширеннаяПодсказка + 95 Label true true @@ -71,36 +82,52 @@ - НаименованиеКонтекстноеМеню - 35 + ОтборАвторКонтекстноеМеню + 59 true - LabelField + InputField + false Enter true Left true - + + 30 true true + false + false + true + false + true + true + false + false + false + Items + false + true + true + Normal - ТипВариантаОтчета - 38 - - <key>ru</key> - <value>Тип настройки</value> - + ОтборТипОтчета + 45 true true - Список.ТипВариантаОтчета + ОтборТипОтчета + + OnChange + ОтборТипОтчетаПриИзменении + - ТипВариантаОтчетаРасширеннаяПодсказка - 62 + ОтборТипОтчетаРасширеннаяПодсказка + 97 Label true true @@ -109,257 +136,33 @@ - ТипВариантаОтчетаКонтекстноеМеню - 39 + ОтборТипОтчетаКонтекстноеМеню + 46 true - LabelField + InputField Enter true Left true - + + + Clearing + ОтборТипОтчетаОчистка + true true - - - - Администратор - 36 - true - true - - true - - - Список.Администратор - - - АдминистраторРасширеннаяПодсказка - 64 - Label - true - true - - Left - - - - АдминистраторКонтекстноеМеню - 37 - true - - LabelField - Enter - true - Left - true - - true - true - - - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска - 49 - - СписокСтрокаПоискаРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 50 - true - - Список - - true - - - - СписокСостояниеПросмотра - 52 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 53 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 55 - - СписокУправлениеПоискомРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 56 - true - - SearchControlAddition - Список - - true - - - - СписокРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - СписокКонтекстноеМеню - 2 - - true - true - true - true - true - MultiRow -
    true
    - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - true - - Список.DefaultPicture - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - -
    - - ГруппаОписание - 21 - - КартинкаИнфо - 22 - - <key>ru</key> - <value>Картинка инфо</value> - - true - true - - true - - - КартинкаИнфоРасширеннаяПодсказка - 75 - Label - true - true - - Left - - - - КартинкаИнфоКонтекстноеМеню - 23 - true - - 2 - true - 1 - true - - - CommonPicture.Информация - - - - - Описание - 19 - true - true - - true - - - Items.Список.CurrentData.Описание - - None - - ОписаниеРасширеннаяПодсказка - 76 - Label - true - true - - Left - - - - ОписаниеКонтекстноеМеню - 20 - true - - LabelField - Enter - true - Left - true - - true - 2 - true + false + false + true + false + true + true + false + false + true + true + Normal true @@ -369,15 +172,1103 @@ <key>ru</key> - <value>Группа описание</value> + <value>Быстрые отборы</value> ru - Группа описание + Быстрые отборы - ГруппаОписаниеРасширеннаяПодсказка - 74 + БыстрыеОтборыРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + КоманднаяПанель + 35 + + Выбрать + 84 + true + true + + true + + + ВыбратьРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Choose + Normal + Auto + true + true + UserCmds + Auto + + + Просмотр + 22 + true + true + + true + + + Items.Список.CurrentData.Ref + + + ПросмотрРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + Catalog.ВариантыОтчетов.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + + + Изменить + 63 + + <key>ru</key> + <value>Изменить ...</value> + + true + true + + true + + + ИзменитьРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Picture + true + true + UserCmds + Auto + + + РазместитьВРазделах + 36 + true + true + + true + + + Items.Список.CurrentData.Ref + + + РазместитьВРазделахРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + Catalog.ВариантыОтчетов.Command.РазместитьВРазделах + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ИзменитьФорму + 15 + true + true + + true + + + ИзменитьФормуРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 14 + true + true + + true + + + СправкаРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + + КомандыСписка + 64 + true + true + + true + + + <key>ru</key> + <value>Команды списка</value> + + + ru + Команды списка + + + КомандыСпискаРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + + Item.Список + + + + СброситьНастройкиПользователей + 70 + true + true + + true + + + Items.Список.CurrentData.Ref + + + СброситьНастройкиПользователейРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + Catalog.ВариантыОтчетов.Command.СброситьНастройкиПользователей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + УстановитьПометкуУдаления + 83 + true + true + + true + + + УстановитьПометкуУдаленияРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + CommandBar + + Left + + + + ГруппаГоризонтальная + 23 + + ДеревоПодсистем + 65 + true + true + + true + + + ДеревоПодсистем + + None + Add + Change + Copy + Delete + EndEdit + List + MoveDown + MoveUp + + ДеревоПодсистемПредставление + 68 + true + true + + true + + + ДеревоПодсистем.Представление + + + ДеревоПодсистемПредставлениеРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + + ДеревоПодсистемПредставлениеКонтекстноеМеню + 69 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + Normal + + + + ДеревоПодсистемКоманднаяПанель + 67 + Left + + + BeforeAddRow + ДеревоПодсистемПередНачаломДобавления + + + BeforeDeleteRow + ДеревоПодсистемПередУдалением + + + OnActivateRow + ДеревоПодсистемПриАктивизацииСтроки + + + Drag + ДеревоПодсистемПеретаскивание + + + BeforeRowChange + ДеревоПодсистемПередНачаломИзменения + + + ДеревоПодсистемСтрокаПоиска + 111 + + ДеревоПодсистемСтрокаПоискаРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + ДеревоПодсистемСтрокаПоискаКонтекстноеМеню + 112 + true + + ДеревоПодсистем + + true + + + + ДеревоПодсистемСостояниеПросмотра + 114 + + ДеревоПодсистемСостояниеПросмотраРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ДеревоПодсистемСостояниеПросмотраКонтекстноеМеню + 115 + true + + ViewStatusAddition + ДеревоПодсистем + + true + + + + ДеревоПодсистемУправлениеПоиском + 117 + + ДеревоПодсистемУправлениеПоискомРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + ДеревоПодсистемУправлениеПоискомКонтекстноеМеню + 118 + true + + SearchControlAddition + ДеревоПодсистем + + true + + + + ДеревоПодсистемРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + + ДеревоПодсистемКонтекстноеМеню + 66 + true + + Tree + true + true + 20 + true + true + true + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + ExpandTopLevel + true + true + true + true + None + None + None + true + + + Список + 1 + + <key>ru</key> + <value>Варианты очетов</value> + + true + true + + true + + + Список + + None + Copy + Create + + Наименование + 4 + true + true + + true + + + Список.Description + + + НаименованиеРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + LabelField + Enter + true + Left + true + + 40 + true + true + + + + Автор + 12 + true + true + + true + + + Список.Автор + + + АвторРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 13 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ИмяОтчета + 73 + true + true + + + Список.ИмяОтчета + + + ИмяОтчетаРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + ИмяОтчетаКонтекстноеМеню + 74 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Отчет + 77 + true + true + + + Список.Отчет + + + ОтчетРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + + ОтчетКонтекстноеМеню + 78 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ТипОтчета + 81 + true + true + + + Список.ТипОтчета + + + ТипОтчетаРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + ТипОтчетаКонтекстноеМеню + 82 + true + + LabelField + Enter + true + Left + true + + true + true + + + + КлючВарианта + 75 + true + true + + + Список.КлючВарианта + + + КлючВариантаРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + КлючВариантаКонтекстноеМеню + 76 + true + + LabelField + Enter + true + Left + true + + true + true + + + + Пользовательский + 79 + true + true + + + Список.Пользовательский + + + ПользовательскийРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + ПользовательскийКонтекстноеМеню + 80 + true + + CheckBoxField + Enter + true + Left + true + + + + ВидимостьПоУмолчанию + 71 + true + true + + + Список.ВидимостьПоУмолчанию + + + ВидимостьПоУмолчаниюРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + + ВидимостьПоУмолчаниюКонтекстноеМеню + 72 + true + + CheckBoxField + Enter + true + Left + true + + + None + + СписокКоманднаяПанель + 3 + Left + true + + + Selection + СписокВыбор + + + СписокСтрокаПоиска + 136 + + СписокСтрокаПоискаРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 137 + true + + Список + + true + + + + СписокСостояниеПросмотра + 139 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 140 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 142 + + СписокУправлениеПоискомРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 143 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + + ПросмотрСписок + 43 + true + true + + true + + + Items.Список.CurrentData.Ref + + + ПросмотрСписокРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + Catalog.ВариантыОтчетов.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + + + ИзменитьСписок + 85 + + <key>ru</key> + <value>Изменить ...</value> + + true + true + + true + + + ИзменитьСписокРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.Change + Normal + Picture + true + true + UserCmds + Auto + + + РазместитьВРазделахСписок + 62 + true + true + + true + + + Items.Список.CurrentData.Ref + + + РазместитьВРазделахСписокРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Catalog.ВариантыОтчетов.Command.РазместитьВРазделах + Normal + Auto + true + true + UserCmds + Auto + + + КомандыСпискаСписок + 89 + true + true + + true + + + <key>ru</key> + <value>Команды списка</value> + + + ru + Команды списка + + + КомандыСпискаСписокРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + Item.Список + + + + УстановитьПометкуУдаленияСписок + 91 + true + true + + true + + + УстановитьПометкуУдаленияСписокРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Form.Item.Список.StandardCommand.SetDeletionMark + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + HierarchicalList + true + true + 60 + true + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + true + +
    + true + true + + true + + + <key>ru</key> + <value>Группа горизонтальная</value> + + + ru + Группа горизонтальная + + + ГруппаГоризонтальнаяРасширеннаяПодсказка + 109 Label true true @@ -399,221 +1290,28 @@ ФормаКоманднаяПанель -1 - - СписокИзменить - 26 - - <key>ru</key> - <value>Изменить</value> - - true - true - - true - - - СписокИзменитьРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - СписокНайти - 24 - true - true - - true - - - СписокНайтиРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - СписокОтменитьПоиск - 25 - true - true - - true - - - СписокОтменитьПоискРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - - СписокУстановитьПометкуУдаления - 27 - true - true - - true - - - СписокУстановитьПометкуУдаленияРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.SetDeletionMark - Normal - Auto - true - true - UserCmds - Auto - - - СписокОбновить - 28 - true - true - - true - - - СписокОбновитьРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - Form.Item.Список.StandardCommand.Refresh - Normal - Auto - true - true - UserCmds - Auto - - - СписокИзменитьФорму - 29 - true - true - - true - - - СписокИзменитьФормуРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - - СписокВключитьРазделы - 30 - true - true - - true - - - СписокВключитьРазделыРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - Form.Command.НастроитьГруппировкуПоРазделам - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСправка - 31 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Left + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + + + OnOpen + ПриОткрытии + + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + + + OnCreateAtServer + ПриСозданииНаСервере + + Copy + Create DontBlock + Use true true true @@ -636,37 +1334,334 @@ true + + Список.ОтчетИмя + + + Список.Description + + + Список.Ref + + + Список.Автор + + + Список.ИмяОтчета + + + Список.КлючВарианта + + + Список.Отчет + + + Список.ТипОтчета +
    true
    + ВЫБРАТЬ РАЗРЕШЕННЫЕ + Данные.Ссылка, + Данные.ВерсияДанных, + Данные.ПометкаУдаления, + Данные.Пользовательский, + НЕ Данные.Пользовательский КАК Предопределенный, + Данные.Наименование, + Данные.ВидимостьПоУмолчанию, + Данные.Отчет, + Данные.КлючВарианта, + Данные.ТипОтчета, + Данные.Автор, + Данные.Описание, + ВЫБОР + КОГДА Данные.ТипОтчета = &ТипВнутренний + ТОГДА Данные.Отчет.Имя + КОГДА Данные.ТипОтчета = &ТипДополнительный + ТОГДА Данные.Отчет + ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(Данные.Отчет КАК СТРОКА(150)), 14, 137) + КОНЕЦ КАК ИмяОтчета, + ВЫБОР + КОГДА Данные.ПометкаУдаления = ИСТИНА + ТОГДА 4 + КОГДА Данные.Пользовательский = ЛОЖЬ + ТОГДА 5 + ИНАЧЕ 3 + КОНЕЦ КАК ИндексКартинки +ИЗ + Справочник.ВариантыОтчетов КАК Данные +ГДЕ + (&РазделИлиГруппа = &КорневаяПодсистема + ИЛИ Данные.Размещение.РазделИлиГруппа В ИЕРАРХИИ (&РазделИлиГруппа)) + И (&ПоказыватьВсеОтчеты = ИСТИНА + ИЛИ Данные.Ссылка.Отчет В (&ОтчетыПользователя)) + И (&ОтборНаименование = "" + ИЛИ Данные.Наименование ПОДОБНО "%" + &ОтборНаименование + "%") + И (&ОтборАвтор = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + ИЛИ Данные.Автор = &ОтборАвтор) + И ВЫБОР + КОГДА &ОтборТипОтчета = НЕОПРЕДЕЛЕНО + ТОГДА ИСТИНА + КОГДА &ОтборТипОтчета = 1 + ТОГДА Данные.ТипОтчета = &ТипВнутренний + ИЛИ Данные.ТипОтчета = &ТипДополнительный + ИНАЧЕ Данные.ТипОтчета = &ОтборТипОтчета + КОНЕЦ Catalog.ВариантыОтчетов true true + true true true - - НастроитьГруппировкуПоРазделам + + ОтборТипОтчета <key>ru</key> - <value>Настроить группировку по разделам</value> + <value>Отчеты</value> - 1 - - ru - Настроить группировку по разделам - - + 4 + + Number + EnumRef.ТипыОтчетов + + 10 + + + true - - - - Раздел - - - Auto - Auto - + + + true + + + ОтборТипОтчета + + + + ОтборАвтор + + <key>ru</key> + <value>Автор</value> + + 5 + + CatalogRef.Пользователи + + + true + + + true + + + ОтборАвтор + + + + КорневаяПодсистема + + <key>ru</key> + <value>Корневая подсистема</value> + + 8 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + ОтборНаименование + + <key>ru</key> + <value>Наименование</value> + + 3 + + String + + + + true + + + true + + + ОтборНаименование + + + + ДеревоПодсистем + + <key>ru</key> + <value>Раздел, группа</value> + + 2 + + ValueTree + + + 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> + + 3 + + String + + 100 + + + + true + + + true + + + + ПолноеИмя + + <key>ru</key> + <value>Полное имя</value> + + 4 + + String + + + + true + + + true + + + + Приоритет + + <key>ru</key> + <value>Приоритет</value> + + 5 + + String + + 100 + + + + true + + + true + + + + ПолноеПредставление + + <key>ru</key> + <value>Полное представление</value> + + 6 + + String + + + + true + + + true + + + + + ДеревоПодсистемТекущаяСтрока + + <key>ru</key> + <value>Дерево разделов текущая строка</value> + + 6 + + Number + + 10 + + + + true + + + true + + + + РежимРаботыФормы + + <key>ru</key> + <value>Режим работы формы</value> + + 9 + + String + + + + true + + + true + + diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl index 87f7398c2..6d49c38b6 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Module.bsl @@ -1,9 +1,391 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ -&НаКлиенте -Процедура Раздел(Команда) +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; - ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.НастройкаГруппировкиПоРазделам", , ЭтаФорма); + КорневаяПодсистема = Справочники.ИдентификаторыОбъектовМетаданных.Подсистемы; + ДеревоЗначений = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); + ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПодсистем"); + + ЭтаФорма.ДеревоПодсистемТекущаяСтрока = -1; + Элементы.ДеревоПодсистем.ТекущаяСтрока = 0; + Если Параметры.РежимВыбора = Истина Тогда + РежимРаботыФормы = "Выбор"; + ИначеЕсли Параметры.Свойство("РазделСсылка") Тогда + РежимРаботыФормы = "ВсеОтчетыРаздела"; + СтрокиРазделов = ДеревоПодсистем.ПолучитьЭлементы()[0].ПолучитьЭлементы(); + Для Каждого СтрокаДерева Из СтрокиРазделов Цикл + Если СтрокаДерева.Ссылка = Параметры.РазделСсылка Тогда + Элементы.ДеревоПодсистем.ТекущаяСтрока = СтрокаДерева.ПолучитьИдентификатор(); + Прервать; + КонецЕсли; + КонецЦикла; + Иначе + РежимРаботыФормы = "Список"; + Элементы.Изменить.Отображение = ОтображениеКнопки.КартинкаИТекст; + Элементы.РазместитьВРазделах.ТолькоВоВсехДействиях = Ложь; + КонецЕсли; + + УстановитьСвойствоСпискаПоПараметруФормы("РежимВыбора"); + УстановитьСвойствоСпискаПоПараметруФормы("ВыборГруппИЭлементов"); + УстановитьСвойствоСпискаПоПараметруФормы("МножественныйВыбор"); + УстановитьСвойствоСпискаПоПараметруФормы("ТекущаяСтрока"); + + Если Параметры.РежимВыбора Тогда + Элементы.Выбрать.КнопкаПоУмолчанию = Истина; + Иначе + Элементы.Выбрать.Видимость = Ложь; + КонецЕсли; + + Если Параметры.РежимВыбора Тогда + ЭтаФорма.КлючНазначенияИспользования = "РежимВыбора"; + КонецЕсли; + + ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); + Если НЕ ПолныеПраваНаВарианты Тогда + Элементы.ОтборТипОтчета.Видимость = Ложь; + ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Список.Отбор, "ПометкаУдаления", ВидСравненияКомпоновкиДанных.Равно, Ложь,,Истина,РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); + КонецЕсли; + + СписокВыбора = Элементы.ОтборТипОтчета.СписокВыбора; + СписокВыбора.Добавить(1, НСтр("ru = 'Внутренние и Дополнительные'")); + СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внутренний, НСтр("ru = 'Внутренние'")); + СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Дополнительный, НСтр("ru = 'Дополнительные'")); + СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внешний, НСтр("ru = 'Внешние'")); + + Список.Параметры.УстановитьЗначениеПараметра("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); + Список.Параметры.УстановитьЗначениеПараметра("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); + Список.Параметры.УстановитьЗначениеПараметра("КорневаяПодсистема", КорневаяПодсистема); + Список.Параметры.УстановитьЗначениеПараметра("ПоказыватьВсеОтчеты", ПолныеПраваНаВарианты И РежимРаботыФормы = "Список"); + Список.Параметры.УстановитьЗначениеПараметра("ОтчетыПользователя", ВариантыОтчетов.ОтчетыТекущегоПользователя()); + + Список.Параметры.УстановитьЗначениеПараметра("ОтборНаименование", ОтборНаименование); + Список.Параметры.УстановитьЗначениеПараметра("ОтборАвтор", ОтборАвтор); + Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); + + ТекущийЭлемент = Элементы.Список; + + ДеревоПодсистемУстановитьПараметрыСписка(ЭтаФорма); КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если РежимРаботыФормы = "ВсеОтчетыРаздела" Тогда + Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистемТекущаяСтрока, Истина); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки); + + ОтборНаименованиеСписокВыбора = Настройки.Получить("ОтборНаименованиеСписокВыбора"); + Если ТипЗнч(ОтборНаименованиеСписокВыбора) = Тип("Массив") Тогда + Элементы.ОтборНаименование.СписокВыбора.ЗагрузитьЗначения(ОтборНаименованиеСписокВыбора); + КонецЕсли; + + Список.Параметры.УстановитьЗначениеПараметра("ОтборНаименование", ОтборНаименование); + Список.Параметры.УстановитьЗначениеПараметра("ОтборАвтор", ОтборАвтор); + Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + Настройки.Вставить("ОтборНаименованиеСписокВыбора", Элементы.ОтборНаименование.СписокВыбора.ВыгрузитьЗначения()); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОтборТипОтчетаПриИзменении(Элемент) + Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборТипОтчетаОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОтборТипОтчета = Неопределено; + Список.Параметры.УстановитьЗначениеПараметра("ОтборТипОтчета", ОтборТипОтчета); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборНаименованиеПриИзменении(Элемент) + Если ЗначениеЗаполнено(ОтборНаименование) Тогда + СписокВыбора = Элементы.ОтборНаименование.СписокВыбора; + ЭлементСписка = СписокВыбора.НайтиПоЗначению(ОтборНаименование); + Если ЭлементСписка = Неопределено Тогда + СписокВыбора.Вставить(0, ОтборНаименование); + Если СписокВыбора.Количество() > 10 Тогда + СписокВыбора.Удалить(10); + КонецЕсли; + Иначе + Индекс = СписокВыбора.Индекс(ЭлементСписка); + Если Индекс <> 0 Тогда + СписокВыбора.Сдвинуть(Индекс, -Индекс); + КонецЕсли; + КонецЕсли; + ТекущийЭлемент = Элементы.ОтборНаименование; + КонецЕсли; + + Список.Параметры.УстановитьЗначениеПараметра("ОтборНаименование", ОтборНаименование); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборАвторПриИзменении(Элемент) + Список.Параметры.УстановитьЗначениеПараметра("ОтборАвтор", ОтборАвтор); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем + +&НаКлиенте +Процедура ДеревоПодсистемПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемПередУдалением(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемПриАктивизацииСтроки(Элемент) + ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) + СтандартнаяОбработка = Ложь; + + Если Строка = Неопределено Тогда + Возврат; + КонецЕсли; + + Размещение = Новый Структура("Варианты, Действие, Приемник, Источник"); //МассивВариантов, Всего, Представление + Размещение.Варианты = Новый Структура("Массив, Всего, Представление"); + Размещение.Варианты.Массив = ПараметрыПеретаскивания.Значение; + Размещение.Варианты.Всего = ПараметрыПеретаскивания.Значение.Количество(); + + Если Размещение.Варианты.Всего = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаПриемник = ДеревоПодсистем.НайтиПоИдентификатору(Строка); + Если СтрокаПриемник = Неопределено ИЛИ СтрокаПриемник.Приоритет = "" Тогда + Возврат; + КонецЕсли; + + Размещение.Приемник = Новый Структура("Ссылка, ПолноеПредставление"); + ЗаполнитьЗначенияСвойств(Размещение.Приемник, СтрокаПриемник); + + СтрокаИсточник = Элементы.ДеревоПодсистем.ТекущиеДанные; + Размещение.Источник = Новый Структура("Ссылка, ПолноеПредставление"); + Если СтрокаИсточник = Неопределено ИЛИ СтрокаИсточник.Приоритет = "" Тогда + Размещение.Действие = "Копирование"; + Иначе + ЗаполнитьЗначенияСвойств(Размещение.Источник, СтрокаИсточник); + Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование Тогда + Размещение.Действие = "Копирование"; + Иначе + Размещение.Действие = "Перемещение"; + КонецЕсли; + КонецЕсли; + + Если Размещение.Источник.Ссылка = Размещение.Приемник.Ссылка Тогда + Предупреждение(НСтр("ru = 'Выбранные варианты отчетов уже в данном разделе.'")); + Возврат; + КонецЕсли; + + Если Размещение.Варианты.Всего = 1 Тогда + Если Размещение.Действие = "Копирование" Тогда + ШаблонВопроса = НСтр("ru = 'Разместить ""%1"" в ""%4""?'"); + Иначе + ШаблонВопроса = НСтр("ru = 'Переместить ""%1"" из ""%3"" в ""%4""?'"); + КонецЕсли; + Размещение.Варианты.Представление = Строка(Размещение.Варианты.Массив[0]); + Иначе + Размещение.Варианты.Представление = ""; + Для Каждого ВариантСсылка Из Размещение.Варианты.Массив Цикл + Размещение.Варианты.Представление = Размещение.Варианты.Представление + + ?(Размещение.Варианты.Представление = "", "", ", ") + + Строка(ВариантСсылка); + Если СтрДлина(Размещение.Варианты.Представление) > 23 Тогда + Размещение.Варианты.Представление = Лев(Размещение.Варианты.Представление, 20) + "..."; + Прервать; + КонецЕсли; + КонецЦикла; + Если Размещение.Действие = "Копирование" Тогда + ШаблонВопроса = НСтр("ru = 'Разместить варианты отчетов ""%1"" (%2 шт.) в ""%4""?'"); + Иначе + ШаблонВопроса = НСтр("ru = 'Переместить варианты отчетов ""%1"" (%2 шт.) из ""%3"" в ""%4""?'"); + КонецЕсли; + КонецЕсли; + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонВопроса, + Размещение.Варианты.Представление, + Формат(Размещение.Варианты.Всего, "ЧГ=0"), + Размещение.Источник.ПолноеПредставление, + Размещение.Приемник.ПолноеПредставление + ); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); + Если Ответ <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + Результат = РазместитьВариантыВПодсистеме(Размещение); + + ВариантыОтчетовКлиент.ОбновитьОткрытыеПанелиОтчетов(); + + ВариантыОтчетовКлиент.ПоказатьРезультат(Результат); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + Если РежимРаботыФормы = "ВсеОтчетыРаздела" Тогда + СтандартнаяОбработка = Ложь; + ВариантыОтчетовКлиент.ОткрытьВариантОтчета(ЭтаФорма); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура УстановитьСвойствоСпискаПоПараметруФормы(Ключ) + + Если Параметры.Свойство(Ключ) И ЗначениеЗаполнено(Параметры[Ключ]) Тогда + Элементы.Список[Ключ] = Параметры[Ключ]; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемОбработчикАктивизацииСтроки() + + ДеревоПодсистемУстановитьПараметрыСписка(ЭтаФорма); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ДеревоПодсистемУстановитьПараметрыСписка(ЭтаФорма) + Если ЭтаФорма.ДеревоПодсистемТекущаяСтрока = ЭтаФорма.Элементы.ДеревоПодсистем.ТекущаяСтрока Тогда + Возврат; + КонецЕсли; + + ЭтаФорма.ДеревоПодсистемТекущаяСтрока = ЭтаФорма.Элементы.ДеревоПодсистем.ТекущаяСтрока; + + СтрокаДерева = ЭтаФорма.ДеревоПодсистем.НайтиПоИдентификатору(ЭтаФорма.ДеревоПодсистемТекущаяСтрока); + Если СтрокаДерева = Неопределено Тогда + Возврат; + КонецЕсли; + + ЭтаФорма.Список.Параметры.УстановитьЗначениеПараметра("РазделИлиГруппа", СтрокаДерева.Ссылка); +КонецПроцедуры + +&НаСервере +Функция РазместитьВариантыВПодсистеме(Размещение) + Результат = Новый Структура("Оповестить, Заголовок, Текст, ТекстОшибок, Ссылка"); + + Размещено = 0; + Результат.ТекстОшибок = ""; + НачатьТранзакцию(); + Для Каждого ВариантСсылка Из Размещение.Варианты.Массив Цикл + Если ВариантСсылка.ТипОтчета = Перечисления.ТипыОтчетов.Внешний Тогда + Результат.ТекстОшибок = Результат.ТекстОшибок + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" внешний.'"), + Строка(ВариантСсылка) + ) + Символы.ПС; + Продолжить; + ИначеЕсли ВариантСсылка.ПометкаУдаления Тогда + Результат.ТекстОшибок = Результат.ТекстОшибок + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" помечен на удаление.'"), + Строка(ВариантСсылка) + ) + Символы.ПС; + Продолжить; + КонецЕсли; + + ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); + + СтрокаПриемник = ВариантОбъект.Размещение.Найти(Размещение.Приемник.Ссылка, "РазделИлиГруппа"); + + Если Размещение.Действие = "Перемещение" Тогда + СтрокаИсточник = ВариантОбъект.Размещение.Найти(Размещение.Источник.Ссылка, "РазделИлиГруппа"); + Если СтрокаИсточник = Неопределено Тогда + // Действие не требуется + ИначеЕсли СтрокаПриемник = Неопределено Тогда + // Замена подсистемы + СтрокаИсточник.РазделИлиГруппа = Размещение.Приемник.Ссылка; + СтрокаПриемник = СтрокаИсточник; + Иначе + // Удаление строки + ВариантОбъект.Размещение.Удалить(СтрокаИсточник); + КонецЕсли; + КонецЕсли; + + Если СтрокаПриемник = Неопределено Тогда + СтрокаПриемник = ВариантОбъект.Размещение.Добавить(); + СтрокаПриемник.РазделИлиГруппа = Размещение.Приемник.Ссылка; + КонецЕсли; + + СтрокаПриемник.Использование = Истина; + + Размещено = Размещено + 1; + ВариантОбъект.Записать(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + + Если Размещение.Варианты.Всего = Размещено Тогда + Результат.Оповестить = Истина; + Если Размещение.Варианты.Всего = 1 Тогда + Результат.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вариант отчета ""%1"" размещен в ""%2"".'"), + Размещение.Варианты.Представление, + Размещение.Приемник.ПолноеПредставление + ); + Результат.Текст = Размещение.Варианты.Представление; + Результат.Ссылка = ПолучитьНавигационнуюСсылку(Размещение.Варианты.Массив[0]); + Иначе + Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Варианты отчетов ""%1"" (%2 шт.) размещены в ""%3"".'"), + Размещение.Варианты.Представление, + Формат(Размещение.Варианты.Всего, "ЧН=0; ЧГ=0"), + Размещение.Приемник.ПолноеПредставление + ); + КонецЕсли; + Иначе + Результат.Оповестить = Ложь; + Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размещено вариантов отчетов: %1 из %2'"), + Формат(Размещено, "ЧН=0; ЧГ=0"), + Формат(Размещение.Варианты.Всего, "ЧН=0; ЧГ=0") + ); + Результат.ТекстОшибок = НСтр("ru = 'Варианты отчетов, которые не могут размещаться в командном интерфейсе:'") + + Символы.ПС + + Результат.ТекстОшибок; + КонецЕсли; + + Если Размещение.Действие = "Перемещение" И Размещено > 0 Тогда + Элементы.Список.Обновить(); + КонецЕсли; + + Возврат Результат; +КонецФункции + + diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form index 4004c26ce..c71a6dde4 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form.form @@ -1,8 +1,8 @@ - + Наименование - 3 + 1 true true @@ -13,7 +13,7 @@ НаименованиеРасширеннаяПодсказка - 68 + 122 Label true true @@ -23,7 +23,7 @@ НаименованиеКонтекстноеМеню - 4 + 2 true InputField @@ -31,172 +31,6 @@ true Left true - - true - true - true - true - true - Normal - - - - Администратор - 9 - true - true - - true - - - Объект.Администратор - - - АдминистраторРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - - АдминистраторКонтекстноеМеню - 10 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - КлючОбъекта - 7 - - <key>ru</key> - <value>Источник данных</value> - - true - true - - - Объект.КлючОбъекта - - - КлючОбъектаРасширеннаяПодсказка - 72 - Label - true - true - - Left - - - - КлючОбъектаКонтекстноеМеню - 8 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - КлючВарианта - 28 - true - true - - - Объект.КлючВарианта - - - КлючВариантаРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - - КлючВариантаКонтекстноеМеню - 29 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ТипВариантаОтчета - 22 - - <key>ru</key> - <value>Тип отчета</value> - - true - true - - - Объект.ТипВариантаОтчета - - - ТипВариантаОтчетаРасширеннаяПодсказка - 76 - Label - true - true - - Left - - - - ТипВариантаОтчетаКонтекстноеМеню - 23 - true - - InputField - true - Enter - true - Left - true true true @@ -209,7 +43,7 @@ Описание - 20 + 3 true true @@ -218,9 +52,10 @@ Объект.Описание + Left ОписаниеРасширеннаяПодсказка - 78 + 124 Label true true @@ -230,7 +65,7 @@ ОписаниеКонтекстноеМеню - 21 + 4 true InputField @@ -239,30 +74,250 @@ Left true + + StartChoice + ОписаниеНачалоВыбора + true + 2 true + true + false true true + false + true + false + false + false true true true Normal - - БыстрыйДоступ - 64 + + ГруппаДоступен + 106 + + Доступен + 109 + true + true + + true + + + Доступен + + Top + + OnChange + ДоступенПриИзменении + + + ДоступенРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + + ДоступенКонтекстноеМеню + 110 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Только для автора: + + + 1 + + + + + ru + Всем пользователям + + + 2 + + + Vertical + + + + ГруппаАвторИВидимостьПоУмолчанию + 108 + + Декорация + 117 + true + true + + true + + + ДекорацияРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + ДекорацияКонтекстноеМеню + 118 + true + + Label + true + true + + Left + + + + Автор + 115 + true + true + + true + + + Объект.Автор + + None + + АвторРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 116 + true + + InputField + Enter + true + Left + true + + 35 + true + true + false + true + true + true + true + Normal + + + + ВидимостьПоУмолчанию + 113 + true + true + + true + + + Объект.ВидимостьПоУмолчанию + + Right + + ВидимостьПоУмолчаниюРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + ВидимостьПоУмолчаниюКонтекстноеМеню + 114 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа автор и видимость по умолчанию</value> + + + ru + Группа автор и видимость по умолчанию + + + ГруппаАвторИВидимостьПоУмолчаниюРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true true - - БыстрыйДоступ - + + <key>ru</key> + <value>Группа доступен</value> + + + ru + Группа доступен + - БыстрыйДоступРасширеннаяПодсказка - 80 + ГруппаДоступенРасширеннаяПодсказка + 126 Label true true @@ -270,40 +325,280 @@ Left - - БыстрыйДоступКонтекстноеМеню - 65 - true - - LabelField - Enter - true - Left - true - - - Click - БыстрыйДоступНажатие - - true - true - true + UsualGroup + + Auto + true + true + Auto + Auto - - Разделы - 66 + + ДеревоПодсистем + 80 true true true - Разделы + ДеревоПодсистем - - РазделыРасширеннаяПодсказка + None + Add + Copy + Delete + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ГруппаКолонок + 83 + + ДеревоПодсистемИспользование + 104 + true + true + + true + + + ДеревоПодсистем.Использование + + None + + OnChange + ДеревоПодсистемИспользованиеПриИзменении + + + ДеревоПодсистемИспользованиеРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + ДеревоПодсистемИспользованиеКонтекстноеМеню + 105 + true + + CheckBoxField + Auto + true + Left + true + + + + ДеревоПодсистемПредставление + 86 + true + true + + true + + + ДеревоПодсистем.Представление + + + ДеревоПодсистемПредставлениеРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + + ДеревоПодсистемПредставлениеКонтекстноеМеню + 87 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа колонок</value> + + + ru + Группа колонок + + + ГруппаКолонокРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ДеревоПодсистемВажность + 96 + true + true + + true + + + ДеревоПодсистем.Важность + + + OnChange + ДеревоПодсистемВажностьПриИзменении + + + ДеревоПодсистемВажностьРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + + ДеревоПодсистемВажностьКонтекстноеМеню + 97 + true + + InputField + Auto + true + Left + true + + 8 + true + true + true + false + true + true + false + false + true + true + true + Normal + + + + ДеревоПодсистемКоманднаяПанель 82 + Left + + + ДеревоПодсистемСтрокаПоиска + 136 + + ДеревоПодсистемСтрокаПоискаРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + + ДеревоПодсистемСтрокаПоискаКонтекстноеМеню + 137 + true + + ДеревоПодсистем + + true + + + + ДеревоПодсистемСостояниеПросмотра + 139 + + ДеревоПодсистемСостояниеПросмотраРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + + ДеревоПодсистемСостояниеПросмотраКонтекстноеМеню + 140 + true + + ViewStatusAddition + ДеревоПодсистем + + true + + + + ДеревоПодсистемУправлениеПоиском + 142 + + ДеревоПодсистемУправлениеПоискомРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + ДеревоПодсистемУправлениеПоискомКонтекстноеМеню + 143 + true + + SearchControlAddition + ДеревоПодсистем + + true + + + + ДеревоПодсистемРасширеннаяПодсказка + 135 Label true true @@ -312,36 +607,136 @@ - РазделыКонтекстноеМеню - 67 + ДеревоПодсистемКонтекстноеМеню + 81 true - LabelField - Enter - true - Left - true - - - Click - РазделыНажатие - - true - true - true - + Tree + true + true + 15 + true + true + MultiRow +
    true
    + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + ExpandAllLevels + true + true + None + None + None + true
    ФормаКоманднаяПанель -1 + + ВосстановитьИсходныеНастройки + 26 + true + true + + true + + + ВосстановитьИсходныеНастройкиРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Form.Command.ВосстановитьИсходныеНастройки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + РазместитьВРазделах + 56 + true + + true + + + Объект.Ref + + + РазместитьВРазделахРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Catalog.ВариантыОтчетов.Command.РазместитьВРазделах + Normal + Auto + true + true + UserCmds + Auto + + + СброситьНастройкиПользователей + 79 + true + true + + true + + + Объект.Ref + + + СброситьНастройкиПользователейРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Catalog.ВариантыОтчетов.Command.СброситьНастройкиПользователей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + Left true + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере - LockOwner + DontBlock true true true @@ -367,11 +762,63 @@
    true
    true + + ЭтоНовый + + <key>ru</key> + <value>Это новый</value> + + 3 + + Boolean + + + true + + + true + + + + ПолныеПраваНаВарианты + + <key>ru</key> + <value>Полные права на варианты</value> + + 4 + + Boolean + + + true + + + true + + + + ОшибкаОткрытия + + <key>ru</key> + <value>Ошибка открытия</value> + + 5 + + String + + + + true + + + true + + ДеревоПодсистем <key>ru</key> - <value>Дерево подсистем</value> + <value>Раздел, группа</value> 2 @@ -384,15 +831,14 @@ true - ПутьКПодсистеме + Ссылка <key>ru</key> - <value>Путь к подсистеме</value> + <value>Ссылка</value> 1 - String - + CatalogRef.ИдентификаторыОбъектовМетаданных true @@ -402,10 +848,10 @@ - Название + Представление <key>ru</key> - <value>Название</value> + <value>Раздел, Группа</value> 2 @@ -420,14 +866,55 @@ - Предопределенная + Имя <key>ru</key> - <value>Предопределенная</value> + <value>Имя</value> 3 - Boolean + String + + 100 + + + + true + + + true + + + + ПолноеИмя + + <key>ru</key> + <value>Полное имя</value> + + 4 + + String + + + + true + + + true + + + + Приоритет + + <key>ru</key> + <value>Приоритет</value> + + 5 + + String + + 100 + true @@ -442,7 +929,83 @@ ru Использование - 4 + 6 + + Number + + 1 + + + + true + + + true + + + + Важность + + <key>ru</key> + <value>Важность</value> + + 9 + + String + + 15 + + + + true + + + true + + + + ИспользованиеПоУмолчанию + 8 + + Number + + 1 + + + + true + + + true + + + + ВажностьПоУмолчанию + + <key>ru</key> + <value>Важность по умолчанию</value> + + 7 + + String + + 15 + + + + true + + + true + + + + ИзмененПользователем + + <key>ru</key> + <value>Изменен пользователем</value> + + 10 Boolean @@ -455,15 +1018,17 @@ - БыстрыйДоступ + ИмяОтчета <key>ru</key> - <value>Быстрый доступ</value> + <value>Имя отчета</value> - 3 + 6 String - + + 150 + true @@ -473,12 +1038,29 @@ - Разделы + ЭтоВнешний <key>ru</key> - <value>Разделы</value> + <value>Это внешний</value> - 4 + 7 + + Boolean + + + true + + + true + + + + Доступен + + <key>ru</key> + <value>Доступен</value> + + 8 String @@ -490,9 +1072,44 @@ true + + ВосстановитьИсходныеНастройки + + <key>ru</key> + <value>Восстановить исходные настройки</value> + + 1 + + ru + Восстановить исходные настройки варианта отчета, поставляемые конфигурацией. +Восстанавливаются наименование, описание и настройки размещения. + + + true + + + StdPicture.Refresh + + + + ВосстановитьИсходныеНастройки + + + Auto + Auto + - + + + AfterWrite + ПослеЗаписи + + + BeforeWriteAtServer + ПередЗаписьюНаСервере + +
    diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html new file mode 100644 index 000000000..468f58e7a --- /dev/null +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -0,0 +1,30 @@ + +

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

    +

    Реквизиты:

    +

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

    Таблица "Размещение":

    +

    + + + +
    +
  • Использование
  • Если выключен, то отчет не будет размещаться в группе раздела.
    +
  • Раздел, Группа
  • +

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

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

    Команды:

    +

    + + +
    +
  • Просмотр
  • Открыть отчет для формирования и просмотра.
    +
  • Сбросить настройки пользователей
  • Сбросить пользовательские настройки в панелях отчетов по данному варианту отчета.
    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl index 29cc5d0c3..58ff17aed 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -3,253 +3,179 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - СписокПользователей = ""; - СписокПодсистем = ""; - - Для каждого Подсистема из Метаданные.Подсистемы Цикл - - Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда - Продолжить; - КонецЕсли; - - СтрокаПодсистемы = ДеревоПодсистем.ПолучитьЭлементы().Добавить(); - - СтрокаПодсистемы.ПутьКПодсистеме = Подсистема.Имя; - СтрокаПодсистемы.Название = Подсистема.Синоним; - - МассивСтрок = Объект.Подсистемы.НайтиСтроки(Новый Структура("Подсистема", Подсистема.Имя)); - СтрокаПодсистемы.Использование = МассивСтрок.Количество() > 0; - Если СтрокаПодсистемы.Использование тогда - СписокПодсистем = СписокПодсистем + Подсистема.Синоним + ", "; - СтрокаПодсистемы.Предопределенная = МассивСтрок[0].Предопределенная; - КонецЕсли; - - ДобавитьДеревоПодсистем(Подсистема, СтрокаПодсистемы, СписокПодсистем); - - КонецЦикла; - - ВиртуальныеПодсистемы = ВариантыОтчетов.ПолучитьВиртуальныеПодсистемы(""); - - Для каждого Подсистема из ВиртуальныеПодсистемы Цикл - - СтрокаПодсистемы = ДеревоПодсистем.Строки.Добавить(); - - СтрокаПодсистемы.ПутьКПодсистеме = Подсистема.Значение; - СтрокаПодсистемы.Название = Подсистема.Представлени; - - МассивСтрок = Объект.Подсистемы.НайтиСтроки(Новый Структура("Подсистема", Подсистема.Значение)); - СтрокаПодсистемы.Использование = МассивСтрок.Количество() > 0; - Если СтрокаПодсистемы.Использование тогда - СписокПодсистем = СписокПодсистем + Подсистема.Синоним + ", "; - СтрокаПодсистемы.Предопределенная = МассивСтрок[0].Предопределенная; - КонецЕсли; - - ДобавитьДеревоВиртуальныхПодсистем(Подсистема.Значение, СтрокаПодсистемы, СписокПодсистем); - - КонецЦикла; - - БыстрыйДоступ = ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма); - Разделы = ПредставлениеРазделов(ЭтаФорма); - - Если Объект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет - ИЛИ Объект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Предопределенный Тогда - - Элементы.Администратор.АвтоОтметкаНезаполненного = Ложь; - Элементы.Администратор.ТолькоПросмотр = Истина; - Элементы.Описание.ТолькоПросмотр = Истина; - + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Если Объект.Ссылка.Пустая() Тогда + ОшибкаОткрытия = НСтр("ru = 'Новый вариант отчета можно создать только из формы отчета'"); + Возврат; КонецЕсли; + ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); + + Если Объект.ПометкаУдаления Тогда + ТолькоПросмотр = Истина; + Элементы.ДеревоПодсистем.ТолькоПросмотр = Истина; + КонецЕсли; + + Если НЕ ПолныеПраваНаВарианты Тогда + Элементы.Автор.ТолькоПросмотр = Истина; + КонецЕсли; + + Если НЕ Объект.Пользовательский Тогда + Элементы.Наименование.ТолькоПросмотр = Истина; + Элементы.Доступен.ТолькоПросмотр = Истина; + Элементы.Автор.ТолькоПросмотр = Истина; + Элементы.Автор.АвтоОтметкаНезаполненного = Ложь; + КонецЕсли; + + ЭтоВнешний = (Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внешний); + Если ЭтоВнешний Тогда + Элементы.ВидимостьПоУмолчанию.ТолькоПросмотр = Истина; + Элементы.ДеревоПодсистем.ТолькоПросмотр = Истина; + КонецЕсли; + + Элементы.ВосстановитьИсходныеНастройки.Видимость = ( + ПолныеПраваНаВарианты + И Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний + И НЕ Объект.Пользовательский + ); + + // Заполнение имени отчета для команды "Просмотр" + Если Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Тогда + ИмяОтчета = Объект.Отчет.Имя; + ИначеЕсли Объект.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный Тогда + ИмяОтчета = Объект.Отчет.ИмяОбъекта; + Иначе + ИмяОтчета = Объект.Отчет; + КонецЕсли; + + ПерезаполнитьДерево(); + + ВариантыОтчетов.ДеревоПодсистемДобавитьУсловноеОформление(ЭтаФорма); + + Доступен = ?(Объект.ТолькоДляАвтора, "1", "2"); + + ВидимостьДоступность(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если НЕ ПустаяСтрока(ОшибкаОткрытия) Тогда + Если Объект.Ссылка.Пустая() Тогда + Отказ = Истина; + Иначе + ТолькоПросмотр = Истина; + КонецЕсли; + + Предупреждение(ОшибкаОткрытия); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + ВариантыОтчетов.ДеревоПодсистемЗаписать(ЭтаФорма, ТекущийОбъект); +КонецПроцедуры + +&НаКлиенте +Процедура ПослеЗаписи(ПараметрыЗаписи) + ПараметрОповещения = Новый Структура("Ссылка, Наименование, Автор, Описание, ВидимостьПоУмолчанию"); + ЗаполнитьЗначенияСвойств(ПараметрОповещения, Объект); + Оповестить(ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(), ПараметрОповещения, ИмяФормы); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура БыстрыйДоступНажатие(Элемент, СтандартнаяОбработка) +Процедура ОписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - - ИсключенияБыстрогоДоступа = Новый СписокЗначений; - Для каждого СтрокаПользователь из Объект.ИсключенияБыстрогоДоступа Цикл - ИсключенияБыстрогоДоступа.Добавить(СтрокаПользователь.Пользователь); - КонецЦикла; - ПараметрыФормы = Новый Структура("БыстрыйДоступ, ИсключенияБыстрогоДоступа", Объект.БыстрыйДоступ, ИсключенияБыстрогоДоступа); - - Структура = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаБыстрогоДоступа", ПараметрыФормы, ЭтаФорма); - Если Структура = Неопределено тогда - Возврат; - КонецЕсли; - - Объект.БыстрыйДоступ = Структура.БыстрыйДоступ; - - Объект.ИсключенияБыстрогоДоступа.Очистить(); - Для Каждого ЭлементСписка Из Структура.ИсключенияБыстрогоДоступа Цикл - Объект.ИсключенияБыстрогоДоступа.Добавить().Пользователь = ЭлементСписка.Значение; - КонецЦикла; - - БыстрыйДоступ = ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма); - Модифицированность = Истина; + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста( + Объект.Описание, + Объект.Описание, + Модифицированность, + НСтр("ru = 'Описание'") + ); КонецПроцедуры &НаКлиенте -Процедура РазделыНажатие(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - ПараметрыФормы = Новый Структура("АдресДереваПодсистем, Подсистемы, НовыйЭлементСправочника"); - ПараметрыФормы.Подсистемы = Объект.Подсистемы; - ПараметрыФормы.НовыйЭлементСправочника = Объект.Ссылка.Пустая(); - - ПодготовитьПараметрыНастройкиПодсистем(ПараметрыФормы); - - ВозвращаемыеПараметры = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаПодсистем", ПараметрыФормы, ЭтаФорма); - - Если ВозвращаемыеПараметры <> Неопределено тогда - Объект.Подсистемы.Очистить(); - Для каждого ОписаниеПодсистема из ВозвращаемыеПараметры.СписокПодсистем Цикл - СтрокаПодсистемы = Объект.Подсистемы.Добавить(); - СтрокаПодсистемы.Подсистема = ОписаниеПодсистема.Подсистема; - СтрокаПодсистемы.Название = ОписаниеПодсистема.Название; - СтрокаПодсистемы.Предопределенная = ОписаниеПодсистема.Предопределенная; - КонецЦикла; - - ЗафиксироватьРезультатНастройкиПодсистем(ВозвращаемыеПараметры); - - Разделы = ПредставлениеРазделов(ЭтаФорма); - - Модифицированность = Истина; - - КонецЕсли; +Процедура ДоступенПриИзменении(Элемент) + Объект.ТолькоДляАвтора = (ЭтаФорма.Доступен = "1"); + ВидимостьДоступность(ЭтаФорма, "ТолькоДляАвтора"); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем + +&НаКлиенте +Процедура ДеревоПодсистемИспользованиеПриИзменении(Элемент) + ВариантыОтчетовКлиент.ДеревоПодсистемИспользованиеПриИзменении(ЭтаФорма, Элемент); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемВажностьПриИзменении(Элемент) + ВариантыОтчетовКлиент.ДеревоПодсистемВажностьПриИзменении(ЭтаФорма, Элемент); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВосстановитьИсходныеНастройки(Команда) + РезультатРаботыСерверера = ВосстановитьИсходныеНастройкиСервер(); + Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистем.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина); + ВариантыОтчетовКлиент.ПоказатьРезультат(РезультатРаботыСерверера); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма) - ВариантБыстрыйДоступ = ЭтаФорма.Объект.БыстрыйДоступ; - ВариантИсключенияБыстрогоДоступа = ЭтаФорма.Объект.ИсключенияБыстрогоДоступа; - - Результат = ""; - Для Каждого СтрокаТаблицы Из ВариантИсключенияБыстрогоДоступа Цикл - ПредставлениеСтроки = СокрЛП(Строка(СтрокаТаблицы.Пользователь)); - Если ПредставлениеСтроки <> "" Тогда - Если Результат = "" Тогда - Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все кроме:'") +" ", ""); - Результат = Результат + ПредставлениеСтроки; - Иначе - Результат = Результат +", "+ ПредставлениеСтроки; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если Результат = "" Тогда - Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все'"), НСтр("ru = 'Пользователи не выбраны'")); +Процедура ВидимостьДоступность(ЭтаФорма, Изменения = "") + Если ЭтаФорма.ТолькоПросмотр Тогда + Возврат; КонецЕсли; + Объект = ЭтаФорма.Объект; + Элементы = ЭтаФорма.Элементы; + + Если Изменения = "" ИЛИ Изменения = "ТолькоДляАвтора" Тогда + Если НЕ ЭтаФорма.ЭтоВнешний Тогда + Элементы.ВидимостьПоУмолчанию.Доступность = НЕ Объект.ТолькоДляАвтора; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Функция ПерезаполнитьДерево() + ДеревоПриемник = ВариантыОтчетов.ДеревоПодсистемСформировать(ЭтаФорма, Объект); + ЗначениеВРеквизитФормы(ДеревоПриемник, "ДеревоПодсистем"); + Возврат Истина; +КонецФункции + +&НаСервере +Функция ВосстановитьИсходныеНастройкиСервер() + Результат = Новый Структура("Оповестить, Заголовок, Текст, ТекстОшибок, Ссылка", Ложь, "", "", "", "", ""); + + ДеревоНастроек = ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации(); + + ОписаниеВарианта = ВариантыОтчетов.ОписаниеВарианта(ДеревоНастроек, Объект.Отчет, Объект.КлючВарианта); + + Объект.Наименование = ОписаниеВарианта.Наименование; + Объект.Описание = ОписаниеВарианта.Описание; + + Объект.Размещение.Очистить(); + ВариантыОтчетов.ВосстановитьРазмещениеПредопределенногоВариантаОтчета(Объект, ОписаниеВарианта); + + ПерезаполнитьДерево(); + + Модифицированность = Истина; + + Результат.Заголовок = НСтр("ru = 'Восстановлены настройки варианта отчета'"); + Результат.Оповестить = Истина; + Результат.Текст = Строка(Объект.Ссылка); + Результат.Ссылка = ПолучитьНавигационнуюСсылку(Объект.Ссылка); + Возврат Результат; КонецФункции -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеРазделов(ЭтаФорма) - ВариантПодсистемы = ЭтаФорма.Объект.Подсистемы; - - Результат = ""; - Для Каждого СтрокаТаблицы Из ВариантПодсистемы Цикл - ПредставлениеСтроки = СокрЛП(СтрокаТаблицы.Название); - Если ПредставлениеСтроки <> "" Тогда - Результат = Результат + ПредставлениеСтроки + ", "; - КонецЕсли; - КонецЦикла; - - Если Результат = "" Тогда - Результат = НСтр("ru = 'Разделы не выбраны'"); - Иначе - Результат = Лев(Результат, СтрДлина(Результат)-2); - КонецЕсли; - - Возврат Результат; -КонецФункции - -&НаСервере -Процедура ДобавитьДеревоПодсистем(Подсистема, СтрокаПодсистемы, СписокПодсистем) - - Для каждого ПодсистемаПодчиненная из Подсистема.Подсистемы Цикл - - Если Не ПодсистемаПодчиненная.ВключатьВКомандныйИнтерфейс тогда - Продолжить; - КонецЕсли; - - СтрокаПодсистемыПодчиненой = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); - СтрокаПодсистемыПодчиненой.Название = ПодсистемаПодчиненная.Синоним; - МассивСтрок = Объект.Подсистемы.НайтиСтроки( - Новый Структура("Подсистема", СтрокаПодсистемы.ПутьКПодсистеме + "\" + ПодсистемаПодчиненная.Имя)); - СтрокаПодсистемыПодчиненой.Использование = МассивСтрок.Количество() > 0; - Если СтрокаПодсистемыПодчиненой.Использование тогда - СписокПодсистем = СписокПодсистем + ПодсистемаПодчиненная.Синоним + ", "; - СтрокаПодсистемыПодчиненой.Предопределенная = МассивСтрок[0].Предопределенная; - КонецЕсли; - СтрокаПодсистемыПодчиненой.ПутьКПодсистеме = СтрокаПодсистемы.ПутьКПодсистеме + "\" + ПодсистемаПодчиненная.Имя; - ДобавитьДеревоПодсистем(ПодсистемаПодчиненная, СтрокаПодсистемыПодчиненой, СписокПодсистем); - - КонецЦикла; - - ВиртуальныеПодсистемы = ВариантыОтчетов.ПолучитьВиртуальныеПодсистемы(СтрокаПодсистемы.ПутьКПодсистеме); - - Для каждого ПодсистемаПодчиненная из ВиртуальныеПодсистемы Цикл - - СтрокаПодсистемыПодчиненой = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); - СтрокаПодсистемыПодчиненой.Название = ПодсистемаПодчиненная.Представление; - МассивСтрок = Объект.Подсистемы.НайтиСтроки( - Новый Структура("Подсистема", ПодсистемаПодчиненная.Значение)); - СтрокаПодсистемыПодчиненой.Использование = МассивСтрок.Количество() > 0; - Если СтрокаПодсистемыПодчиненой.Использование тогда - СписокПодсистем = СписокПодсистем + ПодсистемаПодчиненная.Представление + ", "; - СтрокаПодсистемыПодчиненой.Предопределенная = МассивСтрок[0].Предопределенная; - КонецЕсли; - СтрокаПодсистемыПодчиненой.ПутьКПодсистеме = ПодсистемаПодчиненная.Значение; - ДобавитьДеревоВиртуальныхПодсистем(ПодсистемаПодчиненная.Значение, СтрокаПодсистемыПодчиненой, СписокПодсистем); - - КонецЦикла; -КонецПроцедуры - -&НаСервере -Процедура ДобавитьДеревоВиртуальныхПодсистем(Подсистема, СтрокаПодсистемы, СписокПодсистем) - - ВиртуальныеПодсистемы = ВариантыОтчетов.ПолучитьВиртуальныеПодсистемы(Подсистема); - - Для каждого ПодсистемаПодчиненная из ВиртуальныеПодсистемы Цикл - - СтрокаПодсистемыПодчиненой = СтрокаПодсистемы.ПолучитьЭлементы().Добавить(); - СтрокаПодсистемыПодчиненой.Название = ПодсистемаПодчиненная.Представление; - МассивСтрок = Объект.Подсистемы.НайтиСтроки( - Новый Структура("Подсистема", ПодсистемаПодчиненная.Значение)); - СтрокаПодсистемыПодчиненой.Использование = МассивСтрок.Количество() > 0; - Если СтрокаПодсистемыПодчиненой.Использование тогда - СписокПодсистем = СписокПодсистем + ПодсистемаПодчиненная.Представление + ", "; - СтрокаПодсистемыПодчиненой.Предопределенная = МассивСтрок[0].Предопределенная; - КонецЕсли; - СтрокаПодсистемыПодчиненой.ПутьКПодсистеме = ПодсистемаПодчиненная.Значение; - ДобавитьДеревоВиртуальныхПодсистем(ПодсистемаПодчиненная.Значение, СтрокаПодсистемыПодчиненой, СписокПодсистем); - - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ПодготовитьПараметрыНастройкиПодсистем(ПараметрыФормы) - - ДеревоЗначений = ДанныеФормыВЗначение(ДеревоПодсистем, Тип("ДеревоЗначений")); - ПараметрыФормы.АдресДереваПодсистем = ПоместитьВоВременноеХранилище(ДеревоЗначений, ЭтаФорма.УникальныйИдентификатор); - -КонецПроцедуры - -&НаСервере -Процедура ЗафиксироватьРезультатНастройкиПодсистем(ВозвращаемыеПараметры) - - ДеревоЗначений = ПолучитьИзВременногоХранилища(ВозвращаемыеПараметры.АдресДереваПодсистем); - ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПодсистем"); - УдалитьИзВременногоХранилища(ВозвращаемыеПараметры.АдресДереваПодсистем); - -КонецПроцедуры - diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html index 1e7b63b52..0d1ad9f8e 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/ВариантыОтчетов/Help/ru.html @@ -1,10 +1,31 @@ - -

     

    -

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

    -

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

    -

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

    -

    Для получения информация по настройке вариантов отчета обратитесь к документации по конфигурированию и администрированию 1С:Предприятие 8.

    -

    См. также:

    -

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

    -

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

    -

     

    \ No newline at end of file + +

    Редактирование, открытие и выбор вариантов отчетов.

    +

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

    +

    Реквизиты:

    +

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

    Команды:

    +

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

     

    +

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

    \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl index 25af3b43b..8e0f586f4 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВариантыОтчетов/ObjectModule.bsl @@ -1,13 +1,98 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + Если Отказ ИЛИ ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + ИсключаемыеРеквизиты = Новый Массив; - Если ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет - ИЛИ ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Предопределенный Тогда - ИсключаемыеРеквизиты.Добавить("Администратор"); + Если НЕ Пользовательский Тогда + ИсключаемыеРеквизиты.Добавить("Автор"); КонецЕсли; ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ИсключаемыеРеквизиты); + + Если Наименование <> "" И ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование) Тогда + Отказ = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" занято, необходимо указать другое наименование.'"), + Наименование + ), + , + "Наименование" + ); + КонецЕсли; КонецПроцедуры + +Процедура ПередЗаписью(Отказ) + Если Отказ ИЛИ ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПользователемИзмененаПометкаУдаления = ( + НЕ ЭтоНовый() + И ПометкаУдаления <> Ссылка.ПометкаУдаления + И НЕ ДополнительныеСвойства.Свойство("ЗаполнениеПредопределенных") + ); + + Если НЕ Пользовательский И ПользователемИзмененаПометкаУдаления Тогда + Если ПометкаУдаления Тогда + ТекстОшибки = НСтр("ru = 'Пометка на удаление предопределенного варианта отчета запрещена.'"); + Иначе + ТекстОшибки = НСтр("ru = 'Снятие пометки удаления предопределенного варианта отчета запрещена.'"); + КонецЕсли; + ВариантыОтчетов.ОшибкаПоВарианту(Ссылка, ТекстОшибки); + ВызватьИсключение ТекстОшибки; + КонецЕсли; + + Если НЕ ПометкаУдаления И ПользователемИзмененаПометкаУдаления Тогда + НаименованиеЗанято = ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование); + КлючВариантаЗанят = ВариантыОтчетов.КлючВариантаЗанят(Отчет, Ссылка, КлючВарианта); + Если НаименованиеЗанято ИЛИ КлючВариантаЗанят Тогда + ТекстОшибки = НСтр("ru = 'Ошибка снятия пометки удаления варианта отчета:'"); + Если НаименованиеЗанято Тогда + ТекстОшибки = ТекстОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Наименование ""%1"" уже занято другим вариантом этого отчета.'"), + Наименование + ); + Иначе + ТекстОшибки = ТекстОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ключ варианта ""%1"" уже занят другим вариантом этого отчета.'"), + КлючВарианта + ); + КонецЕсли; + ТекстОшибки = ТекстОшибки + НСтр("ru = 'Перед снятием пометки удаления варианта отчета + |необходимо установить пометку удаления конфликтующего варианта отчета.'"); + ВариантыОтчетов.ОшибкаПоВарианту(Ссылка, ТекстОшибки); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + Отказ = Истина; + Возврат; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + Если Отказ ИЛИ ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + // Удаление из табличной части подсистем, помеченных на удаление. + МассивУдаляемыхСтрок = Новый Массив; + Для Каждого СтрокаРазмещения Из Размещение Цикл + Если СтрокаРазмещения.РазделИлиГруппа.ПометкаУдаления = Истина Тогда + МассивУдаляемыхСтрок.Добавить(СтрокаРазмещения); + КонецЕсли; + КонецЦикла; + Для Каждого СтрокаРазмещения Из МассивУдаляемыхСтрок Цикл + Размещение.Удалить(СтрокаРазмещения); + КонецЦикла; +КонецПроцедуры + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo index 5a3c55490..8b3544a34 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Catalogs/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -77,10 +77,6 @@ Use Description - - ru - Вариант отчета - ShowError Use @@ -119,15 +115,17 @@ BothWays Catalog.ВариантыОтчетов.Form.ФормаЭлемента Catalog.ВариантыОтчетов.Form.ФормаСписка - Catalog.ВариантыОтчетов.Form.ФормаВыбора - - КлючОбъекта + Catalog.ВариантыОтчетов.Form.ФормаСписка + + Отчет ru - Ключ объекта + Отчет String + CatalogRef.ДополнительныеОтчетыИОбработки + CatalogRef.ИдентификаторыОбъектовМетаданных 150 @@ -143,63 +141,14 @@ Index Use - - Администратор - - ru - Автор - - - CatalogRef.Пользователи - - - - ShowError - - Catalog.Пользователи.EmptyRef - - Index - Use - Use - - - Описание - - ru - Описание - - - String - - - - - - Use - Use - - - ХранилищеЗначений - - ru - Хранилище значений - - - ValueStorage - - - - - Use - - ТипВариантаОтчета + ТипОтчета ru - Тип варианта отчета + Тип отчета - EnumRef.ТипыВариантовОтчетов + EnumRef.ТипыОтчетов ru @@ -235,11 +184,72 @@ Index Use - - БыстрыйДоступ + + Пользовательский ru - Быстрый доступ + Пользовательский + + + Boolean + + + ru + Тип варианта отчета: +Да - Пользовательский, +Нет - Предопределенный. + + + + + Use + Use + + + Автор + + ru + Автор + + + CatalogRef.Пользователи + + + + ShowError + + Catalog.Пользователи.EmptyRef + + Index + Use + Use + + + ТолькоДляАвтора + + ru + Только для автора: + + + Boolean + + + ru + Влияет на доступность варианта из панели отчетов: +Флажок снят - вариант доступен всем пользователям. +Флажок установлен - вариант доступен только автору. + + + + + Use + Use + + + ВидимостьПоУмолчанию + + ru + По умолчанию виден в панели отчетов Boolean @@ -252,11 +262,58 @@ Index Use - - ПредставлениеОбъекта + + Настройки ru - Представление объекта + Настройки + + + ValueStorage + + + + + Use + + + Описание + + ru + Описание + + + String + + + + + + Use + Use + + + УдалитьКлючОбъекта + + ru + Удалить ключ объекта + + + String + + 150 + + + + + + Use + + + УдалитьПредставлениеОбъекта + + ru + Удалить представление объекта String @@ -264,14 +321,9 @@ 256 - - ru - Отчет - - Use Use @@ -279,10 +331,10 @@ - Подсистемы + Размещение ru - Подсистемы + Размещение Use @@ -292,47 +344,64 @@ - - Подсистема + + Использование ru - Подсистема + Использование - String - - 500 - + Boolean - + + + Use + Use + + + РазделИлиГруппа + ru - Раздел интерфейса - + Раздел, Группа + + + CatalogRef.ИдентификаторыОбъектовМетаданных + Use Index Use - - Название + + Важный ru - Название + Важный - String - - 200 - + Boolean - - ru - Раздел интерфейса - Use + Index + Use + + + СмТакже + + ru + См также + + Вариант находится в группе "См. также" + + Boolean + + + + Use + Index Use @@ -353,16 +422,48 @@ Use Use + + УдалитьНазвание + + ru + Удалить название + + + String + + 200 + + + + + Use + + + УдалитьПодсистема + + ru + Удалить подсистема + + + String + + 500 + + + + + Use + - ИсключенияБыстрогоДоступа + УдалитьИсключенияБыстрогоДоступа ru - Исключения быстрого доступа + Удалить исключения быстрого доступа Use @@ -381,17 +482,26 @@ CatalogRef.Пользователи - - ru - Пользователь отчета - Use - Index - Use + + РазмещениеВРазделах + + ru + Размещение в разделах + + Размещение нескольких вариантов отчетов в разделах + + + ru + + + PersonalComputer + MobileDevice + ФормаСписка @@ -405,63 +515,60 @@ ФормаЭлемента ru - Форма элемента + Вариант отчета + + + ru + + PersonalComputer MobileDevice - - НастройкаБыстрогоДоступа + + Открыть ru - Настройка быстрого доступа + Открыть... - PersonalComputer - MobileDevice - - - НастройкаПодсистем + FormCommandBarImportant + + CatalogRef.ВариантыОтчетов + + PictureAndText + + StdPicture.Report + + F3 + + + РазместитьВРазделах ru - Настройка подсистем + Разместить в разделах... - PersonalComputer - MobileDevice - - - НастройкаГруппировкиПоРазделам + FormCommandBarImportant + + CatalogRef.ВариантыОтчетов + + Multiple + true + Auto + + + СброситьНастройкиПользователей ru - Настройка группировки по разделам + Сбросить настройки пользователей - PersonalComputer - MobileDevice - - - ПереместитьВариантВРаздел - - ru - Переместить вариант в раздел - - PersonalComputer - MobileDevice - - - СкопироватьВариантВРаздел - - ru - Скопировать вариант в раздел - - PersonalComputer - MobileDevice - - - ФормаВыбора - - ru - Форма выбора - - PersonalComputer - MobileDevice - + FormCommandBarImportant + + CatalogRef.ВариантыОтчетов + + Multiple + Auto + + StdPicture.User + + diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl index a3ee822d4..0ba8437e0 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаСпискаВерсийФайла/Module.bsl @@ -337,7 +337,7 @@ КонецЕсли; Если СпособСравненияВерсийФайлов = Неопределено Тогда - СпособСравненияВерсийФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов; + СпособСравненияВерсийФайлов = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов; КонецЕсли; Если СпособСравненияВерсийФайлов = Неопределено Тогда // первый вызов - еще не инициализирована настройка @@ -347,7 +347,7 @@ Возврат; КонецЕсли; - СпособСравненияВерсийФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов; + СпособСравненияВерсийФайлов = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СпособСравненияВерсийФайлов; КонецЕсли; Если СпособСравненияВерсийФайлов = Неопределено Тогда diff --git a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl index d23add294..32a12755c 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/Forms/ФормаЭлемента/Module.bsl @@ -26,10 +26,10 @@ Элементы.ГруппаХранение.Видимость = Ложь; КонецЕсли; - ТомПолныйПуть = ФайловыеФункции.ПолныйПутьТома(Объект.Том); + ТомПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(Объект.Том); - СписокРасширенийТекстовыхФайлов = ФайловыеФункции.ПолучитьСписокРасширенийТекстовыхФайлов(); - Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(СписокРасширенийТекстовыхФайлов, Объект.Расширение) Тогда + СписокРасширенийТекстовыхФайлов = ФайловыеФункцииСлужебный.ПолучитьСписокРасширенийТекстовыхФайлов(); + Если ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаВСписке(СписокРасширенийТекстовыхФайлов, Объект.Расширение) Тогда Если ЗначениеЗаполнено(Объект.Ссылка) Тогда diff --git a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html index df6474dc6..5b06614f2 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ВерсииФайлов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

    • открыть файл версии соответствующим приложением для просмотра (команда "Открыть карточку"); diff --git a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl index f10d180f9..46c5cd5d0 100644 --- a/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВерсииФайлов/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПередЗаписью(Отказ) @@ -49,7 +51,7 @@ КонецЕсли; // Выполним установку индекса пиктограммы при записи объекта - ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); Если СтатусИзвлеченияТекста.Пустая() Тогда СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; @@ -102,7 +104,7 @@ Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда Если НЕ Том.Пустая() Тогда - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(Том) + ПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(Том) + ПутьКФайлу; Попытка Файл = Новый Файл(ПолныйПуть); Файл.УстановитьТолькоЧтение(Ложь); @@ -119,6 +121,8 @@ КонецЕсли; КонецЕсли; + // Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки. + КонецПроцедуры // Возвращает текущее значение пометки удаления в информационной базе @@ -146,3 +150,5 @@ Возврат Неопределено; КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/Help/ru.html index 4780922ad..ed30b0785 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 492488f7f..3c13e29ce 100644 --- a/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВидыДокументовФизическихЛиц/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -6,3 +8,5 @@ Параметры.Отбор.Вставить("ПометкаУдаления",Ложь); КонецПроцедуры + +#КонецЕсли \ 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 5ad2ac925..1df4c93d8 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ - +

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

      • Адрес — реквизит с таким типом контактной информации предназначен для хранения адреса в виде произвольной строки или в виде шаблона адреса. Позволяет заполнять адрес, используя адресный классификатор, из формы‑шаблона ввода адреса. Если адрес заполняется с помощью адресного классификатора, то индекс адреса устанавливается из классификатора автоматически, после окончания ввода адреса. Предопределенные фактический и юридический адреса используются в печатных формах документов.
        diff --git a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html index b37ef9ad9..df573f1db 100644 --- a/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html +++ b/SSL/src/Catalogs/ВидыКонтактнойИнформации/Help/ru.html @@ -1,4 +1,4 @@ - +

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

        См. также

        \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl index 9e8584172..66c9bd0aa 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule.bsl @@ -2,19 +2,24 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - НайденныйВнешнийПользователь = Неопределено; ПараметрыФормы = Новый Структура; - ЕстьПравоДобавленияВнешнегоПользователя = Ложь; + ПараметрыФормы.Вставить("ОбъектАвторизации", ПараметрКоманды); - Если ВнешниеПользователи.ОбъектАвторизацииИспользуется(ПараметрКоманды, , НайденныйВнешнийПользователь, ЕстьПравоДобавленияВнешнегоПользователя) Тогда - ПараметрыФормы.Вставить("Ключ", НайденныйВнешнийПользователь); - ИначеЕсли ЕстьПравоДобавленияВнешнегоПользователя Тогда - ПараметрыФормы.Вставить("ОбъектАвторизацииНовогоВнешнегоПользователя", ПараметрКоманды); - Иначе - Предупреждение(НСтр("ru = 'Доступ к информационной базе запрещен и не предоставлялся.'")); - Возврат; - КонецЕсли; - - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + Попытка + ОткрытьФорму( + "Справочник.ВнешниеПользователи.ФормаОбъекта", + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если Найти(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), + "ВызватьИсключение ОписаниеОшибкиКакПредупреждения") > 0 Тогда + Предупреждение(КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Иначе + ВызватьИсключение; + КонецЕсли; + КонецПопытки; КонецПроцедуры diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss index eb1c1dd72..c8ebe3063 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Attributes/ВнешниеПользователиСписок/ExtInfo/ListSettings.dcss @@ -1,6 +1,11 @@ + + Недействителен + Equal + false + false ПометкаУдаления @@ -23,7 +28,7 @@ - Ссылка.Недействителен + Недействителен Equal true diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form index 3e884a6fc..9e1d76744 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Form.form @@ -166,6 +166,7 @@ true true true + MultiRow Row 1 1 @@ -828,10 +829,6 @@ NotificationProcessing ОбработкаОповещения - - OnOpen - ПриОткрытии - OnCreateAtServer ПриСозданииНаСервере @@ -876,6 +873,7 @@ ВнешниеПользователи.Ссылка, ВнешниеПользователи.ПометкаУдаления, ВнешниеПользователи.Предопределенный, + ВнешниеПользователи.Недействителен, ВнешниеПользователи.Наименование, ВЫБОР КОГДА ВнешниеПользователи.ПометкаУдаления @@ -898,7 +896,7 @@ ГДЕ СоставыГруппПользователей.Пользователь = ВнешниеПользователи.Ссылка И СоставыГруппПользователей.ГруппаПользователей = &ГруппаВнешнихПользователей) - ИЛИ (НЕ &ВыбиратьИерархически) + ИЛИ НЕ &ВыбиратьИерархически И ИСТИНА В (ВЫБРАТЬ ИСТИНА @@ -931,7 +929,6 @@ true - FunctionalOption.ИспользоватьГруппыПользователей ГруппыВнешнихПользователей.Parent @@ -989,73 +986,6 @@ ВыбиратьИерархически - - ОтборОбъектАвторизации - - <key>ru</key> - <value>Отбор объект авторизации</value> - - 4 - - - true - - - true - - - - ТипОбъектовАвторизации - - <key>ru</key> - <value>Тип объектов авторизации</value> - - 5 - - - true - - - true - - - - ГруппаВнешнихПользователейВсеПользователи - - <key>ru</key> - <value>Группа внешних пользователей все пользователи</value> - - 6 - - CatalogRef.ГруппыВнешнихПользователей - - - true - - - true - - - - ПредставлениеТиповОбъектовАвторизации - - <key>ru</key> - <value>Представление типов объектов авторизации</value> - - 7 - - ValueList - - - true - - - true - - - - - ОписаниеОтображаемыхВнешнихПользователей @@ -1075,32 +1005,13 @@ </edit> </attributes> <attributes> - <name>ИспользоватьГруппы</name> + <name>ХранимыеПараметры</name> <title> <key>ru</key> - <value>Использовать группы</value> + <value>Хранимые параметры</value> - 9 - - Boolean - - - true - - - true - - - - ПоказыватьНедействительныхПользователей - - <key>ru</key> - <value>Показывать недействительных пользователей</value> - - 10 - - Boolean - + 11 + true @@ -1165,6 +1076,12 @@ ЗакрыватьПриВыборе + + ДоступКИнформационнойБазеРазрешен + + Boolean + + diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl index d2814ce19..9bc453798 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаСписка/Module.bsl @@ -4,59 +4,35 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ПоказыватьНедействительныхПользователей = Ложь; + // Начальное значение настройки до загрузки данных из настроек. + ВыбиратьИерархически = Истина; - Если Не Параметры.РежимВыбора Тогда + ЗаполнитьХранимыеПараметры(); + ЗаполнитьПараметрыДинамическихСписков(); + + Если Параметры.РежимВыбора Тогда + РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + КонецЕсли; + + ОбновитьОтборНедействительныхПользователей(ЭтаФорма); + + // Скрытие пользователей с пустым идентификатором, если значение параметра Истина. + Если Параметры.ДоступКИнформационнойБазеРазрешен Тогда - // только если не режим выбора, делаем фильтрацию - Если ПоказыватьНедействительныхПользователей Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ВнешниеПользователиСписок.Отбор, "Недействителен"); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - ВнешниеПользователиСписок.Отбор, - "Недействителен", - Ложь); - КонецЕсли; - - КонецЕсли; - - ИспользоватьГруппы = ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"); - - Если ТипЗнч(Параметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда - Если ИспользоватьГруппы Тогда - Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = Параметры.ТекущаяСтрока; + Если Параметры.ДоступКИнформационнойБазеРазрешен = Ложь Тогда + ВидСравненияКД = ВидСравненияКомпоновкиДанных.Равно; Иначе - Параметры.ТекущаяСтрока = Неопределено; + ВидСравненияКД = ВидСравненияКомпоновкиДанных.НеРавно; КонецЕсли; - Иначе - ТекущийЭлемент = Элементы.ВнешниеПользователиСписок; - Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ГруппаВнешнихПользователей", Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ВыбиратьИерархически", Истина); + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + ВнешниеПользователиСписок.Отбор, + "ИдентификаторПользователяИБ", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), + ВидСравненияКД); + КонецЕсли; - Если НЕ ИспользоватьГруппы Тогда - Параметры.ВыборГруппВнешнихПользователей = Ложь; - Элементы.ГруппаПоказыватьВнешнихПользователейДочернихГрупп.Видимость = Ложь; - Элементы.СоздатьГруппуВнешнихПользователей.Видимость = Ложь; - КонецЕсли; - - Если Параметры.Свойство("Отбор") И Параметры.Отбор.Свойство("ОбъектАвторизации") Тогда - ОтборОбъектАвторизации = Параметры.Отбор.ОбъектАвторизации; - КонецЕсли; - - // Настройка постоянных данных для списка пользователей - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - ГруппаВнешнихПользователейВсеПользователи = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; - - // Подготовка представлений типов объектов авторизации. - Для каждого ТекущийТипОбъектовАвторизации Из Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы() Цикл - МассивТипов = Новый Массив; - МассивТипов.Добавить(ТекущийТипОбъектовАвторизации); - ОписаниеТипа = Новый ОписаниеТипов(МассивТипов); - ПредставлениеТиповОбъектовАвторизации.Добавить(ОписаниеТипа.ПривестиЗначение(Неопределено), Метаданные.НайтиПоТипу(ТекущийТипОбъектовАвторизации).Синоним); - КонецЦикла; - Если НЕ ПравоДоступа("Добавление", Метаданные.Справочники.ГруппыВнешнихПользователей) Тогда Элементы.СоздатьГруппуВнешнихПользователей.Видимость = Ложь; КонецЕсли; @@ -70,37 +46,19 @@ Элементы.ПользователиИБ.Видимость = Ложь; КонецЕсли; - Параметры.Свойство("ТипОбъектовАвторизации", ТипОбъектовАвторизации); - - // Отбор не помеченных на удаление + // Отбор не помеченных на удаление. ВнешниеПользователиСписок.Отбор.Элементы[0].Использование = Истина; - Элементы.ВнешниеПользователиСписок.РежимВыбора = Истина; - Элементы.ВыбратьГруппуВнешнихПользователей.Видимость = Параметры.ВыборГруппВнешнихПользователей; - Элементы.ГруппыВнешнихПользователей.РежимВыбора = Параметры.ВыборГруппВнешнихПользователей; - Элементы.ВыбратьВнешнегоПользователя.КнопкаПоУмолчанию = НЕ Параметры.ВыборГруппВнешнихПользователей; + Элементы.ВнешниеПользователиСписок.РежимВыбора = Истина; + Элементы.ГруппыВнешнихПользователей.РежимВыбора = + ХранимыеПараметры.ВыборГруппВнешнихПользователей; Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда - // Режим подбора + // Режим подбора. Элементы.ВнешниеПользователиСписок.МножественныйВыбор = Истина; - Если Параметры.ВыборГруппВнешнихПользователей Тогда - Заголовок = НСтр("ru = 'Подбор внешних пользователей и групп'"); - Элементы.ВыбратьВнешнегоПользователя.Заголовок = НСтр("ru = 'Выбрать внешних пользователей'"); - Элементы.ВыбратьГруппуВнешнихПользователей.Заголовок = НСтр("ru = 'Выбрать группы'"); - + Если ХранимыеПараметры.ВыборГруппВнешнихПользователей Тогда Элементы.ГруппыВнешнихПользователей.МножественныйВыбор = Истина; - Элементы.ГруппыВнешнихПользователей.РежимВыделения = РежимВыделенияТаблицы.Множественный; - Иначе - Заголовок = НСтр("ru = 'Подбор внешних пользователей'"); - КонецЕсли; - Иначе - // Режим выбора - Если Параметры.ВыборГруппВнешнихПользователей Тогда - Заголовок = НСтр("ru = 'Выбор внешнего пользователя или группы'"); - Элементы.ВыбратьВнешнегоПользователя.Заголовок = НСтр("ru = 'Выбрать внешнего пользователя'"); - Иначе - Заголовок = НСтр("ru = 'Выбор внешнего пользователя'"); КонецЕсли; КонецЕсли; Иначе @@ -108,18 +66,9 @@ Элементы.ВыбратьГруппуВнешнихПользователей.Видимость = Ложь; КонецЕсли; - ОбновитьЗначениеПараметраКомпоновкиДанных(ГруппыВнешнихПользователей, "ЛюбойТипОбъектовАвторизации", ТипОбъектовАвторизации = Неопределено); - ОбновитьЗначениеПараметраКомпоновкиДанных(ГруппыВнешнихПользователей, "ТипОбъектовАвторизации", ТипЗнч(ТипОбъектовАвторизации)); - - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ЛюбойТипОбъектовАвторизации", ТипОбъектовАвторизации = Неопределено); - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ТипОбъектовАвторизации", ТипЗнч(ТипОбъектовАвторизации)); - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - ОбновитьСодержимоеФормыПриИзмененииГруппы(Элементы.ГруппыВнешнихПользователей.ТекущиеДанные); + ХранимыеПараметры.Вставить("ТекущаяСтрока", Параметры.ТекущаяСтрока); + НастроитьФормуПоИспользованиюГруппПользователей(); + ХранимыеПараметры.Удалить("ТекущаяСтрока"); КонецПроцедуры @@ -131,7 +80,11 @@ Элементы.ГруппыВнешнихПользователей.Обновить(); Элементы.ВнешниеПользователиСписок.Обновить(); - ОбновитьСодержимоеФормыПриИзмененииГруппы(Элементы.ГруппыВнешнихПользователей.ТекущиеДанные); + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); + + ИначеЕсли ВРег(ИмяСобытия) = ВРег("Запись_ИспользоватьГруппыПользователей") Тогда + + ПодключитьОбработчикОжидания("ПриИзмененииИспользованияГруппПользователей", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -139,8 +92,12 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Если Настройки[ВыбиратьИерархически] = Неопределено Тогда - ВыбиратьИерархически = Истина; + Если ТипЗнч(Настройки["ВыбиратьИерархически"]) = Тип("Булево") Тогда + ВыбиратьИерархически = Настройки["ВыбиратьИерархически"]; + КонецЕсли; + + Если НЕ ВыбиратьИерархически Тогда + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); КонецЕсли; КонецПроцедуры @@ -151,7 +108,7 @@ &НаКлиенте Процедура ВыбиратьИерархическиПриИзменении(Элемент) - ОбновитьСодержимоеФормыПриИзмененииГруппы(); + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); КонецПроцедуры @@ -161,7 +118,7 @@ &НаКлиенте Процедура ГруппыВнешнихПользователейПриАктивизацииСтроки(Элемент) - ОбновитьСодержимоеФормыПриИзмененииГруппы(Элементы.ГруппыВнешнихПользователей.ТекущиеДанные); + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); КонецПроцедуры @@ -183,10 +140,15 @@ Если ЗначениеЗаполнено(Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока) Тогда - ПараметрыФормы.Вставить("ЗначенияЗаполнения", Новый Структура("Родитель", Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока)); + ПараметрыФормы.Вставить( + "ЗначенияЗаполнения", + Новый Структура("Родитель", Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока)); КонецЕсли; - ОткрытьФорму("Справочник.ГруппыВнешнихПользователей.ФормаОбъекта", ПараметрыФормы, Элементы.ГруппыВнешнихПользователей); + ОткрытьФорму( + "Справочник.ГруппыВнешнихПользователей.ФормаОбъекта", + ПараметрыФормы, + Элементы.ГруппыВнешнихПользователей); КонецЕсли; КонецПроцедуры @@ -208,17 +170,24 @@ Отказ = Истина; - ПараметрыФормы = Новый Структура("ГруппаНовогоВнешнегоПользователя", Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока); + ПараметрыФормы = Новый Структура( + "ГруппаНовогоВнешнегоПользователя", Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока); - Если ОтборОбъектАвторизации <> Неопределено Тогда - ПараметрыФормы.Вставить("ОбъектАвторизацииНовогоВнешнегоПользователя", ОтборОбъектАвторизации); + Если ЗначениеЗаполнено(ХранимыеПараметры.ОтборОбъектАвторизации) Тогда + + ПараметрыФормы.Вставить( + "ОбъектАвторизацииНовогоВнешнегоПользователя", + ХранимыеПараметры.ОтборОбъектАвторизации); КонецЕсли; Если Копирование И Элемент.ТекущиеДанные <> Неопределено Тогда ПараметрыФормы.Вставить("ЗначениеКопирования", Элемент.ТекущаяСтрока); КонецЕсли; - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаОбъекта", ПараметрыФормы, Элементы.ВнешниеПользователиСписок); + ОткрытьФорму( + "Справочник.ВнешниеПользователи.ФормаОбъекта", + ПараметрыФормы, + Элементы.ВнешниеПользователиСписок); КонецПроцедуры @@ -235,66 +204,273 @@ &НаКлиенте Процедура ПоказыватьНедействительныхПользователей(Команда) - ПоказыватьНедействительныхПользователей = Не ПоказыватьНедействительныхПользователей; - - Элементы.ПоказыватьНедействительныхПользователей.Пометка = ПоказыватьНедействительныхПользователей; - - Если ПоказыватьНедействительныхПользователей Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ВнешниеПользователиСписок.Отбор, "Недействителен"); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - ВнешниеПользователиСписок.Отбор, - "Недействителен", - Ложь); - КонецЕсли; + ОбновитьОтборНедействительныхПользователей(ЭтаФорма, Истина); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаКлиенте -Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(Знач ТекущиеДанные = Неопределено) +&НаСервере +Процедура ЗаполнитьХранимыеПараметры() - Если НЕ ИспользоватьГруппы - ИЛИ Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = ГруппаВнешнихПользователейВсеПользователи Тогда - - ОписаниеОтображаемыхВнешнихПользователей = НСтр("ru = 'Все внешние пользователи'"); - - Элементы.ГруппаПоказыватьВнешнихПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаНельзяУстановитьСвойство; - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ВыбиратьИерархически", Истина); - - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ГруппаВнешнихПользователей", ГруппаВнешнихПользователейВсеПользователи); + ХранимыеПараметры = Новый Структура; + ХранимыеПараметры.Вставить("ВыборГруппВнешнихПользователей", Параметры.ВыборГруппВнешнихПользователей); + + Если Параметры.Отбор.Свойство("ОбъектАвторизации") Тогда + ХранимыеПараметры.Вставить("ОтборОбъектАвторизации", Параметры.Отбор.ОбъектАвторизации); Иначе - Если Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока <> Неопределено И - ТекущиеДанные <> Неопределено И - ТекущиеДанные.ВсеОбъектыАвторизации Тогда - // - ЭлементПредставленияТипаОбъектаАвторизации = ПредставлениеТиповОбъектовАвторизации.НайтиПоЗначению(ТекущиеДанные.ТипОбъектовАвторизации); - ОписаниеОтображаемыхВнешнихПользователей = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Все %1'"), - НРег(?(ЭлементПредставленияТипаОбъектаАвторизации = Неопределено, НСтр("ru = '<Недопустимый тип>'"), ЭлементПредставленияТипаОбъектаАвторизации.Представление)) ); - // - Элементы.ГруппаПоказыватьВнешнихПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаНельзяУстановитьСвойство; - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ВыбиратьИерархически", Истина); + ХранимыеПараметры.Вставить("ОтборОбъектАвторизации", Неопределено); + КонецЕсли; + + // Подготовка представлений типов объектов авторизации. + ХранимыеПараметры.Вставить("ПредставлениеТиповОбъектовАвторизации", Новый СписокЗначений); + ТипыОбъектовАвторизации = Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы(); + + Для каждого ТекущийТипОбъектовАвторизации Из ТипыОбъектовАвторизации Цикл + МассивТипов = Новый Массив; + МассивТипов.Добавить(ТекущийТипОбъектовАвторизации); + ОписаниеТипа = Новый ОписаниеТипов(МассивТипов); + + ХранимыеПараметры.ПредставлениеТиповОбъектовАвторизации.Добавить( + ОписаниеТипа.ПривестиЗначение(Неопределено), + Метаданные.НайтиПоТипу(ТекущийТипОбъектовАвторизации).Синоним); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПараметрыДинамическихСписков() + + ОбновитьЗначениеПараметраКомпоновкиДанных( + ВнешниеПользователиСписок, + "ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + ТипОбъектовАвторизации = Неопределено; + Параметры.Свойство("ТипОбъектовАвторизации", ТипОбъектовАвторизации); + + ОбновитьЗначениеПараметраКомпоновкиДанных( + ГруппыВнешнихПользователей, + "ЛюбойТипОбъектовАвторизации", + ТипОбъектовАвторизации = Неопределено); + + ОбновитьЗначениеПараметраКомпоновкиДанных( + ГруппыВнешнихПользователей, + "ТипОбъектовАвторизации", + ТипЗнч(ТипОбъектовАвторизации)); + + ОбновитьЗначениеПараметраКомпоновкиДанных( + ВнешниеПользователиСписок, + "ЛюбойТипОбъектовАвторизации", + ТипОбъектовАвторизации = Неопределено); + + ОбновитьЗначениеПараметраКомпоновкиДанных( + ВнешниеПользователиСписок, + "ТипОбъектовАвторизации", + ТипЗнч(ТипОбъектовАвторизации)); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьОтборНедействительныхПользователей(Форма, ИзменитьОтбор = Ложь) + + Элементы = Форма.Элементы; + + Если ИзменитьОтбор Тогда + + Элементы.ПоказыватьНедействительныхПользователей.Пометка = + НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка; + + ИначеЕсли Форма.Параметры.Отбор.Свойство("Недействителен") Тогда + + Элементы.ПоказыватьНедействительныхПользователей.Пометка = + Форма.Параметры.Отбор.Недействителен; + + КонецЕсли; + + Если Элементы.ПоказыватьНедействительныхПользователей.Пометка Тогда + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Форма.ВнешниеПользователиСписок.Отбор, "Недействителен", Ложь, , , Ложь); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Форма.ВнешниеПользователиСписок.Отбор, "Недействителен", Ложь, , , Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииИспользованияГруппПользователей() + + НастроитьФормуПоИспользованиюГруппПользователей(); + +КонецПроцедуры + +&НаСервере +Процедура НастроитьФормуПоИспользованиюГруппПользователей() + + ХранимыеПараметры.Вставить( + "ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); + + Если ХранимыеПараметры.Свойство("ТекущаяСтрока") Тогда + + Если ТипЗнч(Параметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + Если ХранимыеПараметры.ИспользоватьГруппы Тогда + Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = ХранимыеПараметры.ТекущаяСтрока; + Иначе + Параметры.ТекущаяСтрока = Неопределено; + КонецЕсли; Иначе - Элементы.ГруппаПоказыватьВнешнихПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаУстановитьСвойство; - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ВыбиратьИерархически", ВыбиратьИерархически); + ТекущийЭлемент = Элементы.ВнешниеПользователиСписок; + + Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = + Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; КонецЕсли; - ОбновитьЗначениеПараметраКомпоновкиДанных(ВнешниеПользователиСписок, "ГруппаВнешнихПользователей", Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока); + Иначе + Если НЕ ХранимыеПараметры.ИспользоватьГруппы + И Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока + <> Справочники.ГруппыПользователей.ВсеПользователи Тогда + + Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = + Справочники.ГруппыПользователей.ВсеПользователи; + КонецЕсли; + КонецЕсли; + + Элементы.ГруппаПоказыватьВнешнихПользователейДочернихГрупп.Видимость = + ХранимыеПараметры.ИспользоватьГруппы; + + Элементы.СоздатьГруппуВнешнихПользователей.Видимость = + ХранимыеПараметры.ИспользоватьГруппы; + + ВыборГруппВнешнихПользователей = ХранимыеПараметры.ВыборГруппВнешнихПользователей + И ХранимыеПараметры.ИспользоватьГруппы + И Параметры.РежимВыбора; + + Если Параметры.РежимВыбора Тогда + + Элементы.ВыбратьГруппуВнешнихПользователей.Видимость = ВыборГруппВнешнихПользователей; + Элементы.ВыбратьВнешнегоПользователя.КнопкаПоУмолчанию = НЕ ВыборГруппВнешнихПользователей; + АвтоЗаголовок = Ложь; + + Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда + // Режим подбора. + + Если ВыборГруппВнешнихПользователей Тогда + + Заголовок = НСтр("ru = 'Подбор внешних пользователей и групп'"); + + Элементы.ВыбратьВнешнегоПользователя.Заголовок = + НСтр("ru = 'Выбрать внешних пользователей'"); + + Элементы.ВыбратьГруппуВнешнихПользователей.Заголовок = + НСтр("ru = 'Выбрать группы'"); + + Иначе + Заголовок = НСтр("ru = 'Подбор внешних пользователей'"); + КонецЕсли; + Иначе + // Режим выбора. + Если ВыборГруппВнешнихПользователей Тогда + Заголовок = НСтр("ru = 'Выбор внешнего пользователя или группы'"); + + Элементы.ВыбратьВнешнегоПользователя.Заголовок = + НСтр("ru = 'Выбрать внешнего пользователя'"); + Иначе + Заголовок = НСтр("ru = 'Выбор внешнего пользователя'"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(Форма) + + Элементы = Форма.Элементы; + + Если НЕ Форма.ХранимыеПараметры.ИспользоватьГруппы + ИЛИ Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока = ПредопределенноеЗначение( + "Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи") Тогда + + Форма.ОписаниеОтображаемыхВнешнихПользователей = НСтр("ru = 'Все внешние пользователи'"); + + Элементы.ГруппаПоказыватьВнешнихПользователейДочернихГрупп.ТекущаяСтраница = + Элементы.ГруппаНельзяУстановитьСвойство; + + ОбновитьЗначениеПараметраКомпоновкиДанных( + Форма.ВнешниеПользователиСписок, "ВыбиратьИерархически", Истина); + + ОбновитьЗначениеПараметраКомпоновкиДанных( + Форма.ВнешниеПользователиСписок, + "ГруппаВнешнихПользователей", + ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи")); + Иначе + #Если Сервер Тогда + Если ЗначениеЗаполнено(Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока) Тогда + ТекущиеДанные = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока, "ВсеОбъектыАвторизации"); + Иначе + ТекущиеДанные = Неопределено; + КонецЕсли; + #Иначе + ТекущиеДанные = Элементы.ГруппыВнешнихПользователей.ТекущиеДанные; + #КонецЕсли + + Если ТекущиеДанные <> Неопределено + И ТекущиеДанные.ВсеОбъектыАвторизации Тогда + + ЭлементПредставленияТипаОбъектаАвторизации = + Форма.ХранимыеПараметры.ПредставлениеТиповОбъектовАвторизации.НайтиПоЗначению( + ТекущиеДанные.ТипОбъектовАвторизации); + + Форма.ОписаниеОтображаемыхВнешнихПользователей = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Все %1'"), + НРег(?( + ЭлементПредставленияТипаОбъектаАвторизации = Неопределено, + НСтр("ru = '<Недопустимый тип>'"), + ЭлементПредставленияТипаОбъектаАвторизации.Представление)) ); + + Элементы.ГруппаПоказыватьВнешнихПользователейДочернихГрупп.ТекущаяСтраница = + Элементы.ГруппаНельзяУстановитьСвойство; + + ОбновитьЗначениеПараметраКомпоновкиДанных( + Форма.ВнешниеПользователиСписок, "ВыбиратьИерархически", Истина); + Иначе + Элементы.ГруппаПоказыватьВнешнихПользователейДочернихГрупп.ТекущаяСтраница = + Элементы.ГруппаУстановитьСвойство; + + ОбновитьЗначениеПараметраКомпоновкиДанных( + Форма.ВнешниеПользователиСписок, "ВыбиратьИерархически", Форма.ВыбиратьИерархически); + КонецЕсли; + + ОбновитьЗначениеПараметраКомпоновкиДанных( + Форма.ВнешниеПользователиСписок, + "ГруппаВнешнихПользователей", + Элементы.ГруппыВнешнихПользователей.ТекущаяСтрока); КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьЗначениеПараметраКомпоновкиДанных(Знач ВладелецПараметров, Знач ИмяПараметра, Знач ЗначениеПараметра) +Процедура ОбновитьЗначениеПараметраКомпоновкиДанных(Знач ВладелецПараметров, + Знач ИмяПараметра, + Знач ЗначениеПараметра) Для каждого Параметр Из ВладелецПараметров.Параметры.Элементы Цикл Если Строка(Параметр.Параметр) = ИмяПараметра Тогда - Если Параметр.Использование И Параметр.Значение = ЗначениеПараметра Тогда + + Если Параметр.Использование + И Параметр.Значение = ЗначениеПараметра Тогда + Возврат; КонецЕсли; Прервать; + КонецЕсли; КонецЦикла; diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form index 4f29f4ceb..c0efd2fbe 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Form.form @@ -17,7 +17,7 @@ СвязьКартинкаПредупрежденияРасширеннаяПодсказка - 201 + 200 Label true true @@ -58,7 +58,7 @@ СвязьПояснениеНесоответствияРасширеннаяПодсказка - 202 + 201 Label true true @@ -96,7 +96,7 @@ true СвязьОбработкаНесоответствияРасширеннаяПодсказка - 200 + 199 Label true true @@ -131,7 +131,7 @@ ОбъектАвторизацииРасширеннаяПодсказка - 203 + 202 Label true true @@ -167,112 +167,181 @@ true true + true - Role.РаботаСПапкамиФайлов + true + Role.АдминистраторСистемы + true Role.Администрирование + true Role.БазовыеПрава + true Role.ВыводНаПринтерФайлБуферОбмена + true Role.ВыполнениеОбменовДанными + true Role.ДобавлениеИзменениеБазовойНСИ + true Role.ДобавлениеИзменениеВариантовОтчетов + true Role.ДобавлениеИзменениеВзаимодействий + true Role.ДобавлениеИзменениеВнешнихПользователей + true Role.ДобавлениеИзменениеДополнительныхОтчетовИОбработок + true Role.ДобавлениеИзменениеЗаданий + true Role.ДобавлениеИзменениеОбменовДанными + true + Role.ДобавлениеИзменениеОбщейБазовойНСИ + + + true Role.ДобавлениеИзменениеОпросов + true Role.ДобавлениеИзменениеОтветовНаВопросыАнкет + true Role.ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц + true Role.ДобавлениеИзменениеПользователей + true + Role.ДобавлениеИзменениеРассылокОтчетов + + + true Role.ДобавлениеИзменениеРолейИсполнителей + true Role.ДобавлениеИзменениеФизическихЛиц + true Role.ДобавлениеИзменениеШаблоновАнкет + true Role.ЗапускAutomation + true Role.ЗапускВебКлиента + true Role.ЗапускВнешнегоСоединения + true Role.ЗапускТолстогоКлиента + true Role.ЗапускТонкогоКлиента + true Role.ИзменениеВыполнениеЗадач + true Role.ИзменениеДополнительныхСведений + true Role.ИзменениеМакетовПечатныхФорм + true Role.ИзменениеТекущегоВнешнегоПользователя + true Role.ИзменениеТекущегоПользователя + true Role.ИзменениеУчастниковГруппДоступа + true Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + true Role.ИспользованиеДополнительныхОтчетовИОбработок + true + Role.ИспользованиеЗаметок + + + true + Role.ИспользованиеИнформационногоЦентра + + + true + Role.ИспользованиеИнтеграцииСДокументооборот + + + true + Role.ИспользованиеНапоминаний + + + true + Role.ИспользованиеСтруктурыПодчиненности + + + true Role.ИспользованиеУчетныхЗаписейЭлектроннойПочты + true + Role.ИспользованиеЭЦП + + + true Role.НастройкаИОценкаПроизводительности + true Role.ОбновлениеКонфигурацииБазыДанных + true Role.ПодготовкаСогласияНаОбработкуПерсональныхДанных @@ -280,39 +349,83 @@ Role.ПолныеПрава + true Role.ПроверкаДоступныхОбновленийКонфигурации + true Role.ПросмотрЖурналаРегистрации + true Role.РаботаСБиблиотекойФайлов + true + Role.РаботаСПапкамиФайлов + + + true Role.РедактированиеРеквизитовОбъектов + true + Role.РежимВсеФункции + + + true + Role.СохранениеДанныхПользователя + + + true + Role.УдаленныйДоступБазоваяФункциональность + + + true + Role.УдаленныйДоступОбменДаннымиВМоделиСервиса + + + true + Role.УдаленныйДоступОбменСообщениями + + + true Role.ЧтениеБазовойНСИ + true + Role.ИспользованиеВариантовОтчетов + + + true + Role.ЧтениеВерсийОбъектов + + + true Role.ЧтениеВнешнихПользователей + true Role.ЧтениеДополнительныхСведений + true Role.ЧтениеЗаданий + true Role.ЧтениеЗадач + true Role.ЧтениеОтветовНаВопросыАнкет + true Role.ЧтениеПерсональныхДанныхФизическихЛиц + true Role.ЧтениеФизическихЛиц @@ -326,7 +439,7 @@ НедействителенРасширеннаяПодсказка - 205 + 204 Label true true @@ -364,7 +477,7 @@ ДоступКИнформационнойБазеРазрешенРасширеннаяПодсказка - 207 + 206 Label true true @@ -403,7 +516,7 @@ ПользовательИнфБазыИмяРасширеннаяПодсказка - 211 + 210 Label true true @@ -422,6 +535,7 @@ Left true + 14 true true true @@ -433,10 +547,10 @@ СвойстваАутентификации1СПредприятия - 196 + 193 ПользовательИнфБазыАутентификацияСтандартная - 197 + 194 true true @@ -452,7 +566,7 @@ ПользовательИнфБазыАутентификацияСтандартнаяРасширеннаяПодсказка - 214 + 213 Label true true @@ -462,7 +576,7 @@ ПользовательИнфБазыАутентификацияСтандартнаяКонтекстноеМеню - 198 + 195 true CheckBoxField @@ -475,7 +589,7 @@ СвойстваПараметрыАутентификации1СПредприятия - 199 + 196 Пароль 21 @@ -493,7 +607,7 @@ ПарольРасширеннаяПодсказка - 217 + 216 Label true true @@ -544,7 +658,7 @@ ПодтверждениеПароляРасширеннаяПодсказка - 219 + 218 Label true true @@ -592,7 +706,7 @@ Right ПользовательИнфБазыЗапрещеноИзменятьПарольРасширеннаяПодсказка - 221 + 220 Label true true @@ -624,7 +738,7 @@ true СвойстваПараметрыАутентификации1СПредприятияРасширеннаяПодсказка - 216 + 215 Label true true @@ -650,7 +764,7 @@ СвойстваАутентификации1СПредприятияРасширеннаяПодсказка - 213 + 212 Label true true @@ -662,7 +776,6 @@ Vertical Auto - NormalSeparation true true Auto @@ -671,7 +784,7 @@ ПользовательИнфБазыАутентификацияOpenID - 193 + 197 true true @@ -683,7 +796,7 @@ Right ПользовательИнфБазыАутентификацияOpenIDРасширеннаяПодсказка - 223 + 222 Label true true @@ -693,7 +806,7 @@ ПользовательИнфБазыАутентификацияOpenIDКонтекстноеМеню - 194 + 198 true CheckBoxField @@ -707,7 +820,7 @@ ГруппаПредставлениеЯзыка 192 - ПредставлениеЯзыка + ПользовательИнфБазыЯзык 33 true true @@ -715,11 +828,11 @@ true - ПредставлениеЯзыка + ПользовательИнфБазыЯзык - ПредставлениеЯзыкаРасширеннаяПодсказка - 226 + ПользовательИнфБазыЯзыкРасширеннаяПодсказка + 225 Label true true @@ -728,7 +841,7 @@ - ПредставлениеЯзыкаКонтекстноеМеню + ПользовательИнфБазыЯзыкКонтекстноеМеню 34 true @@ -759,7 +872,7 @@ ГруппаПредставлениеЯзыкаРасширеннаяПодсказка - 225 + 224 Label true true @@ -803,7 +916,7 @@ true ОсновныеСвойстваРасширеннаяПодсказка - 210 + 209 Label true true @@ -842,7 +955,7 @@ УстановитьРолиНепосредственноРасширеннаяПодсказка - 229 + 228 Label true true @@ -915,7 +1028,7 @@ РолиПометкаРасширеннаяПодсказка - 247 + 246 Label true true @@ -946,7 +1059,7 @@ РолиСинонимРасширеннаяПодсказка - 249 + 248 Label true true @@ -990,7 +1103,7 @@ РолиКолонокРасширеннаяПодсказка - 246 + 245 Label true true @@ -1019,7 +1132,7 @@ false РолиУстановитьФлажкиРасширеннаяПодсказка - 232 + 231 Label true true @@ -1027,7 +1140,7 @@ Left - Form.Command.УстановитьФлажки + Form.Command.ВключитьРоли Normal Auto true @@ -1046,7 +1159,7 @@ false РолиСнятьФлажкиРасширеннаяПодсказка - 233 + 232 Label true true @@ -1054,7 +1167,7 @@ Left - Form.Command.СнятьФлажки + Form.Command.ИсключитьРоли Normal Auto true @@ -1073,7 +1186,7 @@ false РолиПоказатьТолькоВыбранныеРолиРасширеннаяПодсказка - 234 + 233 Label true true @@ -1099,7 +1212,7 @@ РолиПоказатьПодсистемыРолейРасширеннаяПодсказка - 235 + 234 Label true true @@ -1107,7 +1220,7 @@ Left - Form.Command.ГруппировкаПоПодсистемам + Form.Command.ГруппировкаРолейПоПодсистемам Normal Auto true @@ -1119,10 +1232,10 @@ РолиСтрокаПоиска - 237 + 236 РолиСтрокаПоискаРасширеннаяПодсказка - 239 + 238 Label true true @@ -1132,7 +1245,7 @@ РолиСтрокаПоискаКонтекстноеМеню - 238 + 237 true Роли @@ -1142,10 +1255,10 @@ РолиСостояниеПросмотра - 240 + 239 РолиСостояниеПросмотраРасширеннаяПодсказка - 242 + 241 Label true true @@ -1155,7 +1268,7 @@ РолиСостояниеПросмотраКонтекстноеМеню - 241 + 240 true ViewStatusAddition @@ -1166,10 +1279,10 @@ РолиУправлениеПоиском - 243 + 242 РолиУправлениеПоискомРасширеннаяПодсказка - 245 + 244 Label true true @@ -1179,7 +1292,7 @@ РолиУправлениеПоискомКонтекстноеМеню - 244 + 243 true SearchControlAddition @@ -1190,7 +1303,7 @@ РолиРасширеннаяПодсказка - 236 + 235 Label true true @@ -1242,7 +1355,7 @@ ОтображениеРолейРасширеннаяПодсказка - 231 + 230 Label true true @@ -1275,7 +1388,7 @@ РедактированиеИлиПросмотрРолейРасширеннаяПодсказка - 228 + 227 Label true true @@ -1305,7 +1418,7 @@ true СвойстваПользователяИБРасширеннаяПодсказка - 209 + 208 Label true true @@ -1408,7 +1521,7 @@ true - ПредставлениеЯзыка + ПользовательИнфБазыЯзык <key>ru</key> <value>Язык интерфейса программы</value> @@ -1499,23 +1612,6 @@ </edit> <savedData>true</savedData> </attributes> - <attributes> - <name>ПоказатьТолькоВыбранныеРоли</name> - <title> - <key>ru</key> - <value>Показать только выбранные роли</value> - - 26 - - Boolean - - - true - - - true - - ГруппаНовогоВнешнегоПользователя @@ -1851,14 +1947,14 @@ </edit> </attributes> <attributes> - <name>СкрытьРольПолныеПрава</name> + <name>ЗначениеКопирования</name> <title> <key>ru</key> - <value>Скрыть роль полные права</value> + <value>Значение копирования</value> 20 - Boolean + CatalogRef.ВнешниеПользователи true @@ -1891,7 +1987,7 @@ ru Аутентификация 1С:Предприятия - 24 + 22 Boolean @@ -1930,15 +2026,15 @@ Auto - СнятьФлажки + ИсключитьРоли <key>ru</key> - <value>Снять флажки</value> + <value>Исключить роли</value> 5 ru - Снять флажки + Исключить роли true @@ -1948,7 +2044,7 @@ - СнятьФлажки + ИсключитьРоли true @@ -1956,15 +2052,15 @@ Auto - УстановитьФлажки + ВключитьРоли <key>ru</key> - <value>Установить флажки</value> + <value>Включить роли</value> 6 ru - Установить флажки + Включить роли true @@ -1974,7 +2070,7 @@ - УстановитьФлажки + ВключитьРоли true @@ -1982,7 +2078,7 @@ Auto - ГруппировкаПоПодсистемам + ГруппировкаРолейПоПодсистемам <key>ru</key> <value>По подсистемам</value> @@ -1990,7 +2086,7 @@ <id>1</id> <toolTip> <key>ru</key> - <value>Показать группировку по подсистемам</value> + <value>Группировать список ролей по подсистемам</value> </toolTip> <use> <common>true</common> @@ -2000,7 +2096,7 @@ </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>ПоказатьПодсистемыРолей</name> + <name>ГруппировкаРолейПоПодсистемам</name> </handler> </action> <representation>TextPicture</representation> @@ -2038,9 +2134,5 @@ <event>BeforeWriteAtServer</event> <name>ПередЗаписьюНаСервере</name> </handlers> - <handlers> - <event>OnWriteAtServer</event> - <name>ПриЗаписиНаСервере</name> - </handlers> </extInfo> </form:Form> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html index 6f87b89a1..8251dfe61 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>Для редактирования сведений о внешнем ользователе необходимы права администрирования или права ответственного за внешних пользователей. В остальных случаях, доступен только просмотр сведений о себе, а также возможность изменить свой пароль, язык программы и контактную информацию.</p> <p>Внешний пользователь связан с каким-то объектом программы (например, контрагентом, сотрудником и т.п.), указанным в поле <strong>Объект</strong>.</p> <p>Флажок <strong>Недействителен</strong> по умолчанию снят для всех внешних пользователей. Но если пользователь по каким-либо причинам более не работает с программой, и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок <strong>Недействителен</strong>. Такого внешнего пользователя нельзя выбрать, и он не отображается в списке внешних пользователей.</p> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl index 4935b63eb..8fbb64ff3 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/Forms/ФормаЭлемента/Module.bsl @@ -4,83 +4,106 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - //** Установка начальных значений - // перед загрузкой данных из настроек на сервере - // для случая, когда данные ещё не были записаны и не загружаются - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - // Для нового элемента показать все роли, иначе только выбранные - ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка); - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ЗначениеЗаполнено(Объект.Ссылка); - // - СкрытьРольПолныеПрава = Истина; - ОбновитьДеревоРолей(); + // Заполнение вспомогательных данных. - - //** Заполнение постоянных данных ЗапретРедактированияРолей = ПользователиПереопределяемый.ЗапретРедактированияРолей(); АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); - // Заполнение списка выбора языка - Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл - Элементы.ПредставлениеЯзыка.СписокВыбора.Добавить(МетаданныеЯзыка.Синоним); - КонецЦикла; + // Заполнение списка выбора языка. + Если Метаданные.Языки.Количество() < 2 Тогда + Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь; + Иначе + Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл + + Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить( + МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним); + КонецЦикла; + КонецЕсли; - //** Подготовка к интерактивным действиям с учетом сценариев открытия формы + // Подготовка к интерактивным действиям с учетом сценариев открытия формы. УстановитьПривилегированныйРежим(Истина); Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда - // Создание нового элемента - Если Параметры.ГруппаНовогоВнешнегоПользователя <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + + // Создание нового элемента. + Если Параметры.ГруппаНовогоВнешнегоПользователя + <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + ГруппаНовогоВнешнегоПользователя = Параметры.ГруппаНовогоВнешнегоПользователя; КонецЕсли; + Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - // Копирование элемента + // Копирование элемента. + ЗначениеКопирования = Параметры.ЗначениеКопирования; Объект.ОбъектАвторизации = Неопределено; Объект.Наименование = ""; Объект.Код = ""; Объект.УдалитьПароль = ""; - ПрочитатьПользователяИБ(ЗначениеЗаполнено(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ)); + ПрочитатьПользователяИБ(ЗначениеЗаполнено( + Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ)); Иначе - // Добавление элемента + // Добавление элемента. Если Параметры.Свойство("ОбъектАвторизацииНовогоВнешнегоПользователя") Тогда + Объект.ОбъектАвторизации = Параметры.ОбъектАвторизацииНовогоВнешнегоПользователя; ОбъектАвторизацииЗаданПриОткрытии = ЗначениеЗаполнено(Объект.ОбъектАвторизации); ОбъектАвторизацииПриИзмененииНаКлиентеНаСервере(ЭтаФорма, Объект); + ИначеЕсли ЗначениеЗаполнено(ГруппаНовогоВнешнегоПользователя) Тогда - ТипОбъектовАвторизации = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ГруппаНовогоВнешнегоПользователя, "ТипОбъектовАвторизации"); + + ТипОбъектовАвторизации = ОбщегоНазначения.ПолучитьЗначениеРеквизита( + ГруппаНовогоВнешнегоПользователя, "ТипОбъектовАвторизации"); + Объект.ОбъектАвторизации = ТипОбъектовАвторизации; Элементы.ОбъектАвторизации.ВыбиратьТип = ТипОбъектовАвторизации = Неопределено; КонецЕсли; - // Чтение начальных значений свойств пользователя ИБ + + // Чтение начальных значений свойств пользователя ИБ. ПрочитатьПользователяИБ(); КонецЕсли; Иначе - // Открытие существующего элемента + // Открытие существующего элемента. ПрочитатьПользователяИБ(); КонецЕсли; УстановитьПривилегированныйРежим(Ложь); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", Истина); + ОпределитьДействияВФорме(); ОпределитьНесоответствияПользователяСПользователемИБ(); - //** Установка постоянной доступности свойств - Элементы.СвойстваПользователяИБ.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ); - Элементы.ОтображениеРолей.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли); - Элементы.УстановитьРолиНепосредственно.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли) И НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей(); + // Установка постоянной доступности свойств. + Элементы.СвойстваПользователяИБ.Видимость = + ЗначениеЗаполнено(ДействияВФорме.СвойстваПользователяИБ); + + Элементы.ОтображениеРолей.Видимость = + ЗначениеЗаполнено(ДействияВФорме.Роли); + + Элементы.УстановитьРолиНепосредственно.Видимость = + ЗначениеЗаполнено(ДействияВФорме.Роли) И НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей(); Элементы.УстановитьРолиНепосредственно.Доступность = ДействияВФорме.Роли = "Редактирование"; - ТолькоПросмотр = ТолькоПросмотр ИЛИ - ДействияВФорме.Роли <> "Редактирование" И - НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" ИЛИ - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" ) И - ДействияВФорме.СвойстваЭлемента <> "Редактирование"; + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + Элементы.Недействителен.ТолькоПросмотр = Истина; + КонецЕсли; - Если НЕ ПользователиСерверПовтИсп.АутентификацияOpenIDНастраивается() Тогда + Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" Тогда + Элементы.ПользовательИнфБазыАутентификацияOpenID.Доступность = Ложь; + Элементы.ПользовательИнфБазыАутентификацияСтандартная.Доступность = Ложь; + КонецЕсли; + + ТолькоПросмотр + = ТолькоПросмотр + ИЛИ ДействияВФорме.Роли <> "Редактирование" + И НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" + ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих") + И ДействияВФорме.СвойстваЭлемента <> "Редактирование"; + + Если НЕ ПользователиСлужебныйПовтИсп.АутентификацияOpenIDНастраивается() Тогда Элементы.ПользовательИнфБазыАутентификацияOpenID.Видимость = Ложь; Элементы.ПользовательИнфБазыАутентификацияСтандартная.Видимость = Ложь; Элементы.СвойстваПараметрыАутентификации1СПредприятия.Отображение = ОтображениеОбычнойГруппы.Нет; @@ -107,10 +130,17 @@ ОчиститьСообщения(); - Если ДействияВФорме.Роли = "Редактирование" И Объект.УстановитьРолиНепосредственно И ПользовательИнфБазыРоли.Количество() = 0 Тогда + Если ДействияВФорме.Роли = "Редактирование" + И Объект.УстановитьРолиНепосредственно + И ПользовательИнфБазыРоли.Количество() = 0 Тогда + + Ответ = Вопрос( + НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"), + РежимДиалогаВопрос.ДаНет, + , + , + НСтр("ru = 'Запись пользователя информационной базы'")); - Ответ = Вопрос(НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"), - РежимДиалогаВопрос.ДаНет, , , НСтр("ru = 'Запись пользователя информационной базы'")); Если Ответ = КодВозвратаДиалога.Нет Тогда Отказ = Истина; КонецЕсли; @@ -121,60 +151,54 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда - ЗаполнитьЗначенияСвойств(ТекущийОбъект, ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ТекущийОбъект.Ссылка, "Наименование, ПометкаУдаления")); - КонецЕсли; - - Если ВнешниеПользователи.ОбъектАвторизацииИспользуется(Объект.ОбъектАвторизации, Объект.Ссылка) Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Объект информационной базы уже используется для другого внешнего пользователя.'"), , - "Объект.ОбъектАвторизации", , - Отказ); - Возврат; - КонецЕсли; - - ТекущийОбъект.ДополнительныеСвойства.Вставить("ГруппаНовогоВнешнегоПользователя", ГруппаНовогоВнешнегоПользователя); - - Если ДоступКИнформационнойБазеРазрешен Тогда - - ЗаписатьПользователяИБ(ТекущийОбъект, Отказ); - Если НЕ Отказ Тогда - Если ТекущийОбъект.ИдентификаторПользователяИБ <> СтарыйИдентификаторПользователяИБ Тогда - ПараметрыЗаписи.Вставить("ДобавленПользовательИБ", ТекущийОбъект.ИдентификаторПользователяИБ); - Иначе - ПараметрыЗаписи.Вставить("ИзмененПользовательИБ", ТекущийОбъект.ИдентификаторПользователяИБ); - КонецЕсли - КонецЕсли; - - ИначеЕсли НЕ ЕстьСвязьСНесуществующимПользователемИБ ИЛИ - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда - - ТекущийОбъект.ИдентификаторПользователяИБ = Неопределено; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); + ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеКопирования", ЗначениеКопирования); + // Автообновление наименования внешнего пользователя. ТекущееПредставлениеОбъектаАвторизации = Строка(ТекущийОбъект.ОбъектАвторизации); + Объект.Наименование = ТекущееПредставлениеОбъектаАвторизации; ТекущийОбъект.Наименование = ТекущееПредставлениеОбъектаАвторизации; -КонецПроцедуры - -&НаСервере -Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + // Восстановление действий в форме, если они изменены на клиенте. + ОпределитьДействияВФорме(); - Если НЕ ДоступКИнформационнойБазеРазрешен И ПользовательИБСуществует Тогда - УдалитьПользователяИБ(Отказ); - Если НЕ Отказ Тогда - ПараметрыЗаписи.Вставить("УдаленПользовательИБ", СтарыйИдентификаторПользователяИБ); + Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" + ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда + + ОписаниеПользователяИБ = ОписаниеПользователяИБ(); + ОписаниеПользователяИБ.Удалить("ПодтверждениеПароля"); + + Если ДоступКИнформационнойБазеРазрешен Тогда + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + Иначе + ОписаниеПользователяИБ.Вставить("Действие", "Удалить"); КонецЕсли; + + ТекущийОбъект.ДополнительныеСвойства.Вставить( + "ОписаниеПользователяИБ", ОписаниеПользователяИБ); КонецЕсли; + Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда + + ЗаполнитьЗначенияСвойств( + ТекущийОбъект, + ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + ТекущийОбъект.Ссылка, + "ПометкаУдаления")); + КонецЕсли; + + ТекущийОбъект.ДополнительныеСвойства.Вставить( + "ГруппаНовогоВнешнегоПользователя", ГруппаНовогоВнешнегоПользователя); + + УстановитьПривилегированныйРежим(Истина); + КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + ПараметрыЗаписи.Вставить( + ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); + ПрочитатьПользователяИБ(); ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи); @@ -196,53 +220,50 @@ Оповестить("УдаленПользовательИБ", ПараметрыЗаписи.УдаленПользовательИБ, ЭтаФорма); ИначеЕсли ПараметрыЗаписи.Свойство("ОчищенаСвязьСНесуществущимПользователемИБ") Тогда - Оповестить("ОчищенаСвязьСНесуществущимПользователемИБ", ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ, ЭтаФорма); + + Оповестить( + "ОчищенаСвязьСНесуществущимПользователемИБ", + ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ, ЭтаФорма); КонецЕсли; Если ЗначениеЗаполнено(ГруппаНовогоВнешнегоПользователя) Тогда ОповеститьОбИзменении(ГруппаНовогоВнешнегоПользователя); - Оповестить("Запись_ГруппыВнешнихПользователей", Новый Структура, ГруппаНовогоВнешнегоПользователя); + + Оповестить( + "Запись_ГруппыВнешнихПользователей", + Новый Структура, + ГруппаНовогоВнешнегоПользователя); + ГруппаНовогоВнешнегоПользователя = Неопределено; КонецЕсли; УстановитьДоступностьСвойств(); - РазвернутьПодсистемыРолей(); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + ТекстОшибки = ""; + Если ПользователиСлужебный.ОбъектАвторизацииИспользуется( + Объект.ОбъектАвторизации, Объект.Ссылка, , , ТекстОшибки) Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + ТекстОшибки, , "Объект.ОбъектАвторизации", , Отказ); + КонецЕсли; + Если ДоступКИнформационнойБазеРазрешен Тогда - Если НЕ Отказ И ПустаяСтрока(ПользовательИнфБазыИмя) Тогда + ПользователиСлужебный.ПроверитьОписаниеПользователяИБ( + ОписаниеПользователяИБ(), Отказ); + + ТекстСообщения = ""; + Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора( , ТекстСообщения) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не заполнено имя пользователя информационной базы.'"), - , - "ПользовательИнфБазыИмя", - , - Отказ); - КонецЕсли; - - Если НЕ Отказ И ПользовательИнфБазыПароль <> Неопределено И Пароль <> ПодтверждениеПароля Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"), - , - "Пароль", - , - Отказ); - КонецЕсли; - - Если ТребуетсяСоздатьПервогоАдминистратора() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Первый пользователь информационной базы должен иметь полные права. - |Внешний пользователь не может быть полноправным. - |Сначала создайте обычного пользователя-администратора.'"), - , - "ДоступКИнформационнойБазеРазрешен", - , - Отказ); + ТекстСообщения, , "ДоступКИнформационнойБазеРазрешен", , Отказ); КонецЕсли; КонецЕсли; @@ -251,16 +272,7 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда - ПоказатьПодсистемыРолей = Ложь; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь; - Иначе - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - КонецЕсли; - - СкрытьРольПолныеПрава = Истина; - ОбновитьДеревоРолей(); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки); КонецПроцедуры @@ -277,8 +289,12 @@ &НаКлиенте Процедура ДоступКИнформационнойБазеРазрешенПриИзменении(Элемент) - Если НЕ ПользовательИБСуществует И ДоступКИнформационнойБазеРазрешен Тогда - ПользовательИнфБазыИмя = ПолучитьКраткоеИмяПользователяИБ(ТекущееПредставлениеОбъектаАвторизации); + Если НЕ ПользовательИБСуществует + И ДоступКИнформационнойБазеРазрешен Тогда + + ПользовательИнфБазыИмя = + ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( + ТекущееПредставлениеОбъектаАвторизации); КонецЕсли; УстановитьДоступностьСвойств(); @@ -303,8 +319,8 @@ Процедура УстановитьРолиНепосредственноПриИзменении(Элемент) Если НЕ Объект.УстановитьРолиНепосредственно Тогда - ПрочитатьПользователяИБ(, Истина); - РазвернутьПодсистемыРолей(); + ПрочитатьРолиПользователяИБ(); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецЕсли; УстановитьДоступностьСвойств(); @@ -321,7 +337,7 @@ Процедура РолиПометкаПриИзменении(Элемент) Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей"); КонецЕсли; КонецПроцедуры @@ -335,78 +351,67 @@ &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) - ПоказатьТолькоВыбранныеРоли = НЕ ПоказатьТолькоВыбранныеРоли; - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); + ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура ПоказатьПодсистемыРолей(Команда) +Процедура ГруппировкаРолейПоПодсистемам(Команда) - ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); + ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура УстановитьФлажки(Команда) +Процедура ВключитьРоли(Команда) - ОбновитьСоставРолей(Неопределено, Истина); - Если ПоказатьТолькоВыбранныеРоли Тогда - РазвернутьПодсистемыРолей(); - КонецЕсли; + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе"); + + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма, Ложь); КонецПроцедуры &НаКлиенте -Процедура СнятьФлажки(Команда) +Процедура ИсключитьРоли(Команда) - ОбновитьСоставРолей(Неопределено, Ложь); + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВсе"); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаСервере -Функция ТребуетсяСоздатьПервогоАдминистратора() - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0; - -КонецФункции - &НаСервере Процедура ОпределитьДействияВФорме() ДействияВФорме = Новый Структура; - ДействияВФорме.Вставить("Роли", ""); // "", "Просмотр", "Редактирование" - ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих" - ДействияВФорме.Вставить("СвойстваЭлемента", ""); // "", "Просмотр", "Редактирование" - Если Пользователи.ЭтоПолноправныйПользователь() ИЛИ - ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда - // Администратор + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("Роли", ""); + + // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих". + ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); + + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("СвойстваЭлемента", ""); + + Если Пользователи.ЭтоПолноправныйПользователь() + ИЛИ ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда + // Администратор. ДействияВФорме.Роли = "Редактирование"; ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; ДействияВФорме.СвойстваЭлемента = "Редактирование"; ИначеЕсли РольДоступна("ДобавлениеИзменениеВнешнихПользователей") Тогда - // Менеджер внешних пользователей + // Менеджер внешних пользователей. ДействияВФорме.Роли = ""; ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; ДействияВФорме.СвойстваЭлемента = "Просмотр"; - ИначеЕсли ЗначениеЗаполнено(ВнешниеПользователи.ТекущийВнешнийПользователь()) И - Объект.Ссылка = ВнешниеПользователи.ТекущийВнешнийПользователь() Тогда - // Свои свойства + ИначеЕсли Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда + // Свои свойства. ДействияВФорме.Роли = ""; ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих"; ДействияВФорме.СвойстваЭлемента = "Просмотр"; @@ -417,235 +422,197 @@ ДействияВФорме.СвойстваЭлемента = "Просмотр"; КонецЕсли; - Если НЕ ЗначениеЗаполнено(Объект.Ссылка) И НЕ ЗначениеЗаполнено(Объект.ОбъектАвторизации) Тогда + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) + И НЕ ЗначениеЗаполнено(Объект.ОбъектАвторизации) Тогда + ДействияВФорме.СвойстваЭлемента = "Редактирование"; КонецЕсли; ПользователиПереопределяемый.ИзменитьДействияВФорме(Объект.Ссылка, ДействияВФорме); - // Проверка имен действий в форме + // Проверка имен действий в форме. Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда ДействияВФорме.Роли = ""; + ИначеЕсли ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда ДействияВФорме.Роли = "Просмотр"; КонецЕсли; - Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,", ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда + + Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,", + ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда + ДействияВФорме.СвойстваПользователяИБ = ""; КонецЕсли; + Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда ДействияВФорме.СвойстваЭлемента = ""; КонецЕсли; КонецПроцедуры -&НаКлиентеНаСервереБезКонтекста -Процедура ОбъектАвторизацииПриИзмененииНаКлиентеНаСервере(Контекст, Объект) +&НаСервере +Функция ОписаниеПользователяИБ() - Если Объект.ОбъектАвторизации = Неопределено Тогда - Объект.ОбъектАвторизации = Контекст.ТипОбъектовАвторизации; + ПользовательИнфБазыПолноеИмя = Объект.Наименование; + + Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда + Результат = Пользователи.НовоеОписаниеПользователяИБ(); + Пользователи.СкопироватьСвойстваПользователяИБ( + Результат, + ЭтаФорма, + , + "УникальныйИдентификатор, + |Роли", + "ПользовательИнфБазы"); + + Иначе + // РедактированиеСвоих. + Результат = Новый Структура; + Результат.Вставить("Пароль", ПользовательИнфБазыПароль); + Результат.Вставить("Язык", ПользовательИнфБазыЯзык); + КонецЕсли; + Результат.Вставить("ПодтверждениеПароля", ПодтверждениеПароля); + + Если ДействияВФорме.Роли = "Редактирование" + И Объект.УстановитьРолиНепосредственно Тогда + + ТекущиеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль"); + Результат.Вставить("Роли", ТекущиеРоли); КонецЕсли; - Если Контекст.ТекущееПредставлениеОбъектаАвторизации <> Строка(Объект.ОбъектАвторизации) Тогда + УровеньДоступа = ПользователиСлужебный.УровеньДоступаКСвойствамПользователяИБ(Истина); + + Если УровеньДоступа = "ПолныйДоступ" + ИЛИ УровеньДоступа = "УправлениеСписком" Тогда - Контекст.ТекущееПредставлениеОбъектаАвторизации = Строка(Объект.ОбъектАвторизации); - - Если НЕ Контекст.ПользовательИБСуществует И Контекст.ДоступКИнформационнойБазеРазрешен Тогда - Контекст.ПользовательИнфБазыИмя = ПолучитьКраткоеИмяПользователяИБ(Контекст.ТекущееПредставлениеОбъектаАвторизации); + Если НЕ ПользователиСлужебныйПовтИсп.АутентификацияOpenIDНастраивается() Тогда + Результат.Вставить("АутентификацияСтандартная", Истина); КонецЕсли; + Результат.Вставить("ПоказыватьВСпискеВыбора", Ложь); + Результат.Вставить("РежимЗапуска", "Авто"); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбъектАвторизацииПриИзмененииНаКлиентеНаСервере(Форма, Объект) + + Если Объект.ОбъектАвторизации = Неопределено Тогда + Объект.ОбъектАвторизации = Форма.ТипОбъектовАвторизации; + КонецЕсли; + + Если Форма.ТекущееПредставлениеОбъектаАвторизации <> Строка(Объект.ОбъектАвторизации) Тогда + + Форма.ТекущееПредставлениеОбъектаАвторизации = Строка(Объект.ОбъектАвторизации); + + Если НЕ Форма.ПользовательИБСуществует + И Форма.ДоступКИнформационнойБазеРазрешен Тогда + + Форма.ПользовательИнфБазыИмя = + ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( + Форма.ТекущееПредставлениеОбъектаАвторизации); + КонецЕсли; КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Чтение, запись, удаление, расчет краткого имени пользователя ИБ, проверка несоответствия +// Обработка пользователя ИБ. &НаСервере -Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь, ТолькоРоли = Ложь) +Процедура ПрочитатьРолиПользователяИБ() + + СвойстваПользователяИБ = Неопределено; + + Пользователи.ПрочитатьПользователяИБ( + Объект.ИдентификаторПользователяИБ, СвойстваПользователяИБ); + + ОбработатьИнтерфейсРолей("ЗаполнитьРоли", СвойстваПользователяИБ.Роли); + +КонецПроцедуры + +&НаСервере +Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь) УстановитьПривилегированныйРежим(Истина); - ПрочитанныеРоли = Неопределено; - - Если ТолькоРоли Тогда - Пользователи.ПрочитатьПользователяИБ(Объект.ИдентификаторПользователяИБ, , ПрочитанныеРоли); - ЗаполнитьРоли(ПрочитанныеРоли); - Возврат; - КонецЕсли; - Пароль = ""; ПодтверждениеПароля = ""; ПрочитанныеСвойства = Неопределено; - СтарыйИдентификаторПользователяИБ = Неопределено; + ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); ПользовательИБСуществует = Ложь; ДоступКИнформационнойБазеРазрешен = Ложь; - // Заполнение начальных значений свойств пользователяИБ у пользователя. - Пользователи.ПрочитатьПользователяИБ(Неопределено, ПрочитанныеСвойства, ПрочитанныеРоли); - ЗаполнитьЗначенияСвойств(ЭтаФорма, ПрочитанныеСвойства); - ПользовательИнфБазыАутентификацияСтандартная = Истина; + // Заполнение начальных значений свойств пользователяИБ. + ОписаниеПользователяИБ.Роли = Новый Массив; + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; Если ПриКопированииЭлемента Тогда - Если Пользователи.ПрочитатьПользователяИБ(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ, ПрочитанныеСвойства, ПрочитанныеРоли) Тогда - // Т.к. у скопированного пользователя есть связь с пользователемИБ, - // то устанавливается будущая связь и у нового пользователя. + Если Пользователи.ПрочитатьПользователяИБ( + Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ, + ПрочитанныеСвойства) Тогда + + // Установка связи пользователем ИБ. ДоступКИнформационнойБазеРазрешен = Истина; - // Т.к. пользовательИБ скопированного пользователя прочитан, - // то копируются свойства и роли пользователяИБ. - ЗаполнитьЗначенияСвойств(ЭтаФорма, - ПрочитанныеСвойства, - "ПользовательИнфБазыАутентификацияOpenID, - |ПользовательИнфБазыАутентификацияСтандартная, - |ПользовательИнфБазыЗапрещеноИзменятьПароль"); + + // Копирование свойств и ролей пользователяИБ. + ЗаполнитьЗначенияСвойств( + ОписаниеПользователяИБ, + ПрочитанныеСвойства, + "АутентификацияOpenID, + |АутентификацияСтандартная, + |ЗапрещеноИзменятьПароль, + |Язык, + |Роли"); КонецЕсли; Объект.ИдентификаторПользователяИБ = Неопределено; Иначе - Если Пользователи.ПрочитатьПользователяИБ(Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства, ПрочитанныеРоли) Тогда - + Если Пользователи.ПрочитатьПользователяИБ( + Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства) Тогда + ПользовательИБСуществует = Истина; ДоступКИнформационнойБазеРазрешен = Истина; - СтарыйИдентификаторПользователяИБ = Объект.ИдентификаторПользователяИБ; - ЗаполнитьЗначенияСвойств(ЭтаФорма, - ПрочитанныеСвойства, - "ПользовательИнфБазыИмя, - |ПользовательИнфБазыАутентификацияOpenID, - |ПользовательИнфБазыАутентификацияСтандартная, - |ПользовательИнфБазыЗапрещеноИзменятьПароль"); + ЗаполнитьЗначенияСвойств( + ОписаниеПользователяИБ, + ПрочитанныеСвойства, + "Имя, + |АутентификацияOpenID, + |АутентификацияСтандартная, + |ЗапрещеноИзменятьПароль, + |Язык, + |Роли"); - Если ПрочитанныеСвойства.ПользовательИнфБазыПарольУстановлен Тогда + Если ПрочитанныеСвойства.ПарольУстановлен Тогда Пароль = "**********"; ПодтверждениеПароля = "**********"; КонецЕсли; КонецЕсли; КонецЕсли; - ЗаполнитьПредставлениеЯзыка(ПрочитанныеСвойства.ПользовательИнфБазыЯзык); - ЗаполнитьРоли(ПрочитанныеРоли); + Пользователи.СкопироватьСвойстваПользователяИБ( + ЭтаФорма, + ОписаниеПользователяИБ, + , + "УникальныйИдентификатор, + |Роли", + "ПользовательИнфБазы"); + + ОбработатьИнтерфейсРолей("ЗаполнитьРоли", ОписаниеПользователяИБ.Роли); КонецПроцедуры -&НаСервере -Процедура ЗаписатьПользователяИБ(ТекущийОбъект, Отказ) - - // Восстановление действий в форме, если они изменены на клиенте - ОпределитьДействияВФорме(); - - Если НЕ (ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" ИЛИ - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" )Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - НачальныеСвойства = Неопределено; - НовыеСвойства = Неопределено; - НовыеРоли = Неопределено; - - // Чтение старых свойств/заполнение начальных свойств пользователяИБ у пользователя. - Пользователи.ПрочитатьПользователяИБ(ТекущийОбъект.ИдентификаторПользователяИБ, НовыеСвойства); - НовыеСвойства.ПользовательИнфБазыПолноеИмя = Строка(ТекущийОбъект.ОбъектАвторизации); - - Пользователи.ПрочитатьПользователяИБ(Неопределено, НачальныеСвойства); - ЗаполнитьЗначенияСвойств(НовыеСвойства, - НачальныеСвойства, - "ПользовательИнфБазыПоказыватьВСпискеВыбора, - |ПользовательИнфБазыАутентификацияOpenID, - |ПользовательИнфБазыАутентификацияСтандартная, - |ПользовательИнфБазыАутентификацияОС, - |ПользовательИнфБазыОсновнойИнтерфейс, - |ПользовательИнфБазыРежимЗапуска"); - - Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда - ЗаполнитьЗначенияСвойств(НовыеСвойства, - ЭтаФорма, - "ПользовательИнфБазыИмя, - |ПользовательИнфБазыАутентификацияOpenID, - |ПользовательИнфБазыАутентификацияСтандартная, - |ПользовательИнфБазыПароль, - |ПользовательИнфБазыЗапрещеноИзменятьПароль"); - Иначе - ЗаполнитьЗначенияСвойств(НовыеСвойства, - ЭтаФорма, - "ПользовательИнфБазыИмя, - |ПользовательИнфБазыПароль"); - КонецЕсли; - - Если НЕ ПользователиСерверПовтИсп.АутентификацияOpenIDНастраивается() Тогда - НовыеСвойства.ПользовательИнфБазыАутентификацияСтандартная = Истина; - КонецЕсли; - - НовыеСвойства.ПользовательИнфБазыЯзык = ПолучитьВыбранныйЯзык(); - - Если ДействияВФорме.Роли = "Редактирование" И Объект.УстановитьРолиНепосредственно Тогда - НовыеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль"); - КонецЕсли; - - // Попытка записи пользователя ИБ - ОписаниеОшибки = ""; - Если Пользователи.ЗаписатьПользователяИБ(ТекущийОбъект.ИдентификаторПользователяИБ, НовыеСвойства, НовыеРоли, НЕ ПользовательИБСуществует, ОписаниеОшибки) Тогда - Если НЕ ПользовательИБСуществует Тогда - ТекущийОбъект.ИдентификаторПользователяИБ = НовыеСвойства.ПользовательИнфБазыУникальныйИдентификатор; - ПользовательИБСуществует = Истина; - КонецЕсли; - Иначе - Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки); - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Функция УдалитьПользователяИБ(Отказ) - - УстановитьПривилегированныйРежим(Истина); - - ОписаниеОшибки = ""; - Если НЕ Пользователи.УдалитьПользователяИБ(СтарыйИдентификаторПользователяИБ, ОписаниеОшибки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки, , , , Отказ); - КонецЕсли; - -КонецФункции - -&НаКлиентеНаСервереБезКонтекста -Функция ПолучитьКраткоеИмяПользователяИБ(Знач ПолноеИмя) - - КраткоеИмя = ""; - ПервыйПроходЦикла = Истина; - - Пока Истина Цикл - Если НЕ ПервыйПроходЦикла Тогда - КраткоеИмя = КраткоеИмя + ВРег(Лев(ПолноеИмя, 1)); - КонецЕсли; - ПозицияПробела = Найти(ПолноеИмя, " "); - Если ПозицияПробела = 0 Тогда - Если ПервыйПроходЦикла Тогда - КраткоеИмя = ПолноеИмя; - КонецЕсли; - Прервать; - КонецЕсли; - - Если ПервыйПроходЦикла Тогда - КраткоеИмя = Лев(ПолноеИмя, ПозицияПробела - 1); - КонецЕсли; - - ПолноеИмя = Прав(ПолноеИмя, СтрДлина(ПолноеИмя) - ПозицияПробела); - - ПервыйПроходЦикла = Ложь; - КонецЦикла; - - КраткоеИмя = СтрЗаменить(КраткоеИмя, " ", ""); - - Возврат КраткоеИмя; - -КонецФункции - &НаСервере Процедура ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи = Неопределено) - //** Определение связи с несуществующим пользователем ИБ - ЕстьНоваяСвязьСНесуществующимПользователемИБ = НЕ ПользовательИБСуществует И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ); + // Определение связи с несуществующим пользователем ИБ. + ЕстьНоваяСвязьСНесуществующимПользователемИБ = + НЕ ПользовательИБСуществует И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ); + Если ПараметрыЗаписи <> Неопределено И ЕстьСвязьСНесуществующимПользователемИБ И НЕ ЕстьНоваяСвязьСНесуществующимПользователемИБ Тогда @@ -655,7 +622,7 @@ ЕстьСвязьСНесуществующимПользователемИБ = ЕстьНоваяСвязьСНесуществующимПользователемИБ; Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" Тогда - // Связь не может быть изменена + // Связь не может быть изменена. Элементы.СвязьОбработкаНесоответствия.Видимость = Ложь; Иначе Элементы.СвязьОбработкаНесоответствия.Видимость = ЕстьСвязьСНесуществующимПользователемИБ; @@ -666,67 +633,38 @@ //////////////////////////////////////////////////////////////////////////////// // Начальное заполнение, проверка заполнения, доступность свойств -&НаСервере -Процедура ЗаполнитьПредставлениеЯзыка(Язык) - - ПредставлениеЯзыка = ""; - - Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл - - Если МетаданныеЯзыка.Имя = Язык Тогда - ПредставлениеЯзыка = МетаданныеЯзыка.Синоним; - Прервать; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция ПолучитьВыбранныйЯзык() - - Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл - - Если МетаданныеЯзыка.Синоним = ПредставлениеЯзыка Тогда - Возврат МетаданныеЯзыка.Имя; - КонецЕсли; - КонецЦикла; - - Возврат ""; - -КонецФункции - -&НаСервере -Процедура ЗаполнитьРоли(ПрочитанныеРоли) - - ПользовательИнфБазыРоли.Очистить(); - - Для каждого Роль Из ПрочитанныеРоли Цикл - ПользовательИнфБазыРоли.Добавить().Роль = Роль; - КонецЦикла; - - Если ПоказатьТолькоВыбранныеРоли Тогда - ОбновитьДеревоРолей(); - Иначе - ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы()); - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура УстановитьДоступностьСвойств() - Элементы.ОбъектАвторизации.ТолькоПросмотр = ДействияВФорме.СвойстваЭлемента <> "Редактирование" ИЛИ - ОбъектАвторизацииЗаданПриОткрытии ИЛИ - ЗначениеЗаполнено(Объект.Ссылка) И - ЗначениеЗаполнено(Объект.ОбъектАвторизации); - Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.СвойстваПользователяИБ.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; - Элементы.Пароль.ТолькоПросмотр = ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь; - Элементы.ПодтверждениеПароля.ТолькоПросмотр = ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь; - Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + Элементы.ОбъектАвторизации.ТолькоПросмотр + = ДействияВФорме.СвойстваЭлемента <> "Редактирование" + ИЛИ ОбъектАвторизацииЗаданПриОткрытии + ИЛИ ЗначениеЗаполнено(Объект.Ссылка) + И ЗначениеЗаполнено(Объект.ОбъектАвторизации); - УстановитьТолькоПросмотрРолей(ЗапретРедактированияРолей ИЛИ ДействияВФорме.Роли <> "Редактирование" ИЛИ НЕ Объект.УстановитьРолиНепосредственно); + Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.СвойстваПользователяИБ.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; + + Элементы.Пароль.ТолькоПросмотр = + ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь; + + Элементы.ПодтверждениеПароля.ТолькоПросмотр = + ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ АвторизованПолноправныйПользователь; + + Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + ОбработатьИнтерфейсРолей( + "УстановитьТолькоПросмотрРолей", + ЗапретРедактированияРолей + ИЛИ ДействияВФорме.Роли <> "Редактирование" + ИЛИ НЕ Объект.УстановитьРолиНепосредственно); Элементы.ОсновныеСвойства.Доступность = ДоступКИнформационнойБазеРазрешен; Элементы.РедактированиеИлиПросмотрРолей.Доступность = ДоступКИнформационнойБазеРазрешен; @@ -740,275 +678,30 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей - -&НаСервере -Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) - - Если ТаблицаЗначенийДляЧтения Тогда - Возврат РеквизитФормыВЗначение("ПользовательИнфБазыРоли"); - КонецЕсли; - - Возврат ПользовательИнфБазыРоли; - -КонецФункции - -&НаКлиенте -Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено, Знач РазрешитьПросмотрТолькоВыбранных = Ложь) - - Если ТолькоПросмотрРолей <> Неопределено Тогда - Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей; - Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - КонецЕсли; - - Если РазрешитьПросмотрТолькоВыбранных Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность = Ложь; - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура РазвернутьПодсистемыРолей(Коллекция = Неопределено); - - Если Коллекция = Неопределено Тогда - Коллекция = Роли.ПолучитьЭлементы(); - КонецЕсли; - - // Развернуть все - Для каждого Строка ИЗ Коллекция Цикл - Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор()); - Если НЕ Строка.ЭтоРоль Тогда - РазвернутьПодсистемыРолей(Строка.ПолучитьЭлементы()); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьДеревоРолей() - - Если НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина; - ПоказатьТолькоВыбранныеРоли = Истина; - КонецЕсли; - - // Запоминание текущей строки - ТекущаяПодсистема = ""; - ТекущаяРоль = ""; - // - Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда - ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока); - Если ТекущиеДанные.ЭтоРоль Тогда - ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя); - ТекущаяРоль = ТекущиеДанные.Имя; - Иначе - ТекущаяПодсистема = ТекущиеДанные.Имя; - ТекущаяРоль = ""; - КонецЕсли; - КонецЕсли; - - ТипПользователя = Перечисления.ТипыПользователей.ВнешнийПользователь; - ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей, ТипПользователя).Скопировать(); - ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); - ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); - ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); - - ЗначениеВРеквизитФормы(ДеревоРолей, "Роли"); - - Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево); - - // Восстановление текущей строки - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеПодсистемы = НайденныеСтроки[0]; - ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы); - СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы); - Если ЗначениеЗаполнено(ТекущаяРоль) Тогда - НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль)); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор(); - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли); - СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли); - Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); - - Если Строка.ЭтоРоль Тогда - Если СкрытьРольПолныеПрава И - (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 6; - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - КонецЕсли; - Иначе - Если Строка.Строки.Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 5; - Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений) - - Если СтрокаДереваЗначений.Родитель = Неопределено Тогда - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы(); - Иначе - ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель); - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы(); - КонецЕсли; - - Возврат ДанныеФормыКоллекцияЭлементовДерева; - -КонецФункции - - -&НаСервере -Процедура ОбновитьСоставРолей(ИдентификаторСтроки, Добавить); - - Если ИдентификаторСтроки = Неопределено Тогда - // Обработка всех - КоллекцияРолей = КоллекцияРолей(); - КоллекцияРолей.Очистить(); - Если Добавить Тогда - ВсеРоли = ПользователиСерверПовтИсп.ВсеРоли(); - Для каждого ОписаниеРоли Из ВсеРоли Цикл - Если ОписаниеРоли.Имя <> "ПолныеПрава" И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда - КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ПоказатьТолькоВыбранныеРоли Тогда - Если КоллекцияРолей.Количество() > 0 Тогда - ОбновитьДеревоРолей(); - Иначе - Роли.ПолучитьЭлементы().Очистить(); - КонецЕсли; - // Возврат - Возврат; - // Возврат - КонецЕсли; - Иначе - ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ТекущиеДанные.ЭтоРоль Тогда - ДобавитьУдалитьРоль(ТекущиеДанные.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(ТекущиеДанные.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЕсли; - - ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы()); - - Модифицированность = Истина; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьУдалитьРоль(Знач Роль, Знач Добавить) - - НайденныеРоли = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Роль)); - - Если Добавить Тогда - Если НайденныеРоли.Количество() = 0 Тогда - КоллекцияРолей().Добавить().Роль = Роль; - КонецЕсли; - Иначе - Если НайденныеРоли.Количество() > 0 Тогда - КоллекцияРолей().Удалить(НайденныеРоли[0]); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьУдалитьРолиПодсистемы(Знач Коллекция, Знач Добавить) - - Для каждого Строка Из Коллекция Цикл - Если Строка.ЭтоРоль Тогда - ДобавитьУдалитьРоль(Строка.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(Строка.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьПометкуВыбранныхРолей(Знач Коллекция) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - Если Строка.ЭтоРоль Тогда - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - Иначе - ОбновитьПометкуВыбранныхРолей(Строка.ПолучитьЭлементы()); - Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.Пометка = Истина; - Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл - Если НЕ Элемент.Пометка Тогда - Строка.Пометка = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; - -КонецПроцедуры - &НаКлиенте Процедура НедействителенПриИзменении(Элемент) Если Объект.Недействителен Тогда ДоступКИнформационнойБазеРазрешен = Ложь; - КонецЕсли; + КонецЕсли; УстановитьДоступностьСвойств(); КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей + +&НаСервере +Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) + + ПараметрыДействия = Новый Структура; + ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); + ПараметрыДействия.Вставить("Форма", ЭтаФорма); + ПараметрыДействия.Вставить("КоллекцияРолей", ПользовательИнфБазыРоли); + ПараметрыДействия.Вставить("ТипПользователя", Перечисления.ТипыПользователей.ВнешнийПользователь); + ПараметрыДействия.Вставить("СкрытьРольПолныеПрава", Истина); + + ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html index 958331596..a19da741f 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html +++ b/SSL/src/Catalogs/ВнешниеПользователи/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>В этом списке ведется учет пользователей, которые работают с программой "извне". Их доступ, как правило, сильно ограничен, они не принимают активного участия в процессах учета, работают обособленно, не взаимодействуют между собой.</p> <p>Основной способ создания и редактирования внешних пользователей через команду <strong>Внешний доступ</strong>, которая размещается в командной панели формы объектов, например, в карточке контрагента, физического лица. При выполнении команды сразу создается внешний пользователь, связанный с объектом, или открывается существующий внешний пользователь.</p> <p>В случае большого количества внешних пользователей список может быть сгруппирован, например, по видам отношений с ними: партнеры, контрагенты и т.д. Для того чтобы увидеть всех внешних пользователей, включенных в дочерние группы с учетом иерархии, необходимо установить флажок <strong>Показывать внешних пользователей дочерних групп</strong> в нижней части списка. Для добавления новых групп внешних пользователей воспользуйтесь командами в левой части списка. Для добавления в группу большого числа внешних пользователей можно открыть форму группы и воспользоваться командой <strong>Подобрать</strong>. Один и тот же внешний пользователь может одновременно входить в разные группы внешних пользователей.</p> diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl index 325d44621..c34684cd2 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -18,6 +20,7 @@ Если Не Параметры.Свойство("Отбор") Тогда Параметры.Вставить("Отбор", Новый Структура("Недействителен", Ложь)); ПараметрИзменен = Истина; + ИначеЕсли Не Параметры.Отбор.Свойство("Недействителен") Тогда Параметры.Отбор.Вставить("Недействителен", Ложь); ПараметрИзменен = Истина; @@ -28,6 +31,37 @@ ВыбраннаяФорма = "ФормаСписка"; КонецЕсли; + ИначеЕсли ВидФормы = "ФормаОбъекта" И Параметры.Свойство("ОбъектАвторизации") Тогда + + СтандартнаяОбработка = Ложь; + ВыбраннаяФорма = "ФормаЭлемента"; + + НайденныйВнешнийПользователь = Неопределено; + ЕстьПравоДобавленияВнешнегоПользователя = Ложь; + + ОбъектАвторизацииИспользуется = ПользователиСлужебный.ОбъектАвторизацииИспользуется( + Параметры.ОбъектАвторизации, + , + НайденныйВнешнийПользователь, + ЕстьПравоДобавленияВнешнегоПользователя); + + Если ОбъектАвторизацииИспользуется Тогда + Параметры.Вставить("Ключ", НайденныйВнешнийПользователь); + + ИначеЕсли ЕстьПравоДобавленияВнешнегоПользователя Тогда + + Параметры.Вставить( + "ОбъектАвторизацииНовогоВнешнегоПользователя", Параметры.ОбъектАвторизации); + Иначе + ОписаниеОшибкиКакПредупреждения = + НСтр("ru = 'Доступ к информационной базе запрещен и не предоставлялся.'"); + + ВызватьИсключение ОписаниеОшибкиКакПредупреждения; + КонецЕсли; + + Параметры.Удалить("ОбъектАвторизации"); КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl index 6e0729be8..ce985518f 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВнешниеПользователи/ObjectModule.bsl @@ -1,3 +1,16 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. + // Используются в обработчике события ПриЗаписи. + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Программный интерфейс объекта реализован через ДополнительныеСвойства: +// +// ОписаниеПользователяИБ - Структура, как и в модуле объекта справочника Пользователи. + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -7,28 +20,32 @@ Возврат; КонецЕсли; - Если ИдентификаторПользователяИБ <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") И - Пользователи.ПользовательПоИдентификаторуСуществует(ИдентификаторПользователяИБ, Ссылка) Тогда - ВызватьИсключение НСтр("ru = 'Один пользователь информационной базы - |может быть связан только с одним пользователем или внешним пользователем.'"); - КонецЕсли; - Если НЕ ЗначениеЗаполнено(ОбъектАвторизации) Тогда - ВызватьИсключение НСтр("ru = 'Для внешнего пользователя не установлен объект авторизации.'"); + ВызватьИсключение НСтр("ru = 'Для внешнего пользователя не установлен + |объект информационной базы.'"); Иначе - Если ВнешниеПользователи.ОбъектАвторизацииИспользуется(ОбъектАвторизации, Ссылка) Тогда - ВызватьИсключение НСтр("ru = 'Объект авторизации уже используется для другого внешнего пользователя.'"); + ТекстОшибки = ""; + Если ПользователиСлужебный.ОбъектАвторизацииИспользуется( + ОбъектАвторизации, Ссылка, , , ТекстОшибки) Тогда + + ВызватьИсключение ТекстОшибки; КонецЕсли; КонецЕсли; // Проверка, что объект авторизации не изменен. Если НЕ ЭтоНовый() Тогда СтарыйОбъектАвторизации = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ОбъектАвторизации"); - Если ЗначениеЗаполнено(СтарыйОбъектАвторизации) И СтарыйОбъектАвторизации <> ОбъектАвторизации Тогда - ВызватьИсключение НСтр("ru = 'Объект информационной базы нельзя изменять.'"); + + Если ЗначениеЗаполнено(СтарыйОбъектАвторизации) + И СтарыйОбъектАвторизации <> ОбъектАвторизации Тогда + + ВызватьИсключение НСтр("ru = 'У внешнего пользователя нельзя изменять + |объект информационной базы.'"); КонецЕсли; КонецЕсли; + ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ); + КонецПроцедуры Процедура ПриЗаписи(Отказ) @@ -37,40 +54,32 @@ Возврат; КонецЕсли; - // Обновление состава автоматической группы "Все внешние пользователи". - ИзмененныеВнешниеПользователи = Неопределено; - ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, ИзмененныеВнешниеПользователи); - ИзмененныеВнешниеПользователи.Добавить(Ссылка); - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); - - // Обновление состава автоматической группы <все объекты авторизации одного типа> (если есть). - Если ЗначениеЗаполнено(ОбъектАвторизации) Тогда - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ГруппыВнешнихПользователей.Ссылка - |ИЗ - | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей - |ГДЕ - | ГруппыВнешнихПользователей.ВсеОбъектыАвторизации - | И ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипОбъектовАвторизации) = &ТипОбъектовАвторизации"); - Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипЗнч(ОбъектАвторизации)); - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(Выборка.Ссылка, ИзмененныеВнешниеПользователи); - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); - КонецЕсли; - КонецЕсли; - // Обновление состава группы нового внешнего пользователя (если задана). Если ДополнительныеСвойства.Свойство("ГруппаНовогоВнешнегоПользователя") И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя) Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя.ПолучитьОбъект(); ОбъектГруппы.Состав.Добавить().ВнешнийПользователь = Ссылка; ОбъектГруппы.Записать(); - ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(ОбъектГруппы.Ссылка, ИзмененныеВнешниеПользователи); - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); + КонецЕсли; + + // Обновление состава автоматической группы "Все внешние пользователи". + ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей( + Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, Ссылка); + + ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ); + + Если НЕ УстановитьРолиНепосредственно + И НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда + + Массив = Новый Массив; + Массив.Добавить(Ссылка); + ПользователиСлужебный.ОбновитьРолиВнешнихПользователей(Массив); КонецЕсли; КонецПроцедуры @@ -79,12 +88,25 @@ // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ, // кроме того, вход под этим пользователем ИБ приведет к ошибке. - Если Пользователи.ПользовательИБСуществует(ИдентификаторПользователяИБ) Тогда - - Отказ = НЕ Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ); - КонецЕсли; + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Удалить"); + ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + + ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ, Истина); + ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ); // Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки. КонецПроцедуры +Процедура ПриКопировании(ОбъектКопирования) + + ДополнительныеСвойства.Вставить("ЗначениеКопирования", ОбъектКопирования.Ссылка); + + ИдентификаторПользователяИБ = Неопределено; + ИдентификаторПользователяСервиса = Неопределено; + +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo index c8de89fcb..d194cf4f8 100644 --- a/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo +++ b/SSL/src/Catalogs/ВнешниеПользователи/ВнешниеПользователи.mdo @@ -132,26 +132,38 @@ <defaultObjectForm>Catalog.ВнешниеПользователи.Form.ФормаЭлемента</defaultObjectForm> <defaultListForm>Catalog.ВнешниеПользователи.Form.ФормаСписка</defaultListForm> <defaultChoiceForm>Catalog.ВнешниеПользователи.Form.ФормаСписка</defaultChoiceForm> - <attributes uuid="bbfd9834-12b4-49ca-bdae-5c94efa80482"> - <name>УдалитьПароль</name> + <attributes uuid="433a114f-3198-4ef6-bbf8-ce9b54fdb736"> + <name>ИдентификаторПользователяИБ</name> <synonym> <key>ru</key> - <value>Удалить Пароль</value> + <value>Идентификатор пользователя ИБ</value> </synonym> + <comment>Требуется для сопоставления элемента справочника ВнешниеПользователи пользователю ИБ</comment> <type> - <types>String</types> - <stringQualifiers> - <length>30</length> - </stringQualifiers> + <types>UUID</types> </type> <toolTip> <key>ru</key> - <value>Это реквизит, который использовался в старой версии подсистемы для хранения паролей (используется для установки паролей пользователям информационной базы при конвертации данных)</value> + <value>Уникальный идентификатор пользователя информационной базы, через который установлена связь элемента справочника с пользователем информационной базы</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:StringValue"/> - <fullTextSearch>Use</fullTextSearch> + <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> + <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"> @@ -194,23 +206,26 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="433a114f-3198-4ef6-bbf8-ce9b54fdb736"> - <name>ИдентификаторПользователяИБ</name> + <attributes uuid="bbfd9834-12b4-49ca-bdae-5c94efa80482"> + <name>УдалитьПароль</name> <synonym> <key>ru</key> - <value>Идентификатор пользователя ИБ</value> + <value>Удалить Пароль</value> </synonym> - <comment>Требуется для сопоставления элемента справочника ВнешниеПользователи пользователю ИБ</comment> <type> - <types>UUID</types> + <types>String</types> + <stringQualifiers> + <length>30</length> + </stringQualifiers> </type> <toolTip> <key>ru</key> - <value>Уникальный идентификатор пользователя информационной базы, через который установлена связь элемента справочника с пользователем информационной базы</value> + <value>Это реквизит, который использовался в старой версии подсистемы для хранения паролей (используется для установки паролей пользователям информационной базы при конвертации данных)</value> </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> - <fillValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> <attributes uuid="d431d1e2-13dc-495c-9de1-b5ec872eceed"> diff --git a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl index 8b1378917..dc862d04c 100644 --- a/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ВопросыШаблонаАнкеты/ObjectModule.bsl @@ -1 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl index e71a3e8fa..25b2b0267 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Module.bsl @@ -7,12 +7,12 @@ Если Параметры.РежимВыбора Тогда Элементы.Список.РежимВыбора = Истина; - // Отбор не помеченных на удаление + // Отбор не помеченных на удаление. Список.Отбор.Элементы[0].Использование = Истина; Список.Отбор.Элементы[1].Использование = Параметры.Свойство("ВыборРодителя"); Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда - // Режим подбора + // Режим подбора. Заголовок = НСтр("ru = 'Подбор групп внешних пользователей'"); Элементы.Список.МножественныйВыбор = Истина; Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный; diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form index 36eb701fa..a63d36435 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form.form @@ -930,7 +930,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.УстановитьФлажки</commandName> + <commandName>Form.Command.ВключитьРоли</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -957,7 +957,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.СнятьФлажки</commandName> + <commandName>Form.Command.ИсключитьРоли</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -1010,7 +1010,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.ПоказатьПодсистемыРолей</commandName> + <commandName>Form.Command.ГруппировкаРолейПоПодсистемам</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -1272,10 +1272,6 @@ <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> - <handlers> - <event>OnOpen</event> - <name>ПриОткрытии</name> - </handlers> <handlers> <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> @@ -1320,23 +1316,6 @@ </tablePath> </additionalColumns> </attributes> - <attributes> - <name>ПоказатьТолькоВыбранныеРоли</name> - <title> - <key>ru</key> - <value>Показать только выбранные роли</value> - - 1 - - Boolean - - - true - - - true - - ДействияВФорме @@ -1519,23 +1498,6 @@ <segments>ПоказатьПодсистемыРолей</segments> </settingsSavedData> </attributes> - <attributes> - <name>СкрытьРольПолныеПрава</name> - <title> - <key>ru</key> - <value>Скрыть роль полные права</value> - - 8 - - Boolean - - - true - - - true - - ПодобратьВнешнихПользователей @@ -1586,15 +1548,15 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>СнятьФлажки</name> + <name>ИсключитьРоли</name> <title> <key>ru</key> - <value>Снять флажки</value> + <value>Исключить роли</value> 5 ru - Снять флажки + Исключить роли true @@ -1604,7 +1566,7 @@ - СнятьФлажки + ИсключитьРоли true @@ -1612,15 +1574,15 @@ Auto - УстановитьФлажки + ВключитьРоли <key>ru</key> - <value>Установить флажки</value> + <value>Включить роли</value> 6 ru - Установить флажки + Включить роли true @@ -1630,7 +1592,7 @@ - УстановитьФлажки + ВключитьРоли true @@ -1638,15 +1600,15 @@ Auto - ПоказатьПодсистемыРолей + ГруппировкаРолейПоПодсистемам <key>ru</key> - <value>Группировка по подсистемам</value> + <value>По подсистемам</value> 2 ru - Показать группировку по подсистемам + Группировать список ролей по подсистемам true @@ -1656,7 +1618,7 @@ - ПоказатьПодсистемыРолей + ГруппировкаРолейПоПодсистемам TextPicture @@ -1672,9 +1634,5 @@ AfterWrite ПослеЗаписи - - OnReadAtServer - ПриЧтенииНаСервере - diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Help/ru.html index 2e933a8a5..295913ac6 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 e7b23185f..06b2d57df 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Module.bsl @@ -4,33 +4,21 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - //** Установка начальных значений - // перед загрузкой данных из настроек на сервере - // для случая, когда данные ещё не были записаны и не загружаются - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - // Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере. - // Для существующего - в ПриЧтенииНаСервере. - Если Объект.Ссылка.Пустая() Тогда - ИнициализацияФормы(); - КонецЕсли; + ОбработатьИнтерфейсРолей( + "НастроитьИнтерфейсРолейПриСозданииФормы", ЗначениеЗаполнено(Объект.Ссылка)); - //** Подготовка постоянных данных + // Подготовка вспомогательных данных. ЗаполнитьСписокТиповОбъектовАвторизации(); - // Удаление роли ПолныеПрава из списка выбора и таблицы ролей - - //** Заполнение изменяемых данных - - Если Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка() И - Объект.Родитель.Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + Если Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка() + И Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка(); КонецЕсли; ОпределитьДействияВФорме(); - //** Установка постоянной доступности свойств + // Установка постоянной доступности свойств. Элементы.Наименование.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваЭлемента); Элементы.Родитель.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваЭлемента); @@ -38,36 +26,41 @@ Элементы.Состав.Видимость = ЗначениеЗаполнено(ДействияВФорме.СоставГруппы); Элементы.ОтображениеРолей.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли); - ЭтоГруппаВсеВнешниеПользователи = (Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + ЭтоГруппаВсеВнешниеПользователи = + Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; - ТолькоПросмотр = ТолькоПросмотр ИЛИ - НЕ ЭтоГруппаВсеВнешниеПользователи И - ДействияВФорме.Роли <> "Редактирование" И - ДействияВФорме.СоставГруппы <> "Редактирование" И - ДействияВФорме.СвойстваЭлемента <> "Редактирование"; + Если ЭтоГруппаВсеВнешниеПользователи Тогда + Элементы.Наименование.ТолькоПросмотр = Истина; + Элементы.Родитель.ТолькоПросмотр = Истина; + Элементы.Комментарий.ТолькоПросмотр = Истина; + Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр = Истина; + КонецЕсли; - Элементы.Наименование.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СвойстваЭлемента <> "Редактирование"; - Элементы.Родитель.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СвойстваЭлемента <> "Редактирование"; - Элементы.Комментарий.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СвойстваЭлемента <> "Редактирование"; - Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СоставГруппы <> "Редактирование"; - Элементы.Состав.ТолькоПросмотр = ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СоставГруппы <> "Редактирование"; - Элементы.СоставПодобрать.Доступность = НЕ (ЭтоГруппаВсеВнешниеПользователи ИЛИ ДействияВФорме.СоставГруппы <> "Редактирование"); + Если ТолькоПросмотр + ИЛИ НЕ ЭтоГруппаВсеВнешниеПользователи + И ДействияВФорме.Роли <> "Редактирование" + И ДействияВФорме.СоставГруппы <> "Редактирование" + И ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда + + ТолькоПросмотр = Истина; + КонецЕсли; - УстановитьТолькоПросмотрРолей(ДействияВФорме.Роли <> "Редактирование"); + Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда + Элементы.Наименование.ТолькоПросмотр = Истина; + Элементы.Родитель.ТолькоПросмотр = Истина; + Элементы.Комментарий.ТолькоПросмотр = Истина; + КонецЕсли; -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) + Если ДействияВФорме.СоставГруппы <> "Редактирование" Тогда + Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр = Истина; + КонецЕсли; - УстановитьДоступностьСвойств(); + ОбработатьИнтерфейсРолей( + "УстановитьТолькоПросмотрРолей", + ПользователиПереопределяемый.ЗапретРедактированияРолей() + ИЛИ ДействияВФорме.Роли <> "Редактирование"); -КонецПроцедуры - -&НаСервере -Процедура ПриЧтенииНаСервере(ТекущийОбъект) - - ИнициализацияФормы(); + УстановитьДоступностьСвойств(ЭтаФорма); КонецПроцедуры @@ -81,16 +74,7 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда - ПоказатьПодсистемыРолей = Ложь; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь; - Иначе - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - КонецЕсли; - - СкрытьРольПолныеПрава = Истина; - ОбновитьДеревоРолей(); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки); КонецПроцедуры @@ -102,7 +86,7 @@ Объект.ВсеОбъектыАвторизации = Ложь; - УстановитьДоступностьСвойств(); + УстановитьДоступностьСвойств(ЭтаФорма); КонецПроцедуры @@ -128,7 +112,7 @@ Объект.ТипОбъектовАвторизации = Неопределено; КонецЕсли; - УстановитьДоступностьСвойств(); + УстановитьДоступностьСвойств(ЭтаФорма); КонецПроцедуры @@ -137,7 +121,10 @@ СтандартнаяОбработка = Ложь; - ВыбранныйЭлемент = ВыбратьИзСписка(ТипыОбъектовАвторизации, Элемент, ТипыОбъектовАвторизации.НайтиПоЗначению(Объект.ТипОбъектовАвторизации)); + ВыбранныйЭлемент = ВыбратьИзСписка( + ТипыОбъектовАвторизации, + Элемент, + ТипыОбъектовАвторизации.НайтиПоЗначению(Объект.ТипОбъектовАвторизации)); Если ВыбранныйЭлемент <> Неопределено Тогда @@ -157,10 +144,13 @@ Объект.Состав.Очистить(); КонецЕсли; - УстановитьДоступностьСвойств(); + УстановитьДоступностьСвойств(ЭтаФорма); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли + //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей @@ -168,7 +158,7 @@ Процедура РолиПометкаПриИзменении(Элемент) Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей"); КонецЕсли; КонецПроцедуры @@ -214,83 +204,70 @@ &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) - ПоказатьТолькоВыбранныеРоли = НЕ ПоказатьТолькоВыбранныеРоли; - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); + ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура ПоказатьПодсистемыРолей(Команда) +Процедура ГруппировкаРолейПоПодсистемам(Команда) - ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); + ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура УстановитьФлажки(Команда) +Процедура ВключитьРоли(Команда) - ОбновитьСоставРолей(Неопределено, Истина); - Если ПоказатьТолькоВыбранныеРоли Тогда - РазвернутьПодсистемыРолей(); - КонецЕсли; + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе"); + + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма, Ложь); КонецПроцедуры &НаКлиенте -Процедура СнятьФлажки(Команда) +Процедура ИсключитьРоли(Команда) - ОбновитьСоставРолей(Неопределено, Ложь); + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВсе"); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаСервере -Процедура ИнициализацияФормы() - - // Для нового элемента показать все роли, иначе только выбранные - ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка); - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ЗначениеЗаполнено(Объект.Ссылка); - // - СкрытьРольПолныеПрава = Истина; - ОбновитьДеревоРолей(); - -КонецПроцедуры - &НаСервере Процедура ОпределитьДействияВФорме() ДействияВФорме = Новый Структура; - ДействияВФорме.Вставить("Роли", ""); // "", "Просмотр", "Редактирование" - ДействияВФорме.Вставить("СоставГруппы", ""); // "", "Просмотр", "Редактирование" - ДействияВФорме.Вставить("СвойстваЭлемента", ""); // "", "Просмотр", "Редактирование" - Если Пользователи.ЭтоПолноправныйПользователь() ИЛИ - ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда - // Администратор - ДействияВФорме.Роли = "Редактирование"; - ДействияВФорме.СоставГруппы = "Редактирование"; - ДействияВФорме.СвойстваЭлемента = "Редактирование"; + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("Роли", ""); + + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("СоставГруппы", ""); + + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("СвойстваЭлемента", ""); + + Если Пользователи.ЭтоПолноправныйПользователь() + ИЛИ ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда + // Администратор. + ДействияВФорме.Роли = "Редактирование"; + ДействияВФорме.СоставГруппы = "Редактирование"; + ДействияВФорме.СвойстваЭлемента = "Редактирование"; ИначеЕсли РольДоступна("ДобавлениеИзменениеВнешнихПользователей") Тогда - // Менеджер внешних пользователей - ДействияВФорме.Роли = ""; - ДействияВФорме.СоставГруппы = "Редактирование"; - ДействияВФорме.СвойстваЭлемента = "Редактирование"; + // Менеджер внешних пользователей. + ДействияВФорме.Роли = ""; + ДействияВФорме.СоставГруппы = "Редактирование"; + ДействияВФорме.СвойстваЭлемента = "Редактирование"; Иначе - // Читатель внешних пользователей - ДействияВФорме.Роли = ""; - ДействияВФорме.СоставГруппы = "Просмотр"; - ДействияВФорме.СвойстваЭлемента = "Просмотр"; + // Читатель внешних пользователей. + ДействияВФорме.Роли = ""; + ДействияВФорме.СоставГруппы = "Просмотр"; + ДействияВФорме.СвойстваЭлемента = "Просмотр"; КонецЕсли; ПользователиПереопределяемый.ИзменитьДействияВФорме(Объект.Ссылка, ДействияВФорме); @@ -310,61 +287,90 @@ КонецПроцедуры -&НаКлиенте -Процедура УстановитьДоступностьСвойств() +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьДоступностьСвойств(Форма) - Элементы.Состав.ТолькоПросмотр = Объект.ВсеОбъектыАвторизации; + Элементы = Форма.Элементы; - Элементы.СоставПодобрать.Доступность = НЕ Элементы.Состав.ТолькоПросмотр И Элементы.Состав.Доступность; - Элементы.КонтекстноеМенюСоставПодобрать.Доступность = НЕ Элементы.Состав.ТолькоПросмотр И Элементы.Состав.Доступность; - Элементы.СоставДобавить.Доступность = НЕ Элементы.Состав.ТолькоПросмотр И Элементы.Состав.Доступность; - Элементы.КонтекстноеМенюСоставДобавить.Доступность = НЕ Элементы.Состав.ТолькоПросмотр И Элементы.Состав.Доступность; + Элементы.Состав.ТолькоПросмотр = Форма.Объект.ВсеОбъектыАвторизации; - Элементы.ВсеОбъектыАвторизации.Доступность = ЗначениеЗаполнено(ПредставлениеТипаОбъектовАвторизации) И НЕ ЗначениеЗаполнено(Объект.Родитель); + ДоступностьКоманд = + НЕ Форма.ТолькоПросмотр + И НЕ Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр + И НЕ Элементы.Состав.ТолькоПросмотр + И Элементы.Состав.Доступность; + + Элементы.СоставПодобрать.Доступность = ДоступностьКоманд; + Элементы.КонтекстноеМенюСоставПодобрать.Доступность = ДоступностьКоманд; + Элементы.СоставДобавить.Доступность = ДоступностьКоманд; + Элементы.КонтекстноеМенюСоставДобавить.Доступность = ДоступностьКоманд; + + Элементы.ВсеОбъектыАвторизации.Доступность = + ЗначениеЗаполнено(Форма.ПредставлениеТипаОбъектовАвторизации) + И НЕ ЗначениеЗаполнено(Форма.Объект.Родитель); КонецПроцедуры &НаСервере Процедура ЗаполнитьСписокТиповОбъектовАвторизации() - Для каждого ТипСсылкиОбъектаАвторизации ИЗ Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы() Цикл + ТипыСсылокОбъектовАвторизации = + Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы(); - МетаданныеТипа = Метаданные.НайтиПоТипу(ТипСсылкиОбъектаАвторизации); + Для каждого ТипСсылкиОбъектаАвторизации ИЗ ТипыСсылокОбъектовАвторизации Цикл + МетаданныеТипа = Метаданные.НайтиПоТипу(ТипСсылкиОбъектаАвторизации); МассивТипов = Новый Массив; МассивТипов.Добавить(ТипСсылкиОбъектаАвторизации); ОписаниеТипаСсылки = Новый ОписаниеТипов(МассивТипов); - ТипыОбъектовАвторизации.Добавить(ОписаниеТипаСсылки.ПривестиЗначение(Неопределено), МетаданныеТипа.Синоним); + ТипыОбъектовАвторизации.Добавить( + ОписаниеТипаСсылки.ПривестиЗначение(Неопределено), МетаданныеТипа.Синоним); КонецЦикла; - НайденныйЭлемент = ТипыОбъектовАвторизации.НайтиПоЗначению(Объект.ТипОбъектовАвторизации); - ПредставлениеТипаОбъектовАвторизации = ?(НайденныйЭлемент = Неопределено, "", НайденныйЭлемент.Представление); + + ПредставлениеТипаОбъектовАвторизации = ?( + НайденныйЭлемент = Неопределено, "", НайденныйЭлемент.Представление); КонецПроцедуры &НаСервере Процедура УдалитьНеТипичныеВнешниеПользователи() - Запрос = Новый Запрос( + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипЗнч(Объект.ТипОбъектовАвторизации)); + Запрос.УстановитьПараметр( + "ВыбранныеВнешниеПользователи", + Объект.Состав.Выгрузить().ВыгрузитьКолонку("ВнешнийПользователь")); + + Запрос.Текст = "ВЫБРАТЬ | ВнешниеПользователи.Ссылка |ИЗ | Справочник.ВнешниеПользователи КАК ВнешниеПользователи |ГДЕ | ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации) <> &ТипОбъектовАвторизации - | И ВнешниеПользователи.Ссылка В(&ВыбранныеВнешниеПользователи)"); - Запрос.УстановитьПараметр("ВыбранныеВнешниеПользователи", Объект.Состав.Выгрузить().ВыгрузитьКолонку("ВнешнийПользователь")); - Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипЗнч(Объект.ТипОбъектовАвторизации)); + | И ВнешниеПользователи.Ссылка В(&ВыбранныеВнешниеПользователи)"; - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - НайденныеСтроки = Объект.Состав.НайтиСтроки(Новый Структура("ВнешнийПользователь", Выборка.Ссылка)); - Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл - Объект.Состав.Удалить(Объект.Состав.Индекс(НайденнаяСтрока)); + НачатьТранзакцию(); + Попытка + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + НайденныеСтроки = Объект.Состав.НайтиСтроки( + Новый Структура("ВнешнийПользователь", Выборка.Ссылка)); + + Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл + Объект.Состав.Удалить(Объект.Состав.Индекс(НайденнаяСтрока)); + КонецЦикла; КонецЦикла; - КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -373,7 +379,10 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", ?(Элементы.Состав.ТекущиеДанные = Неопределено, Неопределено, Элементы.Состав.ТекущиеДанные.ВнешнийПользователь)); + ПараметрыФормы.Вставить("ТекущаяСтрока", ?( + Элементы.Состав.ТекущиеДанные = Неопределено, + Неопределено, + Элементы.Состав.ТекущиеДанные.ВнешнийПользователь)); Если Подобрать Тогда ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); @@ -383,7 +392,12 @@ ПараметрыФормы.Вставить("ТипОбъектовАвторизации", Объект.ТипОбъектовАвторизации); КонецЕсли; - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, ?(Подобрать, Элементы.Состав, Элементы.СоставВнешнийПользователь)); + ОткрытьФорму( + "Справочник.ВнешниеПользователи.ФормаВыбора", + ПараметрыФормы, + ?(Подобрать, + Элементы.Состав, + Элементы.СоставВнешнийПользователь)); КонецПроцедуры @@ -391,7 +405,10 @@ Процедура ОбработкаВыбораВнешнегоПользователя(ВыбранноеЗначение) Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - Если Объект.Состав.НайтиСтроки(Новый Структура("ВнешнийПользователь", ВыбранноеЗначение)).Количество() = 0 Тогда + + Отбор = Новый Структура("ВнешнийПользователь", ВыбранноеЗначение); + Если Объект.Состав.НайтиСтроки(Отбор).Количество() = 0 Тогда + Объект.Состав.Добавить().ВнешнийПользователь = ВыбранноеЗначение; КонецЕсли; КонецЕсли; @@ -402,276 +419,15 @@ // Для работы интерфейса ролей &НаСервере -Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) +Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) - Если ТаблицаЗначенийДляЧтения Тогда - Возврат Объект.Роли.Выгрузить(); - КонецЕсли; + ПараметрыДействия = Новый Структура; + ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); + ПараметрыДействия.Вставить("Форма", ЭтаФорма); + ПараметрыДействия.Вставить("КоллекцияРолей", Объект.Роли); + ПараметрыДействия.Вставить("ТипПользователя", Перечисления.ТипыПользователей.ВнешнийПользователь); + ПараметрыДействия.Вставить("СкрытьРольПолныеПрава", Истина); - Возврат Объект.Роли; - -КонецФункции - -&НаСервере -Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено, Знач РазрешитьПросмотрТолькоВыбранных = Ложь) - - Если ТолькоПросмотрРолей <> Неопределено Тогда - Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей; - Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - КонецЕсли; - - Если РазрешитьПросмотрТолькоВыбранных Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность = Ложь; - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура РазвернутьПодсистемыРолей(Коллекция = Неопределено); - - Если Коллекция = Неопределено Тогда - Коллекция = Роли.ПолучитьЭлементы(); - КонецЕсли; - - // Развернуть все - Для каждого Строка ИЗ Коллекция Цикл - Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор()); - Если НЕ Строка.ЭтоРоль Тогда - РазвернутьПодсистемыРолей(Строка.ПолучитьЭлементы()); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьДеревоРолей() - - Если НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина; - ПоказатьТолькоВыбранныеРоли = Истина; - КонецЕсли; - - // Запоминание текущей строки - ТекущаяПодсистема = ""; - ТекущаяРоль = ""; - // - Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда - ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока); - Если ТекущиеДанные.ЭтоРоль Тогда - ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя); - ТекущаяРоль = ТекущиеДанные.Имя; - Иначе - ТекущаяПодсистема = ТекущиеДанные.Имя; - ТекущаяРоль = ""; - КонецЕсли; - КонецЕсли; - - ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей).Скопировать(); - ДобавитьИменаНесуществующихРолей(ДеревоРолей); - ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); - ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); - ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); - - ЗначениеВРеквизитФормы(ДеревоРолей, "Роли"); - - Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево); - - // Восстановление текущей строки - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеПодсистемы = НайденныеСтроки[0]; - ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы); - СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы); - Если ЗначениеЗаполнено(ТекущаяРоль) Тогда - НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль)); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор(); - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли); - СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли); - Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); - - Если Строка.ЭтоРоль Тогда - Если СкрытьРольПолныеПрава - И (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда - - Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 6; - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - КонецЕсли; - Иначе - Если Строка.Строки.Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 5; - Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений) - - Если СтрокаДереваЗначений.Родитель = Неопределено Тогда - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы(); - Иначе - ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель); - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы(); - КонецЕсли; - - Возврат ДанныеФормыКоллекцияЭлементовДерева; - -КонецФункции - - -&НаСервере -Процедура ОбновитьСоставРолей(ИдентификаторСтроки, Добавить); - - Если ИдентификаторСтроки = Неопределено Тогда - // Обработка всех - КоллекцияРолей = КоллекцияРолей(); - КоллекцияРолей.Очистить(); - Если Добавить Тогда - ВсеРоли = ПользователиСерверПовтИсп.ВсеРоли(); - Для каждого ОписаниеРоли Из ВсеРоли Цикл - Если ОписаниеРоли.Имя <> "ПолныеПрава" И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда - КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ПоказатьТолькоВыбранныеРоли Тогда - Если КоллекцияРолей.Количество() > 0 Тогда - ОбновитьДеревоРолей(); - Иначе - Роли.ПолучитьЭлементы().Очистить(); - КонецЕсли; - // Возврат - Возврат; - // Возврат - КонецЕсли; - Иначе - ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ТекущиеДанные.ЭтоРоль Тогда - ДобавитьУдалитьРоль(ТекущиеДанные.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(ТекущиеДанные.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЕсли; - - ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы()); - - Модифицированность = Истина; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьУдалитьРоль(Знач Роль, Знач Добавить) - - НайденныеРоли = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Роль)); - - Если Добавить Тогда - Если НайденныеРоли.Количество() = 0 Тогда - КоллекцияРолей().Добавить().Роль = Роль; - КонецЕсли; - Иначе - Если НайденныеРоли.Количество() > 0 Тогда - КоллекцияРолей().Удалить(НайденныеРоли[0]); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьУдалитьРолиПодсистемы(Знач Коллекция, Знач Добавить) - - Для каждого Строка Из Коллекция Цикл - Если Строка.ЭтоРоль Тогда - ДобавитьУдалитьРоль(Строка.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(Строка.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьПометкуВыбранныхРолей(Знач Коллекция) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - Если Строка.ЭтоРоль Тогда - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - Иначе - ОбновитьПометкуВыбранныхРолей(Строка.ПолучитьЭлементы()); - Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.Пометка = Истина; - Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл - Если НЕ Элемент.Пометка Тогда - Строка.Пометка = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьИменаНесуществующихРолей(ДеревоРолей) - - // Добавление несуществующих ролей - Для каждого Строка Из КоллекцияРолей() Цикл - Если ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, Строка.Роль), Истина).Количество() = 0 Тогда - СтрокаДерева = ДеревоРолей.Строки.Вставить(0); - СтрокаДерева.ЭтоРоль = Истина; - СтрокаДерева.Имя = Строка.Роль; - СтрокаДерева.Синоним = "? " + Строка.Роль; - КонецЕсли; - КонецЦикла; + ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html index d61edc124..8c601548d 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

        diff --git a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl index 36e14991e..585dad22a 100644 --- a/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыВнешнихПользователей/ObjectModule.bsl @@ -1,224 +1,19 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем СтарыйРодитель; // Значение родителя группы до изменения для использования -// в обработчике события ПриЗаписи. + // в обработчике события ПриЗаписи. -Перем ИзменилсяСоставРолейГруппыВнешнихПользователей; // Флажок изменения состава ролей для использования -// в обработчике события ПриЗаписи. +Перем СтарыйСоставГруппыВнешнихПользователей; // Состав внешних пользователей группы внешних + // пользователей до изменения для использования + // в обработчике события ПриЗаписи. + +Перем СтарыйСоставРолейГруппыВнешнихПользователей; // Флажок изменения состава ролей для + // использования в обработчике события ПриЗаписи. //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ -// Блокирует недопустимые действия с предопределенной группой "Все внешние пользователи". -Процедура ПередЗаписью(Отказ) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда - - ТипОбъектовАвторизации = Неопределено; - ВсеОбъектыАвторизации = Ложь; - - Если НЕ Родитель.Пустая() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" может быть только в корне.'"), - , , , Отказ); - Возврат; - КонецЕсли; - Если Состав.Количество() > 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Добавление внешних пользователей в группу ""Все внешние пользователи"" не поддерживается.'"), - , , , Отказ); - Возврат; - КонецЕсли; - Иначе - Если Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" не может быть родителем.'"), - , , , Отказ); - Возврат; - КонецЕсли; - СтарыйРодитель = ?(Ссылка.Пустая(), Неопределено, ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Родитель")); - - Если ТипОбъектовАвторизации = Неопределено Тогда - ВсеОбъектыАвторизации = Ложь; - ИначеЕсли ВсеОбъектыАвторизации И ЗначениеЗаполнено(Родитель) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Родитель недопустим у группы для всех объектов информационной базы заданного типа.'"), - , , , Отказ); - Возврат; - КонецЕсли; - - // Проверка уникальности группы всех объектов авторизации заданного типа - Если ВсеОбъектыАвторизации Тогда - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление - |ИЗ - | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей - |ГДЕ - | ГруппыВнешнихПользователей.Ссылка <> &Ссылка - | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации = &ТипОбъектовАвторизации - | И ГруппыВнешнихПользователей.ВсеОбъектыАвторизации"); - Запрос.УстановитьПараметр("Ссылка", Ссылка); - Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Уже есть группа ""%1"" для всех объектов информационной базы типа ""%2"".'"), - Выборка.СсылкаПредставление, - ТипОбъектовАвторизации.Метаданные().Синоним), - , , , Отказ); - Возврат; - КонецЕсли; - КонецЕсли; - - // Проверка совпадения типа объектов авторизации с родителем (допустимо, если тип у родителя не задан) - Если ЗначениеЗаполнено(Родитель) Тогда - ТипОбъектовАвторизацииРодителя = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Родитель, "ТипОбъектовАвторизации"); - Если ТипОбъектовАвторизацииРодителя <> Неопределено И - ТипОбъектовАвторизацииРодителя <> ТипОбъектовАвторизации Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Тип объектов информационной базы должен быть ""%1"", как у родителя ""%2"".'"), - ТипОбъектовАвторизацииРодителя.Метаданные().Синоним, Родитель), - , , , Отказ); - Возврат; - КонецЕсли; - КонецЕсли; - - // Проверка, что при изменении типа объектов авторизации нет подчиненных элементов другого типа (очистка типа допустима) - Если ТипОбъектовАвторизации <> Неопределено И ЗначениеЗаполнено(Ссылка) Тогда - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление, - | ГруппыВнешнихПользователей.ТипОбъектовАвторизации - |ИЗ - | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей - |ГДЕ - | ГруппыВнешнихПользователей.Родитель = &Ссылка - | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации <> &ТипОбъектовАвторизации"); - Запрос.УстановитьПараметр("Ссылка", Ссылка); - Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - Если Выборка.ТипОбъектовАвторизации = Неопределено Тогда - ПредставлениеДругогоТипаОбъектаАвторизации = НСтр("ru = '<Любой тип>'"); - Иначе - ПредставлениеДругогоТипаОбъектаАвторизации = Выборка.ТипОбъектовАвторизации.Метаданные().Синоним; - КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Есть дочерняя группа ""%1"" с другим типом объектов информационной базы ""%2"".'"), - Выборка.СсылкаПредставление, - ПредставлениеДругогоТипаОбъектаАвторизации), - , , , Отказ); - Возврат; - КонецЕсли; - КонецЕсли; - - // Определение изменения состава ролей. - Если ЗначениеЗаполнено(Ссылка) Тогда - Запрос = Новый Запрос( - "ВЫБРАТЬ - | НовыеРоли.Роль - |ПОМЕСТИТЬ НовыеРоли - |ИЗ - | &НовыеРоли КАК НовыеРоли - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК Значение - |ИЗ - | НовыеРоли КАК НовыеРоли - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыВнешнихПользователей.Роли КАК СтарыеРоли - | ПО (СтарыеРоли.Ссылка = &ГруппаВнешнихПользователей) - | И (СтарыеРоли.Роль = НовыеРоли.Роль) - |ГДЕ - | СтарыеРоли.Роль ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | (ВЫБРАТЬ - | ИСТИНА КАК ЗначениеИстина) КАК ЗначениеИстина - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыВнешнихПользователей.Роли КАК СтарыеРоли - | ПО (СтарыеРоли.Ссылка = &ГруппаВнешнихПользователей) - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеРоли КАК НовыеРоли - | ПО (СтарыеРоли.Роль = НовыеРоли.Роль) - |ГДЕ - | НовыеРоли.Роль ЕСТЬ NULL "); - Запрос.УстановитьПараметр("ГруппаВнешнихПользователей", Ссылка); - Запрос.УстановитьПараметр("НовыеРоли", Роли.Выгрузить()); - ИзменилсяСоставРолейГруппыВнешнихПользователей = НЕ Запрос.Выполнить().Пустой(); - Иначе - ИзменилсяСоставРолейГруппыВнешнихПользователей = Истина; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура ПриЗаписи(Отказ) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - ИзмененныеВнешниеПользователи = Неопределено; - ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(Ссылка, ИзмененныеВнешниеПользователи); - - Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | СоставыГруппПользователей.Пользователь - |ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - |ГДЕ - | СоставыГруппПользователей.ГруппаПользователей = ЗНАЧЕНИЕ(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи)"); - ИзмененныеВнешниеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); - - ИначеЕсли ИзменилсяСоставРолейГруппыВнешнихПользователей Тогда - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | СоставыГруппПользователей.Пользователь - |ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - |ГДЕ - | СоставыГруппПользователей.Пользователь В(&ИзмененныеВнешниеПользователи) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ГруппыВнешнихПользователейСостав.ВнешнийПользователь - |ИЗ - | Справочник.ГруппыВнешнихПользователей.Состав КАК ГруппыВнешнихПользователейСостав - |ГДЕ - | ГруппыВнешнихПользователейСостав.Ссылка = &ГруппаВнешнихПользователей - | И (НЕ ГруппыВнешнихПользователейСостав.ВнешнийПользователь.УстановитьРолиНепосредственно)"); - Запрос.УстановитьПараметр("ГруппаВнешнихПользователей", Ссылка); - Запрос.УстановитьПараметр("ИзмененныеВнешниеПользователи", ИзмененныеВнешниеПользователи); - ИзмененныеВнешниеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); - КонецЕсли; - - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); - - Если ЗначениеЗаполнено(СтарыйРодитель) И СтарыйРодитель <> Родитель Тогда - - ВнешниеПользователи.ОбновитьСоставГруппВнешнихПользователей(СтарыйРодитель, ИзмененныеВнешниеПользователи); - ВнешниеПользователи.ОбновитьРолиВнешнихПользователей(ИзмененныеВнешниеПользователи); - КонецЕсли; - -КонецПроцедуры - Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ПроверенныеРеквизитыОбъекта = Новый Массив; @@ -266,3 +61,207 @@ КонецПроцедуры +// Блокирует недопустимые действия с предопределенной группой "Все внешние пользователи". +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + + ТипОбъектовАвторизации = Неопределено; + ВсеОбъектыАвторизации = Ложь; + + Если НЕ Родитель.Пустая() Тогда + ВызватьИсключение + НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" + |может быть только в корне.'"); + КонецЕсли; + Если Состав.Количество() > 0 Тогда + ВызватьИсключение + НСтр("ru = 'Добавление внешних пользователей в группу + |""Все внешние пользователи"" не поддерживается.'"); + КонецЕсли; + Иначе + Если Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + ВызватьИсключение + НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" + |не может быть родителем.'"); + КонецЕсли; + + Если ТипОбъектовАвторизации = Неопределено Тогда + ВсеОбъектыАвторизации = Ложь; + + ИначеЕсли ВсеОбъектыАвторизации + И ЗначениеЗаполнено(Родитель) Тогда + + ВызватьИсключение + НСтр("ru = 'Группа внешних пользователей, содержащая все объекты + |информационной базы заданного типа может быть только в корне.'"); + КонецЕсли; + + // Проверка уникальности группы всех объектов авторизации заданного типа. + Если ВсеОбъектыАвторизации Тогда + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации); + Запрос.Текст = + "ВЫБРАТЬ + | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление + |ИЗ + | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей + |ГДЕ + | ГруппыВнешнихПользователей.Ссылка <> &Ссылка + | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации = &ТипОбъектовАвторизации + | И ГруппыВнешнихПользователей.ВсеОбъектыАвторизации"; + + РезультатЗапроса = Запрос.Выполнить(); + Если НЕ РезультатЗапроса.Пустой() Тогда + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Группа внешних пользователей ""%1"" + |для всех объектов информационной базы + |типа ""%2"" уже существует.'"), + Выборка.СсылкаПредставление, + ТипОбъектовАвторизации.Метаданные().Синоним); + КонецЕсли; + КонецЕсли; + + // Проверка совпадения типа объектов авторизации с родителем + //(допустимо, если тип у родителя не задан). + Если ЗначениеЗаполнено(Родитель) Тогда + ТипОбъектовАвторизацииРодителя = ОбщегоНазначения.ПолучитьЗначениеРеквизита( + Родитель, "ТипОбъектовАвторизации"); + + Если ТипОбъектовАвторизацииРодителя <> Неопределено + И ТипОбъектовАвторизацииРодителя <> ТипОбъектовАвторизации Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У нижестоящей группы внешних пользователей тип объектов + |информационной базы должен быть ""%1"", + |как у вышестоящей группы внешних пользователей ""%2"".'"), + ТипОбъектовАвторизацииРодителя.Метаданные().Синоним, + Родитель); + КонецЕсли; + КонецЕсли; + + // Проверка, что при изменении типа объектов авторизации + // нет подчиненных элементов другого типа (очистка типа допустима). + Если ТипОбъектовАвторизации <> Неопределено + И ЗначениеЗаполнено(Ссылка) Тогда + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипОбъектовАвторизации); + Запрос.Текст = + "ВЫБРАТЬ + | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление, + | ГруппыВнешнихПользователей.ТипОбъектовАвторизации + |ИЗ + | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей + |ГДЕ + | ГруппыВнешнихПользователей.Родитель = &Ссылка + | И ГруппыВнешнихПользователей.ТипОбъектовАвторизации <> &ТипОбъектовАвторизации"; + + РезультатЗапроса = Запрос.Выполнить(); + Если НЕ РезультатЗапроса.Пустой() Тогда + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + Если Выборка.ТипОбъектовАвторизации = Неопределено Тогда + ПредставлениеДругогоТипаОбъектаАвторизации = НСтр("ru = '<Любой тип>'"); + Иначе + ПредставлениеДругогоТипаОбъектаАвторизации = + Выборка.ТипОбъектовАвторизации.Метаданные().Синоним; + КонецЕсли; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'У группы внешних пользователей ""%1"" + |невозможно изменить тип объектов информационной базы, + |так как существует нижестоящая группа внешних пользователей + |""%2"" с другим типом + |объектов информационной базы ""%3"".'"), + Наименование, + Выборка.СсылкаПредставление, + ПредставлениеДругогоТипаОбъектаАвторизации); + КонецЕсли; + КонецЕсли; + + СтарыйРодитель = ?( + Ссылка.Пустая(), + Неопределено, + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Родитель") ); + + Если ЗначениеЗаполнено(Ссылка) + И Ссылка <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + + СтарыйСоставГруппыВнешнихПользователей = + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Состав").Выгрузить(); + КонецЕсли; + КонецЕсли; + + Если НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда + СтарыйСоставРолейГруппыВнешнихПользователей = + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Роли").Выгрузить(); + КонецЕсли; + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда + ИзменилсяСоставРолейГруппыВнешнихПользователей = Ложь; + Иначе + ИзменилсяСоставРолейГруппыВнешнихПользователей = + ПользователиСлужебный.РазличияЗначенийКолонки( + "Роль", + Роли.Выгрузить(), + СтарыйСоставРолейГруппыВнешнихПользователей).Количество() <> 0; + КонецЕсли; + + Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + + Если ИзменилсяСоставРолейГруппыВнешнихПользователей Тогда + ПользователиСлужебный.ОбновитьРолиВнешнихПользователей(Ссылка); + Иначе + Выборка = Справочники.ГруппыВнешнихПользователей.Выбрать(); + Пока Выборка.Следующий() Цикл + ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей(Выборка.Ссылка); + КонецЦикла; + ПользователиСлужебный.ОбновитьРолиВнешнихПользователей(); + КонецЕсли; + Иначе + Если ВсеОбъектыАвторизации Тогда + ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей(Ссылка); + Иначе + ИзмененияСостава = ПользователиСлужебный.РазличияЗначенийКолонки( + "ВнешнийПользователь", + Состав.Выгрузить(), + СтарыйСоставГруппыВнешнихПользователей); + + ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей( + Ссылка, ИзмененияСостава); + + Если ЗначениеЗаполнено(СтарыйРодитель) И СтарыйРодитель <> Родитель Тогда + ИзмененияСоставаПриИзмененииРодителя = Неопределено; + ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей(СтарыйРодитель); + КонецЕсли; + КонецЕсли; + + Если ИзменилсяСоставРолейГруппыВнешнихПользователей Тогда + ПользователиСлужебный.ОбновитьРолиВнешнихПользователей(Ссылка); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl index 9651dcb08..ba3d211bb 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ВыборПоАдминистратору/Module.bsl @@ -4,6 +4,11 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Запрос = Новый Запрос; Запрос.УстановитьПараметр("Выбранные", Параметры.Выбранные); Запрос.УстановитьПараметр("ПользовательГрупп", Параметры.ПользовательГрупп); @@ -51,6 +56,7 @@ | ИНАЧЕ ГруппыДоступа.Пользователь = &ПользовательГрупп | КОНЕЦ | И НЕ ГруппыДоступа.ПометкаУдаления + | И НЕ ГруппыДоступа.Профиль.ПометкаУдаления | И ВЫБОР | КОГДА ГруппыДоступа.ТипПользователей = НЕОПРЕДЕЛЕНО | ТОГДА ИСТИНА @@ -87,18 +93,23 @@ НовоеДерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Папки = НовоеДерево.Строки.НайтиСтроки(Новый Структура("ЭтоГруппа", Истина), Истина); + УдалитьПапки = Новый Соответствие; НетПапок = Истина; + Для каждого Папка Из Папки Цикл Если Папка.Родитель = Неопределено И Папка.Строки.Количество() = 0 ИЛИ Папка.Строки.НайтиСтроки(Новый Структура("ЭтоГруппа", Ложь), Истина).Количество() = 0 Тогда - // - УдалитьПапки.Вставить(?(Папка.Родитель = Неопределено, НовоеДерево.Строки, Папка.Родитель.Строки), Папка); + + УдалитьПапки.Вставить( + ?(Папка.Родитель = Неопределено, НовоеДерево.Строки, Папка.Родитель.Строки), + Папка); Иначе НетПапок = Ложь; КонецЕсли; КонецЦикла; + Для каждого УдалитьПапку Из УдалитьПапки Цикл Если УдалитьПапку.Ключ.Индекс(УдалитьПапку.Значение) > -1 Тогда УдалитьПапку.Ключ.Удалить(УдалитьПапку.Значение); @@ -142,15 +153,18 @@ &НаКлиенте Процедура ПриВыборе() - Если Элементы.ГруппыДоступа.ТекущиеДанные <> Неопределено Тогда - Если Элементы.ГруппыДоступа.ТекущиеДанные.ЭтоГруппа Тогда + ТекущиеДанные = Элементы.ГруппыДоступа.ТекущиеДанные; + + Если ТекущиеДанные <> Неопределено Тогда + Если ТекущиеДанные.ЭтоГруппа Тогда + Если Элементы.ГруппыДоступа.Развернут(Элементы.ГруппыДоступа.ТекущаяСтрока) Тогда Элементы.ГруппыДоступа.Свернуть(Элементы.ГруппыДоступа.ТекущаяСтрока); Иначе Элементы.ГруппыДоступа.Развернуть(Элементы.ГруппыДоступа.ТекущаяСтрока); КонецЕсли; Иначе - Закрыть(Элементы.ГруппыДоступа.ТекущиеДанные.Ссылка); + Закрыть(ТекущиеДанные.Ссылка); КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl index 25e74d7fa..081797425 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ОбновлениеДанныхОграниченияДоступа/Module.bsl @@ -4,6 +4,11 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Отказ = НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей(); ВыполнитьПроверкуПравДоступа("АдминистрированиеДанных", Метаданные); @@ -34,21 +39,23 @@ УстановитьПривилегированныйРежим(Истина); КоличествоДанных = 0; - УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступа(КоличествоДанных); + УправлениеДоступомСлужебный.ЗаполнениеДанныхДляОграниченияДоступа(КоличествоДанных); Если КоличествоДанных > 0 Тогда ВыполненоШаговОбновления = 1; КонецЕсли; Начало = ТекущаяДатаСеанса(); - Пока РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа).Использование + МетаданныеЗадания = Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа; + + Пока РегламентныеЗадания.НайтиПредопределенное(МетаданныеЗадания).Использование И Начало + 15 > ТекущаяДатаСеанса() Цикл ВыполненоШаговОбновления = ВыполненоШаговОбновления + 1; - УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступа(); + УправлениеДоступомСлужебный.ЗаполнениеДанныхДляОграниченияДоступа(); КонецЦикла; - ОбновлениеТребуется = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа).Использование; + ОбновлениеТребуется = РегламентныеЗадания.НайтиПредопределенное(МетаданныеЗадания).Использование; Элементы.ВыполнениеЗавершено.Видимость = НЕ ОбновлениеТребуется; Возврат ОбновлениеТребуется; diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl index 528d6d079..b39b80186 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаГруппы/Module.bsl @@ -4,9 +4,16 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Если НЕ ПравоДоступа("Изменение", Метаданные.Справочники.ГруппыДоступа) - ИЛИ ПараметрыДоступа("Изменение", Метаданные.Справочники.ГруппыДоступа, "Ссылка").ОграничениеУсловием Тогда - // + + ИЛИ ПараметрыДоступа("Изменение", Метаданные.Справочники.ГруппыДоступа, + "Ссылка").ОграничениеУсловием Тогда + ТолькоПросмотр = Истина; КонецЕсли; @@ -15,7 +22,12 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - Если ТекущийОбъект.Ссылка = УправлениеДоступом.РодительПерсональныхГруппДоступа(Истина) Тогда + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если ТекущийОбъект.Ссылка = УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа(Истина) Тогда ТолькоПросмотр = Истина; КонецЕсли; @@ -26,14 +38,17 @@ НаименованиеПерсональныхГруппДоступа = Неопределено; - Если Объект.Ссылка <> УправлениеДоступом.РодительПерсональныхГруппДоступа(Истина, НаименованиеПерсональныхГруппДоступа) - И Объект.Наименование = НаименованиеПерсональныхГруппДоступа Тогда - // - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Это наименование зарезервировано.'"), - , - "Объект.Наименование", - , - Отказ); + Если Объект.Ссылка <> УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа( + Истина, НаименованиеПерсональныхГруппДоступа) + И + Объект.Наименование = НаименованиеПерсональныхГруппДоступа Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Это наименование зарезервировано.'"), + , + "Объект.Наименование", + , + Отказ); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Help/ru.html index 5c428dc53..e0447921f 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 e487aa49f..b31fde678 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаСписка/Module.bsl @@ -4,8 +4,16 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - РодительПерсональныхГруппДоступа = УправлениеДоступом.РодительПерсональныхГруппДоступа(Истина); - УпрощенныйИнтерфейсНастройкиПравДоступа = УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + РодительПерсональныхГруппДоступа = УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа(Истина); + + УпрощенныйИнтерфейсНастройкиПравДоступа = + УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); + Если УпрощенныйИнтерфейсНастройкиПравДоступа Тогда Элементы.ФормаСоздать.Видимость = Ложь; Элементы.ФормаСкопировать.Видимость = Ложь; @@ -18,7 +26,10 @@ Элементы.Профиль.Видимость = Ложь; Элементы.Список.Отображение = ОтображениеТаблицы.Список; Автозаголовок = Ложь; - Заголовок = УправлениеДоступом.ЗаголовокПодчиненнойФормы(НСтр("ru = 'Группы доступа: %1 (%2)'"), Параметры.Профиль); + + Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( + НСтр("ru = 'Группы доступа: %1 (%2)'"), Параметры.Профиль); + Элементы.ФормаСоздатьГруппу.Видимость = Ложь; Элементы.СписокКонтекстноеМенюСоздатьГруппу.Видимость = Ложь; КонецЕсли; @@ -28,8 +39,10 @@ КонецЕсли; Если ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи) Тогда - ФрагментПолученияПредставленияВнешнегоПользователя = "ЕстьNULL(ВЫРАЗИТЬ(ГруппыДоступа.Пользователь КАК Справочник.ВнешниеПользователи).Наименование, &ОшибкаОбъектНеНайден)"; - Список.ТекстЗапроса = СтрЗаменить(Список.ТекстЗапроса, "&ОшибкаОбъектНеНайден", ФрагментПолученияПредставленияВнешнегоПользователя); + Список.ТекстЗапроса = СтрЗаменить( + Список.ТекстЗапроса, + "&ОшибкаОбъектНеНайден", + "ЕстьNULL(ВЫРАЗИТЬ(ГруппыДоступа.Пользователь КАК Справочник.ВнешниеПользователи).Наименование, &ОшибкаОбъектНеНайден)"); КонецЕсли; СписокНедоступныхГрупп = Новый СписокЗначений; @@ -40,25 +53,36 @@ Список.Отбор.Элементы[0].ПравоеЗначение = СписокНедоступныхГрупп; - Список.Параметры.УстановитьЗначениеПараметра("РежимВыбора", Параметры.РежимВыбора); - Список.Параметры.УстановитьЗначениеПараметра("РежимВыбораТолькоГрупп", Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы); - Список.Параметры.УстановитьЗначениеПараметра("ОшибкаОбъектНеНайден", НСтр("ru = '<Объект не найден>'")); + Список.Параметры.УстановитьЗначениеПараметра( + "РежимВыбора", + Параметры.РежимВыбора); + + Список.Параметры.УстановитьЗначениеПараметра( + "РежимВыбораТолькоГрупп", + Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы); + + Список.Параметры.УстановитьЗначениеПараметра( + "ОшибкаОбъектНеНайден", + НСтр("ru = '<Объект не найден>'")); Если Параметры.РежимВыбора Тогда - // Отбор не помеченных на удаление + // Отбор не помеченных на удаление. Список.Отбор.Элементы[1].Использование = Истина; Элементы.Список.РежимВыбора = Истина; Элементы.Список.ВыборГруппИЭлементов = Параметры.ВыборГруппИЭлементов; Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда + + Элементы.Список.НачальноеОтображениеДерева = + НачальноеОтображениеДерева.РаскрыватьВерхнийУровень; + Элементы.Список.Отображение = ОтображениеТаблицы.Дерево; - Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВерхнийУровень; КонецЕсли; АвтоЗаголовок = Ложь; Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда - // Режим подбора + // Режим подбора. Элементы.Список.МножественныйВыбор = Истина; Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный; @@ -77,14 +101,18 @@ Процедура СписокПриАктивизацииСтроки(Элемент) Если Элементы.Список.ТекущиеДанные <> Неопределено Тогда + ПереносДопустим = НЕ ЗначениеЗаполнено(Элементы.Список.ТекущиеДанные.Пользователь) И Элементы.Список.ТекущиеДанные.Ссылка <> РодительПерсональныхГруппДоступа; + Если Элементы.Найти("ФормаПеренестиЭлемент") <> Неопределено Тогда Элементы.ФормаПеренестиЭлемент.Доступность = ПереносДопустим; КонецЕсли; + Если Элементы.Найти("СписокКонтекстноеМенюПеренестиЭлемент") <> Неопределено Тогда Элементы.СписокКонтекстноеМенюПеренестиЭлемент.Доступность = ПереносДопустим; КонецЕсли; + Если Элементы.Найти("СписокПеренестиЭлемент") <> Неопределено Тогда Элементы.СписокПеренестиЭлемент.Доступность = ПереносДопустим; КонецЕсли; @@ -106,18 +134,22 @@ Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Если Родитель = РодительПерсональныхГруппДоступа Тогда - // + Если Группа Тогда Предупреждение(НСтр("ru = 'В этой группе не используются подгруппы.'")); + ИначеЕсли УпрощенныйИнтерфейсНастройкиПравДоступа Тогда Предупреждение(НСтр("ru = 'Персональные группы доступа |создаются только в форме ""Права доступа"".'")); Иначе Предупреждение(НСтр("ru = 'Персональные группы доступа не используются.'")); КонецЕсли; + Отказ = Истина; - // - ИначеЕсли НЕ Группа И УпрощенныйИнтерфейсНастройкиПравДоступа Тогда + + ИначеЕсли НЕ Группа + И УпрощенныйИнтерфейсНастройкиПравДоступа Тогда + Предупреждение(НСтр("ru = 'Используются только персональные группы доступа, |которые создаются только в форме ""Права доступа"".'")); Отказ = Истина; @@ -131,7 +163,7 @@ Если Строка = РодительПерсональныхГруппДоступа Тогда СтандартнаяОбработка = Ложь; Предупреждение(НСтр("ru = 'Эта папка только для персональных групп доступа.'")); - // + ИначеЕсли ПараметрыПеретаскивания.Значение = РодительПерсональныхГруппДоступа Тогда СтандартнаяОбработка = Ложь; Предупреждение(НСтр("ru = 'Папка персональных групп доступа не переносится.'")); diff --git a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Help/ru.html index dfdfae052..a0d80e4a7 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 829d276e6..97b74d0bb 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/Forms/ФормаЭлемента/Module.bsl @@ -4,19 +4,25 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда НачальнаяНастройкаПриЧтенииИСоздании(Объект); КонецЕсли; - //** Подготовка постоянных коллекций + // Заполнение вспомогательных данных. - // Заполнение списка видов доступа через права по значениям доступа - Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина)) Цикл + // Заполнение списка видов доступа через права по значениям доступа. + Отбор = Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина); + Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа().НайтиСтроки(Отбор) Цикл ВидыДоступаЧерезПраваПоЗначениямДоступа.Добавить(СвойстваВидаДоступа.ВидДоступа); КонецЦикла; - // Заполнение типов значений доступа всех видов доступа - Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа() Цикл + // Заполнение типов значений доступа всех видов доступа. + Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа() Цикл Для каждого Тип Из СвойстваВидаДоступа.ВидДоступа.ТипЗначения.Типы() Цикл МассивТипов = Новый Массив; МассивТипов.Добавить(Тип); @@ -26,7 +32,9 @@ Если Метаданные.Перечисления.Найти(МетаданныеТипа.Имя) = МетаданныеТипа Тогда ПредставлениеТипа = МетаданныеТипа.Представление(); Иначе - ПредставлениеТипа = ?(ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта), МетаданныеТипа.ПредставлениеОбъекта, МетаданныеТипа.Представление()); + ПредставлениеТипа = ?(ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта), + МетаданныеТипа.ПредставлениеОбъекта, + МетаданныеТипа.Представление()); КонецЕсли; НоваяСтрока = ТипыЗначенийДоступаВидовДоступа.Добавить(); @@ -37,24 +45,29 @@ КонецЦикла; ИспользоватьВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей(); - СправочникВнешниеПользователиДоступен = ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); - СписокТиповПользователей.Добавить(Тип("СправочникСсылка.Пользователи"), "Пользователи"); - СписокТиповПользователей.Добавить(Тип("СправочникСсылка.ВнешниеПользователи"), "ВнешниеПользователи"); + СправочникВнешниеПользователиДоступен = ПравоДоступа( + "Просмотр", Метаданные.Справочники.ВнешниеПользователи); - // Заполнение списка выбора типа пользователей + СписокТиповПользователей.Добавить( + Тип("СправочникСсылка.Пользователи"), + "Пользователи"); + + СписокТиповПользователей.Добавить( + Тип("СправочникСсылка.ВнешниеПользователи"), + "ВнешниеПользователи"); + + // Заполнение списка выбора типа пользователей. ЗаполнитьСписокТиповПользователей(); - УстановитьПривилегированныйРежим(Истина); + // Установка постоянной доступности свойств. - //** Установка постоянной доступности свойств - - // Определение необходимости настройки ограничений доступа + // Определение необходимости настройки ограничений доступа. Если НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда Элементы.Доступ.Видимость = Ложь; КонецЕсли; - // Установка доступности при открытии формы только для просмотра + // Установка доступности при открытии формы только для просмотра. Элементы.ПользователиПодобрать.Доступность = НЕ ТолькоПросмотр; Элементы.КонтекстноеМенюПользователиПодобрать.Доступность = НЕ ТолькоПросмотр; Элементы.ВидыДоступаИзменить.Доступность = НЕ ТолькоПросмотр; @@ -67,12 +80,13 @@ Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") И Объект.Профиль <> ПредопределенноеЗначение("Справочник.ПрофилиГруппДоступа.Администратор") Тогда - Ответ = Вопрос(НСтр("ru = 'У группы доступа Администраторы должен быть профиль Администратор. - | - |Установить профиль в группе доступа (нет - открыть только для просмотра)?'"), - РежимДиалогаВопрос.ДаНет, - , - КодВозвратаДиалога.Нет); + Ответ = Вопрос( + НСтр("ru = 'У группы доступа Администраторы должен быть профиль Администратор. + | + |Установить профиль в группе доступа (нет - открыть только для просмотра)?'"), + РежимДиалогаВопрос.ДаНет, + , + КодВозвратаДиалога.Нет); Если Ответ = КодВозвратаДиалога.Да Тогда Объект.Профиль = ПредопределенноеЗначение("Справочник.ПрофилиГруппДоступа.Администратор"); @@ -82,14 +96,16 @@ КонецЕсли; КонецЕсли; - Если НЕ ТолькоПросмотр И ИзменилсяСоставВидовДоступаПриЧтении Тогда + Если НЕ ТолькоПросмотр + И ИзменилсяСоставВидовДоступаПриЧтении Тогда - Ответ = Вопрос(НСтр("ru = 'Изменился состав видов доступа профиля этой группы доступа. - | - |Обновить виды доступа в группе доступа (нет - открыть только для просмотра)?'"), - РежимДиалогаВопрос.ДаНет, - , - КодВозвратаДиалога.Нет); + Ответ = Вопрос( + НСтр("ru = 'Изменился состав видов доступа профиля этой группы доступа. + | + |Обновить виды доступа в группе доступа (нет - открыть только для просмотра)?'"), + РежимДиалогаВопрос.ДаНет, + , + КодВозвратаДиалога.Нет); Если Ответ = КодВозвратаДиалога.Да Тогда ОбновитьСоставВидовДоступа(); @@ -102,7 +118,7 @@ И НЕ ЗначениеЗаполнено(Объект.Ссылка) И ТипЗнч(ВладелецФормы) = Тип("ТаблицаФормы") И ВладелецФормы.Родитель.Параметры.Свойство("Профиль") Тогда - // + Если ЗначениеЗаполнено(ВладелецФормы.Родитель.Параметры.Профиль) Тогда Объект.Профиль = ВладелецФормы.Родитель.Параметры.Профиль; КонецЕсли; @@ -113,6 +129,11 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + НачальнаяНастройкаПриЧтенииИСоздании(ТекущийОбъект); КонецПроцедуры @@ -121,14 +142,17 @@ Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда - // Ответственный не может менять что-либо, кроме состава пользователей + // Ответственный не может менять что-либо, кроме состава пользователей. // В целях предотвращения изменения группы доступа на клиенте в запрещенных - // частях, выполняется повторное чтение объекта + // частях, выполняется повторное чтение объекта. ВосстановитьОбъектБезУчастниковГруппы(ТекущийОбъект); КонецЕсли; ТекущийОбъект.Пользователи.Очистить(); - Если ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда + + Если ТекущийОбъект.Ссылка <> Справочники.ГруппыДоступа.Администраторы + И ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда + Если ИспользованиеПерсональногоДоступа Тогда ТекущийОбъект.Пользователи.Добавить().Пользователь = ТекущийОбъект.Пользователь; КонецЕсли; @@ -138,10 +162,6 @@ КонецЦикла; КонецЕсли; - Если ТекущийОбъект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда - Объект.Администратор = Неопределено; - КонецЕсли; - КонецПроцедуры &НаСервере @@ -149,6 +169,12 @@ ЗаполнитьСвойстваВидовДоступаВФорме(); + Если НЕ Объект.ПометкаУдаления + И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Профиль, "ПометкаУдаления") = Истина Тогда + + ПараметрыЗаписи.Вставить("ПредупредитьЧтоПрофильПомеченНаУдаление"); + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -156,6 +182,12 @@ Оповестить("Запись_ГруппыДоступа", Новый Структура, Объект.Ссылка); + Если ПараметрыЗаписи.Свойство("ПредупредитьЧтоПрофильПомеченНаУдаление") Тогда + + Предупреждение(НСтр("ru = 'Группа доступа не влияет на права участников + |так как её профиль помечен на удаление.'")); + КонецЕсли; + КонецПроцедуры &НаСервере @@ -243,7 +275,7 @@ Пользователи.НайтиНеоднозначныхПользователейИБ(); - // Проверка пустого списка пользователей ИБ в группе доступа Администраторы + // Проверка пустого списка пользователей ИБ в группе доступа Администраторы. УстановитьПривилегированныйРежим(Истина); НайденПользовательИБ = Ложь; @@ -259,6 +291,7 @@ КонецЦикла; Если НЕ НайденПользовательИБ Тогда + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "ПользователиГруппы", НСтр("ru = 'В группе доступа Администраторы @@ -302,8 +335,10 @@ КонецЕсли; // Проверка наличия повторяющихся значений. - НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки( - Новый Структура("ВидДоступа, ЗначениеДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа, ТекущаяСтрока.ЗначениеДоступа)); + Отбор = Новый Структура; + Отбор.Вставить("ВидДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа); + Отбор.Вставить("ЗначениеДоступа", ТекущаяСтрока.ЗначениеДоступа); + НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки(Отбор); Если НайденныеЗначения.Количество() > 1 Тогда Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор(); @@ -328,7 +363,10 @@ ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект")); ТекущийОбъект = РеквизитФормыВЗначение("Объект"); - ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверенныеРеквизитыОбъекта", ПроверенныеРеквизитыОбъекта); + + ТекущийОбъект.ДополнительныеСвойства.Вставить( + "ПроверенныеРеквизитыОбъекта", ПроверенныеРеквизитыОбъекта); + Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда Отказ = Истина; КонецЕсли; @@ -350,15 +388,18 @@ СтандартнаяОбработка = Ложь; - ВыбранныйЭлемент = ВыбратьИзСписка(ТипыПользователей, Элемент, ТипыПользователей.НайтиПоЗначению(Объект.ТипПользователей)); + ВыбранныйЭлемент = ВыбратьИзСписка( + ТипыПользователей, + Элемент, + ТипыПользователей.НайтиПоЗначению(Объект.ТипПользователей)); Если ВыбранныйЭлемент <> Неопределено И Объект.ТипПользователей <> ВыбранныйЭлемент.Значение Тогда - // + Модифицированность = Истина; Объект.ТипПользователей = ВыбранныйЭлемент.Значение; ПредставлениеТипаПользователей = ВыбранныйЭлемент.Представление; - // + Если Объект.ТипПользователей <> Неопределено Тогда УдалитьНеТипичныхПользователей(); КонецЕсли; @@ -394,11 +435,16 @@ Процедура ПользователиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Если Копирование Тогда + Если Элемент.ТекущиеДанные.ПолучитьРодителя() <> Неопределено Тогда Отказ = Истина; - Элементы.Пользователи.ТекущаяСтрока = Элемент.ТекущиеДанные.ПолучитьРодителя().ПолучитьИдентификатор(); + + Элементы.Пользователи.ТекущаяСтрока = + Элемент.ТекущиеДанные.ПолучитьРодителя().ПолучитьИдентификатор(); + Элементы.Пользователи.СкопироватьСтроку(); КонецЕсли; + ИначеЕсли Элементы.Пользователи.ТекущаяСтрока <> Неопределено Тогда Отказ = Истина; Элементы.Пользователи.СкопироватьСтроку(); @@ -411,7 +457,10 @@ Если Элемент.ТекущиеДанные.ПолучитьРодителя() <> Неопределено Тогда Отказ = Истина; - Элементы.Пользователи.ТекущаяСтрока = Элемент.ТекущиеДанные.ПолучитьРодителя().ПолучитьИдентификатор(); + + Элементы.Пользователи.ТекущаяСтрока = + Элемент.ТекущиеДанные.ПолучитьРодителя().ПолучитьИдентификатор(); + Элементы.Пользователи.ИзменитьСтроку(); КонецЕсли; @@ -425,22 +474,27 @@ Если СтрокаРодителя <> Неопределено Тогда Отказ = Истина; - Если ТипЗнч(СтрокаРодителя.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") Тогда - // - Предупреждение(НСтр("ru = 'Пользователи групп отображаются для сведения, - |что они получают доступ групп пользователей. - |Их нельзя удалить в этом списке.'")); - // - ИначеЕсли ТипЗнч(СтрокаРодителя.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда - // - Предупреждение(НСтр("ru = 'Внешние пользователи групп отображаются для сведения, - |что они получают доступ групп внешних пользователей. - |Их нельзя удалить в этом списке.'")); - // - Иначе // тип родителя - пользователь или внешний пользователь - Предупреждение(НСтр("ru = 'Руководители отображаются для сведения, - |что они получают доступ подчиненных. - |Их нельзя удалить в этом списке.'")); + Если ТипЗнч(СтрокаРодителя.Пользователь) = + Тип("СправочникСсылка.ГруппыПользователей") Тогда + + Предупреждение( + НСтр("ru = 'Пользователи групп отображаются для сведения, + |что они получают доступ групп пользователей. + |Их нельзя удалить в этом списке.'")); + + ИначеЕсли ТипЗнч(СтрокаРодителя.Пользователь) = + Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + Предупреждение( + НСтр("ru = 'Внешние пользователи групп отображаются для сведения, + |что они получают доступ групп внешних пользователей. + |Их нельзя удалить в этом списке.'")); + + Иначе // Тип родителя - пользователь или внешний пользователь. + Предупреждение( + НСтр("ru = 'Руководители отображаются для сведения, + |что они получают доступ подчиненных. + |Их нельзя удалить в этом списке.'")); КонецЕсли; КонецЕсли; @@ -455,7 +509,8 @@ Если Элемент.ТекущиеДанные.Пользователь = Неопределено Тогда Элемент.ТекущиеДанные.НомерКартинки = -1; - Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"); + Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение( + "Справочник.Пользователи.ПустаяСсылка"); КонецЕсли; КонецПроцедуры @@ -463,9 +518,10 @@ &НаКлиенте Процедура ПользователиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) - Если НоваяСтрока И - Элемент.ТекущиеДанные <> Неопределено И - Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка") Тогда + Если НоваяСтрока + И Элемент.ТекущиеДанные <> Неопределено + И Элемент.ТекущиеДанные.Пользователь = ПредопределенноеЗначение( + "Справочник.Пользователи.ПустаяСсылка") Тогда Элемент.ТекущиеДанные.Пользователь = Неопределено; КонецЕсли; @@ -511,7 +567,7 @@ &НаКлиенте Процедура ПользователиПослеУдаления(Элемент) - // Установить отображение дерева + // Установка отображения дерева. ЕстьРуководители = Ложь; Для каждого Элемент Из ПользователиГруппы.ПолучитьЭлементы() Цикл Если Элемент.ПолучитьЭлементы().Количество() > 0 Тогда @@ -519,7 +575,9 @@ Прервать; КонецЕсли; КонецЦикла; - Элементы.Пользователи.Отображение = ?(ЕстьРуководители, ОтображениеТаблицы.Дерево, ОтображениеТаблицы.Список); + + Элементы.Пользователи.Отображение = + ?(ЕстьРуководители, ОтображениеТаблицы.Дерево, ОтображениеТаблицы.Список); КонецПроцедуры @@ -550,8 +608,9 @@ СтандартнаяОбработка = Ложь; - Элементы.Пользователи.ТекущиеДанные.Пользователь = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"); Элементы.Пользователи.ТекущиеДанные.НомерКартинки = -1; + Элементы.Пользователи.ТекущиеДанные.Пользователь = ПредопределенноеЗначение( + "Справочник.Пользователи.ПустаяСсылка"); КонецПроцедуры @@ -560,7 +619,11 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст); + Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда + ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст, Ложь, Ложь); + Иначе + ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -570,7 +633,11 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст); + Если Объект.Ссылка = ПредопределенноеЗначение("Справочник.ГруппыДоступа.Администраторы") Тогда + ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст, Ложь, Ложь); + Иначе + ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -642,7 +709,6 @@ Элементы.ВидыДоступа.ТекущиеДанные.ДоступРазрешен = (ВыбранноеЗначение = "ВсеРазрешены"); Модифицированность = Истина; - // ПриИзмененииТекущегоВидаДоступа(ЭтаФорма); КонецПроцедуры @@ -653,10 +719,15 @@ &НаКлиенте Процедура ЗначенияДоступаПриИзменении(Элемент) - Если Элемент.ТекущиеДанные <> Неопределено И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда + Если Элемент.ТекущиеДанные <> Неопределено + И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда + Элемент.ТекущиеДанные.ВидДоступа = ТекущийВидДоступа; + Отбор = Новый Структура("ВидДоступа", ТекущийВидДоступа); - Элемент.ТекущиеДанные.НомерСтрокиПоВиду = Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество(); + + Элемент.ТекущиеДанные.НомерСтрокиПоВиду = + Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество(); КонецЕсли; ОбновитьНомерСтрокиПоВиду(ЭтаФорма, Элементы.ВидыДоступа.ТекущиеДанные); @@ -671,8 +742,9 @@ Элемент.ТекущиеДанные.ЗначениеДоступа = ТекущиеТипыЗначенийДоступа[0].Значение; КонецЕсли; - Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено - И ТекущиеТипыЗначенийДоступа.Количество() > 1; + Элементы.ЗначениеДоступа.КнопкаОчистки + = ТекущийТипЗначенияДоступа <> Неопределено + И ТекущиеТипыЗначенийДоступа.Количество() > 1; КонецПроцедуры @@ -692,29 +764,38 @@ ТекущиеДанные.ЗначениеДоступа = ТекущийТипЗначенияДоступа; КонецЕсли; - Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено - И ТекущиеТипыЗначенийДоступа.Количество() > 1; + Элементы.ЗначениеДоступа.КнопкаОчистки + = ТекущийТипЗначенияДоступа <> Неопределено + И ТекущиеТипыЗначенийДоступа.Количество() > 1; - Если ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка") ИЛИ - ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ГруппыПользователей.ПустаяСсылка") Тогда + Если ТекущийТипЗначенияДоступа = + ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка") + + ИЛИ ТекущийТипЗначенияДоступа = + ПредопределенноеЗначение("Справочник.ГруппыПользователей.ПустаяСсылка") Тогда СтандартнаяОбработка = Ложь; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина); + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); - ИначеЕсли ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка") ИЛИ - ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ПустаяСсылка") Тогда - + ИначеЕсли ТекущийТипЗначенияДоступа = + ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка") + + ИЛИ ТекущийТипЗначенияДоступа = + ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ПустаяСсылка") Тогда + СтандартнаяОбработка = Ложь; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент); КонецЕсли; @@ -723,19 +804,31 @@ &НаКлиенте Процедура ЗначениеДоступаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ТекущиеДанные = Элементы.ЗначенияДоступа.ТекущиеДанные; + Если ВыбранноеЗначение = Тип("СправочникСсылка.Пользователи") ИЛИ ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыПользователей") Тогда СтандартнаяОбработка = Ложь; - НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа; - ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", Новый Структура("ВыборГруппПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент); - + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина); + + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); + ИначеЕсли ВыбранноеЗначение = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда СтандартнаяОбработка = Ложь; - НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа; - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", Новый Структура("ВыборГруппВнешнихПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); + + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент); КонецЕсли; КонецПроцедуры @@ -757,16 +850,23 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - Если ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи") - ИЛИ ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда + Если ТекущийВидДоступа = + ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи") + + ИЛИ ТекущийВидДоступа = + ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя( + ДанныеВыбора = СформироватьДанныеВыбораПользователя( Текст, , - ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"), - ТекущийВидДоступа <> ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи")); + ТекущийВидДоступа = + ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"), + + ТекущийВидДоступа <> + ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи")); Иначе - ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь); + ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа( + Текст, ТекущийВидДоступа, Ложь); КонецЕсли; КонецЕсли; @@ -778,16 +878,23 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - Если ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи") - ИЛИ ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда + Если ТекущийВидДоступа = + ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи") + + ИЛИ ТекущийВидДоступа = + ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя( + ДанныеВыбора = СформироватьДанныеВыбораПользователя( Текст, , - ТекущийВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"), - ТекущийВидДоступа <> ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи")); + ТекущийВидДоступа = + ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"), + + ТекущийВидДоступа <> + ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи")); Иначе - ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь); + ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа( + Текст, ТекущийВидДоступа, Ложь); КонецЕсли; КонецЕсли; @@ -811,32 +918,54 @@ Если ТекущийОбъект.Ссылка <> Справочники.ГруппыДоступа.Администраторы Тогда - // Подготовка к режиму персональной группы доступа + // Подготовка к режиму персональной группы доступа. Если ЗначениеЗаполнено(ТекущийОбъект.Пользователь) Тогда + АвтоЗаголовок = Ложь; - Заголовок = ТекущийОбъект.Наименование + ": " + ТекущийОбъект.Пользователь + " " + НСтр("ru = '(Группа доступа)'"); - // - ИспользованиеПерсональногоДоступа = ТекущийОбъект.Пользователи.Найти(ТекущийОбъект.Пользователь, "Пользователь") <> Неопределено; + + Заголовок + = ТекущийОбъект.Наименование + + ": " + + ТекущийОбъект.Пользователь + + " " + + НСтр("ru = '(Группа доступа)'"); + + ИспользованиеПерсональногоДоступа = ТекущийОбъект.Пользователи.Найти( + ТекущийОбъект.Пользователь, "Пользователь") <> Неопределено; Иначе АвтоЗаголовок = Истина; КонецЕсли; - Элементы.Наименование.ТолькоПросмотр = ЗначениеЗаполнено(ТекущийОбъект.Пользователь); - Элементы.Родитель.ТолькоПросмотр = ЗначениеЗаполнено(ТекущийОбъект.Пользователь); - Элементы.Профиль.ТолькоПросмотр = ЗначениеЗаполнено(ТекущийОбъект.Пользователь); - Элементы.СвойстваПерсональнойГруппы.Видимость = ЗначениеЗаполнено(ТекущийОбъект.Пользователь); - Элементы.ПредставлениеТипаПользователей.Видимость = НЕ ЗначениеЗаполнено(ТекущийОбъект.Пользователь); - Элементы.ПользователиГруппы.Видимость = НЕ ЗначениеЗаполнено(ТекущийОбъект.Пользователь); - Элементы.АдминистраторПерсональнойГруппы.Видимость = ЗначениеЗаполнено(ТекущийОбъект.Пользователь); - Элементы.ПользователиИДоступ.ОтображениеСтраниц = ?(ЗначениеЗаполнено(ТекущийОбъект.Пользователь), ОтображениеСтраницФормы.Нет, ОтображениеСтраницФормы.ЗакладкиСверху); - Элементы.ВидыДоступа.ПоложениеЗаголовка = ?(ЗначениеЗаполнено(ТекущийОбъект.Пользователь), ПоложениеЗаголовкаЭлементаФормы.Верх, ПоложениеЗаголовкаЭлементаФормы.Нет); - Элементы.ПредставлениеТипаПользователей.Видимость = НЕ ЗначениеЗаполнено(ТекущийОбъект.Пользователь) - И ( ВнешниеПользователи.ИспользоватьВнешнихПользователей() - ИЛИ Объект.ТипПользователей <> Неопределено - И ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи") ); - // - Элементы.ПользовательВладелец.ТолькоПросмотр = УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); - // Подготовка к режиму редактирования пользователей администратором участников + ПользовательЗаполнен = ЗначениеЗаполнено(ТекущийОбъект.Пользователь); + + Элементы.Наименование.ТолькоПросмотр = ПользовательЗаполнен; + Элементы.Родитель.ТолькоПросмотр = ПользовательЗаполнен; + Элементы.Профиль.ТолькоПросмотр = ПользовательЗаполнен; + Элементы.СвойстваПерсональнойГруппы.Видимость = ПользовательЗаполнен; + Элементы.ПредставлениеТипаПользователей.Видимость = НЕ ПользовательЗаполнен; + Элементы.ПользователиГруппы.Видимость = НЕ ПользовательЗаполнен; + Элементы.АдминистраторПерсональнойГруппы.Видимость = ПользовательЗаполнен; + + Элементы.ПользователиИДоступ.ОтображениеСтраниц = + ?(ПользовательЗаполнен, + ОтображениеСтраницФормы.Нет, + ОтображениеСтраницФормы.ЗакладкиСверху); + + Элементы.ВидыДоступа.ПоложениеЗаголовка = + ?(ПользовательЗаполнен, + ПоложениеЗаголовкаЭлементаФормы.Верх, + ПоложениеЗаголовкаЭлементаФормы.Нет); + + Элементы.ПредставлениеТипаПользователей.Видимость + = НЕ ПользовательЗаполнен + И ( ВнешниеПользователи.ИспользоватьВнешнихПользователей() + ИЛИ Объект.ТипПользователей <> Неопределено + И ТипЗнч(Объект.ТипПользователей) <> Тип("СправочникСсылка.Пользователи")); + + Элементы.ПользовательВладелец.ТолькоПросмотр + = УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); + + // Подготовка к режиму редактирования пользователей администратором участников. Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; @@ -864,7 +993,7 @@ ОбновитьСоставВидовДоступа(Истина); - // Подготовка дерева пользователей + // Подготовка дерева пользователей. ДеревоПользователей = ПользователиГруппы.ПолучитьЭлементы(); ДеревоПользователей.Очистить(); Для каждого СтрокаТЧ Из ТекущийОбъект.Пользователи Цикл @@ -897,12 +1026,20 @@ &НаСервере Процедура ЗаполнитьСписокТиповПользователей() - ТипыПользователей.Добавить(Неопределено, НСтр("ru = 'Произвольные участники'")); - ТипыПользователей.Добавить(Справочники.Пользователи.ПустаяСсылка(), НСтр("ru = 'Обычные пользователи'")); + ТипыПользователей.Добавить( + Неопределено, + НСтр("ru = 'Произвольные участники'")); + + ТипыПользователей.Добавить( + Справочники.Пользователи.ПустаяСсылка(), + НСтр("ru = 'Обычные пользователи'")); Если ИспользоватьВнешнихПользователей Тогда - Для каждого ТипСсылкиОбъектаАвторизации ИЗ Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы() Цикл + ТипыСсылокОбъектовАвторизации = + Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип.Типы(); + + Для каждого ТипСсылкиОбъектаАвторизации ИЗ ТипыСсылокОбъектовАвторизации Цикл МетаданныеТипа = Метаданные.НайтиПоТипу(ТипСсылкиОбъектаАвторизации); @@ -919,11 +1056,12 @@ КонецЕсли; НайденныйЭлемент = ТипыПользователей.НайтиПоЗначению(Объект.ТипПользователей); + ПредставлениеТипаПользователей = ?(НайденныйЭлемент = Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неизвестный тип ""%1""'"), - Строка(ТипЗнч(Объект.ТипПользователей))), + НСтр("ru = 'Неизвестный тип ""%1""'"), + Строка(ТипЗнч(Объект.ТипПользователей))), НайденныйЭлемент.Представление); КонецПроцедуры @@ -941,19 +1079,26 @@ Индекс = Объект.Пользователи.Количество()-1; Пока Индекс >= 0 Цикл - Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь) <> Тип("СправочникСсылка.Пользователи") И - ТипЗнч(Объект.Пользователи[Индекс].Пользователь) <> Тип("СправочникСсылка.ГруппыПользователей") Тогда + Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь) + <> Тип("СправочникСсылка.Пользователи") + + И ТипЗнч(Объект.Пользователи[Индекс].Пользователь) + <> Тип("СправочникСсылка.ГруппыПользователей") Тогда Объект.Пользователи.Удалить(Индекс); КонецЕсли; + Индекс = Индекс - 1; КонецЦикла; Иначе Индекс = Объект.Пользователи.Количество()-1; Пока Индекс >= 0 Цикл - Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") И - ТипЗнч(Объект.Пользователи[Индекс].Пользователь) <> Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + Если ТипЗнч(Объект.Пользователи[Индекс].Пользователь) + <> Тип("СправочникСсылка.ВнешниеПользователи") + + И ТипЗнч(Объект.Пользователи[Индекс].Пользователь) + <> Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда Объект.Пользователи.Удалить(Индекс); КонецЕсли; @@ -980,12 +1125,17 @@ | И ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипОбъектовАвторизации) <> &ТипВнешнихПользователей | И ГруппыВнешнихПользователей.Ссылка В(&ВыбранныеВнешниеПользователиИГруппы)"); - Запрос.УстановитьПараметр("ВыбранныеВнешниеПользователиИГруппы", Объект.Пользователи.Выгрузить().ВыгрузитьКолонку("Пользователь")); + Запрос.УстановитьПараметр( + "ВыбранныеВнешниеПользователиИГруппы", + Объект.Пользователи.Выгрузить().ВыгрузитьКолонку("Пользователь")); + Запрос.УстановитьПараметр("ТипВнешнихПользователей", ТипЗнч(Объект.ТипПользователей)); Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл - НайденныеСтроки = Объект.Пользователи.НайтиСтроки(Новый Структура("Пользователь", Выборка.Ссылка)); + Отбор = Новый Структура("Пользователь", Выборка.Ссылка); + НайденныеСтроки = Объект.Пользователи.НайтиСтроки(Отбор); Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл Объект.Пользователи.Удалить(Объект.Пользователи.Индекс(НайденнаяСтрока)); КонецЦикла; @@ -998,7 +1148,8 @@ &НаСервере Процедура ОбновитьСоставВидовДоступа(Знач ПриЧтенииНаСервере = Ложь) - Запрос = Новый Запрос( + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ | ПрофилиГруппДоступаВидыДоступа.ВидДоступа, | ПрофилиГруппДоступаВидыДоступа.Предустановленный, @@ -1007,8 +1158,10 @@ | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПрофилиГруппДоступаВидыДоступа |ГДЕ | ПрофилиГруппДоступаВидыДоступа.Ссылка = &Ссылка - | И ПрофилиГруппДоступаВидыДоступа.ВидДоступа.Предопределенный"); + | И ПрофилиГруппДоступаВидыДоступа.ВидДоступа.Предопределенный"; + Запрос.УстановитьПараметр("Ссылка", Объект.Профиль); + УстановитьПривилегированныйРежим(Истина); ВидыДоступаПрофиля = Запрос.Выполнить().Выгрузить(); УстановитьПривилегированныйРежим(Ложь); @@ -1019,12 +1172,12 @@ Для каждого СтрокаТЧ Из ВидыДоступаПрофиля Цикл Отбор = Новый Структура("ВидДоступа", СтрокаТЧ.ВидДоступа); - СвойстваВидаДоступа = УправлениеДоступом.СвойстваВидаДоступа(СтрокаТЧ.ВидДоступа); + СвойстваВидаДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(СтрокаТЧ.ВидДоступа); Если СвойстваВидаДоступа <> Неопределено И НЕ СвойстваВидаДоступа.ВидДоступаИспользуетсяВсегда И НЕ СтрокаТЧ.Предустановленный - И Объект.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа", СтрокаТЧ.ВидДоступа)).Количество() = 0 Тогда + И Объект.ВидыДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда ИзменилсяСоставВидовДоступа = Истина; Если ПриЧтенииНаСервере Тогда @@ -1041,21 +1194,25 @@ Индекс = Объект.ВидыДоступа.Количество() - 1; Пока Индекс >= 0 Цикл + ТекущийВидДоступа1 = Объект.ВидыДоступа[Индекс].ВидДоступа; - СвойстваВидаДоступаВПрофиле = ВидыДоступаПрофиля.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа1)); - СвойстваВидаДоступа = УправлениеДоступом.СвойстваВидаДоступа(ТекущийВидДоступа1); + Отбор = Новый Структура("ВидДоступа", ТекущийВидДоступа1); + + СвойстваВидаДоступаВПрофиле = ВидыДоступаПрофиля.НайтиСтроки(Отбор); + СвойстваВидаДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(ТекущийВидДоступа1); + Если СвойстваВидаДоступа = Неопределено ИЛИ СвойстваВидаДоступа.ВидДоступаИспользуетсяВсегда ИЛИ СвойстваВидаДоступаВПрофиле.Количество() > 0 И СвойстваВидаДоступаВПрофиле[0].Предустановленный - ИЛИ ВидыДоступаПрофиля.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа1)).Количество() = 0 Тогда + ИЛИ ВидыДоступаПрофиля.НайтиСтроки(Отбор).Количество() = 0 Тогда ИзменилсяСоставВидовДоступа = Истина; Если ПриЧтенииНаСервере Тогда Прервать; Иначе Объект.ВидыДоступа.Удалить(Индекс); - Для каждого ЭлементКоллекции Из Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа1)) Цикл + Для каждого ЭлементКоллекции Из Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл Объект.ЗначенияДоступа.Удалить(ЭлементКоллекции); КонецЦикла; КонецЕсли; @@ -1063,13 +1220,15 @@ Индекс = Индекс - 1; КонецЦикла; - Модифицированность = Модифицированность ИЛИ ИзменилсяСоставВидовДоступа И НЕ ПриЧтенииНаСервере; + Модифицированность = Модифицированность + ИЛИ ИзменилсяСоставВидовДоступа + И НЕ ПриЧтенииНаСервере; // Установка флажка для запроса у пользователя решения обновить состав видов доступа. Если ПриЧтенииНаСервере - И НЕ Объект.Ссылка.Пустая() // ЭтоНовый + И НЕ Объект.Ссылка.Пустая() // Это новый. И ИзменилсяСоставВидовДоступа - И Пользователи.ЭтоПолноправныйПользователь() // Только администратор может обновлять виды доступа + И Пользователи.ЭтоПолноправныйПользователь() // Только администратор может обновлять виды доступа. И ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "Профиль") = Объект.Профиль Тогда ИзменилсяСоставВидовДоступаПриЧтении = Истина; @@ -1087,7 +1246,8 @@ Индекс = Индекс - 1; КонецЦикла; Для каждого СтрокаТЧ Из ВидыДоступаПрофиля Цикл - Индекс = Объект.ВидыДоступа.Индекс(Объект.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа", СтрокаТЧ.ВидДоступа))[0]); + Отбор = Новый Структура("ВидДоступа", СтрокаТЧ.ВидДоступа); + Индекс = Объект.ВидыДоступа.Индекс(Объект.ВидыДоступа.НайтиСтроки(Отбор)[0]); Объект.ВидыДоступа.Сдвинуть(Индекс, ВидыДоступаПрофиля.Индекс(СтрокаТЧ) - Индекс); КонецЦикла; КонецЕсли; @@ -1099,99 +1259,155 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ПриИзмененииТекущегоВидаДоступа(Знач Контекст) +Процедура ПриИзмененииТекущегоВидаДоступа(Знач Форма) + + Элементы = Форма.Элементы; ЗначенияЗадаются = Ложь; #Если Клиент Тогда - ТекущиеДанные = Контекст.Элементы.ВидыДоступа.ТекущиеДанные; + ТекущиеДанные = Элементы.ВидыДоступа.ТекущиеДанные; #Иначе - ТекущиеДанные = Контекст.Объект.ВидыДоступа.НайтиПоИдентификатору(?(Контекст.Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Контекст.Элементы.ВидыДоступа.ТекущаяСтрока)); + ТекущиеДанные = Форма.Объект.ВидыДоступа.НайтиПоИдентификатору( + ?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, + -1, + Элементы.ВидыДоступа.ТекущаяСтрока)); #КонецЕсли Если ТекущиеДанные <> Неопределено Тогда - Контекст.ТекущийВидДоступа = ТекущиеДанные.ВидДоступа; + Форма.ТекущийВидДоступа = ТекущиеДанные.ВидДоступа; - Если Контекст.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ТекущиеДанные.ВидДоступа) = Неопределено Тогда + Если Форма.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению( + ТекущиеДанные.ВидДоступа) = Неопределено Тогда + ЗначенияЗадаются = Истина; - Контекст.Элементы.ТипыВидовДоступа.ТекущаяСтраница = Контекст.Элементы.ОбычныйВидДоступа; - // Установка отбора значений - Если Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Неопределено - ИЛИ Контекст.Элементы.ЗначенияДоступа.ОтборСтрок.ВидДоступа <> ТекущиеДанные.ВидДоступа Тогда - // - Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("ВидДоступа", ТекущиеДанные.ВидДоступа); + Элементы.ТипыВидовДоступа.ТекущаяСтраница = Элементы.ОбычныйВидДоступа; + + // Установка отбора значений. + Если Элементы.ЗначенияДоступа.ОтборСтрок = Неопределено + ИЛИ Элементы.ЗначенияДоступа.ОтборСтрок.ВидДоступа + <> ТекущиеДанные.ВидДоступа Тогда + + Элементы.ЗначенияДоступа.ОтборСтрок = + Новый ФиксированнаяСтруктура("ВидДоступа", ТекущиеДанные.ВидДоступа); КонецЕсли; Иначе - Контекст.Элементы.ТипыВидовДоступа.ТекущаяСтраница = ?(ТекущиеДанные.ДоступРазрешен, Контекст.Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаПредупреждение, Контекст.Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаИнформация); + Элементы.ТипыВидовДоступа.ТекущаяСтраница = + ?(ТекущиеДанные.ДоступРазрешен, + Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаПредупреждение, + Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаИнформация); КонецЕсли; - // Обновление поля НадписьВидДоступа - Контекст.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ТекущиеДанные.ВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.Пользователи"), - ?(ТекущиеДанные.ДоступРазрешен, - НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'"), - НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'") ), - ?(ТекущиеДанные.ВидДоступа = ПредопределенноеЗначение("ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи"), - ?(ТекущиеДанные.ДоступРазрешен, - НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'"), - НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'") ), - ?(ТекущиеДанные.ДоступРазрешен, - НСтр("ru = 'Запрещенные значения (%1)'"), - НСтр("ru = 'Разрешенные значения (%1)'") ) - ) - ), + // Обновление поля НадписьВидДоступа. + Если ТекущиеДанные.ВидДоступа = ПредопределенноеЗначение( + "ПланВидовХарактеристик.ВидыДоступа.Пользователи") Тогда + + ШаблонНадписи = ?( + ТекущиеДанные.ДоступРазрешен, + НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'"), + НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'") ); + + ИначеЕсли ТекущиеДанные.ВидДоступа = ПредопределенноеЗначение( + "ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи") Тогда + + ШаблонНадписи = ?( + ТекущиеДанные.ДоступРазрешен, + НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'"), + НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'") ); + Иначе + ШаблонНадписи = ?( + ТекущиеДанные.ДоступРазрешен, + НСтр("ru = 'Запрещенные значения (%1)'"), + НСтр("ru = 'Разрешенные значения (%1)'") ); + КонецЕсли; + + Форма.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонНадписи, Строка(ТекущиеДанные.ВидДоступа)); - ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, ТекущиеДанные); + ОбновитьПредставлениеИспользованияВидаДоступа(Форма, ТекущиеДанные); Иначе - Контекст.ТекущийВидДоступа = Неопределено; - Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("ВидДоступа", Неопределено); + Форма.ТекущийВидДоступа = Неопределено; - Если Контекст.Объект.ВидыДоступа.Количество() = 0 Тогда - Контекст.Объект.ЗначенияДоступа.Очистить(); + Элементы.ЗначенияДоступа.ОтборСтрок = + Новый ФиксированнаяСтруктура("ВидДоступа", Неопределено); + + Если Форма.Объект.ВидыДоступа.Количество() = 0 Тогда + Форма.Объект.ЗначенияДоступа.Очистить(); КонецЕсли; КонецЕсли; - Контекст.ТекущийТипЗначенияДоступа = ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.ТекущийТипЗначенияДоступа); - Контекст.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений; - // + Форма.ТекущийТипЗначенияДоступа = + ?(ТекущиеДанные = Неопределено, + Неопределено, + ТекущиеДанные.ТекущийТипЗначенияДоступа); + + Форма.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений; + Если ЗначенияЗадаются Тогда - Для каждого ОписаниеТипаВидаДоступа Из Контекст.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа)) Цикл - Контекст.ТекущиеТипыЗначенийДоступа.Добавить(ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, ОписаниеТипаВидаДоступа.ПредставлениеТипа); + Отбор = Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа); + ОписаниеТиповВидовДоступа = Форма.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Отбор); + + Для каждого ОписаниеТипаВидаДоступа Из ОписаниеТиповВидовДоступа Цикл + + Форма.ТекущиеТипыЗначенийДоступа.Добавить( + ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, + ОписаниеТипаВидаДоступа.ПредставлениеТипа); КонецЦикла; Иначе Если ТекущиеДанные <> Неопределено Тогда - Отбор = Новый Структура("ВидДоступа", Контекст.Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа); - Для каждого Строка Из Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл - Контекст.Объект.ЗначенияДоступа.Удалить(Строка); + Отбор = Новый Структура("ВидДоступа", Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа); + + Для каждого Строка Из Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл + Форма.Объект.ЗначенияДоступа.Удалить(Строка); КонецЦикла КонецЕсли; КонецЕсли; // - Если Контекст.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда - Контекст.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'")); + Если Форма.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда + Форма.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'")); КонецЕсли; - Контекст.Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются; - Контекст.Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы.ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются; + Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются; + + Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы + .ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, ОписаниеВидаДоступа) +Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Форма, ОписаниеВидаДоступа) + + Отбор = Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа); + КоличествоЗначений = Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество(); - КоличествоЗначений = Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа)).Количество(); Если КоличествоЗначений > 0 Тогда - ПрописьЧисла = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = '-го значения,-х значений,-и значений,,,,,,0'")); - ЧислоИПредмет = СтрЗаменить(ПрописьЧислаИПредмета, ПрописьЧисла, Формат(КоличествоЗначений, "ЧГ=")); + + ПрописьЧисла = ЧислоПрописью( + КоличествоЗначений, + "Л = ru_RU", + НСтр("ru = ',,,,,,,,0'")); + + ПрописьЧислаИПредмета = ЧислоПрописью( + КоличествоЗначений, + "Л = ru_RU", + НСтр("ru = '-го значения,-х значений,-и значений,,,,,,0'")); + + ЧислоИПредмет = СтрЗаменить( + ПрописьЧислаИПредмета, + ПрописьЧисла, + Формат(КоличествоЗначений, "ЧГ=")); + ОписаниеВидаДоступа.Использование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(ОписаниеВидаДоступа.ДоступРазрешен, НСтр("ru = 'Все разрешены, кроме %1'"), НСтр("ru = 'Все запрещены, кроме %1'") ), ЧислоИПредмет); - ИначеЕсли Контекст.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ОписаниеВидаДоступа.ВидДоступа) = Неопределено Тогда + + ИначеЕсли Форма.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению( + ОписаниеВидаДоступа.ВидДоступа) = Неопределено Тогда + ОписаниеВидаДоступа.Использование = ?(ОписаниеВидаДоступа.ДоступРазрешен, НСтр("ru = 'Все разрешены, без исключений'"), @@ -1206,10 +1422,10 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьНомерСтрокиПоВиду(Контекст, ОписаниеВидаДоступа) +Процедура ОбновитьНомерСтрокиПоВиду(Форма, ОписаниеВидаДоступа) Отбор = Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа); - ЗначенияДоступаПоВиду = Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Отбор); + ЗначенияДоступаПоВиду = Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор); ТекущийНомер = 1; Для каждого Строка Из ЗначенияДоступаПоВиду Цикл @@ -1220,17 +1436,6 @@ КонецПроцедуры -&НаСервере -Функция СформироватьДанныеВыбораПользователя(Текст) - - Если Объект.Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда - Возврат Пользователи.СформироватьДанныеВыбораПользователя(Текст, Ложь, Ложь); - КонецЕсли; - - Возврат Пользователи.СформироватьДанныеВыбораПользователя(Текст); - -КонецФункции - &НаКлиенте Функция ВыбранТипПользователиИлиВнешниеПользователи(ВыборИПодборВнешнихПользователей) @@ -1248,9 +1453,13 @@ КонецЕсли; Если ИспользоватьВнешнихПользователей Тогда - Элемент = СписокТиповПользователей.ВыбратьЭлемент(НСтр("ru = 'Выбор типа данных'"), СписокТиповПользователей[0]); + + Элемент = СписокТиповПользователей.ВыбратьЭлемент( + НСтр("ru = 'Выбор типа данных'"), СписокТиповПользователей[0]); + Если Элемент <> Неопределено Тогда - ВыборИПодборВнешнихПользователей = Элемент.Значение = Тип("СправочникСсылка.ВнешниеПользователи"); + ВыборИПодборВнешнихПользователей = + Элемент.Значение = Тип("СправочникСсылка.ВнешниеПользователи"); Иначе Возврат Ложь; КонецЕсли; @@ -1276,22 +1485,34 @@ Если ТипыЗначенияДоступа.Количество() = 2 Тогда - Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка")) <> Неопределено - И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.ГруппыПользователей.ПустаяСсылка")) <> Неопределено Тогда + Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение( + "Справочник.Пользователи.ПустаяСсылка")) <> Неопределено + + И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение( + "Справочник.ГруппыПользователей.ПустаяСсылка")) <> Неопределено Тогда + + ТекущийТипЗначенияДоступа = ПредопределенноеЗначение( + "Справочник.Пользователи.ПустаяСсылка"); - ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"); Возврат Истина; КонецЕсли; - Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка")) <> Неопределено - И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение("Справочник.ГруппыВнешнихПользователей.ПустаяСсылка")) <> Неопределено Тогда + Если ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение( + "Справочник.ВнешниеПользователи.ПустаяСсылка")) <> Неопределено + + И ТипыЗначенияДоступа.НайтиПоЗначению(ПредопределенноеЗначение( + "Справочник.ГруппыВнешнихПользователей.ПустаяСсылка")) <> Неопределено Тогда + + ТекущийТипЗначенияДоступа = ПредопределенноеЗначение( + "Справочник.ВнешниеПользователи.ПустаяСсылка"); - ТекущийТипЗначенияДоступа = ПредопределенноеЗначение("Справочник.ВнешниеПользователи.ПустаяСсылка"); Возврат Истина; КонецЕсли; КонецЕсли; - Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент(НСтр("ru = 'Выбор типа данных'"), ТипыЗначенияДоступа[0]); + Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент( + НСтр("ru = 'Выбор типа данных'"), ТипыЗначенияДоступа[0]); + Если Элемент <> Неопределено Тогда ТекущийТипЗначенияДоступа = Элемент.Значение; Возврат Истина; @@ -1308,20 +1529,23 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", ?(Элементы.Пользователи.ТекущиеДанные = Неопределено, Неопределено, Элементы.Пользователи.ТекущиеДанные.Пользователь)); + ПараметрыФормы.Вставить("ТекущаяСтрока", ?( + Элементы.Пользователи.ТекущиеДанные = Неопределено, + Неопределено, + Элементы.Пользователи.ТекущиеДанные.Пользователь)); - Если НЕ Подобрать И - ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) И - ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.Пользователи") ИЛИ - ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") ) Тогда + Если НЕ Подобрать + И ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) + И ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.Пользователи") + ИЛИ ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") ) Тогда ВыборИПодборВнешнихПользователей = Ложь; - ИначеЕсли НЕ Подобрать И - ИспользоватьВнешнихПользователей И - ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) И - ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ - ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") ) Тогда + ИначеЕсли НЕ Подобрать + И ИспользоватьВнешнихПользователей + И ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) + И ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ВнешниеПользователи") + ИЛИ ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") ) Тогда ВыборИПодборВнешнихПользователей = Истина; Иначе @@ -1348,19 +1572,22 @@ ПараметрыФормы.Вставить("ТипОбъектовАвторизации", Объект.ТипПользователей); КонецЕсли; Если СправочникВнешниеПользователиДоступен Тогда - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи); + + ОткрытьФорму( + "Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи); Иначе Предупреждение(НСтр("ru = 'Недостаточно прав для выбора внешних пользователей.'")); КонецЕсли; Иначе - ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи); + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элементы.Пользователи); КонецЕсли; КонецПроцедуры &НаСервере -Процедура ОбновитьПользователейГруппИРуководителейПользователей(ИдентификаторСтроки = Неопределено, ИзмененныеСтроки = Неопределено) +Процедура ОбновитьПользователейГруппИРуководителейПользователей(ИдентификаторСтроки = Неопределено, + ИзмененныеСтроки = Неопределено) УстановитьПривилегированныйРежим(Истина); @@ -1448,16 +1675,20 @@ Если ТипЗнч(Элемент.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") ИЛИ ТипЗнч(Элемент.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда - // Заполнение пользователей группы + // Заполнение пользователей группы. СтарыеПользователи = Элемент.ПолучитьЭлементы(); - НовыеПользователи = РезультатыЗапросов[1].Выгрузить().НайтиСтроки(Новый Структура("ГруппаПользователей", Элемент.Пользователь)); + Отбор = Новый Структура("ГруппаПользователей", Элемент.Пользователь); + НовыеПользователи = РезультатыЗапросов[1].Выгрузить().НайтиСтроки(Отбор); + Если СтарыеПользователи.Количество() <> НовыеПользователи.Количество() Тогда СтарыеПользователи.Очистить(); Для каждого Строка Из НовыеПользователи Цикл НовыйЭлемент = СтарыеПользователи.Добавить(); НовыйЭлемент.Ссылка = Строка.Пользователь; НовыйЭлемент.Пользователь = Строка.Пользователь; - ОбновитьРуководителейПользователя(НовыйЭлемент, РуководителиПодчиненных, ИзмененныеСтроки); + + ОбновитьРуководителейПользователя( + НовыйЭлемент, РуководителиПодчиненных, ИзмененныеСтроки); КонецЦикла; ИзмененныеСтроки.Добавить(Элемент.ПолучитьИдентификатор()); Иначе @@ -1470,9 +1701,10 @@ КонецЕсли; КонецЦикла; - Пользователи.ЗаполнитьНомераКартинокПользователей(ПользователиГруппы, "Ссылка", "НомерКартинки", ИдентификаторСтроки, Истина); + Пользователи.ЗаполнитьНомераКартинокПользователей( + ПользователиГруппы, "Ссылка", "НомерКартинки", ИдентификаторСтроки, Истина); - // Установить отображение дерева + // Установка отображения дерева. ЕстьДерево = Ложь; Для каждого Элемент Из ПользователиГруппы.ПолучитьЭлементы() Цикл Если Элемент.ПолучитьЭлементы().Количество() > 0 Тогда @@ -1487,14 +1719,19 @@ Процедура ОбновитьРуководителейПользователя(Знач ОписаниеПользователя, Знач РуководителиПодчиненных, Знач ИзмененныеСтроки) СтарыеРуководители = ОписаниеПользователя.ПолучитьЭлементы(); - НовыеРуководители = РуководителиПодчиненных.НайтиСтроки(Новый Структура("Подчиненный", ОписаниеПользователя.Ссылка)); + + Отбор = Новый Структура("Подчиненный", ОписаниеПользователя.Ссылка); + НовыеРуководители = РуководителиПодчиненных.НайтиСтроки(Отбор); Если СтарыеРуководители.Количество() <> НовыеРуководители.Количество() Тогда СтарыеРуководители.Очистить(); + Для каждого Строка Из НовыеРуководители Цикл ОписаниеРуководителя = СтарыеРуководители.Добавить();; ОписаниеРуководителя.Ссылка = Строка.Руководитель; - ОписаниеРуководителя.Пользователь = Строка.ПредставлениеРуководителя + " (" + НСтр("ru = 'руководитель'") + ")"; + + ОписаниеРуководителя.Пользователь = + Строка.ПредставлениеРуководителя + " (" + НСтр("ru = 'руководитель'") + ")"; КонецЦикла; ИзмененныеСтроки.Добавить(ОписаниеПользователя.ПолучитьИдентификатор()); КонецЕсли; @@ -1546,14 +1783,38 @@ Запрос.УстановитьПараметр("Ссылка", ТекущийОбъект.Ссылка); РезультатыЗапросов = Запрос.ВыполнитьПакет(); - // Восстановление реквизитов + // Восстановление реквизитов. ЗаполнитьЗначенияСвойств(ТекущийОбъект, РезультатыЗапросов[0].Выгрузить()[0]); - // Восстановление табличной части ВидыДоступа + + // Восстановление табличной части ВидыДоступа. ТекущийОбъект.ВидыДоступа.Загрузить(РезультатыЗапросов[1].Выгрузить()); - // Восстановление табличной части ЗначенияДоступа + + // Восстановление табличной части ЗначенияДоступа. ТекущийОбъект.ЗначенияДоступа.Загрузить(РезультатыЗапросов[2].Выгрузить()); КонецПроцедуры +&НаСервереБезКонтекста +Функция СформироватьДанныеВыбораПользователя(Знач Текст, + Знач ВключаяГруппы = Истина, + Знач ВключаяВнешнихПользователей = Неопределено, + Знач БезПользователей = Ложь) Экспорт + + Возврат Пользователи.СформироватьДанныеВыбораПользователя( + Текст, + ВключаяГруппы, + ВключаяВнешнихПользователей, + БезПользователей); + + +КонецФункции - +&НаСервереБезКонтекста +Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина) + + Возврат УправлениеДоступомСлужебный.СформироватьДанныеВыбораЗначенияДоступа( + Текст, + ВидДоступа, + ВключаяГруппы); + +КонецФункции diff --git a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html index 20f5e2108..7e7955e5b 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыДоступа/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

        diff --git a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl index 3f1e29c6f..79922de34 100644 --- a/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыДоступа/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -11,14 +13,16 @@ Если Ссылка = Справочники.ГруппыДоступа.Администраторы Тогда // Всегда предопределенный профиль Администратор Профиль = Справочники.ПрофилиГруппДоступа.Администратор; - // Не может быть персональной группой доступа + // Не может быть персональной группой доступа. Пользователь = Неопределено; + // Не может иметь обычного ответственного (только полноправные пользователи). + Администратор = Неопределено; // Только обычные пользователи ТипПользователей = Справочники.Пользователи.ПустаяСсылка(); // Изменение разрешено только полноправному пользователю Если НЕ ПривилегированныйРежим() И НЕ УправлениеДоступом.ЕстьРоль("ПолныеПрава") Тогда - // + ВызватьИсключение(НСтр("ru = 'Предопределенную группу доступа Администраторы |можно изменять, либо в привилегированном режиме, |либо при наличии роли ""Полные права"".'")); @@ -32,24 +36,24 @@ Если НЕ ЭтоГруппа Тогда Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей") Тогда - // + Если ЗначениеЗаполнено(Ссылка) Тогда СтараяТаблицаПользователи = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Пользователи"); СтарыеУчастникиГруппыДоступа = СтараяТаблицаПользователи.Выгрузить().ВыгрузитьКолонку("Пользователь"); Иначе СтарыеУчастникиГруппыДоступа = Новый Массив; КонецЕсли; - // + ДополнительныеСвойства.Вставить("СтарыеУчастникиГруппыДоступа", СтарыеУчастникиГруппыДоступа); КонецЕсли; // Автоматическая установка реквизитов для персональной группы доступа Если ЗначениеЗаполнено(Пользователь) Тогда - Родитель = УправлениеДоступом.РодительПерсональныхГруппДоступа(); + Родитель = УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа(); ТипПользователей = Неопределено; Иначе Пользователь = Неопределено; - Если Родитель = УправлениеДоступом.РодительПерсональныхГруппДоступа(Истина) Тогда + Если Родитель = УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа(Истина) Тогда Родитель = Неопределено; КонецЕсли; КонецЕсли; @@ -81,15 +85,16 @@ Если НЕ ЭтоГруппа Тогда Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей") Тогда - УправлениеДоступом.ОбновитьРолиПользователейПриИзмененииГруппыДоступа(Ссылка, ДополнительныеСвойства.СтарыеУчастникиГруппыДоступа); + + ОбновитьРолиПользователейПриИзмененииГруппыДоступа( + Ссылка, ДополнительныеСвойства.СтарыеУчастникиГруппыДоступа); КонецЕсли; - УправлениеДоступом.ОбновитьТаблицыГруппДоступа(Ссылка); + УправлениеДоступомСлужебный.ОбновитьТаблицыГруппДоступа(Ссылка); - УправлениеДоступом.ЗаписатьЗначенияГруппДоступа(Ссылка); - - УправлениеДоступом.ОбновитьПодчиненныхПользователейГруппДоступа(); + УправлениеДоступомСлужебный.ЗаписатьЗначенияГруппДоступа(Ссылка); + УправлениеДоступомСлужебный.ОбновитьПодчиненныхПользователейГруппДоступа(); КонецЕсли; КонецПроцедуры @@ -102,3 +107,66 @@ КонецЕсли; КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Процедура ОбновитьРолиПользователейПриИзмененииГруппыДоступа(ГруппаДоступа, + СтарыеУчастникиГруппыДоступа) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Обновление ролей для добавленных, оставшихся и удаленных пользователей. + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); + Запрос.УстановитьПараметр("СтарыеУчастникиГруппыДоступа", СтарыеУчастникиГруппыДоступа); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПользователиИГруппыПользователей.ЗначениеДоступа КАК Пользователь + |ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + |ГДЕ + | ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | И ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ + | И ПользователиИГруппыПользователей.ГруппаДоступа В(&СтарыеУчастникиГруппыДоступа) + | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи)) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ПользователиИГруппыПользователей.ЗначениеДоступа + |ИЗ + | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) + | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) + | И ГруппыДоступаПользователи.Пользователь = ПользователиИГруппыПользователей.ГруппаДоступа + | И (ГруппыДоступаПользователи.Ссылка = &ГруппаДоступа) + | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи))"; + СтарыеИНовыеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); + + Если ГруппаДоступа = Справочники.ГруппыДоступа.Администраторы Тогда + // Добавление пользователей, связанных с пользователямиИБ, имеющих роль ПолныеПрава + Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл + Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда + НайденныйПользователь = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); + Если НЕ ЗначениеЗаполнено(НайденныйПользователь) Тогда + НайденныйПользователь = Справочники.ВнешниеПользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); + КонецЕсли; + Если ЗначениеЗаполнено(НайденныйПользователь) + И СтарыеИНовыеПользователи.Найти(НайденныйПользователь) = Неопределено Тогда + СтарыеИНовыеПользователи.Добавить(НайденныйПользователь); + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + УправлениеДоступом.ОбновитьРолиПользователей(СтарыеИНовыеПользователи); + +КонецПроцедуры + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl index 376da37d3..fca2d452a 100644 --- a/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыИсполнителейЗадач/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПередЗаписью(Отказ) @@ -48,3 +50,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl index 5ab08c97a..2a937314b 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаСписка/Module.bsl @@ -7,12 +7,12 @@ Если Параметры.РежимВыбора Тогда Элементы.Список.РежимВыбора = Истина; - // Отбор не помеченных на удаление + // Отбор не помеченных на удаление. Список.Отбор.Элементы[0].Использование = Истина; Список.Отбор.Элементы[1].Использование = Параметры.Свойство("ВыборРодителя"); Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда - // Режим подбора + // Режим подбора. Заголовок = НСтр("ru = 'Подбор групп пользователей'"); Элементы.Список.МножественныйВыбор = Истина; Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный; diff --git a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Help/ru.html index 3338169dc..d10f881e1 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 59e6aa8a0..76085d1d1 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/Forms/ФормаЭлемента/Module.bsl @@ -4,19 +4,18 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Объект.Ссылка = Справочники.ГруппыПользователей.ПустаяСсылка() И - Объект.Родитель.Ссылка = Справочники.ГруппыПользователей.ВсеПользователи Тогда + Если Объект.Ссылка = Справочники.ГруппыПользователей.ПустаяСсылка() + И Объект.Родитель = Справочники.ГруппыПользователей.ВсеПользователи Тогда Объект.Родитель = Справочники.ГруппыПользователей.ПустаяСсылка(); - КонецЕсли; Если Объект.Ссылка = Справочники.ГруппыПользователей.ВсеПользователи Тогда - Элементы.Наименование.Доступность = Ложь; - Элементы.Родитель.Доступность = Ложь; + Элементы.Наименование.ТолькоПросмотр = Истина; + Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.СоставПодобрать.Доступность = Ложь; - Элементы.Состав.Доступность = Ложь; - Элементы.Комментарий.Доступность = Ложь; + Элементы.Состав.ТолькоПросмотр = Истина; + Элементы.Комментарий.ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры @@ -50,6 +49,7 @@ Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда + Для каждого Значение Из ВыбранноеЗначение Цикл ОбработкаВыбораПользователя(Значение); КонецЦикла; @@ -80,7 +80,10 @@ Процедура ОбработкаВыбораПользователя(ВыбранноеЗначение) Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.Пользователи") Тогда - Если Объект.Состав.НайтиСтроки(Новый Структура("Пользователь", ВыбранноеЗначение)).Количество() = 0 Тогда + + Отбор = Новый Структура("Пользователь", ВыбранноеЗначение); + Если Объект.Состав.НайтиСтроки(Отбор).Количество() = 0 Тогда + Объект.Состав.Добавить().Пользователь = ВыбранноеЗначение; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html index 92c9fc402..d2592fc74 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html +++ b/SSL/src/Catalogs/ГруппыПользователей/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

        diff --git a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl index 1e602b269..b12ed3529 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl +++ b/SSL/src/Catalogs/ГруппыПользователей/ObjectModule.bsl @@ -1,57 +1,16 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем СтарыйРодитель; // Значение родителя группы до изменения для использования -// в обработчике события ПриЗаписи. + // в обработчике события ПриЗаписи. + +Перем СтарыйСоставГруппыПользователей; // Состав пользователей группы пользователей + // до изменения для использования в обработчике + // события ПриЗаписи. //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ -// Блокирует недопустимые действия с предопределенной группой "Все пользователи". -Процедура ПередЗаписью(Отказ) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если Ссылка = Справочники.ГруппыПользователей.ВсеПользователи Тогда - Если НЕ Родитель.Пустая() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Предопределенная группа ""Все пользователи"" может быть только в корне.'"), - , , , Отказ); - Возврат; - КонецЕсли; - Если Состав.Количество() > 0 Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Добавление пользователей в группу ""Все пользователи"" не поддерживается.'"), - , , , Отказ); - Возврат; - КонецЕсли; - Иначе - Если Родитель = Справочники.ГруппыПользователей.ВсеПользователи Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Предопределенная группа ""Все пользователи"" не может быть родителем.'"), - , , , Отказ); - Возврат; - КонецЕсли; - - СтарыйРодитель = ?(Ссылка.Пустая(), Неопределено, ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Родитель")); - КонецЕсли; - -КонецПроцедуры - -Процедура ПриЗаписи(Отказ) - - Если ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Пользователи.ОбновитьСоставыГруппПользователей(Ссылка); - - Если ЗначениеЗаполнено(СтарыйРодитель) И СтарыйРодитель <> Родитель Тогда - Пользователи.ОбновитьСоставыГруппПользователей(СтарыйРодитель); - КонецЕсли; - -КонецПроцедуры - Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ПроверенныеРеквизитыОбъекта = Новый Массив; @@ -98,3 +57,71 @@ ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ПроверенныеРеквизитыОбъекта); КонецПроцедуры + +// Блокирует недопустимые действия с предопределенной группой "Все пользователи". +Процедура ПередЗаписью(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Ссылка = Справочники.ГруппыПользователей.ВсеПользователи Тогда + Если НЕ Родитель.Пустая() Тогда + ВызватьИсключение + НСтр("ru = 'Предопределенная группа ""Все пользователи"" + |может быть только в корне.'"); + КонецЕсли; + Если Состав.Количество() > 0 Тогда + ВызватьИсключение + НСтр("ru = 'Добавление пользователей в группу + |""Все пользователи"" не поддерживается.'"); + КонецЕсли; + Иначе + Если Родитель = Справочники.ГруппыПользователей.ВсеПользователи Тогда + ВызватьИсключение + НСтр("ru = 'Предопределенная группа ""Все пользователи"" + |не может быть родителем.'"); + КонецЕсли; + + СтарыйРодитель = ?( + Ссылка.Пустая(), + Неопределено, + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Родитель")); + + Если ЗначениеЗаполнено(Ссылка) + И Ссылка <> Справочники.ГруппыПользователей.ВсеПользователи Тогда + + СтарыйСоставГруппыПользователей = + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Состав").Выгрузить(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ПриЗаписи(Отказ) + + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Ссылка = Справочники.ГруппыПользователей.ВсеПользователи Тогда + Выборка = Справочники.ГруппыПользователей.Выбрать(); + Пока Выборка.Следующий() Цикл + ПользователиСлужебный.ОбновитьСоставыГруппПользователей(Выборка.Ссылка); + КонецЦикла; + Иначе + ИзмененияСостава = ПользователиСлужебный.РазличияЗначенийКолонки( + "Пользователь", + Состав.Выгрузить(), + СтарыйСоставГруппыПользователей); + + ПользователиСлужебный.ОбновитьСоставыГруппПользователей(Ссылка, ИзмененияСостава); + + Если ЗначениеЗаполнено(СтарыйРодитель) И СтарыйРодитель <> Родитель Тогда + ПользователиСлужебный.ОбновитьСоставыГруппПользователей(СтарыйРодитель); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ГруппыПользователей/ГруппыПользователей.mdo b/SSL/src/Catalogs/ГруппыПользователей/ГруппыПользователей.mdo index aea91b619..a94a4cb4f 100644 --- a/SSL/src/Catalogs/ГруппыПользователей/ГруппыПользователей.mdo +++ b/SSL/src/Catalogs/ГруппыПользователей/ГруппыПользователей.mdo @@ -209,6 +209,7 @@ DontUse Use Use + Index Use ForFolderAndItem diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form index 33fd7d4dd..a87cf04e8 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/БыстрыйДоступКДополнительнымОтчетамИОбработкам/Form.form @@ -236,6 +236,8 @@ AutoUse true true + false + false false true Auto @@ -656,6 +658,8 @@ AutoUse true true + false + false false true Auto @@ -872,12 +876,12 @@ УстановитьДоступДляВсехПользователей <key>ru</key> - <value>> >></value> + <value>Добавить все >></value> 2 ru - Установить доступ для всех пользователей + Добавить всех пользователей true @@ -894,12 +898,12 @@ УстановитьКомандуДляВыделенныхПользователей <key>ru</key> - <value>>></value> + <value>Добавить ></value> 3 ru - Установить команду для выделенных пользователей + Добавить выделенных пользователей true @@ -916,12 +920,12 @@ УбратьДоступККомандеУВсехПользователей <key>ru</key> - <value><< <</value> + <value><< Удалить все</value> 4 ru - Убрать доступ к команде у всех пользователей + Удалить всех пользователей true @@ -938,12 +942,12 @@ УбратьДоступККомандеУВыделенныхПользователей <key>ru</key> - <value><<</value> + <value>< Удалить</value> 5 ru - Убрать доступ к команде у выделенных пользователей + Удалить выделенных пользователей true diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form index a6b62f2cb..9cb31a8e5 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ПодборРазделов/Form.form @@ -236,6 +236,8 @@ AutoUse true true + false + false false true Auto diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca index 8aaf77690..4ec0d27d1 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/ConditionalAppearance.dcssca @@ -35,7 +35,7 @@ Список.Публикация Equal - Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.НеИспользуется + Перечисление.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена
        diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form index a9eccfd34..f4fcf23de 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Form.form @@ -20,7 +20,7 @@ ВидОтборРасширеннаяПодсказка - 24 + 33 Label true true @@ -69,7 +69,7 @@ ПубликацияОтборРасширеннаяПодсказка - 26 + 35 Label true true @@ -117,7 +117,7 @@ БыстрыеОтборыРасширеннаяПодсказка - 23 + 32 Label true true @@ -137,6 +137,168 @@ КоманднаяПанель 19 + + КнопкиДобавления + 26 + + ФормаСоздать + 27 + true + true + + true + + + ФормаСоздатьРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСоздатьГруппу + 28 + true + true + + true + + + ФормаСоздатьГруппуРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.StandardCommand.CreateFolder + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСкопировать + 29 + true + true + + true + + + ФормаСкопироватьРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Кнопки добавления</value> + + + ru + Кнопки добавления + + + КнопкиДобавленияРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + + + КомандыФормы + 30 + true + true + + true + + + <key>ru</key> + <value>Команды формы</value> + + + ru + Команды формы + + + КомандыФормыРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + Form + + + + Справка + 31 + true + true + + true + + + СправкаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + true true @@ -152,7 +314,7 @@ КоманднаяПанельРасширеннаяПодсказка - 28 + 37 Label true true @@ -163,7 +325,6 @@ CommandBar Left - Form @@ -194,7 +355,7 @@ true НаименованиеРасширеннаяПодсказка - 39 + 54 Label true true @@ -230,7 +391,7 @@ ВидРасширеннаяПодсказка - 41 + 56 Label true true @@ -266,7 +427,7 @@ ПубликацияРасширеннаяПодсказка - 43 + 58 Label true true @@ -302,7 +463,7 @@ ВерсияРасширеннаяПодсказка - 45 + 60 Label true true @@ -338,7 +499,7 @@ ОтветственныйРасширеннаяПодсказка - 47 + 62 Label true true @@ -372,7 +533,7 @@ ИмяОбъектаРасширеннаяПодсказка - 49 + 64 Label true true @@ -402,10 +563,10 @@ СписокСтрокаПоиска - 30 + 45 СписокСтрокаПоискаРасширеннаяПодсказка - 32 + 47 Label true true @@ -415,7 +576,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 31 + 46 true Список @@ -425,10 +586,10 @@ СписокСостояниеПросмотра - 33 + 48 СписокСостояниеПросмотраРасширеннаяПодсказка - 35 + 50 Label true true @@ -438,7 +599,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 34 + 49 true ViewStatusAddition @@ -449,10 +610,10 @@ СписокУправлениеПоиском - 36 + 51 СписокУправлениеПоискомРасширеннаяПодсказка - 38 + 53 Label true true @@ -462,7 +623,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 37 + 52 true SearchControlAddition @@ -473,7 +634,7 @@ СписокРасширеннаяПодсказка - 29 + 44 Label true true @@ -570,32 +731,36 @@
        true
        ВЫБРАТЬ - ДополнительныеОтчетыИОбработки.Ссылка, - ДополнительныеОтчетыИОбработки.ПометкаУдаления, - ДополнительныеОтчетыИОбработки.Наименование, - ДополнительныеОтчетыИОбработки.Версия, - ДополнительныеОтчетыИОбработки.Ответственный, - ДополнительныеОтчетыИОбработки.Публикация, - ДополнительныеОтчетыИОбработки.Вид, - ДополнительныеОтчетыИОбработки.ИмяОбъекта + Таблица.Ссылка, + Таблица.ПометкаУдаления, + Таблица.Наименование, + Таблица.Версия, + Таблица.Ответственный, + Таблица.Публикация, + Таблица.Вид, + Таблица.ИмяОбъекта ИЗ - Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки + Справочник.ДополнительныеОтчетыИОбработки КАК Таблица ГДЕ ВЫБОР + КОГДА Таблица.ЭтоГруппа + ТОГДА ИСТИНА КОГДА &ПубликацияОтбор = НЕОПРЕДЕЛЕНО ТОГДА ИСТИНА КОГДА &ПубликацияОтбор = 1 - ТОГДА ДополнительныеОтчетыИОбработки.Публикация В (&ВсеПубликацииКромеНеиспользуюшихся) - ИНАЧЕ ДополнительныеОтчетыИОбработки.Публикация = &ПубликацияОтбор + ТОГДА Таблица.Публикация В (&ВсеПубликацииКромеНеиспользуюшихся) + ИНАЧЕ Таблица.Публикация = &ПубликацияОтбор КОНЕЦ И ВЫБОР + КОГДА Таблица.ЭтоГруппа + ТОГДА ИСТИНА КОГДА &ВидОтбор = НЕОПРЕДЕЛЕНО ТОГДА ИСТИНА КОГДА &ВидОтбор = 1 - ТОГДА ДополнительныеОтчетыИОбработки.Вид В (&ВидыДопОтчетов) + ТОГДА Таблица.Вид В (&ВидыДопОтчетов) КОГДА &ВидОтбор = 2 - ТОГДА НЕ ДополнительныеОтчетыИОбработки.Вид В (&ВидыДопОтчетов) - ИНАЧЕ ДополнительныеОтчетыИОбработки.Вид = &ВидОтбор + ТОГДА НЕ Таблица.Вид В (&ВидыДопОтчетов) + ИНАЧЕ Таблица.Вид = &ВидОтбор КОНЕЦ Catalog.ДополнительныеОтчетыИОбработки true diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl index 1067ad0df..962175c74 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаСписка/Module.bsl @@ -22,14 +22,14 @@ ); СписокВыбора = Элементы.ПубликацияОтбор.СписокВыбора; - СписокВыбора.Добавить(Неопределено, НСтр("ru = 'Все'")); + СписокВыбора.Добавить(Неопределено, " "); // НСтр("ru = 'Все'") СписокВыбора.Добавить(1, ПредставлениеМассива); Для Каждого ЗначениеПеречисления Из Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок Цикл СписокВыбора.Добавить(ЗначениеПеречисления, Строка(ЗначениеПеречисления)); КонецЦикла; СписокВыбора = Элементы.ВидОтбор.СписокВыбора; - СписокВыбора.Добавить(Неопределено, НСтр("ru = 'Все отчеты и обработки'")); + СписокВыбора.Добавить(Неопределено, " "); //НСтр("ru = 'Все отчеты и обработки'") СписокВыбора.Добавить(1, НСтр("ru = 'Только отчеты'")); СписокВыбора.Добавить(2, НСтр("ru = 'Только обработки'")); Для Каждого ЗначениеПеречисления Из Перечисления.ВидыДополнительныхОтчетовИОбработок Цикл @@ -44,6 +44,8 @@ Список.Параметры.УстановитьЗначениеПараметра("ВидОтбор", ВидОтбор); Список.Параметры.УстановитьЗначениеПараметра("ВидыДопОтчетов", ВидыДопОтчетов); Список.Параметры.УстановитьЗначениеПараметра("ВсеПубликацииКромеНеиспользуюшихся", ВсеПубликацииКромеНеиспользуюшихся); + + Элементы.КнопкиДобавления.Видимость = ДополнительныеОтчетыИОбработки.ПравоДобавления(); КонецПроцедуры &НаСервере diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form index eec22d9ef..50ff84eca 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Form.form @@ -1,50 +1,5 @@ - - Группа - 45 - - <key>ru</key> - <value>Группа</value> - - true - true - - true - - - Объект.Parent - - - ГруппаРасширеннаяПодсказка - 82 - Label - true - true - - Left - - - - ГруппаКонтекстноеМеню - 46 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - Наименование 1 @@ -58,7 +13,7 @@ НаименованиеРасширеннаяПодсказка - 84 + 120 Label true true @@ -102,9 +57,10 @@ Объект.Публикация + Left ПубликацияРасширеннаяПодсказка - 87 + 123 Label true true @@ -117,61 +73,28 @@ 44 true - InputField + RadioButtonField Enter true Left true - - true - true - true - true - true - true - Normal - - - - Ответственный - 31 - true - true - - true - - - Объект.Ответственный - - - ОтветственныйРасширеннаяПодсказка - 89 - Label - true - true - - Left - - - - ОтветственныйКонтекстноеМеню - 32 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal + + + + Enum.ВариантыПубликацииДополнительныхОтчетовИОбработок.EnumValue.Используется + + + + + Enum.ВариантыПубликацииДополнительныхОтчетовИОбработок.EnumValue.РежимОтладки + + + + + Enum.ВариантыПубликацииДополнительныхОтчетовИОбработок.EnumValue.Отключена + + + Vertical true @@ -189,7 +112,7 @@ ГруппаПубликацияОтветственныйРасширеннаяПодсказка - 86 + 122 Label true true @@ -207,23 +130,681 @@
        - СтраницыРазделыНазначение - 61 + СтраницыВариантыКоманды + 80 - СтраницаНазначение - 62 - - УказатьНазначениеОбработки - 14 + СтраницаВарианты + 81 + + СтраницыВарианты + 83 + + ВариантыСкрытьДоЗаписи + 84 + + ВариантыИнформационнаяНадпись + 85 + + <key>ru</key> + <value>Для просмотра и изменения вариантов +необходимо записать дополнительный отчет, +указав в поле Публикация "Используется".</value> + + true + true + + true + + + ВариантыИнформационнаяНадписьРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + + ВариантыИнформационнаяНадписьКонтекстноеМеню + 86 + true + + Label + true + 3 + true + false + false + + Style.ПоясняющийТекст + + + Left + + + + Записать + 87 + true + true + + true + + + ЗаписатьРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + UsualButton + Form.StandardCommand.Write + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Варианты скрыть до записи</value> + + + ru + Варианты скрыть до записи + + true + + ВариантыСкрытьДоЗаписиРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + Page + + auto + + + + ВариантыПоказать + 88 + + ВариантыДополнительногоОтчета + 89 + true + true + + true + + + ВариантыДополнительногоОтчета + + None + Add + Copy + EndEdit + MoveDown + MoveUp + SelectAll + + ВариантыДополнительногоОтчетаНаименование + 98 + true + true + + true + + + ВариантыДополнительногоОтчета.Наименование + + + ВариантыДополнительногоОтчетаНаименованиеРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаНаименованиеКонтекстноеМеню + 99 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ВариантыДополнительногоОтчетаКоманднаяПанель + 91 + + ВариантыДополнительногоОтчетаПоискИВывестиСписок + 113 + + ВариантыДополнительногоОтчетаНайти + 101 + true + true + + true + + + ВариантыДополнительногоОтчетаНайтиРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВариантыДополнительногоОтчетаОтменитьПоиск + 102 + true + true + + true + + + ВариантыДополнительногоОтчетаОтменитьПоискРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВариантыДополнительногоОтчетаВывестиСписок + 112 + true + true + + true + + + ВариантыДополнительногоОтчетаВывестиСписокРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа поиск и вывести список</value> + + + ВариантыДополнительногоОтчетаПоискИВывестиСписокРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + + + ВариантыДополнительногоОтчетаОткрыть + 94 + true + true + + true + + + ВариантыДополнительногоОтчетаОткрытьРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Form.Command.ВариантыДополнительногоОтчетаОткрыть + Normal + Auto + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаИзменить + 111 + + <key>ru</key> + <value>Изменить...</value> + + true + true + + true + + + ВариантыДополнительногоОтчетаИзменитьРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Change + Normal + PictureAndText + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаРазместитьВРазделах + 103 + true + true + + true + + + ВариантыДополнительногоОтчетаРазместитьВРазделахРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + Form.Command.РазместитьВРазделах + Normal + Auto + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаУдалить + 104 + true + true + + true + + + ВариантыДополнительногоОтчетаУдалитьРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + + StdPicture.MarkToDelete + + Auto + + Left + true + + + BeforeAddRow + ВариантыДополнительногоОтчетаПередНачаломДобавления + + + BeforeDeleteRow + ВариантыДополнительногоОтчетаПередУдалением + + + BeforeRowChange + ВариантыДополнительногоОтчетаПередНачаломИзменения + + + ВариантыДополнительногоОтчетаСтрокаПоиска + 145 + + ВариантыДополнительногоОтчетаСтрокаПоискаРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаСтрокаПоискаКонтекстноеМеню + 146 + true + + ВариантыДополнительногоОтчета + + true + + + + ВариантыДополнительногоОтчетаСостояниеПросмотра + 148 + + ВариантыДополнительногоОтчетаСостояниеПросмотраРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаСостояниеПросмотраКонтекстноеМеню + 149 + true + + ViewStatusAddition + ВариантыДополнительногоОтчета + + true + + + + ВариантыДополнительногоОтчетаУправлениеПоиском + 151 + + ВариантыДополнительногоОтчетаУправлениеПоискомРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаУправлениеПоискомКонтекстноеМеню + 152 + true + + SearchControlAddition + ВариантыДополнительногоОтчета + + true + + + + ВариантыДополнительногоОтчетаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + ВариантыДополнительногоОтчетаКонтекстноеМеню + 90 + + ВариантыДополнительногоОтчетаОткрыть1 + 114 + true + true + + true + + + ВариантыДополнительногоОтчетаОткрыть1РасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Form.Command.ВариантыДополнительногоОтчетаОткрыть + Normal + Auto + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаИзменить1 + 115 + + <key>ru</key> + <value>Изменить...</value> + + true + true + + true + + + ВариантыДополнительногоОтчетаИзменить1РасширеннаяПодсказка + 133 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Change + Normal + PictureAndText + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаРазместитьВРазделах1 + 116 + true + true + + true + + + ВариантыДополнительногоОтчетаРазместитьВРазделах1РасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Form.Command.РазместитьВРазделах + Normal + Auto + true + true + UserCmds + Auto + + + ВариантыДополнительногоОтчетаУдалить1 + 117 + true + true + + true + + + ВариантыДополнительногоОтчетаУдалить1РасширеннаяПодсказка + 135 + Label + true + true + + Left + + + Form.Item.ВариантыДополнительногоОтчета.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + + StdPicture.MarkToDelete + + Auto + + true + + true + true + 8 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + + ВариантыДополнительногоОтчета.ИндексКартинки + + + CommonPicture.ПиктограммыЭлементов + + None + None + None + true + + + true + true + + true + + + <key>ru</key> + <value>Варианты показать</value> + + + ru + Варианты показать + + true + + ВариантыПоказатьРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + Page + + Vertical + auto + + true true true - false + + <key>ru</key> + <value>Страницы варианты</value> + + + ru + Страницы варианты + + true - УказатьНазначениеОбработкиРасширеннаяПодсказка - 93 + СтраницыВариантыРасширеннаяПодсказка + 127 Label true true @@ -231,82 +812,10 @@ Left - Hyperlink - Form.Command.УказатьНазначениеОбработки - Normal - Auto - true - true - UserCmds - Auto - - - ИспользоватьДляФормыСписка - 71 - true - true - - true - - - Объект.ИспользоватьДляФормыСписка - - Right - - ИспользоватьДляФормыСпискаРасширеннаяПодсказка - 94 - Label - true - true - - Left - - - - ИспользоватьДляФормыСпискаКонтекстноеМеню - 72 - true - - CheckBoxField - Enter - true - Left - true - - - - ИспользоватьДляФормыОбъекта - 69 - true - true - - true - - - Объект.ИспользоватьДляФормыОбъекта - - Right - - ИспользоватьДляФормыОбъектаРасширеннаяПодсказка - 96 - Label - true - true - - Left - - - - ИспользоватьДляФормыОбъектаКонтекстноеМеню - 70 - true - - CheckBoxField - Enter - true - Left - true - + Pages + + Auto + true true @@ -315,15 +824,15 @@ <key>ru</key> - <value>Страница назначение</value> + <value>Варианты отчета</value> ru - Страница назначение + Страница варианты - СтраницаНазначениеРасширеннаяПодсказка - 92 + СтраницаВариантыРасширеннаяПодсказка + 126 Label true true @@ -333,24 +842,220 @@ Page + Vertical auto - СтраницаРазделы - 63 - - УказатьРазделыКомандногоИнтерфейса - 64 + СтраницаКоманды + 82 + + СтраницыРазделыНазначение + 61 + + СтраницаНазначение + 62 + + УказатьНазначениеОбработки + 14 + true + true + + true + + false + + УказатьНазначениеОбработкиРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + Hyperlink + Form.Command.УказатьНазначениеОбработки + Normal + Auto + true + true + UserCmds + Auto + + + ИспользоватьДляФормыСписка + 71 + true + true + + true + + + Объект.ИспользоватьДляФормыСписка + + Right + + ИспользоватьДляФормыСпискаРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + + ИспользоватьДляФормыСпискаКонтекстноеМеню + 72 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьДляФормыОбъекта + 69 + true + true + + true + + + Объект.ИспользоватьДляФормыОбъекта + + Right + + ИспользоватьДляФормыОбъектаРасширеннаяПодсказка + 170 + Label + true + true + + Left + + + + ИспользоватьДляФормыОбъектаКонтекстноеМеню + 70 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Страница назначение</value> + + + ru + Страница назначение + + + СтраницаНазначениеРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + Page + + auto + + + + СтраницаРазделы + 63 + + УказатьРазделыКомандногоИнтерфейса + 64 + true + true + + true + + false + + УказатьРазделыКомандногоИнтерфейсаРасширеннаяПодсказка + 173 + Label + true + true + + Left + + + Hyperlink + Form.Command.УказатьРазделыКомандногоИнтерфейса + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Страница разделы</value> + + + ru + Страница разделы + + + СтраницаРазделыРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + Page + + Vertical + auto + + true true true - false + + <key>ru</key> + <value>Страницы разделы назначение</value> + + + ru + Страницы разделы назначение + + true - УказатьРазделыКомандногоИнтерфейсаРасширеннаяПодсказка - 99 + СтраницыРазделыНазначениеРасширеннаяПодсказка + 165 Label true true @@ -358,14 +1063,432 @@ Left - Hyperlink - Form.Command.УказатьРазделыКомандногоИнтерфейса - Normal - Auto + Pages + + Auto + + + + КомандыОбработки + 19 + + <key>ru</key> + <value>Поставляемые команды</value> + + true + true + + true + + + КомандыОбработки + + false + None + Add + CancelSearch + Change + Copy + CopyToClipboard + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + КомандыПредставление + 54 + true + true + + true + + + КомандыОбработки.Представление + + + КомандыПредставлениеРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + + КомандыПредставлениеКонтекстноеМеню + 55 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + БыстрыйДоступПредставление + 76 + true + true + + true + + + КомандыОбработки.БыстрыйДоступПредставление + + + БыстрыйДоступПредставлениеРасширеннаяПодсказка + 190 + Label + true + true + + Left + + + + БыстрыйДоступПредставлениеКонтекстноеМеню + 77 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + КомандыИспользование + 58 + true + true + + true + + + КомандыОбработки.Использование + + None + + КомандыИспользованиеРасширеннаяПодсказка + 192 + Label + true + true + + Left + + + + КомандыИспользованиеКонтекстноеМеню + 59 + true + + CheckBoxField + Auto + true + + StdPicture.SetTime + + Left + true + + + + КомандыРасписание + 56 + true + true + + true + + + КомандыОбработки.РасписаниеПредставление + + + КомандыРасписаниеРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + КомандыРасписаниеКонтекстноеМеню + 57 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + КомандыОбработкиКоманднаяПанель + 21 + + КомандыОбработкиНастроитьБыстрыйДоступККоманде + 68 + true + true + + true + + false + + КомандыОбработкиНастроитьБыстрыйДоступККомандеРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + Form.Command.НастроитьБыстрыйДоступККоманде + Normal + Auto + true + true + UserCmds + Auto + + + КомандыОбработкиНастроитьРасписаниеКоманды + 73 + true + true + + true + + + КомандыОбработкиНастроитьРасписаниеКомандыРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + Form.Command.НастроитьРасписаниеКоманды + Normal + Auto + true + true + UserCmds + Auto + + Left + true + + + BeforeRowChange + КомандыОбработкиПередНачаломИзменения + + + КомандыОбработкиСтрокаПоиска + 179 + + КомандыОбработкиСтрокаПоискаРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + + КомандыОбработкиСтрокаПоискаКонтекстноеМеню + 180 + true + + КомандыОбработки + + true + + + + КомандыОбработкиСостояниеПросмотра + 182 + + КомандыОбработкиСостояниеПросмотраРасширеннаяПодсказка + 184 + Label + true + true + + Left + + + + КомандыОбработкиСостояниеПросмотраКонтекстноеМеню + 183 + true + + ViewStatusAddition + КомандыОбработки + + true + + + + КомандыОбработкиУправлениеПоиском + 185 + + КомандыОбработкиУправлениеПоискомРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + + КомандыОбработкиУправлениеПоискомКонтекстноеМеню + 186 + true + + SearchControlAddition + КомандыОбработки + + true + + + + КомандыОбработкиРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + + КомандыОбработкиКонтекстноеМеню + 20 + + КомандыОбработкиНастроитьБыстрыйДоступККоманде1 + 74 + true + true + + true + + false + + КомандыОбработкиНастроитьБыстрыйДоступККоманде1РасширеннаяПодсказка + 174 + Label + true + true + + Left + + + Form.Command.НастроитьБыстрыйДоступККоманде + Normal + Auto + true + true + UserCmds + Auto + + + КомандыОбработкиНастроитьРасписаниеКоманды1 + 75 + true + true + + true + + + КомандыОбработкиНастроитьРасписаниеКоманды1РасширеннаяПодсказка + 175 + Label + true + true + + Left + + + Form.Command.НастроитьРасписаниеКоманды + Normal + Auto + true + true + UserCmds + Auto + + true + + true + true true + 5 true - UserCmds - Auto + true + MultiRow +
        true
        + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true +
        true true @@ -374,15 +1497,15 @@ <key>ru</key> - <value>Страница разделы</value> + <value>Команды</value> ru - Страница разделы + Страница команды - СтраницаРазделыРасширеннаяПодсказка - 98 + СтраницаКомандыРасширеннаяПодсказка + 164 Label true true @@ -403,16 +1526,16 @@ <key>ru</key> - <value>Страницы разделы назначение</value> + <value>Варианты, Команды</value> ru - Страницы разделы назначение + Страницы варианты команды - true + true - СтраницыРазделыНазначениеРасширеннаяПодсказка - 91 + СтраницыВариантыКомандыРасширеннаяПодсказка + 125 Label true true @@ -422,437 +1545,12 @@ Pages + TabsOnTop Auto
        - - КомандыОбработки - 19 - - <key>ru</key> - <value>Поставляемые команды</value> - - true - true - - true - - - КомандыОбработки - - false - None - Add - CancelSearch - Change - Copy - CopyToClipboard - Delete - EndEdit - Find - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - - КомандыПредставление - 54 - true - true - - true - - - КомандыОбработки.Представление - - - КомандыПредставлениеРасширеннаяПодсказка - 114 - Label - true - true - - Left - - - - КомандыПредставлениеКонтекстноеМеню - 55 - true - - InputField - true - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - БыстрыйДоступПредставление - 76 - true - true - - true - - - КомандыОбработки.БыстрыйДоступПредставление - - - БыстрыйДоступПредставлениеРасширеннаяПодсказка - 116 - Label - true - true - - Left - - - - БыстрыйДоступПредставлениеКонтекстноеМеню - 77 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - - КомандыИспользование - 58 - true - true - - true - - - КомандыОбработки.Использование - - None - - КомандыИспользованиеРасширеннаяПодсказка - 118 - Label - true - true - - Left - - - - КомандыИспользованиеКонтекстноеМеню - 59 - true - - CheckBoxField - Auto - true - - StdPicture.SetTime - - Left - true - - - - КомандыРасписание - 56 - true - true - - true - - - КомандыОбработки.РасписаниеПредставление - - - КомандыРасписаниеРасширеннаяПодсказка - 120 - Label - true - true - - Left - - - - КомандыРасписаниеКонтекстноеМеню - 57 - true - - InputField - Auto - true - Left - true - - - StartChoice - КомандыРасписаниеНачалоВыбора - - true - true - true - true - true - true - Normal - - - - КомандыОбработкиКоманднаяПанель - 21 - - КомандыОбработкиНастроитьБыстрыйДоступККоманде - 68 - true - true - - true - - false - - КомандыОбработкиНастроитьБыстрыйДоступККомандеРасширеннаяПодсказка - 102 - Label - true - true - - Left - - - Form.Command.НастроитьБыстрыйДоступККоманде - Normal - Auto - true - true - UserCmds - Auto - - - КомандыОбработкиНастроитьРасписаниеКоманды - 73 - true - true - - true - - - КомандыОбработкиНастроитьРасписаниеКомандыРасширеннаяПодсказка - 103 - Label - true - true - - Left - - - Form.Command.НастроитьРасписаниеКоманды - Normal - Auto - true - true - UserCmds - Auto - - Left - true - - - BeforeRowChange - КомандыОбработкиПередНачаломИзменения - - - КомандыОбработкиСтрокаПоиска - 105 - - КомандыОбработкиСтрокаПоискаРасширеннаяПодсказка - 107 - Label - true - true - - Left - - - - КомандыОбработкиСтрокаПоискаКонтекстноеМеню - 106 - true - - КомандыОбработки - - true - - - - КомандыОбработкиСостояниеПросмотра - 108 - - КомандыОбработкиСостояниеПросмотраРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - - КомандыОбработкиСостояниеПросмотраКонтекстноеМеню - 109 - true - - ViewStatusAddition - КомандыОбработки - - true - - - - КомандыОбработкиУправлениеПоиском - 111 - - КомандыОбработкиУправлениеПоискомРасширеннаяПодсказка - 113 - Label - true - true - - Left - - - - КомандыОбработкиУправлениеПоискомКонтекстноеМеню - 112 - true - - SearchControlAddition - КомандыОбработки - - true - - - - КомандыОбработкиРасширеннаяПодсказка - 104 - Label - true - true - - Left - - - - КомандыОбработкиКонтекстноеМеню - 20 - - КомандыОбработкиНастроитьБыстрыйДоступККоманде1 - 74 - true - true - - true - - false - - КомандыОбработкиНастроитьБыстрыйДоступККоманде1РасширеннаяПодсказка - 100 - Label - true - true - - Left - - - Form.Command.НастроитьБыстрыйДоступККоманде - Normal - Auto - true - true - UserCmds - Auto - - - КомандыОбработкиНастроитьРасписаниеКоманды1 - 75 - true - true - - true - - - КомандыОбработкиНастроитьРасписаниеКоманды1РасширеннаяПодсказка - 101 - Label - true - true - - Left - - - Form.Command.НастроитьРасписаниеКоманды - Normal - Auto - true - true - UserCmds - Auto - - true - - true - true - true - 5 - true - true - MultiRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - true - true - None - None - None - true - -
        - СведенияОбОбработке + ТехническаяИнформация 6 Вид @@ -865,9 +1563,10 @@ Объект.Вид + true ВидРасширеннаяПодсказка - 131 + 205 Label true true @@ -913,9 +1612,10 @@ Объект.ИмяФайла + true ИмяФайлаРасширеннаяПодсказка - 133 + 207 Label true true @@ -962,9 +1662,10 @@ Объект.Версия + true ВерсияРасширеннаяПодсказка - 135 + 209 Label true true @@ -1000,13 +1701,16 @@ 78 true true - + + true + Объект.ИмяОбъекта + true ИмяОбъектаРасширеннаяПодсказка - 137 + 211 Label true true @@ -1052,9 +1756,10 @@ Объект.Информация + true ИнформацияРасширеннаяПодсказка - 139 + 213 Label true true @@ -1101,7 +1806,7 @@ ПустаяДекорацияРасширеннаяПодсказка - 143 + 217 Label true true @@ -1117,7 +1822,7 @@ Label true true - false + true Left @@ -1137,7 +1842,7 @@ ГруппаБезТекстаРасширеннаяПодсказка - 142 + 216 Label true true @@ -1152,10 +1857,10 @@ - ГруппаПредупреждение + ГруппаПредупреждениеОбработки 34 - ПредупреждениеОНебезопасномРежиме + ПредупреждениеОбработкиОНебезопасномРежиме 36 <key>ru</key> @@ -1168,8 +1873,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ПредупреждениеОНебезопасномРежимеРасширеннаяПодсказка</name> - <id>145</id> + <name>ПредупреждениеОбработкиОНебезопасномРежимеРасширеннаяПодсказка</name> + <id>219</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1178,14 +1883,85 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПредупреждениеОНебезопасномРежимеКонтекстноеМеню</name> + <name>ПредупреждениеОбработкиОНебезопасномРежимеКонтекстноеМеню</name> <id>37</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> - <skipOnInput>false</skipOnInput> + <skipOnInput>true</skipOnInput> + <textColor xsi:type="core:ColorDef"> + <red>255</red> + </textColor> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <title> + <key>ru</key> + <value>Группа предупреждение обработки</value> + + + ru + Группа предупреждение обработки + + + ГруппаПредупреждениеОбработкиРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ГруппаПредупреждениеОтчета + 105 + + ПредупреждениеОтчетаОНебезопасномРежиме + 106 + + <key>ru</key> + <value>Внимание! Отчет требует разрешить использование в небезопасном режиме. +Более подробно о небезопасном режиме см. информацию в справке к форме.</value> + + true + true + + true + + + ПредупреждениеОтчетаОНебезопасномРежимеРасширеннаяПодсказка + 221 + Label + true + true + + Left + + + + ПредупреждениеОтчетаОНебезопасномРежимеКонтекстноеМеню + 107 + true + + Label + true + true + true 255 @@ -1207,8 +1983,8 @@ Группа предупреждение - ГруппаПредупреждениеРасширеннаяПодсказка - 144 + ГруппаПредупреждениеОтчетаРасширеннаяПодсказка + 220 Label true true @@ -1223,10 +1999,10 @@ - ГруппаИнформация + ГруппаИнформацияОбработки 35 - ИнформацияОБезопасномРежиме + ИнформацияОбработкиОБезопасномРежиме 38 <key>ru</key> @@ -1238,8 +2014,8 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ИнформацияОБезопасномРежимеРасширеннаяПодсказка</name> - <id>147</id> + <name>ИнформацияОбработкиОБезопасномРежимеРасширеннаяПодсказка</name> + <id>223</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -1248,14 +2024,14 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ИнформацияОБезопасномРежимеКонтекстноеМеню</name> + <name>ИнформацияОбработкиОБезопасномРежимеКонтекстноеМеню</name> <id>39</id> <autoFill>true</autoFill> </contextMenu> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> - <skipOnInput>false</skipOnInput> + <skipOnInput>true</skipOnInput> <textColor xsi:type="core:ColorDef"> <red>64</red> <green>125</green> @@ -1272,15 +2048,87 @@ </userVisible> <title> <key>ru</key> - <value>Группа информация</value> + <value>Группа информация обработки</value> ru - Группа информация + Группа информация обработки - ГруппаИнформацияРасширеннаяПодсказка - 146 + ГруппаИнформацияОбработкиРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ГруппаИнформацияОтчета + 108 + + ИнформацияОтчетаОБезопасномРежиме + 109 + + <key>ru</key> + <value>Отчет используется в безопасном режиме</value> + + true + true + + true + + + ИнформацияОтчетаОБезопасномРежимеРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + + ИнформацияОтчетаОБезопасномРежимеКонтекстноеМеню + 110 + true + + Label + true + true + true + + 64 + 125 + 30 + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа информация отчета</value> + + + ru + Группа информация отчета + + + ГруппаИнформацияОтчетаРасширеннаяПодсказка + 224 Label true true @@ -1310,7 +2158,7 @@ true ГруппаДополнительнаяИнформацияРасширеннаяПодсказка - 141 + 215 Label true true @@ -1330,15 +2178,15 @@ <key>ru</key> - <value>Дополнительно</value> + <value>Техническая информация</value> ru - Сведения об обработке + Техническая информация - СведенияОбОбработкеРасширеннаяПодсказка - 130 + ТехническаяИнформацияРасширеннаяПодсказка + 204 Label true true @@ -1358,6 +2206,98 @@ Auto + + Группа + 45 + + <key>ru</key> + <value>Группа</value> + + true + true + + true + + + Объект.Parent + + + ГруппаРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + + ГруппаКонтекстноеМеню + 46 + true + + InputField + Enter + true + Left + true + + 33 + true + true + false + true + true + true + true + Normal + + + + Ответственный + 31 + true + true + + true + + + Объект.Ответственный + + true + + ОтветственныйРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + + ОтветственныйКонтекстноеМеню + 32 + true + + InputField + true + Enter + true + Left + true + + 35 + true + true + false + true + true + true + true + Normal + + Комментарий 29 @@ -1373,9 +2313,10 @@ Объект.Комментарий + Left КомментарийРасширеннаяПодсказка - 148 + 230 Label true true @@ -1394,10 +2335,19 @@ Left true + + StartChoice + КомментарийНачалоВыбора + true true true true + false + true + false + false + false true true true @@ -1418,7 +2368,7 @@ false ЗагрузитьФайлОбработкиОтчетаРасширеннаяПодсказка - 80 + 118 Label true true @@ -1445,7 +2395,7 @@ false СохранитьФайлОбработкиОтчетаРасширеннаяПодсказка - 81 + 119 Label true true @@ -1589,9 +2539,7 @@ true - - true - + ЭтоНовый @@ -1606,9 +2554,7 @@ true - - true - + КомандыОбработки @@ -1836,11 +2782,150 @@ true + + ВариантыДополнительногоОтчета + + <key>ru</key> + <value>Варианты дополнительного отчета</value> + + 10 + + 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> + + 4 + + Number + + 1 + + + + true + + + true + + + + ПометкаУдаления + + <key>ru</key> + <value>Пометка удаления</value> + + 3 + + Boolean + + + true + + + true + + + + Пользовательский + + <key>ru</key> + <value>Пользовательский</value> + + 5 + + Boolean + + + true + + + true + + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 6 + + CatalogRef + + + true + + + true + + + + + ПравоДобавления + + <key>ru</key> + <value>Право добавления</value> + + 11 + + Boolean + + + true + + + ЗагрузитьФайлОбработкиОтчета <key>ru</key> - <value>Загрузить файл</value> + <value>Загрузить из файла...</value> 1 @@ -1863,7 +2948,7 @@ ВыгрузитьФайлОбработкиОтчета <key>ru</key> - <value>Выгрузить файл</value> + <value>Выгрузить в файл...</value> 2 @@ -1886,7 +2971,7 @@ УказатьНазначениеОбработки <key>ru</key> - <value>Назначение обработки</value> + <value>Указать назначение</value> 3 @@ -1930,7 +3015,7 @@ НастроитьБыстрыйДоступККоманде <key>ru</key> - <value>Быстрый доступ к команде</value> + <value>Настроить быстрый доступ...</value> 6 @@ -1942,7 +3027,7 @@ - НастроитьБыстрыйДоступ + НастроитьБыстрыйДоступККоманде Auto @@ -1952,7 +3037,7 @@ НастроитьРасписаниеКоманды <key>ru</key> - <value>Указать расписание команды</value> + <value>Настроить расписание...</value> 4 @@ -1970,6 +3055,54 @@ Auto Auto + + ВариантыДополнительногоОтчетаОткрыть + + <key>ru</key> + <value>Открыть...</value> + + 7 + + ru + Открыть вариант дополнительного отчета + + + true + + + StdPicture.Report + + + + ВариантыДополнительногоОтчетаОткрыть + + + TextPicture + Auto + Auto + + + РазместитьВРазделах + + <key>ru</key> + <value>Разместить в разделах...</value> + + 8 + + ru + Разместить в разделах + + + true + + + + РазместитьВРазделах + + + Auto + Auto + diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Help/ru.html index 86d5844a8..696751116 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 c71113e1d..33e810064 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Forms/ФормаЭлемента/Module.bsl @@ -4,6 +4,21 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ПравоДобавления = ДополнительныеОтчетыИОбработки.ПравоДобавления(); + + Если ЭтоНовый И НЕ ПравоДобавления Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + Если НЕ ПравоДобавления Тогда + Элементы.ЗагрузитьФайлОбработкиОтчета.Видимость = Ложь; + КонецЕсли; + + ВидДополнительнаяОбработка = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка; + ВидДополнительныйОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет; + ВидОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет; + РегистрацияОбработки = Ложь; Если Объект.Ссылка = Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка() Тогда @@ -20,9 +35,6 @@ УстановитьЭлементыФормы(); - ВидДополнительныйОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет; - ВидОтчет = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет; - КонецПроцедуры &НаКлиенте @@ -77,8 +89,7 @@ РегистрацияОбработки = Ложь; КонецЕсли; - Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка - ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда ТекущийОбъект.ДополнительныеСвойства.Вставить("КомандыОбработки", РеквизитФормыВЗначение("КомандыОбработки")); @@ -89,6 +100,7 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) ЭтоНовый = Ложь; + УстановитьЭлементыФормы(); КонецПроцедуры &НаСервере @@ -105,34 +117,92 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария( + Объект.Комментарий, + Объект.Комментарий, + Модифицированность + ); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантыДополнительногоОтчетаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ВариантыДополнительногоОтчетаПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; + ОткрытьВариант(); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантыДополнительногоОтчетаПередУдалением(Элемент, Отказ) + Вариант = Элементы.ВариантыДополнительногоОтчета.ТекущиеДанные; + Если Вариант = Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + Если НЕ Вариант.Пользовательский Тогда + Предупреждение(НСтр("ru = 'Пометка на удаление предопределенного варианта отчета запрещена.'")); + Отказ = Истина; + Возврат; + КонецЕсли; + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пометить ""%1"" на удаление?'"), + Вариант.Наименование + ); + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); + Если Ответ <> КодВозвратаДиалога.Да Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + УдалитьВариантДополнительногоОтчета("ВнешнийОтчет." + Объект.ИмяОбъекта, Вариант.КлючВарианта); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ КомандыОбработки &НаКлиенте Процедура КомандыОбработкиПередНачаломИзменения(Элемент, Отказ) - Если Элемент.ТекущийЭлемент = Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыИспользование Тогда + ТекущиеДанные = Элемент.ТекущиеДанные; + Если ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + ИмяТекущегоЭлемента = Элемент.ТекущийЭлемент.Имя; + + Если ИмяТекущегоЭлемента = "КомандыИспользование" ИЛИ ИмяТекущегоЭлемента = "КомандыРасписание" Тогда - Если НЕ Элемент.ТекущиеДанные.Разрешено Тогда + Если НЕ ТекущиеДанные.Разрешено Тогда - Отказ = Истина; Предупреждение( НСтр("ru = 'Команда используется только на клиенте. |Регламентное задание можно настраивать только для команд исполняемых в серверном контексте.'") ); - ИначеЕсли Элемент.ТекущиеДанные.РасписаниеПредставление = стрРасписаниеНеЗадано()Тогда - - УстановитьРасписание(Элементы.КомандыОбработки.ТекущиеДанные, Отказ); - + Отказ = Истина; + Возврат; КонецЕсли; - ИначеЕсли Элемент.ТекущийЭлемент = Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыРасписание Тогда - - Если НЕ Элемент.ТекущиеДанные.Разрешено Тогда + Если ИмяТекущегоЭлемента = "КомандыРасписание" Тогда Отказ = Истина; КонецЕсли; - ИначеЕсли Элемент.ТекущийЭлемент = Элементы.КомандыОбработки.ПодчиненныеЭлементы.БыстрыйДоступПредставление Тогда + Если НЕ ТекущиеДанные.Использование ИЛИ ИмяТекущегоЭлемента = "КомандыРасписание" Тогда + УстановитьРасписание(ТекущиеДанные); + КонецЕсли; + + ИначеЕсли ИмяТекущегоЭлемента = "БыстрыйДоступПредставление" Тогда НастроитьБыстрыйДоступОбщийОбработчик(Элемент.ТекущиеДанные); Отказ = Истина; @@ -141,21 +211,6 @@ КонецПроцедуры -&НаКлиенте -Процедура КомандыРасписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ТекущиеДанные = Элементы.КомандыОбработки.ТекущиеДанные; - - Если НЕ ТекущиеДанные.Разрешено Тогда - Возврат; - КонецЕсли; - - УстановитьРасписание(ТекущиеДанные); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -179,7 +234,7 @@ ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); ДиалогСохраненияФайла.ПолноеИмяФайла = Объект.ИмяФайла; ДиалогСохраненияФайла.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); - ДиалогСохраненияФайла.ИндексФильтра = ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 0, 1); + ДиалогСохраненияФайла.ИндексФильтра = ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 1, 2); ДиалогСохраненияФайла.МножественныйВыбор = Ложь; ДиалогСохраненияФайла.Заголовок = НСтр("ru = 'Укажите файл'"); @@ -213,6 +268,7 @@ ПараметрыФормы.Вставить("ФильтрПоОбъектамМетаданных", ФильтрПоОбъектамМетаданных); ПараметрыФормы.Вставить("ВыбранныеОбъектыМетаданных", ВыбранныеОбъектыМетаданных); + ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Назначение дополнительной обработки'")); ОткрытьФорму("ОбщаяФорма.ВыборОбъектовМетаданных", ПараметрыФормы); @@ -228,11 +284,7 @@ КонецЕсли; Если ТекущиеДанные.Разрешено Тогда - Отказ = Ложь; - УстановитьРасписание(ТекущиеДанные, Отказ); - Если НЕ Отказ Тогда - Модифицированность = Истина; - КонецЕсли; + УстановитьРасписание(ТекущиеДанные); Иначе Предупреждение(НСтр("ru = 'Команда используется только на клиенте. |Регламентное задание можно настраивать только для команд исполняемых в серверном контексте.'")); @@ -265,7 +317,7 @@ КонецПроцедуры &НаКлиенте -Процедура НастроитьБыстрыйДоступ(Команда) +Процедура НастроитьБыстрыйДоступККоманде(Команда) ТекущиеДанные = Элементы.КомандыОбработки.ТекущиеДанные; @@ -277,6 +329,29 @@ КонецПроцедуры +&НаКлиенте +Процедура ВариантыДополнительногоОтчетаОткрыть(Команда) + Вариант = ЭтаФорма.Элементы.ВариантыДополнительногоОтчета.ТекущиеДанные; + Если Вариант = Неопределено Тогда + Предупреждение(НСтр("ru = 'Выберите вариант отчета.'")); + Возврат; + КонецЕсли; + + ДополнительныеОтчетыИОбработкиКлиент.ОткрытьВариантДополнительногоОтчета(Объект.Ссылка, Вариант.КлючВарианта); +КонецПроцедуры + +&НаКлиенте +Процедура РазместитьВРазделах(Команда) + МассивВариантов = Новый Массив; + Для Каждого ИдентификаторСтроки Из Элементы.ВариантыДополнительногоОтчета.ВыделенныеСтроки Цикл + Вариант = ВариантыДополнительногоОтчета.НайтиПоИдентификатору(ИдентификаторСтроки); + Если ЗначениеЗаполнено(Вариант.Ссылка) Тогда + МассивВариантов.Добавить(Вариант.Ссылка); + КонецЕсли; + КонецЦикла; + СтандартныеПодсистемыКлиентПереопределяемый.ОткрытьДиалогРамещенияВариантовДопольнительныхОтчетовВРазделах(МассивВариантов); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -301,6 +376,11 @@ Возврат ФильтрПоОбъектамМетаданных; КонецФункции +&НаСервереБезКонтекста +Процедура УдалитьВариантДополнительногоОтчета(КлючОбъекта, КлючВарианта) + ХранилищаНастроек["ХранилищеВариантовОтчетов"].Удалить(КлючОбъекта, КлючВарианта, Неопределено); +КонецПроцедуры + &НаСервере Функция ЗарегистрироватьОбработку(ПараметрыРегистрации) // Получает файл обработки из временного хранилища, пытается создать объект @@ -372,25 +452,25 @@ КонецЕсли; // Получение сведений о внешней обработке - ВнешняяОбработка = Менеджер.Создать(Результат.ИмяОбъекта); + ВнешнийОбъект = Менеджер.Создать(Результат.ИмяОбъекта); Попытка - РегистрационныеДанные = ВнешняяОбработка.СведенияОВнешнейОбработке(); + РегистрационныеДанные = ВнешнийОбъект.СведенияОВнешнейОбработке(); Исключение Префикс = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка получения сведений о внешней обработке ""%1"" при ее загрузке:'"), ПараметрыРегистрации.ИмяФайла - ) + Символы.ПС; + ); Если Не ЭтоНовый Тогда ЗаписьЖурналаРегистрации( НСтр("ru = 'Дополнительные отчеты и обработки'"), УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.ДополнительныеОтчетыИОбработки, Объект.Ссылка, - Префикс + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Префикс + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); КонецЕсли; - Результат.КраткоеПредставлениеОшибки = Префикс + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат.КраткоеПредставлениеОшибки = Префикс + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат Результат; КонецПопытки; @@ -403,43 +483,52 @@ КонецЕсли; Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок[РегистрационныеДанные.Вид]; - Если ПараметрыРегистрации.ЭтоОтчет <> (Вид = ВидДополнительныйОтчет ИЛИ Вид = ВидОтчет) Тогда + Если НЕ ЭтоНовый И Вид <> Объект.Вид Тогда + Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Невозможно сменить вид существующего дополнительного отчета или обработки.'"); + Возврат Результат; + ИначеЕсли ПараметрыРегистрации.ЭтоОтчет <> (Вид = ВидДополнительныйОтчет ИЛИ Вид = ВидОтчет) Тогда Результат.КраткоеПредставлениеОшибки = НСтр("ru = 'Вид обработки, указанный в сведениях о внешней обработке, не соответствует её расширению.'"); Возврат Результат; КонецЕсли; // Инициализация сведений об обработке - ОбъектЗначение = РеквизитФормыВЗначение("Объект"); - ОбъектЗначение.Наименование = РегистрационныеДанные.Наименование; - ОбъектЗначение.Версия = РегистрационныеДанные.Версия; - ОбъектЗначение.БезопасныйРежим = РегистрационныеДанные.БезопасныйРежим; - ОбъектЗначение.Информация = РегистрационныеДанные.Информация; - ОбъектЗначение.ИмяФайла = ПараметрыРегистрации.ИмяФайла; - ОбъектЗначение.ИмяОбъекта = Результат.ИмяОбъекта; + ТекущийОбъект = РеквизитФормыВЗначение("Объект"); + ТекущийОбъект.Наименование = РегистрационныеДанные.Наименование; + ТекущийОбъект.Версия = РегистрационныеДанные.Версия; + ТекущийОбъект.БезопасныйРежим = РегистрационныеДанные.БезопасныйРежим; + ТекущийОбъект.Информация = РегистрационныеДанные.Информация; + ТекущийОбъект.ИмяФайла = ПараметрыРегистрации.ИмяФайла; + ТекущийОбъект.ИмяОбъекта = Результат.ИмяОбъекта; + + ТекущийОбъект.ИспользуетХранилищеВариантов = Ложь; + Если Вид = ВидДополнительныйОтчет Тогда + Если Метаданные.ХранилищеВариантовОтчетов <> Неопределено + И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов" Тогда + ТекущийОбъект.ИспользуетХранилищеВариантов = Истина; + Иначе + ВнешнийОбъектМетаданные = ВнешнийОбъект.Метаданные(); + Если ВнешнийОбъектМетаданные.ХранилищеВариантов <> Неопределено + И ВнешнийОбъектМетаданные.ХранилищеВариантов.Имя = "ХранилищеВариантовОтчетов" Тогда + ТекущийОбъект.ИспользуетХранилищеВариантов = Истина; + КонецЕсли; + КонецЕсли; + КонецЕсли; // Загружена другая обработка (изменилось имя объекта или вид обработки) - Если Объект.ИмяОбъекта <> Результат.ИмяОбъекта ИЛИ Объект.Вид <> Вид Тогда - ОбъектЗначение.Назначение.Очистить(); - ОбъектЗначение.Вид = Вид; + Если ЭтоНовый ИЛИ ТекущийОбъект.ИмяОбъекта <> Результат.ИмяОбъекта ИЛИ ТекущийОбъект.Вид <> Вид Тогда + ТекущийОбъект.Назначение.Очистить(); + ТекущийОбъект.Вид = Вид; КонецЕсли; // Если не заполнено назначение - устанавливаем назначение из обработки - Если - ( - ЭтоНовый - ИЛИ ОбъектЗначение.Назначение.Количество() = 0 - ) - И ( - ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ЗаполнениеОбъекта - ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет - ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма - ИЛИ ОбъектЗначение.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.СозданиеСвязанныхОбъектов - ) Тогда + Если ТекущийОбъект.Назначение.Количество() = 0 + И Вид <> ВидДополнительныйОтчет + И Вид <> ВидДополнительнаяОбработка Тогда - ОбъектЗначение.ИспользоватьДляФормыОбъекта = Истина; - ОбъектЗначение.ИспользоватьДляФормыСписка = Истина; + ТекущийОбъект.ИспользоватьДляФормыОбъекта = Истина; + ТекущийОбъект.ИспользоватьДляФормыСписка = Истина; - ПолноеНазначениеЗначение = ДополнительныеОтчетыИОбработки.ПолучитьПолноеНазначениеПоВидуДополнительнойВнешнейОбработки(ОбъектЗначение.Вид); + ПолноеНазначениеЗначение = ДополнительныеОтчетыИОбработки.ПолучитьПолноеНазначениеПоВидуДополнительнойВнешнейОбработки(ТекущийОбъект.Вид); Если РегистрационныеДанные.Свойство("Назначение") Тогда @@ -452,14 +541,14 @@ НайденныеНазначения = ПолноеНазначениеЗначение.НайтиСтроки(Новый Структура("Класс", РазделеннаяСтрока[0])); Для Каждого ЭлементНайденноеНазначение Из НайденныеНазначения Цикл - НоваяСтрока = ОбъектЗначение.Назначение.Добавить(); + НоваяСтрока = ТекущийОбъект.Назначение.Добавить(); НоваяСтрока.ПолноеИмяОбъектаМетаданных = ЭлементНайденноеНазначение.ПолноеИмяОбъектаМетаданных; КонецЦикла; Иначе Если ПолноеНазначениеЗначение.НайтиСтроки(Новый Структура("ПолноеИмяОбъектаМетаданных", ЭлементЗаданноеНазначение)).Количество() > 0 Тогда - НоваяСтрока = ОбъектЗначение.Назначение.Добавить(); + НоваяСтрока = ТекущийОбъект.Назначение.Добавить(); НоваяСтрока.ПолноеИмяОбъектаМетаданных = ЭлементЗаданноеНазначение; КонецЕсли; @@ -468,24 +557,24 @@ КонецЦикла; КонецЕсли; - ОбъектЗначение.Назначение.Свернуть("ПолноеИмяОбъектаМетаданных", ""); + ТекущийОбъект.Назначение.Свернуть("ПолноеИмяОбъектаМетаданных", ""); ЗначениеВРеквизитФормы(ПолноеНазначениеЗначение, "ПолноеНазначение"); КонецЕсли; - КомандыСохраненные = ОбъектЗначение.Команды.Выгрузить(); + КомандыСохраненные = ТекущийОбъект.Команды.Выгрузить(); - ОбъектЗначение.Команды.Очистить(); + ТекущийОбъект.Команды.Очистить(); // Инициализация команд Для Каждого ЭлементОписаниеКоманды Из РегистрационныеДанные.Команды Цикл - НоваяСтрока = ОбъектЗначение.Команды.Добавить(); - НоваяСтрока.Идентификатор = ЭлементОписаниеКоманды.Идентификатор; - НоваяСтрока.Представление = ЭлементОписаниеКоманды.Представление; - НоваяСтрока.Модификатор = ЭлементОписаниеКоманды.Модификатор; + НоваяСтрока = ТекущийОбъект.Команды.Добавить(); + НоваяСтрока.Идентификатор = ЭлементОписаниеКоманды.Идентификатор; + НоваяСтрока.Представление = ЭлементОписаниеКоманды.Представление; + НоваяСтрока.Модификатор = ЭлементОписаниеКоманды.Модификатор; НоваяСтрока.ПоказыватьОповещение = ЭлементОписаниеКоманды.ПоказыватьОповещение; Если ЭлементОписаниеКоманды.Использование = "ОткрытиеФормы" Тогда @@ -502,15 +591,16 @@ КонецЦикла; - ОбъектЗначение.Ответственный = Пользователи.ТекущийПользователь(); + ТекущийОбъект.Ответственный = Пользователи.ТекущийПользователь(); - ЗначениеВРеквизитФормы(ОбъектЗначение, "Объект"); + ЗначениеВРеквизитФормы(ТекущийОбъект, "Объект"); УстановитьЭлементыФормы(Истина); ЗаполнитьКоманды(КомандыСохраненные); Результат.Успешно = Истина; + РегистрацияОбработки = Истина; Возврат Результат; КонецФункции @@ -527,8 +617,7 @@ НоваяКоманда.Представление = ЭлементКоманда.Представление; НоваяКоманда.Идентификатор = ЭлементКоманда.Идентификатор; - Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка - ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда ТекстЗапроса = "ВЫБРАТЬ @@ -556,7 +645,11 @@ УстановитьПривилегированныйРежим(Ложь); КонецЕсли; - Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка + Если НЕ ПравоДобавления Тогда + Продолжить; + КонецЕсли; + + Если Объект.Вид = ВидДополнительнаяОбработка И ЭлементКоманда.ВариантЗапуска = Перечисления.СпособыВызоваДополнительныхОбработок.ВызовСерверногоМетода Тогда // Можно задавать расписание и указывать использование @@ -582,34 +675,31 @@ Если ЗначениеЗаполнено(РегламентноеЗаданиеGUID) Тогда - РегламентноеЗадание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID); + РегламентноеЗадание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID, Истина); - Если РегламентноеЗадание = Неопределено Тогда - - ЭлементКоманда.РегламентноеЗаданиеGUID = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); - - Иначе + Если РегламентноеЗадание <> Неопределено Тогда ЭлементКоманда.РегламентноеЗаданиеGUID = РегламентноеЗаданиеGUID; НоваяКоманда.РасписаниеПредставление = Строка(РегламентноеЗадание.Расписание); - НоваяКоманда.Использование = РегламентноеЗадание.Использование; + НоваяКоманда.Использование = РегламентноеЗадание.Использование; НоваяКоманда.Расписание.Добавить(РегламентноеЗадание.Расписание); РегламентноеЗаданиеЗадано = Истина; + КонецЕсли; КонецЕсли; Если НЕ РегламентноеЗаданиеЗадано Тогда НоваяКоманда.РасписаниеПредставление = стрРасписаниеНеЗадано(); - НоваяКоманда.Использование = Ложь; + НоваяКоманда.Использование = Ложь; КонецЕсли; Иначе НоваяКоманда.РасписаниеПредставление = НСтр("ru = 'Не применимо - команда используется только на клиенте'"); - НоваяКоманда.Использование = Ложь; - НоваяКоманда.Разрешено = Ложь; + НоваяКоманда.Использование = Ложь; + НоваяКоманда.Разрешено = Ложь; КонецЕсли; КонецЦикла; @@ -619,25 +709,63 @@ &НаСервере Процедура УстановитьЭлементыФормы(Регистрация = Ложь) + Если НЕ Регистрация И НЕ ЭтоНовый И (Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет) Тогда + ВариантыДополнительногоОтчетаЗаполнить(); + Иначе + ВариантыДополнительногоОтчета.Очистить(); + КонецЕсли; + + Если Объект.Вид = ВидДополнительныйОтчет И Объект.ИспользуетХранилищеВариантов Тогда + // Выводить закладки + Элементы.СтраницыВариантыКоманды.ОтображениеСтраниц = ОтображениеСтраницФормы.ЗакладкиСверху; + Элементы.СтраницыВариантыКоманды.ТекущаяСтраница = Элементы.СтраницаВарианты; + + КоличествоВариантов = ВариантыДополнительногоОтчета.Количество(); + Если Регистрация ИЛИ КоличествоВариантов = 0 Тогда + Элементы.СтраницыВарианты.ТекущаяСтраница = Элементы.ВариантыСкрытьДоЗаписи; + Элементы.СтраницаВарианты.Заголовок = НСтр("ru = 'Варианты отчета'"); + Иначе + Элементы.СтраницыВарианты.ТекущаяСтраница = Элементы.ВариантыПоказать; + Элементы.СтраницаВарианты.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Варианты отчета (%1)'"), + Формат(КоличествоВариантов, "ЧГ=") + ); + КонецЕсли; + + КоличествоКоманд = Объект.Команды.Количество(); + Если КоличествоКоманд = 0 Тогда + Элементы.СтраницаКоманды.Заголовок = НСтр("ru = 'Команды'"); + Иначе + Элементы.СтраницаКоманды.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Команды (%1)'"), + Формат(КоличествоКоманд, "ЧГ=") + ); + КонецЕсли; + + Иначе + // Без закладок + Элементы.СтраницыВариантыКоманды.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + Элементы.СтраницыВариантыКоманды.ТекущаяСтраница = Элементы.СтраницаКоманды; + + КонецЕсли; + + Если Регистрация ИЛИ ЗначениеЗаполнено(Объект.Ссылка)Тогда - Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка - ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда - - Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыРасписание.Видимость = Истина; - Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыИспользование.Видимость = Истина; + Если Объект.Вид = ВидДополнительнаяОбработка ИЛИ Объект.Вид = ВидДополнительныйОтчет Тогда - Элементы.СтраницыРазделыНазначение.ТекущаяСтраница = - Элементы.СтраницаРазделы; + Элементы.КомандыРасписание.Видимость = ПравоДобавления; + Элементы.КомандыИспользование.Видимость = ПравоДобавления; + + Элементы.СтраницыРазделыНазначение.ТекущаяСтраница = Элементы.СтраницаРазделы; ИначеЕсли ДополнительныеОтчетыИОбработки.ПроверитьНазначаемаяОбработка(Объект.Вид) Тогда - Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыРасписание.Видимость = Ложь; - Элементы.КомандыОбработки.ПодчиненныеЭлементы.КомандыИспользование.Видимость = Ложь; + Элементы.КомандыРасписание.Видимость = Ложь; + Элементы.КомандыИспользование.Видимость = Ложь; + + Элементы.СтраницыРазделыНазначение.ТекущаяСтраница = Элементы.СтраницаНазначение; - Элементы.СтраницыРазделыНазначение.ТекущаяСтраница = - Элементы.СтраницаНазначение; - Элементы.КомандыОбработкиНастроитьБыстрыйДоступККоманде.Видимость = Ложь; Элементы.КомандыОбработкиНастроитьРасписаниеКоманды.Видимость = Ложь; @@ -646,23 +774,27 @@ КонецЕсли; Если Объект.БезопасныйРежим Тогда - Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = - Элементы.ГруппаИнформация; + Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет Тогда + Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = Элементы.ГруппаИнформацияОтчета; + Иначе + Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = Элементы.ГруппаИнформацияОбработки; + КонецЕсли; Иначе - Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = - Элементы.ГруппаПредупреждение; + Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет Тогда + Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = Элементы.ГруппаПредупреждениеОтчета; + Иначе + Элементы.ГруппаДополнительнаяИнформация.ТекущаяСтраница = Элементы.ГруппаПредупреждениеОбработки; + КонецЕсли; КонецЕсли; Если ЭтоНовый Тогда - Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет - ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда + Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет Тогда Заголовок = НСтр("ru = 'Дополнительный отчет (создание)'"); Иначе Заголовок = НСтр("ru = 'Дополнительная обработка (создание)'"); КонецЕсли; Иначе - Если Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет - ИЛИ Объект.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет Тогда + Если Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет Тогда Заголовок = Объект.Наименование + " " + НСтр("ru = '(Дополнительный отчет)'"); Иначе Заголовок = Объект.Наименование + " " + НСтр("ru = '(Дополнительная обработка)'"); @@ -673,6 +805,62 @@ КонецПроцедуры +&НаСервере +Процедура ВариантыДополнительногоОтчетаЗаполнить() + ВариантыДополнительногоОтчета.Очистить(); + + ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(Объект.Ссылка); + ОтчетМетаданные = ВнешнийОбъект.Метаданные(); + СхемаКДМетаданные = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных; + Если СхемаКДМетаданные <> Неопределено Тогда + СхемаКД = ВнешнийОбъект.ПолучитьМакет(СхемаКДМетаданные.Имя); + Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл + ВариантСсылка = Неопределено; + КлючВарианта = ВариантНастроекКД.Имя; + СтандартныеПодсистемыПереопределяемый.СсылкаВариантаДополнительногоОтчета(Объект.Ссылка, КлючВарианта, ВариантСсылка); + Если ВариантСсылка <> Неопределено Тогда + Вариант = ВариантыДополнительногоОтчета.Добавить(); + Вариант.КлючВарианта = КлючВарианта; + Вариант.Наименование = ВариантНастроекКД.Представление; + Вариант.Пользовательский = Ложь; + Вариант.ИндексКартинки = 4; + Вариант.Ссылка = ВариантСсылка; + КонецЕсли; + КонецЦикла; + Иначе + ВариантСсылка = Неопределено; + КлючВарианта = ""; + СтандартныеПодсистемыПереопределяемый.СсылкаВариантаДополнительногоОтчета(Объект.Ссылка, КлючВарианта, ВариантСсылка); + Если ВариантСсылка <> Неопределено Тогда + Вариант = ВариантыДополнительногоОтчета.Добавить(); + Вариант.КлючВарианта = КлючВарианта; + Вариант.Наименование = ОтчетМетаданные.Представление(); + Вариант.Пользовательский = Ложь; + Вариант.ИндексКартинки = 4; + Вариант.Ссылка = ВариантСсылка; + КонецЕсли; + КонецЕсли; + + Если Объект.ИспользуетХранилищеВариантов Тогда + Хранилище = ХранилищаНастроек["ХранилищеВариантовОтчетов"]; + КлючОбъекта = Объект.Ссылка; + Иначе + Хранилище = ХранилищеВариантовОтчетов; + КлючОбъекта = "ВнешнийОтчет." + Объект.ИмяОбъекта; + КонецЕсли; + + СписокНастроек = Хранилище.ПолучитьСписок(КлючОбъекта); + + Для Каждого ЭлементСписка Из СписокНастроек Цикл + Вариант = ВариантыДополнительногоОтчета.Добавить(); + Вариант.КлючВарианта = ЭлементСписка.Значение; + Вариант.Наименование = ЭлементСписка.Представление; + Вариант.Пользовательский = Истина; + Вариант.ИндексКартинки = 2; + СтандартныеПодсистемыПереопределяемый.СсылкаВариантаДополнительногоОтчета(Объект.Ссылка, Вариант.КлючВарианта, Вариант.Ссылка); + КонецЦикла; +КонецПроцедуры + &НаКлиенте Процедура НастроитьБыстрыйДоступОбщийОбработчик(ТекущиеДанные) @@ -702,6 +890,10 @@ &НаКлиенте Функция ОткрытьДиалогЗагрузкиФайлаОбработкиОтчета(ФлагДобавить, ПараметрыРегистрации = Неопределено) + Если НЕ ПравоДобавления Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа.'"); + КонецЕсли; + // Выбор файла Если ПараметрыРегистрации = Неопределено Тогда ПараметрыРегистрации = Новый Структура("ИмяФайла, ЭтоОтчет, ОтключатьКонфликтующие, Конфликтующие"); @@ -719,7 +911,7 @@ ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогОткрытияФайла.ПолноеИмяФайла = Объект.ИмяФайла; ДиалогОткрытияФайла.Фильтр = ДополнительныеОтчетыИОбработкиКлиентСервер.ФильтрДиалоговВыбораИСохранения(); - ДиалогОткрытияФайла.ИндексФильтра = ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 0, 1); + ДиалогОткрытияФайла.ИндексФильтра = ?(Объект.Ссылка.Пустая(), 0, ?(Объект.Вид = ВидДополнительныйОтчет ИЛИ Объект.Вид = ВидОтчет, 1, 2)); ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите дополнительный отчет или обработку'"); @@ -761,7 +953,6 @@ // Обработка результата работы сервера Если РезультатРегистрации.Успешно = Истина Тогда - РегистрацияОбработки = Истина; Модифицированность = Истина; ПоказатьОповещениеПользователя( НСтр("ru = 'Файл обработки успешно загружен'"), @@ -901,7 +1092,7 @@ КонецФункции &НаКлиенте -Процедура УстановитьРасписание(ТекущиеДанные, Отказ = Ложь) +Процедура УстановитьРасписание(ТекущиеДанные) Если ТекущиеДанные.Расписание.Количество() > 0 Тогда Расписание = ТекущиеДанные.Расписание.Получить(0).Значение; @@ -919,13 +1110,32 @@ Если ТекущиеДанные.РасписаниеПредставление = ПредставлениеПустогоРасписания() Тогда ТекущиеДанные.РасписаниеПредставление = стрРасписаниеНеЗадано(); ТекущиеДанные.Использование = Ложь; - Отказ = Истина; + Модифицированность = Истина; Иначе ТекущиеДанные.Использование = Истина; КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОткрытьВариант() + Вариант = Элементы.ВариантыДополнительногоОтчета.ТекущиеДанные; + Если Вариант = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда + Предупреждение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вариант отчета ""%1"" не зарегистрирован.'"), + Вариант.Наименование + ) + ); + Иначе + ОткрытьЗначение(Вариант.Ссылка); + КонецЕсли; +КонецПроцедуры + &НаКлиентеНаСервереБезКонтекста Функция ПредставлениеПустогоРасписания() @@ -964,4 +1174,3 @@ Возврат БыстрыйДоступПредставление; КонецФункции - diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html index a42bc1b93..9bc1033f4 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/Help/ru.html @@ -1,2 +1,2 @@ - +

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

        \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl index aebf99e78..8d74c613e 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -32,7 +34,7 @@ Запрос = Новый Запрос; Запрос.УстановитьПараметр("ИмяОбъекта", ИмяОбъекта); Запрос.УстановитьПараметр("ВидыДопОтчетов", ВидыДопОтчетов); - Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Текст = ТекстЗапроса; УстановитьПривилегированныйРежим(Истина); @@ -49,7 +51,7 @@ ИмяОбъекта, Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется), Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки), - Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.НеИспользуется) + Строка(Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена) ), , "Объект.Публикация" @@ -60,33 +62,277 @@ КонецПроцедуры Процедура ПередЗаписью(Отказ) - - Если ОбменДанными.Загрузка Тогда + // Вызывается непосредственно до записи объекта в базу данных + Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда Возврат; КонецЕсли; - Если ЭтоГруппа Тогда - Возврат; // группы не обрабатываем + Если НЕ ЭтоНовый() И Вид <> ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Вид") Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Невозможно сменить вид существующего дополнительного отчета или обработки.'"),,,, + Отказ + ); + Возврат; КонецЕсли; - Если НЕ ЭтоНовый() Тогда - Если Вид <> ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "Вид") Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Невозможно сменить вид у существующего дополнительного отчета или обработки.'"),,,, - Отказ); + Если ПометкаУдаления Тогда + Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена; + КонецЕсли; + + Если ДополнительныеОтчетыИОбработки.ПроверитьГлобальнаяОбработка(Вид) Тогда + Если ДополнительныеОтчетыИОбработки.ПравоДобавления() Тогда + ПередЗаписьюГлобальнойОбработки(Отказ); КонецЕсли; - КонецЕсли; - - Если ПометкаУдаления Тогда - Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.НеИспользуется; - КонецЕсли; - - Если ДополнительныеОтчетыИОбработки.ПроверитьНазначаемаяОбработка(Вид) Тогда + Иначе ПередЗаписьюНазначаемойОбработки(Отказ); КонецЕсли; КонецПроцедуры +Процедура ПриЗаписи(Отказ) + // Вызывается непосредственно после записи объекта в базу данных + Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + ТаблицаКоманд = Неопределено; + Если ДополнительныеСвойства.Свойство("КомандыОбработки", ТаблицаКоманд) Тогда + ДополнительныеОтчетыИОбработки.ЗаписатьНастройкиБыстрогоДоступа(Ссылка, ТаблицаКоманд); + КонецЕсли; + + Если ДополнительныеОтчетыИОбработки.ПроверитьГлобальнаяОбработка(Вид) Тогда + Если ДополнительныеОтчетыИОбработки.ПравоДобавления() Тогда + ПриЗаписиГлобальнойОбработки(Отказ); + КонецЕсли; + КонецЕсли; + + СтандартныеПодсистемыПереопределяемый.ОбработкаВариантовДополнительногоОтчета(ЭтотОбъект, Отказ); + +КонецПроцедуры + +Процедура ПередУдалением(Отказ) + // Вызывается непосредственно перед удалением объекта из базы данных + Если Отказ ИЛИ ОбменДанными.Загрузка ИЛИ ЭтоГруппа Тогда + Возврат; + КонецЕсли; + + Если ДополнительныеОтчетыИОбработки.ПроверитьГлобальнаяОбработка(Вид) Тогда + ПередУдалениемГлобальнойОбработки(Отказ); + Иначе + ПередУдалениемНазначаемойОбработки(Отказ); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Глобальные обработки + +Процедура ПередЗаписьюГлобальнойОбработки(Отказ) + Если НЕ ДополнительныеСвойства.Свойство("КомандыОбработки") Тогда + Возврат; + КонецЕсли; + + ТаблицаКоманд = ДополнительныеСвойства.КомандыОбработки; + + ЗаданияДляОбновления = Новый Соответствие; + + ПубликацияВключена = (Публикация <> Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена); + + // Регламентные задание необходимо изменять в неразделенном режиме. + РазделениеВключено = РазделениеВключено(); + УстанавливатьПривилегированныйРежим = РазделениеВключено ИЛИ УстанавливатьПривилегированныйРежим(); + + Если УстанавливатьПривилегированныйРежим Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + Если РазделениеВключено Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + + // Актуализация набора регламентных заданий для записи их идентификаторов в табличную часть. + Для Каждого СтрокаТаблицы Из ТаблицаКоманд Цикл + + Если ПубликацияВключена И СтрокаТаблицы.Расписание.Количество() > 0 Тогда + Расписание = СтрокаТаблицы.Расписание[0].Значение; + Использование = СтрокаТаблицы.Использование И РасписаниеЗадано(Расписание); + Иначе + Использование = Ложь; + КонецЕсли; + + Команда = Команды.НайтиСтроки(Новый Структура("Идентификатор", СтрокаТаблицы.Идентификатор))[0]; + + Задание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(Команда.РегламентноеЗаданиеGUID); + + Если Задание = Неопределено Тогда // Не найдено + + Если Использование Тогда + // Создать и зарегистрировать + Задание = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок"); + Задание.Использование = Ложь; + Задание.Наименование = ПредставлениеЗадания(Команда); + Задание.Записать(); + + Команда.РегламентноеЗаданиеGUID = Задание.УникальныйИдентификатор; + + ЗаданияДляОбновления.Вставить(Команда, Расписание); + Иначе + // Действие не требуется + КонецЕсли; + + Иначе // Найдено + + Если Использование Тогда + // Зарегистрировать + ЗаданияДляОбновления.Вставить(Команда, Расписание); + Иначе + // Удалить + Задание.Удалить(); + Команда.РегламентноеЗаданиеGUID = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + ДополнительныеСвойства.Вставить("ЗаданияДляОбновления", ЗаданияДляОбновления); + + Если РазделениеВключено Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + КонецЕсли; + + Если УстанавливатьПривилегированныйРежим Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + +КонецПроцедуры + +Процедура ПриЗаписиГлобальнойОбработки(Отказ) + Если НЕ ДополнительныеСвойства.Свойство("КомандыОбработки") Тогда + Возврат; + КонецЕсли; + + ЗаданияДляПостановкиВОчередь = Новый Массив; + + // Регламентные задание необходимо изменять в неразделенном режиме. + РазделениеВключено = РазделениеВключено(); + УстанавливатьПривилегированныйРежим = РазделениеВключено ИЛИ УстанавливатьПривилегированныйРежим(); + + Если УстанавливатьПривилегированныйРежим Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + Если РазделениеВключено Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + + Для Каждого КлючИЗначение Из ДополнительныеСвойства.ЗаданияДляОбновления Цикл + Команда = КлючИЗначение.Ключ; + Расписание = КлючИЗначение.Значение; + + Задание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(Команда.РегламентноеЗаданиеGUID); + + // При включенном разделении использование задания определяется очередью + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ЗаданияДляПостановкиВОчередь.Добавить(Задание); + Иначе + Задание.Использование = Истина; + КонецЕсли; + + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(Ссылка); + ПараметрыЗадания.Добавить(Команда.Идентификатор); + + Задание.Наименование = Лев(ПредставлениеЗадания(Команда), 120); + Задание.Параметры = ПараметрыЗадания; + Задание.Расписание = Расписание; + + Задание.Записать(); + КонецЦикла; + + Если РазделениеВключено Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + КонецЕсли; + + Если УстанавливатьПривилегированныйРежим Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + Для Каждого Задание Из ЗаданияДляПостановкиВОчередь Цикл + СтандартныеПодсистемыПереопределяемый.ПриЗаписиЗаданияДополнительнойОбработки(Задание, РазделениеВключено); + КонецЦикла; + +КонецПроцедуры + +Процедура ПередУдалениемГлобальнойОбработки(Отказ) + // Регламентные задание необходимо изменять в неразделенном режиме. + РазделениеВключено = РазделениеВключено(); + УстанавливатьПривилегированныйРежим = РазделениеВключено ИЛИ УстанавливатьПривилегированныйРежим(); + + Если УстанавливатьПривилегированныйРежим Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + Если РазделениеВключено Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + + Для Каждого Команда Из Команды Цикл + Задание = ДополнительныеОтчетыИОбработки.НайтиРегламентноеЗадание(Команда.РегламентноеЗаданиеGUID); + Если Задание <> Неопределено Тогда + Задание.Удалить(); + КонецЕсли; + КонецЦикла; + + Если РазделениеВключено Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + КонецЕсли; + + Если УстанавливатьПривилегированныйРежим Тогда + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа с регламентными заданиями + +Функция ПредставлениеЗадания(Команда) + // '%1: %2 / Команда: %3' + Возврат ( + СокрЛП(Вид) + + ": " + + СокрЛП(Наименование) + + " / " + + НСтр("ru = 'Команда'") + + ": " + + СокрЛП(Команда.Представление) + ); +КонецФункции + +Функция РасписаниеЗадано(Расписание) + + Возврат Строка(Расписание) <> Строка(Новый РасписаниеРегламентногоЗадания); + +КонецФункции + +Функция РазделениеВключено() + + Возврат ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначения.ИспользованиеРазделителяСеанса() = Истина; + +КонецФункции + +Функция УстанавливатьПривилегированныйРежим() + + Возврат РольДоступна(Метаданные.Роли.ДобавлениеИзменениеДополнительныхОтчетовИОбработок) И НЕ ПравоДоступа("Администрирование", Метаданные); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Назначаемые обработки + Процедура ПередЗаписьюНазначаемойОбработки(Отказ) ИмяРесурса = ПолучитьИмяРесурсаПоВидуОбработки(Вид); @@ -168,103 +414,26 @@ КонецПроцедуры -Процедура ПриЗаписиГлобальнойОбработки(Отказ) +Процедура ПередУдалениемНазначаемойОбработки(Отказ) - ТаблицаКоманд = Неопределено; - Если Не ДополнительныеСвойства.Свойство("КомандыОбработки", ТаблицаКоманд) Тогда - Возврат; + ИмяРесурса = ПолучитьИмяРесурсаПоВидуОбработки(Вид); + МассивУдаляемых = Новый Массив; + Для Каждого ЭлементНазначение ИЗ Назначение Цикл + МассивУдаляемых.Добавить(ЭлементНазначение.ПолноеИмяОбъектаМетаданных); + КонецЦикла; + + Если ИспользоватьДляФормыОбъекта Тогда + СвернутьРегистрДоступностиОтчетовИОбработок(МассивУдаляемых, Ссылка, Вид, ИмяРесурса, "ФормаОбъекта"); КонецЕсли; - // переносим данные о регламентных заданиях в командах в объект - // и обновляем регламентные задания, если требуется - Для Каждого ЭлементКоманда Из ТаблицаКоманд Цикл - - Если ЭлементКоманда.Расписание.Количество() > 0 Тогда - Расписание = ЭлементКоманда.Расписание.Получить(0).Значение; - Иначе - Расписание = ПредставлениеПустогоРасписания(); - КонецЕсли; - - КомандаВОбъекте = Команды.НайтиСтроки(Новый Структура("Идентификатор", ЭлементКоманда.Идентификатор))[0]; - - Если Строка(Расписание) = ПредставлениеПустогоРасписания() Тогда // возможно было удалено регламентное задание - Если ЗначениеЗаполнено(КомандаВОбъекте.РегламентноеЗаданиеGUID) Тогда - ДополнительныеОтчетыИОбработки.УдалитьРегламентноеЗадание(КомандаВОбъекте.РегламентноеЗаданиеGUID); - КомандаВОбъекте.РегламентноеЗаданиеGUID = ""; - КонецЕсли; - Иначе - ДополнительныеОтчетыИОбработки.ОбновитьСведенияПоРасписанию( - ЭтотОбъект, КомандаВОбъекте, Расписание, ЭлементКоманда.Использование, Отказ); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура ПриЗаписи(Отказ) - - Если ОбменДанными.Загрузка Тогда - Возврат; + Если ИспользоватьДляФормыСписка Тогда + СвернутьРегистрДоступностиОтчетовИОбработок(МассивУдаляемых, Ссылка, Вид, ИмяРесурса, "ФормаСписка"); КонецЕсли; - ТаблицаКоманд = Неопределено; - Если ДополнительныеСвойства.Свойство("КомандыОбработки", ТаблицаКоманд) Тогда - ДополнительныеОтчетыИОбработки.ЗаписатьНастройкиБыстрогоДоступа(Ссылка, ТаблицаКоманд); - КонецЕсли; - - Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка - ИЛИ Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда - ПриЗаписиГлобальнойОбработки(Отказ); - КонецЕсли; - -КонецПроцедуры - -Процедура ПередУдалением(Отказ) - - Если ЭтоГруппа Тогда - Возврат; // группы не обрабатываем - КонецЕсли; - - Если ДополнительныеОтчетыИОбработки.ПроверитьНазначаемаяОбработка(Вид) Тогда - - ИмяРесурса = ПолучитьИмяРесурсаПоВидуОбработки(Вид); - МассивУдаляемых = Новый Массив; - Для Каждого ЭлементНазначение ИЗ Назначение Цикл - МассивУдаляемых.Добавить(ЭлементНазначение.ПолноеИмяОбъектаМетаданных); - КонецЦикла; - - Если ИспользоватьДляФормыОбъекта Тогда - СвернутьРегистрДоступностиОтчетовИОбработок(МассивУдаляемых, Ссылка, Вид, ИмяРесурса, "ФормаОбъекта"); - КонецЕсли; - - Если ИспользоватьДляФормыСписка Тогда - СвернутьРегистрДоступностиОтчетовИОбработок(МассивУдаляемых, Ссылка, Вид, ИмяРесурса, "ФормаСписка"); - КонецЕсли; - - Иначе - Если Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда - Для Каждого ЭлементКоманда Из Команды Цикл - ДополнительныеОтчетыИОбработки.УдалитьРегламентноеЗадание(ЭлементКоманда.РегламентноеЗаданиеGUID); - КонецЦикла; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ПриКопировании(ОбъектКопирования) - - РегламентноеЗаданиеGUID = ""; - -КонецПроцедуры - -Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) - - РегламентноеЗаданиеGUID = ""; - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Другое Функция СверткаПоПолю(Таблица1, Таблица2, ИмяПоля, ИмяТипаПоля) @@ -366,9 +535,5 @@ КонецФункции -Функция ПредставлениеПустогоРасписания() - - Возврат Строка(Новый РасписаниеРегламентногоЗадания); - -КонецФункции +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo index d699a549b..a03fe64ec 100644 --- a/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Catalogs/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -194,7 +194,7 @@ String - 260 + 256 @@ -244,7 +244,7 @@ ru - Краткая информация + Краткая информация о внешней обработке @@ -389,6 +389,22 @@ Use + + ИспользуетХранилищеВариантов + + ru + Использует хранилище вариантов + + + Boolean + + + + + Index + Use + Use + @@ -647,7 +663,7 @@ ФормаЭлемента ru - Форма элемента + Дополнительный отчет или обработка diff --git a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form index c6319f4e9..c0ca4d958 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ВсеЗаметки/Form.form @@ -22,6 +22,10 @@ ВыбранныйЦвет + + ru + Отбор заметок по цвету значка + OnChange ФильтрПоЦветуПриИзменении @@ -111,6 +115,10 @@ ВыбранныйПредмет + + ru + Отбор заметок по предмету + OnChange ФильтрПоПредметуПриИзменении @@ -165,6 +173,10 @@ ПоказыватьУдаленные Right + + ru + Отображать в списке заметки, помеченные на удаление + OnChange ПоказыватьУдаленныеПриИзменении diff --git a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form index d01dcb611..4d5124332 100644 --- a/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/МоиЗаметки/Form.form @@ -64,10 +64,12 @@ LabelField Enter + true true Left true + 5 true true @@ -104,6 +106,7 @@ Left true + 5 true true @@ -121,6 +124,8 @@ ru Содержание + 5 + false СодержаниеРасширеннаяПодсказка 21 diff --git a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form index 45ba45603..5b1f50f84 100644 --- a/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Заметки/Forms/ФормаЭлемента/Form.form @@ -52,6 +52,10 @@ true + + ru + Предмет, по которому сделана заметка + ПредметРасширеннаяПодсказка 111 @@ -405,6 +409,10 @@ true + + ru + Автор заметки + АвторРасширеннаяПодсказка 123 diff --git a/SSL/src/Catalogs/Заметки/ObjectModule.bsl b/SSL/src/Catalogs/Заметки/ObjectModule.bsl index 6d9209893..a91950f2b 100644 --- a/SSL/src/Catalogs/Заметки/ObjectModule.bsl +++ b/SSL/src/Catalogs/Заметки/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -29,3 +31,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Заметки/Заметки.mdo b/SSL/src/Catalogs/Заметки/Заметки.mdo index 67a3a4e1d..011df259d 100644 --- a/SSL/src/Catalogs/Заметки/Заметки.mdo +++ b/SSL/src/Catalogs/Заметки/Заметки.mdo @@ -72,6 +72,10 @@ ru Группа заметок + + ru + Группа, в которой находится заметка + true Catalog.Заметки.EmptyRef @@ -122,6 +126,10 @@ CatalogRef.Пользователи + + ru + Автор заметки + @@ -146,6 +154,10 @@ ChartOfAccountsRef CatalogRef + + ru + Предмет заметки + true @@ -163,6 +175,10 @@ ValueStorage + + ru + Текст заметки + @@ -194,6 +210,10 @@ Boolean + + ru + Разместить заметку в списке на рабочем столе + @@ -212,6 +232,10 @@ EnumRef.ЦветаЗаметок + + ru + Цвет значка заметки + true 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 91027f589..000000000 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss +++ /dev/null @@ -1,15 +0,0 @@ - - - - Normal - dfcece9d-5077-440b-b6b3-45a5cb4538eb - - - Normal - 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - Normal - b75fecce-942b-4aed-abc9-e6a02e460fb3 - - diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl deleted file mode 100644 index 6a49a2e3e..000000000 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбора/Module.bsl +++ /dev/null @@ -1,71 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если ЭтаФорма.Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Владелец = Неопределено; - - Если Параметры.Отбор.Свойство("_Владелец", Владелец) - И ЗначениеЗаполнено(Владелец) Тогда - - Параметры.Отбор.Удалить("_Владелец"); - Параметры.Отбор.Вставить("Владелец", Владелец); - - ИначеЕсли Параметры.Отбор.Свойство("Владелец") - И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда - - Владелец = Параметры.Отбор.Владелец; - КонецЕсли; - - Если Владелец = Неопределено Тогда - ЗаголовокСтрока = ""; - Иначе - ЗаголовокСтрока = СтрПолучитьСтроку(Владелец.СклоненияПредмета, 2); - КонецЕсли; - - Если ПустаяСтрока(ЗаголовокСтрока) Тогда - Заголовок = НСтр("ru = 'Выберите значение'"); - Иначе - Заголовок = ЗаголовокСтрока; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список - -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ПроверитьВозможностьВыбора(Элемент, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) - - ПроверитьВозможностьВыбора(Элемент, СтандартнаяОбработка); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаКлиенте -Процедура ПроверитьВозможностьВыбора(Элемент, СтандартнаяОбработка) - - Если Элемент.ТекущиеДанные <> Неопределено - И Элемент.ТекущиеДанные.ЭтоГруппа Тогда - - СтандартнаяОбработка = Ложь; - Предупреждение(НСтр("ru = 'Выбор групп значений не поддерживается.'")); - КонецЕсли; - -КонецПроцедуры - diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Form.form deleted file mode 100644 index 203c6189e..000000000 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Form.form +++ /dev/null @@ -1,239 +0,0 @@ - - - - Список - 1 - true - true - - true - - - Список - - true - false - None - Copy - Create - CreateFolder - - Наименование - 4 - true - true - - true - - - Список.Description - - true - - НаименованиеРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - - НаименованиеКонтекстноеМеню - 5 - true - - LabelField - Enter - true - Left - true - - true - true - - - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска - 7 - - СписокСтрокаПоискаРасширеннаяПодсказка - 9 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 8 - true - - Список - - true - - - - СписокСостояниеПросмотра - 10 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 12 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 11 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 13 - - СписокУправлениеПоискомРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 14 - true - - SearchControlAddition - Список - - true - - - - СписокРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - - СписокКонтекстноеМеню - 2 - true - - Tree - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - false - false - Auto - Auto - ExpandTopLevel - true - true - true - true - - Список.DefaultPicture - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - Folders - - true - true - true - - - - ФормаКоманднаяПанель - -1 - Left - true - - Copy - Create - CreateFolder - LockOwner - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Список - 1 - - DynamicList - - - true - - - true - -
        true
        - - Catalog.ЗначенияСвойствОбъектов - true - true - true - true - -
        - - - - - -
        diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form new file mode 100644 index 000000000..117f4bdc0 --- /dev/null +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Form.form @@ -0,0 +1,185 @@ + + + + Наименование + 1 + + <key>ru</key> + <value>Группа</value> + + true + true + + true + + + Объект.Description + + + ru + Группа значений свойства объектов. + + + НаименованиеРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Родитель + 5 + true + true + + true + + + Объект.Parent + + + ru + Вышестоящая группа значений свойства объектов. + + + РодительРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + + РодительКонтекстноеМеню + 6 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + Владелец + 3 + true + true + + true + + + Объект.Owner + + + ВладелецРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + ВладелецКонтекстноеМеню + 4 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.ЗначенияСвойствОбъектов + + + true + + + true + +
        true
        + true +
        + + + + + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + Folders + +
        diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl new file mode 100644 index 000000000..d6873dd3f --- /dev/null +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаГруппы/Module.bsl @@ -0,0 +1,61 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) + И Параметры.ЗначенияЗаполнения.Свойство("Наименование") Тогда + + Объект.Наименование = Параметры.ЗначенияЗаполнения.Наименование; + КонецЕсли; + + УстановитьЗаголовок(); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + УстановитьЗаголовок(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура УстановитьЗаголовок() + + ИмяСвойства = СокрЛП(СтрПолучитьСтроку(Объект.Владелец.СклоненияПредмета, 1)); + + Если НЕ ПустаяСтрока(ИмяСвойства) Тогда + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (%2)'"), + Объект.Наименование, + ИмяСвойства); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (Создание)'"), ИмяСвойства); + КонецЕсли; + Иначе + ИмяСвойства = Строка(Объект.Владелец); + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (Группа значений свойства %2)'"), + Объект.Наименование, + ИмяСвойства); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Группа значений свойства %1 (Создание)'"), ИмяСвойства); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 91027f589..089b27984 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -5,6 +5,18 @@ dfcece9d-5077-440b-b6b3-45a5cb4538eb
        + + Владелец + Asc + + + ЭтоПапка + Desc + + + Ссылка + Asc + Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form index 36fe7b35a..bf598e3af 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Form.form @@ -1,5 +1,50 @@ + + Свойство + 6 + true + + true + + + Свойство + + + OnChange + СвойствоПриИзменении + + + СвойствоРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + СвойствоКонтекстноеМеню + 7 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + Список 1 @@ -11,7 +56,6 @@ Список - true false None @@ -32,7 +76,7 @@ true НаименованиеРасширеннаяПодсказка - 16 + 43 Label true true @@ -59,6 +103,41 @@ Normal + + Владелец + 8 + true + + true + + + Список.Owner + + + ВладелецРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ВладелецКонтекстноеМеню + 9 + true + + LabelField + Enter + true + Left + true + + true + true + + None СписокКоманднаяПанель @@ -66,12 +145,16 @@ Left true + + BeforeAddRow + СписокПередНачаломДобавления + СписокСтрокаПоиска - 7 + 34 СписокСтрокаПоискаРасширеннаяПодсказка - 9 + 36 Label true true @@ -81,7 +164,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 8 + 35 true Список @@ -91,10 +174,10 @@ СписокСостояниеПросмотра - 10 + 37 СписокСостояниеПросмотраРасширеннаяПодсказка - 12 + 39 Label true true @@ -104,7 +187,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 11 + 38 true ViewStatusAddition @@ -115,10 +198,10 @@ СписокУправлениеПоиском - 13 + 40 СписокУправлениеПоискомРасширеннаяПодсказка - 15 + 42 Label true true @@ -128,7 +211,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 14 + 41 true SearchControlAddition @@ -139,7 +222,7 @@ СписокРасширеннаяПодсказка - 6 + 33 Label true true @@ -158,6 +241,7 @@ true true true + true MultiRow 1 1 @@ -169,6 +253,8 @@ Auto true true + true + true Список.DefaultPicture @@ -189,13 +275,204 @@ ФормаКоманднаяПанель -1 + + ФормаВыбрать + 17 + true + true + + true + + true + + ФормаВыбратьРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Form.StandardCommand.Choose + Auto + true + true + true + UserCmds + Auto + + + ФормаСоздать + 10 + true + true + + true + + + ФормаСоздатьРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСоздатьГруппу + 18 + true + true + + true + + + ФормаСоздатьГруппуРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.StandardCommand.CreateFolder + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСкопировать + 21 + true + true + + true + + + ФормаСкопироватьРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Form.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменить + 23 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + КомандыФормы + 12 + true + true + + true + + + <key>ru</key> + <value>Команды формы</value> + + + ru + Команды формы + + + КомандыФормыРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + Form + + + + ФормаСправка + 13 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left - true + + NotificationProcessing + ОбработкаОповещения + OnCreateAtServer ПриСозданииНаСервере + 62 DontBlock true true @@ -219,6 +496,18 @@ true + + Список.РодительЭтоПапка + + + Список.ЭтоПапка + + + Список.Parent + + + Список.Ref +
        true
        Catalog.ЗначенияСвойствОбъектов @@ -228,6 +517,40 @@ true + + Свойство + + <key>ru</key> + <value>Свойство</value> + + 2 + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + true + + + true + + + + ВыборГрупп + + <key>ru</key> + <value>Выбор групп</value> + + 4 + + Boolean + + + true + + + true + + diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl index 5336f2c4c..d3e15303b 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаСписка/Module.bsl @@ -1,18 +1,181 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Владелец = Неопределено; - СодержитЗначения = Ложь; - - Если Параметры.Отбор.Свойство("Владелец", Владелец) Тогда - СодержитЗначения = Владелец.ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")); + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; КонецЕсли; - Если Не СодержитЗначения Тогда - Элементы.Список.ТолькоПросмотр = Истина; + Если Параметры.Отбор.Свойство("_Владелец", Свойство) + И ЗначениеЗаполнено(Свойство) Тогда + + Параметры.Отбор.Удалить("_Владелец"); + Параметры.Отбор.Вставить("Владелец", Свойство); + + ИначеЕсли Параметры.Отбор.Свойство("Владелец") + И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда + + Свойство = Параметры.Отбор.Владелец; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Свойство) Тогда + Элементы.Свойство.Видимость = Истина; + КонецЕсли; + + Если Параметры.РежимВыбора Тогда + + Если Параметры.Свойство("ВыборГруппИЭлементов") + И Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда + + ВыборГрупп = Истина; + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ЭтоГруппа", Истина); + Иначе + Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Элементы; + КонецЕсли; + + РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + Иначе + Элементы.Список.РежимВыбора = Ложь; + КонецЕсли; + + УстановитьЗаголовок(); + + Если ВыборГрупп Тогда + Если Элементы.Найти("ФормаСоздать") <> Неопределено Тогда + Элементы.ФормаСоздать.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюСоздать.Видимость = Ложь; + КонецЕсли; + КонецЕсли; + + ПриИзмененииСвойства(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" + И Источник = Свойство Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияПриИзмененииСвойства", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СвойствоПриИзменении(Элемент) + + ПриИзмененииСвойства(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Если НЕ Копирование + И Элементы.Список.Отображение = ОтображениеТаблицы.Список Тогда + + Родитель = Неопределено; + КонецЕсли; + + Если ВыборГрупп + И НЕ Группа Тогда + + Отказ = Истина; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура УстановитьЗаголовок() + + СтрокаЗаголовка = ""; + + Если ЗначениеЗаполнено(Свойство) Тогда + СтрокаЗаголовка = СтрПолучитьСтроку(ОбщегоНазначения.ПолучитьЗначениеРеквизита( + Свойство, "СклоненияПредмета"), 2); + КонецЕсли; + + Если ПустаяСтрока(СтрокаЗаголовка) Тогда + + Если ЗначениеЗаполнено(Свойство) Тогда + Если НЕ Параметры.РежимВыбора Тогда + СтрокаЗаголовка = НСтр("ru = 'Значения свойства %1'"); + ИначеЕсли ВыборГрупп Тогда + СтрокаЗаголовка = НСтр("ru = 'Выберите группу значений свойства %1'"); + Иначе + СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства %1'"); + КонецЕсли; + + СтрокаЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СтрокаЗаголовка, Строка(Свойство)); + + ИначеЕсли Параметры.РежимВыбора Тогда + + Если ВыборГрупп Тогда + СтрокаЗаголовка = НСтр("ru = 'Выберите группу значений свойства'"); + Иначе + СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства'"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если НЕ ПустаяСтрока(СтрокаЗаголовка) Тогда + АвтоЗаголовок = Ложь; + Заголовок = СтрокаЗаголовка; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикОжиданияПриИзмененииСвойства() + + ПриИзмененииСвойства(); + +КонецПроцедуры + +&НаСервере +Процедура ПриИзмененииСвойства() + + Если ЗначениеЗаполнено(Свойство) Тогда + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Список.Отбор, "Владелец", Свойство); + + ТипЗначения = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Свойство, "ТипЗначения"); + + Если ТипЗнч(ТипЗначения) = Тип("ОписаниеТипов") + И ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) Тогда + + Элементы.Список.ИзменятьСоставСтрок = Истина; + Иначе + Элементы.Список.ИзменятьСоставСтрок = Ложь; + КонецЕсли; + + Элементы.Список.Отображение = ОтображениеТаблицы.ИерархическийСписок; + Элементы.Владелец.Видимость = Ложь; + Элементы.Список.Шапка = Ложь; + Иначе + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора( + Список.Отбор, "Владелец"); + + Элементы.Список.Отображение = ОтображениеТаблицы.Список; + Элементы.Список.ИзменятьСоставСтрок = Ложь; + Элементы.Владелец.Видимость = Истина; + Элементы.Список.Шапка = Истина; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form index 0bcb4ebc9..a78b4b07c 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Form.form @@ -1,48 +1,7 @@ - - Владелец - 3 - true - true - - true - - - Объект.Owner - - - ВладелецРасширеннаяПодсказка - 10 - Label - true - true - - Left - - - - ВладелецКонтекстноеМеню - 4 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - Normal - - - Группа1 + ГоризонтальнаяГруппа 9 Наименование @@ -57,7 +16,7 @@ НаименованиеРасширеннаяПодсказка - 13 + 11 Label true true @@ -97,7 +56,7 @@ ВесРасширеннаяПодсказка - 15 + 13 Label true true @@ -119,7 +78,7 @@ true true true - true + true true true Normal @@ -130,9 +89,17 @@ true + + <key>ru</key> + <value>Горизонтальная группа</value> + + + ru + Горизонтальная группа + - Группа1РасширеннаяПодсказка - 12 + ГоризонтальнаяГруппаРасширеннаяПодсказка + 10 Label true true @@ -162,7 +129,7 @@ РодительРасширеннаяПодсказка - 17 + 15 Label true true @@ -189,6 +156,47 @@ Normal + + Владелец + 3 + true + true + + true + + + Объект.Owner + + + ВладелецРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ВладелецКонтекстноеМеню + 4 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + Normal + + ФормаКоманднаяПанель -1 @@ -199,6 +207,7 @@ OnCreateAtServer ПриСозданииНаСервере + 50 LockOwner true true diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html deleted file mode 100644 index 6096be4b3..000000000 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Help/ru.html +++ /dev/null @@ -1 +0,0 @@ -При формировании списка значений можно указать не только наименование в поле Значение, но и указать Вес значения (числовое поле). Это поле в дальнейшем можно использовать для анализа в отчетах. Логику использования этого поля пользователю необходимо продумывать  самостоятельно. Например, для значений свойства Надежность представленных на рисунке можно задать вес следующим образом: для значений от единицы до тройки поставить вес равным нулю, а для значений четыре и пять равным единице. При таких весах в отчет можно быстро вывести надежных клиентов (у которых вес значения больше нуля). \ No newline at end of file diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl index 4a188c117..1412cb4cb 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,4 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -9,41 +10,52 @@ Возврат; КонецЕсли; - ВладелецЗначенияСвойства = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка(); - - Если Объект.Ссылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда - Если Параметры.ЗначениеКопирования = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда - ВладелецЗначенияСвойства = Параметры.ЗначенияЗаполнения.Владелец; - Иначе - ВладелецЗначенияСвойства = Параметры.ЗначениеКопирования.Владелец; - КонецЕсли; - Иначе - ВладелецЗначенияСвойства = Объект.Ссылка.Владелец; + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) + И Параметры.ЗначенияЗаполнения.Свойство("Наименование") Тогда + + Объект.Наименование = Параметры.ЗначенияЗаполнения.Наименование; КонецЕсли; - ИмяСвойства = СокрЛП(СтрПолучитьСтроку(ВладелецЗначенияСвойства.СклоненияПредмета, 1)); - - Если ПустаяСтрока(ИмяСвойства) Тогда - ИмяСвойства = ВладелецЗначенияСвойства.Наименование; - КонецЕсли; - - Если Объект.Ссылка = Справочники.ЗначенияСвойствОбъектов.ПустаяСсылка() Тогда // Создание нового. - Заголовок = ИмяСвойства + " (" + НСтр("ru = 'создание'") + ")"; - Иначе - Заголовок = Объект.Наименование + " (" + ИмяСвойства + ")"; - КонецЕсли; + УстановитьЗаголовок(); КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + УстановитьЗаголовок(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура УстановитьЗаголовок() + ИмяСвойства = СокрЛП(СтрПолучитьСтроку(Объект.Владелец.СклоненияПредмета, 1)); - Если ПустаяСтрока(ИмяСвойства) Тогда - ИмяСвойства = Объект.Владелец.Наименование; + Если НЕ ПустаяСтрока(ИмяСвойства) Тогда + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (%2)'"), + Объект.Наименование, + ИмяСвойства); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (Создание)'"), ИмяСвойства); + КонецЕсли; + Иначе + ИмяСвойства = Строка(Объект.Владелец); + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (Значение свойства %2)'"), + Объект.Наименование, + ИмяСвойства); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Значение свойства %1 (Создание)'"), ИмяСвойства); + КонецЕсли; КонецЕсли; - - Заголовок = Объект.Наименование + " (" + ИмяСвойства + ")"; КонецПроцедуры diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html index 5185315de..ed971b8ff 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Help/ru.html @@ -1,3 +1,4 @@ - -

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

        -

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

        \ No newline at end of file + +

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

        +

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

        +

         

        \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ObjectModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl similarity index 100% rename from SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ObjectModule.bsl rename to SSL/src/Catalogs/ЗначенияСвойствОбъектов/ObjectModule.bsl diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo index 27fd9e833..9214f9217 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектов/ЗначенияСвойствОбъектов.mdo @@ -12,7 +12,6 @@ ru Значения свойств объектов - true Catalog.ЗначенияСвойствОбъектов.StandardAttribute.Description DontUse @@ -64,7 +63,7 @@ ru - Дополнительный реквизит или сведение, к которому относится данное значение + Дополнительный реквизит или дополнительное сведение. true @@ -80,11 +79,11 @@ Parent ru - Группа + Родитель ru - Группа, к которой относится значение свойства + Группа значений свойства объектов. true @@ -107,7 +106,7 @@ ru - Значение свойства + Значение свойства объектов. ShowError @@ -133,7 +132,7 @@ Use ru - Значение свойства объекта + Значение свойства объектов true 2 @@ -145,10 +144,10 @@ InDialog BothWays Catalog.ЗначенияСвойствОбъектов.Form.ФормаЭлемента - Catalog.ЗначенияСвойствОбъектов.Form.ФормаЭлемента + Catalog.ЗначенияСвойствОбъектов.Form.ФормаГруппы Catalog.ЗначенияСвойствОбъектов.Form.ФормаСписка - Catalog.ЗначенияСвойствОбъектов.Form.ФормаВыбора - Catalog.ЗначенияСвойствОбъектов.Form.ФормаВыбораГруппы + Catalog.ЗначенияСвойствОбъектов.Form.ФормаСписка + Catalog.ЗначенияСвойствОбъектов.Form.ФормаСписка Вес @@ -168,29 +167,31 @@ - + + 0 + Use Use + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаГруппы + + ru + Форма группы + + PersonalComputer + MobileDevice + - ФормаВыбора - - ru - Форма выбора - - PersonalComputer - MobileDevice - - - ФормаВыбораГруппы - - ru - Форма выбора группы - - PersonalComputer - MobileDevice - - ФормаСписка ru @@ -199,18 +200,4 @@ 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 similarity index 76% rename from SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index 784796455..089b27984 100644 --- a/SSL/src/Catalogs/ЗначенияСвойствОбъектов/Forms/ФормаВыбораГруппы/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -1,15 +1,22 @@ - - ЭтоГруппа - Equal - true - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb + + Владелец + Asc + + + ЭтоПапка + Desc + + + Ссылка + Asc + Normal 88619765-ccb3-46c6-ac52-38e9c992ebd4 diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form new file mode 100644 index 000000000..ca87c1bf3 --- /dev/null +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Form.form @@ -0,0 +1,516 @@ + + + + Свойство + 6 + true + + true + + + Свойство + + + OnChange + СвойствоПриИзменении + + + СвойствоРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + СвойствоКонтекстноеМеню + 7 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Список + 1 + true + true + + true + + + Список + + false + None + + Наименование + 4 + + <key>ru</key> + <value>Значение</value> + + true + true + + true + + + Список.Description + + true + + НаименованиеРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + Владелец + 8 + true + + true + + + Список.Owner + + + ВладелецРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ВладелецКонтекстноеМеню + 9 + true + + LabelField + Enter + true + Left + true + + true + true + + + None + + СписокКоманднаяПанель + 3 + Left + true + + + BeforeAddRow + СписокПередНачаломДобавления + + + СписокСтрокаПоиска + 33 + + СписокСтрокаПоискаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + СписокСтрокаПоискаКонтекстноеМеню + 34 + true + + Список + + true + + + + СписокСостояниеПросмотра + 36 + + СписокСостояниеПросмотраРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + СписокСостояниеПросмотраКонтекстноеМеню + 37 + true + + ViewStatusAddition + Список + + true + + + + СписокУправлениеПоиском + 39 + + СписокУправлениеПоискомРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + СписокУправлениеПоискомКонтекстноеМеню + 40 + true + + SearchControlAddition + Список + + true + + + + СписокРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + СписокКонтекстноеМеню + 2 + true + + HierarchicalList + true + true + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + Auto + Auto + true + true + true + true + + Список.DefaultPicture + + None + None + None + true + + 60 + + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + true + + + + ФормаКоманднаяПанель + -1 + + ФормаВыбрать + 17 + true + true + + true + + true + + ФормаВыбратьРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Form.StandardCommand.Choose + Auto + true + true + true + UserCmds + Auto + + + ФормаСоздать + 10 + true + true + + true + + + ФормаСоздатьРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + Form.StandardCommand.Create + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСкопировать + 21 + true + true + + true + + + ФормаСкопироватьРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + Form.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменить + 23 + true + true + + true + + + ФормаИзменитьРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Form.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + + КомандыФормы + 12 + true + true + + true + + + <key>ru</key> + <value>Команды формы</value> + + + ru + Команды формы + + + КомандыФормыРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + + Form + + + + ФормаСправка + 13 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Left + + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + + 62 + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Список + 1 + + DynamicList + + + true + + + true + + + Список.РодительЭтоПапка + + + Список.ЭтоПапка + + + Список.Parent + + + Список.Ref + +
        true
        + + Catalog.ЗначенияСвойствОбъектовИерархия + true + true + true + true + +
        + + Свойство + + <key>ru</key> + <value>Свойство</value> + + 2 + + ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения + + + true + + + true + + + + + + + +
        diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl new file mode 100644 index 000000000..d1b17c3b7 --- /dev/null +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаСписка/Module.bsl @@ -0,0 +1,151 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Параметры.Отбор.Свойство("_Владелец", Свойство) + И ЗначениеЗаполнено(Свойство) Тогда + + Параметры.Отбор.Удалить("_Владелец"); + Параметры.Отбор.Вставить("Владелец", Свойство); + + ИначеЕсли Параметры.Отбор.Свойство("Владелец") + И ЗначениеЗаполнено(Параметры.Отбор.Владелец) Тогда + + Свойство = Параметры.Отбор.Владелец; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Свойство) Тогда + Элементы.Свойство.Видимость = Истина; + КонецЕсли; + + Если Параметры.РежимВыбора Тогда + РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + Иначе + Элементы.Список.РежимВыбора = Ложь; + КонецЕсли; + + УстановитьЗаголовок(); + + ПриИзмененииСвойства(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" + И Источник = Свойство Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияПриИзмененииСвойства", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СвойствоПриИзменении(Элемент) + + ПриИзмененииСвойства(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Если НЕ Копирование + И Элементы.Список.Отображение = ОтображениеТаблицы.Список Тогда + + Родитель = Неопределено; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура УстановитьЗаголовок() + + СтрокаЗаголовка = ""; + + Если ЗначениеЗаполнено(Свойство) Тогда + СтрокаЗаголовка = СтрПолучитьСтроку(ОбщегоНазначения.ПолучитьЗначениеРеквизита( + Свойство, "СклоненияПредмета"), 2); + КонецЕсли; + + Если ПустаяСтрока(СтрокаЗаголовка) Тогда + + Если ЗначениеЗаполнено(Свойство) Тогда + Если НЕ Параметры.РежимВыбора Тогда + СтрокаЗаголовка = НСтр("ru = 'Значения свойства %1'"); + Иначе + СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства %1'"); + КонецЕсли; + + СтрокаЗаголовка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СтрокаЗаголовка, Строка(Свойство)); + + ИначеЕсли Параметры.РежимВыбора Тогда + СтрокаЗаголовка = НСтр("ru = 'Выберите значение свойства'"); + КонецЕсли; + КонецЕсли; + + Если НЕ ПустаяСтрока(СтрокаЗаголовка) Тогда + АвтоЗаголовок = Ложь; + Заголовок = СтрокаЗаголовка; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработчикОжиданияПриИзмененииСвойства() + + ПриИзмененииСвойства(); + +КонецПроцедуры + +&НаСервере +Процедура ПриИзмененииСвойства() + + Если ЗначениеЗаполнено(Свойство) Тогда + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Список.Отбор, "Владелец", Свойство); + + ТипЗначения = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Свойство, "ТипЗначения"); + + Если ТипЗнч(ТипЗначения) = Тип("ОписаниеТипов") + И ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) Тогда + + Элементы.Список.ИзменятьСоставСтрок = Истина; + Иначе + Элементы.Список.ИзменятьСоставСтрок = Ложь; + КонецЕсли; + + Элементы.Список.Отображение = ОтображениеТаблицы.ИерархическийСписок; + Элементы.Владелец.Видимость = Ложь; + Элементы.Список.Шапка = Ложь; + Иначе + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора( + Список.Отбор, "Владелец"); + + Элементы.Список.Отображение = ОтображениеТаблицы.Список; + Элементы.Список.ИзменятьСоставСтрок = Ложь; + Элементы.Владелец.Видимость = Истина; + Элементы.Список.Шапка = Истина; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form new file mode 100644 index 000000000..7a9a44526 --- /dev/null +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Form.form @@ -0,0 +1,246 @@ + + + + ГоризонтальнаяГруппа + 9 + + Наименование + 1 + true + true + + true + + + Объект.Description + + + НаименованиеРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + Вес + 7 + true + true + + true + + + Объект.Вес + + + ВесРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ВесКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Горизонтальная группа</value> + + + ru + Горизонтальная группа + + + ГоризонтальнаяГруппаРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Родитель + 5 + true + true + + true + + + Объект.Parent + + + РодительРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + РодительКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + Владелец + 3 + true + true + + true + + + Объект.Owner + + + ВладелецРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + ВладелецКонтекстноеМеню + 4 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + 50 + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + CatalogObject.ЗначенияСвойствОбъектовИерархия + + + true + + + true + +
        true
        + true +
        + + + + + + + AfterWriteAtServer + ПослеЗаписиНаСервере + + +
        diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl new file mode 100644 index 000000000..1412cb4cb --- /dev/null +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Forms/ФормаЭлемента/Module.bsl @@ -0,0 +1,61 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) + И Параметры.ЗначенияЗаполнения.Свойство("Наименование") Тогда + + Объект.Наименование = Параметры.ЗначенияЗаполнения.Наименование; + КонецЕсли; + + УстановитьЗаголовок(); + +КонецПроцедуры + +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + + УстановитьЗаголовок(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура УстановитьЗаголовок() + + ИмяСвойства = СокрЛП(СтрПолучитьСтроку(Объект.Владелец.СклоненияПредмета, 1)); + + Если НЕ ПустаяСтрока(ИмяСвойства) Тогда + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (%2)'"), + Объект.Наименование, + ИмяСвойства); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (Создание)'"), ИмяСвойства); + КонецЕсли; + Иначе + ИмяСвойства = Строка(Объект.Владелец); + + Если ЗначениеЗаполнено(Объект.Ссылка) Тогда + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (Значение свойства %2)'"), + Объект.Наименование, + ИмяСвойства); + Иначе + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Значение свойства %1 (Создание)'"), ИмяСвойства); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html new file mode 100644 index 000000000..1c3caba7e --- /dev/null +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/Help/ru.html @@ -0,0 +1,4 @@ + +

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

        +

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

        +

         

        \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторВалют/ManagerModule.bsl b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl similarity index 100% rename from SSL/src/Catalogs/КлассификаторВалют/ManagerModule.bsl rename to SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ObjectModule.bsl diff --git a/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo new file mode 100644 index 000000000..25f2cfa70 --- /dev/null +++ b/SSL/src/Catalogs/ЗначенияСвойствОбъектовИерархия/ЗначенияСвойствОбъектовИерархия.mdo @@ -0,0 +1,193 @@ + + + + + + + + + + ЗначенияСвойствОбъектовИерархия + + ru + Значения свойств объектов (иерархия) + + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Description + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + + ru + Свойство + + + ru + Дополнительный реквизит или дополнительное сведение. + + true + + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения.EmptyRef + + ShowError + Use + + + + + Use + Parent + + ru + Родитель + + + ru + Вышестоящее значение свойства объектов. + + true + + Catalog.ЗначенияСвойствОбъектовИерархия.EmptyRef + + + Отбор.Владелец + Catalog.ЗначенияСвойствОбъектовИерархия.StandardAttribute.Owner + + Use + + + + + Use + Description + + ru + Значение + + + ru + Значение свойства объектов. + + + ShowError + Use + + + + + Use + Code + + Use + + + + Use + + + ru + + + Managed + Use + + ru + Значение свойства объектов (иерархия) + + true + HierarchyOfItems + 2 + true + ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения + 100 + String + AsDescription + InDialog + BothWays + Catalog.ЗначенияСвойствОбъектовИерархия.Form.ФормаЭлемента + Catalog.ЗначенияСвойствОбъектовИерархия.Form.ФормаСписка + Catalog.ЗначенияСвойствОбъектовИерархия.Form.ФормаСписка + + Вес + + ru + Вес + + + Number + + 10 + 2 + + + + ru + Относительный вес значения (значимость) + + + + + 0 + + Use + Use + + + ФормаЭлемента + + ru + Форма элемента + + PersonalComputer + MobileDevice + + + ФормаСписка + + ru + Форма списка + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form deleted file mode 100644 index 08a73b7cb..000000000 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Form.form +++ /dev/null @@ -1,230 +0,0 @@ - - - - Список - 1 - true - true - - true - - - Список - - true - None - - Синоним - 4 - true - true - - true - - - Список.Синоним - - true - - ru - Представление объекта метаданных - - - СинонимРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - - СинонимКонтекстноеМеню - 5 - true - - LabelField - Enter - true - Left - true - - true - true - - - None - - СписокКоманднаяПанель - 3 - Left - - - СписокСтрокаПоиска - 7 - - СписокСтрокаПоискаРасширеннаяПодсказка - 9 - Label - true - true - - Left - - - - СписокСтрокаПоискаКонтекстноеМеню - 8 - true - - Список - - true - - - - СписокСостояниеПросмотра - 10 - - СписокСостояниеПросмотраРасширеннаяПодсказка - 12 - Label - true - true - - Left - - - - СписокСостояниеПросмотраКонтекстноеМеню - 11 - true - - ViewStatusAddition - Список - - true - - - - СписокУправлениеПоиском - 13 - - СписокУправлениеПоискомРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - - СписокУправлениеПоискомКонтекстноеМеню - 14 - true - - SearchControlAddition - Список - - true - - - - СписокРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - - СписокКонтекстноеМеню - 2 - true - - HierarchicalList - true - true - true - true - true - true - MultiRow -
        true
        - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - ExpandTopLevel - true - true - true - - Список.DefaultPicture - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - -
        - - ФормаКоманднаяПанель - -1 - Left - true - - LockOwner - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Список - 1 - - DynamicList - - - true - - - true - -
        true
        - - Catalog.ИдентификаторыОбъектовМетаданных - true - true - true - true - -
        - - - - - -
        diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss index c53358399..48fc28884 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Attributes/Список/ExtInfo/ListSettings.dcss @@ -6,8 +6,8 @@ - Используется - Asc + ПометкаУдаления + Desc ПорядокКоллекции @@ -26,23 +26,25 @@ - + + + Синоним + + + ПолноеИмя + + - Родитель - Equal - Справочник.ИдентификаторыОбъектовМетаданных.ПустаяСсылка - - - Предопределенный + ПометкаБудущегоУдаления Equal true - Шрифт - + ЦветТекста + web:DarkGray diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form index f8f09aa61..3ddc0793f 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Form.form @@ -31,7 +31,7 @@ true СинонимРасширеннаяПодсказка - 28 + 26 Label true true @@ -65,7 +65,7 @@ ПолноеИмяРасширеннаяПодсказка - 30 + 28 Label true true @@ -88,49 +88,22 @@ true
        - - Используется - 15 - true - true - - - Список.Используется - - - ИспользуетсяРасширеннаяПодсказка - 32 - Label - true - true - - Left - - - - ИспользуетсяКонтекстноеМеню - 16 - true - - CheckBoxField - Enter - true - Left - true - - None СписокКоманднаяПанель 3 Left + + ValueChoice + СписокВыборЗначения + СписокСтрокаПоиска - 19 + 17 СписокСтрокаПоискаРасширеннаяПодсказка - 21 + 19 Label true true @@ -140,7 +113,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 20 + 18 true Список @@ -150,10 +123,10 @@ СписокСостояниеПросмотра - 22 + 20 СписокСостояниеПросмотраРасширеннаяПодсказка - 24 + 22 Label true true @@ -163,7 +136,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 23 + 21 true ViewStatusAddition @@ -174,10 +147,10 @@ СписокУправлениеПоиском - 25 + 23 СписокУправлениеПоискомРасширеннаяПодсказка - 27 + 25 Label true true @@ -187,7 +160,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 26 + 24 true SearchControlAddition @@ -198,7 +171,7 @@ СписокРасширеннаяПодсказка - 18 + 16 Label true true @@ -218,7 +191,6 @@ true true MultiRow -
        true
        1 1 AutoUse @@ -261,7 +233,7 @@ ОбновитьДанныеСправочникаРасширеннаяПодсказка - 17 + 15 Label true true @@ -280,6 +252,10 @@ Left true + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true @@ -303,6 +279,9 @@ true + + Список.Используется + Список.КоллекцияПорядок @@ -310,17 +289,57 @@ Список.Description - Список.Используется + Список.Parent
        true
        + ВЫБРАТЬ + Идентификаторы.Ссылка, + Идентификаторы.ВерсияДанных, + Идентификаторы.ПометкаУдаления, + ВЫБОР + КОГДА ПОДСТРОКА(Идентификаторы.Имя, 0, 7) = "Удалить" + ТОГДА ИСТИНА + ИНАЧЕ ЛОЖЬ + КОНЕЦ КАК ПометкаБудущегоУдаления, + Идентификаторы.Предопределенный, + Идентификаторы.Родитель, + Идентификаторы.Наименование, + Идентификаторы.ПорядокКоллекции, + Идентификаторы.Имя, + Идентификаторы.Синоним, + Идентификаторы.ПолноеИмя, + Идентификаторы.ПолныйСиноним, + Идентификаторы.БезДанных, + Идентификаторы.ЗначениеПустойСсылки, + Идентификаторы.КлючОбъектаМетаданных +ИЗ + Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы Catalog.ИдентификаторыОбъектовМетаданных true true + true true true + + ВыбиратьГруппыОбъектовМетаданных + + <key>ru</key> + <value>Выбирать группы объектов метаданных</value> + + 2 + + Boolean + + + true + + + true + + ОбновитьДанныеСправочника @@ -343,6 +362,12 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>ВыбиратьГруппыОбъектовМетаданных</name> + <valueType> + <types>Boolean</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl index 46d883bec..1694d0938 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаСписка/Module.bsl @@ -1,3 +1,62 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Элементы.ОбновитьДанныеСправочника.Видимость = Ложь; + КонецЕсли; + + Если Параметры.РежимВыбора Тогда + Элементы.Список.РежимВыбора = Истина; + Элементы.ОбновитьДанныеСправочника.ТолькоВоВсехДействиях = Истина; + Параметры.Отбор.Вставить("ПометкаУдаления", Ложь); + Параметры.Отбор.Вставить("ПометкаБудущегоУдаления", Ложь); + КонецЕсли; + + Параметры.Свойство("ВыбиратьГруппыОбъектовМетаданных", ВыбиратьГруппыОбъектовМетаданных); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список + +&НаКлиенте +Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + + Если НЕ ВыбиратьГруппыОбъектовМетаданных + И Элемент.ТекущиеДанные <> Неопределено + И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.Родитель) Тогда + + СтандартнаяОбработка = Ложь; + + Если Элемент.Отображение = ОтображениеТаблицы.Дерево Тогда + Если Элемент.Развернут(Элемент.ТекущаяСтрока) Тогда + Элемент.Свернуть(Элемент.ТекущаяСтрока); + Иначе + Элемент.Развернуть(Элемент.ТекущаяСтрока); + КонецЕсли; + + ИначеЕсли Элемент.Отображение = ОтображениеТаблицы.ИерархическийСписок Тогда + + Если Элемент.ТекущийРодитель <> Элемент.ТекущаяСтрока Тогда + Элемент.ТекущийРодитель = Элемент.ТекущаяСтрока; + Иначе + ТекущаяСтрока = Элемент.ТекущаяСтрока; + Элемент.ТекущийРодитель = Неопределено; + Элемент.ТекущаяСтрока = ТекущаяСтрока; + КонецЕсли; + Иначе + Предупреждение(НСтр("ru = 'Невозможно выбрать группу объектов метаданных. + |Выберите объект метаданных.'")); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ОбновитьДанныеСправочника(Команда) @@ -25,6 +84,9 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаСервере Процедура ОбновитьДанныеСправочникаНаСервере(ЕстьИзменения, ЕстьУдаленные) @@ -36,3 +98,5 @@ КонецПроцедуры + + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form index 922efb0d7..dfb749c49 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Form.form @@ -13,7 +13,7 @@ </dataPath> <extendedTooltip> <name>НаименованиеРасширеннаяПодсказка</name> - <id>29</id> + <id>31</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -27,6 +27,7 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> + <readOnly>true</readOnly> <editMode>Auto</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -57,7 +58,7 @@ </dataPath> <extendedTooltip> <name>ИмяРасширеннаяПодсказка</name> - <id>32</id> + <id>34</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -71,6 +72,7 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> + <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -98,7 +100,7 @@ </dataPath> <extendedTooltip> <name>СинонимРасширеннаяПодсказка</name> - <id>34</id> + <id>36</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -112,6 +114,7 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> + <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -141,7 +144,7 @@ </toolTip> <extendedTooltip> <name>ИмяИСинонимОбъектаМетаданныхРасширеннаяПодсказка</name> - <id>31</id> + <id>33</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -175,9 +178,13 @@ <dataPath xsi:type="form:DataPath"> <segments>Объект.ПолноеИмя</segments> </dataPath> + <handlers> + <event>OnChange</event> + <name>ПолноеИмяПриИзменении</name> + </handlers> <extendedTooltip> <name>ПолноеИмяРасширеннаяПодсказка</name> - <id>37</id> + <id>39</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -222,7 +229,7 @@ </dataPath> <extendedTooltip> <name>ПолныйСинонимРасширеннаяПодсказка</name> - <id>39</id> + <id>41</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -236,6 +243,7 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> + <readOnly>true</readOnly> <editMode>Auto</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -265,7 +273,7 @@ </toolTip> <extendedTooltip> <name>ПолноеИмяИПолныйСинонимОбъектаМетаданныхРасширеннаяПодсказка</name> - <id>36</id> + <id>38</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -299,7 +307,7 @@ </dataPath> <extendedTooltip> <name>ПорядокКоллекцииРасширеннаяПодсказка</name> - <id>42</id> + <id>44</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -313,6 +321,7 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> + <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -341,7 +350,7 @@ <titleLocation>Right</titleLocation> <extendedTooltip> <name>БезДанныхРасширеннаяПодсказка</name> - <id>44</id> + <id>46</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -355,6 +364,7 @@ <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> + <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -380,7 +390,7 @@ </toolTip> <extendedTooltip> <name>ПустаяСсылкаПредставлениеРасширеннаяПодсказка</name> - <id>46</id> + <id>48</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -409,53 +419,6 @@ <textSize>Normal</textSize> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>ИмяПредопределенного</name> - <id>27</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>ИмяПредопределенного</segments> - </dataPath> - <toolTip> - <key>ru</key> - <value>Если идентификатор объекта метаданных задан через предопределенный элемент, тогда доступно его имя -Формат имени: полное имя у которого вместо символа "." используется символ "_"</value> - </toolTip> - <extendedTooltip> - <name>ИмяПредопределенногоРасширеннаяПодсказка</name> - <id>48</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ИмяПредопределенногоКонтекстноеМеню</name> - <id>28</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <readOnly>true</readOnly> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:InputFieldExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <wrap>true</wrap> - <chooseType>true</chooseType> - <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> - <textSize>Normal</textSize> - </extInfo> - </items> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -469,9 +432,10 @@ <key>ru</key> <value>Прочие свойства</value> </toolTip> + <horizontalStretch>true</horizontalStretch> <extendedTooltip> <name>ПрочиеСвойстваРасширеннаяПодсказка</name> - <id>41</id> + <id>43</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -494,6 +458,33 @@ <autoCommandBar> <name>ФормаКоманднаяПанель</name> <id>-1</id> + <items xsi:type="form:Button"> + <name>ФормаВключитьВозможностьРедактирования</name> + <id>29</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаВключитьВозможностьРедактированияРасширеннаяПодсказка</name> + <id>30</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.ВключитьВозможностьРедактирования</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> + </items> <horizontalAlign>Left</horizontalAlign> <autoFill>true</autoFill> </autoCommandBar> @@ -546,24 +537,28 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>ИмяПредопределенного</name> + <formCommands> + <name>ВключитьВозможностьРедактирования</name> <title> <key>ru</key> - <value>Имя предопределенного</value> + <value>Включить возможность редактирования</value> - 3 - - String - - - + 1 + + ru + Включить возможность редактирования только для целей поиска неисправности (требуется углубленное понимание работы механизма) + + true - - - true - - + + + + ВключитьВозможностьРедактирования + + + Auto + Auto + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl index a8385f3d3..45a2dc579 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,5 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -6,8 +8,39 @@ ПустаяСсылкаПредставление = Строка(ТипЗнч(Объект.ЗначениеПустойСсылки)); - Если Объект.Предопределенный Тогда - ИмяПредопределенного = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьИмяПредопределенного(Объект.Ссылка); + Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) + ИЛИ Справочники.ИдентификаторыОбъектовМетаданных.ЗапрещеноИзменятьПолноеИмя(Объект) Тогда + + Элементы.ФормаВключитьВозможностьРедактирования.Видимость = Ложь; КонецЕсли; КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ВключитьВозможностьРедактирования(Команда) + + ТолькоПросмотр = Ложь; + Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПолноеИмяПриИзменении(Элемент) + + ОбновитьСвойстваИдентификатора(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ОбновитьСвойстваИдентификатора() + + Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьСвойстваИдентификатора(Объект); + +КонецПроцедуры + diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl index adde5cfd1..e023a1dcc 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ManagerModule.bsl @@ -1,18 +1,19 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС // Процедура обновляет данные справочника по метаданным конфигурации. -// При работе процедуры может быть вызван обработчик события -// ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных(). // // Параметры: -// ЕстьИзменения - Булево, в этот параметр возвращается значение Истина, -// если производилась запись, иначе не изменяется. -// ЕстьУдаленные - Булево, в этот параметр возвращается значение Истина, -// если хотя бы один элемент справочника был помечен на удаление, -// иначе не изменяется. +// ЕстьИзменения - Булево (возвращаемое значение) - в этот параметр возвращается +// значение Истина, если производилась запись, иначе не изменяется. // -Процедура ОбновитьДанныеСправочника(ЕстьИзменения = Истина, ЕстьУдаленные = Истина) Экспорт +// ЕстьУдаленные - Булево (возвращаемое значение) - в этот параметр возвращается +// значение Истина, если хотя бы один элемент справочника был помечен +// на удаление, иначе не изменяется. +// +Процедура ОбновитьДанныеСправочника(ЕстьИзменения = Ложь, ЕстьУдаленные = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -20,23 +21,17 @@ СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных); СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных"); - СвойстваОбъектовМетаданных.Индексы.Добавить("ПолноеИмя"); + // Найден - состояние, когда для объекта метаданных найден идентификатор. + СвойстваОбъектовМетаданных.Колонки.Добавить("Найден", Новый ОписаниеТипов("Булево")); - // Обработана - состояние, когда идентификатор соотвествует объекту метаданных и - // был проверен и обновлен, если его свойства изменились - СвойстваОбъектовМетаданных.Колонки.Добавить("Обработана", Новый ОписаниеТипов("Булево")); - - // Изменение - состояние, когда Обработана = Истина и свойства идентификатора были изменены - СвойстваОбъектовМетаданных.Колонки.Добавить("Изменение", Новый ОписаниеТипов("Булево")); - - // ИзменениеСЗаменой - состояние, когда Изменение = Истина, причем был найден хотя бы один - // идентификатор с тем же ключом, и выполнялась процедура замены ссылки в информационной базе - // на новый идентификатор - СвойстваОбъектовМетаданных.Колонки.Добавить("ИзменениеСЗаменой", Новый ОписаниеТипов("Булево")); - - // ПараметрОбработчикаСобытияИзменение - структура свойств, заполняемая - // при изменении свойств идентификатора - СвойстваОбъектовМетаданных.Колонки.Добавить("ПараметрОбработчикаСобытияИзменение"); + // Порядок обновления: + // 1. Переименование объектов метаданных (с учетом нижестоящих подсистем). + // 2. Обновление предопределенных идентификаторов (коллекций объектов метаданных). + // 3. Обновление идентификаторов объектов метаданных, которые имеют ключ объекта метаданных. + // 4. Обновление идентификаторов объектов метаданных, которые не имеют ключа объекта метаданных. + // 5. В процессе 3 и 4 пометка удаления дублей идентификаторов (по полным именам). + // 6. Добавление новых идентификаторов объектов метаданных. + // 7. Обновление родителей идентификаторов объектов метаданных и запись обновленных. НачатьТранзакцию(); Попытка @@ -61,318 +56,209 @@ | Идентификаторы.ПолныйСиноним, | Идентификаторы.БезДанных, | Идентификаторы.ЗначениеПустойСсылки, - | Идентификаторы.КлючОбъектаМетаданных, - | Идентификаторы.Используется + | Идентификаторы.КлючОбъектаМетаданных КАК ХранилищеКлюча |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы - | - |УПОРЯДОЧИТЬ ПО - | Предопределенный УБЫВ"; - Выборка = Запрос.Выполнить().Выбрать(); + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; + Выгрузка = Запрос.Выполнить().Выгрузить(); + Выгрузка.Колонки.Добавить("КлючОбъектаМетаданных"); + Выгрузка.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); + Выгрузка.Колонки.Добавить("ЭтоНовый", Новый ОписаниеТипов("Булево")); + Выгрузка.Колонки.Добавить("Обновлен", Новый ОписаниеТипов("Булево")); - Пока Выборка.Следующий() Цикл - // Проверка и обновление свойств идентификаторов коллекций - СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(Выборка.Ссылка, "ИдентификаторКоллекции"); - Если СвойстваКоллекции <> Неопределено Тогда - ПроверитьОбновитьСвойстваКоллекции(Выборка, СвойстваКоллекции, ЕстьИзменения); - Продолжить; - КонецЕсли; - // Предопределенные элементы имеют приоритет, поэтому обрабатываются в первую очередь - КлючОбъектаМетаданных = Выборка.КлючОбъектаМетаданных.Получить(); - Если Выборка.Предопределенный Тогда - ПолноеИмя = ""; - ОбъектМетаданных = НайтиОбъектМетаданныхПредопределенного(Выборка.Ссылка, ПолноеИмя); - Если ОбъектМетаданных = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В справочнике Идентификаторы объектов метаданных - |для предопределенного элемента - |""%1"", - |не найден объект метаданных - |""%2"". - | - |Следует задать имя предопределенного элемента, - |соответствующее существующему объекту метаданных.'"), - ПолучитьИмяПредопределенного(Выборка.Ссылка), - ПолноеИмя); - КонецЕсли; - // Проверка, что предопределенный элемент относится к коллекции объектов метаданных, - // для которых существует КлючОбъектаМетаданных - ИмяКоллецииВЕдЧисле = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, ".")[0]; - ОписаниеКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(ИмяКоллецииВЕдЧисле, "ИмяВЕдЧисле"); - Если ОписаниеКоллекции.БезКлючаОбъектаМетаданных Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В справочнике Идентификаторы объектов метаданных - |для предопределенного элемента - |""%1"", - |найден объект метаданных - |""%2"". - | - |Но предопределенные элементы не используются для - |объектов метаданных типа ""%3"". - | - |Следуется удалить предопределенный элемент.'"), - ПолучитьИмяПредопределенного(Выборка.Ссылка), - ПолноеИмя, - ИмяКоллецииВЕдЧисле); + // Упорядочение иденитификаторов перед обработкой. + Для каждого Строка Из Выгрузка Цикл + Строка.КлючОбъектаМетаданных = Строка.ХранилищеКлюча.Получить(); + + Строка.БезКлючаОбъектаМетаданных = Строка.КлючОбъектаМетаданных = Неопределено + ИЛИ Строка.КлючОбъектаМетаданных = Тип("Неопределено"); + КонецЦикла; + Выгрузка.Сортировать("Предопределенный УБЫВ, + |ПометкаУдаления ВОЗР, + |БезКлючаОбъектаМетаданных ВОЗР"); + Выгрузка.Индексы.Добавить("ПолноеИмя"); + + // Переименование полных имен перед обработкой. + ТаблицаПереименования = ТаблицаПереименованияДляТекущейВерсии(СвойстваКоллекцийОбъектовМетаданных); + + Для каждого ОписаниеПереименования Из ТаблицаПереименования Цикл + ДлинаСтарогоПолногоИмени = СтрДлина(ОписаниеПереименования.СтароеПолноеИмя); + + Для каждого Строка Из Выгрузка Цикл + + Если Строка.Предопределенный Тогда + Продолжить; КонецЕсли; - Если КлючОбъектаМетаданных <> Неопределено - И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда - // Если ключ объекта метаданных задан, тогда нужно проверить, - // совпадают ли элементы, найденные по полному имени и по ключу - ОбъектМетаданныхПоКлючу = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); - Если ОбъектМетаданных <> ОбъектМетаданныхПоКлючу Тогда - // Если для предопределеного элемента уже задан ключ объекта метаданных, - // но не совпадает с именем, заданным в предопределенном элементе, значит - // объект был переименован на другой существующий объект метаданных - Если ОбъектМетаданныхПоКлючу = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В справочнике Идентификаторы объектов метаданных - |для предопределенного элемента - |""%1"", - |задан ключ другого удаленного объекта метаданных. - | - |При переименовании предопределенного элемента допущена ошибка: - |элемент был переименован на существующий объект метаданных - |""%2"". - | - |Повторное использование предопределенного элемента - |для других объектов метаданных недопустимо. - | - |Следует удалить предопределенный элемент удаленного объекта - |метаданных и создать новый элемент для объекта метаданных - |""%2"".'"), - ПолучитьИмяПредопределенного(Выборка.Ссылка), - ПолноеИмя); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В справочнике Идентификаторы объектов метаданных - |для предопределенного элемента - |""%1"", - |задан ключ другого объекта метаданных - |""%2"". - | - |При переименовании предопределенного элемента допущена ошибка: - |элемент был переименован на существующий объект метаданных - |""%3"". - | - |Повторное использование предопределенного элемента - |для других объектов метаданных недопустимо. - | - |Требуется задать корректное имя - |""%4"" - |предопределенного элемента - |""%1"", - |соответствующее объекту метаданных - |""%2"".'"), - ПолучитьИмяПредопределенного(Выборка.Ссылка), - ОбъектМетаданныхПоКлючу.ПолноеИмя(), - ПолноеИмя, - СтрЗаменить(ОбъектМетаданныхПоКлючу.ПолноеИмя(), ".", "_")); - КонецЕсли; - КонецЕсли; + Если ВРег(Лев(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени)) + = ВРег(ОписаниеПереименования.СтароеПолноеИмя) Тогда + + Строка.ПолноеИмя = ОписаниеПереименования.НовоеПолноеИмя + + Сред(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени + 1); КонецЕсли; + КонецЦикла; + КонецЦикла; + + // Обработка идентификаторов объектов метаданных. + Для каждого Свойства Из Выгрузка Цикл + + // Проверка и обновление свойств идентификаторов коллекций объектов метаданных. + СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти( + Свойства.Ссылка, "ИдентификаторКоллекции"); + + Если СвойстваКоллекции <> Неопределено Тогда + ПроверитьОбновитьСвойстваКоллекции(Свойства, СвойстваКоллекции, ЕстьИзменения); + Продолжить; КонецЕсли; - // Ключ объекта метаданных может быть незаполнен для предопределенных элементов, - // а может быть равен Тип("Неопределено") для объектов метаданных без ключа, по которому - // можно найти ОбъектМетаданных - Если КлючОбъектаМетаданных = Неопределено - ИЛИ КлючОбъектаМетаданных = Тип("Неопределено") Тогда - // Если объект метаданных без ключа, то его можно найти - // через имя предопределенного или через предустановленный идентификатор - Если Выборка.Предопределенный Тогда - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); - Иначе - СвойстваОбъектаМетаданных = СвойстваОбъектовМетаданных.Найти(Выборка.Ссылка, "Идентификатор"); - Если СвойстваОбъектаМетаданных = Неопределено Тогда - ОбъектМетаданных = Неопределено; - Иначе - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(СвойстваОбъектаМетаданных.ПолноеИмя); - КонецЕсли; - КонецЕсли; + Если Свойства.Предопределенный Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В справочнике ""Идентификаторы объектов метаданных"" + |для предопределенного элемента + |с именем ""%1"" + |и представлением ""%2"" + |не найдено типа объектов метаданных. + | + |Следует удалить предопределенный элемент.'"), + ПолучитьИмяПредопределенного(Свойства.Ссылка), + Строка(Свойства.Ссылка)); + КонецЕсли; + + КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных; + ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); + + Если ОбъектМетаданных = Неопределено Тогда + // Если объект метаданных без ключа, то его можно найти только по полному имени. + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Свойства.ПолноеИмя); Иначе - ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); + // Если объект метаданных удалялся с целью реструктуризации, тогда + // старый идентификатор нужно использовать для нового объекта метаданных, + // а для старых объектов метаданных создать новые идентификаторы. + Если ВРег(Лев(ОбъектМетаданных.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") + И ВРег(Лев(Свойства.Имя, СтрДлина("Удалить"))) <> ВРег("Удалить") Тогда + + НовыйОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Свойства.ПолноеИмя); + Если НовыйОбъектМетаданных <> Неопределено Тогда + ОбъектМетаданных = НовыйОбъектМетаданных; + КлючОбъектаМетаданных = Неопределено; // Чтобы выполнить обновление идентификатора. + КонецЕсли; + КонецЕсли; КонецЕсли; - // Если объект метаданных найден по ключу или имени предопределенного, - // тогда нужно подготовить строку свойств объекта метаданных + // Если объект метаданных найден по ключу или полному имени, + // тогда нужно подготовить строку свойств объекта метаданных. Если ОбъектМетаданных <> Неопределено Тогда - Строка = СвойстваОбъектовМетаданных.Найти(ОбъектМетаданных.ПолноеИмя(), "ПолноеИмя"); - Если ЗначениеЗаполнено(Строка.ПолноеИмяРодителя) Тогда - // Родитель может быть предустановленным или предопределенным элементом - СтрокаРодителя = СвойстваОбъектовМетаданных.Найти(Строка.ПолноеИмяРодителя, "ПолноеИмя"); - Если ЗначениеЗаполнено(СтрокаРодителя.Идентификатор) Тогда - Строка.Родитель = СтрокаРодителя.Идентификатор; - Иначе - ИмяПредопределенногоЭлементаРодителя = СтрЗаменить(Строка.ПолноеИмяРодителя, ".", "_"); - Попытка - Строка.Родитель = СправочникМенеджер[ИмяПредопределенногоЭлементаРодителя]; - Исключение - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В справочнике Идентификаторы объектов метаданных - |для предопределенного элемента: - |""%1"", - |не найден предопределенный элемент родителя: - |""%2"". - | - |Следует добавить предопределенный элемент родителя.'"), - ПолучитьИмяПредопределенного(Выборка.Ссылка), - СтрЗаменить(Строка.ПолноеИмяРодителя, ".", "_")); - КонецПопытки; - КонецЕсли; - КонецЕсли; + СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ОбъектМетаданных.ПолноеИмя(), "ПолноеИмя"); КонецЕсли; - Если ОбъектМетаданных = Неопределено ИЛИ Строка.Обработана Тогда + Если ОбъектМетаданных = Неопределено ИЛИ СвойстваОбъекта.Найден Тогда // Если объект метаданных не найден или найден повторно - // тогда дубль идентификатора требуется пометить на удаление - Если Выборка.Предопределенный = Выборка.ПометкаУдаления - ИЛИ ЗначениеЗаполнено(Выборка.Родитель) - ИЛИ Лев(Выборка.Наименование, 1) <> "?" - ИЛИ Лев(Выборка.Имя, 1) <> "?" - ИЛИ Лев(Выборка.Синоним, 1) <> "?" - ИЛИ Лев(Выборка.ПолноеИмя, 1) <> "?" - ИЛИ Лев(Выборка.ПолныйСиноним, 1) <> "?" - ИЛИ Выборка.Используется - ИЛИ Выборка.ЗначениеПустойСсылки <> Неопределено Тогда - // Сохранения старых свойств для обработчика события ПриИзмененииИдентификатораОбъектаМетаданных - ТаблицаОбъект = Выборка.Ссылка.ПолучитьОбъект(); - Свойства = ПараметрыОбработчикаСобытия(); - ЗаполнитьЗначенияСвойств(Свойства.Старые, ТаблицаОбъект); - // Установка новых свойств идентификатора объекта метаданных - ТаблицаОбъект = Выборка.Ссылка.ПолучитьОбъект(); - Используется = ТаблицаОбъект.Используется; - ТаблицаОбъект.ПометкаУдаления = НЕ Выборка.Предопределенный; - ТаблицаОбъект.Родитель = Неопределено; - ТаблицаОбъект.Наименование = "? " + ТаблицаОбъект.Наименование; - ТаблицаОбъект.Имя = "? " + ТаблицаОбъект.Имя; - ТаблицаОбъект.Синоним = "? " + ТаблицаОбъект.Синоним; - ТаблицаОбъект.ПолноеИмя = "? " + ТаблицаОбъект.ПолноеИмя; - ТаблицаОбъект.ПолныйСиноним = "? " + ТаблицаОбъект.ПолныйСиноним; - ТаблицаОбъект.Используется = Ложь; - ТаблицаОбъект.ЗначениеПустойСсылки = Неопределено; - ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника"); - ТаблицаОбъект.Записать(); - ЕстьИзменения = Истина; - // Обработка преобразования обычного элемента в предопределенный - // выполняется, если при существовании обычного элемента был добавлен - // предопределенный элемент - Если ОбъектМетаданных <> Неопределено И Используется Тогда - // Поиск предопределенного элемента - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПолноеИмя", ОбъектМетаданных.ПолноеИмя()); - Запрос.Текст = - "ВЫБРАТЬ - | Таблица.Ссылка, - | Таблица.ПолноеИмя - |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК Таблица - |ГДЕ - | Таблица.ПолноеИмя = &ПолноеИмя - | И Таблица.Предопределенный"; - Выгрузка = Запрос.Выполнить().Выгрузить(); - // Если найдено более одного предопределенного элемента для одного - // объекта метаданных, значит произошла ошибка при разработке или - // при установке разным предопределенным элементам ключа одного и - // того же объекта метаданных - Если Выгрузка.Количество() > 1 Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при обновлении справочника ""Идентификаторы объектов метаданных"". - |По внутреннему ключу поиска для объекта метаданных ""%1"" - |найдено более одного предопределенного элемента.'"), - Выгрузка[0].ПолноеИмя); - ИначеЕсли Выгрузка.Количество() = 1 Тогда - // Если старый идентификатор использован в базе данных его требуется - // заменить на новый идентификатор предопределенного элемента - Строка.ИзменениеСЗаменой = Истина; - Свойства.СтандартнаяЗаменаСсылок = Истина; - Свойства.Новые = Строка.ПараметрОбработчикаСобытияИзменение.Новые; - ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Изменение", Свойства); - Если Свойства.СтандартнаяЗаменаСсылок = Истина Тогда - ЗаменитьСсылкуВИнформационнойБазе(ТаблицаОбъект.Ссылка, Выгрузка[0].Ссылка); - КонецЕсли; - КонецЕсли; - Иначе - ЕстьУдаленные = Истина; - // Вызов обработчика события ПриИзмененииИдентификатораОбъектаМетаданных - ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Удаление", Свойства); - КонецЕсли; + // тогда идентификатор требуется пометить на удаление. + Если НЕ Свойства.ПометкаУдаления + ИЛИ ЗначениеЗаполнено(Свойства.Родитель) + ИЛИ Лев(Свойства.Наименование, 1) <> "?" + ИЛИ Лев(Свойства.Имя, 1) <> "?" + ИЛИ Лев(Свойства.Синоним, 1) <> "?" + ИЛИ Лев(Свойства.ПолноеИмя, 1) <> "?" + ИЛИ Лев(Свойства.ПолныйСиноним, 1) <> "?" + ИЛИ Свойства.ЗначениеПустойСсылки <> Неопределено + ИЛИ Свойства.КлючОбъектаМетаданных <> Неопределено Тогда + + // Установка новых свойств идентификатора объекта метаданных. + Свойства.ПометкаУдаления = Истина; + Свойства.Родитель = ПустаяСсылка(); + Свойства.Наименование = ВставитьЗнакВопроса(Свойства.Наименование); + Свойства.Имя = ВставитьЗнакВопроса(Свойства.Имя); + Свойства.Синоним = ВставитьЗнакВопроса(Свойства.Синоним); + Свойства.ПолноеИмя = ВставитьЗнакВопроса(Свойства.ПолноеИмя); + Свойства.ПолныйСиноним = ВставитьЗнакВопроса(Свойства.ПолныйСиноним); + Свойства.ЗначениеПустойСсылки = Неопределено; + Свойства.КлючОбъектаМетаданных = Неопределено; + Свойства.Обновлен = Истина; + ЕстьУдаленные = Истина; КонецЕсли; Иначе - // Обновление свойств существующих объектов метаданных, если изменились - Строка.Обработана = Истина; - Если Выборка.Родитель <> Строка.Родитель - ИЛИ Выборка.Наименование <> Строка.Наименование - ИЛИ Выборка.ПорядокКоллекции <> Строка.ПорядокКоллекции - ИЛИ Выборка.Имя <> Строка.Имя - ИЛИ Выборка.Синоним <> Строка.Синоним - ИЛИ Выборка.ПолноеИмя <> Строка.ПолноеИмя - ИЛИ Выборка.ПолныйСиноним <> Строка.ПолныйСиноним - ИЛИ Выборка.БезДанных <> Строка.БезДанных - ИЛИ Выборка.ЗначениеПустойСсылки <> Строка.ЗначениеПустойСсылки - ИЛИ Выборка.ПометкаУдаления + // Обновление свойств существующих объектов метаданных, если изменились. + СвойстваОбъекта.Найден = Истина; + Если Свойства.Наименование <> СвойстваОбъекта.Наименование + ИЛИ Свойства.ПорядокКоллекции <> СвойстваОбъекта.ПорядокКоллекции + ИЛИ Свойства.Имя <> СвойстваОбъекта.Имя + ИЛИ Свойства.Синоним <> СвойстваОбъекта.Синоним + ИЛИ Свойства.ПолноеИмя <> СвойстваОбъекта.ПолноеИмя + ИЛИ Свойства.ПолныйСиноним <> СвойстваОбъекта.ПолныйСиноним + ИЛИ Свойства.БезДанных <> СвойстваОбъекта.БезДанных + ИЛИ Свойства.ЗначениеПустойСсылки <> СвойстваОбъекта.ЗначениеПустойСсылки + ИЛИ Свойства.ПометкаУдаления ИЛИ КлючОбъектаМетаданных = Неопределено - ИЛИ НЕ Выборка.Используется Тогда - // Сохранения старых свойств для обработчика события ПриИзмененииИдентификатораОбъектаМетаданных - ТаблицаОбъект = Выборка.Ссылка.ПолучитьОбъект(); - Свойства = ПараметрыОбработчикаСобытия(); - ЗаполнитьЗначенияСвойств(Свойства.Старые, ТаблицаОбъект); - // Установка новых свойств идентификатора объекта метаданных - ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Строка); - Если КлючОбъектаМетаданных = Неопределено Тогда - ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(КлючОбъектаМетаданных(Строка.ПолноеИмя)); + ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных + И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда + + // Установка новых свойств идентификатора объекта метаданных. + ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); + + Если КлючОбъектаМетаданных = Неопределено + ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных + И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда + + Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(СвойстваОбъекта.ПолноеИмя); КонецЕсли; - ТаблицаОбъект.ПометкаУдаления = Ложь; - ТаблицаОбъект.Используется = Истина; - ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника"); - ТаблицаОбъект.Записать(); - ЕстьИзменения = Истина; - // Сохранения новых свойств для обработчика события ПриИзмененииИдентификатораОбъектаМетаданных - ЗаполнитьЗначенияСвойств(Свойства.Новые, ТаблицаОбъект); - Строка.Изменение = Истина; - Строка.ПараметрОбработчикаСобытияИзменение = Свойства; + + Свойства.ПометкаУдаления = Ложь; + Свойства.Обновлен = Истина; КонецЕсли; КонецЕсли; КонецЦикла; - // Добавление идентификаторов новых объектов метаданных - // Объекты метаданных без ключа объекта метаданных не добавляются, - // такие объекты метаданных добавляются только вручную в виде предопределенных элементов, - // например, подсистемы - Для каждого Строка Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Обработана", Ложь)) Цикл - ТаблицаОбъект = СоздатьЭлемент(); - Если ЗначениеЗаполнено(Строка.Идентификатор) Тогда - ТаблицаОбъект.УстановитьСсылкуНового(Строка.Идентификатор); + // Добавление идентификаторов новых объектов метаданных. + Для каждого СвойстваОбъекта Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Найден", Ложь)) Цикл + Свойства = Выгрузка.Добавить(); + ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); + Свойства.ЭтоНовый = Истина; + Свойства.Ссылка = ПолучитьСсылку(); + Свойства.Предопределенный = Ложь; + Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(Свойства.ПолноеИмя); + КонецЦикла; + + // Обновление родителей идентификаторов объектов метаданных. + Для каждого Свойства Из Выгрузка Цикл + + Если НЕ Свойства.Предопределенный Тогда + СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(Свойства.ПолноеИмя, "ПолноеИмя"); + НовыйРодитель = ПустаяСсылка(); + + Если СвойстваОбъекта <> Неопределено Тогда + + Если НЕ ЗначениеЗаполнено(СвойстваОбъекта.ПолноеИмяРодителя) Тогда + // Коллекция объектов метаданных. + НовыйРодитель = СвойстваОбъекта.Родитель; + Иначе + // Не коллекция объектов метаданных, например, подсистема. + ОписаниеРодителя = Выгрузка.Найти(СвойстваОбъекта.ПолноеИмяРодителя, "ПолноеИмя"); + Если ОписаниеРодителя <> Неопределено Тогда + НовыйРодитель = ОписаниеРодителя.Ссылка; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если Свойства.Родитель <> НовыйРодитель Тогда + Свойства.Родитель = НовыйРодитель; + Свойства.Обновлен = Истина; + КонецЕсли; КонецЕсли; - Если ЗначениеЗаполнено(Строка.ПолноеИмяРодителя) Тогда - Строка.Родитель = СвойстваОбъектовМетаданных.Найти(Строка.ПолноеИмяРодителя, "ПолноеИмя").Идентификатор; + + Если Свойства.ЭтоНовый Тогда + ТаблицаОбъект = СоздатьЭлемент(); + ТаблицаОбъект.УстановитьСсылкуНового(Свойства.Ссылка); + + ИначеЕсли Свойства.Обновлен Тогда + ТаблицаОбъект = Свойства.Ссылка.ПолучитьОбъект(); + Иначе + Продолжить; КонецЕсли; - ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Строка); - ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(КлючОбъектаМетаданных(Строка.ПолноеИмя)); - ТаблицаОбъект.Используется = Истина; + ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Свойства); + ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(Свойства.КлючОбъектаМетаданных); ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника"); ТаблицаОбъект.Записать(); ЕстьИзменения = Истина; - // Вызов обработчика события ПриИзмененииИдентификатораОбъектаМетаданных - Свойства = ПараметрыОбработчикаСобытия(); - ЗаполнитьЗначенияСвойств(Свойства.Новые, ТаблицаОбъект); - ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Добавление", Свойства); - КонецЦикла; - - // Вызов обработчика события ПриИзмененииИдентификатораОбъектаМетаданных для вида события "Изменение" без замены - Для каждого Строка Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Изменение, ИзменениеСЗаменой", Истина, Ложь)) Цикл - ТребуетсяВызовОбработчикаСобытия = Ложь; - Свойства = Строка.ПараметрОбработчикаСобытияИзменение; - Для каждого КлючИЗначение ИЗ Свойства.Новые Цикл - Если Свойства.Новые[КлючИЗначение.Ключ] <> Свойства.Старые[КлючИЗначение.Ключ] Тогда - ТребуетсяВызовОбработчикаСобытия = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - Если ТребуетсяВызовОбработчикаСобытия Тогда - ОбщегоНазначенияПереопределяемый.ПриИзмененииИдентификатораОбъектаМетаданных("Изменение", Свойства); - КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); @@ -386,7 +272,141 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Только для внутреннего использования +// Только для внутреннего использования. +Процедура ВыгрузитьДанныеСправочника(Знач КаталогВыгрузки) Экспорт + + Запись = Новый ЗаписьXML; + Запись.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml"); + Запись.ЗаписатьОбъявлениеXML(); + + Запись.ЗаписатьНачалоЭлемента("Data"); + Запись.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); + Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + Запись.ЗаписатьСоответствиеПространстваИмен("ns1", "http://v8.1c.ru/8.1/data/core"); + Запись.ЗаписатьСоответствиеПространстваИмен("ns2", "http://v8.1c.ru/8.1/data/enterprise"); + Запись.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/8.1/data/enterprise/current-config"); + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(); + ЭлементБлокировки.Область = "Справочник.ИдентификаторыОбъектовМетаданных"; + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИдентификаторыОбъектовМетаданных.Ссылка КАК Ссылка + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных"; + Выборка = Запрос.Выполнить().Выбрать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Пока Выборка.Следующий() Цикл + СериализаторXDTO.ЗаписатьXML(Запись, Выборка.Ссылка.ПолучитьОбъект(), НазначениеТипаXML.Явное); + КонецЦикла; + + Запись.ЗаписатьКонецЭлемента(); + + Запись.Закрыть(); + +КонецПроцедуры + +// Только для внутреннего использования. +Процедура ДополнитьСловарьЗаменСсылокИдентификаторовТекущихИЗагружаемыхДанных( + Знач СловарьЗамен, + Знач КаталогВыгрузки) Экспорт + + // Перед загрузкой в пустую базу требутся обновление справочника. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы + |ГДЕ + | НЕ Идентификаторы.Предопределенный"; + + Если Запрос.Выполнить().Пустой() Тогда + ОбновитьДанныеСправочника(); + КонецЕсли; + + СоответствиеСсылок = Новый Соответствие; + + Чтение = Новый ЧтениеXML; + Чтение.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml"); + Чтение.ПерейтиКСодержимому(); + Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента + ИЛИ Чтение.Имя <> "Data" Тогда + + ВызватьИсключение(НСтр("ru = 'Неверный формат файла MetadataObjectsIdentifiers.xml'")); + + КонецЕсли; + + Если НЕ Чтение.Прочитать() Тогда + ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'")); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Идентификаторы.Ссылка, + | Идентификаторы.ПолноеИмя, + | Идентификаторы.ПометкаУдаления + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; + + СвойстваИдентификаторов = Запрос.Выполнить().Выгрузить(); + СвойстваИдентификаторов.Индексы.Добавить("Ссылка"); + СвойстваИдентификаторов.Индексы.Добавить("ПолноеИмя"); + + Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл + Данные = СериализаторXDTO.ПрочитатьXML(Чтение); + + СвойстваИдентификатора = СвойстваИдентификаторов.Найти(Данные.Ссылка, "Ссылка"); + Если СвойстваИдентификатора = Неопределено + ИЛИ СвойстваИдентификатора.ПометкаУдаления Тогда + + КлючОбъектаМетаданных = Данные.КлючОбъектаМетаданных.Получить(); + ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); + + Если ОбъектМетаданных = Неопределено Тогда + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Данные.ПолноеИмя); + КонецЕсли; + + Если ОбъектМетаданных <> Неопределено Тогда + Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); + + // Ключ - Существующая ссылка. + // Значение - Загружаемая ссылка. + СсылкаНового = Данные.ПолучитьСсылкуНового(); + Если ЗначениеЗаполнено(СсылкаНового) Тогда + ЗагружаемыйИдентификатор = СсылкаНового.УникальныйИдентификатор(); + Иначе + ЗагружаемыйИдентификатор = Данные.Ссылка.УникальныйИдентификатор(); + КонецЕсли; + + СоответствиеСсылок.Вставить(Идентификатор.УникальныйИдентификатор(), ЗагружаемыйИдентификатор); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + СтрокаФрагмента = СловарьЗамен.Добавить(); + СтрокаФрагмента.Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"); + СтрокаФрагмента.СоответствиеСсылок = СоответствиеСсылок; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Только для внутреннего использования. Функция КлючОбъектаМетаданныхСоответствуетПолномуИмени(СвойстваИдентификатора) Экспорт РезультатПроверки = Новый Структура; @@ -425,183 +445,180 @@ КонецФункции -// Только для внутреннего использования -Процедура ВыгрузитьДанныеСправочника(Знач КаталогВыгрузки) Экспорт - - Запись = Новый ЗаписьXML; - Запись.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml"); - Запись.ЗаписатьОбъявлениеXML(); - - Запись.ЗаписатьНачалоЭлемента("Data"); - Запись.ЗаписатьСоответствиеПространстваИмен("xs", "http://www.w3.org/2001/XMLSchema"); - Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); - Запись.ЗаписатьСоответствиеПространстваИмен("ns1", "http://v8.1c.ru/8.1/data/core"); - Запись.ЗаписатьСоответствиеПространстваИмен("ns2", "http://v8.1c.ru/8.1/data/enterprise"); - Запись.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/8.1/data/enterprise/current-config"); +// Только для внутреннего использования. +Функция ПолноеИмяИспользуется(ПолноеИмя, КромеИдентификатора = Неопределено) Экспорт Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ИдентификаторыОбъектовМетаданных.Ссылка КАК Ссылка - |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных"; - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - СериализаторXDTO.ЗаписатьXML(Запись, Выборка.Ссылка.ПолучитьОбъект(), НазначениеТипаXML.Явное); - КонецЦикла; - - Запись.ЗаписатьКонецЭлемента(); - - Запись.Закрыть(); - -КонецПроцедуры - -// Только для внутреннего использования -Процедура ДополнитьСловарьЗаменСсылокИдентификаторовТекущихИЗагружаемыхДанных(Знач СловарьЗамен, Знач КаталогВыгрузки) Экспорт - - // Перед загрузкой в пустую базу требутся обновление справочника. - Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПолноеИмя", ПолноеИмя); + Запрос.УстановитьПараметр("Ссылка", КромеИдентификатора); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА КАК ЗначениеИстина |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы + | Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных |ГДЕ - | НЕ Идентификаторы.Предопределенный"; + | ИдентификаторыОбъектовМетаданных.Ссылка <> &Ссылка + | И ИдентификаторыОбъектовМетаданных.ПолноеИмя = &ПолноеИмя"; - Если Запрос.Выполнить().Пустой() Тогда - ОбновитьДанныеСправочника(); + Возврат НЕ Запрос.Выполнить().Пустой(); + +КонецФункции + +// Только для внутреннего использования. +// ПолноеИмя в объекте должно быть уже установлено и корректно. +// +Процедура ОбновитьСвойстваИдентификатора(Объект) Экспорт + + // Восстановление старых значений. + Если НЕ Объект.ЭтоНовый() Тогда + СтарыеЗначения = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + Объект.Ссылка, + "Наименование, + |ПорядокКоллекции, + |Имя, + |Синоним, + |ПолныйСиноним, + |БезДанных, + |ЗначениеПустойСсылки, + |КлючОбъектаМетаданных"); + ЗаполнитьЗначенияСвойств(Объект, СтарыеЗначения); КонецЕсли; - СоответствиеСсылок = Новый Соответствие; + ПолноеИмя = Объект.ПолноеИмя; + ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПолноеИмя); - Чтение = Новый ЧтениеXML; - Чтение.ОткрытьФайл(КаталогВыгрузки + "MetadataObjectsIdentifiers.xml"); - Чтение.ПерейтиКСодержимому(); - Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента - ИЛИ Чтение.Имя <> "Data" Тогда + Если ОбъектМетаданных = Неопределено Тогда + Объект.ПометкаУдаления = Истина; + Объект.Родитель = ПустаяСсылка(); + Объект.Наименование = ВставитьЗнакВопроса(Объект.Наименование); + Объект.Имя = ВставитьЗнакВопроса(Объект.Имя); + Объект.Синоним = ВставитьЗнакВопроса(Объект.Синоним); + Объект.ПолноеИмя = ВставитьЗнакВопроса(Объект.ПолноеИмя); + Объект.ПолныйСиноним = ВставитьЗнакВопроса(Объект.ПолныйСиноним); + Объект.ЗначениеПустойСсылки = Неопределено; - ВызватьИсключение(НСтр("ru = 'Неверный формат файла MetadataObjectsIdentifiers.xml'")); + Если ТипЗнч(Объект) <> Тип("ДанныеФормыСтруктура") Тогда + Объект.КлючОбъектаМетаданных = Неопределено; + КонецЕсли; + Иначе + ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); + ПозицияТочки = Найти(ПолноеИмя, "."); + ИмяБазовогоТипа = Лев(ПолноеИмя, ПозицияТочки -1); - КонецЕсли; - - Если НЕ Чтение.Прочитать() Тогда - ВызватьИсключение(НСтр("ru = 'Ошибка чтения XML. Обнаружено завершение файла.'")); - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Идентификаторы.Ссылка, - | Идентификаторы.ПолноеИмя, - | Идентификаторы.Используется - |ИЗ - | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; - - СвойстваИдентификаторов = Запрос.Выполнить().Выгрузить(); - СвойстваИдентификаторов.Индексы.Добавить("Ссылка"); - СвойстваИдентификаторов.Индексы.Добавить("ПолноеИмя"); - - Пока Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл - Данные = СериализаторXDTO.ПрочитатьXML(Чтение); + СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных(); + Отбор = Новый Структура("ИмяВЕдЧисле", ИмяБазовогоТипа); + Строки = СвойстваКоллекцийОбъектовМетаданных.НайтиСтроки(Отбор); + СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных.Скопировать(Строки); - СвойстваИдентификатора = СвойстваИдентификаторов.Найти(Данные.Ссылка, "Ссылка"); - Если СвойстваИдентификатора = Неопределено - ИЛИ НЕ СвойстваИдентификатора.Используется Тогда - - КлючОбъектаМетаданных = Данные.КлючОбъектаМетаданных.Получить(); - Если КлючОбъектаМетаданных <> Неопределено - И КлючОбъектаМетаданных <> Тип("Неопределено") - И ТипЗнч(КлючОбъектаМетаданных) = Тип("Тип") Тогда + СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных); + СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ПолноеИмя, "ПолноеИмя"); + + ЗаполнитьЗначенияСвойств(Объект, СвойстваОбъекта); + + Если ТипЗнч(Объект) <> Тип("ДанныеФормыСтруктура") Тогда + КлючОбъектаМетаданных = Объект.КлючОбъектаМетаданных.Получить(); + Если КлючОбъектаМетаданных = Неопределено + ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных + И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда - ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); - Иначе - ОбъектМетаданных = Неопределено; - КонецЕсли; - - Если ОбъектМетаданных = Неопределено Тогда - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Данные.ПолноеИмя); - КонецЕсли; - - Если ОбъектМетаданных <> Неопределено Тогда - Идентификатор = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОбъектМетаданных); - Если Данные.Ссылка <> Идентификатор Тогда - // Ключ - Существующая ссылка. - // Значение - Загружаемая ссылка. - СоответствиеСсылок.Вставить(Идентификатор, Данные.Ссылка); - КонецЕсли; + Объект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(КлючОбъектаМетаданных(СвойстваОбъекта.ПолноеИмя)); КонецЕсли; КонецЕсли; - КонецЦикла; - - СтрокаФрагмента = СловарьЗамен.Добавить(); - СтрокаФрагмента.Тип = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных"); - СтрокаФрагмента.СоответствиеСсылок = СоответствиеСсылок; + КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Только для внутреннего использования. +Функция ЗапрещеноИзменятьПолноеИмя(Объект) Экспорт + + Если Объект.Предопределенный Тогда + Возврат Истина; + КонецЕсли; + + ПозицияТочки = Найти(Объект.ПолноеИмя, "."); + ИмяБазовогоТипа = Лев(Объект.ПолноеИмя, ПозицияТочки -1); + + СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных(); + СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(ИмяБазовогоТипа, "ИмяВЕдЧисле"); + + Если СвойстваКоллекции <> Неопределено + И НЕ СвойстваКоллекции.БезКлючаОбъектаМетаданных Тогда + + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции Процедура ПроверитьОбновитьСвойстваКоллекции(Знач ТекущиеСвойства, Знач НовыеСвойства, ЕстьИзменения) - НаименованиеКоллекции = НовыеСвойства.Синоним + " (" + НСтр("ru = 'Коллекция'") + ")"; + НаименованиеКоллекции = НовыеСвойства.Синоним; - Если ТекущиеСвойства.Наименование <> НаименованиеКоллекции - ИЛИ ТекущиеСвойства.ПорядокКоллекции <> НовыеСвойства.ПорядокКоллекции - ИЛИ ТекущиеСвойства.Имя <> НовыеСвойства.Имя - ИЛИ ТекущиеСвойства.Синоним <> НовыеСвойства.Синоним - ИЛИ ТекущиеСвойства.ПолноеИмя <> НовыеСвойства.Имя - ИЛИ ТекущиеСвойства.ПолныйСиноним <> НовыеСвойства.Синоним - ИЛИ ТекущиеСвойства.БезДанных <> Ложь - ИЛИ ТекущиеСвойства.ЗначениеПустойСсылки <> Неопределено - ИЛИ ТекущиеСвойства.Используется <> Истина - ИЛИ ТекущиеСвойства.КлючОбъектаМетаданных.Получить() <> Неопределено Тогда + Если ТекущиеСвойства.Наименование <> НаименованиеКоллекции + ИЛИ ТекущиеСвойства.ПорядокКоллекции <> НовыеСвойства.ПорядокКоллекции + ИЛИ ТекущиеСвойства.Имя <> НовыеСвойства.Имя + ИЛИ ТекущиеСвойства.Синоним <> НовыеСвойства.Синоним + ИЛИ ТекущиеСвойства.ПолноеИмя <> НовыеСвойства.Имя + ИЛИ ТекущиеСвойства.ПолныйСиноним <> НовыеСвойства.Синоним + ИЛИ ТекущиеСвойства.БезДанных <> Ложь + ИЛИ ТекущиеСвойства.ЗначениеПустойСсылки <> Неопределено + ИЛИ ТекущиеСвойства.КлючОбъектаМетаданных <> Неопределено Тогда - // Установка новых свойств - Объект = ТекущиеСвойства.Ссылка.ПолучитьОбъект(); - Объект.Наименование = НаименованиеКоллекции; - Объект.ПорядокКоллекции = НовыеСвойства.ПорядокКоллекции; - Объект.Имя = НовыеСвойства.Имя; - Объект.Синоним = НовыеСвойства.Синоним; - Объект.ПолноеИмя = НовыеСвойства.Имя; - Объект.ПолныйСиноним = НовыеСвойства.Синоним; - Объект.БезДанных = Ложь; - Объект.ЗначениеПустойСсылки = Неопределено; - Объект.КлючОбъектаМетаданных = Неопределено; - Объект.Используется = Истина; - Объект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника"); - Объект.Записать(); - ЕстьИзменения = Истина; + // Установка новых свойств. + ТекущиеСвойства.Наименование = НаименованиеКоллекции; + ТекущиеСвойства.ПорядокКоллекции = НовыеСвойства.ПорядокКоллекции; + ТекущиеСвойства.Имя = НовыеСвойства.Имя; + ТекущиеСвойства.Синоним = НовыеСвойства.Синоним; + ТекущиеСвойства.ПолноеИмя = НовыеСвойства.Имя; + ТекущиеСвойства.ПолныйСиноним = НовыеСвойства.Синоним; + ТекущиеСвойства.БезДанных = Ложь; + ТекущиеСвойства.ЗначениеПустойСсылки = Неопределено; + ТекущиеСвойства.КлючОбъектаМетаданных = Неопределено; + ТекущиеСвойства.Обновлен = Истина; КонецЕсли; КонецПроцедуры -Функция НайтиОбъектМетаданныхПредопределенного(Знач Ссылка, ПолноеИмя) +Функция ТаблицаПереименованияДляТекущейВерсии(СвойстваКоллекцийОбъектовМетаданных) - ИмяПредопределенного = ПолучитьИмяПредопределенного(Ссылка); + ТаблицаПереименования = Новый ТаблицаЗначений; + ТаблицаПереименования.Колонки.Добавить("ПорядокБиблиотеки", Новый ОписаниеТипов("Число")); + ТаблицаПереименования.Колонки.Добавить("ВерсияЧасть1", Новый ОписаниеТипов("Число")); + ТаблицаПереименования.Колонки.Добавить("ВерсияЧасть2", Новый ОписаниеТипов("Число")); + ТаблицаПереименования.Колонки.Добавить("ВерсияЧасть3", Новый ОписаниеТипов("Число")); + ТаблицаПереименования.Колонки.Добавить("ВерсияЧасть4", Новый ОписаниеТипов("Число")); + ТаблицаПереименования.Колонки.Добавить("ПорядокДобавления", Новый ОписаниеТипов("Число")); + ТаблицаПереименования.Колонки.Добавить("СтароеПолноеИмя", Новый ОписаниеТипов("Строка")); + ТаблицаПереименования.Колонки.Добавить("НовоеПолноеИмя", Новый ОписаниеТипов("Строка")); - Если ВРег(Лев(ИмяПредопределенного, 11)) = ВРег("Подсистема_") Тогда - Пока Истина Цикл - ПозицияСледующегоИмени = Найти(ВРег(ИмяПредопределенного), ВРег("_Подсистема")); - Если ПозицияСледующегоИмени > 0 Тогда - ПолноеИмя = ПолноеИмя + ".Подсистема." + Сред(ИмяПредопределенного, 12, ПозицияСледующегоИмени - 12); - ИмяПредопределенного = Сред(ИмяПредопределенного, ПозицияСледующегоИмени + 1); - Иначе - ПолноеИмя = ПолноеИмя + ".Подсистема." + Сред(ИмяПредопределенного, 12); - Прервать; - КонецЕсли; - КонецЦикла; - ПолноеИмя = Сред(ПолноеИмя, 2); - Иначе - ПозицияПодчеркивания = Найти(ИмяПредопределенного, "_"); - ПолноеИмя = Лев(ИмяПредопределенного, ПозицияПодчеркивания-1) - + "." - + Сред(ИмяПредопределенного, ПозицияПодчеркивания + 1); - КонецЕсли; + КоллекцииБезКлюча = Новый Соответствие; - Возврат Метаданные.НайтиПоПолномуИмени(ПолноеИмя); + Отбор = Новый Структура("БезКлючаОбъектаМетаданных", Истина); + КоллекцииБезКлючаОбъектаМетаданных = СвойстваКоллекцийОбъектовМетаданных.НайтиСтроки(Отбор); + + Для каждого Строка Из КоллекцииБезКлючаОбъектаМетаданных Цикл + КоллекцииБезКлюча.Вставить(ВРег(Строка.ИмяВЕдЧисле), Строка.ИмяВЕдЧисле); + КонецЦикла; + + Итог = Новый Структура; + Итог.Вставить("Таблица", ТаблицаПереименования); + Итог.Вставить("КоллекцииБезКлюча", КоллекцииБезКлюча); + Итог.Вставить("ВерсииБиблиотек", Новый Соответствие); + Итог.Вставить("ПорядокБиблиотек", Новый Соответствие); + + СтандартныеПодсистемыПереопределяемый.ЗаполнитьТаблицуПереименованияОбъектовМетаданных(Итог); + ОбщегоНазначенияПереопределяемый.ЗаполнитьТаблицуПереименованияОбъектовМетаданных(Итог); + + ТаблицаПереименования.Сортировать( + "ПорядокБиблиотеки ВОЗР, + |ВерсияЧасть1 ВОЗР, + |ВерсияЧасть2 ВОЗР, + |ВерсияЧасть3 ВОЗР, + |ВерсияЧасть4 ВОЗР, + |ПорядокДобавления ВОЗР"); + + Возврат ТаблицаПереименования; КонецФункции @@ -612,12 +629,7 @@ КлассОМ = Лев( ПолноеИмя, ПозицияТочки-1); ИмяОМ = Сред(ПолноеИмя, ПозицияТочки+1); - Если ВРег(КлассОМ) = ВРег("Роль") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - ПользовательИБ.Роли.Добавить(Метаданные.Роли[ИмяОМ]); - Возврат ПользовательИБ.Роли; - - ИначеЕсли ВРег(КлассОМ) = ВРег("ПланОбмена") Тогда + Если ВРег(КлассОМ) = ВРег("ПланОбмена") Тогда Возврат Тип(КлассОМ + "Ссылка." + ИмяОМ); ИначеЕсли ВРег(КлассОМ) = ВРег("Справочник") Тогда @@ -672,13 +684,7 @@ ОбъектМетаданных = Неопределено; - Если ТипЗнч(КлючОбъектаМетаданных) = Тип("РолиПользователя") Тогда - Для каждого Роль Из Метаданные.Роли Цикл - Если КлючОбъектаМетаданных.Содержит(Роль) Тогда - Возврат Роль; - КонецЕсли; - КонецЦикла; - Иначе + Если ТипЗнч(КлючОбъектаМетаданных) = Тип("Тип") Тогда ОбъектМетаданных = Метаданные.НайтиПоТипу(КлючОбъектаМетаданных); КонецЕсли; @@ -693,7 +699,6 @@ СвойстваОбъектовМетаданных.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510))); СвойстваОбъектовМетаданных.Колонки.Добавить("ПолноеИмяРодителя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(510))); СвойстваОбъектовМетаданных.Колонки.Добавить("ПорядокКоллекции", Новый ОписаниеТипов("Число")); - СвойстваОбъектовМетаданных.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); СвойстваОбъектовМетаданных.Колонки.Добавить("Родитель", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); СвойстваОбъектовМетаданных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150))); СвойстваОбъектовМетаданных.Колонки.Добавить("Синоним", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(255))); @@ -702,26 +707,21 @@ СвойстваОбъектовМетаданных.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); СвойстваОбъектовМетаданных.Колонки.Добавить("ЗначениеПустойСсылки"); - // Подготовка предустановленных идентификаторов - ПредустановленныеИдентификаторы = Новый ТаблицаЗначений; - ПредустановленныеИдентификаторы.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); - ПредустановленныеИдентификаторы.Колонки.Добавить("ПолноеИмя", Новый ОписаниеТипов("Строка")); - - ОбщегоНазначенияПереопределяемый.ЗаполнитьПредустановленныеИдентификаторыОбъектовМетаданных(ПредустановленныеИдентификаторы); - Для каждого СвойстваКоллекции Из СвойстваКоллекцийОбъектовМетаданных Цикл - ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, СвойстваОбъектовМетаданных, ПредустановленныеИдентификаторы); + ДобавитьСвойстваОбъектовМетаданных(Метаданные[СвойстваКоллекции.Имя], СвойстваКоллекции, СвойстваОбъектовМетаданных); КонецЦикла; - Если ПредустановленныеИдентификаторы.Количество() > 0 Тогда - ВызватьИсключениеОшибкиЗаполненияПредустановленныхИдентификаторов(ПредустановленныеИдентификаторы, СвойстваКоллекцийОбъектовМетаданных); - КонецЕсли; + СвойстваОбъектовМетаданных.Индексы.Добавить("ПолноеИмя"); Возврат СвойстваОбъектовМетаданных; КонецФункции -Процедура ДобавитьСвойстваОбъектовМетаданных(Знач КолекцияОбъектовМетаданных, Знач СвойстваКоллекции, Знач СвойстваОбъектовМетаданных, Знач ПредустановленныеИдентификаторы, Знач ПолноеИмяРодителя = "", Знач ПолныйСинонимРодителя = "") +Процедура ДобавитьСвойстваОбъектовМетаданных(Знач КолекцияОбъектовМетаданных, + Знач СвойстваКоллекции, + Знач СвойстваОбъектовМетаданных, + Знач ПолноеИмяРодителя = "", + Знач ПолныйСинонимРодителя = "") Для каждого ОбъектМетаданных Из КолекцияОбъектовМетаданных Цикл @@ -735,37 +735,35 @@ ЗначениеПустойСсылки = Неопределено; КонецЕсли; - Если СвойстваКоллекции.БезКлючаОбъектаМетаданных Тогда - ОписаниеИдентификатора = ПредустановленныеИдентификаторы.Найти(ПолноеИмя, "ПолноеИмя"); - Если ОписаниеИдентификатора = Неопределено Тогда - Продолжить; - КонецЕсли; - Идентификатор = ОписаниеИдентификатора.Идентификатор; - ПредустановленныеИдентификаторы.Удалить(ОписаниеИдентификатора); - Иначе - Идентификатор = ПустаяСсылка(); - КонецЕсли; - НоваяСтрока = СвойстваОбъектовМетаданных.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СвойстваКоллекции); - НоваяСтрока.Идентификатор = Идентификатор; - НоваяСтрока.Родитель = СвойстваКоллекции.ИдентификаторКоллекции; - НоваяСтрока.Наименование = ПредставлениеОбъектаМетаданных(ОбъектМетаданных, СвойстваКоллекции); - НоваяСтрока.ПолноеИмя = ПолноеИмя; - НоваяСтрока.ПолноеИмяРодителя = ПолноеИмяРодителя; - НоваяСтрока.Имя = ОбъектМетаданных.Имя; - НоваяСтрока.Синоним = ?(ЗначениеЗаполнено(ОбъектМетаданных.Синоним), ОбъектМетаданных.Синоним, ОбъектМетаданных.Имя); - НоваяСтрока.ПолныйСиноним = ПолныйСинонимРодителя + СвойстваКоллекции.СинонимВЕдЧисле + ". " + НоваяСтрока.Синоним; + НоваяСтрока.Родитель = СвойстваКоллекции.ИдентификаторКоллекции; + НоваяСтрока.Наименование = ПредставлениеОбъектаМетаданных(ОбъектМетаданных, СвойстваКоллекции); + НоваяСтрока.ПолноеИмя = ПолноеИмя; + НоваяСтрока.ПолноеИмяРодителя = ПолноеИмяРодителя; + НоваяСтрока.Имя = ОбъектМетаданных.Имя; + + НоваяСтрока.Синоним = ?( + ЗначениеЗаполнено(ОбъектМетаданных.Синоним), ОбъектМетаданных.Синоним, ОбъектМетаданных.Имя); + + НоваяСтрока.ПолныйСиноним = + ПолныйСинонимРодителя + СвойстваКоллекции.СинонимВЕдЧисле + ". " + НоваяСтрока.Синоним; + НоваяСтрока.ЗначениеПустойСсылки = ЗначениеПустойСсылки; Если СвойстваКоллекции.Имя = "Подсистемы" Тогда - ДобавитьСвойстваОбъектовМетаданных(ОбъектМетаданных.Подсистемы, СвойстваКоллекции, СвойстваОбъектовМетаданных, ПредустановленныеИдентификаторы, ПолноеИмя, НоваяСтрока.ПолныйСиноним + ". "); + ДобавитьСвойстваОбъектовМетаданных( + ОбъектМетаданных.Подсистемы, + СвойстваКоллекции, + СвойстваОбъектовМетаданных, + ПолноеИмя, + НоваяСтрока.ПолныйСиноним + ". "); КонецЕсли; КонецЦикла; КонецПроцедуры -Функция ПредставлениеОбъектаМетаданных(Знач ОбъектМетаданных, Знач СвойстваКоллекции); +Функция ПредставлениеОбъектаМетаданных(Знач ОбъектМетаданных, Знач СвойстваКоллекции) Постфикс = "(" + СвойстваКоллекции.СинонимВЕдЧисле + ")"; @@ -808,6 +806,7 @@ Строка.ИмяВЕдЧисле = "Роль"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Роль'"); Строка.БезДанных = Истина; + Строка.БезКлючаОбъектаМетаданных = Истина; // ПланыОбмена Строка = СвойстваКоллекцийОбъектовМетаданных.Добавить(); @@ -917,18 +916,19 @@ Строка.ИмяВЕдЧисле = "Задача"; Строка.СинонимВЕдЧисле = НСтр("ru = 'Задача'"); - // Заполнение дополнительных свойств + // Заполнение дополнительных свойств. СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных"); + Для каждого Строка Из СвойстваКоллекцийОбъектовМетаданных Цикл Попытка Строка.ИдентификаторКоллекции = СправочникМенеджер[Строка.Имя]; Исключение ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не найден идентификатор коллекции - |объектов метаданных ""%1"". + НСтр("ru = 'Не найден идентификатор типа объектов метаданных + |""%1"". | |Следует добавить предопределенный элемент в - |Справочник.ИдентификаторыОбъектовМетаданных.'"), + |Справочник ""Идентификаторы объектов метаданных"".'"), Строка.Имя); КонецПопытки; Строка.ПорядокКоллекции = СвойстваКоллекцийОбъектовМетаданных.Индекс(Строка); @@ -940,523 +940,18 @@ КонецФункции -Функция ПараметрыОбработчикаСобытия() +Функция ВставитьЗнакВопроса(Знач Строка) - Свойства = Новый Структура; - Свойства.Вставить("Старые", СвойстваИдентификатораОбъектаМетаданных()); - Свойства.Вставить("Новые", СвойстваИдентификатораОбъектаМетаданных()); - Свойства.Вставить("СтандартнаяЗаменаСсылок", Ложь); + Если Лев(Строка, 1) <> "?" Тогда + Если Лев(Строка, 1) <> " " Тогда + Строка = "? " + Строка; + Иначе + Строка = "?" + Строка; + КонецЕсли; + КонецЕсли; - Возврат Свойства; + Возврат Строка; КонецФункции -Функция СвойстваИдентификатораОбъектаМетаданных() - - Свойства = Новый Структура; - Свойства.Вставить("Ссылка", ПустаяСсылка()); - Свойства.Вставить("Родитель", ПустаяСсылка()); - Свойства.Вставить("Имя", ""); - Свойства.Вставить("Синоним", ""); - Свойства.Вставить("ПолноеИмя", ""); - Свойства.Вставить("ПолныйСиноним", ""); - Свойства.Вставить("БезДанных", Ложь); - - Возврат Свойства; - -КонецФункции - -Процедура ВызватьИсключениеОшибкиЗаполненияПредустановленныхИдентификаторов(Знач ПредустановленныеИдентификаторы, Знач СвойстваКоллекцийОбъектовМетаданных) - - ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(ПредустановленныеИдентификаторы[0].ПолноеИмя); - - Если ОбъектМетаданных = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- - |ПредустановленныеИдентификаторыОбъектовМетаданных() - | - |Идентификатор ""%1"" задан - |для несуществующего объекта метаданных - |""%2"".'"), - ПредустановленныеИдентификаторы[0].Идентификатор.УникальныйИдентификатор(), - ПредустановленныеИдентификаторы[0].ПолноеИмя); - Иначе - ИмяКоллецииВЕдЧисле = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПредустановленныеИдентификаторы[0].ПолноеИмя, ".")[0]; - ОписаниеКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти(ИмяКоллецииВЕдЧисле, "ИмяВЕдЧисле"); - - Если ОписаниеКоллекции = Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- - |ПредустановленныеИдентификаторыОбъектовМетаданных() - | - |Для объекта метаданных - |""%1"" - |задан идентификатор ""%2"", - |но для объектов метаданных типа ""%3"" - |идентификаторы не поддерживаются.'"), - ПредустановленныеИдентификаторы[0].ПолноеИмя, - ПредустановленныеИдентификаторы[0].Идентификатор.УникальныйИдентификатор(), - ИмяКоллецииВЕдЧисле); - КонецЕсли; - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- - |ПредустановленныеИдентификаторыОбъектовМетаданных() - | - |Для объекта метаданных - |""%1"" - |задан идентификатор ""%2"", - |но для его использования требуется, чтобы были заданы - |идентификаторы для всех вышестоящих объектов метаданных.'"), - ПредустановленныеИдентификаторы[0].ПолноеИмя, - ПредустановленныеИдентификаторы[0].Идентификатор.УникальныйИдентификатор() ); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции замены идентификатора в базе данных - -Процедура ЗаменитьСсылкуВИнформационнойБазе(СтараяСсылка, НоваяСсылка) - - МассивСсылок = Новый Массив; - МассивСсылок.Добавить(СтараяСсылка); - - НайденныеДанные = НайтиПоСсылкам(МассивСсылок); - - НайденныеДанные.Колонки[0].Имя = "Ссылка"; - НайденныеДанные.Колонки[1].Имя = "Данные"; - НайденныеДанные.Колонки[2].Имя = "Метаданные"; - НайденныеДанные.Колонки.Добавить("Включено"); - НайденныеДанные.ЗаполнитьЗначения(Истина, "Включено"); - - Заменяемые = Новый Соответствие; - Заменяемые.Вставить(СтараяСсылка, НоваяСсылка); - - ВыполнитьЗаменуЭлементов(Заменяемые, НайденныеДанные, Истина); - -КонецПроцедуры - -// Функция из универсальной обработки ПоискИЗаменаЗначений -// Изменения: -// - удалена работа с формой прогрессора -// - удалена процедура ОбработкаПрерыванияПользователя() -// - заменено РегистрыСведений[СтрокаТаблицы.Метаданные.Имя] на -// ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя()) -// -Функция ВыполнитьЗаменуЭлементов(Знач Заменяемые, Знач ТаблицаСсылок, Знач ОтключатьКонтрольЗаписи = Ложь, Знач ВыполнятьВТранзакции = Ложь) - - Параметры = Новый Структура; - - Для Каждого РегистрБухгалтерии ИЗ Метаданные.РегистрыБухгалтерии Цикл - Параметры.Вставить(РегистрБухгалтерии.Имя + "Субконто", РегистрБухгалтерии.ПланСчетов.МаксКоличествоСубконто); - Параметры.Вставить(РегистрБухгалтерии.Имя + "Корреспонденция", РегистрБухгалтерии.Корреспонденция); - КонецЦикла; - - Параметры.Вставить("Объект", Неопределено); - - ОбрабатываемаяСсылка = Неопределено; - БылиИсключения = Ложь; - - Если ВыполнятьВТранзакции Тогда - НачатьТранзакцию(); - КонецЕсли; - - Попытка - Для Каждого СтрокаТаблицы Из ТаблицаСсылок Цикл - Если Не СтрокаТаблицы.Включено Тогда - Продолжить; - КонецЕсли; - ПравильныйЭлемент = Заменяемые[СтрокаТаблицы.Ссылка]; - - Ссылка = СтрокаТаблицы.Ссылка; - - Если ОбрабатываемаяСсылка <> СтрокаТаблицы.Данные Тогда - Если ОбрабатываемаяСсылка <> Неопределено и Параметры.Объект <> Неопределено Тогда - - Если ОтключатьКонтрольЗаписи Тогда - Параметры.Объект.ОбменДанными.Загрузка = Истина; - КонецЕсли; - - Попытка - Параметры.Объект.Записать(); - Исключение - БылиИсключения = Истина; - Если ВыполнятьВТранзакции Тогда - ВызватьИсключение; - КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); - КонецПопытки; - Параметры.Объект = Неопределено; - КонецЕсли; - ОбрабатываемаяСсылка = СтрокаТаблицы.Данные; - КонецЕсли; - - Если Метаданные.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда - - Если Параметры.Объект = Неопределено Тогда - Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект(); - КонецЕсли; - - Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл - Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда - Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент; - КонецЕсли; - КонецЦикла; - - Для Каждого ТабличнаяЧасть ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл - Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл - Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда - СтрокаТабличнойЧасти = Параметры.Объект[ТабличнаяЧасть.Имя].Найти(Ссылка, Реквизит.Имя); - Пока СтрокаТабличнойЧасти <> Неопределено Цикл - СтрокаТабличнойЧасти[Реквизит.Имя] = ПравильныйЭлемент; - СтрокаТабличнойЧасти = Параметры.Объект[ТабличнаяЧасть.Имя].Найти(Ссылка, Реквизит.Имя); - КонецЦикла; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Для Каждого Движение ИЗ СтрокаТаблицы.Метаданные.Движения Цикл - - ЭтоДвижениеРегистраБухгалтерии = Метаданные.РегистрыБухгалтерии.Содержит(Движение); - ЕстьКорреспонденция = ЭтоДвижениеРегистраБухгалтерии и Параметры[Движение.Имя + "Корреспонденция"]; - - НаборЗаписей = Параметры.Объект.Движения[Движение.Имя]; - НаборЗаписей.Прочитать(); - НадоЗаписывать = Ложь; - ТаблицаНабора = НаборЗаписей.Выгрузить(); - - Если ТаблицаНабора.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - ИменаКолонок = Новый Массив; - - // Получим имена измерений, которые могут содержать ссылку - Для Каждого Измерение ИЗ Движение.Измерения Цикл - - Если Измерение.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда - - Если ЭтоДвижениеРегистраБухгалтерии Тогда - - Если Измерение.ПризнакУчета <> Неопределено Тогда - - ИменаКолонок.Добавить(Измерение.Имя + "Дт"); - ИменаКолонок.Добавить(Измерение.Имя + "Кт"); - Иначе - ИменаКолонок.Добавить(Измерение.Имя); - КонецЕсли; - Иначе - ИменаКолонок.Добавить(Измерение.Имя); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // Получим имена ресурсов, которые могут содержать ссылку - Если Метаданные.РегистрыСведений.Содержит(Движение) Тогда - Для Каждого Ресурс ИЗ Движение.Ресурсы Цикл - Если Ресурс.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда - ИменаКолонок.Добавить(Ресурс.Имя); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - // Получим имена ресурсов, которые могут содержать ссылку - Для Каждого Реквизит ИЗ Движение.Реквизиты Цикл - Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда - ИменаКолонок.Добавить(Реквизит.Имя); - КонецЕсли; - КонецЦикла; - - // Произведем замены в таблице - Для Каждого ИмяКолонки Из ИменаКолонок Цикл - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, ИмяКолонки); - Пока СтрокаТабЧасти <> Неопределено Цикл - СтрокаТабЧасти[ИмяКолонки] = ПравильныйЭлемент; - НадоЗаписывать = Истина; - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, ИмяКолонки); - КонецЦикла; - КонецЦикла; - - Если Метаданные.РегистрыБухгалтерии.Содержит(Движение) Тогда - - Для ИндексСубконто = 1 по Параметры[Движение.Имя + "Субконто"] Цикл - Если ЕстьКорреспонденция Тогда - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоДт"+ИндексСубконто); - Пока СтрокаТабЧасти <> Неопределено Цикл - СтрокаТабЧасти["СубконтоДт"+ИндексСубконто] = ПравильныйЭлемент; - НадоЗаписывать = Истина; - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоДт"+ИндексСубконто); - КонецЦикла; - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоКт"+ИндексСубконто); - Пока СтрокаТабЧасти <> Неопределено Цикл - СтрокаТабЧасти["СубконтоКт"+ИндексСубконто] = ПравильныйЭлемент; - НадоЗаписывать = Истина; - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "СубконтоКт"+ИндексСубконто); - КонецЦикла; - Иначе - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "Субконто"+ИндексСубконто); - Пока СтрокаТабЧасти <> Неопределено Цикл - СтрокаТабЧасти["Субконто"+ИндексСубконто] = ПравильныйЭлемент; - НадоЗаписывать = Истина; - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "Субконто"+ИндексСубконто); - КонецЦикла; - КонецЕсли; - КонецЦикла; - - Если Ссылка.Метаданные() = Движение.ПланСчетов Тогда - Для Каждого СтрокаТабЧасти Из ТаблицаНабора Цикл - Если ЕстьКорреспонденция Тогда - Если СтрокаТабЧасти.СчетДт = Ссылка Тогда - СтрокаТабЧасти.СчетДт = ПравильныйЭлемент; - НадоЗаписывать = Истина; - КонецЕсли; - Если СтрокаТабЧасти.СчетКт = Ссылка Тогда - СтрокаТабЧасти.СчетКт = ПравильныйЭлемент; - НадоЗаписывать = Истина; - КонецЕсли; - Иначе - Если СтрокаТабЧасти.Счет = Ссылка Тогда - СтрокаТабЧасти.Счет = ПравильныйЭлемент; - НадоЗаписывать = Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Если Метаданные.РегистрыРасчета.Содержит(Движение) Тогда - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "ВидРасчета"); - Пока СтрокаТабЧасти <> Неопределено Цикл - СтрокаТабЧасти["ВидРасчета"] = ПравильныйЭлемент; - НадоЗаписывать = Истина; - СтрокаТабЧасти = ТаблицаНабора.Найти(Ссылка, "ВидРасчета"); - КонецЦикла; - КонецЕсли; - - Если НадоЗаписывать Тогда - НаборЗаписей.Загрузить(ТаблицаНабора); - Если ОтключатьКонтрольЗаписи Тогда - НаборЗаписей.ОбменДанными.Загрузка = Истина; - КонецЕсли; - Попытка - НаборЗаписей.Записать(); - Исключение - БылиИсключения = Истина; - Если ВыполнятьВТранзакции Тогда - ВызватьИсключение; - КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); - КонецПопытки; - КонецЕсли; - КонецЦикла; - - Для Каждого Последовательность ИЗ Метаданные.Последовательности Цикл - Если Последовательность.Документы.Содержит(СтрокаТаблицы.Метаданные) Тогда - НадоЗаписывать = Ложь; - НаборЗаписи = Последовательности[Последовательность.Имя].СоздатьНаборЗаписей(); - НаборЗаписи.Отбор.Регистратор.Установить(СтрокаТаблицы.Данные); - НаборЗаписи.Прочитать(); - - Если НаборЗаписи.Количество() > 0 Тогда - Для Каждого Измерение ИЗ Последовательность.Измерения Цикл - Если Измерение.Тип.СодержитТип(ТипЗнч(Ссылка)) И НаборЗаписи[0][Измерение.Имя]=Ссылка Тогда - НаборЗаписи[0][Измерение.Имя] = ПравильныйЭлемент; - НадоЗаписывать = Истина; - КонецЕсли; - КонецЦикла; - Если НадоЗаписывать Тогда - Если ОтключатьКонтрольЗаписи Тогда - НаборЗаписи.ОбменДанными.Загрузка = Истина; - КонецЕсли; - Попытка - НаборЗаписи.Записать(); - Исключение - БылиИсключения = Истина; - Если ВыполнятьВТранзакции Тогда - ВызватьИсключение; - КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); - КонецПопытки; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - ИначеЕсли Метаданные.Справочники.Содержит(СтрокаТаблицы.Метаданные) Тогда - - Если Параметры.Объект = Неопределено Тогда - Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект(); - КонецЕсли; - - Если СтрокаТаблицы.Метаданные.Владельцы.Содержит(Ссылка.Метаданные()) И Параметры.Объект.Владелец = Ссылка Тогда - Параметры.Объект.Владелец = ПравильныйЭлемент; - КонецЕсли; - - Если СтрокаТаблицы.Метаданные.Иерархический И Параметры.Объект.Родитель = Ссылка Тогда - Параметры.Объект.Родитель = ПравильныйЭлемент; - КонецЕсли; - - Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл - Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда - Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент; - КонецЕсли; - КонецЦикла; - - Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл - Для Каждого Реквизит Из ТЧ.Реквизиты Цикл - Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда - СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя); - Пока СтрокаТабЧасти <> Неопределено Цикл - СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент; - СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя); - КонецЦикла; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - ИначеЕсли Метаданные.ПланыВидовХарактеристик.Содержит(СтрокаТаблицы.Метаданные) - ИЛИ Метаданные.ПланыСчетов.Содержит (СтрокаТаблицы.Метаданные) - ИЛИ Метаданные.ПланыВидовРасчета.Содержит (СтрокаТаблицы.Метаданные) - ИЛИ Метаданные.Задачи.Содержит (СтрокаТаблицы.Метаданные) - ИЛИ Метаданные.БизнесПроцессы.Содержит (СтрокаТаблицы.Метаданные) Тогда - - Если Параметры.Объект = Неопределено Тогда - Параметры.Объект = СтрокаТаблицы.Данные.ПолучитьОбъект(); - КонецЕсли; - - Для Каждого Реквизит Из СтрокаТаблицы.Метаданные.Реквизиты Цикл - Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) И Параметры.Объект[Реквизит.Имя] = Ссылка Тогда - Параметры.Объект[Реквизит.Имя] = ПравильныйЭлемент; - КонецЕсли; - КонецЦикла; - - Для Каждого ТЧ ИЗ СтрокаТаблицы.Метаданные.ТабличныеЧасти Цикл - Для Каждого Реквизит Из ТЧ.Реквизиты Цикл - Если Реквизит.Тип.СодержитТип(ТипЗнч(Ссылка)) Тогда - СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя); - Пока СтрокаТабЧасти <> Неопределено Цикл - СтрокаТабЧасти[Реквизит.Имя] = ПравильныйЭлемент; - СтрокаТабЧасти = Параметры.Объект[ТЧ.Имя].Найти(Ссылка, Реквизит.Имя); - КонецЦикла; - КонецЕсли; - КонецЦикла; - КонецЦикла; - - ИначеЕсли Метаданные.Константы.Содержит(СтрокаТаблицы.Метаданные) Тогда - - Константы[СтрокаТаблицы.Метаданные.Имя].Установить(ПравильныйЭлемент); - - ИначеЕсли Метаданные.РегистрыСведений.Содержит(СтрокаТаблицы.Метаданные) Тогда - - СтруктураИзмерений = Новый Структура; - НаборЗаписей = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(СтрокаТаблицы.Метаданные.ПолноеИмя()).СоздатьНаборЗаписей(); - Для Каждого Измерение ИЗ СтрокаТаблицы.Метаданные.Измерения Цикл - НаборЗаписей.Отбор[Измерение.Имя].Установить(СтрокаТаблицы.Данные[Измерение.Имя]); - СтруктураИзмерений.Вставить(Измерение.Имя); - КонецЦикла; - Если СтрокаТаблицы.Метаданные.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда - НаборЗаписей.Отбор["Период"].Установить(СтрокаТаблицы.Данные.Период); - КонецЕсли; - НаборЗаписей.Прочитать(); - - Если НаборЗаписей.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - ТаблицаНабора = НаборЗаписей.Выгрузить(); - НаборЗаписей.Очистить(); - - Если ОтключатьКонтрольЗаписи Тогда - НаборЗаписей.ОбменДанными.Загрузка = Истина; - КонецЕсли; - - - Если Не ВыполнятьВТранзакции Тогда - НачатьТранзакцию(); - КонецЕсли; - - Попытка - НаборЗаписей.Записать(); - - Для Каждого Колонка ИЗ ТаблицаНабора.Колонки Цикл - Если ТаблицаНабора[0][Колонка.Имя] = Ссылка Тогда - ТаблицаНабора[0][Колонка.Имя] = ПравильныйЭлемент; - Если СтруктураИзмерений.Свойство(Колонка.Имя) Тогда - НаборЗаписей.Отбор[Колонка.Имя].Установить(ПравильныйЭлемент); - КонецЕсли; - - КонецЕсли; - КонецЦикла; - - НаборЗаписей.Загрузить(ТаблицаНабора); - - НаборЗаписей.Записать(); - - Если Не ВыполнятьВТранзакции Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - - Исключение - БылиИсключения = Истина; - Если ВыполнятьВТранзакции Тогда - ВызватьИсключение; - КонецЕсли; - ОтменитьТранзакцию(); - СообщитьОбОшибке(ИнформацияОбОшибке()); - КонецПопытки; - Иначе - СообщитьОбОшибке(НСтр("ru = 'Значения не заменяются в данных типа'") + ": " + СтрокаТаблицы.Метаданные); - КонецЕсли; - КонецЦикла; - - Если Параметры.Объект <> Неопределено Тогда - Если ОтключатьКонтрольЗаписи Тогда - Параметры.Объект.ОбменДанными.Загрузка = Истина; - КонецЕсли; - Попытка - Параметры.Объект.Записать(); - Исключение - БылиИсключения = Истина; - Если ВыполнятьВТранзакции Тогда - ВызватьИсключение; - КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); - КонецПопытки; - КонецЕсли; - - Если ВыполнятьВТранзакции Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - Исключение - БылиИсключения = Истина; - Если ВыполнятьВТранзакции Тогда - ОтменитьТранзакцию(); - КонецЕсли; - СообщитьОбОшибке(ИнформацияОбОшибке()); - КонецПопытки; - - Возврат Не БылиИсключения; - -КонецФункции - -// Процедура из универсальной обработки ПоискИЗаменаЗначений -// Изменения: -// - заменен метод Сообщить(...) на ЗаписьЖурналаРегистрации(...) -// -Процедура СообщитьОбОшибке(Знач Описание) - - Если ТипЗнч(Описание) = Тип("ИнформацияОбОшибке") Тогда - Описание = ?(Описание.Причина = Неопределено, Описание, Описание.Причина).Описание; - КонецЕсли; - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Идентификаторы объектов метаданных. Замена идентификатора'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - Описание, - РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); - -КонецПроцедуры - +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl index 2a0150764..7f873e7d4 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ObjectModule.bsl @@ -1,12 +1,7 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -// Обработчик события ПередЗаписью предотвращает изменение идентификаторов -// объектов метаданных для которых допустимо только предусмотренное -// обновление на основе метаданных конфигурации с помощью -// процедуры: -// -// Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника() -// +// Предотвращает недопустимое изменение идентификаторов объектов метаданных. Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда @@ -15,35 +10,50 @@ Если НЕ ДополнительныеСвойства.Свойство("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника") Тогда - ВызватьИсключение(НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"". - | - |Изменение идентификаторов объектов метаданных выполняется - |- либо автоматически с помощью процедуры - | Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(), - |- либо вручную через конфигуратор (добавление/удаление предопределенных элементов). - | - |Допустимо удаление неиспользуемых элементов, помеченных на удаление.'")); + Если ЭтоНовый() Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"". + | + |Создание нового идентификатора объекта метаданных + |возможно только автоматически при обновлении данных справочника.'"), + ПолноеИмя); + + ИначеЕсли Справочники.ИдентификаторыОбъектовМетаданных.ЗапрещеноИзменятьПолноеИмя(ЭтотОбъект) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"". + | + |При изменении идентификатора объекта метаданных указано + |полное имя ""%1"", которое может быть + |установлено только автоматически при обновлении данных справочника.'"), + ПолноеИмя); + + ИначеЕсли Справочники.ИдентификаторыОбъектовМетаданных.ПолноеИмяИспользуется(ПолноеИмя, Ссылка) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"". + | + |При изменении идентификатора объекта метаданных указано + |полное имя ""%1"", + |которое уже используется в справочнике.'"), + ПолноеИмя); + + КонецЕсли; + + Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьСвойстваИдентификатора(ЭтотОбъект); КонецЕсли; КонецПроцедуры - -// Обработчик события ПередУдалением предотвращает удаление идентификаторов -// объектов метаданных, у которых значение реквизита "Используются" установлено Истина -// или значение реквизита "ПометкаУдаления" установлено Ложь. -// +// Предотвращает удаление идентификаторов объектов метаданных не помеченных на удаление. Процедура ПередУдалением(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; - Если Используется Тогда - ВызватьИсключение(НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"". - | - |Удаление идентификаторов объектов метаданных, у которых значение - |реквизита ""Используется"" установлено Истина недопустимо.'")); - ИначеЕсли НЕ ПометкаУдаления Тогда + Если НЕ ПометкаУдаления Тогда ВызватьИсключение(НСтр("ru = 'Ошибка при работе со справочником ""Идентификаторы объектов метаданных"". | |Удаление идентификаторов объектов метаданных, у которых значение @@ -52,3 +62,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo index b8824e0b7..c2b200cd6 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo +++ b/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/ИдентификаторыОбъектовМетаданных.mdo @@ -125,98 +125,8 @@ Variable AsDescription - - Задачи - - - - - - БизнесПроцессы - - - - - - РегистрыРасчета - - - - - - РегистрыБухгалтерии - - - - - - ПланыВидовРасчета - - - - - - ПланыСчетов - - - - - - ПланыВидовХарактеристик - - - - - - Обработки - - - - - - Отчеты - - - - - - Справочники - - - - - - Роли - - - - - Роль_ПолныеПрава - - - - - - - РегистрыСведений - - - - - - РегистрыНакопления - - - - - - Подсистемы - - - - - - ПланыОбмена + + Документы @@ -227,8 +137,92 @@ - - Документы + + ПланыОбмена + + + + + + Подсистемы + + + + + + РегистрыНакопления + + + + + + РегистрыСведений + + + + + + Роли + + + + + + Справочники + + + + + + Отчеты + + + + + + Обработки + + + + + + ПланыВидовХарактеристик + + + + + + ПланыСчетов + + + + + + ПланыВидовРасчета + + + + + + РегистрыБухгалтерии + + + + + + РегистрыРасчета + + + + + + БизнесПроцессы + + + + + + Задачи @@ -238,7 +232,7 @@ BothWays Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаЭлемента Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаСписка - Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаВыбора + Catalog.ИдентификаторыОбъектовМетаданных.Form.ФормаСписка ПорядокКоллекции @@ -417,25 +411,6 @@ Use - - Используется - - ru - Используется - - - Boolean - - - ru - Идентификатору соответстует объект метаданных - - - - - Use - Use - ФормаСписка @@ -454,13 +429,4 @@ PersonalComputer MobileDevice - - ФормаВыбора - - ru - Форма выбора - - PersonalComputer - MobileDevice - diff --git a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form index 6b52acaff..fa0781cd0 100644 --- a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Form.form @@ -481,7 +481,6 @@ LockOwner true - true true Vertical true diff --git a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl index 437ee513a..dfc63f6b8 100644 --- a/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/НастройкаНовогоКалендаря/Module.bsl @@ -4,6 +4,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Заголовок = НСтр("ru = 'Настройка заполнения календаря'"); + ПропуститьВыборПроизводственногоКалендаря = Ложь; ЗаполнитьСписокПроизодственныхКалендарей(ПропуститьВыборПроизводственногоКалендаря); diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form index 66baac7fc..bd1fe8004 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Form.form @@ -261,6 +261,10 @@ NotificationProcessing ОбработкаОповещения + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock true true diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl index ca084b1d5..e21934e37 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаСписка/Module.bsl @@ -1,6 +1,15 @@ /////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.РежимВыбора Тогда + Элементы.Список.РежимВыбора = Истина; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора) @@ -34,6 +43,10 @@ &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Если Группа Тогда + Возврат; + КонецЕсли; + Если НастройкаНовогоКалендаряПоУмолчанию() <> Неопределено Тогда // Календарь по единственному шаблону уже создан, // не нужно предлагать сделать это повторно diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form index 90efef765..e21205c42 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Form.form @@ -338,6 +338,10 @@ Left true + + ChoiceProcessing + ОбработкаВыбора + OnOpen ПриОткрытии diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html index 719779c40..f98f94ee9 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Help/ru.html @@ -1,5 +1,6 @@ - -

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

        -

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

        -

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

        + +

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

        +

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

        +

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

        +

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

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

        \ No newline at end of file diff --git a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl index f2246daac..b5ab1db75 100644 --- a/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Календари/Forms/ФормаЭлемента/Module.bsl @@ -53,6 +53,23 @@ КонецПроцедуры +&НаКлиенте +Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора) + + Если ТипЗнч(РезультатВыбора) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + РезультатВыбора.Свойство("ПроизводственныйКалендарь", Объект.ПроизводственныйКалендарь); + РезультатВыбора.Свойство("ВидКалендаря", Объект.ВидКалендаря); + + // Производственный календарь теперь известен - можно заполнять + ЗаполнитьФормуПоОбъекту(Истина); + + Элементы.Календарь.Обновить(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ @@ -96,9 +113,9 @@ СтрокаТаблицыРегистра = ТаблицаРегистра.НайтиПоЗначению(СтрокаОформленияПериода.Дата); Если СтрокаТаблицыРегистра = Неопределено Тогда - СтрокаОформленияПериода.ЦветТекста = WebЦвета.Красный; + СтрокаОформленияПериода.ЦветТекста = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняНеУказанЦвет"); Иначе - СтрокаОформленияПериода.ЦветТекста = WebЦвета.Черный; + СтрокаОформленияПериода.ЦветТекста = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняРабочийЦвет"); КонецЕсли; КонецЦикла; @@ -133,6 +150,14 @@ &НаКлиенте Процедура ЗаполнитьПоКалендарю(Команда) + Если Не ЗначениеЗаполнено(Объект.ПроизводственныйКалендарь) + Или Не ЗначениеЗаполнено(Объект.ВидКалендаря) Тогда + // Производственный календарь не указан, пытаемся уточнить у пользователя способ заполнения + ОткрытьФорму("Справочник.Календари.Форма.НастройкаНовогоКалендаря", , ЭтаФорма); + Возврат; + КонецЕсли; + + // Производственный календарь указан, а значит известно как заполнять ЗаполнитьФормуПоОбъекту(Истина); Элементы.Календарь.Обновить(); @@ -213,7 +238,6 @@ Элементы.ЗаполнитьПоКалендарю.Доступность = Ложь; Иначе СпособРедактированияПоясняющийТекст = НСтр("ru = 'Для редактирования рабочих и выходных дней календаря используйте двойной щелчок левой кнопкой мыши'"); - Элементы.ЗаполнитьПоКалендарю.Доступность = ЗначениеЗаполнено(Объект.ПроизводственныйКалендарь) И ЗначениеЗаполнено(Объект.ВидКалендаря); КонецЕсли; КонецПроцедуры @@ -224,7 +248,7 @@ Если НомерТекущегоГода = 0 Тогда НомерТекущегоГода = Год(ТекущаяДатаСеанса()); КонецЕсли; - НомерПредыдущегоГода = НомерТекущегоГода; + НомерПредыдущегоГода = НомерТекущегоГода; Элементы.Календарь.НачалоПериодаОтображения = Дата(НомерТекущегоГода, 1, 1); Элементы.Календарь.КонецПериодаОтображения = Дата(НомерТекущегоГода, 12, 31); diff --git a/SSL/src/Catalogs/Календари/ManagerModule.bsl b/SSL/src/Catalogs/Календари/ManagerModule.bsl index 8ad8688b5..0d13971c1 100644 --- a/SSL/src/Catalogs/Календари/ManagerModule.bsl +++ b/SSL/src/Catalogs/Календари/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -70,3 +72,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Календари/Календари.mdo b/SSL/src/Catalogs/Календари/Календари.mdo index 57480bd5f..5f14f7ab6 100644 --- a/SSL/src/Catalogs/Календари/Календари.mdo +++ b/SSL/src/Catalogs/Календари/Календари.mdo @@ -126,6 +126,7 @@ BothWays Catalog.Календари.Form.ФормаЭлемента Catalog.Календари.Form.ФормаСписка + Catalog.Календари.Form.ФормаСписка ПроизводственныйКалендарь diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form index 660b5622f..1d3ac70eb 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Form.form @@ -11,7 +11,7 @@ СтраницаВыборИсточника 6 - КодВариантаЗагрузки + ВариантЗагрузки 7 true true @@ -19,12 +19,12 @@ true - КодВариантаЗагрузки + ВариантЗагрузки Top - КодВариантаЗагрузкиРасширеннаяПодсказка - 18 + ВариантЗагрузкиРасширеннаяПодсказка + 26 Label true true @@ -33,7 +33,7 @@ - КодВариантаЗагрузкиКонтекстноеМеню + ВариантЗагрузкиКонтекстноеМеню 8 true @@ -49,8 +49,8 @@ ru с диска "Информационно-технологическое сопровождение" - - 1 + + ИТС @@ -58,8 +58,8 @@ ru с сайта агентства "РосБизнесКонсалтинг" - - 2 + + РБК Vertical @@ -80,7 +80,178 @@ СтраницаВыборИсточникаРасширеннаяПодсказка - 17 + 25 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ВыполняетсяЗагрузка + 15 + + КартинкаВыполняетсяЗагрузка + 16 + + <key>ru</key> + <value>Картинка выполняется загрузка</value> + + true + true + + true + + + КартинкаВыполняетсяЗагрузкаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + КартинкаВыполняетсяЗагрузкаКонтекстноеМеню + 17 + true + + 7 + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + НадписьВыполняетсяЗагрузка + 18 + + <key>ru</key> + <value>Выполняется загрузка классификатора...</value> + + true + true + + true + + + НадписьВыполняетсяЗагрузкаРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + + НадписьВыполняетсяЗагрузкаКонтекстноеМеню + 19 + true + + Label + true + 3 + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Выполняется загрузка</value> + + + ru + Выполняется загрузка + + + ВыполняетсяЗагрузкаРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Page + + auto + + + + ЗагрузкаССайтаРБК + 12 + + ПредупреждениеОЗагрузкаССайтаРБК + 13 + + <key>ru</key> + <value>Загрузка классификатора банков РФ будет выполнена с сайта Российского информационного агентства РБК (http://www.rbc.ru). + +Для продолжения нажмите "Далее".</value> + + true + true + + true + + + ПредупреждениеОЗагрузкаССайтаРБКРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ПредупреждениеОЗагрузкаССайтаРБККонтекстноеМеню + 14 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Загрузка с сайта РБК</value> + + + ru + Загрузка с сайта РБК + + + ЗагрузкаССайтаРБКРасширеннаяПодсказка + 31 Label true true @@ -111,7 +282,7 @@ ПоясняющийТекстРасширеннаяПодсказка - 21 + 34 Label true true @@ -132,11 +303,10 @@ true true - Style.ПоясняющийТекст + Style.FormTextColor Left - Top true @@ -154,7 +324,7 @@ СтраницаРезультатРасширеннаяПодсказка - 20 + 33 Label true true @@ -183,7 +353,7 @@ СтраницыФормыРасширеннаяПодсказка - 16 + 24 Label true true @@ -211,7 +381,7 @@ ФормаКнопкаНазадРасширеннаяПодсказка - 12 + 20 Label true true @@ -237,7 +407,7 @@ ФормаКнопкаДалееРасширеннаяПодсказка - 13 + 21 Label true true @@ -263,7 +433,7 @@ ФормаКнопкаОтменаРасширеннаяПодсказка - 14 + 22 Label true true @@ -271,7 +441,7 @@ Left - Form.StandardCommand.Cancel + Form.Command.Отмена Normal Auto true @@ -289,7 +459,7 @@ ФормаКнопкаСправкаРасширеннаяПодсказка - 15 + 23 Label true true @@ -307,11 +477,16 @@
        Right + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере - DontBlock + 45 + LockOwner true true Vertical @@ -322,17 +497,50 @@ auto true - КодВариантаЗагрузки + ВариантЗагрузки <key>ru</key> <value>Вариант загрузки</value> 2 - Number - - 1 - + String + + + + true + + + true + + + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 1 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 3 + + UUID true @@ -348,10 +556,6 @@ Далее >> 1 - - ru - Далее - true @@ -370,10 +574,6 @@ << Назад 2 - - ru - Назад - true @@ -385,6 +585,28 @@ 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 85192454c..dcc7aaa2b 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ЗагрузкаКлассификатора/Module.bsl @@ -1,25 +1,57 @@ +&НаКлиенте +Перем ПараметрыОбработчикаОжидания; //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + ВыполнитьПроверкуПравДоступа("Изменение", Метаданные.Справочники.КлассификаторБанковРФ); - КодВариантаЗагрузки = 1; + ВариантЗагрузки = "РБК"; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + #Если ВебКлиент Тогда + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК; + #Иначе + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; + #КонецЕсли + + УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура Далее(Команда) - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника Тогда - ЗагрузитьКлассификатор(); - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат; - ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда Закрыть(); + Иначе + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка; + УстановитьИзмененияВИнтерфейсе(); + ПодключитьОбработчикОжидания("ВыполнитьЗагрузкуКлассификатора", 0.1, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Назад(Команда) + ТекущаяСтраница = Элементы.СтраницыФормы.ТекущаяСтраница; + + Если ТекущаяСтраница = Элементы.СтраницаРезультат Тогда + #Если ВебКлиент Тогда + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК; + #Иначе + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; + #КонецЕсли КонецЕсли; УстановитьИзмененияВИнтерфейсе(); @@ -27,14 +59,11 @@ КонецПроцедуры &НаКлиенте -Процедура Назад(Команда) - - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда - Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника; +Процедура Отмена(Команда) + Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда + ЗавершитьФоновоеЗадание(ИдентификаторЗадания); КонецЕсли; - - УстановитьИзмененияВИнтерфейсе(); - + Закрыть(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -51,11 +80,46 @@ // классификатора БИК РФ с диска ИТС, помещенный во временное хранилище // Загружено - Число - Количество новых записей классификатора // Обновлено - Число - Количество обновленных записей классификатора -// ТекстСообщения - Строка - тест сообщения об ошибке +// ТекстСообщения - Строка - тест сообщения о результатах загрузки +// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора &НаСервере Процедура ЗагрузитьДанныеДискИТСНаСервере(ПараметрыЗагрузкиФайловИТС) РаботаСБанками.ЗагрузитьДанныеДискИТС(ПараметрыЗагрузкиФайловИТС); -КонецПроцедуры +КонецПроцедуры + + +// Загружает в классификатор банков данные с диска ИТС. +// +// Параметры +// ПараметрыЗагрузкиФайловРБК - Соответствие: +// ИмяДискаИТС - Строка - имя диска ИТС +// ДанныеИТСАдресДвоичныхДанных - ВременноеХранилище - файл данных классификатора БИК РФ с диска ИТС, +// помещенный во временное хранилище +// ПодготовкаИТСАдресДвоичныхДанных - ВременноеХранилище - файл обработки подготовки данных +// классификатора БИК РФ с диска ИТС, помещенный во временное хранилище +// Загружено - Число - Количество новых записей классификатора +// Обновлено - Число - Количество обновленных записей классификатора +// ТекстСообщения - Строка - тест сообщения о результатах загрузки +// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора +&НаСервере +Функция ПолучитьДанныеРБКНаСервере(ПараметрыЗагрузкиФайловРБК) + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + РаботаСБанками.ПолучитьДанныеРБК(ПараметрыЗагрузкиФайловРБК, АдресХранилища); + Результат = Новый Структура("ЗаданиеВыполнено,АдресХранилища", Истина, АдресХранилища); + Иначе + НаименованиеЗадания = НСтр("ru = 'Загрузка классификатора банков РФ'"); + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "РаботаСБанками.ПолучитьДанныеРБК", + ПараметрыЗагрузкиФайловРБК, + НаименованиеЗадания); + КонецЕсли; + + Возврат Результат; + +КонецФункции // Загружает классификатор банков с диска ИТС или с сайта РБК. // @@ -66,39 +130,85 @@ ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ""); + ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Ложь); - ВариантЗагрузки = ""; - - Состояние(НСтр("ru ='Загружается классификатор банков РФ.'")); - - Если КодВариантаЗагрузки = 1 Тогда - //с диска ИТС - ВариантЗагрузки = НСтр("ru ='Диск ИТС'"); + Если ВариантЗагрузки = "ИТС" Тогда ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора); - ИначеЕсли КодВариантаЗагрузки = 2 Тогда - //с сайта РБК - ВариантЗагрузки = НСтр("ru ='Сайт РБК'"); - РаботаСБанкамиВызовСервера.ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора); + + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + Результат = Новый Структура("ЗаданиеВыполнено", Истина); + ИначеЕсли ВариантЗагрузки = "РБК" Тогда + Результат = ПолучитьДанныеРБКНаСервере(ПараметрыЗагрузкиКлассификатора); КонецЕсли; + АдресХранилища = Результат.АдресХранилища; + Если НЕ Результат.ЗаданиеВыполнено Тогда + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + Иначе + ЗагрузитьРезультат(); + КонецЕсли; + КонецПроцедуры + +//Отображает результат попытки загрузки классификатора банков РФ в журнале регистрации +//и в форме загрузки +&НаКлиенте +Процедура ЗагрузитьРезультат() + + Если ВариантЗагрузки = "ИТС" Тогда + Источник = НСтр("ru ='Диск ИТС'"); + Иначе + Источник = НСтр("ru ='Сайт РБК'"); + КонецЕсли; + + ПараметрыЗагрузкиКлассификатора = ПолучитьИзВременногоХранилища(АдресХранилища); + ИмяСобытия = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru ='Загрузка классификатора банков. %1.'"), ВариантЗагрузки); - - Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда - РаботаСБанкамиВызовСервера.ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); + НСтр("ru ='Загрузка классификатора банков. %1.'"), Источник); + + Если ПараметрыЗагрузкиКлассификатора["ЗагрузкаВыполнена"] Тогда ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия,, - ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); + ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); Иначе ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытия, - "Ошибка", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); + "Ошибка", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"],, Истина); КонецЕсли; Элементы.ПоясняющийТекст.Заголовок = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; + Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат; + УстановитьИзмененияВИнтерфейсе(); + Если (ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0) или (ПараметрыЗагрузкиКлассификатора["Загружено"] > 0) Тогда ОповеститьОбИзменении(Тип("СправочникСсылка.КлассификаторБанковРФ")); КонецЕсли; -КонецПроцедуры +КонецПроцедуры + +//Унифицированная процедура проверки выполнения фонового задания +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ЗагрузитьРезультат(); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции // Получает, сортирует, записывает данные классификатора БИК РФ с диска ИТС // @@ -106,7 +216,8 @@ // ПараметрыЗагрузкиКлассификатора - Соответствие: // Загружено - Число - Количество новых записей классификатора // Обновлено - Число - Количество обновленных записей классификатора -// ТекстСообщения - Строка - тест сообщения об ошибке +// ТекстСообщения - Строка - тест сообщения о результатах загрузки +// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора &НаКлиенте Процедура ПолучитьДанныеБИКРФДискИТС(ПараметрыЗагрузкиКлассификатора) @@ -223,17 +334,37 @@ // В зависимости от текущей страницы устанавливает доступность тех или иных полей для пользователя // -&НаКлиенте +&НаСервере Процедура УстановитьИзмененияВИнтерфейсе() - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника Тогда + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборИсточника + Или Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ЗагрузкаССайтаРБК Тогда Элементы.ФормаКнопкаНазад.Доступность = Ложь; - Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Далее>>'"); + Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Далее >>'"); Элементы.ФормаКнопкаОтмена.Доступность = Истина; - ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаРезультат Тогда + Элементы.ФормаКнопкаДалее.Доступность = Истина; + ИначеЕсли Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыполняетсяЗагрузка Тогда + Элементы.ФормаКнопкаНазад.Доступность = Ложь; + Элементы.ФормаКнопкаДалее.Доступность = Ложь; + Элементы.ФормаКнопкаОтмена.Доступность = Истина; + Иначе Элементы.ФормаКнопкаНазад.Доступность = Истина; - Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Закрыть'"); + Элементы.ФормаКнопкаДалее.Заголовок = НСтр("ru ='Закрыть'"); Элементы.ФормаКнопкаОтмена.Доступность = Ложь; + Элементы.ФормаКнопкаДалее.Доступность = Истина; КонецЕсли; КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьЗагрузкуКлассификатора() + ЗагрузитьКлассификатор(); +КонецПроцедуры + +&НаСервере +Процедура ЗавершитьФоновоеЗадание(ИдентификаторЗадания) + ФоновоеЗадание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); + Если ФоновоеЗадание <> Неопределено Тогда + ФоновоеЗадание.Отменить(); + КонецЕсли; +КонецПроцедуры diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl index 542019147..d2efe16c9 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаВыбора/Module.bsl @@ -15,7 +15,7 @@ &НаКлиенте Процедура ЗагрузитьКлассификатор(Команда) - ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); + ОткрытьФормуМодально("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); КонецПроцедуры diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl index 5d02c6429..30a721b56 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/Forms/ФормаСписка/Module.bsl @@ -15,6 +15,6 @@ &НаКлиенте Процедура ЗагрузитьКлассификатор(Команда) - ОткрытьФорму("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); + ОткрытьФормуМодально("Справочник.КлассификаторБанковРФ.Форма.ЗагрузкаКлассификатора"); КонецПроцедуры diff --git a/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html b/SSL/src/Catalogs/КлассификаторБанковРФ/Help/ru.html index fd77085ee..c0405c30e 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 0519ecba6..133d43b3f 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/ManagerModule.bsl @@ -1 +1,4 @@ - \ 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 8b1378917..dc862d04c 100644 --- a/SSL/src/Catalogs/КлассификаторБанковРФ/ObjectModule.bsl +++ b/SSL/src/Catalogs/КлассификаторБанковРФ/ObjectModule.bsl @@ -1 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +#КонецЕсли \ 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 30a7c1a26..000000000 --- a/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Module.bsl +++ /dev/null @@ -1,31 +0,0 @@ - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Список - -&НаКлиенте -Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ОбработатьВыбор(ВыбраннаяСтрока, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокВыборЗначения(Элемент, Значение, СтандартнаяОбработка) - - ОбработатьВыбор(Значение, СтандартнаяОбработка); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаКлиенте -Процедура ОбработатьВыбор(ВыбранныеСтроки, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - СтандартныеПодсистемыВызовСервераПереопределяемый.ПодобратьПоставляемыеДанныеИзКлассификатора(ВыбранныеСтроки); - Оповестить("ОбновитьПослеДобавления"); - -КонецПроцедуры - diff --git a/SSL/src/Catalogs/КлассификаторВалют/ObjectModule.bsl b/SSL/src/Catalogs/КлассификаторВалют/ObjectModule.bsl deleted file mode 100644 index 8b1378917..000000000 --- a/SSL/src/Catalogs/КлассификаторВалют/ObjectModule.bsl +++ /dev/null @@ -1 +0,0 @@ - diff --git a/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl index 654fa5244..f043b4722 100644 --- a/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl +++ b/SSL/src/Catalogs/КлючевыеОперации/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПередЗаписью(Отказ) @@ -36,7 +38,7 @@ ТекстСообщения = НСтр("ru = 'Ключевая операция с приоритетом ""%1"" уже существует (%2).'"); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", Строка(Приоритет)); ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", Выборка.Наименование); - ОценкаПроизводительностиВызовСервераПолныеПрава.ЗаписатьВЖурналРегистрации( + ОценкаПроизводительностиКлиентСервер.ЗаписатьВЖурналРегистрации( "Справочник.КлючевыеОперации.МодульОбъекта.ПередЗаписью", УровеньЖурналаРегистрации.Ошибка, ТекстСообщения); @@ -44,4 +46,5 @@ Отказ = Истина; КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Attributes/ДеревоСвойств/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Attributes/ДеревоСвойств/ExtInfo/ListSettings.dcss deleted file mode 100644 index fd24cca66..000000000 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Attributes/ДеревоСвойств/ExtInfo/ListSettings.dcss +++ /dev/null @@ -1,45 +0,0 @@ - - - - Normal - dfcece9d-5077-440b-b6b3-45a5cb4538eb - - - Normal - 88619765-ccb3-46c6-ac52-38e9c992ebd4 - - - - - - Ref - - - - - Выбран - Equal - true - - - - - false - ЦветФона - web:Linen - - - false - ЦветТекста - web:LightGray - - - Шрифт - - - - - Normal - b75fecce-942b-4aed-abc9-e6a02e460fb3 - - diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Form.form deleted file mode 100644 index cfc982ecc..000000000 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Form.form +++ /dev/null @@ -1,582 +0,0 @@ - - - - ДеревоСвойств - 2 - true - true - - true - - - ДеревоСвойств - - true - false - None - - ДеревоСвойствСсылка - 16 - true - true - - true - - - ДеревоСвойств.Ref - - - ДеревоСвойствСсылкаРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - - ДеревоСвойствСсылкаКонтекстноеМеню - 17 - true - - LabelField - Enter - true - Left - true - - true - true - - - - ДеревоСвойствКоманднаяПанель - 4 - - ДобавитьСвойство - 7 - true - true - - true - - false - - ДобавитьСвойствоРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - Form.Command.ДобавитьСвойствоВНабор - Auto - true - true - true - UserCmds - Auto - - - Создать - 8 - true - true - - true - - false - - СоздатьРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - Form.Item.ДеревоСвойств.StandardCommand.Create - Normal - Auto - true - true - UserCmds - Auto - - - СоздатьГруппу - 9 - true - true - - true - - false - - СоздатьГруппуРасширеннаяПодсказка - 22 - Label - true - true - - Left - - - Form.Item.ДеревоСвойств.StandardCommand.CreateFolder - Normal - Auto - true - true - UserCmds - Auto - - - Изменить - 10 - true - true - - true - - false - - ИзменитьРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - Form.Item.ДеревоСвойств.StandardCommand.Change - Normal - Auto - true - true - UserCmds - Auto - - - Скопировать - 11 - true - true - - true - - false - - СкопироватьРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - Form.Item.ДеревоСвойств.StandardCommand.Copy - Normal - Auto - true - true - UserCmds - Auto - - - ДеревоСвойствСправка - 19 - true - true - - true - - - ДеревоСвойствСправкаРасширеннаяПодсказка - 25 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - Left - - - Selection - ДеревоСвойствВыбор - - - BeforeAddRow - ДеревоСвойствПередНачаломДобавления - - - OnActivateRow - ДеревоСвойствПриАктивизацииСтроки - - - BeforeRowChange - ДеревоСвойствПередНачаломИзменения - - - ДеревоСвойствСтрокаПоиска - 27 - - ДеревоСвойствСтрокаПоискаРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - - ДеревоСвойствСтрокаПоискаКонтекстноеМеню - 28 - true - - ДеревоСвойств - - true - - - - ДеревоСвойствСостояниеПросмотра - 30 - - ДеревоСвойствСостояниеПросмотраРасширеннаяПодсказка - 32 - Label - true - true - - Left - - - - ДеревоСвойствСостояниеПросмотраКонтекстноеМеню - 31 - true - - ViewStatusAddition - ДеревоСвойств - - true - - - - ДеревоСвойствУправлениеПоиском - 33 - - ДеревоСвойствУправлениеПоискомРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - - ДеревоСвойствУправлениеПоискомКонтекстноеМеню - 34 - true - - SearchControlAddition - ДеревоСвойств - - true - - - - ДеревоСвойствРасширеннаяПодсказка - 26 - Label - true - true - - Left - - - - ДеревоСвойствКонтекстноеМеню - 3 - true - - Tree - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - Auto - Auto - true - true - true - true - - ДеревоСвойств.DefaultPicture - - - CommonPicture.ДополнительныеРеквизитыСведения - - None - None - None - true - - 60 - - 0001-01-01T00:00:00 - 0001-01-01T00:00:00 - - - true - - - - Комментарий - 12 - true - true - - true - - - Комментарий - - Top - - КомментарийРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - - КомментарийКонтекстноеМеню - 13 - true - - InputField - true - Enter - true - Left - true - - true - 2 - true - true - true - true - true - true - Normal - - - - ФормаКоманднаяПанель - -1 - Left - - - NotificationProcessing - ОбработкаОповещения - - - OnOpen - ПриОткрытии - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - ДеревоСвойств - - <key>ru</key> - <value>Дерево свойств</value> - - 1 - - DynamicList - - - true - - - true - - - ДеревоСвойств.Выбран - - - ДеревоСвойств.Комментарий - - - ДеревоСвойств.НомерКартинкиСведения - - - ВЫБРАТЬ - Основная.Ссылка, - ВЫБОР - КОГДА Основная.Ссылка В (&ВыбранныеСвойства) - ТОГДА ИСТИНА - ИНАЧЕ ЛОЖЬ - КОНЕЦ КАК Выбран, - ВЫБОР - КОГДА Основная.ЭтоГруппа - ТОГДА 0 - КОГДА Основная.ЭтоДополнительноеСведение - ТОГДА 2 - ИНАЧЕ 1 - КОНЕЦ + ВЫБОР - КОГДА Основная.ПометкаУдаления - ТОГДА 3 - ИНАЧЕ 0 - КОНЕЦ КАК НомерКартинкиСведения, - Основная.ЭтоГруппа, - Основная.Комментарий КАК Комментарий, - Основная.ЭтоДополнительноеСведение КАК ЭтоДополнительноеСведение -ИЗ - ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Основная - - ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения - true - true - true - true - true - - - - Комментарий - - <key>ru</key> - <value>Комментарий</value> - - 2 - - String - - - - true - - - true - - - - ЭтоДополнительноеСведение - - <key>ru</key> - <value>Это дополнительное сведение</value> - - 3 - - Boolean - - - true - - - true - - - - ВыбранныеСвойства - - <key>ru</key> - <value>Выбранные свойства</value> - - 4 - - ValueList - - - true - - - true - - - - - - - ДобавитьСвойствоВНабор - - <key>ru</key> - <value>Добавить в набор</value> - - 1 - - ru - Добавить доп.реквизит/сведение в набор - - - true - - - - ДобавитьСвойствоВНабор - - - TextPicture - Auto - Auto - - - ВыбранныеСвойства - - - - ЭтоДополнительноеСведение - - Boolean - - - - - - - diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Module.bsl deleted file mode 100644 index 5f99beb81..000000000 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ПодборСвойств/Module.bsl +++ /dev/null @@ -1,188 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - ВыбранныеСвойства.ЗагрузитьЗначения(Параметры.ВыбранныеСвойства); - - ЭтоДополнительноеСведение = Параметры.ЭтоДополнительноеСведение; - - Если ЭтоДополнительноеСведение Тогда - Заголовок = НСтр("ru = 'Подбор дополнительных сведений'"); - Иначе - Заголовок = НСтр("ru = 'Подбор дополнительных реквизитов'"); - КонецЕсли; - - ДеревоСвойств.Параметры.УстановитьЗначениеПараметра("ВыбранныеСвойства", Параметры.ВыбранныеСвойства); - - ЭлементОтбора = ДеревоСвойств.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); - ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ЭтоДополнительноеСведение"); - - Если ЭтоДополнительноеСведение Тогда - ЭлементОтбора.ПравоеЗначение = Истина; - Иначе - ЭлементОтбора.ПравоеЗначение = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - УстановитьКомментарий(); - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда - - Элементы.ДеревоСвойств.Обновить(); - - ТекущиеДанные = Элементы.ДеревоСвойств.ТекущиеДанные; - - Если ТекущиеДанные <> Неопределено И ТекущиеДанные.Ссылка = Источник Тогда - Комментарий = Параметр.Комментарий; - КонецЕсли; - - ДеревоСвойств.Параметры.УстановитьЗначениеПараметра("ВыбранныеСвойства", ВыбранныеСвойства.ВыгрузитьЗначения()); - - ИначеЕсли ИмяСобытия = "ИзменилсяНаборВыбранных" И Источник = ЭтаФорма.ВладелецФормы Тогда - - Для Каждого Элемент Из Параметр.МассивСвойств Цикл - Найденное = ВыбранныеСвойства.НайтиПоЗначению(Элемент); - - Если Параметр.Операция = "Добавление" И Найденное = Неопределено Тогда - ВыбранныеСвойства.Добавить(Элемент); - - ИначеЕсли Параметр.Операция = "Удаление" И Найденное <> Неопределено Тогда - ВыбранныеСвойства.Удалить(Найденное); - КонецЕсли; - КонецЦикла; - - ДеревоСвойств.Параметры.УстановитьЗначениеПараметра("ВыбранныеСвойства", ВыбранныеСвойства.ВыгрузитьЗначения()); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоСвойств - -&НаКлиенте -Процедура ДеревоСвойствПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) - - // Для групп используется стандартная обработка. - Если Группа = Истина Тогда - Возврат; - ИначеЕсли Копирование И (Элементы.ДеревоСвойств.ТекущиеДанные.НомерКартинкиСведения % 3 = 0) Тогда - Возврат; - КонецЕсли; - - Отказ = Истина; - ПараметрыФормы = Новый Структура; - - ПараметрыФормы.Вставить("ОткрываетсяИзНабораСвойств", Истина); - ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); - - Если Копирование Тогда - ПараметрыФормы.Вставить("Копируемый", Элементы.ДеревоСвойств.ТекущаяСтрока); - Иначе - ПараметрыФормы.Вставить("Родитель", Родитель); - КонецЕсли; - - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента", ПараметрыФормы); - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоСвойствПередНачаломИзменения(Элемент, Отказ) - - Отказ = Истина; - Если Элементы.ДеревоСвойств.ТекущаяСтрока = Неопределено Тогда - Возврат; - КонецЕсли; - - Если (Элементы.ДеревоСвойств.ТекущиеДанные.НомерКартинкиСведения % 3 = 0) Тогда - ИмяФормыПВХ = "ФормаГруппы"; - Иначе - ИмяФормыПВХ = "ФормаЭлемента"; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Ключ", Элементы.ДеревоСвойств.ТекущаяСтрока); - ПараметрыФормы.Вставить("ОткрываетсяИзНабораСвойств", Истина); - - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма." + ИмяФормыПВХ, ПараметрыФормы); - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоСвойствПриАктивизацииСтроки(Элемент) - - УстановитьКомментарий(); - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоСвойствВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - - ВыполнитьПодборСвойств(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ДобавитьСвойствоВНабор(Команда) - - ВыполнитьПодборСвойств(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаКлиенте -Процедура УстановитьКомментарий() - - Если Элементы.ДеревоСвойств.ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Комментарий = Элементы.ДеревоСвойств.ТекущиеДанные.Комментарий; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнитьПодборСвойств() - - Если Элементы.ДеревоСвойств.ВыделенныеСтроки.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - ДобавляемыеСвойства = Новый Массив; - - Для Каждого ВыделенаяСтрока ИЗ Элементы.ДеревоСвойств.ВыделенныеСтроки Цикл - Свойство = Элементы.ДеревоСвойств.ДанныеСтроки(ВыделенаяСтрока).Ссылка; - ДобавляемыеСвойства.Добавить(Свойство); - КонецЦикла; - - Результат = Новый Структура; - Результат.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); - Результат.Вставить("ДобавляемыеСвойства", ДобавляемыеСвойства); - - Оповестить("ПодборСвойствВНабор", Результат); - -КонецПроцедуры - diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Form.form similarity index 98% rename from SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Form.form rename to SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Form.form index 371d2b716..f119162d6 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Form.form @@ -498,6 +498,12 @@ Boolean + + РедактированиеСоставаНаборовРазрешено + + Boolean + + diff --git a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Module.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Module.bsl similarity index 90% rename from SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Module.bsl rename to SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Module.bsl index 7646c1560..183aa0c49 100644 --- a/SSL/src/ChartsOfCharacteristicTypes/ДополнительныеРеквизитыИСведения/Forms/ФормаРедактированияСпискаНаборов/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/РедактированиеСоставаНаборов/Module.bsl @@ -6,6 +6,12 @@ Перем ПерваяЧастьИмени, ВтораяЧастьИмени; + Если НЕ Параметры.РедактированиеСоставаНаборовРазрешено Тогда + ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Нет; + Элементы.Выбран.ТолькоПросмотр = Истина; + Элементы.Набор.ТолькоПросмотр = Истина; + КонецЕсли; + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ @@ -19,7 +25,15 @@ | НаборыДополнительныхРеквизитовИСведений.Ссылка ИЕРАРХИЯ |АВТОУПОРЯДОЧИВАНИЕ"; - Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); + НачатьТранзакцию(); + Попытка + Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; МассивУдаляемыхСтрок = Новый Массив; diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Form.form index 95aa24800..c33280ebb 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаГруппы/Form.form @@ -13,7 +13,7 @@ НаименованиеРасширеннаяПодсказка - 24 + 25 Label true true @@ -44,155 +44,179 @@ Normal
        - - ДополнительныеРеквизиты - 10 - true - true - - true - - - Объект.ДополнительныеРеквизиты - - Top - - НомерСтроки - 13 + + ТаблицыСвойств + 24 + + ДополнительныеРеквизиты + 10 true true true - Объект.ДополнительныеРеквизиты.LineNumber + Объект.ДополнительныеРеквизиты - - НомерСтрокиРасширеннаяПодсказка - 36 - Label - true - true - - Left + Top + + НомерСтроки + 13 + true + true + + true + + + Объект.ДополнительныеРеквизиты.LineNumber + + + НомерСтрокиРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + НомерСтрокиКонтекстноеМеню + 14 + true + + LabelField + Auto + true + Left + true + + true + true - - - НомерСтрокиКонтекстноеМеню - 14 - true - - LabelField - Auto - true - Left - true - - true - true - - - - Свойство - 15 - true - true - - true - - - Объект.ДополнительныеРеквизиты.Свойство - - - СвойствоРасширеннаяПодсказка - 38 - Label - true - true - - Left + + + Свойство + 15 + true + true + + true + + + Объект.ДополнительныеРеквизиты.Свойство + + + СвойствоРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + + СвойствоКонтекстноеМеню + 16 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal -
        - - СвойствоКонтекстноеМеню - 16 +
        + None + + ДополнительныеРеквизитыКоманднаяПанель + 12 + Left true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - None - - ДополнительныеРеквизитыКоманднаяПанель - 12 - Left - true - - - ДополнительныеРеквизитыСтрокаПоиска - 27 - - ДополнительныеРеквизитыСтрокаПоискаРасширеннаяПодсказка + + + ДополнительныеРеквизитыСтрокаПоиска 29 - Label - true - true - - Left + + ДополнительныеРеквизитыСтрокаПоискаРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ДополнительныеРеквизитыСтрокаПоискаКонтекстноеМеню + 30 + true + + ДополнительныеРеквизиты + + true - - - ДополнительныеРеквизитыСтрокаПоискаКонтекстноеМеню - 28 - true - - ДополнительныеРеквизиты - - true - - - - ДополнительныеРеквизитыСостояниеПросмотра - 30 - - ДополнительныеРеквизитыСостояниеПросмотраРасширеннаяПодсказка + + + ДополнительныеРеквизитыСостояниеПросмотра 32 - Label - true - true - - Left + + ДополнительныеРеквизитыСостояниеПросмотраРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ДополнительныеРеквизитыСостояниеПросмотраКонтекстноеМеню + 33 + true + + ViewStatusAddition + ДополнительныеРеквизиты + + true - - - ДополнительныеРеквизитыСостояниеПросмотраКонтекстноеМеню - 31 - true - - ViewStatusAddition - ДополнительныеРеквизиты - - true - - - - ДополнительныеРеквизитыУправлениеПоиском - 33 - - ДополнительныеРеквизитыУправлениеПоискомРасширеннаяПодсказка + + + ДополнительныеРеквизитыУправлениеПоиском 35 + + ДополнительныеРеквизитыУправлениеПоискомРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ДополнительныеРеквизитыУправлениеПоискомКонтекстноеМеню + 36 + true + + SearchControlAddition + ДополнительныеРеквизиты + + true + + + + ДополнительныеРеквизитыРасширеннаяПодсказка + 28 Label true true @@ -201,229 +225,264 @@ - ДополнительныеРеквизитыУправлениеПоискомКонтекстноеМеню - 34 + ДополнительныеРеквизитыКонтекстноеМеню + 11 true - SearchControlAddition - ДополнительныеРеквизиты - - true - - - - ДополнительныеРеквизитыРасширеннаяПодсказка - 26 - Label + HierarchicalList + 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 + + + + ДополнительныеСведения + 17 + true + true + + true + + + Объект.ДополнительныеСведения + + Top + + НомерСтроки1 + 20 + true + true + + true + + + Объект.ДополнительныеСведения.LineNumber + + + НомерСтроки1РасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + НомерСтроки1КонтекстноеМеню + 21 + true + + LabelField + Auto + true + Left + true + + true + true + + + + Свойство1 + 22 + true + true + + true + + + Объект.ДополнительныеСведения.Свойство + + + Свойство1РасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + Свойство1КонтекстноеМеню + 23 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + None + + ДополнительныеСведенияКоманднаяПанель + 19 Left -
        -
        - - ДополнительныеРеквизитыКонтекстноеМеню - 11 - true - - HierarchicalList - 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 - - - - ДополнительныеСведения - 17 + true + + + ДополнительныеСведенияСтрокаПоиска + 51 + + ДополнительныеСведенияСтрокаПоискаРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ДополнительныеСведенияСтрокаПоискаКонтекстноеМеню + 52 + true + + ДополнительныеСведения + + true + + + + ДополнительныеСведенияСостояниеПросмотра + 54 + + ДополнительныеСведенияСостояниеПросмотраРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ДополнительныеСведенияСостояниеПросмотраКонтекстноеМеню + 55 + true + + ViewStatusAddition + ДополнительныеСведения + + true + + + + ДополнительныеСведенияУправлениеПоиском + 57 + + ДополнительныеСведенияУправлениеПоискомРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ДополнительныеСведенияУправлениеПоискомКонтекстноеМеню + 58 + true + + SearchControlAddition + ДополнительныеСведения + + true + + + + ДополнительныеСведенияРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ДополнительныеСведенияКонтекстноеМеню + 18 + true + + HierarchicalList + 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 + +
        true true true - - Объект.ДополнительныеСведения - - Top - - НомерСтроки1 - 20 - true - true - - true - - - Объект.ДополнительныеСведения.LineNumber - - - НомерСтроки1РасширеннаяПодсказка - 58 - Label - true - true - - Left - - - - НомерСтроки1КонтекстноеМеню - 21 - true - - LabelField - Auto - true - Left - true - - true - true - - - - Свойство1 - 22 - true - true - - true - - - Объект.ДополнительныеСведения.Свойство - - - Свойство1РасширеннаяПодсказка - 60 - Label - true - true - - Left - - - - Свойство1КонтекстноеМеню - 23 - true - - InputField - Auto - true - Left - true - - true - true - true - true - true - true - Normal - - - None - - ДополнительныеСведенияКоманднаяПанель - 19 - Left - true - - - ДополнительныеСведенияСтрокаПоиска - 49 - - ДополнительныеСведенияСтрокаПоискаРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - - ДополнительныеСведенияСтрокаПоискаКонтекстноеМеню - 50 - true - - ДополнительныеСведения - - true - - - - ДополнительныеСведенияСостояниеПросмотра - 52 - - ДополнительныеСведенияСостояниеПросмотраРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - - ДополнительныеСведенияСостояниеПросмотраКонтекстноеМеню - 53 - true - - ViewStatusAddition - ДополнительныеСведения - - true - - - - ДополнительныеСведенияУправлениеПоиском - 55 - - ДополнительныеСведенияУправлениеПоискомРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - - ДополнительныеСведенияУправлениеПоискомКонтекстноеМеню - 56 - true - - SearchControlAddition - ДополнительныеСведения - - true - - + + <key>ru</key> + <value>Таблицы свойств</value> + + + ru + Таблицы свойств + - ДополнительныеСведенияРасширеннаяПодсказка - 48 + ТаблицыСвойствРасширеннаяПодсказка + 27 Label true true @@ -431,38 +490,14 @@ Left - - ДополнительныеСведенияКонтекстноеМеню - 18 - true - - HierarchicalList - 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 - + UsualGroup + + Auto + true + true + Auto + Auto + ФормаКоманднаяПанель diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Help/ru.html deleted file mode 100644 index 84622df9f..000000000 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаСписка/Help/ru.html +++ /dev/null @@ -1,2 +0,0 @@ - -

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

        \ No newline at end of file diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form index 0e5e432ba..1977b376f 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Form.form @@ -13,7 +13,7 @@ НаименованиеРасширеннаяПодсказка - 72 + 74 Label true true @@ -65,7 +65,7 @@ Find SelectAll - Свойство1 + ДополнительныеРеквизитыСвойство 25 true true @@ -76,8 +76,8 @@ ДополнительныеРеквизиты.Свойство - Свойство1РасширеннаяПодсказка - 89 + ДополнительныеРеквизитыСвойствоРасширеннаяПодсказка + 91 Label true true @@ -86,7 +86,7 @@ - Свойство1КонтекстноеМеню + ДополнительныеРеквизитыСвойствоКонтекстноеМеню 26 true @@ -102,6 +102,77 @@ true true true + + Отбор.ЭтоДополнительноеСведение + + + + + Normal + + + + ДополнительныеРеквизитыЗаполнятьОбязательно + 72 + true + true + + true + + + ДополнительныеРеквизиты.ЗаполнятьОбязательно + + + ДополнительныеРеквизитыЗаполнятьОбязательноРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ДополнительныеРеквизитыЗаполнятьОбязательноКонтекстноеМеню + 73 + true + + InputField + true + Left + true + + 8 + true + true + true + true + true + + + ru + По умолчанию + + + + + + ru + Да + + + Да + + + + + ru + Нет + + + Нет + + Normal @@ -109,7 +180,7 @@ ДополнительныеРеквизитыКоманднаяПанель 24 - ТабРеквизитыПодборДопРеквизитов + ДополнительныеРеквизитыПодбор 69 true true @@ -117,8 +188,8 @@ true - ТабРеквизитыПодборДопРеквизитовРасширеннаяПодсказка - 75 + ДополнительныеРеквизитыПодборРасширеннаяПодсказка + 77 Label true true @@ -135,34 +206,7 @@ Auto - Удалить - 60 - true - true - - true - - false - - УдалитьРасширеннаяПодсказка - 76 - Label - true - true - - Left - - - Form.Item.ДополнительныеРеквизиты.StandardCommand.Delete - Normal - PictureAndText - true - true - UserCmds - Auto - - - ПереместитьВверх + ДополнительныеРеквизитыПереместитьВверх 61 true true @@ -171,8 +215,8 @@ false - ПереместитьВверхРасширеннаяПодсказка - 77 + ДополнительныеРеквизитыПереместитьВверхРасширеннаяПодсказка + 78 Label true true @@ -189,7 +233,7 @@ Auto - ПереместитьВниз + ДополнительныеРеквизитыПереместитьВниз 62 true true @@ -198,8 +242,8 @@ false - ПереместитьВнизРасширеннаяПодсказка - 78 + ДополнительныеРеквизитыПереместитьВнизРасширеннаяПодсказка + 79 Label true true @@ -215,6 +259,33 @@ UserCmds Auto + + ДополнительныеРеквизитыУдалить + 60 + true + true + + true + + false + + ДополнительныеРеквизитыУдалитьРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.Item.ДополнительныеРеквизиты.StandardCommand.Delete + Normal + PictureAndText + true + true + UserCmds + Auto + Left
        @@ -229,12 +300,16 @@ BeforeDeleteRow ДополнительныеРеквизитыПередУдалением + + ChoiceProcessing + ДополнительныеРеквизитыОбработкаВыбора + ДополнительныеРеквизитыСтрокаПоиска - 80 + 82 ДополнительныеРеквизитыСтрокаПоискаРасширеннаяПодсказка - 82 + 84 Label true true @@ -244,7 +319,7 @@ ДополнительныеРеквизитыСтрокаПоискаКонтекстноеМеню - 81 + 83 true ДополнительныеРеквизиты @@ -254,10 +329,10 @@ ДополнительныеРеквизитыСостояниеПросмотра - 83 + 85 ДополнительныеРеквизитыСостояниеПросмотраРасширеннаяПодсказка - 85 + 87 Label true true @@ -267,7 +342,7 @@ ДополнительныеРеквизитыСостояниеПросмотраКонтекстноеМеню - 84 + 86 true ViewStatusAddition @@ -278,10 +353,10 @@ ДополнительныеРеквизитыУправлениеПоиском - 86 + 88 ДополнительныеРеквизитыУправлениеПоискомРасширеннаяПодсказка - 88 + 90 Label true true @@ -291,7 +366,7 @@ ДополнительныеРеквизитыУправлениеПоискомКонтекстноеМеню - 87 + 89 true SearchControlAddition @@ -302,7 +377,7 @@ ДополнительныеРеквизитыРасширеннаяПодсказка - 79 + 81 Label true true @@ -321,6 +396,7 @@ true true MultiRow +
        true
        1 1 AutoUse @@ -360,7 +436,7 @@ EndEdit Find - Свойство2 + ДополнительныеСведенияСвойство 30 true true @@ -371,8 +447,8 @@ ДополнительныеСведения.Свойство - Свойство2РасширеннаяПодсказка - 113 + ДополнительныеСведенияСвойствоРасширеннаяПодсказка + 117 Label true true @@ -381,7 +457,7 @@ - Свойство2КонтекстноеМеню + ДополнительныеСведенияСвойствоКонтекстноеМеню 31 true @@ -397,6 +473,14 @@ true true true + + Отбор.ЭтоДополнительноеСведение + + + true + + + Normal @@ -404,7 +488,7 @@ ДополнительныеСведенияКоманднаяПанель 29 - ТабСведенияПодборДопСведений + ДополнительныеСведенияПодбор 70 true true @@ -412,8 +496,8 @@ true - ТабСведенияПодборДопСведенийРасширеннаяПодсказка - 99 + ДополнительныеСведенияПодборРасширеннаяПодсказка + 103 Label true true @@ -430,34 +514,7 @@ Auto - Удалить1 - 63 - true - true - - true - - false - - Удалить1РасширеннаяПодсказка - 100 - Label - true - true - - Left - - - Form.Item.ДополнительныеСведения.StandardCommand.Delete - Normal - PictureAndText - true - true - UserCmds - Auto - - - ПереместитьВверх1 + ДополнительныеСведенияПереместитьВверх 64 true true @@ -466,8 +523,8 @@ false - ПереместитьВверх1РасширеннаяПодсказка - 101 + ДополнительныеСведенияПереместитьВверхРасширеннаяПодсказка + 104 Label true true @@ -484,7 +541,7 @@ Auto - ПереместитьВниз1 + ДополнительныеСведенияПереместитьВниз 65 true true @@ -493,8 +550,8 @@ false - ПереместитьВниз1РасширеннаяПодсказка - 102 + ДополнительныеСведенияПереместитьВнизРасширеннаяПодсказка + 105 Label true true @@ -510,6 +567,33 @@ UserCmds Auto + + ДополнительныеСведенияУдалить + 63 + true + true + + true + + false + + ДополнительныеСведенияУдалитьРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + Form.Item.ДополнительныеСведения.StandardCommand.Delete + Normal + PictureAndText + true + true + UserCmds + Auto + Left @@ -524,12 +608,16 @@ BeforeDeleteRow ДополнительныеСведенияПередУдалением + + ChoiceProcessing + ДополнительныеСведенияОбработкаВыбора + ДополнительныеСведенияСтрокаПоиска - 104 + 108 ДополнительныеСведенияСтрокаПоискаРасширеннаяПодсказка - 106 + 110 Label true true @@ -539,7 +627,7 @@ ДополнительныеСведенияСтрокаПоискаКонтекстноеМеню - 105 + 109 true ДополнительныеСведения @@ -549,10 +637,10 @@ ДополнительныеСведенияСостояниеПросмотра - 107 + 111 ДополнительныеСведенияСостояниеПросмотраРасширеннаяПодсказка - 109 + 113 Label true true @@ -562,7 +650,7 @@ ДополнительныеСведенияСостояниеПросмотраКонтекстноеМеню - 108 + 112 true ViewStatusAddition @@ -573,10 +661,10 @@ ДополнительныеСведенияУправлениеПоиском - 110 + 114 ДополнительныеСведенияУправлениеПоискомРасширеннаяПодсказка - 112 + 116 Label true true @@ -586,7 +674,7 @@ ДополнительныеСведенияУправлениеПоискомКонтекстноеМеню - 111 + 115 true SearchControlAddition @@ -597,7 +685,7 @@ ДополнительныеСведенияРасширеннаяПодсказка - 103 + 107 Label true true @@ -649,7 +737,7 @@ ТаблицыСвойствРасширеннаяПодсказка - 74 + 76 Label true true @@ -680,6 +768,8 @@ OnCreateAtServer ПриСозданииНаСервере + Copy + Delete LockOwner true true @@ -726,7 +816,7 @@ Свойство <key>ru</key> - <value>Свойство</value> + <value>Дополнительный реквизит</value> 1 @@ -739,6 +829,24 @@ true + + ЗаполнятьОбязательно + + <key>ru</key> + <value>Обязательный</value> + + 2 + + String + + + + true + + + true + + ДополнительныеСведения @@ -761,7 +869,7 @@ Свойство <key>ru</key> - <value>Свойство</value> + <value>Дополнительное сведение</value> 1 @@ -775,24 +883,6 @@ - - Комментарий - - <key>ru</key> - <value>Комментарий</value> - - 6 - - String - - - - true - - - true - - ИспользоватьДопРеквизиты @@ -871,6 +961,20 @@ <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>СкрытьДополнительныеРеквизиты</name> + <valueType> + <types>Boolean</types> + </valueType> + <keyParameter>true</keyParameter> + </parameters> + <parameters> + <name>СкрытьДополнительныеСведения</name> + <valueType> + <types>Boolean</types> + </valueType> + <keyParameter>true</keyParameter> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> @@ -880,6 +984,10 @@ <event>AfterWrite</event> <name>ПослеЗаписи</name> </handlers> + <handlers> + <event>OnReadAtServer</event> + <name>ПриЧтенииНаСервере</name> + </handlers> <handlers> <event>BeforeWriteAtServer</event> <name>ПередЗаписьюНаСервере</name> diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html deleted file mode 100644 index df2d17466..000000000 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Help/ru.html +++ /dev/null @@ -1,2 +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.16447"></meta></head><body> -<p>Элемент содержит таблицу с набором дополнительных реквизитов, назначенных объекту, и таблицу с набором дополнительных сведений, назначенных объекту. Также на форме набора расположен список всех дополнительных реквизитов и сведений, уже существующих в ИБ. Добавить объекту новый дополнительный реквизит или сведение можно из этого списка командой <strong>Добавить в набор</strong>. Если в списке всех реквизитов и сведений нет требуемого объекту реквизита или сведения, его нужно создать командой <strong>Создать</strong>. В открывшейся форме необходимо указать что мы создаем — дополнительный реквизит или дополнительное сведение, указать наименование. Исходя из логики использования выбрать из списка тип значения дополнительного реквизита или сведения. При выборе типа значения <strong>Значения свойств объектов</strong>, можно задать список возможных значений дополнительного реквизита или сведения в списке <strong>Значения свойств объектов.</strong> Список открывается командой на<strong> панели навигации</strong> дополнительного реквизита или сведения.</p></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 c9f75f1c0..9bc55b20d 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Forms/ФормаЭлемента/Module.bsl @@ -1,3 +1,4 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -10,70 +11,41 @@ КонецЕсли; // Раздельная настройка дополнительных реквизитов и дополнительных сведений. + Элементы.ДополнительныеРеквизитыЗаполнятьОбязательно.Подсказка = + Метаданные.Справочники.НаборыДополнительныхРеквизитовИСведений.ТабличныеЧасти + .ДополнительныеРеквизиты.Реквизиты.ЗаполнятьОбязательно.Подсказка; - Если Объект.Предопределенный Тогда - Элементы.Наименование.ТолькоПросмотр = Истина; + Элементы.Наименование.ТолькоПросмотр = Истина; + + Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда + ЗаполнитьИспользованиеДополнительныхСвойств(); + ЗаполнитьДополнительныеСвойстваВФорме(); КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + // При записи свойства необходимо перенести свойство в соответствующую группу. + Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда + ПроверитьСоставыТаблицПослеЗаписиСвойства(Параметр.ЭтоДополнительноеСведение, Источник); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + ЗаполнитьИспользованиеДополнительныхСвойств(); - - Если НЕ ИспользоватьДопРеквизиты И НЕ ИспользоватьДопСведения Тогда - Отказ = Истина; - ВызватьИсключение НСтр("ru = 'Использование свойств не определено.'"); - КонецЕсли; - - Если НЕ ИспользоватьДопРеквизиты Тогда - Элементы.ДополнительныеРеквизиты.Видимость = Ложь; - Элементы.ДополнительныеСведения.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - - ИначеЕсли НЕ ИспользоватьДопСведения Тогда - Элементы.ДополнительныеСведения.Видимость = Ложь; - Элементы.ДополнительныеРеквизиты.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; - КонецЕсли; - - Если ИспользоватьДопРеквизиты Тогда - Для Каждого Строка Из Объект.ДополнительныеРеквизиты Цикл - Если НЕ Строка.Свойство.ЭтоДополнительноеСведение Тогда - ДополнительныеРеквизиты.Добавить().Свойство = Строка.Свойство; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если ИспользоватьДопСведения Тогда - Для Каждого Строка Из Объект.ДополнительныеСведения Цикл - Если Строка.Свойство.ЭтоДополнительноеСведение Тогда - ДополнительныеСведения.Добавить().Свойство = Строка.Свойство; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если ИспользоватьДопРеквизиты И ИспользоватьДопСведения Тогда - Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных реквизитов и сведений)'") - ИначеЕсли ИспользоватьДопРеквизиты Тогда - Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных реквизитов)'") - ИначеЕсли ИспользоватьДопСведения Тогда - Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных сведений)'") - КонецЕсли; + ЗаполнитьДополнительныеСвойстваВФорме(); КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) - ТекущийОбъект.ДополнительныеРеквизиты.Очистить(); - ТекущийОбъект.ДополнительныеСведения.Очистить(); - - Если ИспользоватьДопРеквизиты Тогда - Для Каждого Строка Из ДополнительныеРеквизиты Цикл - ТекущийОбъект.ДополнительныеРеквизиты.Добавить().Свойство = Строка.Свойство; - КонецЦикла; - КонецЕсли; - - Если ИспользоватьДопСведения Тогда - Для каждого Строка Из ДополнительныеСведения Цикл - ТекущийОбъект.ДополнительныеСведения.Добавить().Свойство = Строка.Свойство; - КонецЦикла; - КонецЕсли; + ЗаполнитьДополнительныеСвойстваВОбъекте(ТекущийОбъект); КонецПроцедуры @@ -84,45 +56,18 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДополнительныеРеквизиты + &НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) +Процедура ДополнительныеРеквизитыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - // При записи свойства необходимо перенести свойство в соответствующую группу и - // обновить поле Комментарий (если требуется). - - Если ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда - ПроверитьСоставыТаблицПослеЗаписиСвойства(Параметр.ЭтоДополнительноеСведение, Источник); - - ИначеЕсли ИмяСобытия = "ПодборСвойствВНабор" Тогда - - ДобавляемыеСвойства = Новый Массив; - - Если Параметр.ЭтоДополнительноеСведение Тогда - Таблица = ДополнительныеСведения; - Иначе - Таблица = ДополнительныеРеквизиты - КонецЕсли; - - Для каждого Добавляемый Из Параметр.ДобавляемыеСвойства Цикл - - Отбор = Новый Структура("Свойство", Добавляемый); - - Если Таблица.НайтиСтроки(Отбор).Количество() = 0 Тогда - ДобавляемыеСвойства.Добавить(Добавляемый); - КонецЕсли; - КонецЦикла; - - Если ДобавляемыеСвойства.Количество() > 0 Тогда - ДобавитьСвойства(ДобавляемыеСвойства); - КонецЕсли; - + Если Прав(Поле.Имя, СтрДлина("Свойство")) = "Свойство" Тогда + ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДополнительныеРеквизиты - &НаКлиенте Процедура ДополнительныеРеквизитыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) @@ -138,9 +83,9 @@ КонецПроцедуры &НаКлиенте -Процедура ДополнительныеРеквизитыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) +Процедура ДополнительныеРеквизитыОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка); + ОбработкаВыбораСвойства(ВыбранноеЗначение, ДополнительныеРеквизиты); КонецПроцедуры @@ -168,20 +113,27 @@ КонецПроцедуры +&НаКлиенте +Процедура ДополнительныеСведенияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + ОбработкаВыбораСвойства(ВыбранноеЗначение, ДополнительныеСведения); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ПодборДопРеквизитов(Команда) - ВызватьФормуПодбора(Ложь); + ПодобратьДополнительныеСвойства(Ложь); КонецПроцедуры &НаКлиенте Процедура ПодборДопСведений(Команда) - ВызватьФормуПодбора(Истина); + ПодобратьДополнительныеСвойства(Истина); КонецПроцедуры @@ -190,112 +142,153 @@ Процедура ЗаполнитьИспользованиеДополнительныхСвойств() - Если Объект.Ссылка = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда - ИспользоватьДопРеквизиты = Ложь; - ИспользоватьДопСведения = Ложь; - Возврат; - КонецЕсли; - - Если Объект.Ссылка.Предопределенный - И Объект.Ссылка.Родитель = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда - - СсылкаПредопределенного = Объект.Ссылка; - Иначе - СсылкаПредопределенного = Объект.Ссылка.Родитель; - КонецЕсли; - - Если СсылкаПредопределенного = Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда - ВызватьИсключение НСтр("ru = 'Не найден владелец свойств.'"); - КонецЕсли; - - ВидыСвойствНабора = УправлениеСвойствами.ВидыСвойствНабора(СсылкаПредопределенного); + ВидыСвойствНабора = УправлениеСвойствами.ВидыСвойствНабора(Объект.Ссылка); ИспользоватьДопРеквизиты = ВидыСвойствНабора.ДополнительныеРеквизиты; ИспользоватьДопСведения = ВидыСвойствНабора.ДополнительныеСведения; + Если Параметры.СкрытьДополнительныеРеквизиты Тогда + ИспользоватьДопРеквизиты = Ложь; + КонецЕсли; + + Если Параметры.СкрытьДополнительныеСведения Тогда + ИспользоватьДопСведения = Ложь; + КонецЕсли; + + Если НЕ ИспользоватьДопРеквизиты И НЕ ИспользоватьДопСведения Тогда + + Если Параметры.СкрытьДополнительныеРеквизиты Тогда + ВызватьИсключение НСтр("ru = 'Использование дополнительных сведений не определено.'"); + + ИначеЕсли Параметры.СкрытьДополнительныеСведения Тогда + ВызватьИсключение НСтр("ru = 'Использование дополнительных реквизитов не определено.'"); + Иначе + ВызватьИсключение НСтр("ru = 'Использование дополнительных реквизитов и + |дополнительных сведений не определено.'"); + КонецЕсли; + КонецЕсли; + + Если НЕ ИспользоватьДопРеквизиты Тогда + Элементы.ДополнительныеРеквизиты.Видимость = Ложь; + Элементы.ДополнительныеСведения.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + + ИначеЕсли НЕ ИспользоватьДопСведения Тогда + Элементы.ДополнительныеСведения.Видимость = Ложь; + Элементы.ДополнительныеРеквизиты.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + КонецЕсли; + + Если ИспользоватьДопРеквизиты И ИспользоватьДопСведения Тогда + Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных реквизитов и сведений)'") + ИначеЕсли ИспользоватьДопРеквизиты Тогда + Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных реквизитов)'") + ИначеЕсли ИспользоватьДопСведения Тогда + Заголовок = Объект.Наименование + " " + НСтр("ru = '(Набор дополнительных сведений)'") + КонецЕсли; + КонецПроцедуры -&НаСервереБезКонтекста -Функция ДобавитьВыделенныеСвойства(Знач ДобавляемыеСвойства, ДопРеквизиты, ДопСведения) +Процедура ЗаполнитьДополнительныеСвойстваВФорме() + + ДополнительныеРеквизиты.Очистить(); + ДополнительныеСведения.Очистить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ДополнительныеРеквизитыИСведения.Ссылка КАК Свойство - |ПОМЕСТИТЬ Временная - |ИЗ - | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения - |ГДЕ - | (ДополнительныеРеквизитыИСведения.Ссылка В (&ДопРеквизиты) - | ИЛИ ДополнительныеРеквизитыИСведения.Ссылка В (&ДопСведения)) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ | ДополнительныеРеквизитыИСведения.Ссылка, | ДополнительныеРеквизитыИСведения.ЭтоДополнительноеСведение |ИЗ - | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения - | ЛЕВОЕ СОЕДИНЕНИЕ Временная КАК Временная - | ПО ДополнительныеРеквизитыИСведения.Ссылка = Временная.Свойство - |ГДЕ - | ДополнительныеРеквизитыИСведения.Ссылка В ИЕРАРХИИ(&ДобавляемыеСвойства) - | И НЕ ДополнительныеРеквизитыИСведения.ЭтоГруппа - | И Временная.Свойство ЕСТЬ NULL - | И НЕ ДополнительныеРеквизитыИСведения.ПометкаУдаления - | - |УПОРЯДОЧИТЬ ПО - | ДополнительныеРеквизитыИСведения.Наименование"; + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения"; - Запрос.УстановитьПараметр("ДобавляемыеСвойства", ДобавляемыеСвойства); - Запрос.УстановитьПараметр("ДопРеквизиты", ДопРеквизиты); - Запрос.УстановитьПараметр("ДопСведения", ДопСведения); + НачатьТранзакцию(); + Попытка + ВсеСвойства = Запрос.Выполнить().Выгрузить(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; - Выборка = Запрос.Выполнить().Выбрать(); + ВсеСвойства.Индексы.Добавить("Ссылка"); - ДопРеквизиты.Очистить(); - ДопСведения.Очистить(); - - Если Выборка.Количество() = 0 Тогда - Возврат Ложь; + Если ИспользоватьДопРеквизиты Тогда + Для Каждого Строка Из Объект.ДополнительныеРеквизиты Цикл + Свойство = ВсеСвойства.Найти(Строка.Свойство, "Ссылка"); + Если Свойство = Неопределено Тогда + Продолжить; + КонецЕсли; + Если НЕ Свойство.ЭтоДополнительноеСведение Тогда + НоваяСтрока = ДополнительныеРеквизиты.Добавить(); + НоваяСтрока.Свойство = Строка.Свойство; + НоваяСтрока.ЗаполнятьОбязательно = + ?(Строка.ЗаполнятьОбязательно = 0, + "", + ?(Строка.ЗаполнятьОбязательно = 1, "Да", "Нет")); + КонецЕсли; + КонецЦикла; КонецЕсли; - Пока Выборка.Следующий() Цикл - - Если Выборка.ЭтоДополнительноеСведение Тогда - ДопСведения.Добавить(Выборка.Ссылка); - Иначе - ДопРеквизиты.Добавить(Выборка.Ссылка); - КонецЕсли; - - КонецЦикла; + Если ИспользоватьДопСведения Тогда + Для Каждого Строка Из Объект.ДополнительныеСведения Цикл + Свойство = ВсеСвойства.Найти(Строка.Свойство, "Ссылка"); + Если Свойство = Неопределено Тогда + Продолжить; + КонецЕсли; + Если Свойство.ЭтоДополнительноеСведение Тогда + НоваяСтрока = ДополнительныеСведения.Добавить(); + НоваяСтрока.Свойство = Строка.Свойство; + КонецЕсли; + КонецЦикла; + КонецЕсли; - Возврат Истина; - -КонецФункции +КонецПроцедуры -&НаКлиенте -Процедура ДополнительныеСвойстваПередУдалением(Элемент, ТаблицаСвойств) +Процедура ЗаполнитьДополнительныеСвойстваВОбъекте(ТекущийОбъект) - МассивУдаляемыхСвойств = Новый Массив; + ТекущийОбъект.ДополнительныеРеквизиты.Очистить(); + ТекущийОбъект.ДополнительныеСведения.Очистить(); - Для Каждого ВыдСтрока Из Элемент.ВыделенныеСтроки Цикл - Свойство = Элемент.ДанныеСтроки(ВыдСтрока).Свойство; - МассивУдаляемыхСвойств.Добавить(Свойство); - Строки = ТаблицаСвойств.НайтиСтроки(Новый Структура("Свойство", Свойство)); - ТаблицаСвойств.Удалить(Строки[0]); - КонецЦикла; + Если ИспользоватьДопРеквизиты Тогда + Для Каждого Строка Из ДополнительныеРеквизиты Цикл + НоваяСтрока = ТекущийОбъект.ДополнительныеРеквизиты.Добавить(); + НоваяСтрока.Свойство = Строка.Свойство; + НоваяСтрока.ЗаполнятьОбязательно = + ?(Строка.ЗаполнятьОбязательно = "", + 0, + ?(Строка.ЗаполнятьОбязательно = "Да", 1, 2)); + КонецЦикла; + КонецЕсли; - Если МассивУдаляемыхСвойств.Количество() > 0 Тогда - ОповеститьОбИзмененииНабора("Удаление", МассивУдаляемыхСвойств); + Если ИспользоватьДопСведения Тогда + Для каждого Строка Из ДополнительныеСведения Цикл + НоваяСтрока = ТекущийОбъект.ДополнительныеСведения.Добавить(); + НоваяСтрока.Свойство = Строка.Свойство; + КонецЦикла; КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ВызватьФормуПодбора(ЭтоДополнительноеСведение) +Процедура ДополнительныеСвойстваПередУдалением(Элемент, ТаблицаСвойств) + + Для каждого ВыделеннаяСтрока Из Элемент.ВыделенныеСтроки Цикл + + Свойство = Элемент.ДанныеСтроки(ВыделеннаяСтрока).Свойство; + + Строки = ТаблицаСвойств.НайтиСтроки(Новый Структура("Свойство", Свойство)); + ТаблицаСвойств.Удалить(Строки[0]); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПодобратьДополнительныеСвойства(ЭтоДополнительноеСведение) + + Отбор = Новый Структура("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); + ПараметрыФормы.Вставить("Отбор", Отбор); + ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); ВыбранныеСвойства = Новый Массив; @@ -303,29 +296,20 @@ Для Каждого Строка Из ДополнительныеСведения Цикл ВыбранныеСвойства.Добавить(Строка.Свойство); КонецЦикла; + ВладелецФормы = Элементы.ДополнительныеСведения; Иначе Для Каждого Строка Из ДополнительныеРеквизиты Цикл ВыбранныеСвойства.Добавить(Строка.Свойство); КонецЦикла; + ВладелецФормы = Элементы.ДополнительныеРеквизиты; КонецЕсли; - ПараметрыФормы.Вставить("ВыбранныеСвойства", ВыбранныеСвойства); + ПараметрыФормы.Вставить("ВыбранныеЗначения", ВыбранныеСвойства); - ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ПодборСвойств", + ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.ФормаВыбора", ПараметрыФормы, - ЭтаФорма, - УникальныйИдентификатор); - -КонецПроцедуры - -&НаКлиенте -Процедура ОповеститьОбИзмененииНабора(Операция, МассивСвойств) - - ПараметрыОповещения = Новый Структура; - ПараметрыОповещения.Вставить("Операция", Операция); - ПараметрыОповещения.Вставить("МассивСвойств", МассивСвойств); - - Оповестить("ИзменилсяНаборВыбранных", ПараметрыОповещения, ЭтаФорма); + ВладелецФормы, + Объект.Ссылка); КонецПроцедуры @@ -357,52 +341,44 @@ КонецПроцедуры -&НаКлиенте -Процедура ДобавитьСвойства(ДобавляемыеСвойства) - - ДопРеквизиты = Новый Массив; - Для каждого Строка Из ДополнительныеРеквизиты Цикл - ДопРеквизиты.Добавить(Строка.Свойство); - КонецЦикла; - - ДопСведения = Новый Массив; - Для каждого Строка Из ДополнительныеСведения Цикл - ДопСведения.Добавить(Строка.Свойство); - КонецЦикла; - - ОбщийМассивСвойств = Новый Массив; - - Если ДобавитьВыделенныеСвойства(ДобавляемыеСвойства, ДопРеквизиты, ДопСведения) Тогда - - Модифицированность = Истина; - - Для каждого ДобавляемыйРеквизит Из ДопРеквизиты Цикл - НоваяСтрока = ДополнительныеРеквизиты.Добавить(); - НоваяСтрока.Свойство = ДобавляемыйРеквизит; - ОбщийМассивСвойств.Добавить(ДобавляемыйРеквизит); - КонецЦикла; - - Для каждого ДобавляемоеСведение Из ДопСведения Цикл - НоваяСтрока = ДополнительныеСведения.Добавить(); - НоваяСтрока.Свойство = ДобавляемоеСведение; - ОбщийМассивСвойств.Добавить(ДобавляемоеСведение); - КонецЦикла; - - ОповеститьОбИзмененииНабора("Добавление", ОбщийМассивСвойств); - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ТаблицаВыбор(Элемент, ВыбраннаяСтрока, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ОткрываетсяИзНабораСвойств", Истина); ПараметрыФормы.Вставить("Ключ", Элемент.ДанныеСтроки(ВыбраннаяСтрока).Свойство); - ОткрытьФорму("ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента", ПараметрыФормы); + ОткрытьФорму( + "ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Форма.ФормаЭлемента", + ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбораСвойства(ВыбранноеЗначение, Таблица) + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда + + Для каждого Значение Из ВыбранноеЗначение Цикл + ДобавитьВыбранноеСвойство(Значение, Таблица); + КонецЦикла; + Иначе + ДобавитьВыбранноеСвойство(ВыбранноеЗначение, Таблица); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьВыбранноеСвойство(Значение, Таблица) + + Если ТипЗнч(Значение) = Тип("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения") Тогда + + Отбор = Новый Структура("Свойство", Значение); + Если Таблица.НайтиСтроки(Отбор).Количество() = 0 Тогда + + Таблица.Добавить().Свойство = Значение; + КонецЕсли; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html index 872d6a6ef..add2d568e 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/Help/ru.html @@ -1,5 +1,7 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>Администратор системы может настроить наборы дополнительных свойств для определенных объектов системы. Способ хранения дополнительного свойства в информационной базе и место размещения на форме объекта зависит от типа свойства: дополнительный реквизит или сведение.</p> +<p>Предопределенные наборы и группы наборов соответствуют объектам конфигурации, в которых можно использовать дополнительные реквизиты и сведения. Добавление новых наборов и групп наборов невозможно.</p> +<p>В форме набора с помощью команды Подбор можно добавить объекту новый дополнительный реквизит или сведение.<br></p> <p>Примечание:</p> <blockquote style="MARGIN-RIGHT: 0px" dir="ltr"> <p>При удалении свойства из набора, значение свойства сохраняется в информационной базе до тех пор, пока не будет очищено. При этом удаленное из набора дополнительное свойство будет отображаться на форме объекта или форме дополнительных сведений особым образом.</p></blockquote> diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl index 77fbbb493..5d4392bb7 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -65,3 +67,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo index e7f1cf956..0842a741d 100644 --- a/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo +++ b/SSL/src/Catalogs/НаборыДополнительныхРеквизитовИСведений/НаборыДополнительныхРеквизитовИСведений.mdo @@ -208,7 +208,7 @@ <name>Свойство</name> <synonym> <key>ru</key> - <value>Свойство</value> + <value>Дополнительный реквизит</value> </synonym> <type> <types>ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения</types> @@ -225,6 +225,29 @@ <indexing>Index</indexing> <fullTextSearch>Use</fullTextSearch> </attributes> + <attributes uuid="4cca4c80-62f5-4205-8196-78fcfa83de2f"> + <name>ЗаполнятьОбязательно</name> + <synonym> + <key>ru</key> + <value>Заполнять обязательно</value> + </synonym> + <type> + <types>Number</types> + <numberQualifiers> + <precision>1</precision> + <nonNegative>true</nonNegative> + </numberQualifiers> + </type> + <toolTip> + <key>ru</key> + <value>Настройка проверки заполненности дополнительного реквизита для этого набора свойств. +Замещает настройку по умолчанию, сделанную в свойстве.</value> + </toolTip> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> <use>ForFolderAndItem</use> </tabularSections> <tabularSections uuid="1a7c774d-5b86-4051-b797-3081e19fa30a"> @@ -249,7 +272,7 @@ <name>Свойство</name> <synonym> <key>ru</key> - <value>Свойство</value> + <value>Дополнительное сведение</value> </synonym> <type> <types>ChartOfCharacteristicTypesRef.ДополнительныеРеквизитыИСведения</types> @@ -268,20 +291,11 @@ </attributes> <use>ForFolderAndItem</use> </tabularSections> - <forms uuid="ef762828-452c-4d3a-ad7a-7f4933ab05ac"> - <name>ПодборСвойств</name> + <forms uuid="c5b3ca21-8f7b-4933-853c-7d95b17b5631"> + <name>ФормаЭлемента</name> <synonym> <key>ru</key> - <value>Подбор свойств</value> - </synonym> - <usePurposes>PersonalComputer</usePurposes> - <usePurposes>MobileDevice</usePurposes> - </forms> - <forms uuid="e2b482cb-6954-4e6a-abe9-d0a01f64b73a"> - <name>ФормаВыбора</name> - <synonym> - <key>ru</key> - <value>Форма выбора</value> + <value>Набор дополнительных реквизитов и сведений</value> </synonym> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> @@ -301,25 +315,24 @@ <key>ru</key> <value>Форма списка</value> </synonym> - <help> - <pages> - <lang>ru</lang> - </pages> - </help> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> - <forms uuid="c5b3ca21-8f7b-4933-853c-7d95b17b5631"> - <name>ФормаЭлемента</name> + <forms uuid="e2b482cb-6954-4e6a-abe9-d0a01f64b73a"> + <name>ФормаВыбора</name> <synonym> <key>ru</key> - <value>Форма элемента</value> + <value>Форма выбора</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> + <forms uuid="2a365474-edba-4e3d-a69c-c856be0e4a4a"> + <name>РедактированиеСоставаНаборов</name> + <synonym> + <key>ru</key> + <value>Редактирование состава наборов</value> </synonym> - <help> - <pages> - <lang>ru</lang> - </pages> - </help> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> diff --git a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Forms/ФормаПравила/Help/ru.html b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Forms/ФормаПравила/Help/ru.html index 54d9e653d..0b6c2e2e6 100644 --- a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Forms/ФормаПравила/Help/ru.html +++ b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/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.16447"></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.16446"></meta></head><body> <p>Правило заполнения реквизита объекта 1С:Документооборота можно задать тремя способами:</p> <ul><li>Из реквизита объекта конфигурации. Данный способ означает, что реквизит объекта 1С:Документооборота будет заполнен из некоторого реквизита объекта-потребителя. При выборе данного способа требуется указать, из какого реквизита объекта-потребителя требуется получить значение и подставить в реквизит объекта 1С:Документооборота. </li><li>Из указанного значения. Данный способ означает, что реквизит объекта 1С:Документооборота будет заполнен из значения, указанного пользователем. При выборе данного способа требуется указать то значение, которе будет использовано для заполнения реквизита 1С:Документооборота. Можно указать значение только того типа, который имеет реквизит 1С:Документооборота. diff --git a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Help/ru.html b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Help/ru.html index eae5822a2..cce48b1fc 100644 --- a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/Help/ru.html +++ b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/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.16447"></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.16446"></meta></head><body> <p>Справочник содержит настройки, которые позволяют автоматически заполнить реквизиты документа 1С:Документооборота из данных объекта, для которого создается документ. <br><br>Например для документа <strong>"Счет от поставщика"</strong> можно указать: </p> <ul><li>для данного объекта создается входящий документ, </li><li>поле <strong>Организация</strong> входящего документа заполняется из поля <strong>Организация</strong> счета, diff --git a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ManagerModule.bsl b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ManagerModule.bsl index dd02781f2..7e3e21d39 100644 --- a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ManagerModule.bsl +++ b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Функция ПолучитьРеквизитыОбъектаДокументооборота(ТипОбъектаДокументооборота, Параметры = Неопределено) Экспорт @@ -267,3 +269,5 @@ НоваяСтрока.ДопРеквизитТип = ДопРеквизитТип; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ObjectModule.bsl b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ObjectModule.bsl index bea9230eb..84988850e 100644 --- a/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ObjectModule.bsl +++ b/SSL/src/Catalogs/НастройкиЗаполненияОбъектов1СДокументооборота/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПередЗаписью(Отказ) @@ -13,3 +15,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ОбщиеДанныеИнформационногоЦентра/ОбщиеДанныеИнформационногоЦентра.mdo b/SSL/src/Catalogs/ОбщиеДанныеИнформационногоЦентра/ОбщиеДанныеИнформационногоЦентра.mdo new file mode 100644 index 000000000..586c83e4a --- /dev/null +++ b/SSL/src/Catalogs/ОбщиеДанныеИнформационногоЦентра/ОбщиеДанныеИнформационногоЦентра.mdo @@ -0,0 +1,258 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Catalog 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="375fd076-c54c-43c1-8d11-12607c0ce04e"> + <producedTypes> + <objectType typeId="4f050ab0-d646-49da-a181-e27e317c9425" valueTypeId="13a373f3-68b9-4bf7-90c4-ddc7bfaabaea"/> + <refType typeId="09d4e5f1-ad8d-43cb-b116-02b9eff8b8b4" valueTypeId="90df2cad-70f6-496b-82a4-b97710b939cf"/> + <selectionType typeId="d960f5b1-d348-4256-80dc-ab2e9ba0a6cd" valueTypeId="0c7befb9-4594-4c01-b6c4-16624e8eced9"/> + <listType typeId="cc2e6f7d-b7b9-4f01-88ae-6b3ae4fee025" valueTypeId="293ebec4-7a17-4aa4-bfdf-69a99255f67e"/> + <managerType typeId="be294236-4a0c-4f83-8c51-3be20bdabffc" valueTypeId="03560295-4665-43b6-8a85-8ec0e75939a5"/> + </producedTypes> + <name>ОбщиеДанныеИнформационногоЦентра</name> + <synonym> + <key>ru</key> + <value>Общие данные информационного центра</value> + </synonym> + <useStandardCommands>true</useStandardCommands> + <inputByString>Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Description</inputByString> + <inputByString>Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Code</inputByString> + <fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>PredefinedDataName</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Predefined</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Ref</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>DeletionMark</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>IsFolder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Owner</name> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Parent</name> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Description</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Code</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <createOnInput>Use</createOnInput> + <dataLockControlMode>Managed</dataLockControlMode> + <fullTextSearch>Use</fullTextSearch> + <levelCount>2</levelCount> + <foldersOnTop>true</foldersOnTop> + <codeLength>9</codeLength> + <descriptionLength>150</descriptionLength> + <codeType>String</codeType> + <codeAllowedLength>Variable</codeAllowedLength> + <checkUnique>true</checkUnique> + <autonumbering>true</autonumbering> + <defaultPresentation>AsDescription</defaultPresentation> + <editType>InDialog</editType> + <choiceMode>BothWays</choiceMode> + <attributes uuid="3b9ded5a-f656-4a33-90f3-d7dbff234da9"> + <name>Вложения</name> + <synonym> + <key>ru</key> + <value>Вложения</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="eae94ac3-3aa3-49f0-940f-51c89fec66e2"> + <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"/> + <fillValue xsi:type="core:StringValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="a2b43b21-56e7-4644-9345-d4918a1dfe8e"> + <name>Дата</name> + <synonym> + <key>ru</key> + <value>Дата</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers> + <dateFractions>Date</dateFractions> + </dateQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="6ef24453-482d-4a6e-a088-7a2faf8de1c8"> + <name>ДатаНачалаАктуальности</name> + <synonym> + <key>ru</key> + <value>Дата начала актуальности</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="b9f6c8a3-e9bc-4dae-b583-ca20e91eb261"> + <name>ДатаОкончанияАктуальности</name> + <synonym> + <key>ru</key> + <value>Дата окончания актуальности</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="1a0cdbe5-ad4a-42dc-a1c9-54c737436e20"> + <name>Идентификатор</name> + <synonym> + <key>ru</key> + <value>Идентификатор</value> + </synonym> + <type> + <types>UUID</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="f4cdb0ac-8993-4e8c-9d13-128710dec273"> + <name>Критичность</name> + <synonym> + <key>ru</key> + <value>Критичность</value> + </synonym> + <type> + <types>Number</types> + <numberQualifiers> + <precision>10</precision> + <nonNegative>true</nonNegative> + </numberQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="fbe620e1-a3a3-48aa-89e8-4562fdd24f1e"> + <name>ТекстHTML</name> + <synonym> + <key>ru</key> + <value>Текст HTML</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="b4f824aa-9b2f-40c9-a5f6-98d452019c38"> + <name>ТипИнформации</name> + <synonym> + <key>ru</key> + <value>Тип информации</value> + </synonym> + <type> + <types>CatalogRef.ТипыИнформацииИнформационногоЦентра</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> +</mdclass:Catalog> diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form index 99a7640d2..059a43f81 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Form.form @@ -431,6 +431,10 @@ <event>OnCreateAtServer</event> <name>ПриСозданииНаСервере</name> </handlers> + <handlers> + <event>FillCheckProcessingAtServer</event> + <name>ОбработкаПроверкиЗаполненияНаСервере</name> + </handlers> <windowOpeningMode>LockOwner</windowOpeningMode> <saveWindowSettings>true</saveWindowSettings> <autoTitle>true</autoTitle> @@ -531,6 +535,10 @@ <event>AfterWriteAtServer</event> <name>ПослеЗаписиНаСервере</name> </handlers> + <handlers> + <event>OnReadAtServer</event> + <name>ПриЧтенииНаСервере</name> + </handlers> <handlers> <event>BeforeWriteAtServer</event> <name>ПередЗаписьюНаСервере</name> diff --git a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl index 9d941649a..7bf397dd3 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/Forms/ФормаЭлемента/Module.bsl @@ -1,6 +1,5 @@ - //////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -12,41 +11,13 @@ РабочийКаталог = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(Объект.Ссылка); // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, ""); + УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма); // Конец СтандартныеПодсистемы.Свойства ОбновитьПолныйПуть(); КонецПроцедуры -&НаСервере -Процедура ОбновитьПолныйПуть() - - ПапкаРодитель = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "Родитель"); - - Если ЗначениеЗаполнено(ПапкаРодитель) Тогда - - ПолныйПуть = ""; - Пока ЗначениеЗаполнено(ПапкаРодитель) Цикл - - ПолныйПуть = Строка(ПапкаРодитель) + "\" + ПолныйПуть; - ПапкаРодитель = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПапкаРодитель, "Родитель"); - Если Не ЗначениеЗаполнено(ПапкаРодитель) Тогда - Прервать; - КонецЕсли; - - КонецЦикла; - - ПолныйПуть = ПолныйПуть + Строка(Объект.Ссылка); - - Если Не ПустаяСтрока(ПолныйПуть) Тогда - ПолныйПуть = """" + ПолныйПуть + """"; - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -58,6 +29,15 @@ КонецПроцедуры +&НаСервере +Процедура ПриЧтенииНаСервере(ТекущийОбъект) + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) @@ -67,6 +47,30 @@ КонецПроцедуры +&НаСервере +Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) + РабочийКаталог = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(Объект.Ссылка); +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура РодительПриИзменении(Элемент) + + ОбновитьПолныйПуть(); + +КонецПроцедуры + &НаКлиенте Процедура РабочийКаталогВладельцаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -130,7 +134,7 @@ РабочийКаталогРодителя = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(РодительСсылка); РабочийКаталогЭтойПапки = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(Объект.Ссылка); - РабочийКаталогУнаследованный = РабочийКаталогРодителя + Объект.Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + РабочийКаталогУнаследованный = РабочийКаталогРодителя + Объект.Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); Если ПустаяСтрока(РабочийКаталогРодителя) Тогда РабочийКаталог = ""; @@ -144,19 +148,9 @@ КонецПроцедуры -&НаСервере -Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - РабочийКаталог = РаботаСФайламиВызовСервера.ПолучитьРабочийКаталог(Объект.Ссылка); -КонецПроцедуры - - -&НаКлиенте -Процедура РодительПриИзменении(Элемент) - - ОбновитьПолныйПуть(); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте Процедура ОткрытьСписокПапокИФайлов(Команда) @@ -167,20 +161,55 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ ПОДСИСТЕМЫ СВОЙСТВ +// СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() - УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка); + УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ОбновитьПолныйПуть() + + ПапкаРодитель = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Объект.Ссылка, "Родитель"); + + Если ЗначениеЗаполнено(ПапкаРодитель) Тогда + + ПолныйПуть = ""; + Пока ЗначениеЗаполнено(ПапкаРодитель) Цикл + + ПолныйПуть = Строка(ПапкаРодитель) + "\" + ПолныйПуть; + ПапкаРодитель = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПапкаРодитель, "Родитель"); + Если Не ЗначениеЗаполнено(ПапкаРодитель) Тогда + Прервать; + КонецЕсли; + + КонецЦикла; + + ПолныйПуть = ПолныйПуть + Строка(Объект.Ссылка); + + Если Не ПустаяСтрока(ПолныйПуть) Тогда + ПолныйПуть = """" + ПолныйПуть + """"; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// СтандартныеПодсистемы.Свойства + &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() - УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект")); + УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма); КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства diff --git a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html index 5689b6536..ded0860a0 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html +++ b/SSL/src/Catalogs/ПапкиФайлов/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>Все файлы хранятся в структуре папок, которую удобно вести, например:</p> <ul><li>в соответствии с организационной структурой Вашего предприятия;  </li><li>по типам файлов (например, "Договора", "Приказы", "Служебные записки");  diff --git a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl index 62fdc013e..9565fea6c 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиФайлов/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + // Подсистема "Управление доступом" // Процедура ЗаполнитьНаборыЗначенийДоступа по свойствам объекта заполняет наборы значений доступа @@ -10,7 +12,7 @@ // Изменение - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, // Удаление - Булево (необязательно, если набор для всех прав) устанавливается для одной строки набора, // -// Вызывается из процедуры УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(), +// Вызывается из процедуры УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступа(), // если объект зарегистрирован в "ПодпискаНаСобытие.ЗаписатьНаборыЗначенийДоступа" и // из таких же процедур объектов, у которых наборы значений доступа зависят от наборов этого // объекта (в этом случае объект зарегистрирован в "ПодпискаНаСобытие.ЗаписатьЗависимыеНаборыЗначенийДоступа"). @@ -91,9 +93,9 @@ // Добавляем слэш в конце, если его нет РабочийКаталог = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталог, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); - РабочийКаталогУнаследованныйПрежний = РабочийКаталог + Ссылка.Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталогУнаследованныйПрежний = РабочийКаталог + Ссылка.Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); Если РабочийКаталогУнаследованныйПрежний = РабочийКаталогЭтойПапки Тогда - РабочийКаталог = РабочийКаталог + Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталог = РабочийКаталог + Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); РаботаСФайламиВызовСервера.СохранитьРабочийКаталог(Ссылка, РабочийКаталог); КонецЕсли; КонецЕсли; @@ -108,13 +110,13 @@ РабочийКаталогУнаследованныйПрежний = РабочийКаталог; Если РабочийКаталог <> "" Тогда - РабочийКаталогУнаследованныйПрежний = РабочийКаталогУнаследованныйПрежний + Ссылка.Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталогУнаследованныйПрежний = РабочийКаталогУнаследованныйПрежний + Ссылка.Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); КонецЕсли; Если РабочийКаталогУнаследованныйПрежний = РабочийКаталогЭтойПапки Тогда // рабочий каталог автоформируется от родителя Если РабочийКаталогНовый <> "" Тогда - РабочийКаталогНовый = РабочийКаталогНовый + Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталогНовый = РабочийКаталогНовый + Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); РаботаСФайламиВызовСервера.СохранитьРабочийКаталог(Ссылка, РабочийКаталогНовый); Иначе РаботаСФайламиВызовСервера.ОчиститьРабочийКаталог(Ссылка); @@ -138,7 +140,7 @@ // Добавляем слэш в конце, если его нет РабочийКаталогВладельца = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(РабочийКаталогВладельца, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); - РабочийКаталогВладельца = РабочийКаталогВладельца + Наименование + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + РабочийКаталогВладельца = РабочийКаталогВладельца + Наименование + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); РаботаСФайламиВызовСервера.СохранитьРабочийКаталог(Ссылка, РабочийКаталогВладельца); КонецЕсли; КонецЕсли; @@ -186,3 +188,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo index 6ab3c2ec6..83318ae28 100644 --- a/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo +++ b/SSL/src/Catalogs/ПапкиФайлов/ПапкиФайлов.mdo @@ -310,6 +310,10 @@ </toolTip> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> + <choiceParameterLinks> + <name>Отбор.Владелец</name> + <field>Catalog.ПапкиФайлов.TabularSection.ДополнительныеРеквизиты.Attribute.Свойство</field> + </choiceParameterLinks> <quickChoice>DontUse</quickChoice> <createOnInput>Use</createOnInput> <dataHistory>Use</dataHistory> diff --git a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl index 49f12dd32..fdd39f2a9 100644 --- a/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПапкиЭлектронныхПисем/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -49,3 +51,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl b/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl index 0f7dc31a5..b08e5bdef 100644 --- a/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl +++ b/SSL/src/Catalogs/Пользователи/Commands/ПользователиИБ/CommandModule.bsl @@ -6,15 +6,23 @@ Если ТипЗнч(ПараметрыВыполненияКоманды.Источник) = Тип("УправляемаяФорма") Тогда - Если ПараметрыВыполненияКоманды.Источник.ИмяФормы = "Справочник.Пользователи.Форма.ФормаСписка" Тогда + Если ПараметрыВыполненияКоманды.Источник.ИмяФормы = + "Справочник.Пользователи.Форма.ФормаСписка" Тогда + ПараметрыФормы.Вставить("Отбор", "Пользователи"); - ИначеЕсли ПараметрыВыполненияКоманды.Источник.ИмяФормы = "Справочник.ВнешниеПользователи.Форма.ФормаСписка" Тогда - ПараметрыФормы.Вставить("Отбор", "ВнешниеПользователи"); + ИначеЕсли ПараметрыВыполненияКоманды.Источник.ИмяФормы = + "Справочник.ВнешниеПользователи.Форма.ФормаСписка" Тогда + ПараметрыФормы.Вставить("Отбор", "ВнешниеПользователи"); КонецЕсли; КонецЕсли; - ОткрытьФорму("Справочник.Пользователи.Форма.ПользователиИБ", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + ОткрытьФорму( + "Справочник.Пользователи.Форма.ПользователиИБ", + ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, + ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html index fa28def9c..ea73d712d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>При записи <a href="Catalog.Пользователи/Help">пользователя</a> (или <a href="Catalog.ВнешниеПользователи/Help">внешнего пользователя</a>) с установленным флажком <strong>Доступ к информационной базе разрешен</strong>, вместе с ним автоматически создается соответствующий ему новый (или модифицируется существующий) пользователь ИБ. И наоборот, когда пользователь (или внешний пользователь) записывается со снятым флажком<strong> Доступ к информационной базе разрешен</strong>, то соответствующий ему пользователь ИБ автоматически удаляется из списка пользователей ИБ. Однако есть ряд ситуаций, когда список пользователей ИБ становится рассинхронизированным со списком пользователей. Тогда с помощью данного списка могут быть решены следующие задачи:</p> <ul><li>Найти "некорректных" пользователей ИБ и синхронизировать списки пользователей ИБ и пользователей между собой: <ul><li>если пользователь ИБ был добавлен с помощью конфигуратора (или каким-либо нештатным программным способом), предлагается удалить такого пользователя ИБ; diff --git a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl index 82a66df1f..dfc893309 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ПользователиИБ/Module.bsl @@ -5,7 +5,9 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда - ВызватьИсключение НСтр("ru = 'Недостаточно прав для открытия списка пользователей информационной базы.'"); + ВызватьИсключение + НСтр("ru = 'Недостаточно прав для открытия + |списка пользователей информационной базы.'"); КонецЕсли; Пользователи.НайтиНеоднозначныхПользователейИБ(); @@ -33,10 +35,10 @@ &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - Если ИмяСобытия = "ДобавленПользовательИБ" ИЛИ - ИмяСобытия = "ИзмененПользовательИБ" ИЛИ - ИмяСобытия = "УдаленПользовательИБ" ИЛИ - ИмяСобытия = "ОчищенаСвязьСНесуществущимПользователемИБ" Тогда + Если ИмяСобытия = "ДобавленПользовательИБ" + ИЛИ ИмяСобытия = "ИзмененПользовательИБ" + ИЛИ ИмяСобытия = "УдаленПользовательИБ" + ИЛИ ИмяСобытия = "ОчищенаСвязьСНесуществущимПользователемИБ" Тогда ЗаполнитьПользователейИБ(); КонецЕсли; @@ -50,8 +52,12 @@ Процедура ПредставлениеОтбораПриИзменении(Элемент) Если НЕ ЗначениеЗаполнено(ПредставлениеОтбора) Тогда + Отбор = "Все"; - ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора.НайтиПоЗначению(Отбор).Представление; + + ПредставлениеОтбора = Элементы.ПредставлениеОтбора.СписокВыбора.НайтиПоЗначению( + Отбор).Представление; + КонецЕсли; ЗаполнитьПользователейИБ(); @@ -63,7 +69,10 @@ СтандартнаяОбработка = Ложь; - ВыбранныйЭлемент = ВыбратьИзСписка(Элементы.ПредставлениеОтбора.СписокВыбора, Элемент, Элементы.ПредставлениеОтбора.СписокВыбора.НайтиПоЗначению(Отбор)); + ВыбранныйЭлемент = ВыбратьИзСписка( + Элементы.ПредставлениеОтбора.СписокВыбора, + Элемент, + Элементы.ПредставлениеОтбора.СписокВыбора.НайтиПоЗначению(Отбор)); Если ВыбранныйЭлемент <> Неопределено Тогда @@ -99,8 +108,8 @@ &НаКлиенте Процедура ПользователиИнфБазыПриАктивизацииСтроки(Элемент) - МожноУдалить = Элементы.ПользователиИнфБазы.ТекущиеДанные <> Неопределено И - Элементы.ПользователиИнфБазы.ТекущиеДанные.КодПроблемы = 0; + МожноУдалить = Элементы.ПользователиИнфБазы.ТекущиеДанные <> Неопределено + И Элементы.ПользователиИнфБазы.ТекущиеДанные.КодПроблемы = 0; Элементы.ПользователиИнфБазыУдалить.Доступность = МожноУдалить; Элементы.КонтекстноеМенюПользователиИнфБазыУдалить.Доступность = МожноУдалить; @@ -111,9 +120,14 @@ Процедура ПользователиИнфБазыПередУдалением(Элемент, Отказ) Если Элементы.ПользователиИнфБазы.ТекущиеДанные.КодПроблемы = 0 Тогда - Ответ = Вопрос(НСтр("ru = 'Удалить пользователя информационной базы?'"), РежимДиалогаВопрос.ДаНет); + + Ответ = Вопрос( + НСтр("ru = 'Удалить пользователя информационной базы?'"), РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Да Тогда - УдалитьПользователяИБ(Элементы.ПользователиИнфБазы.ТекущиеДанные.ИдентификаторПользователяИБ, Отказ); + + УдалитьПользователяИБ( + Элементы.ПользователиИнфБазы.ТекущиеДанные.ИдентификаторПользователяИБ, Отказ); Иначе Отказ = Истина; КонецЕсли; @@ -173,11 +187,21 @@ | Справочник.ВнешниеПользователи КАК ВнешниеПользователи"); УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); + + НачатьТранзакцию(); + Попытка + Выборка = Запрос.Выполнить().Выбрать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Пока Выборка.Следующий() Цикл - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Выборка.ИдентификаторПользователяИБ); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Выборка.ИдентификаторПользователяИБ); НоваяСтрока = ПользователиИнфБазы.Добавить(); @@ -190,7 +214,10 @@ Если ПользовательИБ = Неопределено Тогда НоваяСтрока.КодПроблемы = ?(ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ), 2, 3); - ЕстьНеправильноЗаписанные = ЕстьНеправильноЗаписанные ИЛИ ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ); + + ЕстьНеправильноЗаписанные + = ЕстьНеправильноЗаписанные + ИЛИ ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ); Иначе НоваяСтрока.Имя = ПользовательИБ.Имя; НоваяСтрока.АутентификацияСтандартная = ПользовательИБ.АутентификацияСтандартная; @@ -198,13 +225,15 @@ НоваяСтрока.ПользовательОС = ПользовательИБ.ПользовательОС; НоваяСтрока.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; - Если Выборка.Наименование <> ПользовательИБ.ПолноеИмя Тогда // рассогласование по полному имени + Если Выборка.Наименование <> ПользовательИБ.ПолноеИмя Тогда + // Рассогласование по полному имени. НоваяСтрока.КодПроблемы = 1; ЕстьНеправильноЗаписанные = Истина; КонецЕсли; КонецЕсли; - НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию(НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Выборка.ЭтоВнешнийПользователь); + НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию( + НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Выборка.ЭтоВнешнийПользователь); КонецЦикла; @@ -212,8 +241,10 @@ Для Каждого ПользовательИБ Из ПользователиИБ Цикл - Если ПользователиИнфБазы.НайтиСтроки(Новый Структура("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор)).Количество() = 0 Тогда - // этого пользователя ИБ нет в справочнике + ОтборСтрок = Новый Структура; + ОтборСтрок.Вставить("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); + Если ПользователиИнфБазы.НайтиСтроки(ОтборСтрок).Количество() = 0 Тогда + // Пользователя ИБ нет в справочнике. НоваяСтрока = ПользователиИнфБазы.Добавить(); НоваяСтрока.КодПроблемы = 0; НоваяСтрока.ПолноеИмя = ПользовательИБ.ПолноеИмя; @@ -222,7 +253,9 @@ НоваяСтрока.АутентификацияОС = ПользовательИБ.АутентификацияОС; НоваяСтрока.ПользовательОС = ПользовательИБ.ПользовательОС; НоваяСтрока.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; - НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию(НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Ложь); + НоваяСтрока.Картинка = ПолучитьНомерКартинкиПоСостоянию( + НоваяСтрока.КодПроблемы, НоваяСтрока.ПометкаУдаления, Ложь); + ЕстьНеправильноЗаписанные = Истина; КонецЕсли; @@ -235,13 +268,16 @@ УдаляемыеСтроки = Новый Массив; Если Отбор = "Пользователи" Тогда - УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("ЭтоПользователь", Ложь))); + УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки( + Новый Структура("ЭтоПользователь", Ложь))); ИначеЕсли Отбор = "ВнешниеПользователи" Тогда - УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("ЭтоВнешнийПользователь", Ложь))); + УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки( + Новый Структура("ЭтоВнешнийПользователь", Ложь))); ИначеЕсли Отбор = "НеправильноЗаписанные" Тогда УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("КодПроблемы", 3))); + УдаляемыеСтроки.Добавить(ПользователиИнфБазы.НайтиСтроки(Новый Структура("КодПроблемы", 4))); ИначеЕсли Отбор = "БезПользователяИБ" Тогда @@ -263,7 +299,9 @@ КонецПроцедуры &НаСервере -Функция ПолучитьНомерКартинкиПоСостоянию(Знач КодПроблемы, Знач ПометкаУдаления, Знач ЭтоВнешнийПользователь) +Функция ПолучитьНомерКартинкиПоСостоянию(Знач КодПроблемы, + Знач ПометкаУдаления, + Знач ЭтоВнешнийПользователь) НомерКартинки = -1; @@ -311,11 +349,12 @@ КонецЕсли; Если ТекущиеДанные.КодПроблемы = 0 Тогда - Предупреждение(НСтр("ru = 'Данному пользователю информационной базы не сопоставлен элемент справочника. - | - |Для создания пользователя информационной базы, - |связанного с пользователем или внешним пользователем применяйте флажок - |""Доступ к информационной базе разрешен"" в соответствующей форме элемента.'")); + Предупреждение( + НСтр("ru = 'Данному пользователю информационной базы не сопоставлен элемент справочника. + | + |Для создания пользователя информационной базы, + |связанного с пользователем или внешним пользователем применяйте флажок + |""Доступ к информационной базе разрешен"" в соответствующей форме элемента.'")); Отказ = Ложь; ПользователиИнфБазыПередУдалением(Элементы.ПользователиИнфБазы, Отказ); @@ -323,10 +362,11 @@ ПользователиИнфБазы.Удалить(ТекущиеДанные); КонецЕсли; Иначе - ОткрытьФорму(?(ТекущиеДанные.ЭтоВнешнийПользователь, - "Справочник.ВнешниеПользователи.ФормаОбъекта", - "Справочник.Пользователи.ФормаОбъекта"), - Новый Структура("Ключ", ТекущиеДанные.Ссылка)); + ОткрытьФорму( + ?( ТекущиеДанные.ЭтоВнешнийПользователь, + "Справочник.ВнешниеПользователи.ФормаОбъекта", + "Справочник.Пользователи.ФормаОбъекта"), + Новый Структура("Ключ", ТекущиеДанные.Ссылка)); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html index 62862885e..e1095f818 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p class="Usual">Диалог "Выбор пользователя операционной системы" позволяет выбрать одного из пользователей, зарегистрированных в операционной системе.</p> <p class="Usual">В списке "<strong class="ControlElement">Домены</strong>" отображаются имена доменов, видимых с данного компьютера.</p> <p class="Usual">В списке "<strong class="ControlElement">Пользователи</strong>" отображаются имена пользователей, зарегистрированных в выбранном домене.</p> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl index 0bd156ad0..85bab017d 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаВыбораПользователяОС/Module.bsl @@ -4,11 +4,11 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - #Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда +#Если ТолстыйКлиентОбычноеПриложение ИЛИ ТолстыйКлиентУправляемоеПриложение Тогда ТаблицаДоменовИПользователей = ПользователиОС(); - #ИначеЕсли ТонкийКлиент Тогда +#ИначеЕсли ТонкийКлиент Тогда ТаблицаДоменовИПользователей = Новый ФиксированныйМассив (ПользователиОС()); - #КонецЕсли +#КонецЕсли ЗаполнитьСписокДоменов(); @@ -27,15 +27,19 @@ Если Элемент.ТекущиеДанные <> Неопределено Тогда ИмяДомена = Элемент.ТекущиеДанные.ИмяДомена; + Для Каждого Запись Из ТаблицаДоменовИПользователей Цикл Если Запись.ИмяДомена = ИмяДомена Тогда + Для Каждого Пользователь Из Запись.Пользователи Цикл ПользовательДомена = СписокПользователейТекущегоДомена.Добавить(); ПользовательДомена.ИмяПользователя = Пользователь; КонецЦикла; Прервать; + КонецЕсли; КонецЦикла; + СписокПользователейТекущегоДомена.Сортировать("ИмяПользователя"); КонецЕсли; @@ -95,6 +99,7 @@ ИмяДомена = Элементы.ТаблицаДоменов.ТекущиеДанные.ИмяДомена; ИмяПользователя = Элементы.ТаблицаПользователейДомена.ТекущиеДанные.ИмяПользователя; + СтрокаПользователяWindows = "\\" + ИмяДомена + "\" + ИмяПользователя; Закрыть(СтрокаПользователяWindows); diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss index eb1c1dd72..62a95e605 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Attributes/ПользователиСписок/ExtInfo/ListSettings.dcss @@ -1,6 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> <Settings xmlns="http://v8.1c.ru/8.1/data-composition-system/settings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:pal="http://v8.1c.ru/8.1/data/ui/colors/palette" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:dcscor="http://v8.1c.ru/8.1/data-composition-system/core"> <filter> + <item xsi:type="FilterItemComparison"> + <left xsi:type="dcscor:Field">Служебный</left> + <comparisonType>Equal</comparisonType> + <right xsi:type="xs:boolean">false</right> + </item> + <item xsi:type="FilterItemComparison"> + <left xsi:type="dcscor:Field">Недействителен</left> + <comparisonType>Equal</comparisonType> + <right xsi:type="xs:boolean">false</right> + </item> <item xsi:type="FilterItemComparison"> <use>false</use> <left xsi:type="dcscor:Field">ПометкаУдаления</left> @@ -23,7 +33,7 @@ <selection/> <filter> <item xsi:type="FilterItemComparison"> - <left xsi:type="dcscor:Field">Ссылка.Недействителен</left> + <left xsi:type="dcscor:Field">Недействителен</left> <comparisonType>Equal</comparisonType> <right xsi:type="xs:boolean">true</right> </item> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form index 45d54954c..05bc2b31f 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Form.form @@ -166,6 +166,7 @@ <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <autoMaxRowsCount>true</autoMaxRowsCount> + <selectionMode>MultiRow</selectionMode> <rowSelectionMode>Row</rowSelectionMode> <headerHeight>1</headerHeight> <footerHeight>1</footerHeight> @@ -876,7 +877,7 @@ <queryText>ВЫБРАТЬ Пользователи.Ссылка, Пользователи.ПометкаУдаления, - Пользователи.Предопределенный, + Пользователи.Недействителен, Пользователи.Наименование, ВЫБОР КОГДА Пользователи.ПометкаУдаления @@ -884,12 +885,12 @@ КОГДА Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор ТОГДА 4 ИНАЧЕ 1 - КОНЕЦ КАК НомерКартинки + КОНЕЦ КАК НомерКартинки, + Пользователи.Служебный ИЗ Справочник.Пользователи КАК Пользователи ГДЕ - Пользователи.Ссылка <> &НеуказанныйПользователь - И (&ВыбиратьИерархически + (&ВыбиратьИерархически И ИСТИНА В (ВЫБРАТЬ ИСТИНА @@ -906,15 +907,7 @@ Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав ГДЕ ГруппыПользователейСостав.Пользователь = Пользователи.Ссылка - И ГруппыПользователейСостав.Ссылка = &ГруппаПользователей)) - И (&РазделениеВыключено - ИЛИ (НЕ ИСТИНА В - (ВЫБРАТЬ - ИСТИНА - ИЗ - РегистрСведений.НеразделенныеПользователи КАК НеразделенныеПользователи - ГДЕ - НеразделенныеПользователи.ИдентификаторПользователяИБ = Пользователи.ИдентификаторПользователяИБ)))</queryText> + И ГруппыПользователейСостав.Ссылка = &ГруппаПользователей))</queryText> <mainTable>Catalog.Пользователи</mainTable> <dynamicDataRead>true</dynamicDataRead> <autoFillAvailableFields>true</autoFillAvailableFields> @@ -939,7 +932,6 @@ <edit> <common>true</common> </edit> - <functionalOptions>FunctionalOption.ИспользоватьГруппыПользователей</functionalOptions> <notDefaultUseAlwaysAttributes xsi:type="form:DataPath"> <segments>ГруппыПользователей.Parent</segments> </notDefaultUseAlwaysAttributes> @@ -986,49 +978,13 @@ </settingsSavedData> </attributes> <attributes> - <name>ГруппаПользователейВсеПользователи</name> + <name>ХранимыеПараметры</name> <title> <key>ru</key> - <value>Группа пользователей все пользователи</value> + <value>Хранимые параметры</value> - 4 - - CatalogRef.ГруппыПользователей - - - true - - - true - - - - ИспользоватьГруппы - - <key>ru</key> - <value>Использовать группы</value> - - 5 - - Boolean - - - true - - - true - - - - ПоказыватьНедействительныхПользователей - - <key>ru</key> - <value>Показывать недействительных пользователей</value> - - 6 - - Boolean - + 7 + true @@ -1094,6 +1050,12 @@ ЗакрыватьПриВыборе + + ДоступКИнформационнойБазеРазрешен + + Boolean + + diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl index 7e1a32f20..9fa3887d9 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаСписка/Module.bsl @@ -4,54 +4,35 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "НеуказанныйПользователь", Пользователи.СвойстваНеуказанногоПользователя().СтандартнаяСсылка); + // Начальное значение настройки до загрузки данных из настроек. + ВыбиратьИерархически = Истина; - ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "РазделениеВыключено", НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено()); - - ПоказыватьНедействительныхПользователей = Ложь; + ЗаполнитьХранимыеПараметры(); + ЗаполнитьПараметрыДинамическихСписков(); Если Параметры.РежимВыбора Тогда - РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; - - Иначе - - // только если не режим выбора, делаем фильтрацию - - Если ПоказыватьНедействительныхПользователей Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ПользователиСписок.Отбор, "Недействителен"); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - ПользователиСписок.Отбор, - "Недействителен", - Ложь); - КонецЕсли; - КонецЕсли; - ИспользоватьГруппы = ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"); + ОбновитьОтборНедействительныхПользователей(ЭтаФорма); - Если ТипЗнч(Параметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") Тогда - Если ИспользоватьГруппы Тогда - Элементы.ГруппыПользователей.ТекущаяСтрока = Параметры.ТекущаяСтрока; + // Скрытие пользователей с пустым идентификатором, если значение параметра Истина. + Если Параметры.ДоступКИнформационнойБазеРазрешен Тогда + + Если Параметры.ДоступКИнформационнойБазеРазрешен = Ложь Тогда + ВидСравненияКД = ВидСравненияКомпоновкиДанных.Равно; Иначе - Параметры.ТекущаяСтрока = Неопределено; + ВидСравненияКД = ВидСравненияКомпоновкиДанных.НеРавно; КонецЕсли; - Иначе - ТекущийЭлемент = Элементы.ПользователиСписок; - Элементы.ГруппыПользователей.ТекущаяСтрока = Справочники.ГруппыПользователей.ВсеПользователи; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + ПользователиСписок.Отбор, + "ИдентификаторПользователяИБ", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"), + ВидСравненияКД); + КонецЕсли; - Если НЕ ИспользоватьГруппы Тогда - Параметры.ВыборГруппПользователей = Ложь; - Элементы.ГруппаПоказыватьПользователейДочернихГрупп.Видимость = Ложь; - Элементы.СоздатьГруппуПользователей.Видимость = Ложь; - КонецЕсли; - - // Настройка постоянных данных для списка пользователей - ОбновитьЗначениеПараметраКомпоновкиДанных(ПользователиСписок, "ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - ГруппаПользователейВсеПользователи = Справочники.ГруппыПользователей.ВсеПользователи; - Если НЕ ПравоДоступа("Добавление", Метаданные.Справочники.ГруппыПользователей) Тогда Элементы.СоздатьГруппуПользователей.Видимость = Ложь; КонецЕсли; @@ -65,43 +46,28 @@ Элементы.ПользователиИБ.Видимость = Ложь; КонецЕсли; - // Отбор не помеченных на удаление + // Отбор не помеченных на удаление. ПользователиСписок.Отбор.Элементы[0].Использование = Истина; - Элементы.ПользователиСписок.РежимВыбора = Истина; - Элементы.ГруппыПользователей.РежимВыбора = Параметры.ВыборГруппПользователей; - Элементы.ВыбратьГруппуПользователей.Видимость = Параметры.ВыборГруппПользователей; - Элементы.ВыбратьПользователя.КнопкаПоУмолчанию = НЕ Параметры.ВыборГруппПользователей; + Элементы.ПользователиСписок.РежимВыбора = Истина; + Элементы.ГруппыПользователей.РежимВыбора = ХранимыеПараметры.ВыборГруппПользователей; Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда - // Режим подбора + // Режим подбора. Элементы.ПользователиСписок.МножественныйВыбор = Истина; - Если Параметры.ВыборГруппПользователей Тогда - Заголовок = НСтр("ru = 'Подбор пользователей и групп'"); - Элементы.ВыбратьПользователя.Заголовок = НСтр("ru = 'Выбрать пользователей'"); - Элементы.ВыбратьГруппуПользователей.Заголовок = НСтр("ru = 'Выбрать группы'"); - + Если ХранимыеПараметры.ВыборГруппПользователей Тогда Элементы.ГруппыПользователей.МножественныйВыбор = Истина; - Элементы.ГруппыПользователей.РежимВыделения = РежимВыделенияТаблицы.Множественный; - Иначе - Заголовок = НСтр("ru = 'Подбор пользователей'"); - КонецЕсли; - Иначе - // Режим выбора - Если Параметры.ВыборГруппПользователей Тогда - Заголовок = НСтр("ru = 'Выбор пользователя или группы'"); - Элементы.ВыбратьПользователя.Заголовок = НСтр("ru = 'Выбрать пользователя'"); - Иначе - Заголовок = НСтр("ru = 'Выбор пользователя'"); КонецЕсли; КонецЕсли; Иначе - Элементы.ВыбратьПользователя.Видимость = Ложь; + Элементы.ВыбратьПользователя.Видимость = Ложь; Элементы.ВыбратьГруппуПользователей.Видимость = Ложь; КонецЕсли; - ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); + ХранимыеПараметры.Вставить("ТекущаяСтрока", Параметры.ТекущаяСтрока); + НастроитьФормуПоИспользованиюГруппПользователей(); + ХранимыеПараметры.Удалить("ТекущаяСтрока"); КонецПроцедуры @@ -112,6 +78,10 @@ И Источник = Элементы.ГруппыПользователей.ТекущаяСтрока Тогда Элементы.ПользователиСписок.Обновить(); + + ИначеЕсли ВРег(ИмяСобытия) = ВРег("Запись_ИспользоватьГруппыПользователей") Тогда + + ПодключитьОбработчикОжидания("ПриИзмененииИспользованияГруппПользователей", 0.1, Истина); КонецЕсли; КонецПроцедуры @@ -119,8 +89,12 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Если Настройки[ВыбиратьИерархически] = Неопределено Тогда - ВыбиратьИерархически = Истина; + Если ТипЗнч(Настройки["ВыбиратьИерархически"]) = Тип("Булево") Тогда + ВыбиратьИерархически = Настройки["ВыбиратьИерархически"]; + КонецЕсли; + + Если НЕ ВыбиратьИерархически Тогда + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); КонецЕсли; КонецПроцедуры @@ -162,11 +136,15 @@ ПараметрыФормы = Новый Структура; Если ЗначениеЗаполнено(Элементы.ГруппыПользователей.ТекущаяСтрока) Тогда - - ПараметрыФормы.Вставить("ЗначенияЗаполнения", Новый Структура("Родитель", Элементы.ГруппыПользователей.ТекущаяСтрока)); + ПараметрыФормы.Вставить( + "ЗначенияЗаполнения", + Новый Структура("Родитель", Элементы.ГруппыПользователей.ТекущаяСтрока)); КонецЕсли; - ОткрытьФорму("Справочник.ГруппыПользователей.ФормаОбъекта", ПараметрыФормы, Элементы.ГруппыПользователей); + ОткрытьФорму( + "Справочник.ГруппыПользователей.ФормаОбъекта", + ПараметрыФормы, + Элементы.ГруппыПользователей); КонецЕсли; КонецПроцедуры @@ -191,7 +169,9 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ГруппаНовогоПользователя", Элементы.ГруппыПользователей.ТекущаяСтрока); - Если Копирование И Элемент.ТекущиеДанные <> Неопределено Тогда + Если Копирование + И Элемент.ТекущиеДанные <> Неопределено Тогда + ПараметрыФормы.Вставить("ЗначениеКопирования", Элемент.ТекущаяСтрока); КонецЕсли; @@ -212,24 +192,143 @@ &НаКлиенте Процедура ПоказыватьНедействительныхПользователей(Команда) - ПоказыватьНедействительныхПользователей = Не ПоказыватьНедействительныхПользователей; + ОбновитьОтборНедействительныхПользователей(ЭтаФорма, Истина); - Элементы.ПоказыватьНедействительныхПользователей.Пометка = ПоказыватьНедействительныхПользователей; - - Если ПоказыватьНедействительныхПользователей Тогда - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(ПользователиСписок.Отбор, "Недействителен"); - Иначе - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - ПользователиСписок.Отбор, - "Недействителен", - Ложь); - КонецЕсли; - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Процедура ЗаполнитьХранимыеПараметры() + + ХранимыеПараметры = Новый Структура; + ХранимыеПараметры.Вставить("ВыборГруппПользователей", Параметры.ВыборГруппПользователей); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПараметрыДинамическихСписков() + + ОбновитьЗначениеПараметраКомпоновкиДанных( + ПользователиСписок, + "ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьОтборНедействительныхПользователей(Форма, ИзменитьОтбор = Ложь) + + Элементы = Форма.Элементы; + + Если ИзменитьОтбор Тогда + + Элементы.ПоказыватьНедействительныхПользователей.Пометка = + НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка; + + ИначеЕсли Форма.Параметры.Отбор.Свойство("Недействителен") Тогда + + Элементы.ПоказыватьНедействительныхПользователей.Пометка = + Форма.Параметры.Отбор.Недействителен; + + КонецЕсли; + + Если Элементы.ПоказыватьНедействительныхПользователей.Пометка Тогда + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Форма.ПользователиСписок.Отбор, "Недействителен", Ложь, , , Ложь); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Форма.ПользователиСписок.Отбор, "Недействителен", Ложь, , , Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриИзмененииИспользованияГруппПользователей() + + НастроитьФормуПоИспользованиюГруппПользователей(); + +КонецПроцедуры + +&НаСервере +Процедура НастроитьФормуПоИспользованиюГруппПользователей() + + ХранимыеПараметры.Вставить( + "ИспользоватьГруппы", ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей")); + + Если ХранимыеПараметры.Свойство("ТекущаяСтрока") Тогда + + Если ТипЗнч(ХранимыеПараметры.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") Тогда + + Если ХранимыеПараметры.ИспользоватьГруппы Тогда + Элементы.ГруппыПользователей.ТекущаяСтрока = ХранимыеПараметры.ТекущаяСтрока; + Иначе + Параметры.ТекущаяСтрока = Неопределено; + КонецЕсли; + Иначе + ТекущийЭлемент = Элементы.ПользователиСписок; + Элементы.ГруппыПользователей.ТекущаяСтрока = Справочники.ГруппыПользователей.ВсеПользователи; + КонецЕсли; + Иначе + Если НЕ ХранимыеПараметры.ИспользоватьГруппы + И Элементы.ГруппыПользователей.ТекущаяСтрока + <> Справочники.ГруппыПользователей.ВсеПользователи Тогда + + Элементы.ГруппыПользователей.ТекущаяСтрока = Справочники.ГруппыПользователей.ВсеПользователи; + КонецЕсли; + КонецЕсли; + + Элементы.ГруппаПоказыватьПользователейДочернихГрупп.Видимость = ХранимыеПараметры.ИспользоватьГруппы; + Элементы.СоздатьГруппуПользователей.Видимость = ХранимыеПараметры.ИспользоватьГруппы; + + ВыборГруппПользователей = ХранимыеПараметры.ВыборГруппПользователей + И ХранимыеПараметры.ИспользоватьГруппы + И Параметры.РежимВыбора; + + Если Параметры.РежимВыбора Тогда + + Элементы.ВыбратьГруппуПользователей.Видимость = ВыборГруппПользователей; + Элементы.ВыбратьПользователя.КнопкаПоУмолчанию = НЕ ВыборГруппПользователей; + АвтоЗаголовок = Ложь; + + Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда + // Режим подбора. + + Если ВыборГруппПользователей Тогда + + Заголовок = + НСтр("ru = 'Подбор пользователей и групп'"); + + Элементы.ВыбратьПользователя.Заголовок = + НСтр("ru = 'Выбрать пользователей'"); + + Элементы.ВыбратьГруппуПользователей.Заголовок = + НСтр("ru = 'Выбрать группы'"); + Иначе + Заголовок = НСтр("ru = 'Подбор пользователей'"); + КонецЕсли; + Иначе + // Режим выбора. + Если ВыборГруппПользователей Тогда + + Заголовок = + НСтр("ru = 'Выбор пользователя или группы'"); + + Элементы.ВыбратьПользователя.Заголовок = + НСтр("ru = 'Выбрать пользователя'"); + Иначе + Заголовок = + НСтр("ru = 'Выбор пользователя'"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма); + +КонецПроцедуры + &НаКлиенте Процедура ГруппыПользователейПослеАктивизацииСтроки() @@ -238,31 +337,52 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(ЭтаФорма) +Процедура ОбновитьСодержимоеФормыПриИзмененииГруппы(Форма) - Элементы = ЭтаФорма.Элементы; - Если НЕ ЭтаФорма.ИспользоватьГруппы - ИЛИ Элементы.ГруппыПользователей.ТекущаяСтрока = ЭтаФорма.ГруппаПользователейВсеПользователи Тогда - Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаНельзяУстановитьСвойство; - ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ВыбиратьИерархически", Истина); - ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ГруппаПользователей", ЭтаФорма.ГруппаПользователейВсеПользователи); + Элементы = Форма.Элементы; + + Если НЕ Форма.ХранимыеПараметры.ИспользоватьГруппы + ИЛИ Элементы.ГруппыПользователей.ТекущаяСтрока = ПредопределенноеЗначение( + "Справочник.ГруппыПользователей.ВсеПользователи") Тогда + + Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = + Элементы.ГруппаНельзяУстановитьСвойство; + + ОбновитьЗначениеПараметраКомпоновкиДанных( + Форма.ПользователиСписок, "ВыбиратьИерархически", Истина); + + ОбновитьЗначениеПараметраКомпоновкиДанных( + Форма.ПользователиСписок, "ГруппаПользователей", ПредопределенноеЗначение( + "Справочник.ГруппыПользователей.ВсеПользователи")); Иначе - Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаУстановитьСвойство; - ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ВыбиратьИерархически", ЭтаФорма.ВыбиратьИерархически); - ОбновитьЗначениеПараметраКомпоновкиДанных(ЭтаФорма.ПользователиСписок, "ГруппаПользователей", Элементы.ГруппыПользователей.ТекущаяСтрока); + Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = + Элементы.ГруппаУстановитьСвойство; + + ОбновитьЗначениеПараметраКомпоновкиДанных( + Форма.ПользователиСписок, "ВыбиратьИерархически", Форма.ВыбиратьИерархически); + + ОбновитьЗначениеПараметраКомпоновкиДанных( + Форма.ПользователиСписок, + "ГруппаПользователей", + Элементы.ГруппыПользователей.ТекущаяСтрока); КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьЗначениеПараметраКомпоновкиДанных(Знач ВладелецПараметров, Знач ИмяПараметра, Знач ЗначениеПараметра) +Процедура ОбновитьЗначениеПараметраКомпоновкиДанных(Знач ВладелецПараметров, + Знач ИмяПараметра, + Знач ЗначениеПараметра) Для каждого Параметр Из ВладелецПараметров.Параметры.Элементы Цикл Если Строка(Параметр.Параметр) = ИмяПараметра Тогда - Если Параметр.Использование И Параметр.Значение = ЗначениеПараметра Тогда + + Если Параметр.Использование + И Параметр.Значение = ЗначениеПараметра Тогда Возврат; КонецЕсли; Прервать; + КонецЕсли; КонецЦикла; diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form index 39e032cad..258aca999 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Form.form @@ -1371,7 +1371,7 @@ Left - Form.Command.ТолькоВыбранныеРоли + Form.Command.ПоказатьТолькоВыбранныеРоли Normal Auto true @@ -1397,7 +1397,7 @@ Left - Form.Command.ГруппировкаПоПодсистемам + Form.Command.ГруппировкаРолейПоПодсистемам Normal Auto true @@ -1893,23 +1893,6 @@ true - - ПоказатьТолькоВыбранныеРоли - - <key>ru</key> - <value>Показать только выбранные роли</value> - - 26 - - Boolean - - - true - - - true - - ГруппаНовогоПользователя @@ -1942,23 +1925,6 @@ <common>true</common> </edit> </attributes> - <attributes> - <name>СтарыйИдентификаторПользователяИБ</name> - <title> - <key>ru</key> - <value>Старый идентификатор пользователя ИБ</value> - - 9 - - UUID - - - true - - - true - - ТекущееНаименование @@ -2215,14 +2181,14 @@ <savedData>true</savedData> </attributes> <attributes> - <name>СоздатьПользователяСервиса</name> + <name>ЗначениеКопирования</name> <title> <key>ru</key> - <value>Создать пользователя сервиса</value> + <value>Значение копирования</value> - 25 + 9 - Boolean + CatalogRef.Пользователи true @@ -2237,7 +2203,7 @@ ru Аутентификация по протоколу OpenID - 27 + 25 Boolean @@ -2250,7 +2216,7 @@ true - ТолькоВыбранныеРоли + ПоказатьТолькоВыбранныеРоли <key>ru</key> <value>Только выбранные роли</value> @@ -2355,7 +2321,7 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>ГруппировкаПоПодсистемам</name> + <name>ГруппировкаРолейПоПодсистемам</name> <title> <key>ru</key> <value>По подсистемам</value> @@ -2373,7 +2339,7 @@ </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>ГруппировкаПоПодсистемам</name> + <name>ГруппировкаРолейПоПодсистемам</name> </handler> </action> <representation>TextPicture</representation> @@ -2418,9 +2384,5 @@ <event>BeforeWriteAtServer</event> <name>ПередЗаписьюНаСервере</name> </handlers> - <handlers> - <event>OnWriteAtServer</event> - <name>ПриЗаписиНаСервере</name> - </handlers> </extInfo> </form:Form> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html index d6ae360a7..be308266b 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>Для редактирования сведений о пользователе необходимы права администрирования. В остальных случаях, доступен только просмотр сведений о себе, а также возможность изменить свой пароль, язык программы и контактную информацию.</p> <p><strong>Полное имя </strong>пользователя выводится во всех списках и отчетах. Флажок <strong>Недействителен</strong> по умолчанию снят для всех пользователей. Но если пользователь по каким-либо причинам более не работает с программой, и в то же время его нельзя удалить из-за наличия ссылок на него из других объектов программы, то рекомендуется установить флажок <strong>Недействителен</strong>. Такого пользователя нельзя выбрать, например, как исполнителя задачи или ответственного за документ, и он не отображается в списке пользователей.</p> <p>Для того чтобы пользователь мог работать в программе, ему нужно установить флажок <strong>Доступ к информационной базе разрешен</strong> и задать необходимые свойства: имя, пароль и другие параметры авторизации. Имя для входа в программу может отличаться от полного имени (например, "Иванов", а полное имя - "Иванов Иван Иванович").</p> diff --git a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl index d64bab3a2..4c66058a2 100644 --- a/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/Пользователи/Forms/ФормаЭлемента/Module.bsl @@ -8,47 +8,41 @@ Если НЕ СтандартныеПодсистемыПереопределяемый.ДоступноИзменениеПользователей() Тогда Если Объект.Ссылка.Пустая() Тогда - ВызватьИсключение(НСтр("ru = 'В демонстрационном режиме не поддерживается создание новых пользователей'")); + ВызватьИсключение + НСтр("ru = 'В демонстрационном режиме не поддерживается + |создание новых пользователей.'"); КонецЕсли; - ТолькоПросмотр = Истина; КонецЕсли; Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Видимость = Ложь; - Элементы.ПользовательИнфБазыАутентификацияСтандартная.Видимость = Ложь; Элементы.ПользовательИнфБазыАутентификацияOpenID.Видимость = Ложь; + Элементы.ПользовательИнфБазыАутентификацияСтандартная.Видимость = Ложь; Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Видимость = Ложь; Элементы.СвойстваАутентификацииОС.Видимость = Ложь; Элементы.ПользовательИнфБазыРежимЗапуска.Видимость = Ложь; - Если Метаданные.Языки.Количество() = 1 Тогда - Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь; - КонецЕсли; КонецЕсли; - Если Объект.Ссылка = Пользователи.СвойстваНеуказанногоПользователя().СтандартнаяСсылка Тогда + Если Объект.Служебный Тогда ТолькоПросмотр = Истина; КонецЕсли; - //** Установка начальных значений - // перед загрузкой данных из настроек на сервере - // для случая, когда данные ещё не были записаны и не загружаются - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - // Для нового элемента показать все роли, иначе только выбранные - ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка); - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли; - // - ОбновитьДеревоРолей(); + // Заполнение вспомогательных данных. - //** Заполнение постоянных данных АвторизованПолноправныйПользователь = Пользователи.ЭтоПолноправныйПользователь(); - // Заполнение списка выбора языка - Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл - Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить(МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним); - КонецЦикла; + // Заполнение списка выбора языка. + Если Метаданные.Языки.Количество() < 2 Тогда + Элементы.ПользовательИнфБазыЯзык.Видимость = Ложь; + Иначе + Для каждого МетаданныеЯзыка ИЗ Метаданные.Языки Цикл + + Элементы.ПользовательИнфБазыЯзык.СписокВыбора.Добавить( + МетаданныеЯзыка.Имя, МетаданныеЯзыка.Синоним); + КонецЦикла; + КонецЕсли; - // Заполнение списка выбора режимов запуска + // Заполнение списка выбора режимов запуска. Для каждого РежимЗапуска Из РежимЗапускаКлиентскогоПриложения Цикл ПолноеИмяЗначения = ПолучитьПолноеИмяПредопределенногоЗначения(РежимЗапуска); ИмяЗначения = Сред(ПолноеИмяЗначения, Найти(ПолноеИмяЗначения, ".") + 1); @@ -56,57 +50,67 @@ КонецЦикла; Элементы.ПользовательИнфБазыРежимЗапуска.СписокВыбора.СортироватьПоПредставлению(); - //** Подготовка к интерактивным действиям с учетом сценариев открытия формы + // Подготовка к интерактивным действиям с учетом сценариев открытия формы. УстановитьПривилегированныйРежим(Истина); Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда - // Создание нового элемента + // Создание нового элемента. Если Параметры.ГруппаНовогоПользователя <> Справочники.ГруппыПользователей.ВсеПользователи Тогда ГруппаНовогоПользователя = Параметры.ГруппаНовогоПользователя; КонецЕсли; + Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - // Копирование элемента + // Копирование элемента. + ЗначениеКопирования = Параметры.ЗначениеКопирования; Объект.Наименование = ""; - ПрочитатьПользователяИБ(ЗначениеЗаполнено(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ)); + ПрочитатьПользователяИБ( + ЗначениеЗаполнено(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ)); Иначе - // Добавление элемента + // Добавление элемента. Объект.ИдентификаторПользователяИБ = Параметры.ИдентификаторПользователяИБ; - // Чтение начальных значений свойств пользователя ИБ + + // Чтение начальных значений свойств пользователя ИБ. ПрочитатьПользователяИБ(); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь; - ПользовательИнфБазыАутентификацияСтандартная = Истина; + ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь; ПользовательИнфБазыАутентификацияOpenID = Истина; + ПользовательИнфБазыАутентификацияСтандартная = Истина; ДоступКИнформационнойБазеРазрешен = Истина; КонецЕсли; КонецЕсли; Иначе - // Открытие существующего элемента + // Открытие существующего элемента. ПрочитатьПользователяИБ(); КонецЕсли; УстановитьПривилегированныйРежим(Ложь); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", ПользовательИБСуществует); + ОпределитьДействияВФорме(); ОпределитьНесоответствияПользователяСПользователемИБ(); - ТолькоПросмотр = ТолькоПросмотр ИЛИ - ДействияВФорме.Роли <> "Редактирование" И - ДействияВФорме.КонтактнаяИнформация <> "Редактирование" И - НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" ИЛИ - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" ) И - ДействияВФорме.СвойстваЭлемента <> "Редактирование"; + ТолькоПросмотр + = ТолькоПросмотр + ИЛИ ДействияВФорме.Роли <> "Редактирование" + И ДействияВФорме.КонтактнаяИнформация <> "Редактирование" + И НЕ ( ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" + ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" ) + И ДействияВФорме.СвойстваЭлемента <> "Редактирование"; - УстановитьТолькоПросмотрРолей(ПользователиПереопределяемый.ЗапретРедактированияРолей() ИЛИ ДействияВФорме.Роли <> "Редактирование"); + ОбработатьИнтерфейсРолей( + "УстановитьТолькоПросмотрРолей", + ПользователиПереопределяемый.ЗапретРедактированияРолей() + ИЛИ ДействияВФорме.Роли <> "Редактирование"); // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтаФорма, Объект, "КонтактнаяИнформация"); // Конец СтандартныеПодсистемы.КонтактнаяИнформация - Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда Элементы.Недействителен.ТолькоПросмотр = Истина; КонецЕсли; @@ -129,21 +133,27 @@ ОчиститьСообщения(); - ЗаголовокВопросов = НСтр("ru = 'Запись пользователя информационной базы'"); - Если ДоступКИнформационнойБазеРазрешен Тогда - Если ДействияВФорме.Роли = "Редактирование" И ПользовательИнфБазыРоли.Количество() = 0 Тогда - Ответ = Вопрос(НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"), - РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопросов); + ЗаголовокВопросов = НСтр("ru = 'Запись пользователя информационной базы'"); + + Если ДействияВФорме.Роли = "Редактирование" + И ПользовательИнфБазыРоли.Количество() = 0 Тогда + + Ответ = Вопрос( + НСтр("ru = 'Пользователю информационной базы не установлено ни одной роли. Продолжить?'"), + РежимДиалогаВопрос.ДаНет, + , + , + ЗаголовокВопросов); + Если Ответ = КодВозвратаДиалога.Нет Тогда Отказ = Истина; КонецЕсли; КонецЕсли; - // Обработка записи первого администратора + // Обработка записи первого администратора. ТекстВопроса = ""; - Если Пользователи.ТребуетсяСоздатьПервогоАдминистратора(ПолучитьСтруктуруОписанияПользователяИБ(), - ТекстВопроса) Тогда + Если ТребуетсяСоздатьПервогоАдминистратора(ТекстВопроса) Тогда Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , , ЗаголовокВопросов); Если Ответ = КодВозвратаДиалога.Нет Тогда @@ -157,43 +167,33 @@ &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - Если СоздатьПользователяСервиса Тогда - // предыдущая попытка создания закончилась неудачно - - СоздатьПользователяСервиса = Ложь; - Объект.ИдентификаторПользователяСервиса = Неопределено; - ТекущийОбъект.ИдентификаторПользователяСервиса = Неопределено; - КонецЕсли; + ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеКопирования", ЗначениеКопирования); - Если ДоступКИнформационнойБазеРазрешен - И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если НЕ ЗначениеЗаполнено(ТекущийОбъект.ИдентификаторПользователяСервиса) Тогда - - СоздатьПользователяСервиса = Истина; - - ИдентификаторПользователяСервиса = Новый УникальныйИдентификатор; - - Объект.ИдентификаторПользователяСервиса = ИдентификаторПользователяСервиса; - ТекущийОбъект.ИдентификаторПользователяСервиса = ИдентификаторПользователяСервиса; - - КонецЕсли; - КонецЕсли; + // Восстановление действий в форме, если они изменены на клиенте + ОпределитьДействияВФорме(); Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" - ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда + ИЛИ ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих" Тогда + + ОписаниеПользователяИБ = ОписаниеПользователяИБ(); + ОписаниеПользователяИБ.Удалить("ПодтверждениеПароля"); - ТекущийОбъект.ДополнительныеСвойства.Вставить("ДоступКИнформационнойБазеРазрешен", ДоступКИнформационнойБазеРазрешен); - Если ДоступКИнформационнойБазеРазрешен Тогда - - ТекущийОбъект.ДополнительныеСвойства.Вставить("СтруктураОписанияПользователяИБ", ПолучитьСтруктуруОписанияПользователяИБ()); - + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + Иначе + ОписаниеПользователяИБ.Вставить("Действие", "Удалить"); КонецЕсли; + + ТекущийОбъект.ДополнительныеСвойства.Вставить( + "ОписаниеПользователяИБ", ОписаниеПользователяИБ); КонецЕсли; Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда - ЗаполнитьЗначенияСвойств(ТекущийОбъект, ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ТекущийОбъект.Ссылка, "Наименование, ПометкаУдаления")); + + ЗаполнитьЗначенияСвойств( + ТекущийОбъект, + ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + ТекущийОбъект.Ссылка, "Наименование, ПометкаУдаления")); КонецЕсли; ТекущийОбъект.ДополнительныеСвойства.Вставить("ГруппаНовогоПользователя", ГруппаНовогоПользователя); @@ -206,40 +206,16 @@ КонецПроцедуры -&НаСервере -Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) - - ОписаниеПользователя = Новый Структура; - ОписаниеПользователя.Вставить("Имя", ПользовательИнфБазыИмя); - ОписаниеПользователя.Вставить("ПолноеИмя", ПользовательИнфБазыПолноеИмя); - ОписаниеПользователя.Вставить("Язык", ПользовательИнфБазыЯзык); - - СтандартныеПодсистемыПереопределяемый.ПриЗаписиПользователя(ТекущийОбъект, ОписаниеПользователя, - ПользовательИБСуществует, ДоступКИнформационнойБазеРазрешен, СоздатьПользователяСервиса); - -КонецПроцедуры - &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - СобытияЗаписиПользователяИБ = Новый Массив; - СобытияЗаписиПользователяИБ.Добавить("ДобавленПользовательИБ"); - СобытияЗаписиПользователяИБ.Добавить("ИзмененПользовательИБ"); - СобытияЗаписиПользователяИБ.Добавить("УдаленПользовательИБ"); - Для каждого СобытиеЗаписи Из СобытияЗаписиПользователяИБ Цикл - Если ТекущийОбъект.ДополнительныеСвойства.Свойство(СобытиеЗаписи) Тогда - ПараметрыЗаписи.Вставить(СобытиеЗаписи, ТекущийОбъект.ДополнительныеСвойства[СобытиеЗаписи]); - КонецЕсли; - КонецЦикла; + ПараметрыЗаписи.Вставить( + ТекущийОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ.РезультатДействия); ПрочитатьПользователяИБ(); ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи); - Если СоздатьПользователяСервиса Тогда - СоздатьПользователяСервиса = Ложь; - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -257,10 +233,14 @@ Оповестить("УдаленПользовательИБ", ПараметрыЗаписи.УдаленПользовательИБ, ЭтаФорма); ИначеЕсли ПараметрыЗаписи.Свойство("ОчищенаСвязьСНесуществущимПользователемИБ") Тогда - Оповестить("ОчищенаСвязьСНесуществущимПользователемИБ", ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ, ЭтаФорма); + Оповестить( + "ОчищенаСвязьСНесуществущимПользователемИБ", + ПараметрыЗаписи.ОчищенаСвязьСНесуществущимПользователемИБ, + ЭтаФорма); КонецЕсли; Если ЗначениеЗаполнено(ГруппаНовогоПользователя) Тогда + ОповеститьОбИзменении(ГруппаНовогоПользователя); Оповестить("Запись_ГруппыПользователей", Новый Структура, ГруппаНовогоПользователя); ГруппаНовогоПользователя = Неопределено; @@ -273,7 +253,8 @@ Если ДоступКИнформационнойБазеРазрешен Тогда - Пользователи.ПроверитьЗаполнениеСтруктурыОписанияПользователяИБ(ПолучитьСтруктуруОписанияПользователяИБ(), Отказ); + ПользователиСлужебный.ПроверитьОписаниеПользователяИБ( + ОписаниеПользователяИБ(), Отказ); КонецЕсли; @@ -282,15 +263,7 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда - ПоказатьПодсистемыРолей = Ложь; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь; - Иначе - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - КонецЕсли; - - ОбновитьДеревоРолей(); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки); КонецПроцедуры @@ -312,13 +285,18 @@ // Прим.: неопределенное ПолноеИмя или другое свойство // не учитывается при записи пользователя ИБ // ПолноеИмя определено только для вида - // интерактивных действий "БезОграничения" + // интерактивных действий "БезОграничения". + Если ПользовательИнфБазыПолноеИмя <> Неопределено Тогда ПользовательИнфБазыПолноеИмя = Объект.Наименование; КонецЕсли; - Если НЕ ПользовательИБСуществует И ДоступКИнформационнойБазеРазрешен Тогда - ПользовательИнфБазыИмя = ПолучитьКраткоеИмяПользователяИБ(Объект.Наименование); + Если НЕ ПользовательИБСуществует + И ДоступКИнформационнойБазеРазрешен Тогда + + ПользовательИнфБазыИмя = + ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( + Объект.Наименование); КонецЕсли; КонецПроцедуры @@ -326,8 +304,13 @@ &НаКлиенте Процедура ДоступКИнформационнойБазеРазрешенПриИзменении(Элемент) - Если НЕ ПользовательИБСуществует И ДоступКИнформационнойБазеРазрешен Тогда - ПользовательИнфБазыИмя = ПолучитьКраткоеИмяПользователяИБ(Объект.Наименование); + Если НЕ ПользовательИБСуществует + И ДоступКИнформационнойБазеРазрешен Тогда + + ПользовательИнфБазыИмя = + ПользователиСлужебныйКлиентСервер.ПолучитьКраткоеИмяПользователяИБ( + Объект.Наименование); + ПользовательИнфБазыПолноеИмя = Объект.Наименование; КонецЕсли; @@ -408,7 +391,7 @@ Процедура РолиПометкаПриИзменении(Элемент) Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей"); КонецЕсли; КонецПроцедуры @@ -422,39 +405,32 @@ &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) - ПоказатьТолькоВыбранныеРоли = НЕ ПоказатьТолькоВыбранныеРоли; - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); + ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура ГруппировкаПоПодсистемам(Команда) +Процедура ГруппировкаРолейПоПодсистемам(Команда) - ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); + ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ВключитьРоли(Команда) - ОбновитьСоставРолей(Неопределено, Истина); - Если ПоказатьТолькоВыбранныеРоли Тогда - РазвернутьПодсистемыРолей(); - КонецЕсли; + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе"); + + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма, Ложь); КонецПроцедуры &НаКлиенте Процедура ИсключитьРоли(Команда) - ОбновитьСоставРолей(Неопределено, Ложь); + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВсе"); КонецПроцедуры @@ -465,13 +441,21 @@ Процедура ОпределитьДействияВФорме() ДействияВФорме = Новый Структура; - ДействияВФорме.Вставить("Роли", ""); // "", "Просмотр", "Редактирование" - ДействияВФорме.Вставить("КонтактнаяИнформация", ""); // "", "Просмотр", "Редактирование" - ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих" - ДействияВФорме.Вставить("СвойстваЭлемента", ""); // "", "Просмотр", "Редактирование" + + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("Роли", ""); + + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("КонтактнаяИнформация", ""); + + // "", "ПросмотрВсех", "РедактированиеВсех", "РедактированиеСвоих". + ДействияВФорме.Вставить("СвойстваПользователяИБ", ""); + + // "", "Просмотр", "Редактирование". + ДействияВФорме.Вставить("СвойстваЭлемента", ""); Если Пользователи.ЭтоПолноправныйПользователь() Тогда - // Администратор + // Администратор. ДействияВФорме.Роли = "Редактирование"; ДействияВФорме.КонтактнаяИнформация = "Редактирование"; ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; @@ -479,24 +463,23 @@ ИначеЕсли РольДоступна("ДобавлениеИзменениеПользователей") И НЕ Пользователи.ЭтоПолноправныйПользователь(Объект.Ссылка) Тогда - // Ответственный за список пользователей и групп пользователей + + // Ответственный за список пользователей и групп пользователей. // (Исполнитель распоряжений о приеме на работу и переводу, - // переназначению, созданию отделов, подразделений и рабочих групп) + // переназначению, созданию отделов, подразделений и рабочих групп). ДействияВФорме.Роли = ""; ДействияВФорме.КонтактнаяИнформация = "Редактирование"; ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех"; ДействияВФорме.СвойстваЭлемента = "Редактирование"; - ИначеЕсли ЗначениеЗаполнено(Пользователи.ТекущийПользователь()) И - Объект.Ссылка = Пользователи.ТекущийПользователь() Тогда - // Свои свойства + ИначеЕсли Объект.Ссылка = ПользователиКлиентСервер.АвторизованныйПользователь() Тогда + // Свои свойства. ДействияВФорме.Роли = ""; ДействияВФорме.КонтактнаяИнформация = "Редактирование"; ДействияВФорме.СвойстваПользователяИБ = "РедактированиеСвоих"; ДействияВФорме.СвойстваЭлемента = "Просмотр"; - Иначе - // Чужие свойства + // Чужие свойства. ДействияВФорме.Роли = ""; ДействияВФорме.КонтактнаяИнформация = "Просмотр"; ДействияВФорме.СвойстваПользователяИБ = ""; @@ -505,203 +488,218 @@ ПользователиПереопределяемый.ИзменитьДействияВФорме(Объект.Ссылка, ДействияВФорме); - // Проверка имен действий в форме + // Проверка имен действий в форме. Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда ДействияВФорме.Роли = ""; + ИначеЕсли ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда ДействияВФорме.Роли = "Просмотр"; КонецЕсли; + Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.КонтактнаяИнформация + ",") = 0 Тогда ДействияВФорме.КонтактнаяИнформация = ""; КонецЕсли; - Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,", ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда + + Если Найти(", ПросмотрВсех, РедактированиеВсех, РедактированиеСвоих,", + ", " + ДействияВФорме.СвойстваПользователяИБ + ",") = 0 Тогда + ДействияВФорме.СвойстваПользователяИБ = ""; КонецЕсли; + Если Найти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда ДействияВФорме.СвойстваЭлемента = ""; КонецЕсли; + Если Объект.Служебный Тогда + Если ДействияВФорме.Роли = "Редактирование" Тогда + ДействияВФорме.Роли = "Просмотр"; + КонецЕсли; + + Если ДействияВФорме.КонтактнаяИнформация = "Редактирование" Тогда + ДействияВФорме.КонтактнаяИнформация = "Просмотр"; + КонецЕсли; + + Если Найти(", РедактированиеВсех, РедактированиеСвоих,", + ", " + ДействияВФорме.СвойстваПользователяИБ + ",") <> 0 Тогда + + ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; + КонецЕсли; + + Если ДействияВФорме.СвойстваЭлемента = "Редактирование" Тогда + ДействияВФорме.СвойстваЭлемента = "Просмотр"; + КонецЕсли; + КонецЕсли; + КонецПроцедуры &НаСервере -Функция ПолучитьСтруктуруОписанияПользователяИБ() - - // Восстановление действий в форме, если они изменены на клиенте - ОпределитьДействияВФорме(); - - Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" - И ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеСвоих" Тогда - - // Ничего изменять нельзя - Возврат Новый Структура; - КонецЕсли; +Функция ОписаниеПользователяИБ() Если Элементы.ПолноеИмяПояснениеНесоответствия.Видимость Тогда ПользовательИнфБазыПолноеИмя = Объект.Наименование; КонецЕсли; Если ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех" Тогда + Результат = Пользователи.НовоеОписаниеПользователяИБ(); - ЗаполнитьЗначенияСвойств(Результат, ЭтаФорма); + Пользователи.СкопироватьСвойстваПользователяИБ( + Результат, + ЭтаФорма, + , + "УникальныйИдентификатор, + |Роли", + "ПользовательИнфБазы"); + Иначе + // РедактированиеСвоих. Результат = Новый Структура; - Результат.Вставить("ПользовательИнфБазыИмя", ПользовательИнфБазыИмя); - Результат.Вставить("ПользовательИнфБазыПароль", ПользовательИнфБазыПароль); - Результат.Вставить("ПользовательИнфБазыЯзык", ПользовательИнфБазыЯзык); + Результат.Вставить("Пароль", ПользовательИнфБазыПароль); + Результат.Вставить("Язык", ПользовательИнфБазыЯзык); КонецЕсли; Результат.Вставить("ПодтверждениеПароля", ПодтверждениеПароля); Если ДействияВФорме.Роли = "Редактирование" Тогда ТекущиеРоли = ПользовательИнфБазыРоли.Выгрузить(, "Роль").ВыгрузитьКолонку("Роль"); - Результат.Вставить("ПользовательИнфБазыРоли", ТекущиеРоли); + Результат.Вставить("Роли", ТекущиеРоли); + КонецЕсли; + + Если ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора(Результат) Тогда + Роли = Новый Массив; + Роли.Добавить("ПолныеПрава"); + + ИмяРолиАдминистратораСистемы = Пользователи.РольАдминистратораСистемы().Имя; + Если Роли.Найти(ИмяРолиАдминистратораСистемы) = Неопределено Тогда + Роли.Добавить(ИмяРолиАдминистратораСистемы); + КонецЕсли; + Результат.Вставить("Роли", Роли); КонецЕсли; Возврат Результат; КонецФункции +&НаСервере +Функция ТребуетсяСоздатьПервогоАдминистратора(ТекстВопроса = Неопределено) + + Возврат ПользователиСлужебный.ТребуетсяСоздатьПервогоАдминистратора( + ОписаниеПользователяИБ(), + ТекстВопроса); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// -// Чтение, запись, удаление, расчет краткого имени пользователя ИБ, проверка несоответствия +// Обработка пользователя ИБ. &НаСервере Процедура ПрочитатьПользователяИБ(ПриКопированииЭлемента = Ложь) УстановитьПривилегированныйРежим(Истина); - ПрочитанныеРоли = Новый Массив; - Пароль = ""; ПодтверждениеПароля = ""; - ПрочитанныеСвойства = Пользователи.НовоеОписаниеПользователяИБ(); - СтарыйИдентификаторПользователяИБ = Неопределено; + ПрочитанныеСвойства = Неопределено; + ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); ПользовательИБСуществует = Ложь; ДоступКИнформационнойБазеРазрешен = Ложь; - // Заполнение начальных значений свойств пользователяИБ у пользователя. + // Заполнение начальных значений свойств пользователяИБ. Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ПрочитанныеСвойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь; + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; Иначе - ПрочитанныеСвойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = НЕ Константы.ИспользоватьВнешнихПользователей.Получить(); + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = + НЕ Константы.ИспользоватьВнешнихПользователей.Получить(); КонецЕсли; - - ЗаполнитьЗначенияСвойств(ЭтаФорма, ПрочитанныеСвойства); - ПользовательИнфБазыАутентификацияСтандартная = Истина; + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; + ОписаниеПользователяИБ.Роли = Новый Массив; Если ПриКопированииЭлемента Тогда - Если Пользователи.ПрочитатьПользователяИБ(Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ, ПрочитанныеСвойства, ПрочитанныеРоли) Тогда - // Т.к. у скопированного пользователя есть связь с пользователемИБ, - // то устанавливается будущая связь и у нового пользователя. + Если Пользователи.ПрочитатьПользователяИБ( + Параметры.ЗначениеКопирования.ИдентификаторПользователяИБ, + ПрочитанныеСвойства) Тогда + + // Установка связи пользователем ИБ. ДоступКИнформационнойБазеРазрешен = Истина; - // Т.к. пользовательИБ скопированного пользователя прочитан, - // то копируются свойства и роли пользователяИБ. - ЗаполнитьЗначенияСвойств(ЭтаФорма, - ПрочитанныеСвойства, - "ПользовательИнфБазыАутентификацияСтандартная, - |ПользовательИнфБазыЗапрещеноИзменятьПароль, - |ПользовательИнфБазыПоказыватьВСпискеВыбора, - |ПользовательИнфБазыАутентификацияOpenID, - |ПользовательИнфБазыАутентификацияОС, - |ПользовательИнфБазыРежимЗапуска, - |ПользовательИнфБазыЯзык"); + + // Копирование свойств и ролей пользователяИБ. + ЗаполнитьЗначенияСвойств( + ОписаниеПользователяИБ, + ПрочитанныеСвойства, + "АутентификацияOpenID, + |АутентификацияСтандартная, + |ЗапрещеноИзменятьПароль, + |ПоказыватьВСпискеВыбора, + |АутентификацияОС, + |РежимЗапуска, + |Язык, + |Роли"); КонецЕсли; Объект.ИдентификаторПользователяИБ = Неопределено; Иначе - Если Пользователи.ПрочитатьПользователяИБ(Объект.ИдентификаторПользователяИБ, ПрочитанныеСвойства, ПрочитанныеРоли) Тогда + Если Пользователи.ПрочитатьПользователяИБ( + Объект.ИдентификаторПользователяИБ, + ПрочитанныеСвойства) Тогда ПользовательИБСуществует = Истина; ДоступКИнформационнойБазеРазрешен = Истина; - СтарыйИдентификаторПользователяИБ = Объект.ИдентификаторПользователяИБ; - ЗаполнитьЗначенияСвойств(ЭтаФорма, - ПрочитанныеСвойства, - "ПользовательИнфБазыИмя, - |ПользовательИнфБазыПолноеИмя, - |ПользовательИнфБазыАутентификацияСтандартная, - |ПользовательИнфБазыПоказыватьВСпискеВыбора, - |ПользовательИнфБазыЗапрещеноИзменятьПароль, - |ПользовательИнфБазыАутентификацияOpenID, - |ПользовательИнфБазыАутентификацияОС, - |ПользовательИнфБазыПользовательОС, - |ПользовательИнфБазыРежимЗапуска, - |ПользовательИнфБазыЯзык"); + ЗаполнитьЗначенияСвойств( + ОписаниеПользователяИБ, + ПрочитанныеСвойства, + "Имя, + |ПолноеИмя, + |АутентификацияOpenID, + |АутентификацияСтандартная, + |ПоказыватьВСпискеВыбора, + |ЗапрещеноИзменятьПароль, + |АутентификацияОС, + |ПользовательОС, + |РежимЗапуска, + |Язык, + |Роли"); - Если ПрочитанныеСвойства.ПользовательИнфБазыПарольУстановлен Тогда + Если ПрочитанныеСвойства.ПарольУстановлен Тогда Пароль = "**********"; ПодтверждениеПароля = "**********"; КонецЕсли; КонецЕсли; КонецЕсли; - ЗаполнитьРоли(ПрочитанныеРоли); + Пользователи.СкопироватьСвойстваПользователяИБ( + ЭтаФорма, + ОписаниеПользователяИБ, + , + "УникальныйИдентификатор, + |Роли", + "ПользовательИнфБазы"); + + ОбработатьИнтерфейсРолей("ЗаполнитьРоли", ОписаниеПользователяИБ.Роли); КонецПроцедуры -&НаКлиенте -Функция ПолучитьКраткоеИмяПользователяИБ(Знач ПолноеИмя) - - Разделители = Новый Массив; - Разделители.Добавить(" "); - Разделители.Добавить("."); - - КраткоеИмя = ""; - Для Счетчик = 1 По 3 Цикл - - Если Счетчик <> 1 Тогда - КраткоеИмя = КраткоеИмя + ВРег(Лев(ПолноеИмя, 1)); - КонецЕсли; - - ПозицияРазделителя = 0; - Для каждого Разделитель Из Разделители Цикл - ПозицияТекущегоРазделителя = Найти(ПолноеИмя, Разделитель); - Если ПозицияТекущегоРазделителя > 0 - И ( ПозицияРазделителя = 0 - ИЛИ ПозицияРазделителя > ПозицияТекущегоРазделителя ) Тогда - ПозицияРазделителя = ПозицияТекущегоРазделителя; - КонецЕсли; - КонецЦикла; - - Если ПозицияРазделителя = 0 Тогда - Если Счетчик = 1 Тогда - КраткоеИмя = ПолноеИмя; - КонецЕсли; - Прервать; - КонецЕсли; - - Если Счетчик = 1 Тогда - КраткоеИмя = Лев(ПолноеИмя, ПозицияРазделителя - 1); - КонецЕсли; - - ПолноеИмя = Прав(ПолноеИмя, СтрДлина(ПолноеИмя) - ПозицияРазделителя); - Пока Разделители.Найти(Лев(ПолноеИмя, 1)) <> Неопределено Цикл - ПолноеИмя = Сред(ПолноеИмя, 2); - КонецЦикла; - КонецЦикла; - - Возврат КраткоеИмя; - -КонецФункции - &НаСервере Процедура ОпределитьНесоответствияПользователяСПользователемИБ(ПараметрыЗаписи = Неопределено) - //** Проверка соответствия свойства "ПолноеИмя" пользователяИБ и свойства "Наименование" пользователя + // Проверка соответствия свойства "ПолноеИмя" пользователяИБ и + // свойства "Наименование" пользователя. - Если НЕ (ДействияВФорме.СвойстваЭлемента = "Редактирование" И - ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех") Тогда - // Прочитанное ПолноеИмя пользователя не может быть изменено, если не совпадает + Если НЕ ( ДействияВФорме.СвойстваЭлемента = "Редактирование" + И ДействияВФорме.СвойстваПользователяИБ = "РедактированиеВсех") Тогда + + // Прочитанное ПолноеИмя пользователя не может быть изменено, если не совпадает. ПользовательИнфБазыПолноеИмя = Неопределено; КонецЕсли; - Если НЕ ПользовательИБСуществует ИЛИ - ПользовательИнфБазыПолноеИмя = Неопределено ИЛИ - ПользовательИнфБазыПолноеИмя = Объект.Наименование Тогда + Если НЕ ПользовательИБСуществует + ИЛИ ПользовательИнфБазыПолноеИмя = Неопределено + ИЛИ ПользовательИнфБазыПолноеИмя = Объект.Наименование Тогда Элементы.ПолноеИмяОбработкаНесоответствия.Видимость = Ложь; ИначеЕсли ЗначениеЗаполнено(Объект.Ссылка) Тогда - Элементы.ПолноеИмяПояснениеНесоответствия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Элементы.ПолноеИмяПояснениеНесоответствия.Заголовок = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Элементы.ПолноеИмяПояснениеНесоответствия.Заголовок, ПользовательИнфБазыПолноеИмя); Иначе @@ -709,8 +707,11 @@ Элементы.ПолноеИмяОбработкаНесоответствия.Видимость = Ложь; КонецЕсли; - //** Определение связи с несуществующим пользователем ИБ - ЕстьНоваяСвязьСНесуществующимПользователемИБ = НЕ ПользовательИБСуществует И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ); + // Определение связи с несуществующим пользователем ИБ. + ЕстьНоваяСвязьСНесуществующимПользователемИБ + = НЕ ПользовательИБСуществует + И ЗначениеЗаполнено(Объект.ИдентификаторПользователяИБ); + Если ПараметрыЗаписи <> Неопределено И ЕстьСвязьСНесуществующимПользователемИБ И НЕ ЕстьНоваяСвязьСНесуществующимПользователемИБ Тогда @@ -720,7 +721,7 @@ ЕстьСвязьСНесуществующимПользователемИБ = ЕстьНоваяСвязьСНесуществующимПользователемИБ; Если ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех" Тогда - // Связь не может быть изменена + // Связь не может быть изменена. Элементы.СвязьОбработкаНесоответствия.Видимость = Ложь; Иначе Элементы.СвязьОбработкаНесоответствия.Видимость = ЕстьСвязьСНесуществующимПользователемИБ; @@ -731,19 +732,6 @@ //////////////////////////////////////////////////////////////////////////////// // Начальное заполнение, проверка заполнения, доступность свойств -&НаСервере -Процедура ЗаполнитьРоли(ПрочитанныеРоли) - - ПользовательИнфБазыРоли.Очистить(); - - Для каждого Роль Из ПрочитанныеРоли Цикл - ПользовательИнфБазыРоли.Добавить().Роль = Роль; - КонецЦикла; - - ОбновитьДеревоРолей(); - -КонецПроцедуры - &НаСервере Процедура УстановитьПостояннуюДоступностьСвойств() @@ -755,19 +743,40 @@ Элементы.СвойстваАутентификации1СПредприятия.Отображение = ?(ВыводитьСписокРолей, ОтображениеОбычнойГруппы.Нет, ОтображениеОбычнойГруппы.Отступ); - Элементы.Наименование.ТолькоПросмотр = ДействияВФорме.СвойстваЭлемента <> "Редактирование"; - Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.СвойстваПользователяИБ.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; - Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.ПользовательИнфБазыАутентификацияСтандартная.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.ПользовательИнфБазыАутентификацияOpenID.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.ПользовательИнфБазыАутентификацияОС.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.ПользовательИнфБазыПользовательОС.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; - Элементы.ПользовательИнфБазыРежимЗапуска.ТолькоПросмотр = ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + Элементы.Наименование.ТолькоПросмотр = + ДействияВФорме.СвойстваЭлемента <> "Редактирование"; - Если НЕ ПользователиСерверПовтИсп.АутентификацияOpenIDНастраивается() Тогда + Элементы.ДоступКИнформационнойБазеРазрешен.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.СвойстваПользователяИБ.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ = "ПросмотрВсех"; + + Элементы.ПользовательИнфБазыИмя.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.ПользовательИнфБазыАутентификацияСтандартная.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.ПользовательИнфБазыАутентификацияOpenID.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.ПользовательИнфБазыАутентификацияОС.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.ПользовательИнфБазыПользовательОС.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Элементы.ПользовательИнфБазыРежимЗапуска.ТолькоПросмотр = + ДействияВФорме.СвойстваПользователяИБ <> "РедактированиеВсех"; + + Если НЕ ПользователиСлужебныйПовтИсп.АутентификацияOpenIDНастраивается() Тогда Элементы.СвойстваАутентификацииОС.Отображение = ОтображениеОбычнойГруппы.Отступ; Элементы.ПользовательИнфБазыАутентификацияOpenID.Видимость = Ложь; КонецЕсли; @@ -779,21 +788,38 @@ Элементы = Форма.Элементы; - Элементы.Пароль.ТолькоПросмотр = Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь; - Элементы.ПодтверждениеПароля.ТолькоПросмотр = Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь; + Элементы.Пароль.ТолькоПросмотр = + Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь; - Элементы.ОсновныеСвойства.Доступность = Форма.ДоступКИнформационнойБазеРазрешен; - Элементы.ОтображениеРолей.Доступность = Форма.ДоступКИнформационнойБазеРазрешен; - Элементы.ПользовательИнфБазыИмя.АвтоОтметкаНезаполненного = Форма.ДоступКИнформационнойБазеРазрешен; + Элементы.ПодтверждениеПароля.ТолькоПросмотр = + Форма.ПользовательИнфБазыЗапрещеноИзменятьПароль И НЕ Форма.АвторизованПолноправныйПользователь; - Элементы.Пароль.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПодтверждениеПароля.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; - Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Доступность = Форма.ПользовательИнфБазыАутентификацияСтандартная; + Элементы.ОсновныеСвойства.Доступность = + Форма.ДоступКИнформационнойБазеРазрешен; - Элементы.ПользовательИнфБазыПользовательОС.Доступность = Форма.ПользовательИнфБазыАутентификацияОС; + Элементы.ОтображениеРолей.Доступность = + Форма.ДоступКИнформационнойБазеРазрешен; - Элементы.ДоступКИнформационнойБазеРазрешен.Доступность = Не Форма.Объект.Недействителен; + Элементы.ПользовательИнфБазыИмя.АвтоОтметкаНезаполненного = + Форма.ДоступКИнформационнойБазеРазрешен; + + Элементы.Пароль.Доступность = + Форма.ПользовательИнфБазыАутентификацияСтандартная; + + Элементы.ПодтверждениеПароля.Доступность = + Форма.ПользовательИнфБазыАутентификацияСтандартная; + + Элементы.ПользовательИнфБазыЗапрещеноИзменятьПароль.Доступность = + Форма.ПользовательИнфБазыАутентификацияСтандартная; + + Элементы.ПользовательИнфБазыПоказыватьВСпискеВыбора.Доступность = + Форма.ПользовательИнфБазыАутентификацияСтандартная; + + Элементы.ПользовательИнфБазыПользовательОС.Доступность = + Форма.ПользовательИнфБазыАутентификацияОС; + + Элементы.ДоступКИнформационнойБазеРазрешен.Доступность = + НЕ Форма.Объект.Недействителен; КонецПроцедуры @@ -808,243 +834,21 @@ // Для работы интерфейса ролей &НаСервере -Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) +Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) - Если ТаблицаЗначенийДляЧтения Тогда - Возврат РеквизитФормыВЗначение("ПользовательИнфБазыРоли"); - КонецЕсли; - - Возврат ПользовательИнфБазыРоли; - -КонецФункции - -&НаСервере -Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено) - - Если ТолькоПросмотрРолей <> Неопределено Тогда - Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей; - Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура РазвернутьПодсистемыРолей(); - - // Развернуть все - Для каждого Строка Из Роли.ПолучитьЭлементы() Цикл - Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор(), Истина); - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьДеревоРолей() - - // Запоминание текущей строки - ТекущаяПодсистема = ""; - ТекущаяРоль = ""; - // - Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда - ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока); - Если ТекущиеДанные.ЭтоРоль Тогда - ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя); - ТекущаяРоль = ТекущиеДанные.Имя; - Иначе - ТекущаяПодсистема = ТекущиеДанные.Имя; - ТекущаяРоль = ""; - КонецЕсли; - КонецЕсли; + ПараметрыДействия = Новый Структура; + ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); + ПараметрыДействия.Вставить("Форма", ЭтаФорма); + ПараметрыДействия.Вставить("КоллекцияРолей", ПользовательИнфБазыРоли); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ТипПользователя = Перечисления.ТипыПользователей.ПользовательОбластиДанных; + ПараметрыДействия.Вставить("ТипПользователя", + Перечисления.ТипыПользователей.ПользовательОбластиДанных); Иначе - ТипПользователя = Перечисления.ТипыПользователей.ПользовательЛокальногоРешения; + ПараметрыДействия.Вставить("ТипПользователя", + Перечисления.ТипыПользователей.ПользовательЛокальногоРешения); КонецЕсли; - ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей, ТипПользователя).Скопировать(); - ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); - ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); - ПодготовитьДеревоРолей(ДеревоРолей.Строки, ПоказатьТолькоВыбранныеРоли); - - ЗначениеВРеквизитФормы(ДеревоРолей, "Роли"); - - Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево); - - // Восстановление текущей строки - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеПодсистемы = НайденныеСтроки[0]; - ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы); - СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы); - Если ЗначениеЗаполнено(ТекущаяРоль) Тогда - НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль)); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор(); - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли); - СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли); - Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач ПоказатьТолькоВыбранныеРоли) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - ПодготовитьДеревоРолей(Строка.Строки, ПоказатьТолькоВыбранныеРоли); - - Если Строка.ЭтоРоль Тогда - Строка.НомерКартинки = 6; - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - Иначе - Если Строка.Строки.Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 5; - Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений) - - Если СтрокаДереваЗначений.Родитель = Неопределено Тогда - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы(); - Иначе - ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель); - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы(); - КонецЕсли; - - Возврат ДанныеФормыКоллекцияЭлементовДерева; - -КонецФункции - - -&НаСервере -Процедура ОбновитьСоставРолей(ИдентификаторСтроки, Добавить); - - Если ИдентификаторСтроки = Неопределено Тогда - // Обработка всех - КоллекцияРолей = КоллекцияРолей(); - КоллекцияРолей.Очистить(); - Если Добавить Тогда - ВсеРоли = ПользователиСерверПовтИсп.ВсеРоли(); - Для каждого ОписаниеРоли Из ВсеРоли Цикл - Если ОписаниеРоли.Имя <> "ПолныеПрава" И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда - КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ПоказатьТолькоВыбранныеРоли Тогда - Если КоллекцияРолей.Количество() > 0 Тогда - ОбновитьДеревоРолей(); - Иначе - Роли.ПолучитьЭлементы().Очистить(); - КонецЕсли; - // Возврат - Возврат; - // Возврат - КонецЕсли; - Иначе - ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ТекущиеДанные.ЭтоРоль Тогда - ДобавитьУдалитьРоль(ТекущиеДанные.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(ТекущиеДанные.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЕсли; - - ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы()); - - Модифицированность = Истина; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьУдалитьРоль(Знач Роль, Знач Добавить) - - НайденныеРоли = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Роль)); - - Если Добавить Тогда - Если НайденныеРоли.Количество() = 0 Тогда - КоллекцияРолей().Добавить().Роль = Роль; - КонецЕсли; - Иначе - Если НайденныеРоли.Количество() > 0 Тогда - КоллекцияРолей().Удалить(НайденныеРоли[0]); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьУдалитьРолиПодсистемы(Знач Коллекция, Знач Добавить) - - Для каждого Строка Из Коллекция Цикл - Если Строка.ЭтоРоль Тогда - ДобавитьУдалитьРоль(Строка.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(Строка.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьПометкуВыбранныхРолей(Знач Коллекция) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - Если Строка.ЭтоРоль Тогда - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - Иначе - ОбновитьПометкуВыбранныхРолей(Строка.ПолучитьЭлементы()); - Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.Пометка = Истина; - Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл - Если НЕ Элемент.Пометка Тогда - Строка.Пометка = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; + ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); КонецПроцедуры diff --git a/SSL/src/Catalogs/Пользователи/Help/ru.html b/SSL/src/Catalogs/Пользователи/Help/ru.html index 2b0ff8dae..9ce7b5e8d 100644 --- a/SSL/src/Catalogs/Пользователи/Help/ru.html +++ b/SSL/src/Catalogs/Пользователи/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>В этом списке ведется учет пользователей, которые работают с программой. </p> <p>В случае большого количества пользователей список может быть сгруппирован. Например, группы пользователей можно использовать для ведения структуры подразделений компании. Для того чтобы увидеть всех пользователей, включенных в дочерние группы с учетом иерархии, необходимо установить флажок <strong>Показывать пользователей дочерних групп</strong> в нижней части списка. Для добавления новых групп пользователей воспользуйтесь командами в левой части списка. Для добавления в группу большого числа пользователей можно открыть форму группы и воспользоваться командой <strong>Подобрать</strong>. Один и тот же пользователь может одновременно входить в разные группы пользователей.</p> <p>Для ведения списка пользователей требуются права администрирования. Остальным пользователям доступен только просмотр сведений о себе, а также изменение ряда свойств, таких как: пароль, язык программы и контактная информация.</p> diff --git a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl index d778e55d8..ae3682157 100644 --- a/SSL/src/Catalogs/Пользователи/ManagerModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -7,6 +9,10 @@ Параметры.Отбор.Вставить("Недействителен", Ложь); КонецЕсли; + Если НЕ Параметры.Отбор.Свойство("Служебный") Тогда + Параметры.Отбор.Вставить("Служебный", Ложь); + КонецЕсли; + КонецПроцедуры Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) @@ -34,3 +40,5 @@ ДополнительнаяИнформация, СтандартнаяОбработка); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl index acdb41c57..4aa407531 100644 --- a/SSL/src/Catalogs/Пользователи/ObjectModule.bsl +++ b/SSL/src/Catalogs/Пользователи/ObjectModule.bsl @@ -1,20 +1,40 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда -Перем ЗаписьПервогоАдминистратора; // Флажок факта записи первого администратора, -// который может быть установлен при обработке -// пользователя ИБ. -// Используется в обработчике события ПриЗаписи. + +Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. + // Используются в обработчике события ПриЗаписи. //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС // Программный интерфейс объекта реализован через ДополнительныеСвойства: // -// ДоступКИнформационнойБазеРазрешен - есть пользователь ИБ, связанный -// с данным элементом. +// ОписаниеПользователяИБ - Структура со свойствами: +// Действие - Строка - "Записать" или "Удалить". // -// СтруктураОписанияПользователяИБ - свойства пользователя ИБ, используются только -// если ДоступКИнформационнойБазеРазрешен = Истина. -// Состав свойств см. Пользователи.НовоеОписаниеПользователяИБ. +// 1. Если Действие = "Удалить" другие свойства не требуются. Удаление +// будет считаться успешным и в том случае, когда пользовательИБ +// не найден по значению реквизита ИдентификаторПользователяИБ. +// +// 2. Если Действие = "Записать", тогда будет создан или обновлен +// пользователь ИБ по указанным свойствам. +// +// Состав свойств указывается аналогично составу свойств параметра +// ОбновляемыеСвойства для процедуры Пользователи.ЗаписатьПользователяИБ(), +// кроме свойства ПолноеИмя - устанавливается по Наименованию. +// +// Для привязки существующего свободного пользователя ИБ к свободному элементу +// справочника, нужно вставить свойство УникальныйИдентификатор. +// +// При выполнении действий "Записать" и "Удалить" реквизит объекта +// ИдентификаторПользователяИБ обновляется автоматически, его не следует изменять. +// +// После выполнения действия в структуру вставляются (обновляются) следующие свойства. +// РезультатДействия - Строка, содержащая одно из значений: +// "ДобавленПользовательИБ", "ИзмененПользовательИБ", "УдаленПользовательИБ", +// "ОчищенаСвязьСНесуществущимПользователемИБ", "НеТребуетсяУдалениеПользовательИБ". +// УникальныйИдентификатор - УникальныйИдентификатор пользователя ИБ. + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -25,28 +45,7 @@ Возврат; КонецЕсли; - Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ) Тогда - Возврат; - КонецЕсли; - - ЗаписьПервогоАдминистратора = Ложь; - - СтандартныеПодсистемыПереопределяемый.ПередЗаписьюПользователя(ЭтотОбъект); - - Если ДополнительныеСвойства.Свойство("ДоступКИнформационнойБазеРазрешен") Тогда - ОбработатьПользователяИБ(Отказ); - КонецЕсли; - - Если Отказ Тогда - Возврат; - КонецЕсли; - - Если ИдентификаторПользователяИБ <> Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") - И Пользователи.ПользовательПоИдентификаторуСуществует(ИдентификаторПользователяИБ, Ссылка) Тогда - - ВызватьИсключение(НСтр("ru = 'Один пользователь информационной базы - |может быть связан только с одним пользователем или внешним пользователем!'")); - КонецЕсли; + ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ); КонецПроцедуры @@ -56,44 +55,40 @@ Возврат; КонецЕсли; - Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ) Тогда - Возврат; - КонецЕсли; - Если ДополнительныеСвойства.Свойство("ГруппаНовогоПользователя") И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоПользователя) Тогда + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыПользователей"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоПользователя.ПолучитьОбъект(); ОбъектГруппы.Состав.Добавить().Пользователь = Ссылка; ОбъектГруппы.Записать(); - Пользователи.ОбновитьСоставыГруппПользователей(ОбъектГруппы.Ссылка); КонецЕсли; - Пользователи.ОбновитьСоставыГруппПользователей(Справочники.ГруппыПользователей.ВсеПользователи); + ПользователиСлужебный.ОбновитьСоставыГруппПользователей( + Справочники.ГруппыПользователей.ВсеПользователи, Ссылка); - Если ЗаписьПервогоАдминистратора Тогда - УстановитьПривилегированныйРежим(Истина); - - ПользователиПереопределяемый.ПриЗаписиПервогоАдминистратора(Ссылка); - - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; + ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ); КонецПроцедуры Процедура ПередУдалением(Отказ) - Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ) Тогда - Возврат; - КонецЕсли; - - // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ, - // кроме того, вход под этим пользователем ИБ приведет к ошибке. - Если Пользователи.ПользовательИБСуществует(ИдентификаторПользователяИБ) Тогда - ОписаниеОшибки = ""; - Если НЕ Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ, ОписаниеОшибки) Тогда - ВызватьИсключение(ОписаниеОшибки); - КонецЕсли; + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + ИЛИ НЕ Пользователи.ЭтоНеразделенныйПользователь(ИдентификаторПользователяИБ) Тогда + + // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ, + // кроме того, вход под этим пользователем ИБ приведет к ошибке. + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Удалить"); + ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + + ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ, Истина); + ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ); КонецЕсли; // Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки. @@ -102,132 +97,11 @@ Процедура ПриКопировании(ОбъектКопирования) + ДополнительныеСвойства.Вставить("ЗначениеКопирования", ОбъектКопирования.Ссылка); + ИдентификаторПользователяИБ = Неопределено; ИдентификаторПользователяСервиса = Неопределено; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -Процедура ОбработатьПользователяИБ(Отказ) - - УровеньДоступа = Пользователи.ПолучитьУровеньДоступаНаИзменениеСвойствПользователяИБ(); - - Если УровеньДоступа = "НетДоступа" Тогда - ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения пользователя информационной базы'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - ДополнительныеСвойства.Вставить("ПользовательИБСуществует", - ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ) <> Неопределено); - - Если УровеньДоступа <> "ПолныйДоступ" И УровеньДоступа <> "УправлениеСписком" - И ДополнительныеСвойства.ПользовательИБСуществует <> ДополнительныеСвойства.ДоступКИнформационнойБазеРазрешен Тогда - - ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения пользователя информационной базы'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); - Возврат; - КонецЕсли; - - Если ДополнительныеСвойства.ДоступКИнформационнойБазеРазрешен Тогда - // Проверка попытки изменения недоступных свойств. - СтруктураОписанияПользователяИБ = ДополнительныеСвойства.СтруктураОписанияПользователяИБ; - - Если УровеньДоступа = "УправлениеСписком" Тогда - Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыРоли") Тогда - ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения ролей пользователя информационной базы'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); - Возврат; - КонецЕсли; - ИначеЕсли УровеньДоступа = "ИзменениеТекущего" Тогда - ДопустимыеСвойства = Новый Массив; - ДопустимыеСвойства.Добавить("ПользовательИнфБазыИмя"); - ДопустимыеСвойства.Добавить("ПользовательИнфБазыПароль"); - ДопустимыеСвойства.Добавить("ПользовательИнфБазыЯзык"); - ДопустимыеСвойства.Добавить("ПодтверждениеПароля"); - Для каждого КлючИЗначение Из СтруктураОписанияПользователяИБ Цикл - Если ДопустимыеСвойства.Найти(КлючИЗначение.Ключ) = Неопределено Тогда - ТекстСообщения = НСтр("ru = 'Не достаточно прав для изменения пользователя информационной базы'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения, , , , Отказ); - Возврат; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ЗаписатьПользователяИБ(Отказ); - Иначе - Если ДополнительныеСвойства.ПользовательИБСуществует Тогда - УдалитьПользователяИБ(Отказ); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Процедура ЗаписатьПользователяИБ(Отказ) - - СтруктураОписанияПользователяИБ = ДополнительныеСвойства.СтруктураОписанияПользователяИБ; - Если СтруктураОписанияПользователяИБ.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыРоли") Тогда - Роли = СтруктураОписанияПользователяИБ.ПользовательИнфБазыРоли; - Иначе - Роли = Неопределено; - КонецЕсли; - - Если Пользователи.ТребуетсяСоздатьПервогоАдминистратора(СтруктураОписанияПользователяИБ) Тогда - ЗаписьПервогоАдминистратора = Истина; - Роли = Новый Массив; - Роли.Добавить("ПолныеПрава"); - - ИмяРолиАдминистратораСистемы = Пользователи.РольАдминистратораСистемы().Имя; - Если Роли.Найти(ИмяРолиАдминистратораСистемы) = Неопределено Тогда - Роли.Добавить(ИмяРолиАдминистратораСистемы); - КонецЕсли; - КонецЕсли; - - // Попытка записи пользователя ИБ. - СозданНовыйПользовательИБ = Ложь; - ОписаниеОшибки = ""; - Если Пользователи.ЗаписатьПользователяИБ(ИдентификаторПользователяИБ, - СтруктураОписанияПользователяИБ, Роли, НЕ ДополнительныеСвойства.ПользовательИБСуществует, ОписаниеОшибки) Тогда - - Если НЕ ДополнительныеСвойства.ПользовательИБСуществует Тогда - СозданНовыйПользовательИБ = Истина; - ИдентификаторПользователяИБ = СтруктураОписанияПользователяИБ.ПользовательИнфБазыУникальныйИдентификатор; - ДополнительныеСвойства.ПользовательИБСуществует = Истина; - КонецЕсли; - Иначе - Отказ = Истина; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки); - КонецЕсли; - - Если НЕ Отказ Тогда - Если СозданНовыйПользовательИБ Тогда - ДополнительныеСвойства.Вставить("ДобавленПользовательИБ", ИдентификаторПользователяИБ); - Иначе - ДополнительныеСвойства.Вставить("ИзмененПользовательИБ", ИдентификаторПользователяИБ); - КонецЕсли - КонецЕсли; - -КонецПроцедуры - -Функция УдалитьПользователяИБ(Отказ) - - УстановитьПривилегированныйРежим(Истина); - - ОписаниеОшибки = ""; - Если Пользователи.УдалитьПользователяИБ(ИдентификаторПользователяИБ, ОписаниеОшибки) Тогда - ДополнительныеСвойства.Вставить("УдаленПользовательИБ", ИдентификаторПользователяИБ); - ДополнительныеСвойства.ПользовательИБСуществует = Ложь; - ИдентификаторПользователяИБ = Неопределено; - Иначе - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ОписаниеОшибки, , , , Отказ); - КонецЕсли; - -КонецФункции - +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/Пользователи/Пользователи.mdo b/SSL/src/Catalogs/Пользователи/Пользователи.mdo index ad5ea8f17..a7583679d 100644 --- a/SSL/src/Catalogs/Пользователи/Пользователи.mdo +++ b/SSL/src/Catalogs/Пользователи/Пользователи.mdo @@ -163,6 +163,21 @@ <indexing>Index</indexing> <dataHistory>Use</dataHistory> </attributes> + <attributes uuid="dface15c-cd65-4fb1-b4dd-b513086d3f8e"> + <name>ИдентификаторПользователяСервиса</name> + <synonym> + <key>ru</key> + <value>Идентификатор пользователя сервиса</value> + </synonym> + <type> + <types>UUID</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <indexing>Index</indexing> + <dataHistory>Use</dataHistory> + </attributes> <attributes uuid="ae6d0e12-8857-476c-b4b2-f03295cbed3e"> <name>Недействителен</name> <synonym> @@ -183,19 +198,23 @@ <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> - <attributes uuid="dface15c-cd65-4fb1-b4dd-b513086d3f8e"> - <name>ИдентификаторПользователяСервиса</name> + <attributes uuid="bd0e3bd4-1207-41ea-8dfc-afa8f7d08cc2"> + <name>Служебный</name> <synonym> <key>ru</key> - <value>Идентификатор пользователя сервиса</value> + <value>Служебный</value> </synonym> <type> - <types>UUID</types> + <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"/> - <indexing>Index</indexing> + <fullTextSearch>Use</fullTextSearch> <dataHistory>Use</dataHistory> </attributes> <tabularSections uuid="d6969c1e-e13c-4542-abb7-9cf6bb50b8e2"> diff --git a/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl b/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl new file mode 100644 index 000000000..4a02b73a8 --- /dev/null +++ b/SSL/src/Catalogs/ПоставляемыеДанные/ObjectModule.bsl @@ -0,0 +1,14 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +Процедура ПередЗаписью(Отказ) + Перем Характеристика; + + Описание = ВидДанных; + Для каждого Характеристика Из ХарактеристикиДанных Цикл + Описание = Описание + + ", " + Характеристика.Характеристика + ": " + Характеристика.Значение; + КонецЦикла; +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПоставляемыеДанные/ПоставляемыеДанные.mdo b/SSL/src/Catalogs/ПоставляемыеДанные/ПоставляемыеДанные.mdo new file mode 100644 index 000000000..01c0cae93 --- /dev/null +++ b/SSL/src/Catalogs/ПоставляемыеДанные/ПоставляемыеДанные.mdo @@ -0,0 +1,296 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:Catalog 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="f8f0857f-2c75-471a-ae0b-a3a265e1eb25"> + <producedTypes> + <objectType typeId="b2197019-97e2-4c75-af7c-5fc3dc79bd1c" valueTypeId="eff4544a-5932-41f9-bb36-3640b7ba8aea"/> + <refType typeId="9ed954ea-3506-4bda-8a27-fc5a681f85ae" valueTypeId="704e0666-092b-4291-bb7c-6ca3247b2838"/> + <selectionType typeId="288efd12-6f2d-43e1-ac34-0d044e00db6b" valueTypeId="417d10fc-2fee-47f9-9590-be6023b36c35"/> + <listType typeId="ed914df4-e98e-4afc-a357-e4f02e14a678" valueTypeId="77832077-5e90-44eb-8968-9c06c5ae2c96"/> + <managerType typeId="754b9a4e-b9df-4a95-8d4e-136faa692c5b" valueTypeId="672d7f48-e60b-4597-aeed-3763dc8e3fb2"/> + </producedTypes> + <name>ПоставляемыеДанные</name> + <synonym> + <key>ru</key> + <value>Поставляемые данные</value> + </synonym> + <useStandardCommands>true</useStandardCommands> + <inputByString>Catalog.ПоставляемыеДанные.StandardAttribute.Code</inputByString> + <fullTextSearchOnInputByString>DontUse</fullTextSearchOnInputByString> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>PredefinedDataName</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Predefined</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Ref</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>DeletionMark</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>IsFolder</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Owner</name> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Parent</name> + <fillFromFillingValue>true</fillFromFillingValue> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Description</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fillChecking>ShowError</fillChecking> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>Code</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <createOnInput>Use</createOnInput> + <dataLockControlMode>Managed</dataLockControlMode> + <fullTextSearch>Use</fullTextSearch> + <levelCount>2</levelCount> + <foldersOnTop>true</foldersOnTop> + <codeLength>9</codeLength> + <codeType>String</codeType> + <codeAllowedLength>Variable</codeAllowedLength> + <checkUnique>true</checkUnique> + <autonumbering>true</autonumbering> + <editType>InDialog</editType> + <choiceMode>BothWays</choiceMode> + <attributes uuid="a23f97fb-7ac9-4941-a2c6-bbff6c36ac12"> + <name>ВидДанных</name> + <synonym> + <key>ru</key> + <value>Вид данных</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>20</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:StringValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="80cf54ed-8677-4c89-a378-0abef6c64010"> + <name>ДатаДобавления</name> + <synonym> + <key>ru</key> + <value>Дата добавления</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="f0dec7b3-2d6a-44ce-a1da-9c71ccd37539"> + <name>ХранимыйФайл</name> + <synonym> + <key>ru</key> + <value>Хранимый файл</value> + </synonym> + <type> + <types>ValueStorage</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="56ee3afd-5ae6-421e-b9f3-26505e40f100"> + <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="63c9a839-78b2-4706-b380-5aedf6914930"> + <name>Том</name> + <synonym> + <key>ru</key> + <value>Том</value> + </synonym> + <comment>Ссылка на том (в случае если ТипХраненияФайла - на диске)</comment> + <type> + <types>CatalogRef.ТомаХраненияФайлов</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="40f5c1cb-2654-4738-bb44-6734b0e3490b"> + <name>ТипХраненияФайла</name> + <synonym> + <key>ru</key> + <value>Тип хранения файла</value> + </synonym> + <comment>Где хранятся файлы - в базе как ХранилищеЗначения или в каталоге на диске</comment> + <type> + <types>EnumRef.ТипыХраненияФайлов</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="2ec484b1-95eb-43a7-9430-1c1ef49f05af"> + <name>ИдентификаторФайла</name> + <synonym> + <key>ru</key> + <value>Идентификатор файла</value> + </synonym> + <type> + <types>UUID</types> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <fillValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + </attributes> + <attributes uuid="1a314ce2-03bc-4267-89a9-bb5bb866f552"> + <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"/> + <fillValue xsi:type="core:StringValue"/> + <fullTextSearch>Use</fullTextSearch> + <dataHistory>Use</dataHistory> + </attributes> + <tabularSections uuid="e3b783a6-5ea2-4cd4-955b-df63d93c1f25"> + <producedTypes> + <objectType typeId="07ea8ed9-9718-4b72-ab7b-a95ad133dcfe" valueTypeId="21a18f57-bee8-4d06-a19b-4a35c9a95b99"/> + <rowType typeId="42d137b6-aacf-4fe8-843c-6fa1aa36613e" valueTypeId="34d3a1a4-30f1-457f-b050-55c92b3f2663"/> + </producedTypes> + <name>ХарактеристикиДанных</name> + <synonym> + <key>ru</key> + <value>Характеристики данных</value> + </synonym> + <standardAttributes> + <dataHistory>Use</dataHistory> + <name>LineNumber</name> + <fillValue xsi:type="core:UndefinedValue"/> + <fullTextSearch>Use</fullTextSearch> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </standardAttributes> + <attributes uuid="f8ab62ad-7776-49ae-b1bb-51bea9a9992b"> + <name>Характеристика</name> + <synonym> + <key>ru</key> + <value>Характеристика</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>20</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + <attributes uuid="e859dd18-8baf-49c0-b7a0-1205b6c125d3"> + <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"/> + <dataHistory>Use</dataHistory> + <fullTextSearch>Use</fullTextSearch> + </attributes> + </tabularSections> +</mdclass:Catalog> diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl index 5fd913e6d..925618f16 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/Forms/ПрименениеПравил/Module.bsl @@ -194,7 +194,7 @@ Попытка Если ФормаДлительнойОперации.Открыта() И ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗадания Тогда - Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда ЗагрузитьРезультат(); ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); Оповестить("ПримененыПравилаОбработкиПисем"); @@ -212,3 +212,11 @@ КонецПопытки; КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции + diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl index 80cffc8c4..c20fe9468 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + &НаСервере @@ -120,3 +122,5 @@ ПоместитьВоВременноеХранилище(ТекстСообщения, АдресХранилища); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl index 9a7e2532a..ad33c03dd 100644 --- a/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПравилаОбработкиЭлектроннойПочты/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -13,3 +15,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form index c0783da53..8b9db1b89 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Form.form @@ -514,21 +514,6 @@ <itemValueType/> </extInfo> </attributes> - <attributes> - <name>ЦветОформленияДняПоУмолчанию</name> - <title> - <key>ru</key> - <value>Цвет оформления дня по умолчанию</value> - - 7 - - - true - - - true - - ВидыДней diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl index c1f78beb0..b47e4279d 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/Forms/ФормаЭлемента/Module.bsl @@ -10,8 +10,6 @@ ЦветаВидовДней = Новый ФиксированноеСоответствие(Справочники.ПроизводственныеКалендари.ЦветаОформленияВидовДнейПроизводственногоКалендаря()); - ЦветОформленияДняПоУмолчанию = ЦветаВидовДней.Получить(Перечисления.ВидыДнейПроизводственногоКалендаря.ПустаяСсылка()); - СписокВидовДня = Справочники.ПроизводственныеКалендари.СписокВидовДня(); КонецПроцедуры @@ -69,7 +67,10 @@ Для Каждого СтрокаОформленияПериода Из ОформлениеПериода.Даты Цикл ЦветОформленияДня = ЦветаВидовДней.Получить(ВидыДней.Получить(СтрокаОформленияПериода.Дата)); - СтрокаОформленияПериода.ЦветТекста = ?(ЦветОформленияДня = Неопределено, ЦветОформленияДняПоУмолчанию, ЦветОформленияДня); + Если ЦветОформленияДня = Неопределено Тогда + ЦветОформленияДня = ОбщегоНазначенияКлиент.ЦветСтиля("ВидДняНеУказанЦвет"); + КонецЕсли; + СтрокаОформленияПериода.ЦветТекста = ЦветОформленияДня; КонецЦикла; КонецПроцедуры diff --git a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl index 76846d91f..f9166308e 100644 --- a/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl +++ b/SSL/src/Catalogs/ПроизводственныеКалендари/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -72,12 +74,11 @@ ЦветаОформления = Новый Соответствие; - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.ПустаяСсылка(), WebЦвета.Красный); - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий, WebЦвета.Черный); - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота, WebЦвета.ТемноКрасный); - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье, WebЦвета.Красный); - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный, WebЦвета.ТемноСиний); - ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник, WebЦвета.Фиолетовый); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий, ЦветаСтиля.ВидДняРабочийЦвет); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Суббота, ЦветаСтиля.ВидДняСубботаЦвет); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Воскресенье, ЦветаСтиля.ВидДняВоскресеньеЦвет); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный, ЦветаСтиля.ВидДняПредпраздничныйЦвет); + ЦветаОформления.Вставить(Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник, ЦветаСтиля.ВидДняПраздникЦвет); Возврат ЦветаОформления; @@ -130,4 +131,5 @@ Возврат СписокПроизводственныхКалендарей; -КонецФункции \ No newline at end of file +КонецФункции +#КонецЕсли \ 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 f7883bd5d..475a978d6 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p><a href="Catalog.ПрофилиГруппДоступа/Help">Назначение профилей групп доступа см. здесь.</a></p> <p>Профилей групп доступа для больших конфигураций может быть много и с похожим назначением, поэтому предусмотрена возможность создавать папки для упрощения поиска нужного профиля и понимания принципов их формирования.</p> <p> </p></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 e5dde8a4a..943c0a47d 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаСписка/Module.bsl @@ -4,26 +4,37 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Список.Параметры.УстановитьЗначениеПараметра("РежимВыбораТолькоГрупп", Параметры.РежимВыбора И Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы); + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Список.Параметры.УстановитьЗначениеПараметра( + "РежимВыбораТолькоГрупп", + Параметры.РежимВыбора + И Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы); СписокНедоступныхПрофилей = Новый СписокЗначений; Если Параметры.РежимВыбора Тогда СписокНедоступныхПрофилей.Добавить(Справочники.ПрофилиГруппДоступа.Администратор); - // Отбор не помеченных на удаление + // Отбор не помеченных на удаление. Список.Отбор.Элементы[1].Использование = Истина; Элементы.Список.РежимВыбора = Истина; Элементы.Список.ВыборГруппИЭлементов = Параметры.ВыборГруппИЭлементов; + Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда + Элементы.Список.Отображение = ОтображениеТаблицы.Дерево; - Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВерхнийУровень; + Элементы.Список.НачальноеОтображениеДерева = + НачальноеОтображениеДерева.РаскрыватьВерхнийУровень; КонецЕсли; АвтоЗаголовок = Ложь; Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда - // Режим подбора + // Режим подбора. Элементы.Список.МножественныйВыбор = Истина; Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный; diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form index 5b399d596..b1620e7d2 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Form.form @@ -286,7 +286,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.УстановитьФлажки</commandName> + <commandName>Form.Command.ВключитьРоли</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -313,7 +313,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.СнятьФлажки</commandName> + <commandName>Form.Command.ИсключитьРоли</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -366,7 +366,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.ПоказатьПодсистемыРолей</commandName> + <commandName>Form.Command.ГруппировкаРолейПоПодсистемам</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -2169,23 +2169,6 @@ <itemValueType/> </extInfo> </attributes> - <attributes> - <name>ПоказатьТолькоВыбранныеРоли</name> - <title> - <key>ru</key> - <value>Показать только выбранные роли</value> - - 5 - - Boolean - - - true - - - true - - НадписьВидДоступа @@ -2612,23 +2595,6 @@ <segments>ПоказатьПодсистемыРолей</segments> </settingsSavedData> </attributes> - <attributes> - <name>СкрытьРольПолныеПрава</name> - <title> - <key>ru</key> - <value>Скрыть роль полные права</value> - - 6 - - Boolean - - - true - - - true - - ТребуетсяПроверитьЗаполнение @@ -2695,12 +2661,16 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>УстановитьФлажки</name> + <name>ВключитьРоли</name> <title> <key>ru</key> - <value>Установить флажки</value> + <value>Включить роли</value> 5 + + ru + Включить роли + true @@ -2709,7 +2679,7 @@ - УстановитьФлажки + ВключитьРоли true @@ -2717,12 +2687,16 @@ Auto - СнятьФлажки + ИсключитьРоли <key>ru</key> - <value>Снять флажки</value> + <value>Исключить роли</value> 6 + + ru + Исключить роли + true @@ -2731,7 +2705,7 @@ - СнятьФлажки + ИсключитьРоли true @@ -2739,15 +2713,15 @@ Auto - ПоказатьПодсистемыРолей + ГруппировкаРолейПоПодсистемам <key>ru</key> - <value>Группировка по подсистемам</value> + <value>По подсистемам</value> 2 ru - Показать группировку по подсистемам + Группировать список ролей по подсистемам true @@ -2757,7 +2731,7 @@ - ПоказатьПодсистемыРолей + ГруппировкаРолейПоПодсистемам TextPicture diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl index d5076102c..fbfa894fb 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Forms/ФормаЭлемента/Module.bsl @@ -4,31 +4,30 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - //** Установка начальных значений - // перед загрузкой данных из настроек на сервере - // для случая, когда данные ещё не были записаны и не загружаются - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - // Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере. - // Для существующего - в ПриЧтенииНаСервере. - Если Объект.Ссылка.Пустая() Тогда - ИнициализацияФормы(); + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; КонецЕсли; - //** Подготовка постоянных коллекций + ОбработатьИнтерфейсРолей( + "НастроитьИнтерфейсРолейПриСозданииФормы", ЗначениеЗаполнено(Объект.Ссылка)); - // Заполнение списка всегда используемых видов доступа (для исключения при выборе) - Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаИспользуетсяВсегда", Истина)) Цикл + // Подготовка вспомогательных данных. + + // Заполнение списка всегда используемых видов доступа (для исключения при выборе). + Отбор = Новый Структура("ВидДоступаИспользуетсяВсегда", Истина); + Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа().НайтиСтроки(Отбор) Цикл ВидыДоступаИспользуемыеВсегда.Добавить(СвойстваВидаДоступа.ВидДоступа); КонецЦикла; - // Заполнение списка видов доступа через права по значениям доступа - Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина)) Цикл + // Заполнение списка видов доступа через права по значениям доступа. + Отбор = Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина); + Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа().НайтиСтроки(Отбор) Цикл ВидыДоступаЧерезПраваПоЗначениямДоступа.Добавить(СвойстваВидаДоступа.ВидДоступа); КонецЦикла; - // Заполнение типов значений доступа всех видов доступа - Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа() Цикл + // Заполнение типов значений доступа всех видов доступа. + Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа() Цикл Для каждого Тип Из СвойстваВидаДоступа.ВидДоступа.ТипЗначения.Типы() Цикл МассивТипов = Новый Массив; МассивТипов.Добавить(Тип); @@ -38,11 +37,14 @@ Если Метаданные.Перечисления.Найти(МетаданныеТипа.Имя) = МетаданныеТипа Тогда ПредставлениеТипа = МетаданныеТипа.Представление(); Иначе - ПредставлениеТипа = ?(ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта), МетаданныеТипа.ПредставлениеОбъекта, МетаданныеТипа.Представление()); + ПредставлениеТипа = ?( + ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта), + МетаданныеТипа.ПредставлениеОбъекта, + МетаданныеТипа.Представление()); КонецЕсли; НоваяСтрока = ТипыЗначенийДоступаВидовДоступа.Добавить(); - НоваяСтрока.ВидДоступа = СвойстваВидаДоступа.ВидДоступа; + НоваяСтрока.ВидДоступа = СвойстваВидаДоступа.ВидДоступа; НоваяСтрока.ТипЗначенияДоступа = ОписаниеТипа.ПривестиЗначение(Неопределено); НоваяСтрока.ПредставлениеТипа = ПредставлениеТипа; КонецЦикла; @@ -53,29 +55,33 @@ ИспользоватьВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей(); - //** Установка постоянной доступности свойств + // Установка постоянной доступности свойств. - // Определение необходимости настройки ограничений доступа + // Определение необходимости настройки ограничений доступа. Если НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда Элементы.ВидыИЗначенияДоступа.Видимость = Ложь; КонецЕсли; - // Определение прав восстановления по начальному заполнению - Элементы.ВосстановитьПоНачальномуЗаполнению.Видимость = УправлениеДоступом.ЕстьРоль("ПолныеПрава") И НЕ УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); + // Определение прав восстановления по начальному заполнению. + Элементы.ВосстановитьПоНачальномуЗаполнению.Видимость + = УправлениеДоступом.ЕстьРоль("ПолныеПрава") + И НЕ УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); - // Определение возможности редактирования элементов формы (перезапись доступна) - БезРедактированияПоставляемыхЗначений = ТолькоПросмотр ИЛИ Объект.Ссылка = Справочники.ПрофилиГруппДоступа.Администратор; + // Определение возможности редактирования элементов формы (перезапись доступна). + БезРедактированияПоставляемыхЗначений = + ТолькоПросмотр ИЛИ Объект.Ссылка = Справочники.ПрофилиГруппДоступа.Администратор; // Определение возможности восстановления по начальному заполнению Элементы.ОписаниеПоставляемогоПрофиля.Видимость = Ложь; + Если Объект.Ссылка.Пустая() Тогда Элементы.ВосстановитьПоНачальномуЗаполнению.Доступность = Ложь; - // - ИначеЕсли УправлениеДоступом.ЕстьНачальноеЗаполнениеПрофиляГруппДоступа(Объект.Ссылка) Тогда + + ИначеЕсли УправлениеДоступомСлужебный.ЕстьНачальноеЗаполнениеПрофиляГруппДоступа(Объект.Ссылка) Тогда Элементы.ВосстановитьПоНачальномуЗаполнению.Доступность = Истина; Элементы.ОписаниеПоставляемогоПрофиля.Видимость = Истина; Элементы.ОписаниеПоставляемогоПрофиля.Доступность = НЕ Объект.ПоставляемыйПрофильИзменен; - // + Если УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа() Тогда БезРедактированияПоставляемыхЗначений = Истина; КонецЕсли; @@ -83,17 +89,20 @@ Элементы.Наименование.ТолькоПросмотр = БезРедактированияПоставляемыхЗначений; - // Настройка редактирования видов доступа + // Настройка редактирования видов доступа. Элементы.ВидыДоступа.ТолькоПросмотр = БезРедактированияПоставляемыхЗначений; Элементы.ВидыДоступаДобавить.Доступность = НЕ БезРедактированияПоставляемыхЗначений; Элементы.КонтекстноеМенюВидыДоступаДобавить.Доступность = НЕ БезРедактированияПоставляемыхЗначений; - УстановитьТолькоПросмотрРолей(БезРедактированияПоставляемыхЗначений, БезРедактированияПоставляемыхЗначений); + ОбработатьИнтерфейсРолей( + "УстановитьТолькоПросмотрРолей", + БезРедактированияПоставляемыхЗначений, + БезРедактированияПоставляемыхЗначений); - //** Заполнение изменяемых коллекций - - // При создании копированием - Если Объект.ВидыДоступа.Количество() > 0 И НЕ ЗначениеЗаполнено(Объект.ВидыДоступа[0].Использование) Тогда + // При создании копированием. + Если Объект.ВидыДоступа.Количество() > 0 + И НЕ ЗначениеЗаполнено(Объект.ВидыДоступа[0].Использование) Тогда + ЗаполнитьСвойстваВидовДоступаВФорме(); КонецЕсли; @@ -102,9 +111,15 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) + // Возврат при получении формы для анализа. + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + ЗаполнитьСвойстваВидовДоступаВФорме(); + ОбновитьГруппыДоступаПрофиля = Ложь; - ИнициализацияФормы(); + Элементы.ОписаниеПоставляемогоПрофиля.Доступность = НЕ ТекущийОбъект.ПоставляемыйПрофильИзменен; КонецПроцедуры @@ -120,10 +135,16 @@ Если ПроверитьЗаполнение() Тогда ТребуетсяПроверитьЗаполнение = Ложь; - КодОтвета = Вопрос(ТекстВопросаОбновитьГруппыДоступаПрофиля(), РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет); + КодОтвета = Вопрос( + ТекстВопросаОбновитьГруппыДоступаПрофиля(), + РежимДиалогаВопрос.ДаНетОтмена, + , + КодВозвратаДиалога.Нет); + Если КодОтвета = КодВозвратаДиалога.Отмена Тогда Отказ = Истина; Возврат; + ИначеЕсли КодОтвета = КодВозвратаДиалога.Да Тогда ПараметрыЗаписи.Вставить("ОбновитьГруппыДоступаПрофиля"); КонецЕсли; @@ -146,8 +167,12 @@ &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) - Если ТекущийОбъект.ДополнительныеСвойства.Свойство("ПерсональныеГруппыДоступаСОбновленнымНаименованием") Тогда - ПараметрыЗаписи.Вставить("ПерсональныеГруппыДоступаСОбновленнымНаименованием", ТекущийОбъект.ДополнительныеСвойства.ПерсональныеГруппыДоступаСОбновленнымНаименованием); + Если ТекущийОбъект.ДополнительныеСвойства.Свойство( + "ПерсональныеГруппыДоступаСОбновленнымНаименованием") Тогда + + ПараметрыЗаписи.Вставить( + "ПерсональныеГруппыДоступаСОбновленнымНаименованием", + ТекущийОбъект.ДополнительныеСвойства.ПерсональныеГруппыДоступаСОбновленнымНаименованием); КонецЕсли; ЗаполнитьСвойстваВидовДоступаВФорме(); @@ -166,6 +191,7 @@ Если ПараметрыЗаписи.Свойство("ПерсональныеГруппыДоступаСОбновленнымНаименованием") Тогда ОповеститьОбИзменении(Тип("СправочникСсылка.ГруппыДоступа")); + Для каждого ПерсональнаяГруппаДоступа Из ПараметрыЗаписи.ПерсональныеГруппыДоступаСОбновленнымНаименованием Цикл Оповестить("Запись_ГруппыДоступа", Новый Структура, ПерсональнаяГруппаДоступа); КонецЦикла; @@ -244,8 +270,11 @@ КонецЕсли; // Проверка наличия повторяющихся значений. - НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки( - Новый Структура("ВидДоступа, ЗначениеДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа, ТекущаяСтрока.ЗначениеДоступа)); + Отбор = Новый Структура; + Отбор.Вставить("ВидДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа); + Отбор.Вставить("ЗначениеДоступа", ТекущаяСтрока.ЗначениеДоступа); + + НайденныеЗначения = Объект.ЗначенияДоступа.НайтиСтроки(Отбор); Если НайденныеЗначения.Количество() > 1 Тогда Элементы.ВидыДоступа.ТекущаяСтрока = ТекущаяСтрокаВидаДоступа.ПолучитьИдентификатор(); @@ -269,7 +298,10 @@ ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("Объект")); ТекущийОбъект = РеквизитФормыВЗначение("Объект"); - ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверенныеРеквизитыОбъекта", ПроверенныеРеквизитыОбъекта); + + ТекущийОбъект.ДополнительныеСвойства.Вставить("ПроверенныеРеквизитыОбъекта", + ПроверенныеРеквизитыОбъекта); + Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда Отказ = Истина; КонецЕсли; @@ -279,16 +311,7 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда - ПоказатьПодсистемыРолей = Ложь; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь; - Иначе - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - КонецЕсли; - - СкрытьРольПолныеПрава = Объект.Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор; - ОбновитьДеревоРолей(); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки); КонецПроцедуры @@ -329,7 +352,9 @@ Если НЕ ЗначениеЗаполнено(Элементы.ВидыДоступа.ТекущиеДанные.Использование) Тогда Элементы.ВидыДоступа.ТекущиеДанные.Предустановленный = Ложь; Элементы.ВидыДоступа.ТекущиеДанные.ДоступРазрешен = Ложь; - Элементы.ВидыДоступа.ТекущиеДанные.Использование = Элементы.ВидыДоступаИспользование.СписокВыбора.НайтиПоЗначению("ВначалеВсеЗапрещены").Представление; + Элементы.ВидыДоступа.ТекущиеДанные.Использование = + Элементы.ВидыДоступаИспользование.СписокВыбора.НайтиПоЗначению( + "ВначалеВсеЗапрещены").Представление; КонецЕсли; КонецПроцедуры @@ -338,12 +363,14 @@ &НаКлиенте Процедура ВидыДоступаВидДоступаПриИзменении(Элемент) - Если ВидыДоступаИспользуемыеВсегда.НайтиПоЗначению(Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа) <> Неопределено Тогда - Предупреждение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вид доступа ""%1"" не требуется выбирать. - |По нему ограничение всегда выполняется.'"), - Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа)); + Если ВидыДоступаИспользуемыеВсегда.НайтиПоЗначению( + Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа) <> Неопределено Тогда + + Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Вид доступа ""%1"" не требуется выбирать. + |По нему ограничение всегда выполняется.'"), + Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа)); + Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа = Неопределено; КонецЕсли; @@ -372,13 +399,16 @@ СтандартнаяОбработка = Ложь; - Если ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа) <> Неопределено - И ВыбранноеЗначение = "ВсеРазрешены" Тогда - // - Предупреждение(НСтр("ru = 'Для вида доступа через права по значениям доступа - |вариант ""Все разрешены, исключения задаются в профиле"" - |не имеет смысла - вместо этого следует удалить вид доступа.'")); - // + Если ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению( + Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа) <> Неопределено + И + ВыбранноеЗначение = "ВсеРазрешены" Тогда + + Предупреждение( + НСтр("ru = 'Для вида доступа через права по значениям доступа + |вариант ""Все разрешены, исключения задаются в профиле"" + |не имеет смысла - вместо этого следует удалить вид доступа.'")); + Если ВыбранноеЗначение = "ВсеРазрешены" Тогда ВыбранноеЗначение = "ВсеЗапрещены"; Иначе @@ -396,7 +426,6 @@ ИЛИ ВыбранноеЗначение = "ВсеРазрешены"; Модифицированность = Истина; - // ПриИзмененииТекущегоВидаДоступа(ЭтаФорма); КонецПроцедуры @@ -407,8 +436,11 @@ &НаКлиенте Процедура ЗначенияДоступаПриИзменении(Элемент) - Если Элемент.ТекущиеДанные <> Неопределено И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда + Если Элемент.ТекущиеДанные <> Неопределено + И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда + Элемент.ТекущиеДанные.ВидДоступа = ТекущийВидДоступа; + Отбор = Новый Структура("ВидДоступа", ТекущийВидДоступа); Элемент.ТекущиеДанные.НомерСтрокиПоВиду = Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество(); КонецЕсли; @@ -425,8 +457,9 @@ Элемент.ТекущиеДанные.ЗначениеДоступа = ТекущиеТипыЗначенийДоступа[0].Значение; КонецЕсли; - Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено - И ТекущиеТипыЗначенийДоступа.Количество() > 1; + Элементы.ЗначениеДоступа.КнопкаОчистки + = ТекущийТипЗначенияДоступа <> Неопределено + И ТекущиеТипыЗначенийДоступа.Количество() > 1; КонецПроцедуры @@ -446,8 +479,9 @@ ТекущиеДанные.ЗначениеДоступа = ТекущийТипЗначенияДоступа; КонецЕсли; - Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено - И ТекущиеТипыЗначенийДоступа.Количество() > 1; + Элементы.ЗначениеДоступа.КнопкаОчистки + = ТекущийТипЗначенияДоступа <> Неопределено + И ТекущиеТипыЗначенийДоступа.Количество() > 1; Если ТекущийТипЗначенияДоступа = ПользовательПустаяСсылка ИЛИ ТекущийТипЗначенияДоступа = ГруппаПользователейПустаяСсылка Тогда @@ -456,19 +490,21 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина); + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); ИначеЕсли ТекущийТипЗначенияДоступа = ВнешнийПользовательПустаяСсылка ИЛИ ТекущийТипЗначенияДоступа = ГруппаВнешнихПользователейПустаяСсылка Тогда - + СтандартнаяОбработка = Ложь; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент); КонецЕсли; @@ -477,19 +513,29 @@ &НаКлиенте Процедура ЗначениеДоступаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ТекущиеДанные = Элементы.ЗначенияДоступа.ТекущиеДанные; + Если ВыбранноеЗначение = Тип("СправочникСсылка.Пользователи") ИЛИ ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыПользователей") Тогда СтандартнаяОбработка = Ложь; - НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа; - ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", Новый Структура("ВыборГруппПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент); - + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина); + + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); + ИначеЕсли ВыбранноеЗначение = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда СтандартнаяОбработка = Ложь; - НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа; - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", Новый Структура("ВыборГруппВнешнихПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); + + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент); КонецЕсли; КонецПроцедуры @@ -511,10 +557,17 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст, , ТекущийВидДоступа = ВидДоступаВнешниеПользователи, ТекущийВидДоступа <> ВидДоступаПользователи); + Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи + ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда + + ДанныеВыбора = СформироватьДанныеВыбораПользователя( + Текст, + , + ТекущийВидДоступа = ВидДоступаВнешниеПользователи, + ТекущийВидДоступа <> ВидДоступаПользователи); Иначе - ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь); + ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа( + Текст, ТекущийВидДоступа, Ложь); КонецЕсли; КонецЕсли; @@ -526,10 +579,17 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст, , ТекущийВидДоступа = ВидДоступаВнешниеПользователи, ТекущийВидДоступа <> ВидДоступаПользователи); + Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи + ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда + + ДанныеВыбора = СформироватьДанныеВыбораПользователя( + Текст, + , + ТекущийВидДоступа = ВидДоступаВнешниеПользователи, + ТекущийВидДоступа <> ВидДоступаПользователи); Иначе - ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь); + ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа( + Текст, ТекущийВидДоступа, Ложь); КонецЕсли; КонецЕсли; @@ -545,7 +605,7 @@ Процедура РолиПометкаПриИзменении(Элемент) Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей"); КонецЕсли; КонецПроцедуры @@ -560,22 +620,34 @@ Предупреждение(НСтр("ru = 'Для выполнения команды требуется переоткрыть форму.'")); Иначе - Ответ = Вопрос(НСтр("ru = 'Восстановить профиль по содержимому начального заполнения?'"), РежимДиалогаВопрос.ДаНет); + Ответ = Вопрос( + НСтр("ru = 'Восстановить профиль по содержимому начального заполнения?'"), + РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Да Тогда - // - КодОтвета = Вопрос(ТекстВопросаОбновитьГруппыДоступаПрофиля(), РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет); - // + + КодОтвета = Вопрос( + ТекстВопросаОбновитьГруппыДоступаПрофиля(), + РежимДиалогаВопрос.ДаНетОтмена, + , + КодВозвратаДиалога.Нет); + Если КодОтвета <> КодВозвратаДиалога.Отмена Тогда ОбновитьГруппыДоступа = (КодОтвета = КодВозвратаДиалога.Да); - УправлениеДоступом.НачальноеЗаполнениеПрофилейГруппДоступа(Объект.Ссылка, ОбновитьГруппыДоступа, Ложь); + + НачальноеЗаполнениеПрофилейГруппДоступа( + Объект.Ссылка, ОбновитьГруппыДоступа, Ложь); + Прочитать(); - РазвернутьПодсистемыРолей(); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); + Если ОбновитьГруппыДоступа Тогда Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля обновлены.'"); Иначе Текст = НСтр("ru = 'Профиль ""%1"" восстановлен по содержимому начального заполнения, группы доступа профиля не обновлены.'"); КонецЕсли; - ПоказатьОповещениеПользователя(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, Объект.Наименование)); + + ПоказатьОповещениеПользователя(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Текст, Объект.Наименование)); КонецЕсли; КонецЕсли; КонецЕсли; @@ -586,9 +658,12 @@ Процедура ОписаниеПоставляемогоПрофиля(Команда) ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.УстановитьТекст(УправлениеДоступом.ОписаниеПоставляемогоПрофиля(Объект.Ссылка)); + ТекстовыйДокумент.УстановитьТекст(ОписаниеПоставляемогоПрофиляНаСервере(Объект.Ссылка)); ТекстовыйДокумент.ТолькоПросмотр = Истина; - ТекстовыйДокумент.Показать(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Описание поставляемого профиля ""%1""'"), Объект.Наименование)); + + ТекстовыйДокумент.Показать(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Описание поставляемого профиля ""%1""'"), + Объект.Наименование)); КонецПроцедуры @@ -598,57 +673,38 @@ &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) - ПоказатьТолькоВыбранныеРоли = НЕ ПоказатьТолькоВыбранныеРоли; - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); + ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура ПоказатьПодсистемыРолей(Команда) +Процедура ГруппировкаРолейПоПодсистемам(Команда) - ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); + ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура УстановитьФлажки(Команда) +Процедура ВключитьРоли(Команда) - ОбновитьСоставРолей(Неопределено, Истина); - Если ПоказатьТолькоВыбранныеРоли Тогда - РазвернутьПодсистемыРолей(); - КонецЕсли; + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе"); + + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма, Ложь); КонецПроцедуры &НаКлиенте -Процедура СнятьФлажки(Команда) +Процедура ИсключитьРоли(Команда) - ОбновитьСоставРолей(Неопределено, Ложь); + ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВсе"); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаСервере -Процедура ИнициализацияФормы() - - // Для нового элемента показать все роли, иначе только выбранные - ПоказатьТолькоВыбранныеРоли = ЗначениеЗаполнено(Объект.Ссылка); - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ЗначениеЗаполнено(Объект.Ссылка); - // - СкрытьРольПолныеПрава = Объект.Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор; - ОбновитьДеревоРолей(); - -КонецПроцедуры - &НаСервере Процедура ЗаполнитьСвойстваВидовДоступаВФорме() @@ -660,101 +716,145 @@ КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ПриИзмененииТекущегоВидаДоступа(Знач Контекст) +Процедура ПриИзмененииТекущегоВидаДоступа(Знач Форма) + + Элементы = Форма.Элементы; ЗначенияЗадаются = Ложь; #Если Клиент Тогда - ТекущиеДанные = Контекст.Элементы.ВидыДоступа.ТекущиеДанные; + ТекущиеДанные = Элементы.ВидыДоступа.ТекущиеДанные; #Иначе - ТекущиеДанные = Контекст.Объект.ВидыДоступа.НайтиПоИдентификатору(?(Контекст.Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Контекст.Элементы.ВидыДоступа.ТекущаяСтрока)); + ТекущиеДанные = Форма.Объект.ВидыДоступа.НайтиПоИдентификатору( + ?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, + -1, + Элементы.ВидыДоступа.ТекущаяСтрока)); #КонецЕсли Если ТекущиеДанные <> Неопределено Тогда - Контекст.ТекущийВидДоступа = ТекущиеДанные.ВидДоступа; + Форма.ТекущийВидДоступа = ТекущиеДанные.ВидДоступа; - Если Контекст.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ТекущиеДанные.ВидДоступа) = Неопределено Тогда + Если Форма.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению( + ТекущиеДанные.ВидДоступа) = Неопределено Тогда + ЗначенияЗадаются = ТекущиеДанные.Предустановленный; Если ЗначенияЗадаются Тогда - Контекст.Элементы.ТипыВидовДоступа.ТекущаяСтраница = Контекст.Элементы.ПредустановленныйВидДоступа; - // Установка отбора значений - Если Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Неопределено - ИЛИ Контекст.Элементы.ЗначенияДоступа.ОтборСтрок.ВидДоступа <> ТекущиеДанные.ВидДоступа Тогда - // - Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("ВидДоступа", ТекущиеДанные.ВидДоступа); + + Элементы.ТипыВидовДоступа.ТекущаяСтраница = + Элементы.ПредустановленныйВидДоступа; + + // Установка отбора значений. + Если Элементы.ЗначенияДоступа.ОтборСтрок = Неопределено + ИЛИ Элементы.ЗначенияДоступа.ОтборСтрок.ВидДоступа + <> ТекущиеДанные.ВидДоступа Тогда + + Элементы.ЗначенияДоступа.ОтборСтрок = + Новый ФиксированнаяСтруктура("ВидДоступа", ТекущиеДанные.ВидДоступа); КонецЕсли; Иначе - Контекст.Элементы.ТипыВидовДоступа.ТекущаяСтраница = Контекст.Элементы.ОбычныйВидДоступа; + Элементы.ТипыВидовДоступа.ТекущаяСтраница = + Элементы.ОбычныйВидДоступа; КонецЕсли; Иначе - Контекст.Элементы.ТипыВидовДоступа.ТекущаяСтраница = Контекст.Элементы.ВидДоступаЧерезПраваПоЗначениямДоступа; + Элементы.ТипыВидовДоступа.ТекущаяСтраница = + Элементы.ВидДоступаЧерезПраваПоЗначениямДоступа; КонецЕсли; + Если ТекущиеДанные.ВидДоступа = Форма.ВидДоступаПользователи Тогда + ШаблонНадписи = ?( + ТекущиеДанные.ДоступРазрешен, + НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'"), + НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'") ); - // Обновление поля НадписьВидДоступа - Контекст.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ТекущиеДанные.ВидДоступа = Контекст.ВидДоступаПользователи, - ?(ТекущиеДанные.ДоступРазрешен, - НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'"), - НСтр("ru = 'Разрешенные значения (%1) - текущий пользователь всегда разрешен'") ), - ?(ТекущиеДанные.ВидДоступа = Контекст.ВидДоступаВнешниеПользователи, - ?(ТекущиеДанные.ДоступРазрешен, - НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'"), - НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'") ), - ?(ТекущиеДанные.ДоступРазрешен, - НСтр("ru = 'Запрещенные значения (%1)'"), - НСтр("ru = 'Разрешенные значения (%1)'") ) - ) - ), + ИначеЕсли ТекущиеДанные.ВидДоступа = Форма.ВидДоступаВнешниеПользователи Тогда + ШаблонНадписи = ?( + ТекущиеДанные.ДоступРазрешен, + НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'"), + НСтр("ru = 'Запрещенные значения (%1) - текущий внешний пользователь всегда разрешен'") ); + Иначе + ШаблонНадписи = ?( + ТекущиеДанные.ДоступРазрешен, + НСтр("ru = 'Запрещенные значения (%1)'"), + НСтр("ru = 'Разрешенные значения (%1)'") ); + КонецЕсли; + + // Обновление поля НадписьВидДоступа. + Форма.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонНадписи, Строка(ТекущиеДанные.ВидДоступа)); - ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, ТекущиеДанные); + ОбновитьПредставлениеИспользованияВидаДоступа(Форма, ТекущиеДанные); Иначе - Контекст.ТекущийВидДоступа = Неопределено; - Контекст.Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("ВидДоступа", Неопределено); + Форма.ТекущийВидДоступа = Неопределено; + Элементы.ЗначенияДоступа.ОтборСтрок = + Новый ФиксированнаяСтруктура("ВидДоступа", Неопределено); - Если Контекст.Объект.ВидыДоступа.Количество() = 0 Тогда - Контекст.Объект.ЗначенияДоступа.Очистить(); + Если Форма.Объект.ВидыДоступа.Количество() = 0 Тогда + Форма.Объект.ЗначенияДоступа.Очистить(); КонецЕсли; КонецЕсли; - Контекст.ТекущийТипЗначенияДоступа = ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.ТекущийТипЗначенияДоступа); - Контекст.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений; - // + Форма.ТекущийТипЗначенияДоступа = ?( + ТекущиеДанные = Неопределено, + Неопределено, + ТекущиеДанные.ТекущийТипЗначенияДоступа); + + Форма.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений; + Если ЗначенияЗадаются Тогда - Для каждого ОписаниеТипаВидаДоступа Из Контекст.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа)) Цикл - Контекст.ТекущиеТипыЗначенийДоступа.Добавить(ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, ОписаниеТипаВидаДоступа.ПредставлениеТипа); + Отбор = Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа); + ОписаниеТиповВидовДоступа = Форма.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Отбор); + Для каждого ОписаниеТипаВидаДоступа Из ОписаниеТиповВидовДоступа Цикл + + Форма.ТекущиеТипыЗначенийДоступа.Добавить( + ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, + ОписаниеТипаВидаДоступа.ПредставлениеТипа); КонецЦикла; Иначе Если ТекущиеДанные <> Неопределено Тогда - Отбор = Новый Структура("ВидДоступа", Контекст.Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа); - Для каждого Строка Из Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл - Контекст.Объект.ЗначенияДоступа.Удалить(Строка); + Отбор = Новый Структура("ВидДоступа", Элементы.ВидыДоступа.ТекущиеДанные.ВидДоступа); + Для каждого Строка Из Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор) Цикл + Форма.Объект.ЗначенияДоступа.Удалить(Строка); КонецЦикла КонецЕсли; КонецЕсли; - // - Если Контекст.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда - Контекст.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'")); + + Если Форма.ТекущиеТипыЗначенийДоступа.Количество() = 0 Тогда + Форма.ТекущиеТипыЗначенийДоступа.Добавить(Неопределено, НСтр("ru = 'Неопределено'")); КонецЕсли; - Контекст.Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются; - Контекст.Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы.ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются; + Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются; + + Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы + .ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Контекст, ОписаниеВидаДоступа) +Процедура ОбновитьПредставлениеИспользованияВидаДоступа(Форма, ОписаниеВидаДоступа) Если ОписаниеВидаДоступа.Предустановленный Тогда - КоличествоЗначений = Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа)).Количество(); + Отбор = Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа); + КоличествоЗначений = Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор).Количество(); Если КоличествоЗначений = 0 Тогда ЧислоИПредмет = НСтр("ru = 'не назначены'"); Иначе - ПрописьЧисла = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = 'значение,значения,значений,,,,,,0'")); - ЧислоИПредмет = СтрЗаменить(ПрописьЧислаИПредмета, ПрописьЧисла, Формат(КоличествоЗначений, "ЧГ=") + " "); + ПрописьЧисла = ЧислоПрописью( + КоличествоЗначений, + "Л = ru_RU", + НСтр("ru = ',,,,,,,,0'")); + + ПрописьЧислаИПредмета = ЧислоПрописью( + КоличествоЗначений, + "Л = ru_RU", + НСтр("ru = 'значение,значения,значений,,,,,,0'")); + + ЧислоИПредмет = СтрЗаменить( + ПрописьЧислаИПредмета, + ПрописьЧисла, + Формат(КоличествоЗначений, "ЧГ=") + " "); + КонецЕсли; ОписаниеВидаДоступа.Использование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(ОписаниеВидаДоступа.ДоступРазрешен, @@ -764,17 +864,17 @@ Иначе ОписаниеВидаДоступа.Использование = ?(ОписаниеВидаДоступа.ДоступРазрешен, - НСтр("ru = 'Все разрешены, исключения назначаются в группах доступа'"), - НСтр("ru = 'Все запрещены, исключения назначаются в группах доступа'")); + НСтр("ru = 'Все разрешены, исключения назначаются в группах доступа'"), + НСтр("ru = 'Все запрещены, исключения назначаются в группах доступа'")); КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста -Процедура ОбновитьНомерСтрокиПоВиду(Контекст, ОписаниеВидаДоступа) +Процедура ОбновитьНомерСтрокиПоВиду(Форма, ОписаниеВидаДоступа) Отбор = Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа); - ЗначенияДоступаПоВиду = Контекст.Объект.ЗначенияДоступа.НайтиСтроки(Отбор); + ЗначенияДоступаПоВиду = Форма.Объект.ЗначенияДоступа.НайтиСтроки(Отбор); ТекущийНомер = 1; Для каждого Строка Из ЗначенияДоступаПоВиду Цикл @@ -800,22 +900,30 @@ Если ТипыЗначенияДоступа.Количество() = 2 Тогда - Если ТипыЗначенияДоступа.НайтиПоЗначению(ПользовательПустаяСсылка) <> Неопределено - И ТипыЗначенияДоступа.НайтиПоЗначению(ГруппаПользователейПустаяСсылка) <> Неопределено Тогда + Если ТипыЗначенияДоступа.НайтиПоЗначению( + ПользовательПустаяСсылка) <> Неопределено + + И ТипыЗначенияДоступа.НайтиПоЗначению( + ГруппаПользователейПустаяСсылка) <> Неопределено Тогда ТекущийТипЗначенияДоступа = ПользовательПустаяСсылка; Возврат Истина; КонецЕсли; - Если ТипыЗначенияДоступа.НайтиПоЗначению(ВнешнийПользовательПустаяСсылка) <> Неопределено - И ТипыЗначенияДоступа.НайтиПоЗначению(ГруппаВнешнихПользователейПустаяСсылка) <> Неопределено Тогда + Если ТипыЗначенияДоступа.НайтиПоЗначению( + ВнешнийПользовательПустаяСсылка) <> Неопределено + + И ТипыЗначенияДоступа.НайтиПоЗначению( + ГруппаВнешнихПользователейПустаяСсылка) <> Неопределено Тогда ТекущийТипЗначенияДоступа = ВнешнийПользовательПустаяСсылка; Возврат Истина; КонецЕсли; КонецЕсли; - Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент(НСтр("ru = 'Выбор типа данных'"), ТипыЗначенияДоступа[0]); + Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент( + НСтр("ru = 'Выбор типа данных'"), ТипыЗначенияДоступа[0]); + Если Элемент <> Неопределено Тогда ТекущийТипЗначенияДоступа = Элемент.Значение; Возврат Истина; @@ -829,288 +937,83 @@ &НаКлиенте Функция ТекстВопросаОбновитьГруппыДоступаПрофиля() - Возврат НСтр("ru = 'Обновить группы доступа, использующие этот профиль? - | - |1. Удалить лишние виды доступа и заданные для них значения доступа. - | - |2. Добавить недостающие виды доступа.'"); + Возврат + НСтр("ru = 'Обновить группы доступа, использующие этот профиль? + | + |1. Удалить лишние виды доступа и заданные для них значения доступа. + | + |2. Добавить недостающие виды доступа.'"); + КонецФункции //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей &НаСервере -Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) +Процедура ОбработатьИнтерфейсРолей(Действие, + ОсновнойПараметр = Неопределено, + ДополнительныйПараметр = Неопределено) - Если ТаблицаЗначенийДляЧтения Тогда - Возврат Объект.Роли.Выгрузить(); + ПараметрыДействия = Новый Структура; + ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); + ПараметрыДействия.Вставить("ДополнительныйПараметр", ДополнительныйПараметр); + ПараметрыДействия.Вставить("Форма", ЭтаФорма); + ПараметрыДействия.Вставить("КоллекцияРолей", Объект.Роли); + + ПараметрыДействия.Вставить("СкрытьРольПолныеПрава", + Объект.Ссылка <> Справочники.ПрофилиГруппДоступа.Администратор); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыДействия.Вставить("ТипПользователя", + Перечисления.ТипыПользователей.ПользовательОбластиДанных); + Иначе + ПараметрыДействия.Вставить("ТипПользователя", + Перечисления.ТипыПользователей.ПользовательЛокальногоРешения); КонецЕсли; - Возврат Объект.Роли; + ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция СформироватьДанныеВыбораПользователя(Знач Текст, + Знач ВключаяГруппы = Истина, + Знач ВключаяВнешнихПользователей = Неопределено, + Знач БезПользователей = Ложь) Экспорт + + Возврат Пользователи.СформироватьДанныеВыбораПользователя( + Текст, + ВключаяГруппы, + ВключаяВнешнихПользователей, + БезПользователей); КонецФункции -&НаСервере -Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено, Знач РазрешитьПросмотрТолькоВыбранных = Ложь) +&НаСервереБезКонтекста +Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина) - Если ТолькоПросмотрРолей <> Неопределено Тогда - Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей; - Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - КонецЕсли; - - Если РазрешитьПросмотрТолькоВыбранных Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность = Ложь; - КонецЕсли; - -КонецПроцедуры - - -&НаКлиенте -Процедура РазвернутьПодсистемыРолей(Коллекция = Неопределено); - - Если Коллекция = Неопределено Тогда - Коллекция = Роли.ПолучитьЭлементы(); - КонецЕсли; - - // Развернуть все - Для каждого Строка ИЗ Коллекция Цикл - Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор()); - Если НЕ Строка.ЭтоРоль Тогда - РазвернутьПодсистемыРолей(Строка.ПолучитьЭлементы()); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьДеревоРолей() - - Если НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина; - ПоказатьТолькоВыбранныеРоли = Истина; - КонецЕсли; - - // Запоминание текущей строки - ТекущаяПодсистема = ""; - ТекущаяРоль = ""; - // - Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда - ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока); - Если ТекущиеДанные.ЭтоРоль Тогда - ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя); - ТекущаяРоль = ТекущиеДанные.Имя; - Иначе - ТекущаяПодсистема = ТекущиеДанные.Имя; - ТекущаяРоль = ""; - КонецЕсли; - КонецЕсли; - - ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей).Скопировать(); - ДобавитьИменаНесуществующихРолей(ДеревоРолей); - ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); - ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); - ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); - - ЗначениеВРеквизитФормы(ДеревоРолей, "Роли"); - - Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево); - - // Восстановление текущей строки - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеПодсистемы = НайденныеСтроки[0]; - ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы); - СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы); - Если ЗначениеЗаполнено(ТекущаяРоль) Тогда - НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль)); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор(); - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли); - СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли); - Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); - - Если Строка.ЭтоРоль Тогда - Если СкрытьРольПолныеПрава - И (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы"))Тогда - - Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 6; - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - КонецЕсли; - Иначе - Если Строка.Строки.Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 5; - Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений) - - Если СтрокаДереваЗначений.Родитель = Неопределено Тогда - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы(); - Иначе - ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель); - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы(); - КонецЕсли; - - Возврат ДанныеФормыКоллекцияЭлементовДерева; + Возврат УправлениеДоступомСлужебный.СформироватьДанныеВыбораЗначенияДоступа( + Текст, + ВидДоступа, + ВключаяГруппы); КонецФункции - -&НаСервере -Процедура ОбновитьСоставРолей(ИдентификаторСтроки, Добавить); +&НаСервереБезКонтекста +Процедура НачальноеЗаполнениеПрофилейГруппДоступа(Знач Профиль = Неопределено, + Знач ОбновитьГруппыДоступа = Ложь, + Знач НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа = Истина) Экспорт - Если ИдентификаторСтроки = Неопределено Тогда - // Обработка всех - КоллекцияРолей = КоллекцияРолей(); - КоллекцияРолей.Очистить(); - Если Добавить Тогда - ВсеРоли = ПользователиСерверПовтИсп.ВсеРоли(); - Для каждого ОписаниеРоли Из ВсеРоли Цикл - Если ОписаниеРоли.Имя <> "ПолныеПрава" И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда - КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ПоказатьТолькоВыбранныеРоли Тогда - Если КоллекцияРолей.Количество() > 0 Тогда - ОбновитьДеревоРолей(); - Иначе - Роли.ПолучитьЭлементы().Очистить(); - КонецЕсли; - // Возврат - Возврат; - // Возврат - КонецЕсли; - Иначе - ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ТекущиеДанные.ЭтоРоль Тогда - ДобавитьУдалитьРоль(ТекущиеДанные.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(ТекущиеДанные.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЕсли; - - ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы()); - - Модифицированность = Истина; + УправлениеДоступомСлужебный.НачальноеЗаполнениеПрофилейГруппДоступа( + Профиль, + ОбновитьГруппыДоступа, + НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа); КонецПроцедуры -&НаСервере -Процедура ДобавитьУдалитьРоль(Знач Роль, Знач Добавить) +&НаСервереБезКонтекста +Функция ОписаниеПоставляемогоПрофиляНаСервере(Знач Профиль) - НайденныеРоли = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Роль)); + Возврат УправлениеДоступомСлужебный.ОписаниеПоставляемогоПрофиля(Профиль); - Если Добавить Тогда - Если НайденныеРоли.Количество() = 0 Тогда - КоллекцияРолей().Добавить().Роль = Роль; - КонецЕсли; - Иначе - Если НайденныеРоли.Количество() > 0 Тогда - КоллекцияРолей().Удалить(НайденныеРоли[0]); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьУдалитьРолиПодсистемы(Знач Коллекция, Знач Добавить) - - Для каждого Строка Из Коллекция Цикл - Если Строка.ЭтоРоль Тогда - ДобавитьУдалитьРоль(Строка.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(Строка.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьПометкуВыбранныхРолей(Знач Коллекция) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - Если Строка.ЭтоРоль Тогда - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - Иначе - ОбновитьПометкуВыбранныхРолей(Строка.ПолучитьЭлементы()); - Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.Пометка = Истина; - Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл - Если НЕ Элемент.Пометка Тогда - Строка.Пометка = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьИменаНесуществующихРолей(ДеревоРолей) - - // Добавление несуществующих ролей - Для каждого Строка Из КоллекцияРолей() Цикл - Если ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, Строка.Роль), Истина).Количество() = 0 Тогда - СтрокаДерева = ДеревоРолей.Строки.Вставить(0); - СтрокаДерева.ЭтоРоль = Истина; - СтрокаДерева.Имя = Строка.Роль; - СтрокаДерева.Синоним = "? " + Строка.Роль; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - +КонецФункции diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html index aa0c8dd34..1082fca26 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

        diff --git a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl index 7530723f8..b65674fd3 100644 --- a/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl +++ b/SSL/src/Catalogs/ПрофилиГруппДоступа/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -13,7 +15,7 @@ // Заполнение множества возможных пустых ссылок, используемых как типы ссылок. Если Ссылка = Справочники.ПрофилиГруппДоступа.Администратор Тогда - ТипыСсылок.Загрузить(УправлениеДоступомСерверПовтИсп.ТипыСсылок()); + ТипыСсылок.Загрузить(УправлениеДоступомСлужебныйПовтИсп.ТипыСсылок()); ИначеЕсли ТипыСсылок.Количество() <> 0 Тогда ТипыСсылок.Очистить(); КонецЕсли; @@ -44,7 +46,7 @@ КонецЦикла; // Удаление всегда используемых видов доступа. - ВидыДоступаИспользуемыеВсегда = УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаИспользуетсяВсегда", Истина)); + ВидыДоступаИспользуемыеВсегда = УправлениеДоступомСлужебный.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаИспользуетсяВсегда", Истина)); Для каждого СвойстваВидаДоступа Из ВидыДоступаИспользуемыеВсегда Цикл Для каждого Строка ИЗ ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа", СвойстваВидаДоступа.ВидДоступа)) Цикл ВидыДоступа.Удалить(Строка); @@ -55,7 +57,7 @@ Если Ссылка = Справочники.ПрофилиГруппДоступа.Администратор Тогда ПоставляемыйПрофильИзменен = Ложь; Иначе - ПоставляемыйПрофильИзменен = УправлениеДоступомСобытия.ПоставляемыйПрофильИзменен(ЭтотОбъект); + ПоставляемыйПрофильИзменен = УправлениеДоступомСлужебный.ПоставляемыйПрофильИзменен(ЭтотОбъект); КонецЕсли; КонецЕсли; @@ -130,7 +132,7 @@ Если НЕ ЭтоГруппа Тогда Если ДополнительныеСвойства.Свойство("ОбновитьГруппыДоступаПрофиля") Тогда - УправлениеДоступом.ОбновитьГруппыДоступаПрофиля(Ссылка, Ложь); + УправлениеДоступомСлужебный.ОбновитьГруппыДоступаПрофиля(Ссылка, Ложь); КонецЕсли; // Обновление таблиц и значений групп доступа. @@ -145,8 +147,8 @@ Запрос.УстановитьПараметр("Профиль", Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл - УправлениеДоступом.ОбновитьТаблицыГруппДоступа(Выборка.Ссылка); - УправлениеДоступом.ЗаписатьЗначенияГруппДоступа(Выборка.Ссылка); + УправлениеДоступомСлужебный.ОбновитьТаблицыГруппДоступа(Выборка.Ссылка); + УправлениеДоступомСлужебный.ЗаписатьЗначенияГруппДоступа(Выборка.Ссылка); КонецЦикла; Если НЕ ДополнительныеСвойства.Свойство("НеОбновлятьРолиПользователей") Тогда @@ -192,7 +194,7 @@ // Процедура ЗаполнитьТаблицыРолейПрофиляГруппДоступа(Знач Профиль) - ПраваОМДРолей = УправлениеДоступомСерверПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей(); + ПраваОМДРолей = УправлениеДоступомСлужебныйПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПраваОМДРолей", ПраваОМДРолей); @@ -228,3 +230,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl index df06f6198..045723e86 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Commands/ВыполнитьСейчас/CommandModule.bsl @@ -59,7 +59,7 @@ ЭтаФорма.ПараметрыФоновогоЗадания.Добавить(ПараметрыОбработчика); ЭтаФорма.ПараметрыФоновогоЗадания.Добавить(ФормаДлительнойОперации); - ЭтаФорма.ПодключитьОбработчикОжидания("ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); + ЭтаФорма.ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеФоновогоЗадания", ПараметрыОбработчика.ТекущийИнтервал, Истина); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form index 5ac96c538..64a14c16e 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Form.form @@ -83,6 +83,7 @@ true true true + true ru ЧН=0; ЧГ=0 @@ -492,12 +493,12 @@ Заполнить <key>ru</key> - <value>Заполнить</value> + <value>Заполнить...</value> 1 ru - Заполнить + Указать все параметры ftp соединения одной строкой true diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html index 46e4bd6c7..4abed671f 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Help/ru.html @@ -1,5 +1,5 @@ - -

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

        + +

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

        Реквизиты:

        @@ -16,4 +16,6 @@

        -
      • Заполнить
      • Позволят ввести все параметры одной строкой.
        \ No newline at end of file +
        Позволят ввести все параметры одной строкой.

         

        +

        +

        См. также: Рассылка отчетов, Рассылки отчетов, Общая информация о формах.

        \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl index 249c846a4..3a94d8885 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ПараметрыFTP/Module.bsl @@ -3,12 +3,14 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + РеквизитСправочника = Метаданные.Справочники.РассылкиОтчетов.Реквизиты.FTPПорт; + ЗаполнитьЗначенияСвойств(Элементы.Порт, РеквизитСправочника, "Подсказка, МаксимальноеЗначение, МинимальноеЗначение"); + ЗаполнитьЗначенияСвойств(ЭтаФорма, Параметры, "Сервер, Каталог, Порт, Логин, Пароль, ПассивноеСоединение"); Если ЭтаФорма.Сервер = "" Тогда ЭтаФорма.Сервер = "сервер"; diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаВыбораГруппы/Help/ru.html index eebbbedb8..0da4fafd7 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/ФормаГруппы/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html index bfa170c99..380dba2e6 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаГруппы/Help/ru.html @@ -1 +1 @@ -Позволяет задать Наименование и Группу для группы рассылок отчетов. \ No newline at end of file +Позволяет задать Наименование и Группу для группы рассылок отчетов. \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form index a000a43f4..c996a55e7 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаСписка/Form.form @@ -25,7 +25,7 @@ НаименованиеРасширеннаяПодсказка - 68 + 72 Label true true @@ -44,8 +44,10 @@ Left true + 35 true true + true @@ -64,7 +66,7 @@ КартинкаРасширеннаяПодсказка - 71 + 75 Label true true @@ -111,7 +113,7 @@ ПоследнийЗапускРасширеннаяПодсказка - 73 + 77 Label true true @@ -150,7 +152,7 @@ ПоследнийЗапускСКартинкойРасширеннаяПодсказка - 70 + 74 Label true true @@ -185,7 +187,7 @@ РасписаниеРасширеннаяПодсказка - 76 + 80 Label true true @@ -206,7 +208,6 @@ true true - true true StdPicture.SetTime @@ -230,7 +231,7 @@ ПериодичностьРасписанияРасширеннаяПодсказка - 78 + 82 Label true true @@ -247,9 +248,10 @@ Enter Left - 10 + 2 true true + false true @@ -267,7 +269,7 @@ РасписаниеСКартинкойРасширеннаяПодсказка - 75 + 79 Label true true @@ -295,7 +297,7 @@ АвторРасширеннаяПодсказка - 80 + 84 Label true true @@ -331,7 +333,7 @@ ПодготовленаРасширеннаяПодсказка - 82 + 86 Label true true @@ -362,7 +364,7 @@ СостояниеРасширеннаяПодсказка - 84 + 88 Label true true @@ -397,7 +399,7 @@ АрхивироватьРасширеннаяПодсказка - 86 + 90 Label true true @@ -428,7 +430,7 @@ ТипПолучателейРассылкиРасширеннаяПодсказка - 88 + 92 Label true true @@ -463,7 +465,7 @@ ВидПочтовогоАдресаПолучателейРасширеннаяПодсказка - 90 + 94 Label true true @@ -494,10 +496,10 @@ СписокСтрокаПоиска - 59 + 63 СписокСтрокаПоискаРасширеннаяПодсказка - 61 + 65 Label true true @@ -507,7 +509,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 60 + 64 true Список @@ -517,10 +519,10 @@ СписокСостояниеПросмотра - 62 + 66 СписокСостояниеПросмотраРасширеннаяПодсказка - 64 + 68 Label true true @@ -530,7 +532,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 63 + 67 true ViewStatusAddition @@ -541,10 +543,10 @@ СписокУправлениеПоиском - 65 + 69 СписокУправлениеПоискомРасширеннаяПодсказка - 67 + 71 Label true true @@ -554,7 +556,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 66 + 70 true SearchControlAddition @@ -565,7 +567,7 @@ СписокРасширеннаяПодсказка - 58 + 62 Label true true @@ -576,6 +578,64 @@ СписокКонтекстноеМеню 2 + + СписокКонтекстноеМенюСправочникРассылкиОтчетовВыполнитьСейчас + 53 + true + true + + true + + + Items.Список.CurrentData.Ref + + + СписокКонтекстноеМенюСправочникРассылкиОтчетовВыполнитьСейчасРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Catalog.РассылкиОтчетов.Command.ВыполнитьСейчас + Normal + Auto + true + true + UserCmds + Auto + + + СписокКонтекстноеМенюСправочникРассылкиОтчетовСобытияРассылки + 54 + true + true + + true + + + Items.Список.CurrentData.Ref + + + СписокКонтекстноеМенюСправочникРассылкиОтчетовСобытияРассылкиРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Catalog.РассылкиОтчетов.Command.СобытияРассылки + Normal + Auto + true + true + UserCmds + Auto + true HierarchicalList @@ -633,7 +693,7 @@ ФормаИзменитьФормуРасширеннаяПодсказка - 54 + 56 Label true true @@ -664,7 +724,7 @@ ГруппаКнопокРасширеннаяПодсказка - 53 + 55 Label true true @@ -689,7 +749,7 @@ ВыполнитьСейчасРасширеннаяПодсказка - 55 + 57 Label true true @@ -718,7 +778,7 @@ СобытияРассылкиРасширеннаяПодсказка - 56 + 58 Label true true @@ -744,7 +804,7 @@ ФормаСправкаРасширеннаяПодсказка - 57 + 59 Label true true diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form index 72a15a52e..6cb4c9eb9 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Form.form @@ -16,7 +16,7 @@ НаименованиеРасширеннаяПодсказка - 695 + 701 Label true true @@ -58,7 +58,7 @@ Right ПодготовленаРасширеннаяПодсказка - 697 + 703 Label true true @@ -93,7 +93,7 @@ ГруппаРассылкаПодготовленаРасширеннаяПодсказка - 694 + 700 Label true true @@ -134,7 +134,7 @@ ВидРассылкиРасширеннаяПодсказка - 700 + 706 Label true true @@ -153,9 +153,10 @@ Left true - 5 + 30 true true + false true false false @@ -192,7 +193,7 @@ - Style.ФонВыделенияЦвет + Style.ФонУправляющегоПоля Normal @@ -216,7 +217,7 @@ ВидПочтовогоАдресаАвтораРасширеннаяПодсказка - 704 + 710 Label true true @@ -242,8 +243,6 @@ true true - true - false true false false @@ -269,7 +268,7 @@ ВидыРассылкиЛичнаяРасширеннаяПодсказка - 703 + 709 Label true true @@ -303,7 +302,7 @@ ТипПолучателейРассылкиРасширеннаяПодсказка - 707 + 713 Label true true @@ -333,8 +332,6 @@ true true - true - false true true true @@ -359,7 +356,7 @@ ВидыРассылкиДляПолучателейРасширеннаяПодсказка - 706 + 712 Label true true @@ -386,11 +383,12 @@ ru Виды рассылки - 25 + 35 + false false ВидыРассылкиРасширеннаяПодсказка - 702 + 708 Label true true @@ -413,7 +411,7 @@ Декорация10РасширеннаяПодсказка - 709 + 715 Label true true @@ -449,7 +447,7 @@ ГруппаВидРассылкиРасширеннаяПодсказка - 699 + 705 Label true true @@ -500,7 +498,7 @@ ПредставлениеРасширеннаяПодсказка - 727 + 733 Label true true @@ -545,7 +543,7 @@ ОтчетыДобавитьОтчетРасширеннаяПодсказка - 713 + 719 Label true true @@ -571,7 +569,7 @@ ОтчетыДобавитьДополнительныйОтчетРасширеннаяПодсказка - 714 + 720 Label true true @@ -602,7 +600,7 @@ ОтчетыВключитьВРассылкуРасширеннаяПодсказка - 712 + 718 Label true true @@ -637,7 +635,7 @@ ОтчетыГруппаСтандартныхДействийРасширеннаяПодсказка - 715 + 721 Label true true @@ -659,7 +657,7 @@ ОтчетыСформироватьОтчетРасширеннаяПодсказка - 716 + 722 Label true true @@ -699,10 +697,10 @@ ОтчетыСтрокаПоиска - 718 + 724 ОтчетыСтрокаПоискаРасширеннаяПодсказка - 720 + 726 Label true true @@ -712,7 +710,7 @@ ОтчетыСтрокаПоискаКонтекстноеМеню - 719 + 725 true Отчеты @@ -722,10 +720,10 @@ ОтчетыСостояниеПросмотра - 721 + 727 ОтчетыСостояниеПросмотраРасширеннаяПодсказка - 723 + 729 Label true true @@ -735,7 +733,7 @@ ОтчетыСостояниеПросмотраКонтекстноеМеню - 722 + 728 true ViewStatusAddition @@ -746,10 +744,10 @@ ОтчетыУправлениеПоиском - 724 + 730 ОтчетыУправлениеПоискомРасширеннаяПодсказка - 726 + 732 Label true true @@ -759,7 +757,7 @@ ОтчетыУправлениеПоискомКонтекстноеМеню - 725 + 731 true SearchControlAddition @@ -770,7 +768,7 @@ ОтчетыРасширеннаяПодсказка - 717 + 723 Label true true @@ -790,13 +788,14 @@ true true MultiRow -
        true
        1 1 AutoUse AutoUse true true + false + false false true Auto @@ -825,7 +824,7 @@ Декорация4РасширеннаяПодсказка - 737 + 743 Label true true @@ -894,7 +893,7 @@ НастройкиТекущегоОтчетаИспользование1РасширеннаяПодсказка - 750 + 756 Label true true @@ -932,7 +931,7 @@ true НастройкиТекущегоОтчетаПредставление1РасширеннаяПодсказка - 752 + 758 Label true true @@ -974,7 +973,7 @@ НастройкиТекущегоОтчетаЗначение1РасширеннаяПодсказка - 754 + 760 Label true true @@ -1013,10 +1012,10 @@ ПустыеНастройкиСтрокаПоиска - 741 + 747 ПустыеНастройкиСтрокаПоискаРасширеннаяПодсказка - 743 + 749 Label true true @@ -1026,7 +1025,7 @@ ПустыеНастройкиСтрокаПоискаКонтекстноеМеню - 742 + 748 true ПустыеНастройки @@ -1036,10 +1035,10 @@ ПустыеНастройкиСостояниеПросмотра - 744 + 750 ПустыеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 746 + 752 Label true true @@ -1049,7 +1048,7 @@ ПустыеНастройкиСостояниеПросмотраКонтекстноеМеню - 745 + 751 true ViewStatusAddition @@ -1060,10 +1059,10 @@ ПустыеНастройкиУправлениеПоиском - 747 + 753 ПустыеНастройкиУправлениеПоискомРасширеннаяПодсказка - 749 + 755 Label true true @@ -1073,7 +1072,7 @@ ПустыеНастройкиУправлениеПоискомКонтекстноеМеню - 748 + 754 true SearchControlAddition @@ -1084,7 +1083,7 @@ ПустыеНастройкиРасширеннаяПодсказка - 740 + 746 Label true true @@ -1142,7 +1141,7 @@ ПустаяСтраницаРасширеннаяПодсказка - 739 + 745 Label true true @@ -1188,7 +1187,7 @@ None КомпоновщикНастроекПользовательскиеНастройкиИспользованиеРасширеннаяПодсказка - 775 + 781 Label true true @@ -1223,7 +1222,7 @@ КомпоновщикНастроекПользовательскиеНастройкиКартинкаНастройкиРасширеннаяПодсказка - 778 + 784 Label true true @@ -1263,7 +1262,7 @@ КомпоновщикНастроекПользовательскиеНастройкиНастройкаРасширеннаяПодсказка - 780 + 786 Label true true @@ -1300,7 +1299,7 @@ КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонокРасширеннаяПодсказка - 777 + 783 Label true true @@ -1328,7 +1327,7 @@ КомпоновщикНастроекПользовательскиеНастройкиВидСравненияРасширеннаяПодсказка - 782 + 788 Label true true @@ -1371,7 +1370,7 @@ КомпоновщикНастроекПользовательскиеНастройкиКартинкаЗначенияРасширеннаяПодсказка - 785 + 791 Label true true @@ -1412,7 +1411,7 @@ true КомпоновщикНастроекПользовательскиеНастройкиЗначениеРасширеннаяПодсказка - 787 + 793 Label true true @@ -1454,7 +1453,7 @@ КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонок1РасширеннаяПодсказка - 784 + 790 Label true true @@ -1480,7 +1479,7 @@ КомпоновщикНастроекПользовательскиеНастройкиРедактированиеВФормеОтчетаРасширеннаяПодсказка - 789 + 795 Label true true @@ -1510,10 +1509,10 @@ КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоиска - 766 + 772 КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка - 768 + 774 Label true true @@ -1523,7 +1522,7 @@ КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню - 767 + 773 true КомпоновщикНастроекПользовательскиеНастройки @@ -1533,10 +1532,10 @@ КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотра - 769 + 775 КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка - 771 + 777 Label true true @@ -1546,7 +1545,7 @@ КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню - 770 + 776 true ViewStatusAddition @@ -1557,10 +1556,10 @@ КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоиском - 772 + 778 КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка - 774 + 780 Label true true @@ -1570,7 +1569,7 @@ КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню - 773 + 779 true SearchControlAddition @@ -1581,7 +1580,7 @@ КомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка - 765 + 771 Label true true @@ -1634,7 +1633,7 @@ СтраницаКомпоновщикРасширеннаяПодсказка - 764 + 770 Label true true @@ -1694,7 +1693,7 @@ НастройкиТекущегоОтчетаИспользованиеРасширеннаяПодсказка - 810 + 816 Label true true @@ -1732,7 +1731,7 @@ true НастройкиТекущегоОтчетаПредставлениеРасширеннаяПодсказка - 812 + 818 Label true true @@ -1778,7 +1777,7 @@ НастройкиТекущегоОтчетаЗначениеРасширеннаяПодсказка - 814 + 820 Label true true @@ -1825,10 +1824,10 @@ НастройкиТекущегоОтчетаСтрокаПоиска - 801 + 807 НастройкиТекущегоОтчетаСтрокаПоискаРасширеннаяПодсказка - 803 + 809 Label true true @@ -1838,7 +1837,7 @@ НастройкиТекущегоОтчетаСтрокаПоискаКонтекстноеМеню - 802 + 808 true НастройкиТекущегоОтчета @@ -1848,10 +1847,10 @@ НастройкиТекущегоОтчетаСостояниеПросмотра - 804 + 810 НастройкиТекущегоОтчетаСостояниеПросмотраРасширеннаяПодсказка - 806 + 812 Label true true @@ -1861,7 +1860,7 @@ НастройкиТекущегоОтчетаСостояниеПросмотраКонтекстноеМеню - 805 + 811 true ViewStatusAddition @@ -1872,10 +1871,10 @@ НастройкиТекущегоОтчетаУправлениеПоиском - 807 + 813 НастройкиТекущегоОтчетаУправлениеПоискомРасширеннаяПодсказка - 809 + 815 Label true true @@ -1885,7 +1884,7 @@ НастройкиТекущегоОтчетаУправлениеПоискомКонтекстноеМеню - 808 + 814 true SearchControlAddition @@ -1896,7 +1895,7 @@ НастройкиТекущегоОтчетаРасширеннаяПодсказка - 800 + 806 Label true true @@ -1954,7 +1953,7 @@ СтраницаНастройкиТекущегоОтчетаРасширеннаяПодсказка - 799 + 805 Label true true @@ -1983,7 +1982,7 @@ СтраницыНастроекОтчетаРасширеннаяПодсказка - 738 + 744 Label true true @@ -2011,7 +2010,7 @@ СтраницаОтчетыРасширеннаяПодсказка - 711 + 717 Label true true @@ -2053,7 +2052,7 @@ ВыполнятьПоРасписаниюРасширеннаяПодсказка - 826 + 832 Label true true @@ -2094,7 +2093,7 @@ ПериодичностьРасписанияРасширеннаяПодсказка - 829 + 835 Label true true @@ -2148,7 +2147,7 @@ ВремяНачалаРасширеннаяПодсказка - 833 + 839 Label true true @@ -2196,7 +2195,7 @@ СтраницаВремяНачалаРасширеннаяПодсказка - 832 + 838 Label true true @@ -2223,7 +2222,7 @@ ИзменитьРасписаниеРасширеннаяПодсказка - 836 + 842 Label true true @@ -2255,7 +2254,7 @@ СтраницаИзменитьРасписаниеРасширеннаяПодсказка - 835 + 841 Label true true @@ -2284,7 +2283,7 @@ СтраницыВремяИлиИзменитьРасширеннаяПодсказка - 831 + 837 Label true true @@ -2307,7 +2306,7 @@ Декорация9РасширеннаяПодсказка - 837 + 843 Label true true @@ -2338,7 +2337,7 @@ ЗаполнитьРасписаниеПоШаблонуРасширеннаяПодсказка - 838 + 844 Label true true @@ -2370,7 +2369,7 @@ ПараметрыВыполненияПоРасписаниюРасширеннаяПодсказка - 828 + 834 Label true true @@ -2402,7 +2401,7 @@ ГруппаПериодичностьРасширеннаяПодсказка - 825 + 831 Label true true @@ -2439,7 +2438,7 @@ Декорация5РасширеннаяПодсказка - 841 + 847 Label true true @@ -2474,7 +2473,7 @@ СтраницаНеВыбраноРасширеннаяПодсказка - 840 + 846 Label true true @@ -2511,7 +2510,7 @@ ПериодПовтораДнейРасширеннаяПодсказка - 844 + 850 Label true true @@ -2553,7 +2552,7 @@ Декорация6РасширеннаяПодсказка - 846 + 852 Label true true @@ -2588,7 +2587,7 @@ ГруппаСтрокаПериодПовтораДнейРасширеннаяПодсказка - 843 + 849 Label true true @@ -2619,7 +2618,7 @@ None ПредставлениеРасписания1РасширеннаяПодсказка - 847 + 853 Label true true @@ -2664,7 +2663,7 @@ СтраницаЕжедневноРасширеннаяПодсказка - 842 + 848 Label true true @@ -2702,7 +2701,7 @@ ПонедельникРасширеннаяПодсказка - 851 + 857 Label true true @@ -2740,7 +2739,7 @@ ВторникРасширеннаяПодсказка - 853 + 859 Label true true @@ -2778,7 +2777,7 @@ СредаРасширеннаяПодсказка - 855 + 861 Label true true @@ -2816,7 +2815,7 @@ ЧетвергРасширеннаяПодсказка - 857 + 863 Label true true @@ -2854,7 +2853,7 @@ ПятницаРасширеннаяПодсказка - 859 + 865 Label true true @@ -2892,7 +2891,7 @@ СубботаРасширеннаяПодсказка - 861 + 867 Label true true @@ -2930,7 +2929,7 @@ ВоскресеньеРасширеннаяПодсказка - 863 + 869 Label true true @@ -2965,7 +2964,7 @@ ГруппаДниНеделиРасширеннаяПодсказка - 850 + 856 Label true true @@ -2996,7 +2995,7 @@ None ПредставлениеРасписания2РасширеннаяПодсказка - 865 + 871 Label true true @@ -3041,7 +3040,7 @@ СтраницаЕженедельноРасширеннаяПодсказка - 849 + 855 Label true true @@ -3075,7 +3074,7 @@ Декорация1РасширеннаяПодсказка - 869 + 875 Label true true @@ -3113,7 +3112,7 @@ ДеньВМесяцеРасширеннаяПодсказка - 870 + 876 Label true true @@ -3155,7 +3154,7 @@ Декорация7РасширеннаяПодсказка - 872 + 878 Label true true @@ -3189,7 +3188,7 @@ ГиперссылкаНачалоКонецМесяцаРасширеннаяПодсказка - 873 + 879 Label true true @@ -3228,7 +3227,7 @@ Декорация8РасширеннаяПодсказка - 874 + 880 Label true true @@ -3263,7 +3262,7 @@ ГруппаСтрокаЕжемесячныхПараметровРасширеннаяПодсказка - 868 + 874 Label true true @@ -3304,7 +3303,7 @@ ЯнварьРасширеннаяПодсказка - 877 + 883 Label true true @@ -3342,7 +3341,7 @@ ФевральРасширеннаяПодсказка - 879 + 885 Label true true @@ -3380,7 +3379,7 @@ МартРасширеннаяПодсказка - 881 + 887 Label true true @@ -3415,7 +3414,7 @@ ГруппаКвартал1РасширеннаяПодсказка - 876 + 882 Label true true @@ -3455,7 +3454,7 @@ АпрельРасширеннаяПодсказка - 884 + 890 Label true true @@ -3493,7 +3492,7 @@ МайРасширеннаяПодсказка - 886 + 892 Label true true @@ -3531,7 +3530,7 @@ ИюньРасширеннаяПодсказка - 888 + 894 Label true true @@ -3566,7 +3565,7 @@ ГруппаКвартал2РасширеннаяПодсказка - 883 + 889 Label true true @@ -3598,7 +3597,7 @@ УстановитьПометкиРасширеннаяПодсказка - 891 + 897 Label true true @@ -3630,7 +3629,7 @@ ГруппаУстановитьПометкиРасширеннаяПодсказка - 890 + 896 Label true true @@ -3665,7 +3664,7 @@ ГруппаМесяцы1РасширеннаяПодсказка - 875 + 881 Label true true @@ -3706,7 +3705,7 @@ ИюльРасширеннаяПодсказка - 894 + 900 Label true true @@ -3744,7 +3743,7 @@ АвгустРасширеннаяПодсказка - 896 + 902 Label true true @@ -3782,7 +3781,7 @@ СентябрьРасширеннаяПодсказка - 898 + 904 Label true true @@ -3817,7 +3816,7 @@ ГруппаКвартал3РасширеннаяПодсказка - 893 + 899 Label true true @@ -3857,7 +3856,7 @@ ОктябрьРасширеннаяПодсказка - 901 + 907 Label true true @@ -3895,7 +3894,7 @@ НоябрьРасширеннаяПодсказка - 903 + 909 Label true true @@ -3933,7 +3932,7 @@ ДекабрьРасширеннаяПодсказка - 905 + 911 Label true true @@ -3968,7 +3967,7 @@ ГруппаКвартал4РасширеннаяПодсказка - 900 + 906 Label true true @@ -4000,7 +3999,7 @@ СнятьПометкиРасширеннаяПодсказка - 908 + 914 Label true true @@ -4032,7 +4031,7 @@ ГруппаСнятьПометкиРасширеннаяПодсказка - 907 + 913 Label true true @@ -4067,7 +4066,7 @@ ГруппаМесяцы2РасширеннаяПодсказка - 892 + 898 Label true true @@ -4098,7 +4097,7 @@ None ПредставлениеРасписания4РасширеннаяПодсказка - 909 + 915 Label true true @@ -4143,7 +4142,7 @@ СтраницаЕжемесячноРасширеннаяПодсказка - 867 + 873 Label true true @@ -4174,7 +4173,7 @@ None ПредставлениеРасписания3РасширеннаяПодсказка - 912 + 918 Label true true @@ -4219,7 +4218,7 @@ СтраницаПроизвольноеРасширеннаяПодсказка - 911 + 917 Label true true @@ -4248,7 +4247,7 @@ СтраницыПериодичностиРасширеннаяПодсказка - 839 + 845 Label true true @@ -4281,7 +4280,7 @@ АвторРасширеннаяПодсказка - 915 + 921 Label true true @@ -4300,10 +4299,10 @@ Left true - 10 + 35 true true - true + false true true true @@ -4325,7 +4324,7 @@ РасшифровкаАвтораРасширеннаяПодсказка - 917 + 923 Label true true @@ -4366,7 +4365,7 @@ ГруппаАвторРасширеннаяПодсказка - 914 + 920 Label true true @@ -4398,7 +4397,7 @@ СтраницаРасписаниеРасширеннаяПодсказка - 824 + 830 Label true true @@ -4436,7 +4435,7 @@ ПубликоватьРасширеннаяПодсказка - 920 + 926 Label true true @@ -4474,7 +4473,7 @@ ДругойСпособДоставкиРасширеннаяПодсказка - 922 + 928 Label true true @@ -4555,7 +4554,7 @@ None ПапкаРасширеннаяПодсказка - 926 + 932 Label true true @@ -4608,7 +4607,7 @@ ИспользоватьПапкуРасширеннаяПодсказка - 925 + 931 Label true true @@ -4645,7 +4644,7 @@ СетевойКаталогWindowsРасширеннаяПодсказка - 929 + 935 Label true true @@ -4701,7 +4700,7 @@ СетевойКаталогLinuxРасширеннаяПодсказка - 931 + 937 Label true true @@ -4751,7 +4750,7 @@ ИспользоватьСетевойКаталогРасширеннаяПодсказка - 928 + 934 Label true true @@ -4781,7 +4780,7 @@ None FTPСерверИКаталогРасширеннаяПодсказка - 934 + 940 Label true true @@ -4846,7 +4845,7 @@ ИспользоватьFTPРесурсРасширеннаяПодсказка - 933 + 939 Label true true @@ -4874,7 +4873,7 @@ ПараметрыДоставкиРасширеннаяПодсказка - 924 + 930 Label true true @@ -4897,7 +4896,7 @@ ПроверитьПубликациюРасширеннаяПодсказка - 936 + 942 Label true true @@ -4929,7 +4928,7 @@ ДругиеСпособыДоставкиРасширеннаяПодсказка - 919 + 925 Label true true @@ -4970,7 +4969,7 @@ ИспользоватьЭлектроннуюПочтуРасширеннаяПодсказка - 939 + 945 Label true true @@ -5014,7 +5013,7 @@ ТолькоУведомитьРасширеннаяПодсказка - 943 + 949 Label true true @@ -5050,7 +5049,7 @@ ТолькоУведомленияПоказатьРасширеннаяПодсказка - 942 + 948 Label true true @@ -5077,7 +5076,7 @@ Декорация3РасширеннаяПодсказка - 946 + 952 Label true true @@ -5112,7 +5111,7 @@ ТолькоУведомленияСкрытьРасширеннаяПодсказка - 945 + 951 Label true true @@ -5141,7 +5140,7 @@ ТолькоУведомленияРасширеннаяПодсказка - 941 + 947 Label true true @@ -5169,7 +5168,7 @@ ГруппаИспользоватьЭлектроннуюПочтуРасширеннаяПодсказка - 938 + 944 Label true true @@ -5202,7 +5201,7 @@ УчетнаяЗаписьРасширеннаяПодсказка - 948 + 954 Label true true @@ -5246,7 +5245,7 @@ ПроверитьЭлектроннуюПочтуРасширеннаяПодсказка - 950 + 956 Label true true @@ -5278,7 +5277,7 @@ ГруппаУчетнаяЗаписьРасширеннаяПодсказка - 947 + 953 Label true true @@ -5314,7 +5313,7 @@ ТемаПисьмаРасширеннаяПодсказка - 960 + 967 Label true true @@ -5325,172 +5324,202 @@ ТемаПисьмаКонтекстноеМеню 28 - - ТемаПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки - 172 - true - true - - true - - - ТемаПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка - 953 - Label + + ТемаПисьмаКонтекстноеМенюПодменюПараметр + 694 + + ТемаПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки + 172 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 960 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto true true - - Left - - - Form.Command.ДобавитьИзменитьШаблонДатыРассылки - Normal - Auto - true - true - UserCmds - Auto - - - ТемаПисьмаКонтекстноеМенюДобавитьШаблонАвтора - 267 - true - true - - true - - - ТемаПисьмаКонтекстноеМенюДобавитьШаблонАвтораРасширеннаяПодсказка - 954 - Label + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонАвтора + 267 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонАвтораРасширеннаяПодсказка + 961 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонАвтора + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонАвтора - Normal - Auto - true - true - UserCmds - Auto - - - ТемаПисьмаКонтекстноеМенюДобавитьШаблонПолучателя - 173 - true - true - - true - - - ТемаПисьмаКонтекстноеМенюДобавитьШаблонПолучателяРасширеннаяПодсказка - 955 - Label + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонПолучателя + 173 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонПолучателяРасширеннаяПодсказка + 962 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПолучателя + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонПолучателя - Normal - Auto - true - true - UserCmds - Auto - - - ТемаПисьмаКонтекстноеМенюДобавитьШаблонРассылки - 268 - true - true - - true - - - ТемаПисьмаКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка - 956 - Label + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонРассылки + 268 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка + 963 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонНаименованияРассылки - Normal - Auto - true - true - UserCmds - Auto - - - ТемаПисьмаКонтекстноеМенюДобавитьШаблонСистемы - 402 - true - true - - true - - - ТемаПисьмаКонтекстноеМенюДобавитьШаблонСистемыРасширеннаяПодсказка - 957 - Label + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонСистемы + 402 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюДобавитьШаблонСистемыРасширеннаяПодсказка + 964 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСистемы + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонСистемы - Normal - Auto - true - true - UserCmds - Auto - - - ТемаПисьмаКонтекстноеМенюВосстановитьШаблонПоУмолчанию - 671 - true - true - - true - - - ТемаПисьмаКонтекстноеМенюВосстановитьШаблонПоУмолчаниюРасширеннаяПодсказка - 958 - Label + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюВосстановитьШаблонПоУмолчанию + 671 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюВосстановитьШаблонПоУмолчаниюРасширеннаяПодсказка + 965 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - - - ТемаПисьмаКонтекстноеМенюПредпросмотрШаблона - 277 + UserCmds + Auto + + + ТемаПисьмаКонтекстноеМенюПредпросмотрШаблона + 277 + true + true + + true + + + ТемаПисьмаКонтекстноеМенюПредпросмотрШаблонаРасширеннаяПодсказка + 966 + Label + true + true + + Left + + + Form.Command.ПредпросмотрШаблона + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Параметр</value> + - ТемаПисьмаКонтекстноеМенюПредпросмотрШаблонаРасширеннаяПодсказка + ТемаПисьмаКонтекстноеМенюПодменюПараметрРасширеннаяПодсказка 959 Label true @@ -5499,13 +5528,14 @@ Left - Form.Command.ПредпросмотрШаблона - Normal - Auto - true - true - UserCmds - Auto + Popup + + + StdPicture.DataCompositionConditionalAppearance + + Auto + Normal + true @@ -5546,7 +5576,7 @@ ТекстПисьмаФорматированныйДокументДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка - 966 + 973 Label true true @@ -5572,7 +5602,7 @@ ТекстПисьмаФорматированныйДокументДобавитьШаблонАвтораРасширеннаяПодсказка - 967 + 974 Label true true @@ -5598,7 +5628,7 @@ ТекстПисьмаФорматированныйДокументДобавитьШаблонПолучателяРасширеннаяПодсказка - 968 + 975 Label true true @@ -5624,7 +5654,7 @@ ТекстПисьмаФорматированныйДокументДобавитьШаблонРассылкиРасширеннаяПодсказка - 969 + 976 Label true true @@ -5650,7 +5680,7 @@ ТекстПисьмаФорматированныйДокументДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка - 970 + 977 Label true true @@ -5676,7 +5706,7 @@ ТекстПисьмаФорматированныйДокументДобавитьШаблонСистемыРасширеннаяПодсказка - 971 + 978 Label true true @@ -5693,7 +5723,7 @@ Auto - ДобавитьШаблонСпособаДоставки + ТекстПисьмаФорматированныйДокументДобавитьШаблонСпособаДоставки 419 true true @@ -5701,8 +5731,8 @@ true - ДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка - 972 + ТекстПисьмаФорматированныйДокументДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка + 979 Label true true @@ -5718,6 +5748,32 @@ UserCmds Auto + + ТекстПисьмаФорматированныйДокументДобавитьШаблонПоУмолчанию + 698 + true + true + + true + + + ТекстПисьмаФорматированныйДокументДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка + 980 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + ТекстПисьмаФорматированныйДокументПредпросмотрШаблона 395 @@ -5728,7 +5784,7 @@ ТекстПисьмаФорматированныйДокументПредпросмотрШаблонаРасширеннаяПодсказка - 973 + 981 Label true true @@ -5755,11 +5811,11 @@ ru - Текст письма форматированный документ добавить параметр шаблона + Добавить параметр в текст письма ТекстПисьмаФорматированныйДокументДобавитьПараметрШаблонаРасширеннаяПодсказка - 965 + 972 Label true true @@ -5786,7 +5842,7 @@ ТекстПисьмаФорматированныйДокументКартинкаРасширеннаяПодсказка - 974 + 982 Label true true @@ -5816,7 +5872,7 @@ ТекстПисьмаФорматированныйДокументВыровнятьВлевоРасширеннаяПодсказка - 976 + 984 Label true true @@ -5843,7 +5899,7 @@ ТекстПисьмаФорматированныйДокументВыровнятьПоЦентруРасширеннаяПодсказка - 977 + 985 Label true true @@ -5870,7 +5926,7 @@ ТекстПисьмаФорматированныйДокументВыровнятьВправоРасширеннаяПодсказка - 978 + 986 Label true true @@ -5897,7 +5953,7 @@ ТекстПисьмаФорматированныйДокументВыровнятьПоШиринеРасширеннаяПодсказка - 979 + 987 Label true true @@ -5924,7 +5980,7 @@ ТекстПисьмаФорматированныйДокументУвеличитьОтступРасширеннаяПодсказка - 980 + 988 Label true true @@ -5951,7 +6007,7 @@ ТекстПисьмаФорматированныйДокументУменьшитьОтступРасширеннаяПодсказка - 981 + 989 Label true true @@ -5983,7 +6039,7 @@ СтандартныеДействияРасширеннаяПодсказка - 975 + 983 Label true true @@ -6008,7 +6064,7 @@ ИзменитьТипТекстаНаHTMLПометкаРасширеннаяПодсказка - 983 + 991 Label true true @@ -6035,7 +6091,7 @@ ИзменитьТипТекстаНаОбычныйРасширеннаяПодсказка - 984 + 992 Label true true @@ -6062,11 +6118,11 @@ ru - HTML + Сменить формат письма HTMLРасширеннаяПодсказка - 982 + 990 Label true true @@ -6080,33 +6136,6 @@ Normal - - ДобавитьШаблонПоУмолчанию - 674 - true - true - - true - - - ДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка - 985 - Label - true - true - - Left - - - Form.Command.ДобавитьШаблонПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - true true @@ -6122,7 +6151,7 @@ КоманднаяПанельТекстПисьмаФорматированныйДокументРасширеннаяПодсказка - 964 + 971 Label true true @@ -6149,7 +6178,7 @@ None ТекстПисьмаФорматированныйДокументРасширеннаяПодсказка - 995 + 1003 Label true true @@ -6160,198 +6189,254 @@ ТекстПисьмаФорматированныйДокументКонтекстноеМеню 130 - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки - 312 - true - true - - true - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка - 986 - Label + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюПодменюПараметр + 695 + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки + 312 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 994 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto true true - - Left - - - Form.Command.ДобавитьИзменитьШаблонДатыРассылки - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонАвтора - 308 - true - true - - true - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонАвтораРасширеннаяПодсказка - 987 - Label + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонАвтора + 308 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонАвтораРасширеннаяПодсказка + 995 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонАвтора + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонАвтора - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПолучателя - 309 - true - true - - true - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПолучателяРасширеннаяПодсказка - 988 - Label + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПолучателя + 309 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПолучателяРасширеннаяПодсказка + 996 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПолучателя + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонПолучателя - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонРассылки - 310 - true - true - - true - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка - 989 - Label + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонРассылки + 310 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка + 997 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонНаименованияРассылки - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСформированныхОтчетов - 311 - true - true - - true - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка - 990 - Label + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСформированныхОтчетов + 311 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка + 998 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСформированныхОтчетов + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонСформированныхОтчетов - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСистемы - 403 - true - true - - true - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСистемыРасширеннаяПодсказка - 991 - Label + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСистемы + 403 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСистемыРасширеннаяПодсказка + 999 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСистемы + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонСистемы - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСпособаДоставки - 420 - true - true - - true - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка - 992 - Label + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСпособаДоставки + 420 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка + 1000 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСпособаДоставки + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонСпособаДоставки - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПоУмолчанию - 673 + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПоУмолчанию + 673 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка + 1001 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюПредпросмотрШаблона + 394 + true + true + + true + + + ТекстПисьмаФорматированныйДокументКонтекстноеМенюПредпросмотрШаблонаРасширеннаяПодсказка + 1002 + Label + true + true + + Left + + + Form.Command.ПредпросмотрШаблона + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Параметр</value> + - ТекстПисьмаФорматированныйДокументКонтекстноеМенюДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка + ТекстПисьмаФорматированныйДокументКонтекстноеМенюПодменюПараметрРасширеннаяПодсказка 993 Label true @@ -6360,39 +6445,14 @@ Left - Form.Command.ДобавитьШаблонПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюПредпросмотрШаблона - 394 - true - true - - true - - - ТекстПисьмаФорматированныйДокументКонтекстноеМенюПредпросмотрШаблонаРасширеннаяПодсказка - 994 - Label - true - true - - Left - - - Form.Command.ПредпросмотрШаблона - Normal - Auto - true - true - UserCmds - Auto + Popup + + + StdPicture.DataCompositionConditionalAppearance + + Auto + Normal + true @@ -6425,7 +6485,7 @@ СтраницыТекстПисьмаHTMLРасширеннаяПодсказка - 963 + 970 Label true true @@ -6458,7 +6518,7 @@ ДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка - 1000 + 1008 Label true true @@ -6484,7 +6544,7 @@ ДобавитьШаблонАвтораРасширеннаяПодсказка - 1001 + 1009 Label true true @@ -6510,7 +6570,7 @@ ДобавитьШаблонПолучателяРасширеннаяПодсказка - 1002 + 1010 Label true true @@ -6536,7 +6596,7 @@ ДобавитьШаблонРассылкиРасширеннаяПодсказка - 1003 + 1011 Label true true @@ -6562,7 +6622,7 @@ ДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка - 1004 + 1012 Label true true @@ -6588,7 +6648,7 @@ ДобавитьШаблонСистемыРасширеннаяПодсказка - 1005 + 1013 Label true true @@ -6605,7 +6665,7 @@ Auto - ДобавитьШаблонСпособаДоставки1 + ДобавитьШаблонСпособаДоставки 421 true true @@ -6613,8 +6673,8 @@ true - ДобавитьШаблонСпособаДоставки1РасширеннаяПодсказка - 1006 + ДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка + 1014 Label true true @@ -6630,6 +6690,32 @@ UserCmds Auto + + ДобавитьШаблонПоУмолчанию + 699 + true + true + + true + + + ДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка + 1015 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto + ПредпросмотрШаблона 393 @@ -6640,7 +6726,7 @@ ПредпросмотрШаблонаРасширеннаяПодсказка - 1007 + 1016 Label true true @@ -6671,7 +6757,7 @@ ТекстПисьмаДобавитьПараметрШаблонаРасширеннаяПодсказка - 999 + 1007 Label true true @@ -6701,7 +6787,7 @@ ИзменитьТипТекстаНаHTMLРасширеннаяПодсказка - 1009 + 1018 Label true true @@ -6727,7 +6813,7 @@ ИзменитьТипТекстаНаОбычныйПометкаРасширеннаяПодсказка - 1010 + 1019 Label true true @@ -6755,11 +6841,11 @@ ru - Обычный текст + Сменить формат письма ОбычныйТекстРасширеннаяПодсказка - 1008 + 1017 Label true true @@ -6773,33 +6859,6 @@ Normal - - ДобавитьШаблонПоУмолчанию1 - 675 - true - true - - true - - - ДобавитьШаблонПоУмолчанию1РасширеннаяПодсказка - 1011 - Label - true - true - - Left - - - Form.Command.ДобавитьШаблонПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - true true @@ -6815,7 +6874,7 @@ КоманднаяПанельТекстПисьмаРасширеннаяПодсказка - 998 + 1006 Label true true @@ -6842,7 +6901,7 @@ None ТекстПисьмаРасширеннаяПодсказка - 1021 + 1030 Label true true @@ -6853,224 +6912,254 @@ ТекстПисьмаКонтекстноеМеню 22 - - ТекстПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки - 322 - true - true - - true - - - ТекстПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка - 1012 - Label + + ТекстПисьмаКонтекстноеМенюПодменюПараметр + 696 + + ТекстПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки + 322 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 1021 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto true true - - Left - - - Form.Command.ДобавитьИзменитьШаблонДатыРассылки - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонАвтора - 318 - true - true - - true - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонАвтораРасширеннаяПодсказка - 1013 - Label + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонАвтора + 318 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонАвтораРасширеннаяПодсказка + 1022 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонАвтора + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонАвтора - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонПолучателя - 319 - true - true - - true - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонПолучателяРасширеннаяПодсказка - 1014 - Label + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонПолучателя + 319 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонПолучателяРасширеннаяПодсказка + 1023 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПолучателя + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонПолучателя - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонРассылки - 320 - true - true - - true - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка - 1015 - Label + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонРассылки + 320 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка + 1024 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонНаименованияРассылки - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонСформированныхОтчетов - 321 - true - true - - true - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка - 1016 - Label + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСформированныхОтчетов + 321 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСформированныхОтчетовРасширеннаяПодсказка + 1025 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСформированныхОтчетов + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонСформированныхОтчетов - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонСистемы - 405 - true - true - - true - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонСистемыРасширеннаяПодсказка - 1017 - Label + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСистемы + 405 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСистемыРасширеннаяПодсказка + 1026 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСистемы + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонСистемы - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонСпособаДоставки - 422 - true - true - - true - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка - 1018 - Label + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСпособаДоставки + 422 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонСпособаДоставкиРасширеннаяПодсказка + 1027 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонСпособаДоставки + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонСпособаДоставки - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонПоУмолчанию - 672 - true - true - - true - - - ТекстПисьмаКонтекстноеМенюДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка - 1019 - Label + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонПоУмолчанию + 672 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюДобавитьШаблонПоУмолчаниюРасширеннаяПодсказка + 1028 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонПоУмолчанию + Normal + Auto true true - - Left - - - Form.Command.ДобавитьШаблонПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - - - ТекстПисьмаКонтекстноеМенюПредпросмотрШаблона - 392 + UserCmds + Auto + + + ТекстПисьмаКонтекстноеМенюПредпросмотрШаблона + 392 + true + true + + true + + + ТекстПисьмаКонтекстноеМенюПредпросмотрШаблонаРасширеннаяПодсказка + 1029 + Label + true + true + + Left + + + Form.Command.ПредпросмотрШаблона + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Параметр</value> + - ТекстПисьмаКонтекстноеМенюПредпросмотрШаблонаРасширеннаяПодсказка + ТекстПисьмаКонтекстноеМенюПодменюПараметрРасширеннаяПодсказка 1020 Label true @@ -7079,13 +7168,14 @@ Left - Form.Command.ПредпросмотрШаблона - Normal - Auto - true - true - UserCmds - Auto + Popup + + + StdPicture.DataCompositionConditionalAppearance + + Auto + Normal + true @@ -7118,7 +7208,7 @@ СтраницыТекстПисьмаОбычныйТекстРасширеннаяПодсказка - 997 + 1005 Label true true @@ -7147,7 +7237,7 @@ СтраницыТекстПисьмаРасширеннаяПодсказка - 962 + 969 Label true true @@ -7175,7 +7265,7 @@ ТемаИТекстПисьмаРасширеннаяПодсказка - 952 + 958 Label true true @@ -7209,7 +7299,7 @@ ВидПочтовогоАдресаПолучателейРасширеннаяПодсказка - 1024 + 1033 Label true true @@ -7291,7 +7381,7 @@ ПолучателиПолучательРасширеннаяПодсказка - 1042 + 1051 Label true true @@ -7336,7 +7426,7 @@ ПолучателиИсключенРасширеннаяПодсказка - 1044 + 1053 Label true true @@ -7368,7 +7458,7 @@ ПолучателиПодобратьРасширеннаяПодсказка - 1026 + 1035 Label true true @@ -7394,7 +7484,7 @@ ПолучателиУдалитьРасширеннаяПодсказка - 1027 + 1036 Label true true @@ -7420,7 +7510,7 @@ ПолучателиПереместитьВверхРасширеннаяПодсказка - 1028 + 1037 Label true true @@ -7446,7 +7536,7 @@ ПолучателиПереместитьВнизРасширеннаяПодсказка - 1029 + 1038 Label true true @@ -7472,7 +7562,7 @@ ПолучателиСортироватьСписокПоВозрастаниюРасширеннаяПодсказка - 1030 + 1039 Label true true @@ -7499,7 +7589,7 @@ ПолучателиСортироватьСписокПоУбываниюРасширеннаяПодсказка - 1031 + 1040 Label true true @@ -7532,10 +7622,10 @@ ПолучателиСтрокаПоиска - 1033 + 1042 ПолучателиСтрокаПоискаРасширеннаяПодсказка - 1035 + 1044 Label true true @@ -7545,7 +7635,7 @@ ПолучателиСтрокаПоискаКонтекстноеМеню - 1034 + 1043 true Получатели @@ -7555,10 +7645,10 @@ ПолучателиСостояниеПросмотра - 1036 + 1045 ПолучателиСостояниеПросмотраРасширеннаяПодсказка - 1038 + 1047 Label true true @@ -7568,7 +7658,7 @@ ПолучателиСостояниеПросмотраКонтекстноеМеню - 1037 + 1046 true ViewStatusAddition @@ -7579,10 +7669,10 @@ ПолучателиУправлениеПоиском - 1039 + 1048 ПолучателиУправлениеПоискомРасширеннаяПодсказка - 1041 + 1050 Label true true @@ -7592,7 +7682,7 @@ ПолучателиУправлениеПоискомКонтекстноеМеню - 1040 + 1049 true SearchControlAddition @@ -7603,7 +7693,7 @@ ПолучателиРасширеннаяПодсказка - 1032 + 1041 Label true true @@ -7657,7 +7747,7 @@ 20 НастройкаПолучателейРасширеннаяПодсказка - 1023 + 1032 Label true true @@ -7690,7 +7780,7 @@ ПараметрыПисьмаРасширеннаяПодсказка - 951 + 957 Label true true @@ -7722,7 +7812,7 @@ ДоставкаПоЭлектроннойПочтеРасширеннаяПодсказка - 937 + 943 Label true true @@ -7756,7 +7846,7 @@ СтраницаДоставкаРасширеннаяПодсказка - 918 + 924 Label true true @@ -7786,7 +7876,7 @@ ФорматыПоУмолчаниюРасширеннаяПодсказка - 1055 + 1064 Label true true @@ -7866,7 +7956,7 @@ ФорматыОтчетовОтчетРасширеннаяПодсказка - 1072 + 1081 Label true true @@ -7908,7 +7998,7 @@ ФорматыОтчетовФорматыРасширеннаяПодсказка - 1074 + 1083 Label true true @@ -7959,7 +8049,7 @@ ФорматыОтчетовОтправлятьЕслиПустойРасширеннаяПодсказка - 1076 + 1085 Label true true @@ -7991,7 +8081,7 @@ ФорматыОтчетовУстановитьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка - 1060 + 1069 Label true true @@ -8016,7 +8106,7 @@ ФорматыОтчетовСнятьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка - 1061 + 1070 Label true true @@ -8037,10 +8127,10 @@ ФорматыОтчетовСтрокаПоиска - 1063 + 1072 ФорматыОтчетовСтрокаПоискаРасширеннаяПодсказка - 1065 + 1074 Label true true @@ -8050,7 +8140,7 @@ ФорматыОтчетовСтрокаПоискаКонтекстноеМеню - 1064 + 1073 true ФорматыОтчетов @@ -8060,10 +8150,10 @@ ФорматыОтчетовСостояниеПросмотра - 1066 + 1075 ФорматыОтчетовСостояниеПросмотраРасширеннаяПодсказка - 1068 + 1077 Label true true @@ -8073,7 +8163,7 @@ ФорматыОтчетовСостояниеПросмотраКонтекстноеМеню - 1067 + 1076 true ViewStatusAddition @@ -8084,10 +8174,10 @@ ФорматыОтчетовУправлениеПоиском - 1069 + 1078 ФорматыОтчетовУправлениеПоискомРасширеннаяПодсказка - 1071 + 1080 Label true true @@ -8097,7 +8187,7 @@ ФорматыОтчетовУправлениеПоискомКонтекстноеМеню - 1070 + 1079 true SearchControlAddition @@ -8108,7 +8198,7 @@ ФорматыОтчетовРасширеннаяПодсказка - 1062 + 1071 Label true true @@ -8129,7 +8219,7 @@ ФорматыОтчетовКонтекстноеМенюУстановитьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка - 1058 + 1067 Label true true @@ -8155,7 +8245,7 @@ ФорматыОтчетовКонтекстноеМенюСнятьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка - 1059 + 1068 Label true true @@ -8210,7 +8300,7 @@ УстановитьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка - 1087 + 1096 Label true true @@ -8237,7 +8327,7 @@ СнятьПометкиОтправлятьЕслиПустойРасширеннаяПодсказка - 1088 + 1097 Label true true @@ -8269,7 +8359,7 @@ КнопкиФорматовОтчетовРасширеннаяПодсказка - 1086 + 1095 Label true true @@ -8302,7 +8392,7 @@ ФорматыОтчетовИКнопкиРасширеннаяПодсказка - 1057 + 1066 Label true true @@ -8344,7 +8434,7 @@ АрхивироватьРасширеннаяПодсказка - 1090 + 1099 Label true true @@ -8378,7 +8468,7 @@ None ИмяАрхиваРасширеннаяПодсказка - 1094 + 1104 Label true true @@ -8389,17 +8479,73 @@ ИмяАрхиваКонтекстноеМеню 16 - - ИмяАрхиваКонтекстноеМенюДобавитьШаблонРассылки - 351 + + ИмяАрхиваКонтекстноеМенюПодменюПараметр + 697 + + ИмяАрхиваКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки + 352 + true + true + + true + + + ИмяАрхиваКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка + 1102 + Label + true + true + + Left + + + Form.Command.ДобавитьИзменитьШаблонДатыРассылки + Normal + Auto + true + true + UserCmds + Auto + + + ИмяАрхиваКонтекстноеМенюДобавитьШаблонРассылки + 351 + true + true + + true + + + ИмяАрхиваКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка + 1103 + Label + true + true + + Left + + + Form.Command.ДобавитьШаблонНаименованияРассылки + Normal + Auto + true + true + UserCmds + Auto + true true true + + <key>ru</key> + <value>Параметр</value> + - ИмяАрхиваКонтекстноеМенюДобавитьШаблонРассылкиРасширеннаяПодсказка - 1092 + ИмяАрхиваКонтекстноеМенюПодменюПараметрРасширеннаяПодсказка + 1101 Label true true @@ -8407,39 +8553,14 @@ Left - Form.Command.ДобавитьШаблонНаименованияРассылки - Normal - Auto - true - true - UserCmds - Auto - - - ИмяАрхиваКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылки - 352 - true - true - - true - - - ИмяАрхиваКонтекстноеМенюДобавитьИлиИзменитьШаблонДатыРассылкиРасширеннаяПодсказка - 1093 - Label - true - true - - Left - - - Form.Command.ДобавитьИзменитьШаблонДатыРассылки - Normal - Auto - true - true - UserCmds - Auto + Popup + + + StdPicture.DataCompositionConditionalAppearance + + Auto + Normal + true @@ -8471,7 +8592,7 @@ ПарольАрхиваРасширеннаяПодсказка - 1096 + 1106 Label true true @@ -8515,7 +8636,7 @@ true ГруппаПараметрыАрхивированияВZIPРасширеннаяПодсказка - 1089 + 1098 Label true true @@ -8548,7 +8669,7 @@ АдресОтветаРасширеннаяПодсказка - 1099 + 1109 Label true true @@ -8592,7 +8713,7 @@ Right ИспользоватьСкрытыеКопииРасширеннаяПодсказка - 1101 + 1111 Label true true @@ -8628,7 +8749,7 @@ true ДополнительныеПараметрыРассылкиПоЭлектроннойПочтеРасширеннаяПодсказка - 1098 + 1108 Label true true @@ -8664,7 +8785,7 @@ РодительРасширеннаяПодсказка - 1104 + 1114 Label true true @@ -8713,7 +8834,7 @@ Right ДобавлятьДатуРассылкиВИменаФайловРасширеннаяПодсказка - 1106 + 1116 Label true true @@ -8751,7 +8872,7 @@ ГруппаАвторРодительРасширеннаяПодсказка - 1108 + 1118 Label true true @@ -8785,7 +8906,7 @@ true ДополнительныеПараметрыРасширеннаяПодсказка - 1103 + 1113 Label true true @@ -8820,7 +8941,7 @@ СтраницаДополнительноРасширеннаяПодсказка - 1054 + 1063 Label true true @@ -8845,7 +8966,7 @@ СтраницыРасширеннаяПодсказка - 710 + 716 Label true true @@ -10312,6 +10433,23 @@ + + ЭтоНовый + + <key>ru</key> + <value>Это новый</value> + + 56 + + Boolean + + + true + + + true + + ПолучателиПодобрать @@ -10812,12 +10950,12 @@ <name>ДобавитьШаблонПоУмолчанию</name> <title> <key>ru</key> - <value>Добавить шаблон по умолчанию</value> + <value>Шаблон по умолчанию</value> 17 ru - Добавить шаблон по умолчанию + Добавить/Заменить шаблоном по умолчанию true diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html index f9b851c0d..5526aa1bf 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Help/ru.html @@ -1,5 +1,5 @@ - -

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

        + +

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

        Реквизиты:

        @@ -72,4 +72,6 @@

        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

        -

        Подробнее об администрировании сервера 1С:Предприятия см. документацию к платформе 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 f84218be4..aa471c8ce 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/Forms/ФормаЭлемента/Module.bsl @@ -29,12 +29,26 @@ ЭтаФорма.ТолькоПросмотр = Истина; КонецЕсли; + // Удаление варианта "В папку" если не используется интеграция с подсистемой "РаботаСФайлами". + Если ТипЗнч(Объект.Папка) = Тип("Неопределено") ИЛИ ТипЗнч(Объект.Папка) = Тип("Строка") Тогда + Элементы.ДругойСпособДоставки.СписокВыбора.Удалить(0); + КонецЕсли; + ЗначениеКопирования = Параметры.ЗначениеКопирования; + // Используется при загрузке и записи настроек выбранного отчета + ИдентификаторТекущейСтрокиТаблицыОтчетов = -1; + // Кэш проверки ЭтоНовый = Объект.Ссылка.Пустая(); СозданКопированием = НЕ ЗначениеКопирования.Пустая(); - + + // Добавление отчетов в табличную часть + Если Параметры.Свойство("ПрисоединяемыеОтчеты") И ТипЗнч(Параметры.ПрисоединяемыеОтчеты) = Тип("Массив") Тогда + Модифицированность = Истина; + ДобавитьНастройкиОтчетов(Параметры.ПрисоединяемыеОтчеты); + КонецЕсли; + Кэш = ПолучитьКэш(); Расписание = Новый РасписаниеРегламентногоЗадания; @@ -42,9 +56,7 @@ РассылкаБылаПерсонализирована = Объект.Персонализирована; // Чтение - Если НЕ ЭтоНовый ИЛИ СозданКопированием Тогда - ПрочитатьПользовательскоеПредставлениеФорматов(); - КонецЕсли; + ПрочитатьПользовательскоеПредставлениеФорматов(); ЗаполнитьПустыеШаблоныСтандартными(Объект); Если ЭтоНовый И НЕ СозданКопированием Тогда @@ -118,9 +130,6 @@ КонецЦикла; КонецЕсли; - // Используется при загрузке и записи настроек выбранного отчета - ИдентификаторТекущейСтрокиТаблицыОтчетов = -1; - // Если СтруктураВложенийПисьмаВФорматеHTML = Неопределено Тогда СтруктураВложенийПисьмаВФорматеHTML = Новый Структура; @@ -141,7 +150,7 @@ КонецЕсли; // Активизация первой строки - Если Объект.Отчеты.Количество() > 0 Тогда + Если Объект.Отчеты.Количество() > 0 И ИдентификаторТекущейСтрокиТаблицыОтчетов = -1 Тогда СтрокаОтчеты = Объект.Отчеты[0]; ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки); @@ -555,7 +564,7 @@ &НаКлиенте Процедура ПапкаОткрытие(Элемент, СтандартнаяОбработка) - РассылкаОтчетовКлиентПереопределяемый.ОткрытьФормуПапки(СтандартнаяОбработка, Объект.Папка); + СтандартныеПодсистемыКлиентПереопределяемый.РассылкаОтчетовПросмотрПапки(СтандартнаяОбработка, Объект.Папка); КонецПроцедуры &НаКлиенте @@ -668,7 +677,7 @@ ИначеЕсли СтруктураВыбора.Выбрано.Количество >= 6 Тогда Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Добавлено отчетов: %1 из %2, - |Не добавлено из-за ошибок: %3'"), + |Не добавлено из-за ошибок: %3'"), Формат(СтруктураВыбора.Успешно.Количество, "ЧН=0; ЧГ="), Формат(СтруктураВыбора.Выбрано.Количество, "ЧН=0; ЧГ="), Формат(СтруктураВыбора.СОшибками.Количество, "ЧН=0; ЧГ=") @@ -679,10 +688,10 @@ ПредставлениеОтчетовСОшибками = СтрЗаменить(Разделитель + СтруктураВыбора.СОшибками.ПредставлениеОтчетов, Разделитель, Символы.ПС + " - "); Результат.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Успешно добавлены отчеты: - |%1 - | - |Следующие отчеты не удалось добавить из-за ошибок: - |%2'"), + |%1 + | + |Следующие отчеты не удалось добавить из-за ошибок: + |%2'"), ПредставлениеОтчетовУспешно, ПредставлениеОтчетовСОшибками ); @@ -853,15 +862,6 @@ &НаКлиенте Процедура ДобавитьОтчет(Команда) - Пользовательский = ПредопределенноеЗначение("Перечисление.ТипыВариантовОтчетов.Пользовательский"); - Предопределенный = ПредопределенноеЗначение("Перечисление.ТипыВариантовОтчетов.Предопределенный"); - Отчет = ПредопределенноеЗначение("Перечисление.ТипыВариантовОтчетов.Отчет"); - - ОтборПоТипу = Новый СписокЗначений; - ОтборПоТипу.Добавить(Пользовательский, Пользовательский); - ОтборПоТипу.Добавить(Предопределенный, Предопределенный); - ОтборПоТипу.Добавить(Отчет, Отчет); - ВыбранныеЗначения = Новый СписокЗначений; Для Каждого СтрокаОтчеты Из Объект.Отчеты Цикл Если ТипЗнч(СтрокаОтчеты.Отчет) = Тип("СправочникСсылка.ВариантыОтчетов") Тогда @@ -869,19 +869,24 @@ КонецЕсли; КонецЦикла; + Отбор = Новый Структура; + Отбор.Вставить("ТипОтчета", ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Внутренний")); + Отбор.Вставить("ПометкаУдаления", Ложь); + ПараметрыФормыВыбора = Новый Структура; - ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.Независимый); - ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); - ПараметрыФормыВыбора.Вставить("ОтборПоТипу", ОтборПоТипу); - ПараметрыФормыВыбора.Вставить("ВыбранныеЗначения", ВыбранныеЗначения); + ПараметрыФормыВыбора.Вставить("Отбор", Отбор); + ПараметрыФормыВыбора.Вставить("ВыбранныеЗначения", ВыбранныеЗначения); ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаВыбора", ПараметрыФормыВыбора, Элементы.Отчеты); КонецПроцедуры &НаКлиенте Процедура ДобавитьДополнительныйОтчет(Команда) - РассылкаОтчетовКлиентПереопределяемый.ПодборДопОтчетов(Элементы.Отчеты); + СтандартныеПодсистемыКлиентПереопределяемый.РассылкаОтчетовПодборДопОтчета(Элементы.Отчеты); КонецПроцедуры &НаКлиенте @@ -1312,91 +1317,41 @@ &НаСервере Процедура ПрочитатьНастройкиОтчетовОбъектаКопирования() - МассивУдаляемыхСтрок = Новый Массив; - ПричинаУдаленияСтрок = ""; - - Для Индекс = 1 По Объект.Отчеты.Количество() Цикл - СтрокаОтчеты = Объект.Отчеты[Индекс - 1]; - СтрокаОтчетыОбъектаКопирования = ЗначениеКопирования.Отчеты[Индекс - 1]; + КоличествоСтрок = Объект.Отчеты.Количество(); + Для ОбратныйИндекс = 1 По КоличествоСтрок Цикл + Индекс = КоличествоСтрок - ОбратныйИндекс; + СтрокаОтчеты = Объект.Отчеты.Получить(Индекс); + СтрокаОтчетыОбъектаКопирования = ЗначениеКопирования.Отчеты.Получить(Индекс); - НастройкиОтчета = СтрокаОтчетыОбъектаКопирования.Настройки.Получить(); + ПользовательскиеНастройкиКД = СтрокаОтчетыОбъектаКопирования.Настройки.Получить(); - ПараметрыОтчета = ИнициалиазироватьОтчет(СтрокаОтчеты.Отчет, НастройкиОтчета); + СтрокаОтчеты.ВнесеныИзменения = Истина; - // Проверка результата инциализации - Если НЕ ПараметрыОтчета.Инициализирован Тогда - МассивУдаляемыхСтрок.Добавить(СтрокаОтчеты); - ПричинаУдаленияСтрок = ПричинаУдаленияСтрок + ?(ПричинаУдаленияСтрок = "", "", Символы.ПС) - + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчет %1 был удален из-за ошибки инициализации (см. выше).'"), - "'"+ Строка(СтрокаОтчеты.Представление) +"'" - ); - Продолжить; + ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); + СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, Истина, ПользовательскиеНастройкиКД); + Если СтрокаПредупреждения <> "" Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты["+ Индекс +"].Представление"); КонецЕсли; - // - СтрокаОтчеты.СКД = ПараметрыОтчета.СКД; - - // Восстановление настроек - Если СтрокаОтчеты.СКД Тогда - - КомпоновщикНастроекКД = ПараметрыОтчета.КомпоновщикНастроекКД; - - Иначе - - // Очищаем & Восстанавливаем - Если ТипЗнч(НастройкиОтчета) = Тип("ТаблицаЗначений") Тогда - НастройкиТекущегоОтчета.Загрузить(НастройкиОтчета); - Иначе - НастройкиТекущегоОтчета.Очистить(); - КонецЕсли; - - Для Каждого КлючИЗначение Из ПараметрыОтчета.ДоступныеРеквизиты Цикл - // Обновляем вычисляемые реквизиты - Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Реквизит", КлючИЗначение.Ключ)); - Если Найденные.Количество() = 0 Тогда - СтрокаНастройка = НастройкиТекущегоОтчета.Добавить(); - СтрокаНастройка.Реквизит = КлючИЗначение.Ключ; - Иначе - СтрокаНастройка = Найденные[0]; - КонецЕсли; - СтрокаНастройка.Представление = КлючИЗначение.Значение.Представление; - СтрокаНастройка.Тип = КлючИЗначение.Значение.Тип; - СтрокаНастройка.Обнаружен = Истина; - СтрокаНастройка.ИндексКартинки = 2; - КонецЦикла; - - // Отключаем необнаруженные строки - Найденные = НастройкиТекущегоОтчета.НайтиСтроки(Новый Структура("Обнаружен", Ложь)); - Для Каждого СтрокаНастройка Из Найденные Цикл - СтрокаНастройка.Использование = Ложь; - СтрокаНастройка.ИндексКартинки = 3; - КонецЦикла; - - Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаНастройкиТекущегоОтчета; - - КонецЕсли; - - СтрокаОтчеты.АдресНастроек = ПоместитьВоВременноеХранилище( - ?(СтрокаОтчеты.СКД, - КомпоновщикНастроекКД, - НастройкиТекущегоОтчета.Выгрузить() - ), - ?(ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек), - СтрокаОтчеты.АдресНастроек, - ЭтаФорма.УникальныйИдентификатор - ) - ); + //ПараметрыОтчета = ИнициализироватьОтчет(СтрокаОтчеты, Истина, НастройкиОтчета); + // + //Если ПараметрыОтчета.Инициализирован Тогда + // СтрокаОтчеты.АдресНастроек = ПоместитьВоВременноеХранилище( + // ?(СтрокаОтчеты.СКД, + // КомпоновщикНастроекКД, + // НастройкиТекущегоОтчета.Выгрузить() + // ), + // ?(ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек), + // СтрокаОтчеты.АдресНастроек, + // ЭтаФорма.УникальныйИдентификатор + // ) + // ); + //Иначе + // Сообщение = Новый СообщениеПользователю; + // Сообщение.Текст = ПараметрыОтчета.Ошибки; + // Сообщение.Сообщить(); + //КонецЕсли; КонецЦикла; - - Если МассивУдаляемыхСтрок.Количество() > 0 Тогда - Для Каждого СтрокаОтчеты Из МассивУдаляемыхСтрок Цикл - Объект.Отчеты.Удалить(СтрокаОтчеты); - КонецЦикла; - Сообщение = Новый СообщениеПользователю; - Сообщение.Текст = ПричинаУдаленияСтрок; - Сообщение.Сообщить(); - КонецЕсли; КонецПроцедуры &НаСервере @@ -1457,61 +1412,91 @@ КонецПроцедуры &НаСервере -Функция ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, ДобавитьДежурнуюФразу = Истина) +Функция ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, ДобавитьДежурнуюФразу = Истина, ПользовательскиеНастройки = Неопределено) + // Сохранение настроек предыдущего отчета Если ИдентификаторСтроки <> ИдентификаторТекущейСтрокиТаблицыОтчетов И ИдентификаторТекущейСтрокиТаблицыОтчетов <> -1 Тогда ЗаписатьНастройкиСтрокиОтчеты(ИдентификаторТекущейСтрокиТаблицыОтчетов); КонецЕсли; ИдентификаторТекущейСтрокиТаблицыОтчетов = ИдентификаторСтроки; + // Поиск строки СтрокаОтчеты = Объект.Отчеты.НайтиПоИдентификатору(ИдентификаторСтроки); Если СтрокаОтчеты = Неопределено Тогда ИдентификаторТекущейСтрокиТаблицыОтчетов = -1; - Возврат НСтр("ru = 'Не выбрана строка отчета'"); - КонецЕсли; - - // Чтение настроек текущей строки из временного хранилища + переключение страницы - Если ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек) Тогда - Настройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек); - Если ТипЗнч(Настройки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда //СтрокаОтчеты.СКД Тогда - КомпоновщикНастроекКД = Настройки; - Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаКомпоновщик; - ИначеЕсли ТипЗнч(Настройки) = Тип("ТаблицаЗначений") Тогда - НастройкиТекущегоОтчета.Загрузить(Настройки); - Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаНастройкиТекущегоОтчета; - Иначе - Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница; - КонецЕсли; - Возврат ""; КонецЕсли; - // Чтение настроек отчета по ссылке - СтрокаОтчетыПоСсылке = Объект.Ссылка.Отчеты.Найти(СтрокаОтчеты.Отчет, "Отчет"); - НастройкиОтчета = ?(СтрокаОтчетыПоСсылке = Неопределено, Неопределено, СтрокаОтчетыПоСсылке.Настройки.Получить()); + Если ПользовательскиеНастройки = Неопределено Тогда + // Чтение настроек текущей строки из временного хранилища + переключение страницы + Если ЭтоАдресВременногоХранилища(СтрокаОтчеты.АдресНастроек) Тогда + Настройки = ПолучитьИзВременногоХранилища(СтрокаОтчеты.АдресНастроек); + Если ТипЗнч(Настройки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда //СтрокаОтчеты.СКД Тогда + КомпоновщикНастроекКД = Настройки; + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаКомпоновщик; + ИначеЕсли ТипЗнч(Настройки) = Тип("ТаблицаЗначений") Тогда + НастройкиТекущегоОтчета.Загрузить(Настройки); + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.СтраницаНастройкиТекущегоОтчета; + Иначе + Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница; + КонецЕсли; + + Возврат ""; + КонецЕсли; + + // Чтение настроек отчета по ссылке + ИндексСтроки = Объект.Отчеты.Индекс(СтрокаОтчеты); + ОбъектСтрокаОтчеты = РеквизитФормыВЗначение("Объект").Отчеты.Получить(ИндексСтроки); + ПользовательскиеНастройки = ?(ОбъектСтрокаОтчеты = Неопределено, Неопределено, ОбъектСтрокаОтчеты.Настройки.Получить()); + КонецЕсли; // Инициализация - ПараметрыОтчета = ИнициалиазироватьОтчет(СтрокаОтчеты.Отчет, НастройкиОтчета); + ПараметрыОтчета = ИнициализироватьОтчет(СтрокаОтчеты, ДобавитьДежурнуюФразу, ПользовательскиеНастройки); - // Очистка сообщений окна - Ошибки = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыОтчета.МассивОшибок, ДобавитьДежурнуюФразу); - ПараметрыОтчета.Ошибки = ПараметрыОтчета.Ошибки - + ?(ПараметрыОтчета.Ошибки = "" ИЛИ Ошибки = "", "", Символы.ПС + Символы.ПС) - + Ошибки; + Возврат ПараметрыОтчета.Ошибки; +КонецФункции + +&НаСервере +Функция ИнициализироватьОтчет(СтрокаОтчеты, ДобавитьДежурнуюФразу, ПользовательскиеНастройки) + // Параметры журнала + ПараметрыЖурнала = Новый Структура; + ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Инициализация отчета'")); + ПараметрыЖурнала.Вставить("Данные", Объект.Ссылка); + ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); + ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); + + // Инициализация отчета + ПараметрыОтчета = Новый Структура("Отчет, Настройки", СтрокаОтчеты.Отчет, ПользовательскиеНастройки); + РассылкаОтчетов.ИнициализироватьОтчет( + ПараметрыЖурнала, + ПараметрыОтчета, + Объект.Персонализирована, + ЭтаФорма.УникальныйИдентификатор + ); + + ПараметрыОтчета.Вставить("МассивОшибок", ПараметрыЖурнала.МассивОшибок); + ПараметрыОтчета.Ошибки = РассылкаОтчетовКлиентСервер.СтрокаСообщенийПользователю(ПараметрыОтчета.МассивОшибок, ДобавитьДежурнуюФразу); - // СтрокаОтчеты.СКД = ПараметрыОтчета.СКД; СтрокаОтчеты.Инициализирован = ПараметрыОтчета.Инициализирован; // Проверка результата инциализации Если НЕ СтрокаОтчеты.Инициализирован Тогда - // Удаление строки, если она не была записана в БД - Если СтрокаОтчетыПоСсылке = Неопределено Тогда - Объект.Отчеты.Удалить(СтрокаОтчеты); - КонецЕсли; + ПараметрыОтчета.Ошибки = ( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет %1 был удален из-за ошибки инициализации'"), + "'"+ Строка(СтрокаОтчеты.Представление) +"'" + ) + + ":" + + Символы.ПС + + ПараметрыОтчета.Ошибки + ); + + // Удаление строки + Объект.Отчеты.Удалить(СтрокаОтчеты); Элементы.СтраницыНастроекОтчета.ТекущаяСтраница = Элементы.ПустаяСтраница; - Возврат ПараметрыОтчета.Ошибки; + Возврат ПараметрыОтчета; КонецЕсли; // Восстановление настроек @@ -1523,8 +1508,8 @@ Иначе // Очищаем & Восстанавливаем - Если ТипЗнч(НастройкиОтчета) = Тип("ТаблицаЗначений") Тогда - НастройкиТекущегоОтчета.Загрузить(НастройкиОтчета); + Если ТипЗнч(ПользовательскиеНастройки) = Тип("ТаблицаЗначений") Тогда + НастройкиТекущегоОтчета.Загрузить(ПользовательскиеНастройки); Иначе НастройкиТекущегоОтчета.Очистить(); КонецЕсли; @@ -1555,29 +1540,6 @@ КонецЕсли; - Возврат ПараметрыОтчета.Ошибки; -КонецФункции - -&НаСервере -Функция ИнициалиазироватьОтчет(Отчет, НастройкиОтчета) - // Параметры журнала - ПараметрыЖурнала = Новый Структура; - ПараметрыЖурнала.Вставить("ИмяСобытия", НСтр("ru = 'Рассылка отчетов. Инициализация отчета'")); - ПараметрыЖурнала.Вставить("Данные", Объект.Ссылка); - ПараметрыЖурнала.Вставить("Метаданные", Метаданные.Справочники.РассылкиОтчетов); - ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); - - // Инициализация отчета - ПараметрыОтчета = Новый Структура("Отчет, Настройки", Отчет, НастройкиОтчета); - РассылкаОтчетов.ИнициализироватьОтчет( - ПараметрыЖурнала, - ПараметрыОтчета, - Объект.Персонализирована, - ЭтаФорма.УникальныйИдентификатор - ); - - ПараметрыОтчета.Вставить("МассивОшибок", ПараметрыЖурнала.МассивОшибок); - Возврат ПараметрыОтчета; КонецФункции @@ -1805,6 +1767,54 @@ Возврат Результат; КонецФункции +&НаСервере +Процедура ДобавитьНастройкиОтчетов(ПрисоединяемыеОтчеты) + Для Каждого СтрокаОтчетыПараметры Из ПрисоединяемыеОтчеты Цикл + Если СтрокаОтчетыПараметры.Свойство("ВариантСсылка") + И ТипЗнч(СтрокаОтчетыПараметры.ВариантСсылка) = Тип("СправочникСсылка.ВариантыОтчетов") + И СтрокаОтчетыПараметры.ВариантСсылка <> Справочники.ВариантыОтчетов.ПустаяСсылка() Тогда + ВариантСсылка = СтрокаОтчетыПараметры.ВариантСсылка; + Иначе + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(СтрокаОтчетыПараметры.ОтчетПолноеИмя); + ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ОтчетИнформация.Отчет, СтрокаОтчетыПараметры.КлючВарианта); + КонецЕсли; + + Если ВариантСсылка.ПометкаУдаления Тогда + Продолжить; + КонецЕсли; + + Найденные = Объект.Отчеты.НайтиСтроки(Новый Структура("Отчет", ВариантСсылка)); + Если Найденные.Количество() > 0 Тогда + СтрокаОтчеты = Найденные[0]; + Иначе + СтрокаОтчеты = Объект.Отчеты.Добавить(); + СтрокаОтчеты.Отчет = ВариантСсылка; + СтрокаОтчеты.ОтправлятьЕслиПустой = Истина; + КонецЕсли; + + СтрокаОтчеты.ВнесеныИзменения = Истина; + + Если НЕ ЭтоНовый Тогда + Если Найденные.Количество() > 0 Тогда + ШаблонСтрокиСообщения = НСтр("ru = 'Для отчета ""%1"" загружены новые пользовательские настройки.'"); + Иначе + ШаблонСтрокиСообщения = НСтр("ru = 'Добавлен отчет ""%1"".'"); + КонецЕсли; + ШаблонСтрокиСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСтрокиСообщения, Строка(ВариантСсылка)); + ИндексСтроки = Объект.Отчеты.Индекс(СтрокаОтчеты); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ШаблонСтрокиСообщения, , "Объект.Отчеты["+ ИндексСтроки +"].Представление"); + КонецЕсли; + + ПользовательскиеНастройкиКД = СтрокаОтчетыПараметры.Настройки; + + ИдентификаторСтроки = СтрокаОтчеты.ПолучитьИдентификатор(); + СтрокаПредупреждения = ОтчетыПриАктивизацииСтрокиНаСервере(ИдентификаторСтроки, Истина, ПользовательскиеНастройкиКД); + Если СтрокаПредупреждения <> "" Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаПредупреждения, , "Объект.Отчеты["+ ИндексСтроки +"].Представление"); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Неконтекстные вызовы сервера @@ -1910,8 +1920,8 @@ ПараметрыЖурнала.Вставить("МассивОшибок", Новый Массив); ОтчетИнициализирован = РассылкаОтчетов.ИнициализироватьОтчет( - ПараметрыЖурнала, - ПараметрыОтчета, + ПараметрыЖурнала, + ПараметрыОтчета, ТребуемыеРеквизиты.Персонализирована ); @@ -1956,7 +1966,7 @@ Функция ПравоИзмененияПапкиИФайлов(Папка) Результат = Истина; - РассылкаОтчетовПереопределяемый.ПравоИзмененияПапкиИФайлов(Папка, Результат); + СтандартныеПодсистемыПереопределяемый.РассылкаОтчетовПравоИзмененияПапкиИФайлов(Папка, Результат); Возврат Результат; КонецФункции @@ -2029,7 +2039,7 @@ ЭтаФорма.ДругойСпособДоставки = "ИспользоватьFTPРесурс"; ЭтаФорма.Публиковать = Истина; Иначе - ЭтаФорма.ДругойСпособДоставки = "ИспользоватьПапку"; + ЭтаФорма.ДругойСпособДоставки = Элементы.ДругойСпособДоставки.СписокВыбора[0].Значение; ЭтаФорма.Публиковать = Ложь; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html index a309eb1a3..cfe5b2ae2 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html +++ b/SSL/src/Catalogs/РассылкиОтчетов/Help/ru.html @@ -1,16 +1,17 @@ - -

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

        + +

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

        +

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

        Реквизиты:

        - - @@ -18,6 +19,8 @@

      • Наименование
      • Наименование рассылки или группы рассылок
      • Подготовлена
      • Флаг готовности рассылки к выполнению.
        Не подготовленные рассылки не будут выполнены.
        +Флажок готовности рассылки к выполнению.
        Не подготовленные рассылки не будут выполнены.
      • Расписание
      • Расписание рассылки, представленное в виде текста.
      • Автор
      • Автор рассылки, от имени которого будет выполняться рассылка по расписанию.
        +Автор рассылки, от имени которого рассылка будет выполняться по расписанию.
      • Последний запуск
      • Дата и время последнего запуска рассылки.
      • Состояние
      • - -
      • Выполнить сейчас
      • Позволят выполнить выбранные рассылки или группы рассылок от имени текущего пользователя. Выполняться будут только те рассылки, у которых установлен флажок подготовленности.
        +Запускает выбранные рассылки и группы рассылок от имени текущего пользователя.
      • События рассылки
      • Позволяет открыть журнал регистрации, предварительно отфильтровав его по событиям рассылки со времени последнего запуска.
        \ 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 4ab443406..852ec9a7c 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl +++ b/SSL/src/Catalogs/РассылкиОтчетов/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -234,4 +236,5 @@ НСтр("ru = 'Рассылка отчетов: %1'"), СокрЛП(НаименованиеРассылки) ); -КонецФункции \ No newline at end of file +КонецФункции +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo index e084af6cc..32cd1e325 100644 --- a/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo +++ b/SSL/src/Catalogs/РассылкиОтчетов/РассылкиОтчетов.mdo @@ -415,6 +415,10 @@ true + + ru + Порт FTP сервера может быть задан в диапазоне от 0 до 65535. + 0 @@ -957,7 +961,7 @@ ФормаЭлемента ru - Форма элемента + Рассылка отчетов @@ -987,7 +991,7 @@ СобытияРассылки ru - События рассылки + События рассылки... FormCommandBarImportant diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form index 329fe76d1..7baf94542 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаВыбора/Form.form @@ -27,7 +27,7 @@ true НаименованиеРасширеннаяПодсказка - 24 + 26 Label true true @@ -63,7 +63,7 @@ КраткоеПредставлениеРасширеннаяПодсказка - 26 + 28 Label true true @@ -99,7 +99,7 @@ КодРасширеннаяПодсказка - 28 + 30 Label true true @@ -139,7 +139,7 @@ ВнешняяРольРасширеннаяПодсказка - 30 + 32 Label true true @@ -160,19 +160,17 @@ - Комментарий - 8 + СписокКомментарий + 14 true true - - true - + Список.Комментарий - КомментарийРасширеннаяПодсказка - 32 + СписокКомментарийРасширеннаяПодсказка + 34 Label true true @@ -181,19 +179,17 @@ - КомментарийКонтекстноеМеню - 9 + СписокКомментарийКонтекстноеМеню + 15 true LabelField Enter - true true Left true true - 1 true @@ -205,10 +201,10 @@ СписокСтрокаПоиска - 15 + 17 СписокСтрокаПоискаРасширеннаяПодсказка - 17 + 19 Label true true @@ -218,7 +214,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 16 + 18 true Список @@ -228,10 +224,10 @@ СписокСостояниеПросмотра - 18 + 20 СписокСостояниеПросмотраРасширеннаяПодсказка - 20 + 22 Label true true @@ -241,7 +237,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 19 + 21 true ViewStatusAddition @@ -252,10 +248,10 @@ СписокУправлениеПоиском - 21 + 23 СписокУправлениеПоискомРасширеннаяПодсказка - 23 + 25 Label true true @@ -265,7 +261,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 22 + 24 true SearchControlAddition @@ -276,7 +272,7 @@ СписокРасширеннаяПодсказка - 14 + 16 Label true true @@ -327,6 +323,49 @@ true + + Комментарий + 8 + true + true + + true + + + Items.Список.CurrentData.Комментарий + + Left + + КомментарийРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 9 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + ФормаКоманднаяПанель -1 diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form index 9bc88a4a5..6df972f7c 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Form.form @@ -1,5 +1,5 @@ - + ГруппаШапка 24 @@ -19,7 +19,7 @@ НаименованиеРасширеннаяПодсказка - 38 + 41 Label true true @@ -59,7 +59,7 @@ КраткоеПредставлениеРасширеннаяПодсказка - 40 + 43 Label true true @@ -98,7 +98,7 @@ НаименованиеИСокращениеРасширеннаяПодсказка - 37 + 40 Label true true @@ -129,7 +129,7 @@ КодРасширеннаяПодсказка - 42 + 45 Label true true @@ -164,7 +164,7 @@ ГруппаШапкаРасширеннаяПодсказка - 36 + 39 Label true true @@ -183,115 +183,31 @@ - ГруппаАдресации - 23 - - ГруппаВнешняяРоль - 32 - - ВнешняяРоль - 28 - true - true - - true - - - Объект.ВнешняяРоль - - Right - - OnChange - ВнешняяРольПриИзменении - - - ВнешняяРольРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - - ВнешняяРольКонтекстноеМеню - 29 - true - - CheckBoxField - Enter - true - Left - true - - - - УзелОбмена - 30 - - <key>ru</key> - <value>Исполнители роли определены в информационной базе</value> - - true - false - - true - - - Объект.УзелОбмена - - Left - - УзелОбменаРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - - УзелОбменаКонтекстноеМеню - 31 - true - - InputField - Enter - true - Left - true - - - StartChoice - УзелОбменаНачалоВыбора - - true - true - true - true - true - true - Normal - - + ГруппаВнешняяРоль + 32 + + ВнешняяРоль + 28 + + <key>ru</key> + <value>Внешняя роль, исполнители которой определены в другой информационной базе:</value> + true true true - - <key>ru</key> - <value>Группа внешняя роль</value> - - - ru - Группа внешняя роль - + + Объект.ВнешняяРоль + + Right + + OnChange + ВнешняяРольПриИзменении + - ГруппаВнешняяРольРасширеннаяПодсказка - 45 + ВнешняяРольРасширеннаяПодсказка + 48 Label true true @@ -299,15 +215,103 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + ВнешняяРольКонтекстноеМеню + 29 + true + + CheckBoxField + Enter + true + Left + true + + + + УзелОбмена + 30 + + <key>ru</key> + <value>Исполнители роли определены в информационной базе</value> + + true + false + + true + + + Объект.УзелОбмена + + None + + УзелОбменаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + УзелОбменаКонтекстноеМеню + 31 + true + + InputField + Enter + true + Left + true + + + StartChoice + УзелОбменаНачалоВыбора + + true + true + true + true + true + true + Normal + true + true + + true + + + <key>ru</key> + <value>Группа внешняя роль</value> + + + ru + Группа внешняя роль + + + ГруппаВнешняяРольРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаАдресации + 23 ИспользуетсяБезКонтекстаДругихИзмеренийАдресации 5 @@ -326,7 +330,7 @@ ИспользуетсяБезКонтекстаДругихИзмеренийАдресацииРасширеннаяПодсказка - 50 + 53 Label true true @@ -346,65 +350,32 @@ true - - ИспользуетсяВКонтекстеДругихИзмеренийАдресации - 7 - true - true - - true - - - Объект.ИспользуетсяСОбъектамиАдресации - - Right - - ru - Роль может назначаться исполнителям с указанием определенных объектов адресации. - - - OnChange - ИспользуетсяВКонтекстеДругихИзмеренийАдресацииПриИзменении - - - ИспользуетсяВКонтекстеДругихИзмеренийАдресацииРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - - ИспользуетсяВКонтекстеДругихИзмеренийАдресацииКонтекстноеМеню - 8 - true - - CheckBoxField - Enter - true - Left - true - - - ГруппаТипыОбъектовАдресации - 22 + ГруппаАдресацииДополнительно + 38 - ТипыОсновногоОбъектаАдресации - 18 + ИспользуетсяВКонтекстеДругихИзмеренийАдресации + 7 true true true - Объект.ТипыОсновногоОбъектаАдресации + Объект.ИспользуетсяСОбъектамиАдресации + Right + + ru + Роль может назначаться исполнителям с указанием определенных объектов адресации. + + + OnChange + ИспользуетсяВКонтекстеДругихИзмеренийАдресацииПриИзменении + - ТипыОсновногоОбъектаАдресацииРасширеннаяПодсказка - 55 + ИспользуетсяВКонтекстеДругихИзмеренийАдресацииРасширеннаяПодсказка + 56 Label true true @@ -413,39 +384,148 @@ - ТипыОсновногоОбъектаАдресацииКонтекстноеМеню - 19 + ИспользуетсяВКонтекстеДругихИзмеренийАдресацииКонтекстноеМеню + 8 true - InputField + CheckBoxField Enter true Left true - - true - true - false - true - true - true - Normal - + - - ТипыДополнительногоОбъектаАдресации - 20 + + ГруппаТипыОбъектовАдресации + 22 + + ТипыОсновногоОбъектаАдресации + 18 + true + true + + true + + + Объект.ТипыОсновногоОбъектаАдресации + + + ТипыОсновногоОбъектаАдресацииРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + + ТипыОсновногоОбъектаАдресацииКонтекстноеМеню + 19 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + Normal + + + + ТипыДополнительногоОбъектаАдресации + 20 + true + true + + true + + + Объект.ТипыДополнительногоОбъектаАдресации + + + ТипыДополнительногоОбъектаАдресацииРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ТипыДополнительногоОбъектаАдресацииКонтекстноеМеню + 21 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + Normal + + + + Пояснение + 36 + + <key>ru</key> + <value>В ряде случаев, роли исполнителя бывает недостаточно, чтобы точно определить круг исполнителей задач. +Для этого можно указать уточняющие основные и дополнительные объекты адресации.</value> + + true + true + + true + + + ПояснениеРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + ПояснениеКонтекстноеМеню + 37 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + true true true - - Объект.ТипыДополнительногоОбъектаАдресации - - ТипыДополнительногоОбъектаАдресацииРасширеннаяПодсказка - 57 + ГруппаТипыОбъектовАдресацииРасширеннаяПодсказка + 58 Label true true @@ -453,24 +533,14 @@ Left - - ТипыДополнительногоОбъектаАдресацииКонтекстноеМеню - 21 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto true @@ -478,9 +548,13 @@ true + + <key>ru</key> + <value>Адресация задач исполнителям (дополнительно)</value> + - ГруппаТипыОбъектовАдресацииРасширеннаяПодсказка - 54 + ГруппаАдресацииДополнительноРасширеннаяПодсказка + 55 Label true true @@ -492,6 +566,7 @@ Vertical Auto + NormalSeparation true true Auto @@ -505,11 +580,11 @@ <key>ru</key> - <value>Адресация роли</value> + <value>Адресация задач исполнителям</value> ГруппаАдресацииРасширеннаяПодсказка - 44 + 52 Label true true @@ -521,9 +596,10 @@ Vertical Auto - NormalSeparation + StrongSeparation true true + auto Auto Auto @@ -545,7 +621,7 @@ Left КомментарийРасширеннаяПодсказка - 60 + 65 Label true true @@ -565,14 +641,14 @@ true - Opening - КомментарийОткрытие + StartChoice + КомментарийНачалоВыбора true 2 true true - true + true true true true @@ -586,7 +662,7 @@ ГруппаКомментарийРасширеннаяПодсказка - 59 + 64 Label true true diff --git a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl index 72f374abf..e7685b26a 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/Forms/ФормаЭлемента/Module.bsl @@ -43,7 +43,6 @@ КонецПроцедуры - &НаКлиенте Процедура УзелОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -72,12 +71,12 @@ КонецПроцедуры &НаКлиенте -Процедура КомментарийОткрытие(Элемент, СтандартнаяОбработка) +Процедура КомментарийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияКомментария(Элемент.ТекстРедактирования, Объект.Комментарий, Модифицированность); -КонецПроцедуры - + КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -93,7 +92,7 @@ &НаСервере Процедура ОбновитьДоступность() - Если БизнесПроцессыИЗадачиПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы() Тогда + Если СтандартныеПодсистемыПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы() Тогда Если Объект.ВнешняяРоль Тогда Элементы.ИспользуетсяБезКонтекстаДругихИзмеренийАдресации.Доступность = Ложь; @@ -126,3 +125,4 @@ КонецПроцедуры + diff --git a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html index bfec893b9..2dd20b5c1 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html +++ b/SSL/src/Catalogs/РолиИсполнителей/Help/ru.html @@ -1,8 +1,8 @@ - -

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

        -

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

        -

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

        -

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

        + +

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

        +

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

        +

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

        +

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

        @@ -20,8 +20,9 @@ -
        Роль исполнителя Основной объект адресации
        (тип, значение)
        Структурное подразделение,
        Отдел бухгалтерии
        Проект,
        Проект по внедрению системы бухучета
        Петров А.Петров А. получает уведомления по всем просроченным и зависшим задачам по структурному поздразделению "Отдел бухгалтерии" и проекту "Проект по внедрению системы бухучета".*

        * если исключить Иванова И. и Петрова А. из роли "Координатор выполнения задач", то Федоров К. будет получать уведомления также и по их объектам адресации.

        -

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

        +Петров А. получает уведомления по всем просроченным и зависшим задачам по структурному поздразделению "Отдел бухгалтерии" и проекту "Проект по внедрению системы бухучета".*

         

        +

        * если исключить Иванова И. и Петрова А. из роли "Координатор выполнения задач", то Федоров К. будет получать уведомления также и по их объектам адресации.

        +

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

        См. также: 

        \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl index c1151e856..9a0147780 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl +++ b/SSL/src/Catalogs/РолиИсполнителей/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий объекта @@ -38,3 +40,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo b/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo index 2fa19b979..9433ee3e2 100644 --- a/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo +++ b/SSL/src/Catalogs/РолиИсполнителей/РолиИсполнителей.mdo @@ -231,7 +231,7 @@ ТипыДополнительногоОбъектаАдресации ru - Типы дополнительного объекта адресации + Дополнительные объекты адресации ChartOfCharacteristicTypesRef.ОбъектыАдресацииЗадач @@ -254,7 +254,7 @@ ТипыОсновногоОбъектаАдресации ru - Типы основного объекта адресации + Основные объекты адресации ChartOfCharacteristicTypesRef.ОбъектыАдресацииЗадач @@ -282,6 +282,10 @@ Boolean + + ru + Внешняя роль, исполнители которой определены в другой информационной базе + @@ -298,6 +302,10 @@ ExchangePlanRef.ОбменВнешнимиЗаданиями ExchangePlanRef.ОбменВнешнимиЗаданиямиС1СДокументооборот + + ru + Информационная база, в которой определены исполнители внешней роли + diff --git a/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl b/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl index e69de29bb..5ab5cdbd7 100644 --- a/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl +++ b/SSL/src/Catalogs/СообщенияСистемы/ObjectModule.bsl @@ -0,0 +1,18 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +Процедура ПередЗаписью(Отказ) + + КаналСообщений = Наименование; + + СодержимоеТела = ТелоСообщения.Получить(); + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + СообщенияВМоделиСервиса.ПередОтправкойСообщения(КаналСообщений, СодержимоеТела); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + + ТелоСообщения = Новый ХранилищеЗначения(СодержимоеТела); + +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СтраныМира/Help/ru.html b/SSL/src/Catalogs/СтраныМира/Help/ru.html index 6d34161e0..c9d9f9dc4 100644 --- a/SSL/src/Catalogs/СтраныМира/Help/ru.html +++ b/SSL/src/Catalogs/СтраныМира/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

        • цифровой идентификации, diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl index 82bb1c69f..bb47e1f59 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/НастройкаРасписанияОбменовДанными/Module.bsl @@ -148,7 +148,7 @@ Отказ = Ложь; // запускаем выполнение обмена - ОбменДаннымиСервер.ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, ТекущиеДанные.Ссылка); + ОбменДаннымиВызовСервера.ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, ТекущиеДанные.Ссылка); Если Отказ Тогда Сообщение = НСтр("ru = 'Сценарий обмена выполнен с ошибками.'"); diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl index c5d2c0f25..8bedf7ff1 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/Forms/ФормаЭлемента/Module.bsl @@ -313,9 +313,7 @@ Если ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - ИспользуемыеТранспорты = ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы); - - Для Каждого Элемент Из ИспользуемыеТранспорты Цикл + Для Каждого Элемент Из ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы) Цикл СписокВыбора.Добавить(Элемент, Строка(Элемент)); @@ -325,3 +323,9 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция ИспользуемыеТранспортыСообщенийОбмена(Знач УзелИнформационнойБазы) + + Возврат ОбменДаннымиПовтИсп.ИспользуемыеТранспортыСообщенийОбмена(УзелИнформационнойБазы); + +КонецФункции diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl index 402f62658..24e3dc5e3 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -121,7 +123,7 @@ // Получает расписание регл. задания. Если регл. задание не задано, то возвращает пустое расписание (по умолчанию) Функция ПолучитьРасписаниеВыполненияОбменаДанными(НастройкаВыполненияОбмена) Экспорт - РегламентноеЗаданиеОбъект = ОбменДаннымиСервер.НайтиРегламентноеЗаданиеПоПараметру(НастройкаВыполненияОбмена.РегламентноеЗаданиеGUID); + РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(НастройкаВыполненияОбмена.РегламентноеЗаданиеGUID); Если РегламентноеЗаданиеОбъект <> Неопределено Тогда @@ -159,7 +161,7 @@ Функция СоздатьРегламентноеЗаданиеПриНеобходимости(Отказ, ТекущийОбъект) - РегламентноеЗаданиеОбъект = ОбменДаннымиСервер.НайтиРегламентноеЗаданиеПоПараметру(ТекущийОбъект.РегламентноеЗаданиеGUID); + РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(ТекущийОбъект.РегламентноеЗаданиеGUID); // при необходимости создаем регл. задание Если РегламентноеЗаданиеОбъект = Неопределено Тогда @@ -390,3 +392,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl index dcb8b513c..c824ac7cc 100644 --- a/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl +++ b/SSL/src/Catalogs/СценарииОбменовДанными/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -47,7 +49,7 @@ УстановитьПривилегированныйРежим(Истина); // определяем регламентное задание - РегламентноеЗаданиеОбъект = ОбменДаннымиСервер.НайтиРегламентноеЗаданиеПоПараметру(РегламентноеЗаданиеGUID); + РегламентноеЗаданиеОбъект = ОбменДаннымиВызовСервера.НайтиРегламентноеЗаданиеПоПараметру(РегламентноеЗаданиеGUID); Если РегламентноеЗаданиеОбъект <> Неопределено Тогда @@ -66,3 +68,5 @@ + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/ТипыИнформацииИнформационногоЦентра/ТипыИнформацииИнформационногоЦентра.mdo b/SSL/src/Catalogs/ТипыИнформацииИнформационногоЦентра/ТипыИнформацииИнформационногоЦентра.mdo new file mode 100644 index 000000000..9fcc2cc41 --- /dev/null +++ b/SSL/src/Catalogs/ТипыИнформацииИнформационногоЦентра/ТипыИнформацииИнформационногоЦентра.mdo @@ -0,0 +1,109 @@ + + + + + + + + + + ТипыИнформацииИнформационногоЦентра + + ru + Типы информации информационного центра + + true + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Description + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Code + DontUse + + Use + PredefinedDataName + + Use + + + + + Use + Predefined + + Use + + + + + Use + Ref + + Use + + + + + Use + DeletionMark + + Use + + + + + Use + IsFolder + + Use + + + + + Use + Owner + true + + ShowError + Use + + + + + Use + Parent + true + + Use + + + + + Use + Description + + ShowError + Use + + + + + Use + Code + + Use + + + + Use + Managed + Use + 2 + true + 9 + 50 + String + Variable + true + true + AsDescription + InDialog + BothWays + diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html index 019424fce..fd2a54851 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

          \ No newline at end of file diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl index b194f45ed..e8cc74a90 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/Forms/ФормаЭлемента/Module.bsl @@ -31,7 +31,10 @@ Элементы.ПолныйПутьWindows.ОтображениеПредупрежденияПриРедактировании = ОтображениеПредупрежденияПриРедактировании.Отображать; ТекущийРазмерВБайтах = 0; - ФайловыеФункцииПереопределяемый.ПодсчитатьРазмерФайловНаТоме(Объект.Ссылка, ТекущийРазмерВБайтах); + + СтандартныеПодсистемыПереопределяемый.ПодсчитатьРазмерФайловНаТоме( + Объект.Ссылка, ТекущийРазмерВБайтах); + ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); Если ТекущийРазмер = 0 И ТекущийРазмерВБайтах <> 0 Тогда ТекущийРазмер = 1; diff --git a/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html b/SSL/src/Catalogs/ТомаХраненияФайлов/Help/ru.html index 7258d9a00..7c3631198 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/ТомаХраненияФайлов/ObjectModule.bsl b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl index 3d9dcddeb..d0d18381e 100644 --- a/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl +++ b/SSL/src/Catalogs/ТомаХраненияФайлов/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) @@ -9,7 +11,9 @@ Если МаксимальныйРазмер <> 0 Тогда ТекущийРазмерВБайтах = 0; Если Не Ссылка.Пустая() Тогда - ФайловыеФункцииПереопределяемый.ПодсчитатьРазмерФайловНаТоме(Ссылка, ТекущийРазмерВБайтах); + + СтандартныеПодсистемыПереопределяемый.ПодсчитатьРазмерФайловНаТоме( + Ссылка, ТекущийРазмерВБайтах); КонецЕсли; ТекущийРазмер = ТекущийРазмерВБайтах / (1024 * 1024); @@ -95,3 +99,5 @@ Возврат Истина; КонецФункции // НайтиМаксимальныйНомерВерсии + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторВалют/Help/ru.html b/SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html similarity index 96% rename from SSL/src/Catalogs/КлассификаторВалют/Help/ru.html rename to SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html index 44a4dd867..f3a680d36 100644 --- a/SSL/src/Catalogs/КлассификаторВалют/Help/ru.html +++ b/SSL/src/Catalogs/УдалитьКлассификаторВалют/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

          diff --git a/SSL/src/Constants/АдресатыПолученияОтчетаПоЖурналуРегистрации/ValueManagerModule.bsl b/SSL/src/Catalogs/УдалитьКлассификаторВалют/ManagerModule.bsl similarity index 100% rename from SSL/src/Constants/АдресатыПолученияОтчетаПоЖурналуРегистрации/ValueManagerModule.bsl rename to SSL/src/Catalogs/УдалитьКлассификаторВалют/ManagerModule.bsl diff --git a/SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl b/SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl new file mode 100644 index 000000000..dc862d04c --- /dev/null +++ b/SSL/src/Catalogs/УдалитьКлассификаторВалют/ObjectModule.bsl @@ -0,0 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/КлассификаторВалют/КлассификаторВалют.mdo b/SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo similarity index 90% rename from SSL/src/Catalogs/КлассификаторВалют/КлассификаторВалют.mdo rename to SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo index 2799d1404..0239c199d 100644 --- a/SSL/src/Catalogs/КлассификаторВалют/КлассификаторВалют.mdo +++ b/SSL/src/Catalogs/УдалитьКлассификаторВалют/УдалитьКлассификаторВалют.mdo @@ -7,14 +7,14 @@ - КлассификаторВалют + УдалитьКлассификаторВалют ru - Классификатор валют + (Не используется) Классификатор валют true - Catalog.КлассификаторВалют.StandardAttribute.Description - Catalog.КлассификаторВалют.StandardAttribute.Code + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Code DontUse Use @@ -134,7 +134,6 @@ InDialog true BothWays - Catalog.КлассификаторВалют.Form.ФормаВыбора НаименованиеПолное @@ -180,13 +179,4 @@ Use Use - - ФормаВыбора - - ru - Форма выбора - - PersonalComputer - MobileDevice - diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверкаУчетнойЗаписи/CommandModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl similarity index 100% rename from SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверкаУчетнойЗаписи/CommandModule.bsl rename to SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Commands/ПроверитьУчетнуюЗапись/CommandModule.bsl diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form index c5b698986..4014fe18a 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Form.form @@ -1,25 +1,123 @@ - НастройкаПортовСервера + НастройкаСоединения 24 Порты - 26 - - ПортPOP3 - 12 + 73 + + НомераПортов + 26 + + ПортPOP3 + 12 + true + true + + true + + + ПортPOP3 + + + ru + Порт сервера POP3 + + + ПортPOP3РасширеннаяПодсказка + 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 + + + ПортSMTPРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ПортSMTPКонтекстноеМеню + 15 + true + + InputField + Enter + true + Left + true + + 6 + true + true + false + true + true + true + Normal + + true true true - - ПортPOP3 - + + <key>ru</key> + <value>Номера портов</value> + + + ru + Номера портов + - ПортPOP3РасширеннаяПодсказка - 73 + НомераПортовРасширеннаяПодсказка + 79 Label true true @@ -27,42 +125,28 @@ Left - - ПортPOP3КонтекстноеМеню - 13 - true - - InputField - Enter - true - Left - true - - 6 - true - true - false - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto - - ПортSMTP - 14 + + УстановитьПортыПоУмолчанию + 25 true true true - - ПортSMTP - - Left + false - ПортSMTPРасширеннаяПодсказка - 75 + УстановитьПортыПоУмолчаниюРасширеннаяПодсказка + 84 Label true true @@ -70,26 +154,14 @@ Left - - ПортSMTPКонтекстноеМеню - 15 - true - - InputField - Enter - true - Left - true - - 6 - true - true - false - true - true - true - Normal - + UsualButton + Form.Command.УстановитьПортыПоУмолчанию + Normal + Auto + true + true + UserCmds + Auto true true @@ -106,7 +178,7 @@ ПортыРасширеннаяПодсказка - 72 + 78 Label true true @@ -116,438 +188,6 @@ UsualGroup - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаУстановитьПоУмолчанию - 60 - - УстановитьПортыПоУмолчанию - 25 - true - true - - true - - false - - УстановитьПортыПоУмолчаниюРасширеннаяПодсказка - 78 - Label - true - true - - Left - - - Form.Command.УстановитьПортыПоУмолчанию - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа установить по умолчанию</value> - - - ru - Группа установить по умолчанию - - - ГруппаУстановитьПоУмолчаниюРасширеннаяПодсказка - 77 - Label - true - true - - Left - - - CommandBar - - Right - - - true - true - - true - - - <key>ru</key> - <value>Порты сервера</value> - - - System.DefaultGUIFont - true - false - false - false - - - ru - Настройка портов сервера - - - НастройкаПортовСервераРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - auto - Auto - Auto - - - - Дополнительно - 55 - - ГруппаPOP3Аутентификация - 56 - - СпособPOP3Аутентификации - 48 - true - true - - true - - - СпособPOP3Аутентификации - - - СпособPOP3АутентификацииРасширеннаяПодсказка - 81 - Label - true - true - - Left - - - - СпособPOP3АутентификацииКонтекстноеМеню - 49 - true - - InputField - Enter - true - Left - true - - 16 - true - true - true - false - true - true - true - - - Enum.СпособыPOP3Аутентификации.EnumValue.APOP - - - - - Enum.СпособыPOP3Аутентификации.EnumValue.CramMD5 - - - - - Enum.СпособыPOP3Аутентификации.EnumValue.Обычная - - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа POP3 аутентификация</value> - - - ru - Группа POP3 аутентификация - - - ГруппаPOP3АутентификацияРасширеннаяПодсказка - 80 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - WeakSeparation - true - true - Auto - Auto - - - - ГруппаОставлятьКопииСообщенийНаСервере - 54 - - ОставлятьКопииСообщенийНаСервере - 52 - true - true - - true - - - ОставлятьКопииСообщенийНаСервере - - Right - - OnChange - ОставлятьКопииСообщенийНаСервереПриИзменении - - - ОставлятьКопииСообщенийНаСервереРасширеннаяПодсказка - 84 - Label - true - true - - Left - - - - ОставлятьКопииСообщенийНаСервереКонтекстноеМеню - 53 - true - - CheckBoxField - Enter - true - Left - true - - - - ГруппаПериодХраненияСообщенийНаСервере - 63 - - ПустаяНадпись - 66 - - <key>ru</key> - <value> </value> - - true - true - - true - - - ПустаяНадписьРасширеннаяПодсказка - 87 - Label - true - true - - Left - - - - ПустаяНадписьКонтекстноеМеню - 67 - true - - Label - true - true - - Left - - - - УдалятьСообщенияССервера - 61 - - <key>ru</key> - <value>Удалять с сервера через n дней</value> - - true - true - - true - - - УдалятьСообщенияССервера - - Right - - OnChange - УдалятьСообщенияССервераПриИзменении - - - УдалятьСообщенияССервераРасширеннаяПодсказка - 88 - Label - true - true - - Left - - - - УдалятьСообщенияССервераКонтекстноеМеню - 62 - true - - CheckBoxField - Enter - true - Left - true - - - - ОставлятьКопииСообщенийЧислоДней - 50 - - <key>ru</key> - <value>Удалять с сервера через n дней</value> - - true - true - - true - - - ОставлятьКопииСообщенийЧислоДней - - None - - ru - Оставлять копии сообщений на сервере - - - ОставлятьКопииСообщенийЧислоДнейРасширеннаяПодсказка - 90 - Label - true - true - - Left - - - - ОставлятьКопииСообщенийЧислоДнейКонтекстноеМеню - 51 - true - - InputField - Enter - true - Left - true - - 6 - true - true - false - true - true - true - true - - 1 - - - 600 - - Normal - - - true - true - - true - - - <key>ru</key> - <value>Группа период хранения сообщений на сервере</value> - - - ru - Группа период хранения сообщений на сервере - - - ГруппаПериодХраненияСообщенийНаСервереРасширеннаяПодсказка - 86 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - ГруппаОставлятьКопииСообщенийНаСервереРасширеннаяПодсказка - 83 - Label - true - true - - Left - - - UsualGroup - - Vertical Auto true true @@ -569,9 +209,13 @@ ДлительностьОжиданияСервера + + ru + Время ожидания сервера до разрыва соединения в секундах (от 10 до 600) + ДлительностьОжиданияСервераРасширеннаяПодсказка - 93 + 86 Label true true @@ -593,12 +237,53 @@ 7 true true + true true true true + + 10 + + + 600 + Normal + + НадписьСекунд + 71 + + <key>ru</key> + <value>секунд</value> + + true + true + + true + + + НадписьСекундРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + НадписьСекундКонтекстноеМеню + 72 + true + + Label + true + true + + Left + + true true @@ -614,7 +299,389 @@ ГруппаДлительностьОжиданияРасширеннаяПодсказка - 92 + 85 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Настройка соединения</value> + + + + ru + Настройка соединения + + + НастройкаСоединенияРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + Дополнительно + 55 + + ГруппаСерверВходящейПочты + 68 + + СпособPOP3Аутентификации + 48 + true + true + + true + + + СпособPOP3Аутентификации + + + ru + Способ аутентификации на POP3 сервере + + + СпособPOP3АутентификацииРасширеннаяПодсказка + 91 + Label + true + true + + 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 + + + + ГруппаОставлятьКопииСообщенийНаСервере + 54 + + ОставлятьКопииСообщенийНаСервере + 52 + true + true + + true + + + ОставлятьКопииСообщенийНаСервере + + Right + + ru + Требуется оставлять копии сообщений на сервере + + + OnChange + ОставлятьКопииСообщенийНаСервереПриИзменении + + + ОставлятьКопииСообщенийНаСервереРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + ОставлятьКопииСообщенийНаСервереКонтекстноеМеню + 53 + true + + CheckBoxField + Enter + true + Left + true + + + + ГруппаПериодХраненияСообщенийНаСервере + 63 + + УдалятьСообщенияССервера + 61 + + <key>ru</key> + <value>Удалять сообщения на сервере через:</value> + + true + true + + true + + + УдалятьСообщенияССервера + + Right + + ru + Выполнять автоматическое удаление старых сообщений с сервера + + + OnChange + УдалятьСообщенияССервераПриИзменении + + + УдалятьСообщенияССервераРасширеннаяПодсказка + 97 + 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) + + + ОставлятьКопииСообщенийЧислоДнейРасширеннаяПодсказка + 99 + 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 + + + НадписьДнейРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + НадписьДнейКонтекстноеМеню + 70 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа период хранения сообщений на сервере</value> + + + ru + Группа период хранения сообщений на сервере + + + ГруппаПериодХраненияСообщенийНаСервереРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Транспорт сообщений</value> + + + ГруппаОставлятьКопииСообщенийНаСервереРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Сервер входящей почты</value> + + + ru + Группа сервер входящей почты + + + ГруппаСерверВходящейПочтыРасширеннаяПодсказка + 90 Label true true @@ -626,8 +693,10 @@ Vertical Auto + WeakSeparation true true + auto Auto Auto @@ -653,7 +722,7 @@ SMTPАутентификацияУстановленаРасширеннаяПодсказка - 96 + 103 Label true true @@ -691,7 +760,7 @@ SMTPАутентификацияРасширеннаяПодсказка - 98 + 105 Label true true @@ -762,7 +831,7 @@ None ПустоеПолеРасширеннаяПодсказка - 102 + 109 Label true true @@ -802,7 +871,7 @@ ГруппаПустаяСтраницаРасширеннаяПодсказка - 101 + 108 Label true true @@ -830,9 +899,13 @@ ПользовательSMTP + + ru + Имя пользователя для дополнительной аутентификации на SMTP сервере + ПользовательSMTPРасширеннаяПодсказка - 105 + 112 Label true true @@ -872,9 +945,13 @@ ПарольSMTP + + ru + Имя пользователя для дополнительной аутентификации на SMTP сервере + ПарольSMTPРасширеннаяПодсказка - 107 + 114 Label true true @@ -915,9 +992,13 @@ СпособSMTPАутентификации + + ru + Способ аутентификации на сервере SMTP + СпособSMTPАутентификацииРасширеннаяПодсказка - 109 + 116 Label true true @@ -983,7 +1064,7 @@ ГруппаПараметрыРасширеннаяПодсказка - 104 + 111 Label true true @@ -1012,7 +1093,7 @@ ГруппаАутентификацияSMTPРасширеннаяПодсказка - 100 + 107 Label true true @@ -1034,20 +1115,14 @@ ru Сервер исходящей почты - - System.DefaultGUIFont - true - false - false - false - + ru Сервер исходящей почты СерверИсходящейПочтыРасширеннаяПодсказка - 95 + 102 Label true true @@ -1059,7 +1134,7 @@ Vertical Auto - NormalSeparation + WeakSeparation true true auto @@ -1082,7 +1157,7 @@ ДополнительноРасширеннаяПодсказка - 79 + 89 Label true true @@ -1116,7 +1191,7 @@ false ОКРасширеннаяПодсказка - 68 + 74 Label true true @@ -1143,7 +1218,7 @@ false ОтменаРасширеннаяПодсказка - 69 + 75 Label true true @@ -1170,7 +1245,7 @@ false СправкаРасширеннаяПодсказка - 70 + 76 Label true true @@ -1267,7 +1342,7 @@ ПортSMTP <key>ru</key> - <value>SMTP-сервер</value> + <value>Порт SMTP</value> 4 @@ -1286,7 +1361,7 @@ ПортPOP3 <key>ru</key> - <value>POP3-сервер</value> + <value>Порт POP3</value> 5 @@ -1341,7 +1416,7 @@ ДлительностьОжиданияСервера <key>ru</key> - <value>Длительность ожидания сервера (сек)</value> + <value>Длительность ожидания сервера</value> 8 @@ -1579,12 +1654,14 @@ УстановитьПортыПоУмолчанию <key>ru</key> - <value>Установить по умолчанию</value> + <value>Установить стандартные порты</value> 2 ru - Установить порты по умолчанию + Устананавливает стандартные номера портов: +POP3: 110 +SMTP: 25 true diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html index e7206e956..21c37c830 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ДополнительныеСвойстваУчетнойЗаписи/Help/ru.html @@ -1,4 +1,4 @@ - +

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

          • Общие
            • POP3 аутентификация - настройка аутентификации на сервере POP3 (сервер входящих сообщений)
          • Сервер исходящей почты - настройка аутентификации на сервере SMTP diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form index 2ab93fdf3..0a4d18a58 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаВыбора/Form.form @@ -207,8 +207,8 @@ Form.Item.Список.StandardCommand.Choose - Normal Auto + true true true UserCmds diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form index 8d32ad120..115143e04 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Form.form @@ -424,6 +424,7 @@ true InputField + true Enter true Left @@ -433,6 +434,7 @@ true true false + true true true true @@ -806,6 +808,10 @@ OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlock true true diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Help/ru.html index a51a26fe5..67f6344c3 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 d7305487e..410ffa65f 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Forms/ФормаЭлемента/Module.bsl @@ -57,6 +57,15 @@ КонецПроцедуры +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + Если Не ПустаяСтрока(Объект.АдресЭлектроннойПочты) И Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(Объект.АдресЭлектроннойПочты) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Почтовый адрес заполнен неверно'"), , "АдресЭлектроннойПочты", "Объект"); + Отказ = Истина; + КонецЕсли; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -81,3 +90,8 @@ КонецПроцедуры + + + + + diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html index d349bbfa5..38e44a8a7 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            См. также:

            diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl index 48ea9b42e..bce477867 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -29,3 +31,5 @@ ЗаполнитьОбъектЗначениямиПоУмолчанию(); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo index 587423d87..a815d0b42 100644 --- a/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo +++ b/SSL/src/Catalogs/УчетныеЗаписиЭлектроннойПочты/УчетныеЗаписиЭлектроннойПочты.mdo @@ -140,7 +140,7 @@ ru - Адресат учетной записи. От его имени будут отсылаться почтовые сообщения. Например "Иван Петров". + Адресат учетной записи. От его имени будут отсылаться почтовые сообщения. Например, "Иван Петров". @@ -190,6 +190,7 @@ + ShowError Use Use @@ -212,6 +213,7 @@ + ShowError Use Use @@ -282,6 +284,7 @@ + ShowError Use Use @@ -620,10 +623,10 @@ MobileDevice - ПроверкаУчетнойЗаписи + ПроверитьУчетнуюЗапись ru - Проверка учетной записи + Проверить учетную запись FormCommandBarImportant @@ -631,5 +634,9 @@ true Auto + + ru + Выполнить проверку учетной записи + diff --git a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Help/ru.html index 8693120d7..3a7e72798 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 bc7878986..361c50eb8 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl +++ b/SSL/src/Catalogs/Файлы/Forms/ВопросПриИмпортеФайлов/Module.bsl @@ -4,7 +4,7 @@ ФайлыБольшие = Параметры.ФайлыБольшие; - МаксимальныйРазмерФайла = Цел(ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла() / (1024 * 1024)); + МаксимальныйРазмерФайла = Цел(ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла() / (1024 * 1024)); Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html index 76e3d9d3b..7f4b91b0c 100644 --- a/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html +++ b/SSL/src/Catalogs/Файлы/Forms/ВыборКодировки/Help/ru.html @@ -1,4 +1,4 @@ - +

            - 1 - - - - - ОтображениеВариантовНазвание - 8 - - <key>ru</key> - <value>Отчет</value> - - true - true - - true - - - ДеревоНастройкиВидимостиВариантов.Название - - - ОтображениеВариантовНазваниеРасширеннаяПодсказка - 88 - Label - true - true - - Left - - - - ОтображениеВариантовНазваниеКонтекстноеМеню - 9 - true - - InputField - true - Auto - true - Left - true - - 10 - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Отчет</value> - - - ru - Отображение вариантов группа отчет - - - ОтображениеВариантовГруппаОтчетРасширеннаяПодсказка - 85 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - ОтображениеВариантовАвтор - 12 - true - true - - true - - - ДеревоНастройкиВидимостиВариантов.Автор - - - ОтображениеВариантовАвторРасширеннаяПодсказка - 90 - Label - true - true - - Left - - - - ОтображениеВариантовАвторКонтекстноеМеню - 13 - true - - InputField - true - Auto - true - Left - true - - 10 - true - true - true - true - true - true - Normal - - - Top - - ДеревоНастройкиВидимостиВариантовКоманднаяПанель - 5 - Left - - - Selection - ДеревоНастройкиВидимостиВариантовВыбор - - - OnActivateRow - ДеревоНастройкиВидимостиВариантовПриАктивизацииСтроки - - - ДеревоНастройкиВидимостиВариантовСтрокаПоиска - 76 - - ДеревоНастройкиВидимостиВариантовСтрокаПоискаРасширеннаяПодсказка - 78 - Label - true - true - - Left - - - - ДеревоНастройкиВидимостиВариантовСтрокаПоискаКонтекстноеМеню - 77 - true - - ДеревоНастройкиВидимостиВариантов - - true - - - - ДеревоНастройкиВидимостиВариантовСостояниеПросмотра - 79 - - ДеревоНастройкиВидимостиВариантовСостояниеПросмотраРасширеннаяПодсказка - 81 - Label - true - true - - Left - - - - ДеревоНастройкиВидимостиВариантовСостояниеПросмотраКонтекстноеМеню - 80 - true - - ViewStatusAddition - ДеревоНастройкиВидимостиВариантов - - true - - - - ДеревоНастройкиВидимостиВариантовУправлениеПоиском - 82 - - ДеревоНастройкиВидимостиВариантовУправлениеПоискомРасширеннаяПодсказка - 84 - Label - true - true - - Left - - - - ДеревоНастройкиВидимостиВариантовУправлениеПоискомКонтекстноеМеню - 83 - true - - SearchControlAddition - ДеревоНастройкиВидимостиВариантов - - true - - - - ДеревоНастройкиВидимостиВариантовРасширеннаяПодсказка - 75 - Label - true - true - - Left - - - - ДеревоНастройкиВидимостиВариантовКонтекстноеМеню - 4 - - ФормаОткрыть - 15 - true - true - - true - - - ФормаОткрытьРасширеннаяПодсказка - 73 - Label - true - true - - Left - - - Form.Command.Открыть - Normal - Auto - true - true - UserCmds - Auto - - - ФормаИспользовать - 16 - true - true - - true - - - ФормаИспользоватьРасширеннаяПодсказка - 74 - Label - true - true - - Left - - - Form.Command.Использовать - Normal - Auto - true - true - UserCmds - Auto - - - Tree - true - true - true - 20 - true - true - MultiRow -

            true
            - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - ExpandAllLevels - true - true - None - None - None - true - - - ГруппаОписание - 21 - - КартинкаИнфо - 22 - - <key>ru</key> - <value>Картинка инфо</value> - - true - true - - true - - - КартинкаИнфоРасширеннаяПодсказка - 101 - Label - true - true - - Left - - - - КартинкаИнфоКонтекстноеМеню - 23 - true - - 2 - true - 1 - true - false - false - - - CommonPicture.Информация - - - - - ОтображениеВариантовОписание - 10 - true - true - - true - - - Items.ДеревоНастройкиВидимостиВариантов.CurrentData.Описание - - None - - ОтображениеВариантовОписаниеРасширеннаяПодсказка - 102 - Label - true - true - - Left - - - - ОтображениеВариантовОписаниеКонтекстноеМеню - 11 - true - - LabelField - true - Auto - true - Left - true - - true - 2 - true - true - true - - - true - true - - true - - - <key>ru</key> - <value>Группа описание</value> - - - ru - Группа описание - - - ГруппаОписаниеРасширеннаяПодсказка - 100 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа дерево</value> - - - ru - Группа дерево - - - ГруппаДеревоРасширеннаяПодсказка - 72 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - ГруппаСписок - 29 - - СписокНастройкиВидимостиВариантов - 30 - true - true - - true - - - СписокНастройкиВидимостиВариантов - - None - - ОтображениеВариантовСписокГруппаЯчейка - 62 - - ОтображениеВариантовСписокКартинка - 60 - true - true - - true - - - СписокНастройкиВидимостиВариантов.Картинка - - - ОтображениеВариантовСписокКартинкаРасширеннаяПодсказка - 118 - Label - true - true - - Left - - - - ОтображениеВариантовСписокКартинкаКонтекстноеМеню - 61 - true - - PictureField - true - Auto - Left - true - - true - true - true - true - - - 1 - - - - - ОтображениеВариантовСписокНазвание - 51 - - <key>ru</key> - <value>Отчет</value> - - true - true - - true - - - СписокНастройкиВидимостиВариантов.Название - - - ОтображениеВариантовСписокНазваниеРасширеннаяПодсказка - 120 - Label - true - true - - Left - - - - ОтображениеВариантовСписокНазваниеКонтекстноеМеню - 52 - true - - InputField - true - Auto - true - Left - true - - 10 - true - true - true - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Отображение вариантов список группа ячейка</value> - - - ru - Отображение вариантов список группа ячейка - - - ОтображениеВариантовСписокГруппаЯчейкаРасширеннаяПодсказка - 117 - Label - true - true - - Left - - - ColumnGroup - - InCell - auto - true - - - - ОтображениеВариантовСписокАвтор - 53 - true - true - - true - - - СписокНастройкиВидимостиВариантов.Автор - - - ОтображениеВариантовСписокАвторРасширеннаяПодсказка - 122 - Label - true - true - - Left - - - - ОтображениеВариантовСписокАвторКонтекстноеМеню - 54 - true - - InputField - true - Auto - true - Left - true - - 10 - true - true - true - true - true - true - Normal - - - Top - - СписокНастройкиВидимостиВариантовКоманднаяПанель - 32 - Left - - - Selection - СписокНастройкиВидимостиВариантовВыбор - - - OnActivateRow - СписокНастройкиВидимостиВариантовПриАктивизацииСтроки - - - СписокНастройкиВидимостиВариантовСтрокаПоиска - 108 - - СписокНастройкиВидимостиВариантовСтрокаПоискаРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - - СписокНастройкиВидимостиВариантовСтрокаПоискаКонтекстноеМеню - 109 - true - - СписокНастройкиВидимостиВариантов - - true - - - - СписокНастройкиВидимостиВариантовСостояниеПросмотра - 111 - - СписокНастройкиВидимостиВариантовСостояниеПросмотраРасширеннаяПодсказка - 113 - Label - true - true - - Left - - - - СписокНастройкиВидимостиВариантовСостояниеПросмотраКонтекстноеМеню - 112 - true - - ViewStatusAddition - СписокНастройкиВидимостиВариантов - - true - - - - СписокНастройкиВидимостиВариантовУправлениеПоиском - 114 - - СписокНастройкиВидимостиВариантовУправлениеПоискомРасширеннаяПодсказка - 116 - Label - true - true - - Left - - - - СписокНастройкиВидимостиВариантовУправлениеПоискомКонтекстноеМеню - 115 - true - - SearchControlAddition - СписокНастройкиВидимостиВариантов - - true - - - - СписокНастройкиВидимостиВариантовРасширеннаяПодсказка - 107 - Label - true - true - - Left - - - - СписокНастройкиВидимостиВариантовКонтекстноеМеню - 31 - - ФормаОткрытьСписок - 37 - true - true - - true - - - ФормаОткрытьСписокРасширеннаяПодсказка - 105 - Label - true - true - - Left - - - Form.Command.Открыть - Normal - Auto - true - true - UserCmds - Auto - - - ФормаИспользоватьСписок - 38 - true - true - - true - - - ФормаИспользоватьСписокРасширеннаяПодсказка - 106 - Label - true - true - - Left - - - Form.Command.Использовать - Normal - Auto - true - true - UserCmds - Auto - - - true - true - true - 20 - true - true - MultiRow -
            true
            - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - ExpandAllLevels - true - true - true - true - None - None - None - true - -
            - - ГруппаОписаниеДляСписка - 45 - - КартинкаИнфоДляСписка - 46 - - <key>ru</key> - <value>Картинка инфо</value> - - true - true - - true - - - КартинкаИнфоДляСпискаРасширеннаяПодсказка - 133 - Label - true - true - - Left - - - - КартинкаИнфоДляСпискаКонтекстноеМеню - 47 - true - - 2 - true - 1 - true - false - false - - - CommonPicture.Информация - - - - - ОтображениеВариантовОписаниеДляСписка - 48 - true - true - - true - - - Items.СписокНастройкиВидимостиВариантов.CurrentData.Описание - - None - - ОтображениеВариантовОписаниеДляСпискаРасширеннаяПодсказка - 134 - Label - true - true - - Left - - - - ОтображениеВариантовОписаниеДляСпискаКонтекстноеМеню - 49 - true - - LabelField - true - Auto - true - Left - true - - true - 2 - true - true - true - - - true - true - - true - - - <key>ru</key> - <value>Группа описание</value> - - - ru - Группа описание - - - ГруппаОписаниеДляСпискаРасширеннаяПодсказка - 132 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Группа список</value> - - - ru - Группа список - - - ГруппаСписокРасширеннаяПодсказка - 104 - Label - true - true - - Left - - - Page - - Vertical - auto - -
            - true - true - - true - - - <key>ru</key> - <value>Группа страницы представления</value> - - - ru - Группа страницы представления - - - ГруппаСтраницыПредставленияРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - Pages - - Auto - - - Top - true - - ФормаКоманднаяПанель - -1 - - ФормаОткрытьКП - 20 - true - true - - true - - - ФормаОткрытьКПРасширеннаяПодсказка - 64 - Label - true - true - - Left - - - Form.Command.Открыть - Auto - true - true - true - UserCmds - Auto - - - ФормаНайти - 55 - true - false - - true - - - ФормаНайтиРасширеннаяПодсказка - 65 - Label - true - true - - Left - - - Form.Item.СписокНастройкиВидимостиВариантов.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ФормаОтменитьПоиск - 56 - true - false - - true - - - ФормаОтменитьПоискРасширеннаяПодсказка - 66 - Label - true - true - - Left - - - Form.Item.СписокНастройкиВидимостиВариантов.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - - ФормаРазделы - 50 - true - true - - true - - - ФормаРазделыРасширеннаяПодсказка - 67 - Label - true - true - - Left - - - Form.Command.Разделы - Normal - Auto - true - true - UserCmds - true - Auto - - - ФормаИспользоватьКП - 19 - - <key>ru</key> - <value>Быстрый доступ</value> - - true - true - - true - - - ФормаИспользоватьКПРасширеннаяПодсказка - 68 - Label - true - true - - Left - - - Form.Command.Использовать - Normal - Auto - true - true - UserCmds - Auto - - - ФормаЗакрыть - 14 - true - true - - true - - - ФормаЗакрытьРасширеннаяПодсказка - 69 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - PictureAndText - true - true - UserCmds - Auto - - - ФормаСправка - 63 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - Left - - - OnCreateAtServer - ПриСозданииНаСервере - - - OnClose - ПриЗакрытии - - 55 - DontBlock - true - true - Vertical - LeftWidest - true - true - true - UseIfNecessary - auto - true - - СписокПодсистем - - <key>ru</key> - <value>Список подсистем</value> - - 1 - - ValueList - - - true - - - true - - - - - - - СписокКлючей - - <key>ru</key> - <value>Список ключей</value> - - 2 - - ValueList - - - true - - - true - - - - - - - ДеревоНастройкиВидимостиВариантов - - <key>ru</key> - <value>Дерево настройки видимости вариантов</value> - - 3 - - ValueTree - - - true - - - true - - - Использование - - <key>ru</key> - <value>Использование</value> - - 1 - - Boolean - - - true - - - true - - - - Название - - <key>ru</key> - <value>Название</value> - - 2 - - String - - 500 - - - - true - - - true - - - - Описание - - <key>ru</key> - <value>Описание</value> - - 3 - - String - - - - true - - - true - - - - Автор - - <key>ru</key> - <value>Автор</value> - - 4 - - CatalogRef.Пользователи - - - true - - - true - - - - Ключ - - <key>ru</key> - <value>Полный ключ варианта</value> - - 6 - - String - - - - true - - - true - - - - НазваниеЭлемента - - <key>ru</key> - <value>Название элемента</value> - - 5 - - String - - - - true - - - true - - - - Идентификатор - - <key>ru</key> - <value>Идентификатор</value> - - 7 - - Number - - 4 - - - - true - - - true - - - - Картинка - - <key>ru</key> - <value>Картинка</value> - - 8 - - Picture - - - true - - - true - - - - ВнешняяКоманда - - <key>ru</key> - <value>Внешняя команда</value> - - 9 - - Boolean - - - true - - - true - - - - - СписокНастройкиВидимостиВариантов - - <key>ru</key> - <value>Список настройки видимости вариантов</value> - - 4 - - ValueTable - - - true - - - true - - - Использование - - <key>ru</key> - <value>Использование</value> - - 1 - - Boolean - - - true - - - true - - - - Название - - <key>ru</key> - <value>Название</value> - - 2 - - String - - 500 - - - - true - - - true - - - - Описание - - <key>ru</key> - <value>Описание</value> - - 3 - - String - - - - true - - - true - - - - Автор - - <key>ru</key> - <value>Автор</value> - - 4 - - CatalogRef.Пользователи - - - true - - - true - - - - Ключ - - <key>ru</key> - <value>Полный ключ варианта</value> - - 6 - - String - - - - true - - - true - - - - НазваниеЭлемента - - <key>ru</key> - <value>Название элемента</value> - - 5 - - String - - - - true - - - true - - - - Идентификатор - - <key>ru</key> - <value>Идентификатор</value> - - 7 - - Number - - 4 - - - - true - - - true - - - - Картинка - - <key>ru</key> - <value>Картинка</value> - - 8 - - Picture - - - true - - - true - - - - ВнешняяКоманда - - <key>ru</key> - <value>Внешняя команда</value> - - 9 - - Boolean - - - true - - - true - - - - - Закрепить - - <key>ru</key> - <value>Закрепить</value> - - 5 - - Picture - - - true - - - true - - - - Открепить - - <key>ru</key> - <value>Открепить</value> - - 6 - - Picture - - - true - - - true - - - - ЗначениеПараметровКоманд - - <key>ru</key> - <value>Значение параметров команд</value> - - 7 - - ValueTable - - - true - - - true - - - Ключ - - <key>ru</key> - <value>Ключ</value> - - 1 - - String - - - - true - - - true - - - - ИндексПозицииЭлемента - - <key>ru</key> - <value>Индекс позиции элемента</value> - - 2 - - Number - - 5 - true - - - - true - - - true - - - - - МассивПараметровКомманд - - <key>ru</key> - <value>Массив параметров комманд</value> - - 8 - - - true - - - true - - - - Открыть - - <key>ru</key> - <value>Открыть</value> - - 2 - - ru - Открыть - - - true - - - - ОткрытьОтчет - - - Auto - Auto - - - Использовать - - <key>ru</key> - <value>Быстрый доступ</value> - - 3 - - ru - Включить/отключить быстрый доступ отчета - - - true - - - - Использовать - - - Auto - Auto - - - Разделы - - <key>ru</key> - <value>Разделы</value> - - 5 - - ru - Показывать разделы панели - - - true - - - - Разделы - - - Auto - Auto - - - АдресПараметровВызова - - String - - - - - ДопВариантыОтчета - - ValueList - - - - НеВыводить - - ValueList - - - - Подсистемы - - ValueList - String - - 500 - - - - - ИмяФормы - - String - - - - - - - - diff --git a/SSL/src/CommonForms/ВсеОтчеты/Help/ru.html b/SSL/src/CommonForms/ВсеОтчеты/Help/ru.html deleted file mode 100644 index 9a0f6c2f0..000000000 --- a/SSL/src/CommonForms/ВсеОтчеты/Help/ru.html +++ /dev/null @@ -1,5 +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 ce9b6f751..000000000 --- a/SSL/src/CommonForms/ВсеОтчеты/Module.bsl +++ /dev/null @@ -1,637 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(Параметры.Подсистемы) = Тип("СписокЗначений") Тогда - ПутиПодсистемы = Параметры.Подсистемы; - Иначе - ПутиПодсистемы = Новый СписокЗначений; - ПутиПодсистемы.Добавить(Параметры.Подсистемы); - КонецЕсли; - - Закрепить = БиблиотекаКартинок.ЗакрепитьВариантОтчета; - Открепить = БиблиотекаКартинок.ОткрепитьВариантОтчета; - - ЭтаФорма.Заголовок = Параметры.ИмяФормы; - - ГруппироватьВарианты = Истина; - - СписокОтчетов = ВариантыОтчетовПереопределяемый.СписокОтчетовПоддерживаемыхПодсистемой(); - - ДеревоПодсистем = Новый ДеревоЗначений; - ДеревоПодсистем.Колонки.Добавить("Подсистема"); - ДеревоПодсистем.Колонки.Добавить("Название"); - - СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(ПутиПодсистемы, ДеревоПодсистем); - Если СписокПодсистем.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - МаксимальнаяДлинна = 0; - - Для каждого ЭлементСпПодсистема из СписокПодсистем Цикл - МаксимальнаяДлинна = Макс(СтрДлина(ЭлементСпПодсистема.Значение), МаксимальнаяДлинна); - КонецЦикла; - - - // Получить варианты отчетов с разделами - ТЗ = "ВЫБРАТЬ - | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ, - | ВариантыОтчетов.Наименование КАК Представление, - | ВариантыОтчетов.Описание, - | ВариантыОтчетов.БыстрыйДоступ, - | ВариантыОтчетов.Наименование КАК Сортировка, - | ВариантыОтчетов.ТипВариантаОтчета, - | ВариантыОтчетов.Администратор, - | ВариантыОтчетовПодсистемы.Подсистема - |ИЗ - | Справочник.ВариантыОтчетов.Подсистемы КАК ВариантыОтчетовПодсистемы - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ПО ВариантыОтчетовПодсистемы.Ссылка = ВариантыОтчетов.Ссылка - |ГДЕ - | (НЕ ВариантыОтчетов.ПометкаУдаления) - | И ВЫРАЗИТЬ(ВариантыОтчетовПодсистемы.Подсистема КАК Строка("+Формат(МаксимальнаяДлинна, "ЧГ=0")+"))В (&Подсистемы) - | И ВариантыОтчетов.КлючОбъекта В (&СписокОтчетов) - | - |УПОРЯДОЧИТЬ ПО - | Сортировка"; - - Запрос = Новый Запрос(ТЗ); - Запрос.УстановитьПараметр("Подсистемы", СписокПодсистем); - Запрос.УстановитьПараметр("СписокОтчетов", СписокОтчетов); - УстановитьПривилегированныйРежим(истина); - ТаблицаВариантов = Запрос.Выполнить().Выгрузить(); - УстановитьПривилегированныйРежим(ложь); - - // роли вариантов - ТЗ = "ВЫБРАТЬ - | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ, - | ИсключенныеПользователи.Пользователь КАК Пользователь, - | НЕ ВариантыОтчетов.БыстрыйДоступ КАК БыстрыйДоступ - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.ИсключенияБыстрогоДоступа КАК ИсключенныеПользователи - | ПО ВариантыОтчетов.Ссылка = ИсключенныеПользователи.Ссылка - |ГДЕ - | (НЕ ВариантыОтчетов.ПометкаУдаления) - | И ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта В (&Ключи) - | И ВариантыОтчетов.КлючОбъекта В (&СписокОтчетов) - | И (ИсключенныеПользователи.Пользователь = Пользователь)"; - - Запрос.Текст = ТЗ; - Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); - Запрос.УстановитьПараметр("Ключи", ТаблицаВариантов.ВыгрузитьКолонку("Ключ")); - УстановитьПривилегированныйРежим(истина); - ТаблицаПользователей = Запрос.Выполнить().Выгрузить(); - УстановитьПривилегированныйРежим(ложь); - - ТаблицаВариантов.Колонки.Добавить("Группировка", Новый ОписаниеТипов(,, Новый КвалификаторыСтроки())); - ТаблицаВариантов.Колонки.Добавить("ВнешняяКоманда", Новый ОписаниеТипов(,, Новый КвалификаторыСтроки())); - - СписокГруппировок = Новый ТаблицаЗначений; - СписокГруппировок.Колонки.Добавить("Группировка"); - СписокГруппировок.Колонки.Добавить("ГруппировкаПредставление"); - - Для каждого СтрокаПодсистемы из ДеревоПодсистем.Строки Цикл - ДанныеГруппировки = СписокГруппировок.Добавить(); - ДанныеГруппировки.Группировка = СтрокаПодсистемы.Подсистема; - ДанныеГруппировки.ГруппировкаПредставление = ""; - Для каждого СтрокаГруппировки из СтрокаПодсистемы.Строки Цикл - ДанныеГруппировки = СписокГруппировок.Добавить(); - ДанныеГруппировки.Группировка = СтрокаГруппировки.Подсистема; - ДанныеГруппировки.ГруппировкаПредставление = СтрокаГруппировки.Название; - КонецЦикла; - КонецЦикла; - - // Дерево вариантов - - ГруппировкиВариантов = Новый Соответствие; - - ГруппировкиВариантовСмТакже = Новый СписокЗначений; - - СгруппированныйСписокВариантовОтчетов = Новый ДеревоЗначений; - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Ключ"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Представление"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Описание"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Группировка"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("ГруппировкаПредставление"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Сортировка"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("БыстрыйДоступ"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Администратор"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("ВнешняяКоманда"); - - Если ГруппироватьВарианты Тогда - Для каждого ГруппировкаВар из СписокГруппировок Цикл - Если Найти(ГруппировкаВар.Группировка, "СмТакже") > 0 Тогда - Продолжить; - КонецЕсли; - СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить(); - СтрокаГруппировкиОтчета.Группировка = ГруппировкаВар.Группировка; - СтрокаГруппировкиОтчета.ГруппировкаПредставление = ГруппировкаВар.ГруппировкаПредставление; - ГруппировкиВариантов.Вставить(ГруппировкаВар.Группировка, СтрокаГруппировкиОтчета); - КонецЦикла; - КонецЕсли; - - СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить(); - СтрокаГруппировкиОтчета.Группировка = "ПрочиеИПользовательскиеВариантыОтчета"; - СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'Прочие'"); - ГруппировкиВариантов.Вставить("ПрочиеИПользовательскиеВариантыОтчета", СтрокаГруппировкиОтчета); - СтрокаФиксированнаяГруппировка = СтрокаГруппировкиОтчета; - - СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить(); - СтрокаГруппировкиОтчета.Группировка = "СмТакже"; - СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'См. также'"); - ГруппировкиВариантов.Вставить("СмТакже", СтрокаГруппировкиОтчета); - СтрокаГруппировкаСмТакже = СтрокаГруппировкиОтчета; - - СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить(); - СтрокаГруппировкиОтчета.Группировка = "ДополнительныеОтчеты"; - СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'Дополнительные отчеты'"); - ГруппировкиВариантов.Вставить("ДополнительныеОтчеты", СтрокаГруппировкиОтчета); - СтрокаГруппировкаДополнительныеОтчеты = СтрокаГруппировкиОтчета; - - - //ДополнительныеКоманды - ТаблицаДополнительныхКоманд = Новый ТаблицаЗначений; - ТаблицаДополнительныхКоманд.Колонки.Добавить("УникальныйИдентификатор"); - ТаблицаДополнительныхКоманд.Колонки.Добавить("Представление"); - ТаблицаДополнительныхКоманд.Колонки.Добавить("Описание"); - ТаблицаДополнительныхКоманд.Колонки.Добавить("БыстрыйДоступ"); - ТаблицаДополнительныхКоманд.Колонки.Добавить("ПараметрКоманды"); - - ВариантыОтчетовПереопределяемый.СписокДополнительныхКоманд(ТаблицаДополнительныхКоманд, ПутиПодсистемы); - - ПараметрыКоманд = Новый Массив; - - Если ТаблицаДополнительныхКоманд.Количество() > 0 Тогда - Индекс = 0; - Для Каждого СтрокаДополнительногоОтчета из ТаблицаДополнительныхКоманд Цикл - - СтрокаТаблицаВариантов = ТаблицаВариантов.Добавить(); - СтрокаТаблицаВариантов.Ключ = "Отчет.ДополнительнаяКоманда\"+СтрокаДополнительногоОтчета.УникальныйИдентификатор; - СтрокаТаблицаВариантов.Представление = СтрокаДополнительногоОтчета.Представление; - СтрокаТаблицаВариантов.Описание = СтрокаДополнительногоОтчета.Описание; - СтрокаТаблицаВариантов.БыстрыйДоступ = СтрокаДополнительногоОтчета.БыстрыйДоступ; - СтрокаТаблицаВариантов.Сортировка = СтрокаДополнительногоОтчета.Представление; - СтрокаТаблицаВариантов.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ДополнительнаяКоманда; - СтрокаТаблицаВариантов.Подсистема = "ДополнительныеОтчеты"; - СтрокаТаблицаВариантов.ВнешняяКоманда = Истина; - - СтрокаЗначенияКоманды = ЗначениеПараметровКоманд.Добавить(); - СтрокаЗначенияКоманды.Ключ = СтрокаДополнительногоОтчета.УникальныйИдентификатор; - СтрокаЗначенияКоманды.ИндексПозицииЭлемента = Индекс; - ПараметрыКоманд.Добавить(Новый ФиксированнаяСтруктура(СтрокаДополнительногоОтчета.ПараметрКоманды)); - Индекс = Индекс + 1; - - КонецЦикла; - КонецЕсли; - - МассивПараметровКомманд = Новый ФиксированныйМассив(ПараметрыКоманд); - - // Составим список отчетов - СоответствиеВариантовНомеруСортировки = Новый Соответствие; - - Для каждого СтрокаВариантаОтчета из ТаблицаВариантов Цикл - - Если НЕ ГруппироватьВарианты или НЕ ЗначениеЗаполнено(СтрокаВариантаОтчета.Подсистема ) Тогда - СтрокаВариантаОтчета.Группировка = "ПрочиеИПользовательскиеВариантыОтчета"; - Иначе - Если Найти(СтрокаВариантаОтчета.Подсистема, "СмТакже") > 0 Тогда - СтрокаВариантаОтчета.Группировка = "СмТакже"; - ИначеЕсли СтрокаВариантаОтчета.Подсистема = СтрокаВариантаОтчета.Подсистема Тогда - Для каждого ГруппировкаВараинта из ГруппировкиВариантов Цикл - Если СтрокаВариантаОтчета.Подсистема = ГруппировкаВараинта.Ключ Тогда - СтрокаВариантаОтчета.Группировка = ГруппировкаВараинта.Ключ; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - СоответствиеВариантовНомеруСортировки.Вставить(СтрокаВариантаОтчета.Ключ, СтрокаВариантаОтчета.Сортировка); - КонецЦикла; - - Для каждого СтрокаВарианта из ТаблицаВариантов Цикл - БыстрыйДоступ = СтрокаВарианта.БыстрыйДоступ; - СтрокиПользователи = ТаблицаПользователей.НайтиСтроки(Новый Структура("Ключ, Пользователь", СтрокаВарианта.Ключ, Пользователи.ТекущийПользователь())); - Для каждого СтрокаПользователи из СтрокиПользователи Цикл - БыстрыйДоступ = СтрокаПользователи.БыстрыйДоступ; - КонецЦикла; - - Если СтрокаВарианта.Группировка = Неопределено Тогда - НаборСтрок = СтрокаФиксированнаяГруппировка.Строки; - Иначе - НаборСтрок = ГруппировкиВариантов[СтрокаВарианта.Группировка].Строки; - КонецЕсли; - Если НаборСтрок.НайтиСтроки(Новый Структура("Ключ", СтрокаВарианта.Ключ)).Количество() = 0 Тогда - СтрокаВариантаОтчета = НаборСтрок.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаВариантаОтчета, СтрокаВарианта); - Если СтрокаВарианта.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет Тогда - СтрокаВариантаОтчета.Ключ = СтрокаВарианта.Ключ + "_Отчет_"; - КонецЕсли; - СтрокаВариантаОтчета.БыстрыйДоступ = БыстрыйДоступ; - СтрокаВариантаОтчета.Сортировка = СоответствиеВариантовНомеруСортировки[СтрокаВарианта.Ключ]; - Если НЕ ЗначениеЗаполнено(СтрокаВариантаОтчета.Сортировка) Тогда - СтрокаВариантаОтчета.Сортировка = "ЯЯ9999999999999"; - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - Для каждого СтрокаГруппировки из СгруппированныйСписокВариантовОтчетов.Строки Цикл - - Если СтрокаГруппировки.Строки.Количество() > 0 Тогда - - Если СтрокаГруппировки.ГруппировкаПредставление = "" Тогда - ЭлементыГруппы = ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы(); - ИмяГруппировки = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаГруппировки.Группировка); - - Иначе - ЭлементГруппирвоки = ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы().Добавить(); - ЭлементГруппирвоки.Название = СтрокаГруппировки.ГруппировкаПредставление; - ЭлементыГруппы = ЭлементГруппирвоки.ПолучитьЭлементы(); - ИмяГруппировки = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаГруппировки.Группировка); - КонецЕсли; - - ИмяГруппировки = "_ГруппаРаздела_" + ИмяГруппировки; - - Для каждого СтрокаВарианта из СтрокаГруппировки.Строки Цикл - - ИмяОтчета = СтрокаВарианта.Ключ; - - ПозицияВарианта = Найти(ИмяОтчета, "\"); - ИмяОтчета = Лев(ИмяОтчета, ПозицияВарианта-1); - ИмяОтчета = СтрЗаменить(ИмяОтчета, "Отчет.", ""); - - СодержитсяВФО = Ложь; - ДоступенПоФО = Ложь; - - Если Найти(ИмяОтчета, "ДополнительнаяКоманда") = 0 Тогда - Отчет = Метаданные.Отчеты.Найти(ИмяОтчета); - Если Отчет = Неопределено Тогда - Продолжить; - КонецЕсли; - - ЕстьПравоПросмотра = ПравоДоступа("Просмотр", Отчет); - Если НЕ ЕстьПравоПросмотра Тогда - Продолжить; - КонецЕсли; - - ПараметрыФО = Новый Структура(""); - ДоступенПоФО = Ложь; - СодержитсяВФО = Ложь; - Для каждого Опция из Метаданные.ФункциональныеОпции Цикл - - Если Опция.Состав.Найти(Отчет.Имя) = Неопределено Тогда - Продолжить; - КонецЕсли; - - СодержитсяВФО = Истина; - - ЗначениеФО = ПолучитьФункциональнуюОпцию(Опция.Имя, ПараметрыФО); - Если ТипЗнч(ЗначениеФО) = Тип("Булево") Тогда - Если ЗначениеФО Тогда - ДоступенПоФО = Истина; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Иначе - СодержитсяВФО = Ложь; - ДоступенПоФО = Истина; - КонецЕсли; - - Если СодержитсяВФО И НЕ ДоступенПоФО Тогда - Продолжить; - КонецЕсли; - - Элемент = ЭлементыГруппы.Добавить(); - Элемент.Использование = СтрокаВарианта.БыстрыйДоступ; - Элемент.Название = СтрокаВарианта.Представление; - Элемент.Описание = СтрокаВарианта.Описание; - Элемент.Автор = СтрокаВарианта.Администратор; - Элемент.Ключ = СтрокаВарианта.Ключ; - Элемент.ВнешняяКоманда = СтрокаВарианта.ВнешняяКоманда; - - Если Элемент.Использование Тогда - Элемент.Картинка = Закрепить; - Иначе - Элемент.Картинка = Открепить; - КонецЕсли; - - Ключ = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаВарианта.Ключ); - Элемент.НазваниеЭлемента = Ключ + ИмяГруппировки; - - ЭлементСтроки = СписокНастройкиВидимостиВариантов.Добавить(); - ЭлементСтроки.Использование = СтрокаВарианта.БыстрыйДоступ; - ЭлементСтроки.Название = СтрокаВарианта.Представление; - ЭлементСтроки.Описание = СтрокаВарианта.Описание; - ЭлементСтроки.Автор = СтрокаВарианта.Администратор; - ЭлементСтроки.Ключ = СтрокаВарианта.Ключ; - ЭлементСтроки.Идентификатор = Элемент.ПолучитьИдентификатор(); - Элемент.Идентификатор = ЭлементСтроки.ПолучитьИдентификатор(); - Элемент.ВнешняяКоманда = СтрокаВарианта.ВнешняяКоманда; - - Если ЭлементСтроки.Использование Тогда - ЭлементСтроки.Картинка = Закрепить; - Иначе - ЭлементСтроки.Картинка = Открепить; - КонецЕсли; - - Ключ = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаВарианта.Ключ); - Элемент.НазваниеЭлемента = Ключ + ИмяГруппировки; - - КонецЦикла; - - КонецЕсли; - КонецЦикла; - - МассивНаУдаление = Новый Массив; - - Для каждого СтрокаГруппировки из ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы() Цикл - Если СтрокаГруппировки.ПолучитьЭлементы().Количество() = 0 и СтрокаГруппировки.Ключ = "" Тогда - МассивНаУдаление.Добавить(СтрокаГруппировки); - КонецЕсли; - КонецЦикла; - - Для каждого СтрокаНаУдаление из МассивНаУдаление Цикл - ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы().Удалить(СтрокаНаУдаление); - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриЗакрытии() - - СписокКлючейВарианта = Новый СписокЗначений; - СписокЭлементовУправления = Новый СписокЗначений; - - Для каждого СтрокаГруппировки из ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы() Цикл - Если СтрокаГруппировки.Ключ <> "" Тогда - КлючОбъекта = СтрокаГруппировки.Ключ; - ПозицияВарианта = Найти(КлючОбъекта, "\"); - ИмяОтчета = Лев(КлючОбъекта, ПозицияВарианта-1); - КлючВарианта = Прав(КлючОбъекта, СтрДлина(КлючОбъекта)-ПозицияВарианта); - СписокКлючейВарианта.Добавить(КлючОбъекта, , СтрокаГруппировки.Использование); - СписокЭлементовУправления.Добавить(СтрокаГруппировки.НазваниеЭлемента, , СтрокаГруппировки.Использование); - Иначе - Для каждого ЭлементЗначение из СтрокаГруппировки.ПолучитьЭлементы() Цикл - КлючОбъекта = ЭлементЗначение.Ключ; - ПозицияВарианта = Найти(КлючОбъекта, "\"); - ИмяОтчета = Лев(КлючОбъекта, ПозицияВарианта-1); - КлючВарианта = Прав(КлючОбъекта, СтрДлина(КлючОбъекта)-ПозицияВарианта); - СписокКлючейВарианта.Добавить(КлючОбъекта, , ЭлементЗначение.Использование); - СписокЭлементовУправления.Добавить(ЭлементЗначение.НазваниеЭлемента, , ЭлементЗначение.Использование); - КонецЦикла; - КонецЕсли; - КонецЦикла; - - ОповеститьОВыборе(Новый Структура("СписокВариантов, СписокЭлементов", СписокКлючейВарианта, СписокЭлементовУправления)); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоНастройкиВидимостиВариантов - -&НаКлиенте -Процедура ДеревоНастройкиВидимостиВариантовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ВыборВТаблице(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура ДеревоНастройкиВидимостиВариантовПриАктивизацииСтроки(Элемент) - - Если Элемент.ТекущиеДанные <> Неопределено И Элемент.ТекущиеДанные.Использование Тогда - Элементы.ФормаИспользовать.Пометка = Истина; - Элементы.ФормаИспользоватьКП.Пометка = Истина; - Элементы.ФормаИспользоватьСписок.Пометка = Истина; - Иначе - Элементы.ФормаИспользовать.Пометка = Ложь; - Элементы.ФормаИспользоватьКП.Пометка = Ложь; - Элементы.ФормаИспользоватьСписок.Пометка = Ложь; - КонецЕсли; - - Если Элемент.ТекущиеДанные <> Неопределено И Элемент.ТекущиеДанные.Ключ = "" Тогда - Элементы.ФормаИспользовать.Доступность = Ложь; - Элементы.ФормаИспользоватьКП.Доступность = Ложь; - Элементы.ФормаОткрыть.Доступность = Ложь; - Элементы.ФормаОткрытьКП.Доступность = Ложь; - Элементы.ФормаОткрытьСписок.Доступность = Ложь; - Элементы.ФормаИспользоватьСписок.Доступность = Ложь; - Иначе - Элементы.ФормаИспользовать.Доступность = Истина; - Элементы.ФормаИспользоватьКП.Доступность = Истина; - Элементы.ФормаОткрыть.Доступность = Истина; - Элементы.ФормаОткрытьКП.Доступность = Истина; - Элементы.ФормаОткрытьСписок.Доступность = Истина; - Элементы.ФормаИспользоватьСписок.Доступность = Истина; - КонецЕсли; - - Если Элемент.ТекущиеДанные <> Неопределено Тогда - Ключ = Элемент.ТекущиеДанные.Ключ; - Элементы.СписокНастройкиВидимостиВариантов.ТекущаяСтрока = Элемент.ТекущиеДанные.Идентификатор; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокНастройкиВидимостиВариантов - -&НаКлиенте -Процедура СписокНастройкиВидимостиВариантовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - ВыборВТаблице(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка); - -КонецПроцедуры - -&НаКлиенте -Процедура СписокНастройкиВидимостиВариантовПриАктивизацииСтроки(Элемент) - - Если Элемент.ТекущиеДанные <> Неопределено Тогда - Ключ = Элемент.ТекущиеДанные.Ключ; - Элементы.ДеревоНастройкиВидимостиВариантов.ТекущаяСтрока = Элемент.ТекущиеДанные.Идентификатор; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура Использовать(Команда) - - Если Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - СписокКлючейВариантов = Новый СписокЗначений; - Если Элементы.ДеревоНастройкиВидимостиВариантов.ВыделенныеСтроки.Количество() > 0 Тогда - Для каждого ИндексСтроки из Элементы.ДеревоНастройкиВидимостиВариантов.ВыделенныеСтроки Цикл - ТекущиеДанные = ДеревоНастройкиВидимостиВариантов.НайтиПоИдентификатору(ИндексСтроки); - Если СписокКлючейВариантов.НайтиПоЗначению(ТекущиеДанные.Ключ) = Неопределено Тогда - СписокКлючейВариантов.Добавить(ТекущиеДанные.Ключ); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если Элементы.СписокНастройкиВидимостиВариантов.ВыделенныеСтроки.Количество() > 0 Тогда - Для каждого ИндексСтроки из Элементы.СписокНастройкиВидимостиВариантов.ВыделенныеСтроки Цикл - ТекущиеДанные = СписокНастройкиВидимостиВариантов.НайтиПоИдентификатору(ИндексСтроки); - Если СписокКлючейВариантов.НайтиПоЗначению(ТекущиеДанные.Ключ) = Неопределено Тогда - СписокКлючейВариантов.Добавить(ТекущиеДанные.Ключ); - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если СписокКлючейВариантов.Количество() > 0 Тогда - - Для каждого СтрокаДерева из ДеревоНастройкиВидимостиВариантов.ПолучитьЭлементы() Цикл - - Если СтрокаДерева.Ключ <> "" Тогда - Если СписокКлючейВариантов.НайтиПоЗначению(СтрокаДерева.Ключ) <> Неопределено Тогда - ТекущиеДанные = СтрокаДерева; - ТекущиеДанные.Использование = НЕ Элементы.ФормаИспользоватьКП.Пометка; - Если ТекущиеДанные.Использование Тогда - ТекущиеДанные.Картинка = Закрепить; - Иначе - ТекущиеДанные.Картинка = Открепить; - КонецЕсли; - КонецЕсли; - Иначе - УстановитьДоступностьПодчиненныхВариантов(СтрокаДерева, НЕ Элементы.ФормаИспользоватьКП.Пометка, СписокКлючейВариантов); - КонецЕсли; - КонецЦикла; - - Для каждого СтрокаСписка из СписокНастройкиВидимостиВариантов Цикл - Если СписокКлючейВариантов.НайтиПоЗначению(СтрокаСписка.Ключ) <> Неопределено Тогда - ТекущиеДанные = СтрокаСписка; - ТекущиеДанные.Использование = НЕ Элементы.ФормаИспользоватьКП.Пометка; - Если ТекущиеДанные.Использование Тогда - ТекущиеДанные.Картинка = Закрепить; - Иначе - ТекущиеДанные.Картинка = Открепить; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если ТекущиеДанные <> Неопределено И ТекущиеДанные.Использование Тогда - Элементы.ФормаИспользовать.Пометка = Истина; - Элементы.ФормаИспользоватьКП.Пометка = Истина; - Элементы.ФормаИспользоватьСписок.Пометка = Истина; - Иначе - Элементы.ФормаИспользовать.Пометка = Ложь; - Элементы.ФормаИспользоватьКП.Пометка = Ложь; - Элементы.ФормаИспользоватьСписок.Пометка = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОткрытьОтчет(Команда) - - Если Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - - Ключ = Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные.Ключ; - - Если СокрЛП(Ключ) = "" Тогда - Возврат; - КонецЕсли; - - ПозицияВарианта = Найти(Ключ, "\"); - ИмяОтчета = Лев(Ключ, ПозицияВарианта-1); - КлючВарианта = Прав(Ключ, СтрДлина(Ключ) - ПозицияВарианта); - - ПараметрыОтчета = Новый Структура("КлючВарианта", КлючВарианта); - - СтандартнаяОбработка = Истина; - - ВариантыОтчетовКлиентПереопределяемый.ПередОткрытиемФормыОтчета(Ключ, ПараметрыОтчета, СтандартнаяОбработка); - - Если СтандартнаяОбработка Тогда - Если ИмяОтчета = "Отчет.ДополнительнаяКоманда" Тогда - ПараметрКоманды = ВариантыОтчетовКлиент.ПолучитьПараметрыКоманды(ЗначениеПараметровКоманд, МассивПараметровКомманд, КлючВарианта); - Если ПараметрКоманды <> Неопределено Тогда - ВариантыОтчетовКлиентПереопределяемый.ВыполнитьВнешнююКоманду(КлючВарианта, ПараметрКоманды); - КонецЕсли; - Иначе - ОткрытьФорму(ИмяОтчета + ".Форма", ПараметрыОтчета, , Ключ); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура Разделы(Команда) - - Если Элементы.ФормаРазделы.Пометка Тогда - Элементы.ФормаРазделы.Пометка = Ложь; - Элементы.ГруппаСтраницыПредставления.ТекущаяСтраница = Элементы.ГруппаСписок; - Элементы.ФормаНайти.Доступность = Истина; - Элементы.ФормаОтменитьПоиск.Доступность = Истина; - Иначе - Элементы.ФормаРазделы.Пометка = Истина; - Элементы.ГруппаСтраницыПредставления.ТекущаяСтраница = Элементы.ГруппаДерево; - Элементы.ФормаНайти.Доступность = Ложь; - Элементы.ФормаОтменитьПоиск.Доступность = Ложь; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаКлиенте -Процедура УстановитьДоступностьПодчиненныхВариантов(СтрокаДерева, Использование, СписокКлючейВариантов) - - Для каждого ПодчиненнаяСтрокаДерева из СтрокаДерева.ПолучитьЭлементы() Цикл - - Если ПодчиненнаяСтрокаДерева.Ключ <> "" Тогда - Если СписокКлючейВариантов.НайтиПоЗначению(ПодчиненнаяСтрокаДерева.Ключ) <> Неопределено Тогда - ТекущиеДанные = ПодчиненнаяСтрокаДерева; - ТекущиеДанные.Использование = Использование; - Если ТекущиеДанные.Использование Тогда - ТекущиеДанные.Картинка = Закрепить; - Иначе - ТекущиеДанные.Картинка = Открепить; - КонецЕсли; - КонецЕсли; - Иначе - УстановитьДоступностьПодчиненныхВариантов(ПодчиненнаяСтрокаДерева, Использование, СписокКлючейВариантов); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаКлиенте -Процедура ВыборВТаблице(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - - Ключ = Элементы.ДеревоНастройкиВидимостиВариантов.ТекущиеДанные.Ключ; - Если СокрЛП(Ключ) = "" Тогда - Возврат; - КонецЕсли; - - ПозицияВарианта = Найти(Ключ, "\"); - ИмяОтчета = Лев(Ключ, ПозицияВарианта-1); - КлючВарианта = Прав(Ключ, СтрДлина(Ключ)-ПозицияВарианта); - - ПараметрыОтчета = Новый Структура("КлючВарианта", КлючВарианта); - - СтандартнаяОбработка = Истина; - - ВариантыОтчетовКлиентПереопределяемый.ПередОткрытиемФормыОтчета(Ключ, ПараметрыОтчета, СтандартнаяОбработка); - - Если СтандартнаяОбработка Тогда - ОткрытьФорму(ИмяОтчета + ".Форма", ПараметрыОтчета, Ключ); - КонецЕсли; - -КонецПроцедуры diff --git a/SSL/src/CommonForms/ВходВОбластьДанных/Form.form b/SSL/src/CommonForms/ВходВОбластьДанных/Form.form index 70f134598..72ca0d2ff 100644 --- a/SSL/src/CommonForms/ВходВОбластьДанных/Form.form +++ b/SSL/src/CommonForms/ВходВОбластьДанных/Form.form @@ -9,7 +9,7 @@ true - ЗначениеРазделителя + ОбластьДанных ЗначениеРазделителяРасширеннаяПодсказка @@ -128,7 +128,7 @@ Left true - DontBlock + LockOwner true true true @@ -140,10 +140,10 @@ auto true - ЗначениеРазделителя + ОбластьДанных <key>ru</key> - <value>Значение разделителя</value> + <value>Область данных</value> 1 diff --git a/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl b/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl index ba3d7e7bf..3ab5d8bb6 100644 --- a/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl +++ b/SSL/src/CommonForms/ВходВОбластьДанных/Module.bsl @@ -13,7 +13,7 @@ КонецЕсли; КонецЕсли; - Если НЕ УказаннаяОбластьДанныхЗаполнена(ЗначениеРазделителя) Тогда + Если НЕ УказаннаяОбластьДанныхЗаполнена(ОбластьДанных) Тогда Ответ = Вопрос(НСтр("ru = 'Выбранная область данных не заполнена, продолжить вход?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); @@ -22,7 +22,7 @@ КонецЕсли; КонецЕсли; - ВойтиВОбластьДанныхНаСервере(ЗначениеРазделителя); + ВойтиВОбластьДанныхНаСервере(ОбластьДанных); ОбновитьИнтерфейс(); @@ -58,7 +58,7 @@ ОбновитьИнтерфейс(); - СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(Истина); КонецПроцедуры @@ -66,13 +66,13 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаСервереБезКонтекста -Функция УказаннаяОбластьДанныхЗаполнена(Знач ЗначениеРазделителя) +Функция УказаннаяОбластьДанныхЗаполнена(Знач ОбластьДанных) УстановитьПривилегированныйРежим(Истина); Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); - ЭлементБлокировки.УстановитьЗначение("ОбластьДанных", ЗначениеРазделителя); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанных", ОбластьДанных); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; Запрос = Новый Запрос; @@ -83,7 +83,7 @@ | РегистрСведений.ОбластиДанных КАК ОбластиДанных |ГДЕ | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; - Запрос.УстановитьПараметр("ОбластьДанных", ЗначениеРазделителя); + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); НачатьТранзакцию(); Попытка @@ -106,29 +106,29 @@ КонецФункции &НаСервереБезКонтекста -Процедура ВойтиВОбластьДанныхНаСервере(Знач ЗначениеРазделителя) +Процедура ВойтиВОбластьДанныхНаСервере(Знач ОбластьДанных) УстановитьПривилегированныйРежим(Истина); - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ЗначениеРазделителя); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); НачатьТранзакцию(); Попытка - КлючОбласти = РегистрыСведений.ОбластиДанных.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных", ЗначениеРазделителя)); + КлючОбласти = РегистрыСведений.ОбластиДанных.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных", ОбластьДанных)); ЗаблокироватьДанныеДляРедактирования(КлючОбласти); Блокировка = Новый БлокировкаДанных; Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); - Элемент.УстановитьЗначение("ОбластьДанных", ЗначениеРазделителя); + Элемент.УстановитьЗначение("ОбластьДанных", ОбластьДанных); Элемент.Режим = РежимБлокировкиДанных.Разделяемый; Блокировка.Заблокировать(); МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбластьДанных = ЗначениеРазделителя; + МенеджерЗаписи.ОбластьДанных = ОбластьДанных; МенеджерЗаписи.Прочитать(); Если Не МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.ОбластьДанных = ЗначениеРазделителя; + МенеджерЗаписи.ОбластьДанных = ОбластьДанных; МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется; МенеджерЗаписи.Записать(); КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииБолееНовогоФайла/Module.bsl b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииБолееНовогоФайла/Module.bsl index 5a821ac1c..36791cf15 100644 --- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииБолееНовогоФайла/Module.bsl +++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииБолееНовогоФайла/Module.bsl @@ -47,6 +47,6 @@ &НаКлиенте Процедура ОткрытьКаталог(Команда) - ФайловыеФункцииКлиент.ОткрытьПроводникСФайлом(Файл); + ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(Файл); КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииФайлаДругогоРазмера/Module.bsl b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииФайлаДругогоРазмера/Module.bsl index b6f441f8e..4bf88825a 100644 --- a/SSL/src/CommonForms/ВыборДействияПриОбнаруженииФайлаДругогоРазмера/Module.bsl +++ b/SSL/src/CommonForms/ВыборДействияПриОбнаруженииФайлаДругогоРазмера/Module.bsl @@ -16,6 +16,6 @@ &НаКлиенте Процедура ОткрытьКаталог(Команда) - ФайловыеФункцииКлиент.ОткрытьПроводникСФайлом(Файл); + ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(Файл); КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Attributes/СписокРоли/ExtInfo/ListSettings.dcss b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Attributes/СписокРоли/ExtInfo/ListSettings.dcss index aae641fc8..1dad03ad2 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Attributes/СписокРоли/ExtInfo/ListSettings.dcss +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Attributes/СписокРоли/ExtInfo/ListSettings.dcss @@ -2,6 +2,7 @@ + false ИспользуетсяБезОбъектовАдресации Equal false diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form index 853649a96..ef239a6d5 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Form.form @@ -9,37 +9,6 @@ КоманднаяПанельПользователи 31 - - ИспользоватьИерархию - 52 - true - true - - true - - false - - ИспользоватьИерархиюРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - 0 - Normal - Picture - true - true - UserCmds - true - - CommonPicture.ИерархическийСписок - - Auto - true true @@ -55,7 +24,7 @@ КоманднаяПанельПользователиРасширеннаяПодсказка - 56 + 58 Label true true @@ -102,7 +71,7 @@ true НаименованиеРасширеннаяПодсказка - 68 + 69 Label true true @@ -139,10 +108,10 @@ СписокПользователиСтрокаПоиска - 59 + 60 СписокПользователиСтрокаПоискаРасширеннаяПодсказка - 61 + 62 Label true true @@ -152,7 +121,7 @@ СписокПользователиСтрокаПоискаКонтекстноеМеню - 60 + 61 true СписокПользователи @@ -162,10 +131,10 @@ СписокПользователиСостояниеПросмотра - 62 + 63 СписокПользователиСостояниеПросмотраРасширеннаяПодсказка - 64 + 65 Label true true @@ -175,7 +144,7 @@ СписокПользователиСостояниеПросмотраКонтекстноеМеню - 63 + 64 true ViewStatusAddition @@ -186,10 +155,10 @@ СписокПользователиУправлениеПоиском - 65 + 66 СписокПользователиУправлениеПоискомРасширеннаяПодсказка - 67 + 68 Label true true @@ -199,7 +168,7 @@ СписокПользователиУправлениеПоискомКонтекстноеМеню - 66 + 67 true SearchControlAddition @@ -210,7 +179,7 @@ СписокПользователиРасширеннаяПодсказка - 58 + 59 Label true true @@ -281,7 +250,7 @@ ПользователиРасширеннаяПодсказка - 55 + 57 Label true true @@ -330,7 +299,7 @@ НаименованиеРолиРасширеннаяПодсказка - 89 + 90 Label true true @@ -365,10 +334,10 @@ СписокРолиСтрокаПоиска - 80 + 81 СписокРолиСтрокаПоискаРасширеннаяПодсказка - 82 + 83 Label true true @@ -378,7 +347,7 @@ СписокРолиСтрокаПоискаКонтекстноеМеню - 81 + 82 true СписокРоли @@ -388,10 +357,10 @@ СписокРолиСостояниеПросмотра - 83 + 84 СписокРолиСостояниеПросмотраРасширеннаяПодсказка - 85 + 86 Label true true @@ -401,7 +370,7 @@ СписокРолиСостояниеПросмотраКонтекстноеМеню - 84 + 85 true ViewStatusAddition @@ -412,10 +381,10 @@ СписокРолиУправлениеПоиском - 86 + 87 СписокРолиУправлениеПоискомРасширеннаяПодсказка - 88 + 89 Label true true @@ -425,7 +394,7 @@ СписокРолиУправлениеПоискомКонтекстноеМеню - 87 + 88 true SearchControlAddition @@ -436,7 +405,7 @@ СписокРолиРасширеннаяПодсказка - 79 + 80 Label true true @@ -488,6 +457,49 @@ true + + СписокРолиКомментарий + 53 + true + true + + true + + + Items.СписокРоли.CurrentData.Комментарий + + Left + + СписокРолиКомментарийРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + СписокРолиКомментарийКонтекстноеМеню + 54 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true @@ -495,7 +507,7 @@ <key>ru</key> - <value>Роли</value> + <value>Роли исполнителей</value> ru @@ -503,7 +515,7 @@ РолиРасширеннаяПодсказка - 78 + 79 Label true true @@ -532,7 +544,7 @@ СтраницыРасширеннаяПодсказка - 54 + 56 Label true true @@ -560,7 +572,7 @@ false ВыбратьРасширеннаяПодсказка - 53 + 55 Label true true @@ -615,23 +627,27 @@ СписокПользователи.Подразделение + + СписокПользователи.Ref + ВЫБРАТЬ - СправочникПользователи.Ссылка, - СправочникПользователи.ПометкаУдаления, - СправочникПользователи.Предопределенный, - СправочникПользователи.Наименование, + Пользователи.Ссылка, + Пользователи.ПометкаУдаления, + Пользователи.Предопределенный, + Пользователи.Наименование, ВЫБОР - КОГДА СправочникПользователи.ПометкаУдаления + КОГДА Пользователи.ПометкаУдаления ТОГДА 0 - КОГДА СправочникПользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор + КОГДА Пользователи.ИдентификаторПользователяИБ = &ПустойУникальныйИдентификатор ТОГДА 4 ИНАЧЕ 1 КОНЕЦ КАК НомерКартинки ИЗ - Справочник.Пользователи КАК СправочникПользователи + Справочник.Пользователи КАК Пользователи ГДЕ - СправочникПользователи.Недействителен = ЛОЖЬ + Пользователи.Недействителен = ЛОЖЬ + И Пользователи.Служебный = ЛОЖЬ Catalog.Пользователи true true @@ -656,6 +672,9 @@ true + + СписокРоли.Ref + ВЫБРАТЬ СправочникРолиИсполнителей.Ссылка, @@ -731,6 +750,18 @@ Boolean + + ТолькоПростыеРоли + + Boolean + + + + БезВнешнихРолей + + Boolean + + diff --git a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Help/ru.html index af7fba002..83dab574e 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 ef9f4ba15..88b717b72 100644 --- a/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl +++ b/SSL/src/CommonForms/ВыборИсполнителяБизнесПроцесса/Module.bsl @@ -4,14 +4,11 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - ТолькоПростыеРоли = Ложь; - Если Параметры.Свойство("ТолькоПростыеРоли", ТолькоПростыеРоли) И ТолькоПростыеРоли = Истина Тогда + Если Параметры.ТолькоПростыеРоли Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - СписокРоли.Отбор, "ИспользуетсяБезОбъектовАдресации", Истина); + СписокРоли.Отбор, "ИспользуетсяБезОбъектовАдресации", Истина,,Истина); КонецЕсли; - - БезВнешнихРолей = Ложь; - Если Параметры.Свойство("БезВнешнихРолей", БезВнешнихРолей) И БезВнешнихРолей = Истина Тогда + Если Параметры.БезВнешнихРолей = Истина Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( СписокРоли.Отбор, "ВнешняяРоль", Ложь); КонецЕсли; @@ -19,22 +16,18 @@ ОбновитьЗначениеПараметраКомпоновкиДанных(СписокПользователи, "ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - Если Параметры.Свойство("Исполнитель") Тогда + Если ТипЗнч(Параметры.Исполнитель) = Тип("СправочникСсылка.Пользователи") Тогда - Если ТипЗнч(Параметры.Исполнитель) = Тип("СправочникСсылка.Пользователи") Тогда - - ТекущийЭлемент = Элементы.СписокПользователи; - Элементы.СписокПользователи.ТекущаяСтрока = Параметры.Исполнитель; - - ИначеЕсли ТипЗнч(Параметры.Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") Тогда - - Элементы.Страницы.ТекущаяСтраница = Элементы.Роли; - ТекущийЭлемент = Элементы.СписокРоли; - Элементы.СписокРоли.ТекущаяСтрока = Параметры.Исполнитель; - - КонецЕсли; + ТекущийЭлемент = Элементы.СписокПользователи; + Элементы.СписокПользователи.ТекущаяСтрока = Параметры.Исполнитель; - КонецЕсли; + ИначеЕсли ТипЗнч(Параметры.Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") Тогда + + Элементы.Страницы.ТекущаяСтраница = Элементы.Роли; + ТекущийЭлемент = Элементы.СписокРоли; + Элементы.СписокРоли.ТекущаяСтрока = Параметры.Исполнитель; + + КонецЕсли; КонецПроцедуры @@ -53,7 +46,7 @@ Процедура СписокРолиВыборЗначения(Элемент, Значение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - ОповеститьОВыборе(Значение); + ВыборРоли(Значение); КонецПроцедуры @@ -84,8 +77,8 @@ ВыбранноеЗначение, Неопределено, Неопределено); Иначе Результат = ОткрытьФормуМодально("ОбщаяФорма.ВыборРолиИсполнителя", - Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации", - ВыбранноеЗначение, Неопределено, Неопределено), + Новый Структура("РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации, ВыборОбъектаАдресации", + ВыбранноеЗначение, Неопределено, Неопределено, Истина), ЭтаФорма); КонецЕсли; diff --git a/SSL/src/CommonForms/ВыборКонтакта/Form.form b/SSL/src/CommonForms/ВыборКонтакта/Form.form index 882604f80..76da40f1c 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Form.form +++ b/SSL/src/CommonForms/ВыборКонтакта/Form.form @@ -835,6 +835,10 @@ Left true + + OnActivateRow + ГруппыПользователейПриАктивизацииСтроки + ГруппыПользователейСтрокаПоиска 165 @@ -942,7 +946,7 @@ true true - ГруппыПользователей.DefaultPicture + ГруппыПользователей.НомерКартинки CommonPicture.СостоянияПользователей @@ -1530,9 +1534,32 @@ СписокПользователей.IsFolder + ВЫБРАТЬ + Пользователи.Ссылка, + Пользователи.ПометкаУдаления, + Пользователи.Предопределенный, + Пользователи.Наименование, + ВЫБОР + КОГДА Пользователи.ПометкаУдаления + ТОГДА 0 + ИНАЧЕ 1 + КОНЕЦ КАК НомерКартинки +ИЗ + Справочник.Пользователи КАК Пользователи +ГДЕ + Пользователи.Служебный = ЛОЖЬ + И ИСТИНА В + (ВЫБРАТЬ + ИСТИНА + ИЗ + РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + ГДЕ + СоставыГруппПользователей.Пользователь = Пользователи.Ссылка + И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей) Catalog.Пользователи true true + true true true diff --git a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl index 1f2bf485c..815ac104a 100644 --- a/SSL/src/CommonForms/ВыборКонтакта/Module.bsl +++ b/SSL/src/CommonForms/ВыборКонтакта/Module.bsl @@ -113,6 +113,13 @@ КонецПроцедуры +&НаКлиенте +Процедура ГруппыПользователейПриАктивизацииСтроки(Элемент) + + СписокПользователей.Параметры.УстановитьЗначениеПараметра("ГруппаПользователей", Элементы.ГруппыПользователей.ТекущаяСтрока); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -433,3 +440,5 @@ Элементы.КомандаОбновитьИндексППД.Доступность = Не ИндексАктуален; КонецПроцедуры + + diff --git a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl index c29c393ba..c6067ef2c 100644 --- a/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовИнформационнойБазыКорреспондента/Module.bsl @@ -25,7 +25,8 @@ СвойстваОбъектаМетаданных = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СвойстваОбъектаМетаданных(Параметры.ПолноеИмяТаблицыБазыКорреспондента); - Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда + Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_1_1_7 + ИЛИ Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда ТаблицаБазыКорреспондента = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбъектыТаблицы_2_0_1_6(Параметры.ПолноеИмяТаблицыБазыКорреспондента)); @@ -39,10 +40,18 @@ СтрокаСообщенияОбОшибке = ""; - Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда - WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси_2_0_1_6(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_1_1_7 Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + + ИначеЕсли Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + Иначе - WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(Параметры.ПараметрыВнешнегоСоединения, СтрокаСообщенияОбОшибке); + КонецЕсли; Если WSПрокси = Неопределено Тогда @@ -50,7 +59,8 @@ Возврат; КонецЕсли; - Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда + Если Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_1_1_7 + ИЛИ Параметры.ПараметрыВнешнегоСоединения.ВерсияКорреспондента_2_0_1_6 Тогда ДанныеБазыКорреспондента = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBData(Параметры.ПолноеИмяТаблицыБазыКорреспондента)); diff --git a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl index db6654e1a..8f40df5b3 100644 --- a/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl +++ b/SSL/src/CommonForms/ВыборОбъектовМетаданных/Module.bsl @@ -56,9 +56,12 @@ КонецЕсли; Если Параметры.Свойство("ВыборЕдинственного", ВыборЕдинственного) И ВыборЕдинственного Тогда - Элементы.Пометка.Видимость = Ложь; - + КонецЕсли; + + Если Параметры.Свойство("Заголовок") Тогда + АвтоЗаголовок = Ложь; + Заголовок = Параметры.Заголовок; КонецЕсли; Параметры.Свойство("НачальноеЗначениеВыбора", НачальноеЗначениеВыбора); diff --git a/SSL/src/CommonForms/ВыборПодписей/Help/ru.html b/SSL/src/CommonForms/ВыборПодписей/Help/ru.html index a5bd8b2fc..d9de7115f 100644 --- a/SSL/src/CommonForms/ВыборПодписей/Help/ru.html +++ b/SSL/src/CommonForms/ВыборПодписей/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            При выполнении команды "Сохранить с ЭЦП", если персональная настройка "Действия при сохранении с ЭЦП" установлена в "Спрашивать", открывается данная форма.

            Установите флажки для подписей, которые надо сохранить вместе с файлом, и нажмите "OK".

            diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Form.form b/SSL/src/CommonForms/ВыборПроизвольногоПериода/Form.form similarity index 52% rename from SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Form.form rename to SSL/src/CommonForms/ВыборПроизвольногоПериода/Form.form index a7b52ecd4..73a4af7ec 100644 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Form.form +++ b/SSL/src/CommonForms/ВыборПроизвольногоПериода/Form.form @@ -1,32 +1,19 @@ - - - <key>ru</key> - <value>Настройка получателей отчета</value> - + - EMailАдресаПолучателейОтчета - 1 - - <key>ru</key> - <value>Почтовые адреса</value> - + НачалоПериода + 9 true true true - EMailАдресаПолучателейОтчета + НачалоПериода - Top - - ru - Адресаты отделяются друг от друга точкой с запятой ";" или запятой "," - - EMailАдресаПолучателейОтчетаРасширеннаяПодсказка - 7 + НачалоПериодаРасширеннаяПодсказка + 15 Label true true @@ -35,8 +22,8 @@ - EMailАдресаПолучателейОтчетаКонтекстноеМеню - 2 + НачалоПериодаКонтекстноеМеню + 10 true InputField @@ -45,9 +32,50 @@ Left true - 40 true true + true + true + true + true + Normal + + + + КонецПериода + 11 + true + true + + true + + + КонецПериода + + + КонецПериодаРасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + КонецПериодаКонтекстноеМеню + 12 + true + + InputField + Enter + true + Left + true + + true + true + true true true true @@ -60,8 +88,8 @@ ФормаКоманднаяПанель -1 - КнопкаСохранитьАдрес - 3 + Выбрать + 1 true true @@ -69,8 +97,8 @@ false - КнопкаСохранитьАдресРасширеннаяПодсказка - 5 + ВыбратьРасширеннаяПодсказка + 13 Label true true @@ -78,8 +106,7 @@ Left
            - Form.Command.КнопкаОК - Auto + Form.Command.ОК true true true @@ -87,8 +114,8 @@ Auto - КнопкаОтмена - 4 + Закрыть + 2 true true @@ -96,8 +123,8 @@ false - КнопкаОтменаРасширеннаяПодсказка - 6 + ЗакрытьРасширеннаяПодсказка + 14 Label true true @@ -107,7 +134,7 @@ Form.StandardCommand.Cancel Normal - Auto + PictureAndText true true UserCmds @@ -119,10 +146,10 @@ OnCreateAtServer ПриСозданииНаСервере - LockOwner + DontBlock true + true true - Vertical true true true @@ -130,15 +157,37 @@ auto true - EMailАдресаПолучателейОтчета + КонецПериода <key>ru</key> - <value>Адреса получателей отчета</value> + <value>по</value> - 2 + 3 - String - + Date + + Date + + + + true + + + true + + + + НачалоПериода + + <key>ru</key> + <value>Период с</value> + + 4 + + Date + + Date + true @@ -148,7 +197,7 @@ - КнопкаОК + ОК <key>ru</key> <value>ОК</value> @@ -156,19 +205,52 @@ <id>1</id> <toolTip> <key>ru</key> - <value>Сохранить адрес</value> + <value>ОК</value> </toolTip> <use> <common>true</common> </use> + <picture xsi:type="core:PictureRef"> + <picture>StdPicture.DataCompositionSelection</picture> + </picture> <action xsi:type="form:FormCommandHandlerContainer"> <handler> - <name>КнопкаОК</name> + <name>Выбрать</name> </handler> </action> <currentRowUse>Auto</currentRowUse> <selectedRowsUse>Auto</selectedRowsUse> </formCommands> + <parameters> + <name>КонецПериода</name> + <valueType> + <types>Date</types> + <dateQualifiers> + <dateFractions>Date</dateFractions> + </dateQualifiers> + </valueType> + </parameters> + <parameters> + <name>МинимальныйПериод</name> + <valueType> + <types>EnumRef.ДоступныеПериодыОтчета</types> + </valueType> + </parameters> + <parameters> + <name>НачалоПериода</name> + <valueType> + <types>Date</types> + <dateQualifiers> + <dateFractions>Date</dateFractions> + </dateQualifiers> + </valueType> + </parameters> + <parameters> + <name>ВидПериода</name> + <valueType> + <types>EnumRef.ДоступныеПериодыОтчета</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/CommonForms/ВыборПроизвольногоПериода/Module.bsl b/SSL/src/CommonForms/ВыборПроизвольногоПериода/Module.bsl new file mode 100644 index 000000000..86abda6a9 --- /dev/null +++ b/SSL/src/CommonForms/ВыборПроизвольногоПериода/Module.bsl @@ -0,0 +1,38 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + НачалоПериода = Параметры.НачалоПериода; + КонецПериода = Параметры.КонецПериода; + + Если НЕ ЗначениеЗаполнено(НачалоПериода) Тогда + НачалоПериода = ФункцииОтчетовКлиентСервер.НачалоПериодаОтчета(Параметры.МинимальныйПериод, ТекущаяДатаСеанса()); + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(КонецПериода) Тогда + КонецПериода = ФункцииОтчетовКлиентСервер.КонецПериодаОтчета(Параметры.МинимальныйПериод, ТекущаяДатаСеанса()); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Выбрать(Команда) + + Если НачалоПериода > КонецПериода Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Дата начала периода больше чем дата окончания периода'"), , "НачалоПериода"); + Возврат; + КонецЕсли; + + РезультатВыбора = Новый Структура("НачалоПериода, КонецПериода", НачалоДня(НачалоПериода), КонецДня(КонецПериода)); + Закрыть(РезультатВыбора); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ВыборПроизвольногоПериода/ВыборПроизвольногоПериода.mdo b/SSL/src/CommonForms/ВыборПроизвольногоПериода/ВыборПроизвольногоПериода.mdo new file mode 100644 index 000000000..6b552936e --- /dev/null +++ b/SSL/src/CommonForms/ВыборПроизвольногоПериода/ВыборПроизвольногоПериода.mdo @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<mdclass:CommonForm xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6b10167a-f5c3-4d7b-b444-d5ff6e705ea4"> + <name>ВыборПроизвольногоПериода</name> + <synonym> + <key>ru</key> + <value>Выбор произвольного периода</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> +</mdclass:CommonForm> diff --git a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl index e7953824b..6e58ec26a 100644 --- a/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl +++ b/SSL/src/CommonForms/ВыборПутиКАрхивуФайловТомов/Module.bsl @@ -2,7 +2,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если СтандартныеПодсистемыВызовСервераПереопределяемый.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда + Если СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда Элементы.ПутьКАрхивуWindows.Заголовок = НСтр("ru = 'Для сервера 1С:Предприятия под управлением Microsoft Windows'"); Иначе Элементы.ПутьКАрхивуWindows.КнопкаВыбора = Ложь; diff --git a/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form b/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form index 9a02aeed8..783472939 100644 --- a/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form +++ b/SSL/src/CommonForms/ВыборРолиИсполнителя/Form.form @@ -1,9 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> <form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> - <title> - <key>ru</key> - <value>Выбор роли</value> - Роль 3 @@ -21,7 +17,7 @@ РольРасширеннаяПодсказка - 21 + 19 Label true true @@ -50,236 +46,59 @@ Normal - - ГруппаОбъектыАдресации - 5 - - ГруппаНетОбъектовАдресации - 6 - - Декорация - 17 - true - true - - true - - - ДекорацияРасширеннаяПодсказка - 25 - Label - true - true - - Left - - - - ДекорацияКонтекстноеМеню - 18 - true - - Label - true - true - false - - Left - - - true - true - - true - - - ГруппаНетОбъектовАдресацииРасширеннаяПодсказка - 24 - Label - true - true - - Left - - - Page - - Vertical - - - - ГруппаОдинОбъектАдресации - 9 - - ОдинОсновнойОбъектАдресации - 10 - true - true - - true - - - ОсновнойОбъектАдресации - - - ОдинОсновнойОбъектАдресацииРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - - ОдинОсновнойОбъектАдресацииКонтекстноеМеню - 11 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - true - true - - true - - - ГруппаОдинОбъектАдресацииРасширеннаяПодсказка - 26 - Label - true - true - - Left - - - Page - - Vertical - - - - ГруппаДваОбъектаАдресации - 12 - - ОсновнойОбъектАдресации - 13 - true - true - - true - - - ОсновнойОбъектАдресации - - - ОсновнойОбъектАдресацииРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - - ОсновнойОбъектАдресацииКонтекстноеМеню - 14 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - - ДополнительныйОбъектАдресации - 15 - true - true - - true - - - ДополнительныйОбъектАдресации - - - ДополнительныйОбъектАдресацииРасширеннаяПодсказка - 32 - Label - true - true - - Left - - - - ДополнительныйОбъектАдресацииКонтекстноеМеню - 16 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - - - true - true - - true - - - ГруппаДваОбъектаАдресацииРасширеннаяПодсказка - 29 - Label - true - true - - Left - - - Page - - Vertical - - + + ОсновнойОбъектАдресации + 13 true true true + + ОсновнойОбъектАдресации + - ГруппаОбъектыАдресацииРасширеннаяПодсказка + ОсновнойОбъектАдресацииРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + + ОсновнойОбъектАдресацииКонтекстноеМеню + 14 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal + + + + ДополнительныйОбъектАдресации + 15 + true + true + + true + + + ДополнительныйОбъектАдресации + + + ДополнительныйОбъектАдресацииРасширеннаяПодсказка 23 Label true @@ -288,9 +107,23 @@ Left - Pages - - Auto + + ДополнительныйОбъектАдресацииКонтекстноеМеню + 16 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + Normal Bottom @@ -309,7 +142,7 @@ false OKРасширеннаяПодсказка - 19 + 17 Label true true @@ -336,7 +169,7 @@ false ОтменаРасширеннаяПодсказка - 20 + 18 Label true true @@ -362,8 +195,10 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере + 50 DontBlock true + true true Vertical true @@ -527,6 +362,12 @@ ДополнительныйОбъектАдресации + + ВыборОбъектаАдресации + + Boolean + + diff --git a/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl b/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl index dcbe5d65f..282325b61 100644 --- a/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl +++ b/SSL/src/CommonForms/ВыборРолиИсполнителя/Module.bsl @@ -10,6 +10,10 @@ УстановитьТипыОбъектовАдресации(); УстановитьСостояниеЭлементов(); + Если Параметры.ВыборОбъектаАдресации Тогда + ТекущийЭлемент = Элементы.ОсновнойОбъектАдресации; + КонецЕсли; + КонецПроцедуры &НаСервере @@ -91,26 +95,15 @@ И ЗначениеЗаполнено(ТипыДополнительногоОбъектаАдресации); Элементы.ОсновнойОбъектАдресации.Заголовок = Роль.ТипыОсновногоОбъектаАдресации.Наименование; - Элементы.ОдинОсновнойОбъектАдресации.Заголовок = Роль.ТипыОсновногоОбъектаАдресации.Наименование; - - Если ЗаданыТипыОсновногоОбъектаАдресации И ЗаданыТипыДополнительногоОбъектаАдресации Тогда - Элементы.ГруппаОбъектыАдресации.ТекущаяСтраница = Элементы.ГруппаДваОбъектаАдресации; - ИначеЕсли ЗаданыТипыОсновногоОбъектаАдресации Тогда - Элементы.ГруппаОбъектыАдресации.ТекущаяСтраница = Элементы.ГруппаОдинОбъектАдресации; - Иначе - Элементы.ГруппаОбъектыАдресации.ТекущаяСтраница = Элементы.ГруппаНетОбъектовАдресации; - КонецЕсли; - - Элементы.ДополнительныйОбъектАдресации.Заголовок = Роль.ТипыДополнительногоОбъектаАдресации.Наименование; - + Элементы.ОсновнойОбъектАдресации.Доступность = ЗаданыТипыОсновногоОбъектаАдресации; Элементы.ОсновнойОбъектАдресации.АвтоОтметкаНезаполненного = ЗаданыТипыОсновногоОбъектаАдресации И НЕ ИспользуетсяБезОбъектовАдресации; - Элементы.ОдинОсновнойОбъектАдресации.АвтоОтметкаНезаполненного = ЗаданыТипыОсновногоОбъектаАдресации - И НЕ ИспользуетсяБезОбъектовАдресации; + Элементы.ОсновнойОбъектАдресации.ОграничениеТипа = ТипыОсновногоОбъектаАдресации; + + Элементы.ДополнительныйОбъектАдресации.Заголовок = Роль.ТипыДополнительногоОбъектаАдресации.Наименование; + Элементы.ДополнительныйОбъектАдресации.Доступность = ЗаданыТипыДополнительногоОбъектаАдресации; Элементы.ДополнительныйОбъектАдресации.АвтоОтметкаНезаполненного = ЗаданыТипыДополнительногоОбъектаАдресации И НЕ ИспользуетсяБезОбъектовАдресации; - Элементы.ОдинОсновнойОбъектАдресации.ОграничениеТипа = ТипыОсновногоОбъектаАдресации; - Элементы.ОсновнойОбъектАдресации.ОграничениеТипа = ТипыОсновногоОбъектаАдресации; Элементы.ДополнительныйОбъектАдресации.ОграничениеТипа = ТипыДополнительногоОбъектаАдресации; КонецПроцедуры @@ -122,4 +115,3 @@ ?(ОсновнойОбъектАдресации <> Неопределено И НЕ ОсновнойОбъектАдресации.Пустая(), ОсновнойОбъектАдресации, Неопределено), ?(ДополнительныйОбъектАдресации <> Неопределено И НЕ ДополнительныйОбъектАдресации.Пустая(), ДополнительныйОбъектАдресации, Неопределено)); КонецФункции - diff --git a/SSL/src/CommonForms/ВыборСертификата/Help/ru.html b/SSL/src/CommonForms/ВыборСертификата/Help/ru.html index 6d9dd5d2d..9a77239f7 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/ВыборСертификатовШифрования/Help/ru.html b/SSL/src/CommonForms/ВыборСертификатовШифрования/Help/ru.html index 3abfcd8f0..bc7c7ff2f 100644 --- a/SSL/src/CommonForms/ВыборСертификатовШифрования/Help/ru.html +++ b/SSL/src/CommonForms/ВыборСертификатовШифрования/Help/ru.html @@ -1,4 +1,4 @@ - +

            Шифрование

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

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

            diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Form.form b/SSL/src/CommonForms/ВыборФорматаВложений/Form.form new file mode 100644 index 000000000..c0153127c --- /dev/null +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Form.form @@ -0,0 +1,501 @@ + + + + ГруппаВыборФорматов + 31 + + ВыбранныеФорматы + 32 + true + true + + true + + + ВыбранныеФорматыСохранения + + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + Pickup + SelectAll + SortListAsc + SortListDesc + + ВыбранныеФорматыСохраненияПометка + 37 + true + true + + true + + + ВыбранныеФорматыСохранения.Check + + + ВыбранныеФорматыСохраненияПометкаРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияПометкаКонтекстноеМеню + 38 + true + + CheckBoxField + Auto + true + Left + true + + + + ВыбранныеФорматыСохраненияЗначение + 35 + true + true + + true + + + ВыбранныеФорматыСохранения.Value + + + ВыбранныеФорматыСохраненияЗначениеРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияЗначениеКонтекстноеМеню + 36 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ВыбранныеФорматыКоманднаяПанель + 34 + Left + + + ВыбранныеФорматыСтрокаПоиска + 46 + + ВыбранныеФорматыСтрокаПоискаРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ВыбранныеФорматыСтрокаПоискаКонтекстноеМеню + 47 + true + + ВыбранныеФорматы + + true + + + + ВыбранныеФорматыСостояниеПросмотра + 49 + + ВыбранныеФорматыСостояниеПросмотраРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + ВыбранныеФорматыСостояниеПросмотраКонтекстноеМеню + 50 + true + + ViewStatusAddition + ВыбранныеФорматы + + true + + + + ВыбранныеФорматыУправлениеПоиском + 52 + + ВыбранныеФорматыУправлениеПоискомРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ВыбранныеФорматыУправлениеПоискомКонтекстноеМеню + 53 + true + + SearchControlAddition + ВыбранныеФорматы + + true + + + + ВыбранныеФорматыРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ВыбранныеФорматыКонтекстноеМеню + 33 + true + + true + 10 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + + ВыбранныеФорматыСохранения.Picture + + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>Формат вложений</value> + + + ru + Группа выбор форматов + + + ГруппаВыборФорматовРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаДополнительныеПараметры + 39 + + УпаковатьВАрхив + 40 + + <key>ru</key> + <value>Дополнительно упаковать в архив (.zip)</value> + + true + true + + true + + + УпаковатьВАрхив + + Right + + УпаковатьВАрхивРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + УпаковатьВАрхивКонтекстноеМеню + 41 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>В форматах</value> + + + ru + Группа дополнительные параметры + + + ГруппаДополнительныеПараметрыРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + КнопкаПрикрепить + 29 + true + true + + true + + false + + КнопкаПрикрепитьРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + КнопкаОтмена + 30 + true + true + + true + + + КнопкаОтменаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + BeforeLoadDataFromSettingsAtServer + ПередЗагрузкойДанныхИзНастроекНаСервере + + Abort + Close + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 38 + DontBlock + Use + UseList + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ВыбранныеФорматыСохранения + + <key>ru</key> + <value>Выбранные форматы сохранения</value> + + 3 + + ValueList + + + true + + + true + + + ВыбранныеФорматыСохранения + + + + + + + УпаковатьВАрхив + + <key>ru</key> + <value>Упаковать в архив (.zip)</value> + + 5 + + Boolean + + + true + + + true + + + УпаковатьВАрхив + + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать + + + true + + + + Выбрать + + + Auto + Auto + + + НастройкиФормата + + + + + + + diff --git a/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl b/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl new file mode 100644 index 000000000..964c6574a --- /dev/null +++ b/SSL/src/CommonForms/ВыборФорматаВложений/Module.bsl @@ -0,0 +1,102 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // загрузка переданных параметров + ПереданныйМассивФорматов = Новый Массив; + Если Параметры.НастройкиФормата <> Неопределено Тогда + ПереданныйМассивФорматов = Параметры.НастройкиФормата.ФорматыСохранения; + УпаковатьВАрхив = Параметры.НастройкиФормата.УпаковатьВАрхив; + КонецЕсли; + + // заполнение списка форматов + Для Каждого ФорматСохранения Из УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента() Цикл + Пометка = Ложь; + Если Параметры.НастройкиФормата <> Неопределено Тогда + ПереданныйФормат = ПереданныйМассивФорматов.Найти(ФорматСохранения.ТипФайлаТабличногоДокумента); + Если ПереданныйФормат <> Неопределено Тогда + Пометка = Истина; + КонецЕсли; + КонецЕсли; + ВыбранныеФорматыСохранения.Добавить(ФорматСохранения.ТипФайлаТабличногоДокумента, Строка(ФорматСохранения.Ссылка), Пометка, ФорматСохранения.Картинка); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) + Если Параметры.НастройкиФормата <> Неопределено И Параметры.НастройкиФормата.ФорматыСохранения.Количество() > 0 Тогда + Настройки.Удалить("ВыбранныеФорматыСохранения"); + Настройки.Удалить("УпаковатьВАрхив"); + Возврат; + КонецЕсли; + + ФорматыСохраненияИзНастроек = Настройки["ВыбранныеФорматыСохранения"]; + Если ФорматыСохраненияИзНастроек <> Неопределено Тогда + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + ФорматИзНастроек = ФорматыСохраненияИзНастроек.НайтиПоЗначению(ВыбранныйФормат.Значение); + ВыбранныйФормат.Пометка = ФорматИзНастроек <> Неопределено И ФорматИзНастроек.Пометка; + КонецЦикла; + Настройки.Удалить("ВыбранныеФорматыСохранения"); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + УстановитьВыборФормата(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Выбрать(Команда) + + Закрыть(ВыбранныеНастройкиФормата()); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура УстановитьВыборФормата() + + ЕстьВыбранныйФормат = Ложь; + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + Если ВыбранныйФормат.Пометка Тогда + ЕстьВыбранныйФормат = Истина; + КонецЕсли; + КонецЦикла; + + Если Не ЕстьВыбранныйФормат Тогда + ВыбранныеФорматыСохранения[0].Пометка = Истина; // выбор по умолчанию - первый в списке + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Функция ВыбранныеНастройкиФормата() + + ФорматыСохранения = Новый Массив; + + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + Если ВыбранныйФормат.Пометка Тогда + ФорматыСохранения.Добавить(ВыбранныйФормат.Значение); + КонецЕсли; + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("УпаковатьВАрхив", УпаковатьВАрхив); + Результат.Вставить("ФорматыСохранения", ФорматыСохранения); + + Возврат Результат; + +КонецФункции diff --git a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/НастройкаПечатныхФормПередОтправкой.mdo b/SSL/src/CommonForms/ВыборФорматаВложений/ВыборФорматаВложений.mdo similarity index 56% rename from SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/НастройкаПечатныхФормПередОтправкой.mdo rename to SSL/src/CommonForms/ВыборФорматаВложений/ВыборФорматаВложений.mdo index f8fe029d9..ad2f7f57f 100644 --- a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/НастройкаПечатныхФормПередОтправкой.mdo +++ b/SSL/src/CommonForms/ВыборФорматаВложений/ВыборФорматаВложений.mdo @@ -1,9 +1,9 @@ - - НастройкаПечатныхФормПередОтправкой + + ВыборФорматаВложений ru - Настройка печатных форм перед отправкой + Выбор формата вложений PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Form.form b/SSL/src/CommonForms/ВыполнениеОбменаДанными/Form.form deleted file mode 100644 index 5fb59d041..000000000 --- a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Form.form +++ /dev/null @@ -1,1293 +0,0 @@ - - - - ВыполнениеОбменаДанными - 1 - - ЗагрузкаДанных - 2 - - ДлительнаяОперация - 4 - - <key>ru</key> - <value>Длительная операция</value> - - true - true - - true - - - ДлительнаяОперацияРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - - ДлительнаяОперацияКонтекстноеМеню - 5 - true - - 7 - true - 2 - true - - - CommonPicture.Информация32 - - - - - СтатусЗагрузкиДанных - 6 - - <key>ru</key> - <value>Выполняется загрузка данных. -Пожалуйста, подождите...</value> - - true - true - - true - - - СтатусЗагрузкиДанныхРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - - СтатусЗагрузкиДанныхКонтекстноеМеню - 7 - true - - Label - true - 2 - true - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Загрузка данных</value> - - - ru - Загрузка данных - - - ЗагрузкаДанныхРасширеннаяПодсказка - 37 - Label - true - true - - Left - - - Page - - auto - - - - ВыгрузкаДанных - 3 - - ДлительнаяОперация1 - 10 - - <key>ru</key> - <value>Длительная операция</value> - - true - true - - true - - - ДлительнаяОперация1РасширеннаяПодсказка - 41 - Label - true - true - - Left - - - - ДлительнаяОперация1КонтекстноеМеню - 11 - true - - 7 - true - 2 - true - - - CommonPicture.Информация32 - - - - - СтатусВыгрузкиДанных - 8 - - <key>ru</key> - <value>Выполняется выгрузка данных. -Пожалуйста, подождите...</value> - - true - true - - true - - - СтатусВыгрузкиДанныхРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - - СтатусВыгрузкиДанныхКонтекстноеМеню - 9 - true - - Label - true - 2 - true - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Выгрузка данных</value> - - - ru - Выгрузка данных - - - ВыгрузкаДанныхРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - Page - - auto - - - - ЗавершениеОбмена - 12 - - СтатусЗавершенияОбмена - 17 - - ОбменЗавершенУспешно - 18 - - КартинкаОбменЗавершенУспешно - 13 - - <key>ru</key> - <value>Картинка обмен завершен успешно</value> - - true - true - - true - - - КартинкаОбменЗавершенУспешноРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - - КартинкаОбменЗавершенУспешноКонтекстноеМеню - 14 - true - - 7 - true - 2 - true - - - CommonPicture.Информация32 - - - - - СтатусОбменЗавершенУспешно - 15 - - <key>ru</key> - <value>Обмен данными успешно завершен.</value> - - true - true - - true - - - СтатусОбменЗавершенУспешноРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - - СтатусОбменЗавершенУспешноКонтекстноеМеню - 16 - true - - Label - true - 2 - true - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Обмен завершен успешно</value> - - - ru - Обмен завершен успешно - - - ОбменЗавершенУспешноРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - Page - - auto - - - - ОбменЗавершенСОшибкой - 19 - - КартинкаОбменЗавершенСОшибкой - 20 - - <key>ru</key> - <value>Картинка обмен завершен с ошибкой</value> - - true - true - - true - - - КартинкаОбменЗавершенСОшибкойРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - - КартинкаОбменЗавершенСОшибкойКонтекстноеМеню - 21 - true - - 7 - true - 2 - true - - - CommonPicture.Предупреждение32 - - - - - СтатусОбменЗавершенСОшибкой - 22 - - <key>ru</key> - <value>Не удалось выполнить обмен данными. -Обратитесь к администратору.</value> - - true - true - - true - - - СтатусОбменЗавершенСОшибкойРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - - СтатусОбменЗавершенСОшибкойКонтекстноеМеню - 23 - true - - Label - true - 2 - true - - Left - Center - - - true - true - - true - - - <key>ru</key> - <value>Обмен завершен с ошибкой</value> - - - ru - Обмен завершен с ошибкой - - - ОбменЗавершенСОшибкойРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - Page - - auto - - - - ОбменЗавершенСОшибкойДляАдминистратора - 28 - - КартинкаОбменЗавершенСОшибкой1 - 29 - - <key>ru</key> - <value>Картинка обмен завершен с ошибкой</value> - - true - true - - true - - - КартинкаОбменЗавершенСОшибкой1РасширеннаяПодсказка - 52 - Label - true - true - - Left - - - - КартинкаОбменЗавершенСОшибкой1КонтекстноеМеню - 30 - true - - 7 - true - 2 - true - - - CommonPicture.Предупреждение32 - - - - - СтатусноеСообщение - 33 - - СтатусОбменЗавершенСОшибкойДляАдминистратора - 31 - - <key>ru</key> - <value>Не удалось выполнить обмен данными.</value> - - true - true - - true - - - СтатусОбменЗавершенСОшибкойДляАдминистратораРасширеннаяПодсказка - 54 - Label - true - true - - Left - - - - СтатусОбменЗавершенСОшибкойДляАдминистратораКонтекстноеМеню - 32 - true - - Label - true - true - false - - Left - Center - - - - ПерейтиВЖурналРегистрации - 34 - true - true - - true - - - ПерейтиВЖурналРегистрацииРасширеннаяПодсказка - 55 - Label - true - true - - Left - - - Hyperlink - Form.Command.ПерейтиВЖурналРегистрации - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Статусное сообщение</value> - - - ru - Статусное сообщение - - - СтатусноеСообщениеРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - <key>ru</key> - <value>Обмен завершен с ошибкой</value> - - - ru - Обмен завершен с ошибкой - - - ОбменЗавершенСОшибкойДляАдминистратораРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - Page - - auto - - - true - true - - true - - - <key>ru</key> - <value>Статус завершения обмена</value> - - - ru - Статус завершения обмена - - - СтатусЗавершенияОбменаРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - Pages - - Auto - - - - КоманднаяПанель - 26 - - ФормаЗакрыть - 27 - true - true - - true - - - ФормаЗакрытьРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - Form.StandardCommand.Close - true - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - ru - Командная панель - - - КоманднаяПанельРасширеннаяПодсказка - 56 - Label - true - true - - Left - - - CommandBar - - Right - Form - - - true - true - - true - - - <key>ru</key> - <value>Завершение обмена</value> - - - ru - Завершение обмена - - - ЗавершениеОбменаРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - Page - - Vertical - auto - - - true - true - - true - - - <key>ru</key> - <value>Выполнение обмена данными</value> - - - ru - Выполнение обмена данными - - - ВыполнениеОбменаДаннымиРасширеннаяПодсказка - 36 - Label - true - true - - Left - - - Pages - - Auto - - - None - false - - ФормаКоманднаяПанель - -1 - - Закрыть - 24 - true - true - - true - - - ЗакрытьРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - true - true - UserCmds - Auto - - Right - - - OnOpen - ПриОткрытии - - - BeforeClose - ПередЗакрытием - - - OnCreateAtServer - ПриСозданииНаСервере - - Abort - Cancel - Help - Ignore - No - OK - RestoreValues - Retry - SaveValues - Yes - 40 - LockOwner - true - true - Vertical - true - UseIfNecessary - auto - true - - ПорядковыйНомерПерехода - - <key>ru</key> - <value>Порядковый номер перехода</value> - - 2 - - Number - - 3 - true - - - - true - - - true - - - - УзелИнформационнойБазы - - <key>ru</key> - <value>Узел информационной базы</value> - - 3 - - ExchangePlanRef - - - true - - - true - - - - ТаблицаПереходов - - <key>ru</key> - <value>Таблица переходов</value> - - 1 - - ValueTable - - - true - - - true - - - ПорядковыйНомерПерехода - - <key>ru</key> - <value>Порядковый номер перехода</value> - - 1 - - Number - - 3 - true - - - - true - - - true - - - - ИмяОсновнойСтраницы - - <key>ru</key> - <value>Имя основной страницы</value> - - 2 - - String - - - - true - - - true - - - - ИмяСтраницыДекорации - - <key>ru</key> - <value>Имя страницы декорации</value> - - 3 - - String - - - - true - - - true - - - - ИмяСтраницыНавигации - - <key>ru</key> - <value>Имя страницы навигации</value> - - 4 - - String - - - - true - - - true - - - - ИмяОбработчикаПриОткрытии - - <key>ru</key> - <value>Имя обработчика при открытии</value> - - 5 - - String - - - - true - - - true - - - - ИмяОбработчикаПриПереходеДалее - - <key>ru</key> - <value>Имя обработчика при переходе далее</value> - - 6 - - String - - - - true - - - true - - - - ИмяОбработчикаПриПереходеНазад - - <key>ru</key> - <value>Имя обработчика при переходе назад</value> - - 7 - - String - - - - true - - - true - - - - ДлительнаяОперация - - <key>ru</key> - <value>Длительная операция</value> - - 8 - - Boolean - - - true - - - true - - - - ИмяОбработчикаДлительнойОперации - - <key>ru</key> - <value>Имя обработчика длительной операции</value> - - 9 - - String - - - - true - - - true - - - - - ДлительнаяОперация - - <key>ru</key> - <value>Длительная операция</value> - - 4 - - Boolean - - - true - - - true - - - - ДлительнаяОперацияЗавершена - - <key>ru</key> - <value>Длительная операция завершена</value> - - 5 - - Boolean - - - true - - - true - - - - ИдентификаторФайлаСообщенияВСервисе - - <key>ru</key> - <value>Идентификатор файла сообщения в сервисе</value> - - 6 - - String - - - - true - - - true - - - - ИдентификаторДлительнойОперации - - <key>ru</key> - <value>Идентификатор длительной операции</value> - - 7 - - String - - - - true - - - true - - - - ДатаНачалаОперации - - <key>ru</key> - <value>Дата начала операции</value> - - 8 - - Date - - - - true - - - true - - - - WSURLВебСервиса - - <key>ru</key> - <value>WSURLВеб сервиса</value> - - 9 - - String - - - - true - - - true - - - - WSИмяПользователя - - <key>ru</key> - <value>WSИмя пользователя</value> - - 10 - - String - - - - true - - - true - - - - WSПароль - - <key>ru</key> - <value>WSПароль</value> - - 11 - - String - - - - true - - - true - - - - ВидТранспортаСообщений - - <key>ru</key> - <value>Вид транспорта сообщений</value> - - 12 - - EnumRef.ВидыТранспортаСообщенийОбмена - - - true - - - true - - - - ВыполняетсяОбменДанными - - <key>ru</key> - <value>Выполняется обмен данными</value> - - 13 - - Boolean - - - true - - - true - - - - СообщениеОбОшибке - - <key>ru</key> - <value>Сообщение об ошибке</value> - - 14 - - String - - - - true - - - true - - - - ДлительнаяОперацияЗавершенаСОшибкой - - <key>ru</key> - <value>Длительная операция завершена с ошибкой</value> - - 16 - - Boolean - - - true - - - true - - - - ЕстьОшибки - - <key>ru</key> - <value>Есть ошибки</value> - - 15 - - Boolean - - - true - - - true - - - - РольДоступнаДобавлениеИзменениеОбменовДанными - - <key>ru</key> - <value>Роль доступна добавление изменение обменов данными</value> - - 17 - - Boolean - - - true - - - true - - - - ПерейтиВЖурналРегистрации - - <key>ru</key> - <value>Перейти в журнал регистрации</value> - - 1 - - ru - Перейти в журнал регистрации - - - true - - - - ПерейтиВЖурналРегистрации - - - Auto - Auto - - - - - - diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Form.form b/SSL/src/CommonForms/ДлительнаяОперация/Form.form index 367c6b946..780756e3e 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Form.form +++ b/SSL/src/CommonForms/ДлительнаяОперация/Form.form @@ -44,7 +44,7 @@ 1 <key>ru</key> - <value>Операция выполняется...</value> + <value>Пожалуйста, подождите...</value> true true diff --git a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl index fb6ad9b39..03016f32d 100644 --- a/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl +++ b/SSL/src/CommonForms/ДлительнаяОперация/Module.bsl @@ -18,6 +18,16 @@ &НаКлиенте Процедура ПриЗакрытии() - ДлительныеОперацииКлиент.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + ПриЗакрытииНаСервере() + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ПриЗакрытииНаСервере() + + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); КонецПроцедуры diff --git a/SSL/src/CommonForms/ДобавлениеПодписиИзФайла/Help/ru.html b/SSL/src/CommonForms/ДобавлениеПодписиИзФайла/Help/ru.html index 9ce76d816..7c6693352 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/ДокументооборотБизнесПроцессИсполнение/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессИсполнение/Help/ru.html index 82081283d..8e730adb7 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/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента/Help/ru.html index 3fcc1af48..f878dfa74 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/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаВходящегоДокумента/Help/ru.html index 6bb52d392..92891d00d 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/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента/Help/ru.html index f93c293b2..4ca8980de 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/ДокументооборотБизнесПроцессОзнакомление/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессОзнакомление/Help/ru.html index 5e87e73a5..db980a20d 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/ДокументооборотБизнесПроцессПоручение/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессПоручение/Help/ru.html index 8a502f108..ec35c94ee 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/ДокументооборотБизнесПроцессРассмотрение/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРассмотрение/Help/ru.html index a0070d5dc..8b5e83c56 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/ДокументооборотБизнесПроцессРегистрация/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессРегистрация/Help/ru.html index 38d9c8f84..8fc24fb73 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/ДокументооборотБизнесПроцессСогласование/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессСогласование/Help/ru.html index ff970a185..b7b3d927b 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/ДокументооборотБизнесПроцессУтверждение/Help/ru.html b/SSL/src/CommonForms/ДокументооборотБизнесПроцессУтверждение/Help/ru.html index 01f2cba10..63ffa5a8f 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/ДокументооборотВнутреннийДокумент/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Help/ru.html index 642e4af3f..5d9035c90 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 488286a6e..e5d19de99 100644 --- a/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотВнутреннийДокумент/Module.bsl @@ -262,7 +262,7 @@ Элементы.ФайлыЗаполнитьКопированием.Видимость = Ложь; Если ЗначениеЗаполнено(ВнешнийОбъект) Тогда - Если ФайловыеФункции.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда + Если ФайловыеФункцииСлужебный.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда Элементы.ФайлыЗаполнитьКопированием.Видимость = Истина; Элементы.ФайлыЗаполнитьКопированием.Доступность = (Файлы.Количество() = 0); КонецЕсли; @@ -1250,7 +1250,7 @@ Возврат; КонецЕсли; - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); Если СтрокиПути.Количество() >= 2 Тогда Расширение = СтрокиПути[СтрокиПути.Количество()-1]; ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; diff --git a/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Help/ru.html index 40c857a30..adc9e9a77 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 27f66fbd5..3d1dec01c 100644 --- a/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотВходящийДокумент/Module.bsl @@ -262,7 +262,7 @@ Элементы.ФайлыЗаполнитьКопированием.Видимость = Ложь; Если ЗначениеЗаполнено(ВнешнийОбъект) Тогда - Если ФайловыеФункции.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда + Если ФайловыеФункцииСлужебный.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда Элементы.ФайлыЗаполнитьКопированием.Видимость = Истина; Элементы.ФайлыЗаполнитьКопированием.Доступность = (Файлы.Количество() = 0); КонецЕсли; @@ -1146,7 +1146,7 @@ Возврат; КонецЕсли; - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); Если СтрокиПути.Количество() >= 2 Тогда Расширение = СтрокиПути[СтрокиПути.Количество()-1]; ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; diff --git a/SSL/src/CommonForms/ДокументооборотВыборИсполнителяБизнесПроцесса/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВыборИсполнителяБизнесПроцесса/Help/ru.html index 1ab497a6d..39b4a8773 100644 --- a/SSL/src/CommonForms/ДокументооборотВыборИсполнителяБизнесПроцесса/Help/ru.html +++ b/SSL/src/CommonForms/ДокументооборотВыборИсполнителяБизнесПроцесса/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ДокументооборотВыборОбъектовАдресацииРоли/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВыборОбъектовАдресацииРоли/Help/ru.html index 623960f7b..9d4652a94 100644 --- a/SSL/src/CommonForms/ДокументооборотВыборОбъектовАдресацииРоли/Help/ru.html +++ b/SSL/src/CommonForms/ДокументооборотВыборОбъектовАдресацииРоли/Help/ru.html @@ -1,2 +1,2 @@ - +

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

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ДокументооборотВыборОдногоТипаИзСоставногоТипа/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВыборОдногоТипаИзСоставногоТипа/Help/ru.html index e0504966b..009b36cbf 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/ДокументооборотВыборПользователяСПодразделениями/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВыборПользователяСПодразделениями/Help/ru.html index d8e0c92e0..2682de3ea 100644 --- a/SSL/src/CommonForms/ДокументооборотВыборПользователяСПодразделениями/Help/ru.html +++ b/SSL/src/CommonForms/ДокументооборотВыборПользователяСПодразделениями/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ДокументооборотВыборФайла/Help/ru.html b/SSL/src/CommonForms/ДокументооборотВыборФайла/Help/ru.html index 5af53d968..dc9b71b7c 100644 --- a/SSL/src/CommonForms/ДокументооборотВыборФайла/Help/ru.html +++ b/SSL/src/CommonForms/ДокументооборотВыборФайла/Help/ru.html @@ -1,2 +1,2 @@ - +

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

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ДокументооборотВыборФайла/Module.bsl b/SSL/src/CommonForms/ДокументооборотВыборФайла/Module.bsl index 3ebe5bcfe..46b3ae7ad 100644 --- a/SSL/src/CommonForms/ДокументооборотВыборФайла/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотВыборФайла/Module.bsl @@ -61,7 +61,7 @@ НоваяСтрока.УникальныйИдентификатор = СведенияОФайле.objectId.id; НоваяСтрока.ДатаСоздания = СведенияОФайле.creationDate; - НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(НоваяСтрока.Расширение); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(НоваяСтрока.Расширение); КонецЦикла; КонецПроцедуры diff --git a/SSL/src/CommonForms/ДокументооборотДокументы/Help/ru.html b/SSL/src/CommonForms/ДокументооборотДокументы/Help/ru.html index 2c9c4f9bd..47fdbf529 100644 --- a/SSL/src/CommonForms/ДокументооборотДокументы/Help/ru.html +++ b/SSL/src/CommonForms/ДокументооборотДокументы/Help/ru.html @@ -1,4 +1,4 @@ - +

            В форме выводится информация о входящем, исходящем или внутреннем документе, соответствующем объекту внешней по отношению к 1С:Документооборот системы.

            Внешнему объекту может соответствовать только один входящий, исходящий или внутренний документ в 1С:Документообороте.
            В поле "Документ" выводится наименование, номер и дата этого документа.
            Кнопка "Создать" позволяет создать новый документ, соответствующий внешнему объекту.
            Изменить или просмотреть уже созданный документ можно с помощью кнопки "Открыть".
            С помощью кнопки "Выбрать" можно привязать к внешнему объекту уже существующий в 1С:Документообороте документ.

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

            diff --git a/SSL/src/CommonForms/ДокументооборотЗадачи/Help/ru.html b/SSL/src/CommonForms/ДокументооборотЗадачи/Help/ru.html index 68f5875db..d19a23c34 100644 --- a/SSL/src/CommonForms/ДокументооборотЗадачи/Help/ru.html +++ b/SSL/src/CommonForms/ДокументооборотЗадачи/Help/ru.html @@ -1,4 +1,4 @@ - +

            На форме отображается дерево бизнес-процессов и задач документооборота, предметами которых являются документы в 1С:Документооборот, связанные с текущим объектом.

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

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

            diff --git a/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Help/ru.html b/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Help/ru.html index b258ded1b..b5ce7f59a 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 c6066bb11..79d0fe431 100644 --- a/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотИсходящийДокумент/Module.bsl @@ -263,7 +263,7 @@ Элементы.ФайлыЗаполнитьКопированием.Видимость = Ложь; Если ЗначениеЗаполнено(ВнешнийОбъект) Тогда - Если ФайловыеФункции.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда + Если ФайловыеФункцииСлужебный.ЕстьХранимыеФайлы(ВнешнийОбъект) Тогда Элементы.ФайлыЗаполнитьКопированием.Видимость = Истина; Элементы.ФайлыЗаполнитьКопированием.Доступность = (Файлы.Количество() = 0); КонецЕсли; @@ -1193,7 +1193,7 @@ Возврат; КонецЕсли; - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); Если СтрокиПути.Количество() >= 2 Тогда Расширение = СтрокиПути[СтрокиПути.Количество()-1]; ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; diff --git a/SSL/src/CommonForms/ДокументооборотКарточкаЗадачи/Help/ru.html b/SSL/src/CommonForms/ДокументооборотКарточкаЗадачи/Help/ru.html index a52a5ca50..4b7a44cb2 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/ДокументооборотКарточкаФайла/Help/ru.html b/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Help/ru.html index a2134d770..5416c0c0f 100644 --- a/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Help/ru.html +++ b/SSL/src/CommonForms/ДокументооборотКарточкаФайла/Help/ru.html @@ -1,4 +1,4 @@ - +

            Для открытия карточки файла используйте клавишу F2 или кнопку  ("Изменить текущий элемент") командной панели списка файлов. 

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

            diff --git a/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Help/ru.html b/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Help/ru.html index 275c7e771..7bf1d6b83 100644 --- a/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Help/ru.html +++ b/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Help/ru.html @@ -1 +1 @@ -В этом диалоге настраивается рабочий каталог для хранения временных файлов при выполнении команды файла Просмотреть (при работе через веб браузер). \ 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 e3979bc4d..1840a8901 100644 --- a/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотНастройкаКаталогаФайлов/Module.bsl @@ -20,7 +20,7 @@ ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите путь к каталогу для временных файлов'"); Если ДиалогОткрытияФайла.Выбрать() Тогда - КаталогДляСохраненияДанных = ДиалогОткрытияФайла.Каталог + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + КаталогДляСохраненияДанных = ДиалогОткрытияФайла.Каталог + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); КонецЕсли; Иначе Предупреждение(НСтр("ru = 'Для выбора каталога необходимо установить расширение для работы с файлами в Веб-клиенте.'")); diff --git a/SSL/src/CommonForms/ДокументооборотСозданиеНовогоФайла/Help/ru.html b/SSL/src/CommonForms/ДокументооборотСозданиеНовогоФайла/Help/ru.html index 06343e4f7..72f4c0189 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/ДокументооборотФайлы/Help/ru.html b/SSL/src/CommonForms/ДокументооборотФайлы/Help/ru.html index cd5b98263..7f1fa596e 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 0db54ddcc..2ddaef5b3 100644 --- a/SSL/src/CommonForms/ДокументооборотФайлы/Module.bsl +++ b/SSL/src/CommonForms/ДокументооборотФайлы/Module.bsl @@ -58,7 +58,7 @@ Редактируется = СведенияОФайле.editing; Зашифрован = СведенияОФайле.encrypted; - НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(НоваяСтрока.Расширение); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(НоваяСтрока.Расширение); Для Каждого ПодписьXDTO Из СведенияОФайле.signatures Цикл Подпись = НоваяСтрока.ТаблицаПодписей.Добавить(); @@ -227,7 +227,7 @@ Возврат; КонецЕсли; - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); Если СтрокиПути.Количество() >= 2 Тогда Расширение = СтрокиПути[СтрокиПути.Количество()-1]; ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; @@ -297,8 +297,8 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла для передачи (%3 Мб).'"), Файл.Имя, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); КонецЕсли; ТекстПояснения = @@ -306,7 +306,7 @@ НСтр("ru = 'Идет сохранение файла ""%1"" (%2 Мб). |Пожалуйста, подождите...'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -330,7 +330,7 @@ КонецЕсли; ПараметрыСоздания.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; - ПараметрыСоздания.Расширение = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(Файл.Расширение); + ПараметрыСоздания.Расширение = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(Файл.Расширение); ПараметрыСоздания.ВремяИзменения = Файл.ПолучитьВремяИзменения(); ПараметрыСоздания.ВремяИзмененияУниверсальное = Файл.ПолучитьУниверсальноеВремяИзменения(); ПараметрыСоздания.Имя = Файл.ИмяБезРасширения; @@ -339,7 +339,7 @@ Текст = ""; Если НужноИзвлечьТекст Тогда - Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(Файл.ПолноеИмя); + Текст = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекст(Файл.ПолноеИмя); КонецЕсли; ПараметрыСоздания.Текст = Текст; @@ -402,8 +402,8 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла для передачи (%3 Мб).'"), ПараметрыСоздания.Имя, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); КонецЕсли; Если НЕ ПустаяСтрока(ПараметрыСоздания.Текст) Тогда diff --git a/SSL/src/CommonForms/ДополнительноеОписание/Form.form b/SSL/src/CommonForms/ДополнительноеОписание/Form.form new file mode 100644 index 000000000..52d608fe1 --- /dev/null +++ b/SSL/src/CommonForms/ДополнительноеОписание/Form.form @@ -0,0 +1,122 @@ + + + + ПолеHTMLДокумента + 1 + true + true + + true + + + ПолеHTMLДокумента + + true + None + + ПолеHTMLДокументаРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + + ПолеHTMLДокументаКонтекстноеМеню + 2 + true + + HTMLDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаЗакрыть + 3 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 4 + Label + true + true + + Left + + + Form.StandardCommand.Close + PictureAndText + true + true + true + UserCmds + Auto + + Right + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + DontBlock + true + true + Vertical + true + UseIfNecessary + auto + true + + ПолеHTMLДокумента + + <key>ru</key> + <value>Поле HTMLДокумента</value> + + 2 + + String + + + + true + + + true + + + + + + + diff --git a/SSL/src/CommonForms/ДополнительноеОписание/Module.bsl b/SSL/src/CommonForms/ДополнительноеОписание/Module.bsl new file mode 100644 index 000000000..6e7982847 --- /dev/null +++ b/SSL/src/CommonForms/ДополнительноеОписание/Module.bsl @@ -0,0 +1,18 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Макет = ПолучитьОбщийМакет(Параметры.ИмяМакета); + + ПолеHTMLДокумента = Макет.ПолучитьТекст(); + + Заголовок = Параметры.Заголовок; + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ДополнительноеОписание/ДополнительноеОписание.mdo b/SSL/src/CommonForms/ДополнительноеОписание/ДополнительноеОписание.mdo new file mode 100644 index 000000000..f876828d8 --- /dev/null +++ b/SSL/src/CommonForms/ДополнительноеОписание/ДополнительноеОписание.mdo @@ -0,0 +1,11 @@ + + + ДополнительноеОписание + + ru + Дополнительное описание + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form index 21c574ddf..f554953c1 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Form.form @@ -41,7 +41,7 @@ ОбработкиПредставлениеРасширеннаяПодсказка - 68 + 66 Label true true @@ -82,10 +82,10 @@ ОбработкиСтрокаПоиска - 59 + 57 ОбработкиСтрокаПоискаРасширеннаяПодсказка - 61 + 59 Label true true @@ -95,7 +95,7 @@ ОбработкиСтрокаПоискаКонтекстноеМеню - 60 + 58 true Обработки @@ -105,10 +105,10 @@ ОбработкиСостояниеПросмотра - 62 + 60 ОбработкиСостояниеПросмотраРасширеннаяПодсказка - 64 + 62 Label true true @@ -118,7 +118,7 @@ ОбработкиСостояниеПросмотраКонтекстноеМеню - 63 + 61 true ViewStatusAddition @@ -129,10 +129,10 @@ ОбработкиУправлениеПоиском - 65 + 63 ОбработкиУправлениеПоискомРасширеннаяПодсказка - 67 + 65 Label true true @@ -142,7 +142,7 @@ ОбработкиУправлениеПоискомКонтекстноеМеню - 66 + 64 true SearchControlAddition @@ -153,7 +153,7 @@ ОбработкиРасширеннаяПодсказка - 58 + 56 Label true true @@ -178,6 +178,7 @@ AutoUse true true + false false true Auto @@ -203,7 +204,7 @@ false НастроитьСписокБыстрогоДоступаРасширеннаяПодсказка - 78 + 76 Label true true @@ -235,7 +236,7 @@ СтраницаОткрытьОбработкуРасширеннаяПодсказка - 57 + 55 Label true true @@ -266,7 +267,7 @@ ДекорацияДлительнаяОперацияРасширеннаяПодсказка - 80 + 78 Label true true @@ -285,6 +286,7 @@ true false false + true CommonPicture.ДлительнаяОперация48 @@ -301,7 +303,7 @@ ПоясняющаяДекорацияРасширеннаяПодсказка - 81 + 79 Label true true @@ -320,52 +322,12 @@ true true false + true Left Center - - ПоясняющаяДекорация1 - 54 - true - - true - - - ПоясняющаяДекорация - - None - - ПоясняющаяДекорация1РасширеннаяПодсказка - 82 - Label - true - true - - Left - - - - ПоясняющаяДекорация1КонтекстноеМеню - 55 - true - - LabelField - Left - Center - Enter - true - Left - true - - true - 3 - true - true - false - - true true @@ -381,7 +343,7 @@ СтраницаВыполненияОбработкиРасширеннаяПодсказка - 79 + 77 Label true true @@ -409,7 +371,7 @@ СтраницыРасширеннаяПодсказка - 56 + 54 Label true true @@ -443,7 +405,7 @@ false ВыполнитьОбработкуРасширеннаяПодсказка - 87 + 83 Label true true @@ -470,7 +432,7 @@ false ОтменаРасширеннаяПодсказка - 88 + 84 Label true true @@ -501,7 +463,7 @@ КоманднаяПанельСтраницыОткрытьОбработкуРасширеннаяПодсказка - 86 + 82 Label true true @@ -529,7 +491,7 @@ СтраницаКоманднаяПанельСтраницыОткрытьОбработкуРасширеннаяПодсказка - 85 + 81 Label true true @@ -560,7 +522,7 @@ false ОтменитьВыполнениеОбработкиРасширеннаяПодсказка - 91 + 87 Label true true @@ -591,7 +553,7 @@ КоманднаяПанельСтраницыВыполненияОбработкиРасширеннаяПодсказка - 90 + 86 Label true true @@ -619,7 +581,7 @@ СтраницаКоманднаяПанельСтраницыВыполненияОбработкиРасширеннаяПодсказка - 89 + 85 Label true true @@ -648,7 +610,7 @@ СтраницыКомандныеПанелиРасширеннаяПодсказка - 84 + 80 Label true true diff --git a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl index d71e599d1..4df10ffee 100644 --- a/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonForms/ДополнительныеОтчетыИОбработки/Module.bsl @@ -15,6 +15,10 @@ Возврат; КонецЕсли; + Если Параметры.Свойство("РежимОткрытияОкна") Тогда + ЭтаФорма.РежимОткрытияОкна = Параметры.РежимОткрытияОкна; + КонецЕсли; + Если ЗначениеЗаполнено(Параметры.ИмяРаздела) И Параметры.ИмяРаздела <> ДополнительныеОтчетыИОбработкиКлиентСервер.ИдентификаторРабочегоСтола() Тогда Раздел = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Подсистемы.Найти(Параметры.ИмяРаздела)); @@ -118,7 +122,7 @@ &НаКлиенте Процедура ОтменитьВыполнениеОбработки(Команда) - ДлительныеОперацииКлиент.ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); + ОтменитьВыполнениеЗадания(ФоновоеЗаданиеИдентификатор); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -189,7 +193,7 @@ &НаКлиенте Процедура ВыполнитьОткрытиеФормыОбработки() - ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ВыполняемаяОбработка.Ссылка); + ИмяОбработки = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяОбработка.Ссылка); ПараметрыОбработки = Новый Структура("ИдентификаторКоманды, ДополнительнаяОбработкаСсылка"); ПараметрыОбработки.ИдентификаторКоманды = ВыполняемаяОбработка.Идентификатор; @@ -215,7 +219,7 @@ ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка выполняется...'")); КонецЕсли; - ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ВыполняемаяОбработка.Ссылка); + ИмяОбработки = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВыполняемаяОбработка.Ссылка); ПараметрыОбработки = Новый Структура("ИдентификаторКоманды,ДополнительнаяОбработкаСсылка"); ПараметрыОбработки.ИдентификаторКоманды = ВыполняемаяОбработка.Идентификатор; @@ -450,3 +454,9 @@ Возврат Результат; КонецФункции +&НаСервереБезКонтекста +Функция ОтменитьВыполнениеЗадания(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + +КонецФункции diff --git a/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Module.bsl b/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Module.bsl index f6f97bf6a..f66e6528a 100644 --- a/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Module.bsl +++ b/SSL/src/CommonForms/ЗагрузкаДанныхВОбласть/Module.bsl @@ -6,43 +6,33 @@ Процедура ПродолжитьЗагрузкуДанных(Команда) Если РазделительСуществует(ЗначениеРазделителя) Тогда + Текст = НСтр("ru = 'Указанная область данных существует. Загрузка может привести к порче текущих данных. |Продолжить загрузку?'"); - Результат = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); - - Если Результат = КодВозвратаДиалога.Нет Тогда + Если Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет) = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; + КонецЕсли; АдресВХранилище = Неопределено; - Если НЕ ПоместитьФайл(АдресВХранилище) Тогда + Если Не ПоместитьФайл(АдресВХранилище) Тогда Возврат; КонецЕсли; Состояние(НСтр("ru = 'Выполняется загрузка данных в область'")); - Попытка - ЗагрузитьДанныеНаСервере(АдресВХранилище, ЗначениеРазделителя); - - Пользователи.АвторизоватьТекущегоПользователя(); - - ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(Истина); - - Отказ = Ложь; - - СтандартныеПодсистемыКлиент.ДействияПередНачаломРаботыСистемы(Отказ); - - Если Отказ Тогда - Предупреждение(НСтр("ru = 'Загрузка данных завершена с ошибками'")); - Возврат; - КонецЕсли; - - СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(); - - Состояние(НСтр("ru = 'Загрузка данных завершена успешно'")); - Исключение - Предупреждение(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; + ЗагрузитьДанныеНаСервере(АдресВХранилище, ЗначениеРазделителя); + + Отказ = Ложь; + СтандартныеПодсистемыКлиент.ДействияПередНачаломРаботыСистемы(Отказ); + + Если Отказ Тогда + Предупреждение(НСтр("ru = 'Загрузка данных завершена с ошибками'")); + Возврат; + КонецЕсли; + + СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы(); + Состояние(НСтр("ru = 'Загрузка данных завершена успешно'")); КонецПроцедуры @@ -75,9 +65,13 @@ УдалитьФайлы(ИмяАрхива); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление временных файлов'"), - УровеньЖурналаРегистрации.Ошибка,,, + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; + + ПользователиСлужебный.АвторизоватьТекущегоПользователя(); + + ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(Истина); КонецПроцедуры @@ -94,6 +88,6 @@ | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; Запрос.УстановитьПараметр("ОбластьДанных", ЗначениеРазделителя); - Возврат НЕ Запрос.Выполнить().Пустой(); + Возврат Не Запрос.Выполнить().Пустой(); КонецФункции diff --git a/SSL/src/CommonForms/ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации/Module.bsl b/SSL/src/CommonForms/ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации/Module.bsl index 8fb39ca57..d274225ad 100644 --- a/SSL/src/CommonForms/ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации/Module.bsl +++ b/SSL/src/CommonForms/ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации/Module.bsl @@ -36,7 +36,7 @@ Состояние(НСтр("ru = 'Выполняется загрузка данных...'")); // выполняем загрузку данных - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспортаСообщенийОбмена); + ОбменДаннымиВызовСервера.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, УзелИнформационнойБазы, Истина, Ложь, ВидТранспортаСообщенийОбмена); Если Отказ Тогда diff --git a/SSL/src/CommonForms/ИнформационныйЦентр/Form.form b/SSL/src/CommonForms/ИнформационныйЦентр/Form.form new file mode 100644 index 000000000..3ed3d32fc --- /dev/null +++ b/SSL/src/CommonForms/ИнформационныйЦентр/Form.form @@ -0,0 +1,869 @@ + + + + ОсновнаяГруппа + 48 + + СтраницаРабочегоСтола + 49 + + ГруппаИнтеграцииССервисом + 1 + + ОткрытьМоиПриложения + 2 + true + true + + true + + + ОткрытьМоиПриложенияРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + UsualButton + Form.Command.ОткрытьМоиПриложения + Normal + Auto + true + true + UserCmds + Auto + + + СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет + 3 + true + true + + true + + + СсылкаСайтаДляПубликацииПриложенийЧерезИнтернетРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + СсылкаСайтаДляПубликацииПриложенийЧерезИнтернетКонтекстноеМеню + 4 + true + + Label + true + true + true + + + Click + СсылкаСайтаДляПубликацииПриложенийЧерезИнтернетНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа интеграции с сервисом</value> + + + ru + Группа интеграции с сервисом + + + ГруппаИнтеграцииССервисомРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаНовостей + 14 + true + true + + true + + + <key>ru</key> + <value>Новости:</value> + + + ru + Группа новостей + + + ГруппаНовостейРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаПолезныхСсылок + 5 + true + true + + true + + + <key>ru</key> + <value>Полезные ссылки:</value> + + + ГруппаПолезныхСсылокРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПоиска + 6 + + ПояснениеДляПоиска + 8 + + <key>ru</key> + <value>Ввести вопрос и найти ответ:</value> + + true + true + + true + + + ПояснениеДляПоискаРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ПояснениеДляПоискаКонтекстноеМеню + 9 + true + + Label + true + true + true + + Left + Bottom + + + + ГруппаСтрокиПоиска + 12 + + СтрокаПоиска + 10 + true + true + + true + + + СтрокаПоиска + + None + + OnChange + НайтиОтветНаВопрос + + + СтрокаПоискаРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + + СтрокаПоискаКонтекстноеМеню + 11 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Найти + 13 + true + true + + true + + + НайтиРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + UsualButton + Form.Command.НайтиОтветНаВопрос + Auto + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа строки поиска</value> + + + ru + Группа строки поиска + + + ГруппаСтрокиПоискаРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа поиска</value> + + + ru + Группа поиска + + + ГруппаПоискаРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСтатей + 7 + true + true + + true + + + <key>ru</key> + <value>Статьи:</value> + + + ГруппаСтатейРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Страница рабочего стола</value> + + + ru + Страница рабочего стола + + + СтраницаРабочегоСтолаРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Основная группа</value> + + + ru + Основная группа + + true + true + + ОсновнаяГруппаРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаКоманднаяПанель + -1 + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + Close + CustomizeForm + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + СтрокаПоиска + + <key>ru</key> + <value>Строка поиска</value> + + 1 + + String + + + + true + + + true + + + + ТаблицаСсылок + + <key>ru</key> + <value>Таблица ссылок</value> + + 2 + + ValueTable + + + true + + + true + + + ИмяСсылки + + <key>ru</key> + <value>Имя ссылки</value> + + 1 + + String + + + + true + + + true + + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 2 + + String + + + + true + + + true + + + + ТипАдреса + + <key>ru</key> + <value>Тип адреса</value> + + 3 + + String + + + + true + + + true + + + + + ТаблицаСтатей + + <key>ru</key> + <value>Таблица статей</value> + + 3 + + ValueTable + + + true + + + true + + + ИмяСтатьи + + <key>ru</key> + <value>Имя статьи</value> + + 1 + + String + + + + true + + + true + + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 2 + + String + + + + true + + + true + + + + + СсылкаНаПриложения + + <key>ru</key> + <value>Ссылка на приложения</value> + + 4 + + String + + + + true + + + true + + + + СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет + + <key>ru</key> + <value>Ссылка сайта для публикации приложений через интернет</value> + + 5 + + + true + + + true + + + + ИспользоватьРазделениеПоОбластямДанных + + <key>ru</key> + <value>Использовать разделение по областям данных</value> + + 6 + + Boolean + + + true + + + true + + + + ШаблонТекстаВТехПоддержку + + <key>ru</key> + <value>Шаблон текста в тех поддержку</value> + + 10 + + String + + + + true + + + true + + + + СсылкаПоискаИнформации + + <key>ru</key> + <value>Ссылка поиска информации</value> + + 11 + + String + + + + true + + + true + + + + ТаблицаНовостей + + <key>ru</key> + <value>Таблица новостей</value> + + 7 + + ValueTable + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 2 + + UUID + + + true + + + true + + + + Критичность + + <key>ru</key> + <value>Критичность</value> + + 3 + + Number + + 10 + + + + true + + + true + + + + ИмяНовости + + <key>ru</key> + <value>Имя новости</value> + + 4 + + String + + + + true + + + true + + + + ВнешняяСсылка + + <key>ru</key> + <value>Внешняя ссылка</value> + + 5 + + String + + + + true + + + true + + + + + ОткрытьМоиПриложения + + <key>ru</key> + <value>Мои приложения</value> + + 1 + + ru + Открыть мои приложения + + + true + + + + ОткрытьМоиПриложения + + + Auto + Auto + + + НайтиОтветНаВопрос + + <key>ru</key> + <value>Найти ответ на вопрос</value> + + 2 + + ru + Найти ответ на вопрос + + + true + + + StdPicture.Find + + + + НайтиОтветНаВопрос + + + Picture + Auto + Auto + + + + + + diff --git a/SSL/src/CommonForms/ИнформационныйЦентр/Module.bsl b/SSL/src/CommonForms/ИнформационныйЦентр/Module.bsl new file mode 100644 index 000000000..50e9f574b --- /dev/null +++ b/SSL/src/CommonForms/ИнформационныйЦентр/Module.bsl @@ -0,0 +1,348 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ИспользоватьРазделениеПоОбластямДанных = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + + Заголовок = НСтр("ru = 'Новости и поддержка'"); + СсылкаПоискаИнформации = "http://its.1c.ru/db/alldb#search:"; + + Если ИспользоватьРазделениеПоОбластямДанных Тогда // для модели сервиса + // Заголовок формы + СтандартныеПодсистемыПереопределяемый.ОпределитьЗаголовокОсновнойФормыИнформационныйЦентр(Заголовок); + + // Инетграция с сервисом + Элементы.ГруппаИнтеграцииССервисом.Видимость = Истина; + + СсылкаНаПриложения = "https://1cfresh.com/my"; + ИнформационныйЦентрСерверПереопределяемый.ОпределитьАдресСсылкиДляПереходаКПриложениямАбонента(СсылкаНаПриложения); + + СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет = ИнформационныйЦентрСервер.НовоеОписаниеСсылкиСайтаДляПубликацииПриложенийЧерезИнтернет(); + СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет.Имя = НСтр("ru = 'www.1cfresh.com'"); + СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет.Адрес = "https://1cfresh.com"; + + ИнформационныйЦентрСерверПереопределяемый.ОпределитьСсылкуДляПубликацииПриложенийЧерезИнтернет(СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет); + Элементы.СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет.Заголовок = СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет.Имя; + + // Новости + ВидимостьНовостейВМоделиСервиса = Истина; + ИнформационныйЦентрСерверПереопределяемый.ОпределитьВидимостьНовостейВМоделиСервиса(ВидимостьНовостейВМоделиСервиса); + ОтображатьЭлементыСвязанныеСНовостями(ВидимостьНовостейВМоделиСервиса); + + // Поиск информации + ИнформационныйЦентрСерверПереопределяемый.ОпределитьСсылкуПоискаИнформации(СсылкаПоискаИнформации); + Иначе // для локального режима + Элементы.ГруппаИнтеграцииССервисом.Видимость = Ложь; + КонецЕсли; + + // Поиск информации + ВидимостьПоискаИнформации = Истина; + ИнформационныйЦентрСерверПереопределяемый.ОпределитьВидимостьПоискаИнформации(ВидимостьПоискаИнформации); + + СформироватьСписокПолезныхСсылок(); + СформироватьСписокСтатей(); + СформироватьСписокНовостей(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОткрытьМоиПриложения(Команда) + + ПерейтиПоНавигационнойСсылке(СсылкаНаПриложения); + +КонецПроцедуры + +&НаКлиенте +Процедура СсылкаСайтаДляПубликацииПриложенийЧерезИнтернетНажатие(Элемент) + + Если Не СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет.Свойство("Адрес") Тогда + Возврат; + КонецЕсли; + + ПерейтиПоНавигационнойСсылке(СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет.Адрес); + +КонецПроцедуры + +&НаКлиенте +Процедура НажатиеНаСсылку(Элемент) + + МассивСсылок = ТаблицаСсылок.НайтиСтроки(Новый Структура("ИмяСсылки", Элемент.Имя)); + Если МассивСсылок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПерейтиПоНавигационнойСсылке(МассивСсылок.Получить(0).Ссылка); + +КонецПроцедуры + +&НаКлиенте +Процедура НажатиеНаСообщениеВТехПоддержку() + + ПараметрыСообщения = СформироватьПараметрыСообщения(); + ИнформационныйЦентрКлиент.ОткрытьФормуОтправкиСообщенияВТехподдержку(ИспользоватьРазделениеПоОбластямДанных, ПараметрыСообщения); + +КонецПроцедуры + +&НаКлиенте +Процедура НажатиеНаСтатью(Элемент) + + МассивСтатей = ТаблицаСтатей.НайтиСтроки(Новый Структура("ИмяСтатьи", Элемент.Имя)); + Если МассивСтатей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПерейтиПоНавигационнойСсылке(МассивСтатей.Получить(0).Ссылка); + +КонецПроцедуры + +&НаКлиенте +Процедура НажатиеНаНовость(Элемент) + + МассивНовостей = ТаблицаНовостей.НайтиСтроки(Новый Структура("ИмяНовости", Элемент.Имя)); + Если МассивНовостей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Идентификатор = МассивНовостей.Получить(0).Идентификатор; + ВнешняяСсылка = МассивНовостей.Получить(0).ВнешняяСсылка; + ИнформационныйЦентрКлиент.ПоказатьНовость(ВнешняяСсылка, Идентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура НажатиеЕщеНовости(Элемент) + + ИнформационныйЦентрКлиент.ПоказатьВсеНовости(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура НайтиОтветНаВопрос(Команда) + + ПоискОтветаНаВопрос(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура СформироватьСписокПолезныхСсылок() + + МассивПолезныхСсылок = Новый Массив; + + ПолезнаяСсылка = ИнформационныйЦентрСервер.НовоеОписаниеПолезнойСсылки(); + ПолезнаяСсылка.Имя = НСтр("ru = 'Методическая информация'"); + ПолезнаяСсылка.Адрес = "http://its.1c.ru"; + ПолезнаяСсылка.Пояснение = НСтр("ru = 'Методики, статьи, законодательство'"); + МассивПолезныхСсылок.Добавить(ПолезнаяСсылка); + + Если ИспользоватьРазделениеПоОбластямДанных Тогда + ПолезнаяСсылка = ИнформационныйЦентрСервер.НовоеОписаниеПолезнойСсылки(); + ПолезнаяСсылка.Имя = НСтр("ru = 'Форум'"); + ПолезнаяСсылка.Адрес = "https://1cfresh.com/forum/"; + ПолезнаяСсылка.Пояснение = НСтр("ru = 'Обсудить вопрос на форуме'"); + МассивПолезныхСсылок.Добавить(ПолезнаяСсылка); + КонецЕсли; + + Если ИспользоватьРазделениеПоОбластямДанных Тогда + ПолезнаяСсылка = ИнформационныйЦентрСервер.НовоеОписаниеПолезнойСсылки(); + ПолезнаяСсылка.Имя = НСтр("ru = 'Сообщение в техподдержку'"); + ПолезнаяСсылка.Пояснение = НСтр("ru = 'Отправить сообщение'"); + ПолезнаяСсылка.ДействиеПоНажатию = "НажатиеНаСообщениеВТехПоддержку"; + МассивПолезныхСсылок.Добавить(ПолезнаяСсылка); + КонецЕсли; + + ПолезнаяСсылка = ИнформационныйЦентрСервер.НовоеОписаниеПолезнойСсылки(); + ПолезнаяСсылка.Имя = НСтр("ru = 'Новости фирмы 1С'"); + ПолезнаяСсылка.Адрес = "http://www.1c.ru"; + ПолезнаяСсылка.Пояснение = НСтр("ru = 'Новости на сайте www.1c.ru'"); + МассивПолезныхСсылок.Добавить(ПолезнаяСсылка); + + ИнформационныйЦентрСерверПереопределяемый.ОпределитьМассивПолезныхСсылок(МассивПолезныхСсылок); + + Если МассивПолезныхСсылок.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ГруппаПолезныхСсылок = Элементы.ГруппаПолезныхСсылок; + + Итерация = 0; + Для каждого СтруктураСсылки из МассивПолезныхСсылок Цикл + + Итерация = Итерация + 1; + + ГруппаСсылки = Элементы.Добавить("ГруппаСсылки" + Строка(Итерация), Тип("ГруппаФормы"), ГруппаПолезныхСсылок); + ГруппаСсылки.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаСсылки.ОтображатьЗаголовок = Ложь; + ГруппаСсылки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаСсылки.Отображение = ОтображениеОбычнойГруппы.Нет; + + ИмяСсылки = Элементы.Добавить("ИмяСсылки" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаСсылки); + ИмяСсылки.Вид = ВидДекорацииФормы.Надпись; + ИмяСсылки.Заголовок = СтруктураСсылки.Имя; + ИмяСсылки.Гиперссылка = Истина; + ДействиеПоНажатию = ?(СтруктураСсылки.ДействиеПоНажатию = Неопределено, "НажатиеНаСсылку", СтруктураСсылки.ДействиеПоНажатию); + ИмяСсылки.УстановитьДействие("Нажатие", ДействиеПоНажатию); + + ПояснениеСсылки = Элементы.Добавить("ПояснениеСсылки" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаСсылки); + ПояснениеСсылки.Вид = ВидДекорацииФормы.Надпись; + ПояснениеСсылки.Заголовок = СтруктураСсылки.Пояснение; + ПояснениеСсылки.РастягиватьПоГоризонтали = Истина; + ПояснениеСсылки.ЦветТекста = WebЦвета.Серый; + + СтрокаТаблицыСсылок = ТаблицаСсылок.Добавить(); + СтрокаТаблицыСсылок.ИмяСсылки = "ИмяСсылки" + Строка(Итерация); + СтрокаТаблицыСсылок.Ссылка = СтруктураСсылки.Адрес; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура СформироватьСписокСтатей() + + МассивСтатей = Новый Массив; + ИнформационныйЦентрСерверПереопределяемый.ОпределитьМассивСтатей(МассивСтатей); + + Если МассивСтатей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ГруппаСтатей = Элементы.ГруппаСтатей; + + Итерация = 0; + Для каждого СтруктураСтатьи из МассивСтатей Цикл + + Итерация = Итерация + 1; + + ГруппаСтатьи = Элементы.Добавить("ГруппаСтатьи" + Строка(Итерация), Тип("ГруппаФормы"), ГруппаСтатей); + ГруппаСтатьи.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаСтатьи.ОтображатьЗаголовок = Ложь; + ГруппаСтатьи.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаСтатьи.Отображение = ОтображениеОбычнойГруппы.Нет; + + ИмяСтатьи = Элементы.Добавить("ИмяСтатьи" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаСтатьи); + ИмяСтатьи.Вид = ВидДекорацииФормы.Надпись; + ИмяСтатьи.РастягиватьПоГоризонтали = Истина; + ИмяСтатьи.Заголовок = СтруктураСтатьи.Имя; + ИмяСтатьи.Гиперссылка = Истина; + ИмяСтатьи.УстановитьДействие("Нажатие", "НажатиеНаСтатью"); + + СтрокаТаблицыСтатей = ТаблицаСтатей.Добавить(); + СтрокаТаблицыСтатей.ИмяСтатьи = "ИмяСтатьи" + Строка(Итерация); + СтрокаТаблицыСтатей.Ссылка = СтруктураСтатьи.Адрес; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура СформироватьСписокНовостей() + + УстановитьПривилегированныйРежим(Истина); + ИнформационныйЦентрСервер.СформироватьСписокНовостейНаРабочийСтол(ТаблицаНовостей); + + Если ТаблицаНовостей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ГруппаНовостей = Элементы.ГруппаНовостей; + + Для Итерация = 0 По ТаблицаНовостей.Количество() - 1 Цикл + + Критичность = ТаблицаНовостей.Получить(Итерация).Критичность; + Наименование = ТаблицаНовостей.Получить(Итерация).Наименование; + Картинка = ?(Критичность > 5, БиблиотекаКартинок.СостояниеОбменаДаннымиОшибка, БиблиотекаКартинок.Информация); + + ГруппаНовости = Элементы.Добавить("ГруппаНовости" + Строка(Итерация), Тип("ГруппаФормы"), ГруппаНовостей); + ГруппаНовости.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаНовости.ОтображатьЗаголовок = Ложь; + ГруппаНовости.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаНовости.Отображение = ОтображениеОбычнойГруппы.Нет; + + КартинкаНовости = Элементы.Добавить("КартинкаНовости" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаНовости); + КартинкаНовости.Вид = ВидДекорацииФормы.Картинка; + КартинкаНовости.Картинка = Картинка; + КартинкаНовости.Ширина = 2; + КартинкаНовости.Высота = 1; + КартинкаНовости.РазмерКартинки = РазмерКартинки.Растянуть; + + ИмяНовости = Элементы.Добавить("ИмяНовости" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаНовости); + ИмяНовости.Вид = ВидДекорацииФормы.Надпись; + ИмяНовости.Заголовок = Наименование; + ИмяНовости.РастягиватьПоГоризонтали = Истина; + ИмяНовости.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; + ИмяНовости.ВысотаЗаголовка = 1; + ИмяНовости.Гиперссылка = Истина; + ИмяНовости.УстановитьДействие("Нажатие", "НажатиеНаНовость"); + + Если Критичность = 10 Тогда + ИмяНовости.Шрифт = Новый Шрифт(, , Истина, , , ); + КонецЕсли; + + ТаблицаНовостей.Получить(Итерация).ИмяНовости = "ИмяНовости" + Строка(Итерация); + + КонецЦикла; + + ЕщеНовости = Элементы.Добавить("ЕщеНовости", Тип("ДекорацияФормы"), ГруппаНовостей); + ЕщеНовости.Вид = ВидДекорацииФормы.Надпись; + ЕщеНовости.Заголовок = НСтр("ru = 'Еще новости'"); + ЕщеНовости.РастягиватьПоГоризонтали = Истина; + ЕщеНовости.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; + ЕщеНовости.Гиперссылка = Истина; + ЕщеНовости.УстановитьДействие("Нажатие", "НажатиеЕщеНовости"); + +КонецПроцедуры + +&НаСервере +Функция СформироватьПараметрыСообщения() + + УстановитьПривилегированныйРежим(Истина); + + ПараметрыСообщения = Новый Структура; + ПараметрыСообщения.Вставить("ОтКого", ИнформационныйЦентрСервер.ОпределитьАдресЭлектроннойПочтыПользователя()); + ПараметрыСообщения.Вставить("Тема", НСтр("ru = 'Обращение в техподдержку'") + " (" + Формат(ТекущаяДатаСеанса(),"ДЛФ=DT") + ")"); + ПараметрыСообщения.Вставить("Текст", ИнформационныйЦентрСервер.СформироватьШаблонТекстаВТехПоддержку()); + ПараметрыСообщения.Вставить("Вложения", ИнформационныйЦентрСервер.СформироватьXMLСТехническимиПараметрами()); + + Возврат ПараметрыСообщения; + +КонецФункции + +&НаСервере +Процедура ОтображатьЭлементыСвязанныеСНовостями(ВидимостьНовостей) + + Элементы.ГруппаНовостей.Видимость = ВидимостьНовостей; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоискОтветаНаВопрос() + + ПодключитьОбработчикОжидания("ОбработкаОжиданияПоискаОтветаНаВопрос", 0.1, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОжиданияПоискаОтветаНаВопрос() + + Если ПустаяСтрока(СтрокаПоиска) Тогда + Возврат; + КонецЕсли; + + ПерейтиПоНавигационнойСсылке(СсылкаПоискаИнформации + СтрокаПоиска); + +КонецПроцедуры + diff --git a/SSL/src/CommonForms/ИнформационныйЦентр/ИнформационныйЦентр.mdo b/SSL/src/CommonForms/ИнформационныйЦентр/ИнформационныйЦентр.mdo new file mode 100644 index 000000000..d6aa7c973 --- /dev/null +++ b/SSL/src/CommonForms/ИнформационныйЦентр/ИнформационныйЦентр.mdo @@ -0,0 +1,10 @@ + + + ИнформационныйЦентр + + ru + Информационный центр + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/НастройкаЛокальногоКэшаФайлов/Form.form b/SSL/src/CommonForms/НастройкаЛокальногоКэшаФайлов/Form.form index 3269f87e9..bda1f8ed6 100644 --- a/SSL/src/CommonForms/НастройкаЛокальногоКэшаФайлов/Form.form +++ b/SSL/src/CommonForms/НастройкаЛокальногоКэшаФайлов/Form.form @@ -8,7 +8,7 @@ ГруппаРасположение 26 - ПутьКЛокальномуКэшуФайлов + РабочийКаталогПользователя 4 <key>ru</key> @@ -20,10 +20,10 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>ПутьКЛокальномуКэшуФайлов</segments> + <segments>РабочийКаталогПользователя</segments> </dataPath> <extendedTooltip> - <name>ПутьКЛокальномуКэшуФайловРасширеннаяПодсказка</name> + <name>РабочийКаталогПользователяРасширеннаяПодсказка</name> <id>31</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -33,7 +33,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПутьКЛокальномуКэшуФайловКонтекстноеМеню</name> + <name>РабочийКаталогПользователяКонтекстноеМеню</name> <id>5</id> <autoFill>true</autoFill> </contextMenu> @@ -46,7 +46,7 @@ <extInfo xsi:type="form:InputFieldExtInfo"> <handlers> <event>StartChoice</event> - <name>ПутьКЛокальномуКэшуФайловНачалоВыбора</name> + <name>РабочийКаталогПользователяНачалоВыбора</name> </handlers> <width>48</width> <autoMaxWidth>true</autoMaxWidth> @@ -545,10 +545,10 @@ </edit> </attributes> <attributes> - <name>ПутьКЛокальномуКэшуФайлов</name> + <name>РабочийКаталогПользователя</name> <title> <key>ru</key> - <value>Путь к локальному кэшу файлов</value> + <value>Рабочий каталог пользователя</value> 2 diff --git a/SSL/src/CommonForms/НастройкаЛокальногоКэшаФайлов/Help/ru.html b/SSL/src/CommonForms/НастройкаЛокальногоКэшаФайлов/Help/ru.html index 825d016a7..896861ef1 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 6e5c054d1..bdcd52c48 100644 --- a/SSL/src/CommonForms/НастройкаЛокальногоКэшаФайлов/Module.bsl +++ b/SSL/src/CommonForms/НастройкаЛокальногоКэшаФайлов/Module.bsl @@ -22,17 +22,25 @@ &НаКлиенте Процедура ОбновитьПараметрыНаКлиенте() - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ПутьКЛокальномуКэшуФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; - #Если НЕ ВебКлиент Тогда - МассивФайлов = НайтиФайлы(ПутьКЛокальномуКэшуФайлов, "*.*"); - РазмерФайловВРабочемКаталоге = 0; - КоличествоСуммарное = 0; - ФайловыеФункцииКлиент.ОбходФайловРазмер(ПутьКЛокальномуКэшуФайлов, МассивФайлов, РазмерФайловВРабочемКаталоге, КоличествоСуммарное); - - РазмерФайловВРабочемКаталоге = РазмерФайловВРабочемКаталоге / 1048576; - #КонецЕсли + РабочийКаталогПользователя = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); + +#Если НЕ ВебКлиент Тогда + + МассивФайлов = НайтиФайлы(РабочийКаталогПользователя, "*.*"); + РазмерФайловВРабочемКаталоге = 0; + КоличествоСуммарное = 0; + + ФайловыеФункцииСлужебныйКлиент.ОбходФайловРазмер( + РабочийКаталогПользователя, + МассивФайлов, + РазмерФайловВРабочемКаталоге, + КоличествоСуммарное); + + РазмерФайловВРабочемКаталоге = РазмерФайловВРабочемКаталоге / 1048576; + +#КонецЕсли + КонецПроцедуры &НаКлиенте @@ -44,20 +52,26 @@ &НаКлиенте Процедура СохранитьВыполнить() - Если ИмяКаталогаПрежнееЗначение <> ПутьКЛокальномуКэшуФайлов Тогда -#Если Не ВебКлиент Тогда - Если НЕ РаботаСФайламиКлиент.ПеренестиСодержимоеРабочегоКаталога(ИмяКаталогаПрежнееЗначение, ПутьКЛокальномуКэшуФайлов) Тогда + Если ИмяКаталогаПрежнееЗначение <> РабочийКаталогПользователя Тогда + +#Если Не ВебКлиент Тогда + + Если НЕ РаботаСФайламиКлиент.ПеренестиСодержимоеРабочегоКаталога( + ИмяКаталогаПрежнееЗначение, РабочийКаталогПользователя) Тогда + Возврат; КонецЕсли; -#КонецЕсли - КонецЕсли; + +#КонецЕсли + + КонецЕсли; МассивСтруктур = Новый Массив; Элемент = Новый Структура; - Элемент.Вставить("Объект", "ЛокальныйКэшФайлов"); - Элемент.Вставить("Настройка", "ПутьКЛокальномуКэшуФайлов"); - Элемент.Вставить("Значение", ПутьКЛокальномуКэшуФайлов); + Элемент.Вставить("Объект", "ЛокальныйКэшФайлов"); + Элемент.Вставить("Настройка", "РабочийКаталогПользователя"); + Элемент.Вставить("Значение", РабочийКаталогПользователя); МассивСтруктур.Добавить(Элемент); Элемент = Новый Структура; @@ -80,8 +94,6 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассивИОбновитьПовторноИспользуемыеЗначения(МассивСтруктур); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - Закрыть(); КонецПроцедуры @@ -96,16 +108,16 @@ КонецЕсли; ОбновитьПараметрыНаКлиенте(); - ИмяКаталогаПрежнееЗначение = ПутьКЛокальномуКэшуФайлов; + ИмяКаталогаПрежнееЗначение = РабочийКаталогПользователя; КонецПроцедуры &НаКлиенте Процедура СписокФайловВыполнить() ОткрытьФормуМодально("Справочник.Файлы.Форма.СписокФайловВЛокальномКэшеФайлов"); - ПутьКЛокальномуКэшуФайловВФорме = ПутьКЛокальномуКэшуФайлов; + РабочийКаталогПользователяВФорме = РабочийКаталогПользователя; ОбновитьПараметры(); - ПутьКЛокальномуКэшуФайлов = ПутьКЛокальномуКэшуФайловВФорме; + РабочийКаталогПользователя = РабочийКаталогПользователяВФорме; КонецПроцедуры &НаКлиенте @@ -120,38 +132,48 @@ &НаКлиенте Процедура ОчиститьЛокальныйКэшФайлов(Команда) + #Если НЕ ВебКлиент Тогда - ТекстВопроса = НСтр("ru = 'Из основного рабочего каталога будут удалены все файлы, кроме занятых Вами для редактирования. Продолжить?'"); + ТекстВопроса = НСтр("ru = 'Из основного рабочего каталога будут удалены все файлы, + |кроме занятых Вами для редактирования. Продолжить?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет); Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; КонецЕсли; - Состояние(НСтр("ru = 'Выполняется очистка основного рабочего каталога... - |Пожалуйста, подождите.'")); - ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); + Состояние(НСтр("ru = 'Выполняется очистка основного рабочего каталога... + |Пожалуйста, подождите.'")); + + ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ЛокальныйКэшФайлов", "РабочийКаталогПользователя"); МассивФайлов = НайтиФайлы(ИмяКаталога, "*.*"); РазмерФайловВРабочемКаталоге = 0; КоличествоСуммарное = 0; - ФайловыеФункцииКлиент.ОбходФайловРазмер(ИмяКаталога, МассивФайлов, РазмерФайловВРабочемКаталоге, КоличествоСуммарное); - РаботаСФайламиКлиент.ОчиститьРабочийКаталог(РазмерФайловВРабочемКаталоге, 0, Истина); // ОчищатьВсе= Истина + ФайловыеФункцииСлужебныйКлиент.ОбходФайловРазмер( + ИмяКаталога, МассивФайлов, РазмерФайловВРабочемКаталоге, КоличествоСуммарное); + + // ОчищатьВсе = Истина. + РаботаСФайламиКлиент.ОчиститьРабочийКаталог(РазмерФайловВРабочемКаталоге, 0, Истина); РазмерФайловВРабочемКаталоге = РазмерФайловВРабочемКаталоге / 1048576; - ПутьКЛокальномуКэшуФайловВФорме = ПутьКЛокальномуКэшуФайлов; + РабочийКаталогПользователяВФорме = РабочийКаталогПользователя; ОбновитьПараметры(); - ПутьКЛокальномуКэшуФайлов = ПутьКЛокальномуКэшуФайловВФорме; + РабочийКаталогПользователя = РабочийКаталогПользователяВФорме; + Состояние(НСтр("ru = 'Очистка основного рабочего каталога успешно завершена.'")); #КонецЕсли + КонецПроцедуры &НаКлиенте -Процедура ПутьКЛокальномуКэшуФайловНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) +Процедура РабочийКаталогПользователяНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; @@ -160,24 +182,26 @@ КонецЕсли; // выбираем другой путь к рабочему каталогу - ИмяКаталога = ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = РабочийКаталогПользователя; Заголовок = НСтр("ru = 'Выберите путь к основному рабочему каталогу'"); Если Не РаботаСФайламиКлиент.ВыбратьПутьКРабочемуКаталогу(ИмяКаталога, Заголовок, Ложь) Тогда Возврат; - КонецЕсли; + КонецЕсли; - ПутьКЛокальномуКэшуФайлов = ИмяКаталога; + РабочийКаталогПользователя = ИмяКаталога; КонецПроцедуры &НаКлиенте Процедура ПутьКРабочемуКаталогуПоУмолчанию(Команда) - ПутьКЛокальномуКэшуФайловВременный = ФайловыеФункцииКлиент.ПолучитьПутьККаталогуДанныхПользователя(); + РабочийКаталогПользователяВременный = + ФайловыеФункцииСлужебныйКлиент.ВыбратьПутьККаталогуДанныхПользователя(); - Если ПутьКЛокальномуКэшуФайлов = ПутьКЛокальномуКэшуФайловВременный Тогда + Если РабочийКаталогПользователя = РабочийКаталогПользователяВременный Тогда Возврат; - КонецЕсли; + КонецЕсли; + + РабочийКаталогПользователя = РабочийКаталогПользователяВременный; - ПутьКЛокальномуКэшуФайлов = ПутьКЛокальномуКэшуФайловВременный; КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form index 82ec8862f..17fcd68c6 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Form.form @@ -179,6 +179,7 @@ AutoUsetruetrue + falsefalsetrueAuto @@ -511,6 +512,7 @@ AutoUsetruetrue + falsefalsetrueAuto diff --git a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl index 4af7391ba..6c331f228 100644 --- a/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl +++ b/SSL/src/CommonForms/НастройкаМоихОтчетовИОбработок/Module.bsl @@ -18,7 +18,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если ДополнительныеОтчетыИОбработкиКлиент.СохранитьДанныеПроизвольнойФормы(Отказ, Модифицированность) Тогда + Если ДополнительныеОтчетыИОбработкиКлиент.СохранитьДанныеПроизвольнойФормы(Модифицированность, Отказ) Тогда ЗаписатьНаборОбработокПользователя(); ОповеститьОВыборе("ВыполненаНастройкаМоихОтчетовИОбработок"); КонецЕсли; @@ -26,7 +26,7 @@ &НаКлиенте Процедура ПриЗакрытии() - Если ДополнительныеОтчетыИОбработкиКлиент.СохранитьДанныеПроизвольнойФормы(, Модифицированность) Тогда + Если ДополнительныеОтчетыИОбработкиКлиент.СохранитьДанныеПроизвольнойФормы(Модифицированность) Тогда ЗаписатьНаборОбработокПользователя(); ОповеститьОВыборе("ВыполненаНастройкаМоихОтчетовИОбработок"); КонецЕсли; diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form index 4d230587c..487574682 100644 --- a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Form.form @@ -1339,41 +1339,6 @@ - - ИдентификаторРегламентногоЗадания - - <key>ru</key> - <value>Идентификатор регламентного задания</value> - - 1 - - String - - - - true - - - true - - - - ИспользованиеРегламентногоЗадания - - <key>ru</key> - <value>Использование регламентного задания</value> - - 3 - - Boolean - - - true - - - true - - ПодключитьКонечнуюТочку diff --git a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl index aada686eb..405507e45 100644 --- a/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl +++ b/SSL/src/CommonForms/НастройкаОбменаСообщениями/Module.bsl @@ -16,14 +16,10 @@ ОбновитьСписокСостоянияУзлов(); УстановитьПривилегированныйРежим(Истина); - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); - УстановитьПривилегированныйРежим(Ложь); - ИдентификаторРегламентногоЗадания = Строка(РегламентноеЗадание.УникальныйИдентификатор); - - ИспользованиеРегламентногоЗадания = РегламентноеЗадание.Использование; - - Элементы.СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы.Пометка = ИспользованиеРегламентногоЗадания; + Элементы.СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы.Пометка = + РегламентныеЗаданияСервер.ПолучитьИспользованиеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы);; КонецПроцедуры @@ -118,11 +114,11 @@ &НаКлиенте Процедура НастроитьРасписаниеОтправкиИПолученияСообщенийСистемы(Команда) - Диалог = Новый ДиалогРасписанияРегламентногоЗадания(РегламентныеЗаданияКлиент.ПолучитьРасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания)); + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(ПолучитьРасписание()); Если Диалог.ОткрытьМодально() Тогда - РегламентныеЗаданияКлиент.УстановитьРасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания, Диалог.Расписание); + УстановитьРасписание(Диалог.Расписание); КонецЕсли; @@ -131,11 +127,7 @@ &НаКлиенте Процедура ВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы(Команда) - ИспользованиеРегламентногоЗадания = Не ИспользованиеРегламентногоЗадания; - - РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания(ИдентификаторРегламентногоЗадания, ИспользованиеРегламентногоЗадания); - - Элементы.СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы.Пометка = ИспользованиеРегламентногоЗадания; + ВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемыНаСервере(); КонецПроцедуры @@ -149,6 +141,43 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Процедура ВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемыНаСервере() + + УстановитьПривилегированныйРежим(Истина); + + Элементы.СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы.Пометка = + НЕ РегламентныеЗаданияСервер.ПолучитьИспользованиеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); + + РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы, + Элементы.СписокСостоянияУзловВключитьОтключитьРасписаниеОтправкиИПолученияСообщенийСистемы.Пометка); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьРасписание() + + УстановитьПривилегированныйРежим(Истина); + + Возврат РегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы + ); + +КонецФункции + +&НаСервереБезКонтекста +Процедура УстановитьРасписание(Знач Расписание) + + УстановитьПривилегированныйРежим(Истина); + + РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы, + Расписание); + +КонецПроцедуры + &НаСервере Процедура ОбновитьСписокСостоянияУзлов() diff --git a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Module.bsl b/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Module.bsl deleted file mode 100644 index 6e3b87a81..000000000 --- a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Module.bsl +++ /dev/null @@ -1,40 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ - -&НаКлиенте -Процедура КнопкаОКВыполнить() - - СписокТипов = Новый СписокЗначений; - Если ФорматMXL Тогда - СписокТипов.Добавить(ТипФайлаТабличногоДокумента.MXL, "mxl"); - КонецЕсли; - - Если ФорматHTML Тогда - СписокТипов.Добавить(ТипФайлаТабличногоДокумента.HTML, "html"); - КонецЕсли; - - Если ФорматXLS Тогда - СписокТипов.Добавить(ТипФайлаТабличногоДокумента.XLS, "xls"); - КонецЕсли; - - Если ФорматPDF Тогда - СписокТипов.Добавить(ТипФайлаТабличногоДокумента.PDF, "pdf"); - КонецЕсли; - - Если ФорматODS Тогда - СписокТипов.Добавить(ТипФайлаТабличногоДокумента.ODS, "ods"); - КонецЕсли; - - - Если СписокТипов.Количество() = 0 Тогда - Предупреждение(НСтр("ru = 'Необходимо указать как минимум один из предложенных форматов.'")); - Возврат; - КонецЕсли; - - Результат = Новый Структура; - Результат.Вставить("ЗапаковатьZIP", ЗапаковатьZIP); - Результат.Вставить("СписокТипов", СписокТипов); - - Закрыть(Результат); - -КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Form.form b/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Form.form new file mode 100644 index 000000000..75d7e3931 --- /dev/null +++ b/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Form.form @@ -0,0 +1,1384 @@ +<?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:Button"> + <name>ФормаУстановитьНастройкиПоУмолчанию</name> + <id>25</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаУстановитьНастройкиПоУмолчаниюРасширеннаяПодсказка</name> + <id>73</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <type>UsualButton</type> + <commandName>Form.Command.УстановитьПоУмолчанию</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:FormGroup"> + <name>ГруппаПараметрыФормирования</name> + <id>29</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаВремяФормированияКопий</name> + <id>30</id> + <items xsi:type="form:FormField"> + <name>ВремяФормированияКопий</name> + <id>31</id> + <title> + <key>ru</key> + <value>Формировать копии в</value> + + true + true + + true + + + ВремяФормированияКопий + + + ВремяФормированияКопийРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + ВремяФормированияКопийКонтекстноеМеню + 32 + true + + InputField + Enter + true + Left + true + + 6 + true + true + true + true + true + true + Normal + + + + ЧасовойПоясОбласти + 33 + true + true + + true + + + ЧасовойПоясОбласти + + None + + ЧасовойПоясОбластиРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + ЧасовойПоясОбластиКонтекстноеМеню + 34 + true + + LabelField + Enter + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Время формирования копий</value> + + + ГруппаВремяФормированияКопийРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаПараметрыФормированияКолонки + 35 + + ГруппаФлагиИВремя + 36 + + ГруппаЕжедневныеКопии + 37 + + ФормироватьЕжедневныеКопии + 38 + true + true + + true + + + ФормироватьЕжедневныеКопии + + + ФормироватьЕжедневныеКопииРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + + ФормироватьЕжедневныеКопииКонтекстноеМеню + 39 + true + + CheckBoxField + Enter + true + Left + true + + + + ФормироватьЕжедневныеКопииТолькоВДниРаботыПользователей + 40 + + <key>ru</key> + <value>только в дни работы</value> + + true + true + + true + + + ФормироватьЕжедневныеКопииТолькоВДниРаботыПользователей + + Left + + ФормироватьЕжедневныеКопииТолькоВДниРаботыПользователейРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ФормироватьЕжедневныеКопииТолькоВДниРаботыПользователейКонтекстноеМеню + 41 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Ежедневные копии</value> + + true + + ГруппаЕжедневныеКопииРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаЕжемесячныеКопии + 42 + + ФормироватьЕжемесячныеКопии + 43 + true + true + + true + + + ФормироватьЕжемесячныеКопии + + + ФормироватьЕжемесячныеКопииРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + + ФормироватьЕжемесячныеКопииКонтекстноеМеню + 44 + true + + CheckBoxField + Enter + true + Left + true + + + + ЧислоМесяцаФормированияЕжемесячныхКопий + 45 + + <key>ru</key> + <value> числа месяца</value> + + true + true + + true + + + ЧислоМесяцаФормированияЕжемесячныхКопий + + Right + + ЧислоМесяцаФормированияЕжемесячныхКопийРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ЧислоМесяцаФормированияЕжемесячныхКопийКонтекстноеМеню + 46 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + + 1 + + + 28 + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Ежемесячные копии</value> + + + ГруппаЕжемесячныеКопииРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаЕжегодныеКопии + 47 + + ФормироватьЕжегодныеКопии + 48 + true + true + + true + + + ФормироватьЕжегодныеКопии + + + ФормироватьЕжегодныеКопииРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ФормироватьЕжегодныеКопииКонтекстноеМеню + 49 + true + + CheckBoxField + Enter + true + Left + true + + + + ЧислоМесяцаФормированияЕжегодныхКопий + 50 + true + true + + true + + + ЧислоМесяцаФормированияЕжегодныхКопий + + None + + ЧислоМесяцаФормированияЕжегодныхКопийРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + ЧислоМесяцаФормированияЕжегодныхКопийКонтекстноеМеню + 51 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + + 1 + + + 28 + + Normal + + + + МесяцФормированияЕжегодныхКопий + 52 + true + true + + true + + + МесяцФормированияЕжегодныхКопий + + None + + МесяцФормированияЕжегодныхКопийРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + МесяцФормированияЕжегодныхКопийКонтекстноеМеню + 53 + true + + InputField + Enter + true + Left + true + + 10 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Ежегодные копии</value> + + + ГруппаЕжегодныеКопииРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Флаги и время</value> + + + ГруппаФлагиИВремяРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаКоличество + 54 + + ГруппаЕжедневныеКопииКоличество + 55 + + КоличествоЕжедневныхКопий + 56 + + <key>ru</key> + <value>хранить</value> + + true + true + + true + + + КоличествоЕжедневныхКопий + + + КоличествоЕжедневныхКопийРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + КоличествоЕжедневныхКопийКонтекстноеМеню + 57 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияКопийЕжедневных + 58 + + <key>ru</key> + <value>копий</value> + + true + true + + true + + + ДекорацияКопийЕжедневныхРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + ДекорацияКопийЕжедневныхКонтекстноеМеню + 59 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ежедневные копии (количество)</value> + + true + + ГруппаЕжедневныеКопииКоличествоРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаЕжемесячныеКопииКоличество + 60 + + КоличествоЕжемесячныхКопий + 61 + + <key>ru</key> + <value>хранить</value> + + true + true + + true + + + КоличествоЕжемесячныхКопий + + + КоличествоЕжемесячныхКопийРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + КоличествоЕжемесячныхКопийКонтекстноеМеню + 62 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияКопийЕжемесячных + 63 + + <key>ru</key> + <value>копий</value> + + true + true + + true + + + ДекорацияКопийЕжемесячныхРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + ДекорацияКопийЕжемесячныхКонтекстноеМеню + 64 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ежемесячные копии (количество)</value> + + + ГруппаЕжемесячныеКопииКоличествоРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаЕжегодныеКопииКоличество + 65 + + КоличествоЕжегодныхКопий + 66 + + <key>ru</key> + <value>хранить</value> + + true + true + + true + + + КоличествоЕжегодныхКопий + + + КоличествоЕжегодныхКопийРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + + КоличествоЕжегодныхКопийКонтекстноеМеню + 67 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ДекорацияКопийЕжегодных + 68 + + <key>ru</key> + <value>копий</value> + + true + true + + true + + + ДекорацияКопийЕжегодныхРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + + ДекорацияКопийЕжегодныхКонтекстноеМеню + 69 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Ежегодные копии (количество)</value> + + + ГруппаЕжегодныеКопииКоличествоРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Количество</value> + + + ГруппаКоличествоРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры формирования</value> + + + ГруппаПараметрыФормированияКолонкиРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры формирования</value> + + + ГруппаПараметрыФормированияРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОК + 26 + + <key>ru</key> + <value>ОК</value> + + true + true + + true + + + ФормаОКРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаОтмена + 27 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 28 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Right + + + BeforeClose + ПередЗакрытием + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ФормироватьЕжедневныеКопии + + <key>ru</key> + <value>Формировать ежедневные копии</value> + + 2 + + Boolean + + + true + + + true + + true + + + ФормироватьЕжемесячныеКопии + + <key>ru</key> + <value>Формировать ежемесячные копии</value> + + 3 + + Boolean + + + true + + + true + + true + + + ФормироватьЕжегодныеКопии + + <key>ru</key> + <value>Формировать ежегодные копии</value> + + 4 + + Boolean + + + true + + + true + + true + + + ВремяФормированияКопий + + <key>ru</key> + <value>Время формирования копий</value> + + 5 + + Date + + Time + + + + true + + + true + + true + + + ЧислоМесяцаФормированияЕжемесячныхКопий + + <key>ru</key> + <value>Число месяца формирования ежемесячных копий</value> + + 6 + + Number + + 2 + true + + + + true + + + true + + true + + + МесяцФормированияЕжегодныхКопий + + <key>ru</key> + <value>Месяц формирования ежегодных копий</value> + + 7 + + Number + + 2 + true + + + + true + + + true + + true + + + ЧислоМесяцаФормированияЕжегодныхКопий + + <key>ru</key> + <value>Число месяца формирования ежегодных копий</value> + + 8 + + Number + + 2 + true + + + + true + + + true + + true + + + КоличествоЕжедневныхКопий + + <key>ru</key> + <value>Количество ежедневных копий</value> + + 9 + + Number + + 2 + true + + + + true + + + true + + true + + + КоличествоЕжемесячныхКопий + + <key>ru</key> + <value>Количество ежемесячных копий</value> + + 10 + + Number + + 2 + true + + + + true + + + true + + true + + + КоличествоЕжегодныхКопий + + <key>ru</key> + <value>Количество ежегодных копий</value> + + 11 + + Number + + 2 + true + + + + true + + + true + + true + + + ФормироватьЕжедневныеКопииТолькоВДниРаботыПользователей + + <key>ru</key> + <value>Формировать ежедневные копии только в дни работы пользователей</value> + + 12 + + Boolean + + + true + + + true + + true + + + ЧасовойПоясОбласти + + <key>ru</key> + <value>Часовой пояс области</value> + + 1 + + String + + + + true + + + true + + + + УстановитьПоУмолчанию + + <key>ru</key> + <value>Установить по умолчанию</value> + + 1 + + ru + Установить по умолчанию + + + true + + + + УстановитьПоУмолчанию + + + true + Auto + Auto + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 2 + + true + + + + ЗаписатьИЗакрыть + + + Auto + Auto + + + ОбластьДанных + + String + + + true + + + + + + diff --git a/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Module.bsl b/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Module.bsl new file mode 100644 index 000000000..ccb3f4706 --- /dev/null +++ b/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/Module.bsl @@ -0,0 +1,87 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не РезервноеКопированиеОбластейДанныхПовтИсп.МенеджерСервисаПоддерживаетРезервноеКопирование() Тогда + ВызватьИсключение(НСтр("ru = 'Менеджер сервиса не поддерживает резервное копирование приложений'")); + КонецЕсли; + + НастройкиРезервногоКопирования = РезервноеКопированиеОбластейДанных.ПолучитьНастройкиРезервногоКопированияОбласти( + РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + ЗаполнитьЗначенияСвойств(ЭтаФорма, НастройкиРезервногоКопирования); + + Для НомерМесяца = 1 По 12 Цикл + Элементы.МесяцФормированияЕжегодныхКопий.СписокВыбора.Добавить(НомерМесяца, + Формат(Дата(2, НомерМесяца, 1), "ДФ=MMMM")); + КонецЦикла; + + ЧасовойПояс = ЧасовойПоясСеанса(); + ЧасовойПоясОбласти = ЧасовойПояс + " (" + ПредставлениеЧасовогоПояса(ЧасовойПояс) + ")"; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + + Если Модифицированность Тогда + Ответ = Вопрос(НСтр("ru = 'Настройки были изменены. Сохранить изменения?'"), + РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Отмена Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + Если Ответ = КодВозвратаДиалога.Да Тогда + ЗаписатьНастройкиРезервногоКопирования(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура УстановитьПоУмолчанию(Команда) + + УстановитьПоУмолчаниюНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + ЗаписатьНастройкиРезервногоКопирования(); + Модифицированность = Ложь; + Закрыть(КодВозвратаДиалога.ОК); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура УстановитьПоУмолчаниюНаСервере() + + НастройкиРезервногоКопирования = РезервноеКопированиеОбластейДанных.ПолучитьНастройкиРезервногоКопированияОбласти(); + ЗаполнитьЗначенияСвойств(ЭтаФорма, НастройкиРезервногоКопирования); + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьНастройкиРезервногоКопирования() + + СоответствиеНастроек = РезервноеКопированиеОбластейДанныхПовтИсп.СоответствиеРусскихИменПолейНастроекАнглийским(); + + НастройкиРезервногоКопирования = Новый Структура; + Для Каждого КлючИЗначение Из СоответствиеНастроек Цикл + НастройкиРезервногоКопирования.Вставить(КлючИЗначение.Значение, ЭтаФорма[КлючИЗначение.Значение]); + КонецЦикла; + + РезервноеКопированиеОбластейДанных.УстановитьНастройкиРезервногоКопированияОбласти( + РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(), НастройкиРезервногоКопирования); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/НастройкиРезервногоКопированияПриложений.mdo b/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/НастройкиРезервногоКопированияПриложений.mdo new file mode 100644 index 000000000..b52314b13 --- /dev/null +++ b/SSL/src/CommonForms/НастройкиРезервногоКопированияПриложений/НастройкиРезервногоКопированияПриложений.mdo @@ -0,0 +1,11 @@ + + + НастройкиРезервногоКопированияПриложений + + ru + Настройки резервного копирования приложений + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/НастройкиЭЦП/Form.form b/SSL/src/CommonForms/НастройкиЭЦП/Form.form index 1e5680315..ef3995af9 100644 --- a/SSL/src/CommonForms/НастройкиЭЦП/Form.form +++ b/SSL/src/CommonForms/НастройкиЭЦП/Form.form @@ -1,9 +1,5 @@ - - <key>ru</key> - <value>Настройки криптографии</value> - ПровайдерЭЦП 1 @@ -40,13 +36,22 @@ Left true + + ChoiceProcessing + ПровайдерЭЦПОбработкаВыбора + 50 true true true + true + true true true true + + Style.ФонУправляющегоПоля + Normal @@ -92,6 +97,9 @@ true true true + + Style.ФонУправляющегоПоля + Normal @@ -594,8 +602,9 @@ FillCheckProcessingAtServer ОбработкаПроверкиЗаполненияНаСервере - DontBlock + LockOwner true + true true Vertical true @@ -620,7 +629,6 @@ true - ShowError ТипПровайдераЭЦП @@ -659,6 +667,7 @@ true + ShowError АлгоритмХеширования @@ -677,6 +686,7 @@ true + ShowError ВыполнятьПроверкуЭЦПНаСервере @@ -712,6 +722,7 @@ true + ShowError ПутиМодулейКриптографииСерверовLinux @@ -801,6 +812,37 @@ true + + ПутьМодуляКриптографии + + <key>ru</key> + <value>Путь модуля криптографии</value> + + 9 + + String + + + + true + + + true + + + + ЭтоПодчиненныйУзел + + <key>ru</key> + <value>Это подчиненный узел</value> + + 11 + + Boolean + + + + ОК diff --git a/SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html b/SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html index aa91c2b2c..165c930ad 100644 --- a/SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html +++ b/SSL/src/CommonForms/НастройкиЭЦП/Help/ru.html @@ -1,9 +1,8 @@ -<!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.16447"></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.16446"></meta></head><body> <p>В форме выполняется настройка параметров для использования средств криптографии: электронной цифровой подписи (ЭЦП) и шифрования. <br>Для работы с криптографией вам потребуется установить стороннюю программу - криптопровайдер.</p> -<p>Форма открывается из <a href="../idn0">формы настройки программы</a>.</p> <p>В случае распределенной информационной базы эти настройки могут быть изменены только в главном узле. </p> <p></p> -<table border="0" cellpadding="8" width="100%"><tbody><tr><td><strong>Настройка</strong></td> +<table border="0" cellpadding="8" width="90%"><tbody><tr><td><strong>Настройка</strong></td> <td><strong>Описание</strong></td></tr><tr><td valign="top">Провайдер ЭЦП</td> <td valign="top"> <p>Строка, идентифицирующая провайдера ЭЦП, например: "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider".</p> diff --git a/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl b/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl index da2dcd154..bcb101d47 100644 --- a/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl +++ b/SSL/src/CommonForms/НастройкиЭЦП/Module.bsl @@ -1,29 +1,36 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если НЕ Параметры.Свойство("ПоказыватьНастройкиШифрования") Тогда + Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. + Возврат; + КонецЕсли; + + Если Параметры.Свойство("ПоказыватьНастройкиШифрования") И Параметры.ПоказыватьНастройкиШифрования = Ложь Тогда Элементы.АлгоритмШифрования.Видимость = Ложь; - КонецЕсли; + КонецЕсли; ЭтоПодчиненныйУзел = (ПланыОбмена.ГлавныйУзел() <> Неопределено); Если ЭтоПодчиненныйУзел Тогда // мы в не главном узле + Элементы.ПровайдерЭЦП.ТолькоПросмотр = Истина; + Элементы.ТипПровайдераЭЦП.ТолькоПросмотр = Истина; Элементы.АлгоритмПодписи.ТолькоПросмотр = Истина; Элементы.АлгоритмХеширования.ТолькоПросмотр = Истина; Элементы.АлгоритмШифрования.ТолькоПросмотр = Истина; - Элементы.ПровайдерЭЦП.ТолькоПросмотр = Истина; - Элементы.ТипПровайдераЭЦП.ТолькоПросмотр = Истина; - КонецЕсли; + КонецЕсли; Запрос = Новый Запрос(); - Запрос.Текст = "ВЫБРАТЬ - | ПутиМодулейКриптографииСерверовLinux.ИмяКомпьютера, - | ПутиМодулейКриптографииСерверовLinux.ПутьМодуляКриптографии, - | ПутиМодулейКриптографииСерверовLinux.Комментарий - |ИЗ - | РегистрСведений.ПутиМодулейКриптографииСерверовLinux КАК ПутиМодулейКриптографииСерверовLinux"; - + Запрос.Текст = + "ВЫБРАТЬ + | ПутиМодулейКриптографииСерверовLinux.ИмяКомпьютера, + | ПутиМодулейКриптографииСерверовLinux.ПутьМодуляКриптографии, + | ПутиМодулейКриптографииСерверовLinux.Комментарий + |ИЗ + | РегистрСведений.ПутиМодулейКриптографииСерверовLinux КАК ПутиМодулейКриптографииСерверовLinux"; + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -38,43 +45,282 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + ПодключитьМодульКриптографии(Отказ); +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + Если ЗначениеЗаполнено(ПровайдерЭЦП) И НЕ СпискиАлгоритмовУспешноЗаполнены Тогда + Отказ = Истина; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не удалось подключить провайдера ЭЦП. + |Укажите Провайдера и его Тип согласно инструкции фирмы-производителя криптопровайдера.'"), + , + "ТипПровайдераЭЦП" + ); + КонецЕсли; - РасширениеПодключеноКрипто = ПодключитьРасширениеРаботыСКриптографией(); + ИсключаемыеРеквизиты = Новый Массив; - ПерсональныеНастройкиРаботыСЭЦП = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП(); - ПровайдерЭЦП = ПерсональныеНастройкиРаботыСЭЦП.ПровайдерЭЦП; - ПутьМодуляКриптографии = ПерсональныеНастройкиРаботыСЭЦП.ПутьМодуляКриптографии; - ТипПровайдераЭЦП = ПерсональныеНастройкиРаботыСЭЦП.ТипПровайдераЭЦП; + Если НЕ ЗначениеЗаполнено(ПровайдерЭЦП) ИЛИ ЭтоПодчиненныйУзел Тогда + + ИсключаемыеРеквизиты.Добавить("АлгоритмПодписи"); + ИсключаемыеРеквизиты.Добавить("АлгоритмХеширования"); + ИсключаемыеРеквизиты.Добавить("АлгоритмШифрования"); + + ИначеЕсли НЕ Элементы.АлгоритмШифрования.Видимость Тогда + + ИсключаемыеРеквизиты.Добавить("АлгоритмШифрования"); + + КонецЕсли; - АлгоритмПодписи = ПерсональныеНастройкиРаботыСЭЦП.АлгоритмПодписи; - АлгоритмХеширования = ПерсональныеНастройкиРаботыСЭЦП.АлгоритмХеширования; - АлгоритмШифрования = ПерсональныеНастройкиРаботыСЭЦП.АлгоритмШифрования; - - ВыполнятьПроверкуЭЦПНаСервере = ПерсональныеНастройкиРаботыСЭЦП.ВыполнятьПроверкуЭЦПНаСервере; + ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ИсключаемыеРеквизиты); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ВыполнятьПроверкуЭЦПНаСервереПриИзменении(Элемент) Элементы.ПутиМодулейКриптографииСерверовLinux.Доступность = ВыполнятьПроверкуЭЦПНаСервере; Элементы.ПутиМодулейКриптографииСерверовLinuxКоманднаяПанель.Доступность = ВыполнятьПроверкуЭЦПНаСервере; - Если ТипПровайдераЭЦП = 0 Тогда - ТипПровайдераЭЦП = 75; // Крипто Про - КонецЕсли; - - Если ПустаяСтрока(ПровайдерЭЦП) Тогда - - Попытка - МенеджерКриптографии = Новый МенеджерКриптографии("", "", ТипПровайдераЭЦП); - ИнформацияМенеджера = МенеджерКриптографии.ПолучитьИнформациюМодуляКриптографии(); - ПровайдерЭЦП = ИнформацияМенеджера.Имя; - Исключение - // не обрабатываем исключение - вполне допустимо исключение, если нет ни одного криптопровайдера - КонецПопытки; - - КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ТипПровайдераЭЦППриИзменении(Элемент) ЗаполнитьСпискиВыбораНаКлиенте(); КонецПроцедуры +&НаКлиенте +Процедура ПровайдерЭЦППриИзменении(Элемент) + + ЗаполнитьСпискиВыбораНаКлиенте(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПровайдерЭЦПОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + СтрокаТипаПровайдера = ""; + Пока Прав(ВыбранноеЗначение, 1) <> "/" Цикл + СтрокаТипаПровайдера = Прав(ВыбранноеЗначение, 1) + СтрокаТипаПровайдера; + ВыбранноеЗначение = Лев(ВыбранноеЗначение, СтрДлина(ВыбранноеЗначение) - 1); + КонецЦикла; + ВыбранноеЗначение = Лев(ВыбранноеЗначение, СтрДлина(ВыбранноеЗначение) - 1); + + ТипПровайдераЭЦП = Число(СтрокаТипаПровайдера); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ОК(Команда) + + ОчиститьСообщения(); + Если НЕ СохранитьПараметры() Тогда + Возврат; + КонецЕсли; + Закрыть(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ПодключитьМодульКриптографии(Отказ) + + Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда + + ЗаголовокВопроса = НСтр("ru = 'Расширение работы с криптографией'"); + + ТекстВопроса = + НСтр("ru = 'Для настройки ЭЦП необходимо установить + |расширение работы с криптографией.'"); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(1, НСтр("ru = 'Установить'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(ТекстВопроса, Кнопки, 60, 1, ЗаголовокВопроса); + + Если Ответ <> 1 Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + УстановитьРасширениеРаботыСКриптографией(); + + Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + КонецЕсли; + + ПерсональныеНастройкиРаботыСЭЦП = + ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП(); + + ЗаполнитьЗначенияСвойств( + ЭтаФорма, + ПерсональныеНастройкиРаботыСЭЦП, + "ПровайдерЭЦП, + |ТипПровайдераЭЦП, + |АлгоритмПодписи, + |АлгоритмХеширования, + |АлгоритмШифрования, + |ВыполнятьПроверкуЭЦПНаСервере"); + + Элементы.ПутиМодулейКриптографииСерверовLinux.Доступность = ВыполнятьПроверкуЭЦПНаСервере; + Элементы.ПутиМодулейКриптографииСерверовLinuxКоманднаяПанель.Доступность = ВыполнятьПроверкуЭЦПНаСервере; + + Если ТипПровайдераЭЦП = 0 Тогда + ТипПровайдераЭЦП = 75; + КонецЕсли; + + ДобавитьМенеджераКриптографииВСписок("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider", "", 75); + ДобавитьМенеджераКриптографииВСписок("Signal-COM CPGOST Cryptographic Provider", "", 75); + ДобавитьМенеджераКриптографииВСписок("Infotecs Cryptographic Service Provider", "", 2); + ДобавитьМенеджераКриптографииВСписок("Microsoft Enhanced Cryptographic Provider v1.0", "", 1); + ДобавитьМенеджераКриптографииВСписок("Microsoft Strong Cryptographic Provider", "", 1); + ДобавитьМенеджераКриптографииВСписок("", "", 75); + + ЗаполнитьСпискиВыбораНаКлиенте(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьСпискиВыбораНаКлиенте() + + ОчиститьСообщения(); + + Элементы.АлгоритмПодписи.СписокВыбора.Очистить(); + Элементы.АлгоритмХеширования.СписокВыбора.Очистить(); + Элементы.АлгоритмШифрования.СписокВыбора.Очистить(); + + Если ЗначениеЗаполнено(ПровайдерЭЦП) Тогда + ИнформацияМенеджера = СкомпоноватьИнформациюМенеджераКриптографии(ПровайдерЭЦП, Неопределено, ТипПровайдераЭЦП); + Иначе + ИнформацияМенеджера = Неопределено; + КонецЕсли; + + Если ИнформацияМенеджера = Неопределено Тогда + + СпискиАлгоритмовУспешноЗаполнены = Ложь; + + Иначе + + СпискиАлгоритмовУспешноЗаполнены = Истина; + + АлгоритмПодписиНайден = Ложь; + АлгоритмХешированияНайден = Ложь; + АлгоритмШифрованияНайден = Ложь; + + Для Каждого Строка Из ИнформацияМенеджера.АлгоритмыПодписи Цикл + Элементы.АлгоритмПодписи.СписокВыбора.Добавить(Строка); + Если АлгоритмПодписи = Строка Тогда + АлгоритмПодписиНайден = Истина; + КонецЕсли; + КонецЦикла; + + Для Каждого Строка Из ИнформацияМенеджера.АлгоритмыХеширования Цикл + Элементы.АлгоритмХеширования.СписокВыбора.Добавить(Строка); + Если АлгоритмХеширования = Строка Тогда + АлгоритмХешированияНайден = Истина; + КонецЕсли; + КонецЦикла; + + Для Каждого Строка Из ИнформацияМенеджера.АлгоритмыШифрования Цикл + Элементы.АлгоритмШифрования.СписокВыбора.Добавить(Строка); + Если АлгоритмШифрования = Строка Тогда + АлгоритмШифрованияНайден = Истина; + КонецЕсли; + КонецЦикла; + + Если НЕ АлгоритмПодписиНайден Тогда + АлгоритмПодписи = ""; + КонецЕсли; + + Если НЕ АлгоритмХешированияНайден Тогда + АлгоритмХеширования = ""; + КонецЕсли; + + Если НЕ АлгоритмШифрованияНайден Тогда + АлгоритмШифрования = ""; + КонецЕсли; + + КонецЕсли; + + Элементы.АлгоритмПодписи.Доступность = СпискиАлгоритмовУспешноЗаполнены; + Элементы.АлгоритмХеширования.Доступность = СпискиАлгоритмовУспешноЗаполнены; + Элементы.АлгоритмШифрования.Доступность = СпискиАлгоритмовУспешноЗаполнены; + +КонецПроцедуры + +&НаКлиенте +Функция СкомпоноватьИнформациюМенеджераКриптографии(ИмяМодуляКриптографии, ПутьМодуляКриптографии, ТипМодуляКриптографии, + СообщатьОшибки = Истина) + + Если ПутьМодуляКриптографии = Неопределено Тогда + ПутьМодуляКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП().ПутьМодуляКриптографии; + КонецЕсли; + + ИнформацияМенеджера = Неопределено; + + Попытка + + МенеджерКриптографии = Новый МенеджерКриптографии(ИмяМодуляКриптографии, ПутьМодуляКриптографии, ТипМодуляКриптографии); + ИнформацияМенеджера = МенеджерКриптографии.ПолучитьИнформациюМодуляКриптографии(); + + Исключение + + Если СообщатьОшибки Тогда + ПредставлениеОшибки = СокрЛП(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Если Прав(ПредставлениеОшибки, 1) <> "." Тогда + ПредставлениеОшибки = ПредставлениеОшибки + "."; + КонецЕсли; + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось подключить провайдера ЭЦП: %1 + |Укажите Провайдера и его Тип согласно инструкции фирмы-производителя криптопровайдера.'"), + ПредставлениеОшибки + ), + , + "ТипПровайдераЭЦП" + ); + КонецЕсли; + + КонецПопытки; + + Если ИнформацияМенеджера <> Неопределено Тогда + + ЗначениеСпискаВыбора = ИнформацияМенеджера.Имя + "/" + ТипМодуляКриптографии; + + Если Элементы.ПровайдерЭЦП.СписокВыбора.НайтиПоЗначению(ЗначениеСпискаВыбора) = Неопределено Тогда + Элементы.ПровайдерЭЦП.СписокВыбора.Добавить(ЗначениеСпискаВыбора, ИнформацияМенеджера.Имя); + КонецЕсли; + + КонецЕсли; + + Возврат ИнформацияМенеджера; +КонецФункции + +&НаКлиенте +Процедура ДобавитьМенеджераКриптографииВСписок(ИмяМодуляКриптографии, ПутьМодуляКриптографии, ТипМодуляКриптографии) + + ИнформацияМенеджера = СкомпоноватьИнформациюМенеджераКриптографии( + ИмяМодуляКриптографии, + ПутьМодуляКриптографии, + ТипМодуляКриптографии, + Ложь + ); + +КонецПроцедуры + &НаСервере Функция СохранитьПараметры() @@ -93,135 +339,16 @@ НаборЗаписей = РегистрыСведений.ПутиМодулейКриптографииСерверовLinux.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.ИмяКомпьютера.Установить(Строка.ИмяКомпьютера); - + НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.ИмяКомпьютера = Строка.ИмяКомпьютера; НоваяЗапись.ПутьМодуляКриптографии = Строка.ПутьМодуляКриптографии; НоваяЗапись.Комментарий = Строка.Комментарий; - + НаборЗаписей.Записать(); - КонецЦикла; + КонецЦикла; ОбновитьПовторноИспользуемыеЗначения(); Возврат Истина; КонецФункции - -&НаКлиенте -Процедура ОК(Команда) - - ОчиститьСообщения(); - Если НЕ СохранитьПараметры() Тогда - Возврат; - КонецЕсли; - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура ЗаполнитьСпискиВыбораНаКлиенте() - - ОчиститьСообщения(); - - Элементы.АлгоритмПодписи.СписокВыбора.Очистить(); - Элементы.АлгоритмХеширования.СписокВыбора.Очистить(); - Элементы.АлгоритмШифрования.СписокВыбора.Очистить(); - - Если ПустаяСтрока(ПровайдерЭЦП) Тогда - Возврат; - КонецЕсли; - - Попытка - ПутьМодуляКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП().ПутьМодуляКриптографии; - - МенеджерКриптографии = Новый МенеджерКриптографии(ПровайдерЭЦП, ПутьМодуляКриптографии, ТипПровайдераЭЦП); - ИнформацияМенеджера = МенеджерКриптографии.ПолучитьИнформациюМодуляКриптографии(); - - // заполняем списки выбора - Для Индекс = 0 По ИнформацияМенеджера.АлгоритмыПодписи.Количество() - 1 Цикл - Строка = ИнформацияМенеджера.АлгоритмыПодписи.Получить(Индекс); - Элементы.АлгоритмПодписи.СписокВыбора.Добавить(Строка); - КонецЦикла; - - Для Индекс = 0 По ИнформацияМенеджера.АлгоритмыХеширования.Количество() - 1 Цикл - Строка = ИнформацияМенеджера.АлгоритмыХеширования.Получить(Индекс); - Элементы.АлгоритмХеширования.СписокВыбора.Добавить(Строка); - КонецЦикла; - - Для Индекс = 0 По ИнформацияМенеджера.АлгоритмыШифрования.Количество() - 1 Цикл - Строка = ИнформацияМенеджера.АлгоритмыШифрования.Получить(Индекс); - Элементы.АлгоритмШифрования.СписокВыбора.Добавить(Строка); - КонецЦикла; - - Элементы.АлгоритмПодписи.АвтоОтметкаНезаполненного = Истина; - Элементы.АлгоритмХеширования.АвтоОтметкаНезаполненного = Истина; - Элементы.АлгоритмШифрования.АвтоОтметкаНезаполненного = Истина; - - СпискиАлгоритмовУспешноЗаполнены = Истина; - - Исключение - - СпискиАлгоритмовУспешноЗаполнены = Ложь; - - АлгоритмПодписи = ""; - АлгоритмХеширования = ""; - АлгоритмШифрования = ""; - - Элементы.АлгоритмПодписи.АвтоОтметкаНезаполненного = Ложь; - Элементы.АлгоритмХеширования.АвтоОтметкаНезаполненного = Ложь; - Элементы.АлгоритмШифрования.АвтоОтметкаНезаполненного = Ложь; - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; - -КонецПроцедуры - -&НаКлиенте -Процедура ПровайдерЭЦППриИзменении(Элемент) - - ЗаполнитьСпискиВыбораНаКлиенте(); - -КонецПроцедуры - -&НаКлиенте -Процедура ВыполнятьПроверкуЭЦПНаСервереПриИзменении(Элемент) - - Элементы.ПутиМодулейКриптографииСерверовLinux.Доступность = ВыполнятьПроверкуЭЦПНаСервере; - Элементы.ПутиМодулейКриптографииСерверовLinuxКоманднаяПанель.Доступность = ВыполнятьПроверкуЭЦПНаСервере; - -КонецПроцедуры - - -&НаКлиенте -Процедура ТипПровайдераЭЦППриИзменении(Элемент) - - ЗаполнитьСпискиВыбораНаКлиенте(); - -КонецПроцедуры - - -&НаСервере -Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - - Если СпискиАлгоритмовУспешноЗаполнены Тогда - - Если Не ЗначениеЗаполнено(АлгоритмПодписи) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru='Выберите алгоритм подписи'"), , "АлгоритмПодписи", , Отказ); - КонецЕсли; - - Если Не ЗначениеЗаполнено(АлгоритмХеширования) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru='Выберите алгоритм хеширования'"), , "АлгоритмХеширования", , Отказ); - КонецЕсли; - - Если Не ЗначениеЗаполнено(АлгоритмШифрования) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru='Выберите алгоритм шифрования'"), , "АлгоритмШифрования", , Отказ); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - diff --git a/SSL/src/CommonForms/НастройкиЭЦП/НастройкиЭЦП.mdo b/SSL/src/CommonForms/НастройкиЭЦП/НастройкиЭЦП.mdo index c9461cd9b..dc9cb7208 100644 --- a/SSL/src/CommonForms/НастройкиЭЦП/НастройкиЭЦП.mdo +++ b/SSL/src/CommonForms/НастройкиЭЦП/НастройкиЭЦП.mdo @@ -3,7 +3,7 @@ <name>НастройкиЭЦП</name> <synonym> <key>ru</key> - <value>Настройки ЭЦП</value> + <value>Настройки криптографии</value> </synonym> <help> <pages> diff --git a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form b/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form index a430f35b1..b314b07e8 100644 --- a/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form +++ b/SSL/src/CommonForms/НерекомендуемаяВерсияПлатформы/Form.form @@ -138,7 +138,6 @@ <key>ru</key> <value>Группа версия</value> - Ctrl+S ГруппаВерсияРасширеннаяПодсказка 29 diff --git a/SSL/src/CommonForms/ОбменыДанными/Form.form b/SSL/src/CommonForms/ОбменыДанными/Form.form index 196895b1d..f1409703d 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Form.form +++ b/SSL/src/CommonForms/ОбменыДанными/Form.form @@ -4,6 +4,700 @@ ru Обмены данными + + ИнформационнаяПанельТребуетсяОбновление + 135 + + КартинкаПредупреждение + 136 + + <key>ru</key> + <value>Картинка предупреждение</value> + + true + true + + true + + + КартинкаПредупреждениеРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + + КартинкаПредупреждениеКонтекстноеМеню + 137 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + ИнформацияОбменДаннымиПриостановленНетПраваОбновления + 138 + + НадписьОбменДаннымиПриостановленНетПраваОбновления + 139 + + <key>ru</key> + <value>Обмен данными с "%1 " приостановлен в связи с необходимостью установки полученного обновления. +Обратитесь к администратору.</value> + + true + true + + true + + + НадписьОбменДаннымиПриостановленНетПраваОбновленияРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + НадписьОбменДаннымиПриостановленНетПраваОбновленияКонтекстноеМеню + 140 + true + + Label + true + true + true + + Left + + + true + + true + + + <key>ru</key> + <value>Информация обмен данными приостановлен нет права обновления</value> + + + ru + Информация обмен данными приостановлен нет права обновления + + + ИнформацияОбменДаннымиПриостановленНетПраваОбновленияРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления + 141 + + НадписьОбменДаннымиПриостановленЕстьПравоОбновления + 142 + + <key>ru</key> + <value>Необходимо установить обновление программы, после чего обмен данными с "%1" будет продолжен.</value> + + true + true + + true + + + НадписьОбменДаннымиПриостановленЕстьПравоОбновленияРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + + НадписьОбменДаннымиПриостановленЕстьПравоОбновленияКонтекстноеМеню + 143 + true + + Label + 81 + true + true + + Left + + + + УстановитьОбновление + 144 + true + true + + true + + + УстановитьОбновлениеРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + Hyperlink + Form.Command.УстановитьОбновление + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Информация обмен данными приостановлен есть право обновления</value> + + + ru + Информация обмен данными приостановлен есть право обновления + + + ИнформацияОбменДаннымиПриостановленЕстьПравоОбновленияРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Информационная панель требуется обновление</value> + + + ru + Информационная панель требуется обновление + + + ИнформационнаяПанельТребуетсяОбновлениеРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + КоманднаяПанель + 145 + + ПодменюСоздать + 91 + true + true + + true + + + <key>ru</key> + <value>Создать</value> + + + ru + Настроить новый обмен данными + + + ПодменюСоздатьРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + Popup + + + StdPicture.CreateListItem + + Auto + Normal + + + + ВыполнитьОбменДанными + 52 + true + true + + true + + false + + ВыполнитьОбменДаннымиРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + Form.Command.ВыполнитьОбменДанными + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Настройка + 94 + + ВыполнитьОбменДаннымиИнтерактивно + 92 + true + true + + true + + + ВыполнитьОбменДаннымиИнтерактивноРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + Form.Command.ВыполнитьОбменДаннымиИнтерактивно + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаРасписание + 103 + + НастроитьРасписаниеВыполненияОбмена + 102 + true + true + + true + + + НастроитьРасписаниеВыполненияОбменаРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + Form.Command.НастроитьСценарииОбменаДанными + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа расписание</value> + + + ru + Группа расписание + + + ГруппаРасписаниеРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + + + + ГруппаИзменить + 108 + + СписокСостоянияУзловИзменитьУзелИнформационнойБазы + 53 + true + true + + true + + true + Role.ДобавлениеИзменениеОбменовДанными + + + false + + СписокСостоянияУзловИзменитьУзелИнформационнойБазыРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + Form.Command.ИзменитьУзелИнформационнойБазы + Normal + PictureAndText + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа изменить</value> + + + ru + Группа изменить + + + ГруппаИзменитьРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + + + ГруппаДиагностика + 100 + + СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + 99 + true + true + + true + + + СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка + 163 + Label + true + true + + Left + + + Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + 98 + true + true + + true + + + СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Группа диагностика</value> + + + ru + Группа диагностика + + + ГруппаДиагностикаРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Настройка</value> + + + ru + Настройка обмена данными + + + НастройкаРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ОбновитьМонитор + 16 + true + true + + true + + false + + ОбновитьМониторРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + Form.Command.ОбновитьМонитор + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаВывестиСписок + 115 + true + true + + true + + + ФормаВывестиСписокРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + Form.Item.СписокСостоянияУзлов.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + + ФормаИзменитьФорму + 134 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 167 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + + + ФормаСправка + 133 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + CommandBar + + Left + + СписокСостоянияУзлов 1 @@ -39,7 +733,7 @@ СписокСостоянияУзловИмяПланаОбменаРасширеннаяПодсказка - 169 + 188 Label true true @@ -80,7 +774,7 @@ СписокСостоянияУзловУзелИнформационнойБазыРасширеннаяПодсказка - 171 + 190 Label true true @@ -125,7 +819,7 @@ None СписокСостоянияУзловРезультатПоследнейЗагрузкиДанныхРасширеннаяПодсказка - 174 + 193 Label true true @@ -170,7 +864,7 @@ СписокСостоянияУзловДатаПоследнейЗагрузкиРасширеннаяПодсказка - 176 + 195 Label true true @@ -213,7 +907,7 @@ ГруппаСостоянияЗагрузкиРасширеннаяПодсказка - 173 + 192 Label true true @@ -241,7 +935,7 @@ СписокСостоянияУзловДатаПоследнейУспешнойЗагрузкиРасширеннаяПодсказка - 178 + 197 Label true true @@ -286,7 +980,7 @@ None СписокСостоянияУзловРезультатПоследнейВыгрузкиДанныхРасширеннаяПодсказка - 181 + 200 Label true true @@ -331,7 +1025,7 @@ СписокСостоянияУзловДатаПоследнейВыгрузкиРасширеннаяПодсказка - 183 + 202 Label true true @@ -374,7 +1068,7 @@ ГруппаСостоянияВыгрузкиРасширеннаяПодсказка - 180 + 199 Label true true @@ -402,7 +1096,7 @@ СписокСостоянияУзловДатаПоследнейУспешнойВыгрузкиРасширеннаяПодсказка - 185 + 204 Label true true @@ -447,10 +1141,10 @@ СписокСостоянияУзловСтрокаПоиска - 160 + 179 СписокСостоянияУзловСтрокаПоискаРасширеннаяПодсказка - 162 + 181 Label true true @@ -460,7 +1154,7 @@ СписокСостоянияУзловСтрокаПоискаКонтекстноеМеню - 161 + 180 true СписокСостоянияУзлов @@ -470,10 +1164,10 @@ СписокСостоянияУзловСостояниеПросмотра - 163 + 182 СписокСостоянияУзловСостояниеПросмотраРасширеннаяПодсказка - 165 + 184 Label true true @@ -483,7 +1177,7 @@ СписокСостоянияУзловСостояниеПросмотраКонтекстноеМеню - 164 + 183 true ViewStatusAddition @@ -494,10 +1188,10 @@ СписокСостоянияУзловУправлениеПоиском - 166 + 185 СписокСостоянияУзловУправлениеПоискомРасширеннаяПодсказка - 168 + 187 Label true true @@ -507,7 +1201,7 @@ СписокСостоянияУзловУправлениеПоискомКонтекстноеМеню - 167 + 186 true SearchControlAddition @@ -518,7 +1212,7 @@ СписокСостоянияУзловРасширеннаяПодсказка - 159 + 178 Label true true @@ -543,7 +1237,7 @@ false ВыполнитьОбменДанными1РасширеннаяПодсказка - 151 + 170 Label true true @@ -569,7 +1263,7 @@ ВыполнитьОбменДаннымиИнтерактивно1РасширеннаяПодсказка - 152 + 171 Label true true @@ -600,7 +1294,7 @@ ГруппаКнопокВыполненияОбменаДаннымиРасширеннаяПодсказка - 150 + 169 Label true true @@ -624,7 +1318,7 @@ false КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 154 + 173 Label true true @@ -651,7 +1345,7 @@ false КонтекстноеМенюСписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 155 + 174 Label true true @@ -678,7 +1372,7 @@ КонтекстноеМенюСписокСостоянияДиагностикаРасширеннаяПодсказка - 153 + 172 Label true true @@ -701,7 +1395,7 @@ НастроитьРасписаниеВыполненияОбмена1РасширеннаяПодсказка - 157 + 176 Label true true @@ -732,7 +1426,7 @@ ГруппаКнопокНастройкиРасписанияРасширеннаяПодсказка - 156 + 175 Label true true @@ -752,7 +1446,7 @@ СписокСостоянияУзловКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 158 + 177 Label true true @@ -800,428 +1494,6 @@ ФормаКоманднаяПанель -1 - - ПодменюСоздать - 91 - true - true - - true - - - <key>ru</key> - <value>Создать</value> - - - ru - Настроить новый обмен данными - - - ПодменюСоздатьРасширеннаяПодсказка - 135 - Label - true - true - - Left - - - Popup - - - StdPicture.CreateListItem - - Auto - Normal - - - - ВыполнитьОбменДанными - 52 - true - true - - true - - false - - ВыполнитьОбменДаннымиРасширеннаяПодсказка - 136 - Label - true - true - - Left - - - Form.Command.ВыполнитьОбменДанными - Normal - Auto - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - Настройка - 94 - - ВыполнитьОбменДаннымиИнтерактивно - 92 - true - true - - true - - - ВыполнитьОбменДаннымиИнтерактивноРасширеннаяПодсказка - 138 - Label - true - true - - Left - - - Form.Command.ВыполнитьОбменДаннымиИнтерактивно - Normal - Auto - true - true - UserCmds - Auto - - - ГруппаРасписание - 103 - - НастроитьРасписаниеВыполненияОбмена - 102 - true - true - - true - - - НастроитьРасписаниеВыполненияОбменаРасширеннаяПодсказка - 140 - Label - true - true - - Left - - - Form.Command.НастроитьСценарииОбменаДанными - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа расписание</value> - - - ru - Группа расписание - - - ГруппаРасписаниеРасширеннаяПодсказка - 139 - Label - true - true - - Left - - - - - - ГруппаИзменить - 108 - - СписокСостоянияУзловИзменитьУзелИнформационнойБазы - 53 - true - true - - true - - true - Role.ДобавлениеИзменениеОбменовДанными - - - false - - СписокСостоянияУзловИзменитьУзелИнформационнойБазыРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - Form.Command.ИзменитьУзелИнформационнойБазы - Normal - PictureAndText - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа изменить</value> - - - ru - Группа изменить - - - ГруппаИзменитьРасширеннаяПодсказка - 141 - Label - true - true - - Left - - - - - - ГруппаДиагностика - 100 - - СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - 99 - true - true - - true - - - СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 144 - Label - true - true - - Left - - - Form.Command.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - 98 - true - true - - true - - - СписокСостоянияУзловПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 145 - Label - true - true - - Left - - - Form.Command.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - true - true - - true - - - <key>ru</key> - <value>Группа диагностика</value> - - - ru - Группа диагностика - - - ГруппаДиагностикаРасширеннаяПодсказка - 143 - Label - true - true - - Left - - - - - true - true - - true - - - <key>ru</key> - <value>Настройка</value> - - - ru - Настройка обмена данными - - - НастройкаРасширеннаяПодсказка - 137 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - - ОбновитьМонитор - 16 - true - true - - true - - false - - ОбновитьМониторРасширеннаяПодсказка - 146 - Label - true - true - - Left - - - Form.Command.ОбновитьМонитор - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - - - ФормаВывестиСписок - 115 - true - true - - true - - - ФормаВывестиСписокРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - Form.Item.СписокСостоянияУзлов.StandardCommand.OutputList - Normal - Auto - true - true - UserCmds - Auto - - - ФормаИзменитьФорму - 134 - true - true - - true - - - ФормаИзменитьФормуРасширеннаяПодсказка - 148 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - - - ФормаСправка - 133 - true - true - - true - - - ФормаСправкаРасширеннаяПодсказка - 149 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - Left @@ -1569,6 +1841,28 @@ Auto Auto + + УстановитьОбновление + + <key>ru</key> + <value>Установить обновление</value> + + 6 + + ru + Установить обновление + + + true + + + + УстановитьОбновление + + + Auto + Auto + diff --git a/SSL/src/CommonForms/ОбменыДанными/Help/ru.html b/SSL/src/CommonForms/ОбменыДанными/Help/ru.html index 6d6c9e6ba..be87eeb9e 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 f937899e7..973414c08 100644 --- a/SSL/src/CommonForms/ОбменыДанными/Module.bsl +++ b/SSL/src/CommonForms/ОбменыДанными/Module.bsl @@ -22,6 +22,18 @@ Элементы.НастроитьРасписаниеВыполненияОбмена.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; Элементы.НастроитьРасписаниеВыполненияОбмена1.Видимость = РольДоступнаДобавлениеИзменениеОбменовДанными; + ЕстьПравоОбновления = ПравоДоступа("ОбновлениеКонфигурацииБазыДанных", Метаданные); + Элементы.ИнформацияОбменДаннымиПриостановленЕстьПравоОбновления.Видимость = ЕстьПравоОбновления; + Элементы.ИнформацияОбменДаннымиПриостановленНетПраваОбновления.Видимость = Не ЕстьПравоОбновления; + + НадписьОбменДаннымиПриостановлен = ?(ЕстьПравоОбновления, + Элементы.НадписьОбменДаннымиПриостановленЕстьПравоОбновления, + Элементы.НадписьОбменДаннымиПриостановленНетПраваОбновления); + + НадписьОбменДаннымиПриостановлен.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НадписьОбменДаннымиПриостановлен.Заголовок, ПланыОбмена.ГлавныйУзел()); + + ПроверитьСостояниеОбменаСГлавнымУзлом(); + КонецПроцедуры &НаКлиенте @@ -140,6 +152,11 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьОбновление(Команда) + ОбменДаннымиКлиент.ВыполнитьОбновлениеИнформационнойБазы(); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -162,6 +179,8 @@ // обновляем данные в списке состояния узлов СписокСостоянияУзлов.Загрузить(ОбменДаннымиСервер.ТаблицаМонитораОбменаДанными(ОбменДаннымиПовтИсп.ПланыОбменаБСП())); + ПроверитьСостояниеОбменаСГлавнымУзлом(); + КонецПроцедуры &НаСервере @@ -255,3 +274,9 @@ КонецПроцедуры +&НаСервере +Процедура ПроверитьСостояниеОбменаСГлавнымУзлом() + + Элементы.ИнформационнаяПанельТребуетсяОбновление.Видимость = ОбменДаннымиВызовСервера.ТребуетсяУстановкаОбновления(); + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html index a4eb7c322..0dc4da38f 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html +++ b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Help/ru.html @@ -1,2 +1,2 @@ - +

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

            \ No newline at end of file diff --git a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl index 34077fbcd..07b0f8f43 100644 --- a/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl +++ b/SSL/src/CommonForms/ОписаниеИзмененийСистемы/Module.bsl @@ -64,7 +64,7 @@ Процедура ОписаниеОбновленийВыбор(Элемент, Область, СтандартнаяОбработка) Если Найти(Область.Текст, "http://") = 1 Тогда - ЗапуститьПриложение(Область.Текст); + ПерейтиПоНавигационнойСсылке(Область.Текст); КонецЕсли; ОбновлениеИнформационнойБазыКлиентПереопределяемый.ПриНажатииНаГиперссылкуВДокументеОписанияОбновлений(Область); diff --git a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Form.form b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Form.form new file mode 100644 index 000000000..a794ca956 --- /dev/null +++ b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Form.form @@ -0,0 +1,1129 @@ + + + + <key>ru</key> + <value>Прекращение синхронизации данных</value> + + + ПанельОсновная + 1 + + Начало + 14 + + Группа7 + 15 + + Декорация3 + 16 + true + true + + true + + + Декорация3РасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 17 + true + + 4 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + Декорация1 + 18 + + <key>ru</key> + <value>Синхронизация с автономным рабочим местом будет прекращена +без возможности восстановления. +Убедитесь, что все данные из автономного рабочего места +перенесены в Интернет.</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 19 + true + + Label + true + true + + Left + Center + + + true + true + + true + + + Группа7РасширеннаяПодсказка + 33 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Начало</value> + + + ru + Начало + + + НачалоРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + Ожидание + 8 + + Группа8 + 9 + + Декорация4 + 10 + true + true + + true + + + Декорация4РасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 11 + true + + 8 + true + 3 + true + + + CommonPicture.ДлительнаяОперация48 + + + + + Декорация5 + 12 + + <key>ru</key> + <value>Отключение автономного рабочего места. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация5РасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 13 + true + + Label + true + 3 + true + + Left + Center + + + true + true + + true + + + Группа8РасширеннаяПодсказка + 37 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Ожидание</value> + + + ru + Ожидание + + + ОжиданиеРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + Завершение + 2 + + Группа9 + 3 + + Декорация6 + 4 + true + true + + true + + + Декорация6РасширеннаяПодсказка + 42 + Label + true + true + + Left + + + + Декорация6КонтекстноеМеню + 5 + true + + 4 + true + 2 + true + + + CommonPicture.Информация32 + + + + + Декорация2 + 6 + + <key>ru</key> + <value>Синхронизация с автономным рабочим местом прекращена. +Теперь его можно удалить из списка информационных баз +на Вашем компьютере.</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 7 + true + + Label + true + true + + Left + Center + + + true + true + + true + + + Группа9РасширеннаяПодсказка + 41 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Завершение</value> + + + ru + Завершение + + + ЗавершениеРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + + ru + Панель основная + + + ПанельОсновнаяРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Pages + + Auto + + + + ПанельНавигации + 20 + + СтраницаНавигацииНачало + 27 + + Группа5 + 28 + + ПрекратитьСинхронизациюДанных + 29 + true + true + + true + + + ПрекратитьСинхронизациюДанныхРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Form.Command.ПрекратитьСинхронизациюДанных + Auto + true + true + true + UserCmds + Auto + + + Отменить + 30 + true + true + + true + + + ОтменитьРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + Form.Command.Отменить + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа5РасширеннаяПодсказка + 46 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации начало</value> + + + ru + Страница навигации начало + + + СтраницаНавигацииНачалоРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаНавигацииОжидание + 21 + + Группа6 + 22 + + Закрыть + 23 + true + false + + true + + + ЗакрытьРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.Command.Закрыть + Normal + Auto + true + true + UserCmds + Auto + + true + false + + true + + true + + Группа6РасширеннаяПодсказка + 50 + Label + true + true + + Left + + + CommandBar + + Right + + + true + false + + true + + + <key>ru</key> + <value>Страница навигации ожидание</value> + + + ru + Страница навигации ожидание + + true + true + + СтраницаНавигацииОжиданиеРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаНавигацииОкончание + 24 + + Группа14 + 25 + + Закрыть1 + 26 + true + true + + true + + + Закрыть1РасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Command.Закрыть + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + Группа14РасширеннаяПодсказка + 53 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации окончание</value> + + + ru + Страница навигации окончание + + true + + СтраницаНавигацииОкончаниеРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель навигации</value> + + + ru + Панель навигации + + + ПанельНавигацииРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + Pages + + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + UseIfNecessary + auto + true + + ТаблицаПереходов + + <key>ru</key> + <value>Таблица переходов</value> + + 1 + + ValueTable + + + true + + + true + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 1 + + Number + + 3 + true + + + + true + + + true + + + + ИмяОсновнойСтраницы + + <key>ru</key> + <value>Имя основной страницы</value> + + 2 + + String + + + + true + + + true + + + + ИмяСтраницыДекорации + + <key>ru</key> + <value>Имя страницы декорации</value> + + 3 + + String + + + + true + + + true + + + + ИмяСтраницыНавигации + + <key>ru</key> + <value>Имя страницы навигации</value> + + 4 + + String + + + + true + + + true + + + + ИмяОбработчикаПриОткрытии + + <key>ru</key> + <value>Имя обработчика при открытии</value> + + 5 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеДалее + + <key>ru</key> + <value>Имя обработчика при переходе далее</value> + + 6 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеНазад + + <key>ru</key> + <value>Имя обработчика при переходе назад</value> + + 7 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + + <key>ru</key> + <value>Имя обработчика длительной операции</value> + + 9 + + String + + + + true + + + true + + + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 2 + + Number + + 3 + true + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 3 + + Boolean + + + true + + + true + + + + ДлительнаяОперацияЗавершена + + <key>ru</key> + <value>Длительная операция завершена</value> + + 4 + + Boolean + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 5 + + + true + + + true + + + + СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста + + <key>ru</key> + <value>Событие журнала регистрации удаление автономного рабочего места</value> + + 6 + + String + + + + true + + + true + + + + АвтономноеРабочееМесто + + <key>ru</key> + <value>Автономное рабочее место</value> + + 7 + + ExchangePlanRef + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 8 + + + true + + + true + + + + Закрыть + + <key>ru</key> + <value>Закрыть</value> + + 1 + + ru + Закрыть + + + true + + + + ЗакрытьФорму + + + Auto + Auto + + + Отменить + + <key>ru</key> + <value>Отменить</value> + + 2 + + ru + Отменить + + + true + + + + Отменить + + + Auto + Auto + + + ПрекратитьСинхронизациюДанных + + <key>ru</key> + <value>Прекратить синхронизацию данных</value> + + 3 + + ru + Прекратить синхронизацию данных + + + true + + + + ПрекратитьСинхронизациюДанных + + + Auto + Auto + + + + + + diff --git a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl new file mode 100644 index 000000000..c428ec387 --- /dev/null +++ b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/Module.bsl @@ -0,0 +1,541 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + АвтономноеРабочееМесто = Параметры.АвтономноеРабочееМесто; + + Если Не ЗначениеЗаполнено(АвтономноеРабочееМесто) Тогда + ВызватьИсключение НСтр("ru = 'Не задано автономное рабочее место.'"); + КонецЕсли; + + СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста = АвтономнаяРаботаСлужебный.СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста(); + + УстановитьОсновнойСценарий(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + // Позиционируемся на первом шаге помощника + УстановитьПорядковыйНомерПерехода(1); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПрекратитьСинхронизациюДанных(Команда) + + ПерейтиДалее(); + +КонецПроцедуры + +&НаКлиенте +Процедура Отменить(Команда) + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗакрытьФорму(Команда) + + Закрыть(); + +КонецПроцедуры + +// Обработчики ожидания + +&НаКлиенте +Процедура ОбработчикОжиданияДлительнойОперации() + + Попытка + + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Истина; + ПерейтиДалее(); + + Иначе + + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + + КонецЕсли; + + Исключение + + ЗаписатьОшибкуВЖурналРегистрации( + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста + ); + + ДлительнаяОперация = Ложь; + ПерейтиНазад(); + Предупреждение(НСтр("ru = 'В процессе работы возникли ошибки.'")); + + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Поставляемая часть + +&НаКлиенте +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) + + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) + + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 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 Тогда + + Возврат Элемент; + + Иначе + + Продолжить; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +&НаКлиенте +Процедура ПерейтиДалее() + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиНазад() + + ИзменитьПорядковыйНомерПерехода(-1); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Переопределяемая часть – Служебные процедуры и функции + +&НаСервере +Процедура УдалитьАвтономноеРабочееМесто(Отказ) + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + Попытка + АвтономнаяРаботаСлужебный.УдалитьАвтономноеРабочееМесто(Новый Структура("АвтономноеРабочееМесто", АвтономноеРабочееМесто), ""); + Исключение + Отказ = Истина; + ЗаписатьОшибкуВЖурналРегистрации(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), + СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста + ); + КонецПопытки; + + Иначе + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "АвтономнаяРаботаСлужебный.УдалитьАвтономноеРабочееМесто", + Новый Структура("АвтономноеРабочееМесто", АвтономноеРабочееМесто), + НСтр("ru = 'Удаление автономного рабочего места'") + ); + + Если Не Результат.ЗаданиеВыполнено Тогда + + ДлительнаяОперация = Истина; + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗаписатьОшибкуВЖурналРегистрации(СтрокаСообщенияОбОшибке, Событие) + + ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Переопределяемая часть - Обработчики событий переходов + +&НаКлиенте +Функция Подключаемый_Ожидание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторЗадания = Неопределено; + + УдалитьАвтономноеРабочееМесто(Отказ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'В процессе работы возникли ошибки.'")); + + ИначеЕсли Не ДлительнаяОперация Тогда + + Оповестить("Удаление_АвтономноеРабочееМесто"); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ОжиданиеДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", ПараметрыОбработчикаОжидания.ТекущийИнтервал, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ОжиданиеДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + Оповестить("Удаление_АвтономноеРабочееМесто"); + + КонецЕсли; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Переопределяемая часть - Инициализация переходов помощника + +&НаСервере +Процедура УстановитьОсновнойСценарий() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "Начало", "СтраницаНавигацииНачало"); + ТаблицаПереходовНоваяСтрока(2, "Ожидание", "СтраницаНавигацииОжидание",,,,, Истина, "Ожидание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "Ожидание", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "Ожидание", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "Завершение", "СтраницаНавигацииОкончание"); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/ОтключениеАвтономногоРабочегоМеста.mdo b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/ОтключениеАвтономногоРабочегоМеста.mdo new file mode 100644 index 000000000..bd00082b1 --- /dev/null +++ b/SSL/src/CommonForms/ОтключениеАвтономногоРабочегоМеста/ОтключениеАвтономногоРабочегоМеста.mdo @@ -0,0 +1,10 @@ + + + ОтключениеАвтономногоРабочегоМеста + + ru + Отключение автономного рабочего места + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ОтображениеНовостей/Form.form b/SSL/src/CommonForms/ОтображениеНовостей/Form.form new file mode 100644 index 000000000..31e824c2f --- /dev/null +++ b/SSL/src/CommonForms/ОтображениеНовостей/Form.form @@ -0,0 +1,366 @@ + + + + ОбщаяГруппа + 3 + + ГруппаНовостей + 4 + + ГруппаВсехНовостей + 6 + true + true + + true + + + <key>ru</key> + <value>Группа всех новостей</value> + + + ru + Группа всех новостей + + + ГруппаВсехНовостейРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа новостей</value> + + + ru + Группа новостей + + + ГруппаНовостейРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ГруппаНовости + 5 + + ВсеНовости + 7 + + <key>ru</key> + <value>Все новости</value> + + true + true + + true + + + ВсеНовостиРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ВсеНовостиКонтекстноеМеню + 8 + true + + Label + true + true + true + + + Click + ВсеНовостиНажатие + + true + Right + + + + Содержание + 9 + true + true + + true + + + Содержание + + None + + СодержаниеРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + СодержаниеКонтекстноеМеню + 10 + true + + FormattedDocumentField + true + Enter + true + Left + true + + 50 + true + 10 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа новости</value> + + + ru + Группа новости + + true + + ГруппаНовостиРасширеннаяПодсказка + 14 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Общая группа</value> + + + ru + Общая группа + + true + + ОбщаяГруппаРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Содержание + + <key>ru</key> + <value>Содержание</value> + + 1 + + FormattedDocument + + + true + + + true + + + + ТаблицаВсехНовостей + + <key>ru</key> + <value>Таблица всех новостей</value> + + 2 + + ValueTable + + + true + + + true + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 2 + + UUID + + + true + + + true + + + + Критичность + + <key>ru</key> + <value>Критичность</value> + + 3 + + Number + + 10 + + + + true + + + true + + + + ИмяНовости + + <key>ru</key> + <value>Имя новости</value> + + 4 + + String + + + + true + + + true + + + + ВнешняяСсылка + + <key>ru</key> + <value>Внешняя ссылка</value> + + 5 + + String + + + + true + + + true + + + + + + + + diff --git a/SSL/src/CommonForms/ОтображениеНовостей/Module.bsl b/SSL/src/CommonForms/ОтображениеНовостей/Module.bsl new file mode 100644 index 000000000..4bcedfc58 --- /dev/null +++ b/SSL/src/CommonForms/ОтображениеНовостей/Module.bsl @@ -0,0 +1,142 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("ОткрытьВсеНовости") Тогда + ОткрытьВсеНовости(); + ИначеЕсли Параметры.Свойство("ОткрытьНовость") Тогда + Если Параметры.Свойство("Идентификатор") Тогда + ОткрытьНовость(Параметры.Идентификатор); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура НажатиеНаНовость(Элемент) + + МассивНовостей = ТаблицаВсехНовостей.НайтиСтроки(Новый Структура("ИмяНовости", Элемент.Имя)); + Если МассивНовостей.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Идентификатор = МассивНовостей.Получить(0).Идентификатор; + ВнешняяСсылка = МассивНовостей.Получить(0).ВнешняяСсылка; + Если Не ПустаяСтрока(ВнешняяСсылка) Тогда + ПерейтиПоНавигационнойСсылке(ВнешняяСсылка); + Возврат; + КонецЕсли; + + ОткрытьНовость(Идентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура ВсеНовостиНажатие(Элемент) + + Закрыть(); + ИнформационныйЦентрКлиент.ПоказатьВсеНовости(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ОткрытьВсеНовости() + + Заголовок = НСтр("ru = 'Новости'"); + СформироватьСписокВсехНовостей(); + Элементы.ОбщаяГруппа.ТекущаяСтраница = Элементы.ГруппаНовостей; + +КонецПроцедуры + +&НаСервере +Процедура ОткрытьНовость(Идентификатор) + + Элементы.ОбщаяГруппа.ТекущаяСтраница = Элементы.ГруппаНовости; + УстановитьПривилегированныйРежим(Истина); + СсылкаНаДанные = Справочники.ОбщиеДанныеИнформационногоЦентра.НайтиПоРеквизиту("Идентификатор", Идентификатор); + Если СсылкаНаДанные.Пустая() Тогда + Возврат; + КонецЕсли; + + Заголовок = СсылкаНаДанные.Наименование; + + Вложения = СсылкаНаДанные.Вложения.Получить(); + ТекстHTML = СсылкаНаДанные.ТекстHTML; + + Если ТипЗнч(Вложения) = Тип("Структура") Тогда + СтруктруаВложений = Вложения; + Иначе + СтруктруаВложений = Новый Структура; + КонецЕсли; + + Содержание.УстановитьHTML(ТекстHTML, СтруктруаВложений); + +КонецПроцедуры + +&НаСервере +Процедура СформироватьСписокВсехНовостей() + + ТаблицаВсехНовостей.Очистить(); + + УстановитьПривилегированныйРежим(Истина); + + ВозвращаемаяТаблица = ИнформационныйЦентрСервер.СформироватьСписокВсехНовостей(); + + Если ВозвращаемаяТаблица.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ТаблицаВсехНовостей.Загрузить(ВозвращаемаяТаблица); + + ГруппаНовостей = Элементы.ГруппаВсехНовостей; + + Для Итерация = 0 По ТаблицаВсехНовостей.Количество() - 1 Цикл + + Критичность = ТаблицаВсехНовостей.Получить(Итерация).Критичность; + Наименование = ТаблицаВсехНовостей.Получить(Итерация).Наименование; + Картинка = ?(Критичность > 5, БиблиотекаКартинок.СостояниеОбменаДаннымиОшибка, БиблиотекаКартинок.Информация); + + ГруппаНовости = Элементы.Добавить("ГруппаНовости" + Строка(Итерация), Тип("ГруппаФормы"), ГруппаНовостей); + ГруппаНовости.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаНовости.ОтображатьЗаголовок = Ложь; + ГруппаНовости.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаНовости.Отображение = ОтображениеОбычнойГруппы.Нет; + + КартинкаНовости = Элементы.Добавить("КартинкаНовости" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаНовости); + КартинкаНовости.Вид = ВидДекорацииФормы.Картинка; + КартинкаНовости.Картинка = Картинка; + КартинкаНовости.Ширина = 2; + КартинкаНовости.Высота = 1; + КартинкаНовости.РазмерКартинки = РазмерКартинки.Растянуть; + + ИмяНовости = Элементы.Добавить("ИмяНовости" + Строка(Итерация), Тип("ДекорацияФормы"), ГруппаНовости); + ИмяНовости.Вид = ВидДекорацииФормы.Надпись; + ИмяНовости.Заголовок = Наименование; + ИмяНовости.РастягиватьПоГоризонтали = Истина; + ИмяНовости.ВертикальноеПоложение = ВертикальноеПоложениеЭлемента.Центр; + ИмяНовости.ВысотаЗаголовка = 1; + ИмяНовости.Гиперссылка = Истина; + ИмяНовости.УстановитьДействие("Нажатие", "НажатиеНаНовость"); + + Если Критичность = 10 Тогда + ИмяНовости.Шрифт = Новый Шрифт(, , Истина, , , ); + КонецЕсли; + + ТаблицаВсехНовостей.Получить(Итерация).ИмяНовости = "ИмяНовости" + Строка(Итерация); + + КонецЦикла; + +КонецПроцедуры + + + diff --git a/SSL/src/CommonForms/ОтображениеНовостей/ОтображениеНовостей.mdo b/SSL/src/CommonForms/ОтображениеНовостей/ОтображениеНовостей.mdo new file mode 100644 index 000000000..12f0ab905 --- /dev/null +++ b/SSL/src/CommonForms/ОтображениеНовостей/ОтображениеНовостей.mdo @@ -0,0 +1,10 @@ + + + ОтображениеНовостей + + ru + Отображение новостей + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/Form.form b/SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/Form.form new file mode 100644 index 000000000..07025c02d --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/Form.form @@ -0,0 +1,986 @@ + + + + ГруппаПолучатели + 42 + + Получатели + 43 + true + true + + true + + + Получатели + + None + Add + CancelSearch + Change + Copy + Delete + EndEdit + Find + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + ПолучателиВыбран + 52 + true + true + + true + + + Получатели.Выбран + + None + + ПолучателиВыбранРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + + ПолучателиВыбранКонтекстноеМеню + 53 + true + + CheckBoxField + Auto + true + + CommonPicture.ОтправитьПолучитьПочту + + Center + true + + + + ПолучателиПредставление + 48 + true + true + + true + + + Получатели.Представление + + + ПолучателиПредставлениеРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + ПолучателиПредставлениеКонтекстноеМеню + 49 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПолучателиПредставлениеАдреса + 56 + true + true + + true + + + Получатели.ПредставлениеАдреса + + + ПолучателиПредставлениеАдресаРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ПолучателиПредставлениеАдресаКонтекстноеМеню + 57 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ПолучателиКоманднаяПанель + 45 + Left + true + + + ПолучателиСтрокаПоиска + 62 + + ПолучателиСтрокаПоискаРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + + ПолучателиСтрокаПоискаКонтекстноеМеню + 63 + true + + Получатели + + true + + + + ПолучателиСостояниеПросмотра + 65 + + ПолучателиСостояниеПросмотраРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + + ПолучателиСостояниеПросмотраКонтекстноеМеню + 66 + true + + ViewStatusAddition + Получатели + + true + + + + ПолучателиУправлениеПоиском + 68 + + ПолучателиУправлениеПоискомРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + ПолучателиУправлениеПоискомКонтекстноеМеню + 69 + true + + SearchControlAddition + Получатели + + true + + + + ПолучателиРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + + ПолучателиКонтекстноеМеню + 44 + true + + true + true + true + 6 + true + true + MultiRow +
            true
            + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true + +
            + true + true + + true + + + <key>ru</key> + <value>Отправить следующим получателям</value> + + + ru + Группа получатели + + + ГруппаПолучателиРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + +
            + + ГруппаВыборФорматов + 31 + + ВыбранныеФорматыСохранения + 32 + true + true + + true + + + ВыбранныеФорматыСохранения + + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + Pickup + SelectAll + SortListAsc + SortListDesc + + ВыбранныеФорматыСохраненияПометка + 37 + true + true + + true + + + ВыбранныеФорматыСохранения.Check + + + ВыбранныеФорматыСохраненияПометкаРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияПометкаКонтекстноеМеню + 38 + true + + CheckBoxField + Auto + true + Left + true + + + + ВыбранныеФорматыСохраненияЗначение + 35 + true + true + + true + + + ВыбранныеФорматыСохранения.Value + + + ВыбранныеФорматыСохраненияЗначениеРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияЗначениеКонтекстноеМеню + 36 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ВыбранныеФорматыСохраненияКоманднаяПанель + 34 + Left + + + ВыбранныеФорматыСохраненияСтрокаПоиска + 87 + + ВыбранныеФорматыСохраненияСтрокаПоискаРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияСтрокаПоискаКонтекстноеМеню + 88 + true + + ВыбранныеФорматыСохранения + + true + + + + ВыбранныеФорматыСохраненияСостояниеПросмотра + 90 + + ВыбранныеФорматыСохраненияСостояниеПросмотраРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияСостояниеПросмотраКонтекстноеМеню + 91 + true + + ViewStatusAddition + ВыбранныеФорматыСохранения + + true + + + + ВыбранныеФорматыСохраненияУправлениеПоиском + 93 + + ВыбранныеФорматыСохраненияУправлениеПоискомРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияУправлениеПоискомКонтекстноеМеню + 94 + true + + SearchControlAddition + ВыбранныеФорматыСохранения + + true + + + + ВыбранныеФорматыСохраненияРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияКонтекстноеМеню + 33 + true + + true + 10 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + + ВыбранныеФорматыСохранения.Picture + + None + None + None + true + + true + + true + + + <key>ru</key> + <value>Прикрепить печатную форму к письму в формате</value> + + + ru + Группа выбор форматов + + + ГруппаВыборФорматовРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаДополнительныеПараметры + 39 + + ФорматВложений + 54 + true + true + + true + + + ФорматВложений + + + ФорматВложенийРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + + ФорматВложенийКонтекстноеМеню + 55 + true + + LabelField + Enter + true + Left + true + + + Click + ФорматВложенийНажатие + + true + true + true + + + + УпаковатьВАрхив + 40 + + <key>ru</key> + <value>Дополнительно упаковать в архив (.zip)</value> + + true + true + + true + + + УпаковатьВАрхив + + Right + + УпаковатьВАрхивРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + + УпаковатьВАрхивКонтекстноеМеню + 41 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>В форматах</value> + + + ru + Группа дополнительные параметры + + + ГруппаДополнительныеПараметрыРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + КнопкаПрикрепить + 29 + true + true + + true + + false + + КнопкаПрикрепитьРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + КнопкаОтмена + 30 + true + true + + true + + + КнопкаОтменаРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + BeforeLoadDataFromSettingsAtServer + ПередЗагрузкойДанныхИзНастроекНаСервере + + Abort + Close + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 60 + DontBlock + Use + UseList + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ВыбранныеФорматыСохранения + + <key>ru</key> + <value>Выбранные форматы сохранения</value> + + 3 + + ValueList + + + true + + + true + + + ВыбранныеФорматыСохранения + + + + + + + УпаковатьВАрхив + + <key>ru</key> + <value>Упаковать в архив (.zip)</value> + + 5 + + Boolean + + + true + + + true + + + УпаковатьВАрхив + + + + Получатели + + <key>ru</key> + <value>Получатели</value> + + 1 + + ValueTable + + + true + + + true + + + Адрес + + <key>ru</key> + <value>Адрес</value> + + 1 + + String + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Получатель</value> + + 2 + + String + + + + true + + + true + + + + ИсточникКонтактнойИнформации + + <key>ru</key> + <value>Источник контактной информации</value> + + 3 + + CatalogRef + + + true + + + true + + + + Выбран + + <key>ru</key> + <value>Выбран</value> + + 4 + + Boolean + + + true + + + true + + + + ВидПочтовогоАдреса + + <key>ru</key> + <value>Вид почтового адреса</value> + + 5 + + String + + + + true + + + true + + + + ПредставлениеАдреса + + <key>ru</key> + <value>E-mail</value> + + 6 + + String + + + + true + + + true + + + + + ФорматВложений + + <key>ru</key> + <value>Формат вложений</value> + + 2 + + String + + + + true + + + true + + + + Выбрать + + <key>ru</key> + <value>Подготовить...</value> + + 1 + + ru + Выбрать + + + true + + + + Выбрать + + + Auto + Auto + + + Получатели + + + + + + +
            diff --git a/SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/Module.bsl b/SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/Module.bsl new file mode 100644 index 000000000..ab0c37d0c --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/Module.bsl @@ -0,0 +1,184 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Для Каждого ФорматСохранения Из УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента() Цикл + ВыбранныеФорматыСохранения.Добавить(ФорматСохранения.ТипФайлаТабличногоДокумента, Строка(ФорматСохранения.Ссылка), Ложь, ФорматСохранения.Картинка); + КонецЦикла; + + СписокПолучателей = Параметры.Получатели; + Если ТипЗнч(СписокПолучателей) = Тип("Строка") Тогда + ЗаполнитьТаблицуПолучателейИзСтроки(СписокПолучателей); + ИначеЕсли ТипЗнч(СписокПолучателей) = Тип("СписокЗначений") Тогда + ЗаполнитьТаблицуПолучателейИзСпискаЗначений(СписокПолучателей); + ИначеЕсли ТипЗнч(СписокПолучателей) = Тип("Массив") Тогда + ЗаполнитьТаблицуПолучателейИзМассиваСтруктур(СписокПолучателей); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) + + ФорматыСохраненияИзНастроек = Настройки["ВыбранныеФорматыСохранения"]; + Если ФорматыСохраненияИзНастроек <> Неопределено Тогда + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + ФорматИзНастроек = ФорматыСохраненияИзНастроек.НайтиПоЗначению(ВыбранныйФормат.Значение); + Если ФорматИзНастроек <> Неопределено Тогда + ВыбранныйФормат.Пометка = ФорматИзНастроек.Пометка; + КонецЕсли; + КонецЦикла; + Настройки.Удалить("ВыбранныеФорматыСохранения"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + УстановитьВыборФормата(); + СформироватьПредставлениеВыбранныхФорматов(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Выбрать(Команда) + Закрыть(ВыбранныеНастройкиФормата()); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ФорматВложенийНажатие(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + РезультатВыбораФорматов = ОткрытьФормуМодально("ОбщаяФорма.ВыборФорматаВложений", Новый Структура("НастройкиФормата", ВыбранныеНастройкиФормата())); + Если РезультатВыбораФорматов <> КодВозвратаДиалога.Отмена И РезультатВыбораФорматов <> Неопределено Тогда + УстановитьВыборФормата(РезультатВыбораФорматов.ФорматыСохранения); + УпаковатьВАрхив = РезультатВыбораФорматов.УпаковатьВАрхив; + СформироватьПредставлениеВыбранныхФорматов(); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьТаблицуПолучателейИзСтроки(Знач СписокПолучателей) + + СписокПолучателей = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(СписокПолучателей); + + Для Каждого Получатель Из СписокПолучателей Цикл + НовыйПолучатель = Получатели.Добавить(); + НовыйПолучатель.Адрес = Получатель.Адрес; + НовыйПолучатель.Представление = Получатель.Псевдоним; + НовыйПолучатель.ПредставлениеАдреса = НовыйПолучатель.Адрес; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьТаблицуПолучателейИзСпискаЗначений(СписокПолучателей) + + Для Каждого Получатель Из СписокПолучателей Цикл + НовыйПолучатель = Получатели.Добавить(); + НовыйПолучатель.Адрес = Получатель.Значение; + НовыйПолучатель.Представление = Получатель.Представление; + НовыйПолучатель.ПредставлениеАдреса = НовыйПолучатель.Адрес; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьТаблицуПолучателейИзМассиваСтруктур(СписокПолучателей) + + Для Каждого Получатель Из СписокПолучателей Цикл + НовыйПолучатель = Получатели.Добавить(); + ЗаполнитьЗначенияСвойств(НовыйПолучатель, Получатель); + НовыйПолучатель.ПредставлениеАдреса = НовыйПолучатель.Адрес; + Если Не ПустаяСтрока(Получатель.ВидПочтовогоАдреса) Тогда + НовыйПолучатель.ПредставлениеАдреса = НовыйПолучатель.ПредставлениеАдреса + " (" + Получатель.ВидПочтовогоАдреса + ")"; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВыборФормата(Знач ФорматыСохранения = Неопределено) + + ЕстьВыбранныйФормат = Ложь; + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + Если ФорматыСохранения <> Неопределено Тогда + ВыбранныйФормат.Пометка = ФорматыСохранения.Найти(ВыбранныйФормат.Значение) <> Неопределено; + КонецЕсли; + + Если ВыбранныйФормат.Пометка Тогда + ЕстьВыбранныйФормат = Истина; + КонецЕсли; + КонецЦикла; + + Если Не ЕстьВыбранныйФормат Тогда + ВыбранныеФорматыСохранения[0].Пометка = Истина; // выбор по умолчанию - первый в списке + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СформироватьПредставлениеВыбранныхФорматов() + + ФорматВложений = ""; + КоличествоФорматов = 0; + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + Если ВыбранныйФормат.Пометка Тогда + Если Не ПустаяСтрока(ФорматВложений) Тогда + ФорматВложений = ФорматВложений + ", "; + КонецЕсли; + ФорматВложений = ФорматВложений + ВыбранныйФормат.Представление; + КоличествоФорматов = КоличествоФорматов + 1; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция ВыбранныеНастройкиФормата() + + ФорматыСохранения = Новый Массив; + + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + Если ВыбранныйФормат.Пометка Тогда + ФорматыСохранения.Добавить(ВыбранныйФормат.Значение); + КонецЕсли; + КонецЦикла; + + Результат = Новый Структура; + Результат.Вставить("УпаковатьВАрхив", УпаковатьВАрхив); + Результат.Вставить("ФорматыСохранения", ФорматыСохранения); + Результат.Вставить("Получатели", ВыбранныеПолучатели()); + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Функция ВыбранныеПолучатели() + Результат = Новый Массив; + Для Каждого ВыбранныйПолучатель Из Получатели Цикл + Если ВыбранныйПолучатель.Выбран Тогда + СтруктураПолучателя = Новый Структура("Адрес,Представление,ИсточникКонтактнойИнформации,ВидПочтовогоАдреса"); + ЗаполнитьЗначенияСвойств(СтруктураПолучателя, ВыбранныйПолучатель); + Результат.Добавить(СтруктураПолучателя); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции diff --git a/SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/ОтправкаПечатнойФормыПоПочте.mdo b/SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/ОтправкаПечатнойФормыПоПочте.mdo new file mode 100644 index 000000000..edaa19422 --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаПечатнойФормыПоПочте/ОтправкаПечатнойФормыПоПочте.mdo @@ -0,0 +1,11 @@ + + + ОтправкаПечатнойФормыПоПочте + + ru + Подготовка нового письма + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Form.form b/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Form.form new file mode 100644 index 000000000..4b2f051db --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Form.form @@ -0,0 +1,450 @@ + + + + <key>ru</key> + <value>Техподдержка пользователей</value> + + + Декорация3 + 17 + + <key>ru</key> + <value>Письмо будет отправлено в техподдержку пользователей</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 18 + true + + Label + true + true + + Left + + + + ГруппаКонтента + 19 + + АдресВозврата + 1 + true + true + + true + + + ОтКого + + Top + + АдресВозвратаРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + АдресВозвратаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Тема + 3 + true + true + + true + + + Тема + + Top + + ТемаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + + ТемаКонтекстноеМеню + 4 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Текст + 5 + true + true + + true + + + Текст + + true + + ТекстРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ТекстКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа контента</value> + + + ru + Группа контента + + + ГруппаКонтентаРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + Auto + Auto + + + + ГруппаКнопок + 8 + + ПустаяНадпись + 10 + true + true + + true + + + ПустаяНадписьРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + ПустаяНадписьКонтекстноеМеню + 11 + true + + Label + true + true + true + + Left + + + + Отправить + 7 + true + true + + true + + + ОтправитьРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualButton + Form.Command.Отправить + Auto + true + true + true + UserCmds + Auto + + + Закрыть + 9 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + UsualButton + Form.StandardCommand.Close + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа кнопок</value> + + + ru + Группа кнопок + + true + + ГруппаКнопокРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ОтКого + + <key>ru</key> + <value>E-mail для обратной связи</value> + + 2 + + String + + + + true + + + true + + ShowError + + + Текст + + <key>ru</key> + <value>Отредактируйте шаблон письма</value> + + 3 + + String + + + + true + + + true + + ShowError + + + Тема + + <key>ru</key> + <value>Тема сообщения</value> + + 4 + + String + + + + true + + + true + + ShowError + + + Вложения + + <key>ru</key> + <value>Вложения</value> + + 1 + + + true + + + true + + + + Отправить + + <key>ru</key> + <value>Отправить</value> + + 1 + + ru + Отправить + + + true + + + + Отправить + + + Auto + Auto + + + + + + diff --git a/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Module.bsl b/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Module.bsl new file mode 100644 index 000000000..098d53078 --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/Module.bsl @@ -0,0 +1,114 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если Параметры.Свойство("ОтКого") Тогда + ОтКого = Параметры.ОтКого; + КонецЕсли; + + Если Параметры.Свойство("Тема") Тогда + Тема = Параметры.Тема; + КонецЕсли; + + Если Параметры.Свойство("Текст") Тогда + Текст = Параметры.Текст; + КонецЕсли; + + Если Параметры.Свойство("Вложения") Тогда + Вложения = Параметры.Вложения; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьКурсорВШаблонеТекста(); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Отправить(Команда) + + Если Не ПроверитьЗаполнение() Тогда + Возврат; + КонецЕсли; + + РезультатОтправки = ОтправитьСообщениеСервер(); + Если РезультатОтправки Тогда + Предупреждение(НСтр("ru = 'Сообщение отправлено.'")); + Закрыть(); + Иначе + Предупреждение(НСтр("ru = 'К сожалению сообщение не было отправлено. + |Повторите попытку позже.'")); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// ОБЩИЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция ОтправитьСообщениеСервер() + + ПараметрыСообщения = Новый Структура(); + ПараметрыСообщения.Вставить("ОтКого", ОтКого); + ПараметрыСообщения.Вставить("Тема", Тема); + ПараметрыСообщения.Вставить("Текст", Текст); + ПараметрыСообщения.Вставить("Вложения", Вложения); + + + Результат = Истина; + СтандартныеПодсистемыПереопределяемый.ОтправитьСообщениеПользователяВТехподдержку(ПараметрыСообщения, Результат); + + Возврат Результат; + +КонецФункции + +&НаКлиенте +Процедура УстановитьКурсорВШаблонеТекста() + + СтрокаПозицияКурсора = НСтр("ru = 'ПозицияКурсора'"); + СтрокаКурсора = ОпределитьНомерСтрокиДляКурсора(Текст, СтрокаПозицияКурсора); + + Текст = СтрЗаменить(Текст, СтрокаПозицияКурсора, ""); + ТекущийЭлемент = Элементы.Текст; + Элементы.Текст.УстановитьГраницыВыделения(СтрокаКурсора, 1, СтрокаКурсора, 1); + +КонецПроцедуры + +&НаКлиенте +Функция ОпределитьНомерСтрокиДляКурсора(знач ТекстПараметр, СтрокаПозицияКурсора) + + МассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекстПараметр, Символы.ПС); + + Если МассивСтрок.Количество() = 0 Тогда + Возврат 1; + КонецЕсли; + + Для Итерация = 0 по МассивСтрок.Количество() - 1 Цикл + Если Найти(МассивСтрок.Получить(Итерация), СтрокаПозицияКурсора) <> 0 Тогда + Возврат Итерация + 1; + КонецЕсли; + КонецЦикла; + + Возврат 1; + +КонецФункции diff --git a/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/ОтправкаСообщенияВТехподдержку.mdo b/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/ОтправкаСообщенияВТехподдержку.mdo new file mode 100644 index 000000000..6d624aa6f --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаСообщенияВТехподдержку/ОтправкаСообщенияВТехподдержку.mdo @@ -0,0 +1,10 @@ + + + ОтправкаСообщенияВТехподдержку + + ru + Отправка сообщения в техподдержку + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form new file mode 100644 index 000000000..8b0492903 --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Form.form @@ -0,0 +1,462 @@ + + + + ФорматыСохранения + 32 + true + true + + true + + + ФорматыСохранения + + Top + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + Pickup + SelectAll + SortListAsc + SortListDesc + + ФорматыСохраненияПометка + 37 + true + true + + true + + + ФорматыСохранения.Check + + + ФорматыСохраненияПометкаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + + ФорматыСохраненияПометкаКонтекстноеМеню + 38 + true + + CheckBoxField + Auto + true + Left + true + + + + ФорматыСохраненияЗначение + 35 + true + true + + true + + + ФорматыСохранения.Value + + + ФорматыСохраненияЗначениеРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + + ФорматыСохраненияЗначениеКонтекстноеМеню + 36 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ФорматыСохраненияКоманднаяПанель + 34 + Left + + + ФорматыСохраненияСтрокаПоиска + 45 + + ФорматыСохраненияСтрокаПоискаРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ФорматыСохраненияСтрокаПоискаКонтекстноеМеню + 46 + true + + ФорматыСохранения + + true + + + + ФорматыСохраненияСостояниеПросмотра + 48 + + ФорматыСохраненияСостояниеПросмотраРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + + ФорматыСохраненияСостояниеПросмотраКонтекстноеМеню + 49 + true + + ViewStatusAddition + ФорматыСохранения + + true + + + + ФорматыСохраненияУправлениеПоиском + 51 + + ФорматыСохраненияУправлениеПоискомРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + + ФорматыСохраненияУправлениеПоискомКонтекстноеМеню + 52 + true + + SearchControlAddition + ФорматыСохранения + + true + + + + ФорматыСохраненияРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ФорматыСохраненияКонтекстноеМеню + 33 + true + + true + 10 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + Auto + true + true + + ФорматыСохранения.Picture + + None + None + None + true + + + УпаковатьВАрхив + 40 + + <key>ru</key> + <value>Дополнительно упаковать в архив (.zip)</value> + + true + true + + true + + + УпаковатьВАрхив + + Right + + УпаковатьВАрхивРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + УпаковатьВАрхивКонтекстноеМеню + 41 + true + + CheckBoxField + Enter + true + Left + true + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + КнопкаПрикрепить + 29 + true + true + + true + + false + + КнопкаПрикрепитьРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Command.Прикрепить + Auto + true + true + true + UserCmds + Auto + + + КнопкаОтмена + 30 + true + + true + + + КнопкаОтменаРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + + OnCreateAtServer + ПриСозданииНаСервере + + + BeforeLoadDataFromSettingsAtServer + ПередЗагрузкойДанныхИзНастроекНаСервере + + Abort + Close + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 38 + DontBlock + Use + UseList + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + ФорматыСохранения + + <key>ru</key> + <value>Форматы</value> + + 3 + + ValueList + + + true + + + true + + + ФорматыСохранения + + + + + + + УпаковатьВАрхив + + <key>ru</key> + <value>Упаковать в архив (.zip)</value> + + 5 + + Boolean + + + true + + + true + + + УпаковатьВАрхив + + + + ТаблицаФорматов + + <key>ru</key> + <value>Таблица форматов</value> + + 1 + + ValueTable + + + true + + + true + + + + ТабличныеДокументы + + <key>ru</key> + <value>Табличные документы</value> + + 2 + + ValueList + + + true + + + true + + + + SpreadsheetDocument + + + + + Прикрепить + + <key>ru</key> + <value>Продолжить</value> + + 1 + + ru + Прикрепить + + + true + + + + Прикрепить + + + Auto + Auto + + + ТабличныеДокументы + + ValueList + + + + + + + diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl new file mode 100644 index 000000000..7724d24d6 --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/Module.bsl @@ -0,0 +1,252 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Параметры.Свойство("ТабличныеДокументы", ТабличныеДокументы); + + // Приведение имен файлов: уникальность + замена недопустимых символов + ИспользованныеИменаДокументов = Новый Массив; + Для Каждого ЭлементСписка Из ТабличныеДокументы Цикл + Представление = СокрЛП(ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ЭлементСписка.Представление)); + Номер = 0; + Пока ИспользованныеИменаДокументов.Найти(ПредставлениеСНомером(Представление, Номер)) <> Неопределено Цикл + Номер = Номер + 1; + КонецЦикла; + ЭлементСписка.Представление = ПредставлениеСНомером(Представление, Номер); + ИспользованныеИменаДокументов.Добавить(ЭлементСписка.Представление); + КонецЦикла; + + ЗаполнитьТаблицуФорматов(); + + Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл + ФорматыСохранения.Добавить(ФорматСохранения.ТипФайлаТабличногоДокумента, ФорматСохранения.Представление, Ложь, ФорматСохранения.Картинка); + КонецЦикла; + ФорматыСохранения[0].Пометка = Истина; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) + ФорматыСохраненияИзНастроек = Настройки["ФорматыСохранения"]; + Если ФорматыСохраненияИзНастроек <> Неопределено Тогда + Для Каждого ВыбранныйФормат Из ФорматыСохранения Цикл + ФорматИзНастроек = ФорматыСохраненияИзНастроек.НайтиПоЗначению(ВыбранныйФормат.Значение); + Если ФорматИзНастроек <> Неопределено Тогда + ВыбранныйФормат.Пометка = ФорматИзНастроек.Пометка; + КонецЕсли; + КонецЦикла; + Настройки.Удалить("ФорматыСохранения"); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Прикрепить(Команда) + + ВыбранныеФорматыСохранения = Новый Массив; + + Для Каждого ВыбранныйФормат Из ФорматыСохранения Цикл + Если ВыбранныйФормат.Пометка Тогда + ВыбранныеФорматыСохранения.Добавить(ВыбранныйФормат.Значение); + КонецЕсли; + КонецЦикла; + + Если ВыбранныеФорматыСохранения.Количество() = 0 Тогда + Предупреждение(НСтр("ru = 'Необходимо указать как минимум один из предложенных форматов.'")); + Возврат; + КонецЕсли; + + Получатель = Неопределено; + Тема = ""; + Текст = ""; + СписокВложений = ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранныеФорматыСохранения); + + РаботаСПочтовымиСообщениямиКлиент.ОткрытьФормуОтправкиПочтовогоСообщения(, Получатель, Тема, Текст, СписокВложений, Истина); + + Закрыть(Истина); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ЗаполнитьТаблицуФорматов() + + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ТипФайлаТабличногоДокумента", Новый ОписаниеТипов(), "ТаблицаФорматов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Ссылка", Новый ОписаниеТипов(), "ТаблицаФорматов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов(), "ТаблицаФорматов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Расширение", Новый ОписаниеТипов(), "ТаблицаФорматов")); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Картинка", Новый ОписаниеТипов(), "ТаблицаФорматов")); + ИзменитьРеквизиты(ДобавляемыеРеквизиты, Новый Массив); + + // Документ PDF (.pdf) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.PDF; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.PDF; + НовыйФормат.Расширение = "pdf"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF; + + // Лист Microsoft Excel 2007 (.xlsx) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLSX; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLSX; + НовыйФормат.Расширение = "xlsx"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel2007; + + // Лист Microsoft Excel 97-2003 (.xls) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLS; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLS; + НовыйФормат.Расширение = "xls"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel; + + // Электронная таблица OpenDocument (.ods) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ODS; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ODS; + НовыйФормат.Расширение = "ods"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматOpenOfficeCalc; + + // Табличный документ (.mxl) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.MXL; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.MXL; + НовыйФормат.Расширение = "mxl"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматMXL; + + // Документ Word 2007 (.docx) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.DOCX; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.DOCX; + НовыйФормат.Расширение = "docx"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматWord2007; + + // Веб-страница (.html) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.HTML; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.HTML; + НовыйФормат.Расширение = "html"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматHTML; + + // Текстовый документ UTF-8 (.txt) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.TXT; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.TXT; + НовыйФормат.Расширение = "txt"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; + + // Текстовый документ ANSI (.txt) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ANSITXT; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ANSITXT; + НовыйФормат.Расширение = "txt"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; + + // дополнительные форматы / изменение списка текущих + Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл + ФорматСохранения.Представление = Строка(ФорматСохранения.Ссылка); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ПредставлениеСНомером(Представление, Номер) + Возврат Представление + ?(Номер = 0, "", " " + Формат(Номер, "ЧГ=")); +КонецФункции + +&НаСервере +Функция ПоместитьТабличныеДокументыВоВременноеХранилище(ВыбранныеФорматыСохранения) + Результат = Новый СписокЗначений; + + // Архив + Если УпаковатьВАрхив Тогда + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива); + КонецЕсли; + + // Каталог временных файлов + ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); + СоздатьКаталог(ИмяВременнойПапки); + ПолныйПутьКФайлу = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки); + + // Сохранение табличных документов + Для Каждого ТабличныйДокумент Из ТабличныеДокументы Цикл + + Если ТабличныйДокумент.Значение.Вывод = ИспользованиеВывода.Запретить Тогда + Продолжить; + КонецЕсли; + + Для Каждого ТипФайла Из ВыбранныеФорматыСохранения Цикл + ПараметрыФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла))[0]; + + ИмяФайла = ТабличныйДокумент.Представление + "." + ПараметрыФормата.Расширение; + ПолноеИмяФайла = ПолныйПутьКФайлу + ИмяФайла; + + ТабличныйДокумент.Значение.Записать(ПолноеИмяФайла, ТипФайла); + + Если ТипФайла = ТипФайлаТабличногоДокумента.HTML Тогда + ВставитьКартинкиВHTML(ПолноеИмяФайла); + КонецЕсли; + + Если УпаковатьВАрхив Тогда + ЗаписьZipФайла.Добавить(ПолноеИмяФайла); + Иначе + Результат.Добавить(ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайла), УникальныйИдентификатор), ИмяФайла); + КонецЕсли; + КонецЦикла; + + КонецЦикла; + + // если архив подготовлен, записываем и помещаем его во временное хранилище + Если УпаковатьВАрхив Тогда + ЗаписьZipФайла.Записать(); + + ФайлАрхива = Новый Файл(ИмяАрхива); + Результат.Добавить(ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяАрхива), УникальныйИдентификатор), ФайлАрхива.Имя); + + УдалитьФайлы(ИмяАрхива); + КонецЕсли; + + УдалитьФайлы(ИмяВременнойПапки); + + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ВставитьКартинкиВHTML(ИмяФайлаHTML) + + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.Прочитать(ИмяФайлаHTML, КодировкаТекста.UTF8); + ТекстHTML = ТекстовыйДокумент.ПолучитьТекст(); + + ФайлHTML = Новый Файл(ИмяФайлаHTML); + + ИмяПапкиКартинок = ФайлHTML.ИмяБезРасширения + "_files"; + ПутьКПапкеКартинок = СтрЗаменить(ФайлHTML.ПолноеИмя, ФайлHTML.Имя, ИмяПапкиКартинок); + + // ожидается, что в папке будут только картинки + ФайлыКартинок = НайтиФайлы(ПутьКПапкеКартинок, "*"); + + Для Каждого ФайлКартинки Из ФайлыКартинок Цикл + КартинкаТекстом = Base64Строка(Новый ДвоичныеДанные(ФайлКартинки.ПолноеИмя)); + КартинкаТекстом = "data:image/" + Сред(ФайлКартинки.Расширение,2) + ";base64," + Символы.ПС + КартинкаТекстом; + + ТекстHTML = СтрЗаменить(ТекстHTML, ИмяПапкиКартинок + "\" + ФайлКартинки.Имя, КартинкаТекстом); + КонецЦикла; + + ТекстовыйДокумент.УстановитьТекст(ТекстHTML); + ТекстовыйДокумент.Записать(ИмяФайлаHTML, КодировкаТекста.UTF8); + +КонецПроцедуры + diff --git a/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/ОтправкаТабличныхДокументовПоПочте.mdo b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/ОтправкаТабличныхДокументовПоПочте.mdo new file mode 100644 index 000000000..8da0ba056 --- /dev/null +++ b/SSL/src/CommonForms/ОтправкаТабличныхДокументовПоПочте/ОтправкаТабличныхДокументовПоПочте.mdo @@ -0,0 +1,11 @@ + + + ОтправкаТабличныхДокументовПоПочте + + ru + Отправить по почте + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/ПанельОтчетов/Form.form b/SSL/src/CommonForms/ПанельОтчетов/Form.form index 64ff0f0a0..535825344 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Form.form +++ b/SSL/src/CommonForms/ПанельОтчетов/Form.form @@ -1,22 +1,31 @@ - ГруппаОсновная - 1 - - КартинкаОтчета - 9 - - <key>ru</key> - <value>Картинка отчета</value> - + ВерхняяПанельСтрока1 + 229 + + ОтборНаименование + 252 + true true true + + ОтборНаименование + + None + + ru + Отбор по наименованию + + + OnChange + ОтборНаименованиеПриИзменении + - КартинкаОтчетаРасширеннаяПодсказка - 23 + ОтборНаименованиеРасширеннаяПодсказка + 264 Label true true @@ -25,19 +34,251 @@ - КартинкаОтчетаКонтекстноеМеню - 10 + ОтборНаименованиеКонтекстноеМеню + 253 true - 5 - true - 2 - true - false - - - StdPicture.CheckSyntax - + InputField + Enter + true + Left + true + + 32 + true + true + false + true + true + true + true + true + true + Normal + + + + ОтборАвтор + 250 + true + true + + true + + + ОтборАвтор + + + ru + Отбор по авторам + + + OnChange + ОтборАвторПриИзменении + + + ОтборАвторРасширеннаяПодсказка + 266 + Label + true + true + + Left + + + + ОтборАвторКонтекстноеМеню + 251 + true + + InputField + Enter + true + Left + true + + 25 + true + true + false + true + false + true + true + false + false + true + true + true + Normal + + + + РежимПросмотраКоманднаяПанель + 230 + + СохранитьИзменения + 241 + true + true + + true + + + СохранитьИзмененияРасширеннаяПодсказка + 269 + Label + true + true + + Left + + + Form.Command.СохранитьИзменения + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ОтменитьИзменения + 242 + true + true + + true + + + ОтменитьИзмененияРасширеннаяПодсказка + 270 + Label + true + true + + Left + + + Form.Command.ОтменитьИзменения + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Настроить + 231 + true + true + + true + + + НастроитьРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + Form.Command.Настроить + Normal + Auto + 12 + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СброситьНастройки + 239 + true + true + + true + + + СброситьНастройкиРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + Form.Command.СброситьНастройки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ВсеОтчеты + 262 + true + true + + true + + + ВсеОтчетыРасширеннаяПодсказка + 273 + Label + true + true + + Left + + + Form.Command.ВсеОтчеты + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Режим просмотра командная панель</value> + + + ru + Режим просмотра командная панель + + + РежимПросмотраКоманднаяПанельРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + CommandBar + + Right + Form true @@ -47,15 +288,15 @@ <key>ru</key> - <value>Отчеты</value> + <value>Верхняя панель строка1</value> ru - Группа основная + Верхняя панель строка1 - ГруппаОсновнаяРасширеннаяПодсказка - 22 + ВерхняяПанельСтрока1РасширеннаяПодсказка + 263 Label true true @@ -65,9 +306,7 @@ UsualGroup - Vertical Auto - NormalSeparation true true Auto @@ -75,14 +314,104 @@ - ГруппаСмТакже - 14 - - Декорация - 18 + ВерхняяПанельСтрока2 + 249 + + СохранитьИзменения1 + 246 + true + true + + true + + + СохранитьИзменения1РасширеннаяПодсказка + 275 + Label + true + true + + Left + + + UsualButton + Form.Command.СохранитьИзменения + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаОтменитьИзменения + 254 + + ОтменитьИзменения1 + 247 + true + true + + true + + + ОтменитьИзменения1РасширеннаяПодсказка + 277 + Label + true + true + + Left + + + UsualButton + Form.Command.ОтменитьИзменения + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + <key>ru</key> - <value>См. также</value> + <value>Группа отменить изменения</value> + + + ru + Группа отменить изменения + + + ГруппаОтменитьИзмененияРасширеннаяПодсказка + 276 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ВерхняяПанельКартинка + 226 + + <key>ru</key> + <value>Верхняя панель картинка</value> true true @@ -90,8 +419,8 @@ true - ДекорацияРасширеннаяПодсказка - 25 + ВерхняяПанельКартинкаРасширеннаяПодсказка + 278 Label true true @@ -100,35 +429,234 @@ - ДекорацияКонтекстноеМеню - 19 + ВерхняяПанельКартинкаКонтекстноеМеню + 227 + true + + 3 + true + 1 + true + true + + + CommonPicture.Информация + + + + + ВерхняяПанельНадпись + 243 + true + true + + true + + + ВерхняяПанельНадписьРасширеннаяПодсказка + 279 + Label + true + true + + Left + + + + ВерхняяПанельНадписьКонтекстноеМеню + 244 true Label true true true - false - - 168 - 162 - 126 + true + + Style.ПоясняющийТекст - - System.DefaultGUIFont - 11.0 - true - false - false - false - Left + true + true + + true + + + <key>ru</key> + <value>Верхняя панель строка2</value> + + + ru + Верхняя панель строка2 + + + ВерхняяПанельСтрока2РасширеннаяПодсказка + 274 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ВерхняяПанельОтступ + 255 + true + true + + true + + + ВерхняяПанельОтступРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + + ВерхняяПанельОтступКонтекстноеМеню + 256 + true + + Label + true + true + true + + Left + + + + Колонки + 3 - ГруппаСмТакжеСпискиОтчетов - 20 + БыстрыйДоступ + 4 + + БыстрыйДоступКолонка1 + 5 + true + true + + true + + + ru + Быстрый доступ колонка1 + + true + false + + БыстрыйДоступКолонка1РасширеннаяПодсказка + 283 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + БыстрыйДоступКолонка2 + 21 + true + true + + true + + + ru + Быстрый доступ колонка2 + + true + false + + БыстрыйДоступКолонка2РасширеннаяПодсказка + 284 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + БыстрыйДоступКолонка3 + 32 + true + true + + true + + + System.DefaultGUIFont + true + false + false + false + + + ru + Быстрый доступ колонка3 + + true + false + + БыстрыйДоступКолонка3РасширеннаяПодсказка + 285 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + true true @@ -136,15 +664,16 @@ <key>ru</key> - <value>Группа см также списки отчетов</value> + <value>Быстрый доступ</value> ru - Группа см также списки отчетов + Быстрый доступ + false - ГруппаСмТакжеСпискиОтчетовРасширеннаяПодсказка - 26 + БыстрыйДоступРасширеннаяПодсказка + 282 Label true true @@ -157,26 +686,629 @@ Auto true true + Equal Auto Auto + + БыстрыйДоступДекорация + 258 + true + true + + true + + + БыстрыйДоступДекорацияРасширеннаяПодсказка + 286 + Label + true + true + + Left + + + + БыстрыйДоступДекорацияКонтекстноеМеню + 259 + true + + Label + true + true + false + true + + Left + + + + БезГруппы + 48 + + БезГруппыКолонка1 + 49 + true + true + + true + + + <key>ru</key> + <value>Без группы колонка1</value> + + + ru + Без группы колонка1 + + false + + БезГруппыКолонка1РасширеннаяПодсказка + 288 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + БезГруппыКолонка2 + 58 + true + true + + true + + + <key>ru</key> + <value>Без группы колонка2</value> + + + ru + Без группы колонка2 + + false + + БезГруппыКолонка2РасширеннаяПодсказка + 289 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + БезГруппыКолонка3 + 65 + true + true + + true + + + <key>ru</key> + <value>Без группы колонка3</value> + + + System.DefaultGUIFont + true + false + false + false + + + ru + Без группы колонка3 + + false + + БезГруппыКолонка3РасширеннаяПодсказка + 290 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Без группы</value> + + + ru + Без группы + + false + + БезГруппыРасширеннаяПодсказка + 287 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Equal + Auto + Auto + + + + БезГруппыДекорация + 43 + true + true + + true + + + БезГруппыДекорацияРасширеннаяПодсказка + 291 + Label + true + true + + Left + + + + БезГруппыДекорацияКонтекстноеМеню + 44 + true + + Label + true + true + false + true + + Left + + + + СГруппой + 74 + + СГруппойКолонка1 + 75 + true + true + + true + + + <key>ru</key> + <value>С группой колонка1</value> + + + ru + С группой колонка1 + + false + + СГруппойКолонка1РасширеннаяПодсказка + 293 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СГруппойКолонка2 + 114 + true + true + + true + + + <key>ru</key> + <value>С группой колонка2</value> + + + ru + С группой колонка2 + + false + + СГруппойКолонка2РасширеннаяПодсказка + 294 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СГруппойКолонка3 + 154 + true + true + + true + + + <key>ru</key> + <value>С группой колонка3</value> + + + System.DefaultGUIFont + true + false + false + false + + + ru + С группой колонка3 + + false + + СГруппойКолонка3РасширеннаяПодсказка + 295 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>С группой</value> + + + ru + С группой + + false + + СГруппойРасширеннаяПодсказка + 292 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Equal + Auto + Auto + + + + СГруппойДекорация + 216 + true + true + + true + + + СГруппойДекорацияРасширеннаяПодсказка + 296 + Label + true + true + + Left + + + + СГруппойДекорацияКонтекстноеМеню + 217 + true + + Label + true + true + false + true + + Left + + + + СмТакже + 198 + + СмТакжеКолонка1 + 199 + true + true + + true + + false + + СмТакжеКолонка1РасширеннаяПодсказка + 298 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СмТакжеКолонка2 + 208 + true + true + + true + + false + + СмТакжеКолонка2РасширеннаяПодсказка + 299 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + СмТакжеКолонка3 + 215 + true + true + + true + + + System.DefaultGUIFont + true + false + false + false + + false + + СмТакжеКолонка3РасширеннаяПодсказка + 300 + 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 + См также + + false + + СмТакжеРасширеннаяПодсказка + 297 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + Equal + auto + Auto + Auto + + + + СмТакжеДекорация + 218 + true + true + + true + + + СмТакжеДекорацияРасширеннаяПодсказка + 301 + Label + true + true + + Left + + + + СмТакжеДекорацияКонтекстноеМеню + 219 + true + + Label + true + true + false + true + + Left + + + + СсылкаВсеОтчеты + 261 + true + true + + true + + + СсылкаВсеОтчетыРасширеннаяПодсказка + 302 + Label + true + true + + Left + + + Hyperlink + Form.Command.ВсеОтчеты + Normal + Auto + true + true + UserCmds + + Style.ВидимыйВариантОтчета + + Auto + + true true true - - System.DefaultGUIFont - 12.0 - true - false - false - false - true + false - ГруппаСмТакжеРасширеннаяПодсказка - 24 + КолонкиРасширеннаяПодсказка + 281 Label true true @@ -188,63 +1320,47 @@ Vertical Auto - WeakSeparation true true Auto Auto - - ОбщийСписокВариантовОтчетов - 21 - - <key>ru</key> - <value>Все отчеты...</value> - - true - true - - true - - - ОбщийСписокВариантовОтчетовРасширеннаяПодсказка - 27 - Label - true - true - - Left - - - Hyperlink - Form.Command.ОбщийСписокВариантовОтчетов - Normal - Auto - true - true - UserCmds - Auto - None false ФормаКоманднаяПанель -1 - Left + Right - ChoiceProcessing - ОбработкаВыбора + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере NotificationProcessing ОбработкаОповещения + + OnOpen + ПриОткрытии + + + BeforeClose + ПередЗакрытием + + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + OnCreateAtServer ПриСозданииНаСервере + + OnClose + ПриЗакрытии + Abort Cancel Close @@ -257,6 +1373,7 @@ SaveValues Yes DontBlock + Use true true Vertical @@ -267,34 +1384,13 @@ auto true - СписокПодсистем + РазделИмя <key>ru</key> - <value>Список подсистем</value> + <value>Раздел имя</value> 1 - ValueList - - - true - - - true - - - - - - - Подсистемы - - <key>ru</key> - <value>Подсистемы</value> - - 2 - - ValueList String @@ -306,12 +1402,32 @@ - ГруппироватьВарианты + ДобавленоЭлементов <key>ru</key> - <value>Группировать варианты</value> + <value>Добавлено элементов</value> 3 + + Number + + 10 + + + + true + + + true + + + + РежимНастройки + + <key>ru</key> + <value>Режим настройки</value> + + 4 Boolean @@ -323,15 +1439,14 @@ - НеВыводить + ЦветСкрытыхВариантов <key>ru</key> - <value>Не выводить</value> + <value>Цвет скрытых вариантов</value> - 4 + 5 - String - + Color true @@ -341,15 +1456,14 @@ - ИмяФормыОтчетов + ЦветВидимыхВариантов <key>ru</key> - <value>Имя формы отчетов</value> + <value>Цвет видимых вариантов</value> 6 - String - + Color true @@ -359,15 +1473,14 @@ - КартинкаФормы + ШрифтЖирный <key>ru</key> - <value>Картинка формы</value> + <value>Шрифт жирный</value> 7 - String - + Font true @@ -377,30 +1490,10 @@ - ПутиПодсистемы + ДобавленныеВарианты <key>ru</key> - <value>Пути подсистемы</value> - - 8 - - ValueList - - - true - - - true - - - - - - - ЗначениеПараметровКоманд - - <key>ru</key> - <value>Значение параметров команд</value> + <value>Добавленные варианты</value> 9 @@ -413,12 +1506,51 @@ true - Ключ + Ссылка <key>ru</key> - <value>Ключ</value> + <value>Ссылка</value> 1 + + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + Отчет + + <key>ru</key> + <value>Отчет</value> + + 2 + + String + CatalogRef.ДополнительныеОтчетыИОбработки + CatalogRef.ИдентификаторыОбъектовМетаданных + + 1000 + + + + true + + + true + + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 3 String @@ -431,18 +1563,293 @@ - ИндексПозицииЭлемента + Описание <key>ru</key> - <value>Индекс позиции элемента</value> + <value>Описание</value> - 2 + 4 - Number - - 5 - true - + String + + + + true + + + true + + + + КлючВарианта + + <key>ru</key> + <value>Ключ варианта</value> + + 5 + + String + + + + true + + + true + + + + Подсистема + + <key>ru</key> + <value>Подсистема</value> + + 6 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + Важный + + <key>ru</key> + <value>Важный</value> + + 7 + + Boolean + + + true + + + true + + + + СмТакже + + <key>ru</key> + <value>См также</value> + + 8 + + Boolean + + + true + + + true + + + + БезГруппы + + <key>ru</key> + <value>Без группы</value> + + 9 + + Boolean + + + true + + + true + + + + Видимость + + <key>ru</key> + <value>Видимость</value> + + 10 + + Boolean + + + true + + + true + + + + БыстрыйДоступ + + <key>ru</key> + <value>Быстрый доступ</value> + + 11 + + Boolean + + + true + + + true + + + + ГруппаУровня2Имя + + <key>ru</key> + <value>Группа уровня2 имя</value> + + 12 + + String + + + + true + + + true + + + + НадписьИмя + + <key>ru</key> + <value>Надпись имя</value> + + 13 + + String + + + + true + + + true + + + + ИзмененПользователем + + <key>ru</key> + <value>Изменен пользователем</value> + + 14 + + Boolean + + + true + + + true + + + + ГруппирующаяСущность + + <key>ru</key> + <value>Группирующая сущность</value> + + 15 + + String + + + + true + + + true + + + + ИмяОтчета + + <key>ru</key> + <value>Имя отчета</value> + + 16 + + String + + + + true + + + true + + + + Дополнительный + + <key>ru</key> + <value>Дополнительный</value> + + 17 + + Boolean + + + true + + + true + + + + СвоиНастройки + + <key>ru</key> + <value>Свои настройки</value> + + 18 + + Boolean + + + true + + + true + + + + Автор + + <key>ru</key> + <value>Автор</value> + + 19 + + CatalogRef.Пользователи + + + true + + + true + + + + СкрытОтбором + + <key>ru</key> + <value>Скрыт отбором</value> + + 20 + + String + true @@ -453,13 +1860,317 @@ - МассивПараметровКомманд + ПостоянныеРеквизиты <key>ru</key> - <value>Массив параметров комманд</value> + <value>Постоянные реквизиты</value> + + 14 + + ValueList + + + true + + + true + + + + + + + ПостоянныеКоманды + + <key>ru</key> + <value>Постоянные команды</value> + + 2 + + ValueList + + + true + + + true + + + + + + + ВебКлиент + + <key>ru</key> + <value>Веб клиент</value> + + 13 + + Boolean + + + true + + + true + + + + ИмяИконкиБыстрогоДоступа + + <key>ru</key> + <value>Имя иконки быстрого доступа</value> + + 15 + + String + + + + true + + + true + + + + КартинкаБыстрыйДоступ + + <key>ru</key> + <value>Картинка быстрый доступ</value> 10 - + + Picture + + + true + + + true + + + + ОтборАвтор + + <key>ru</key> + <value>Автор</value> + + 8 + + CatalogRef.Пользователи + + + true + + + true + + + ОтборАвтор + + + + ОтборНаименование + + <key>ru</key> + <value>Наименование</value> + + 11 + + String + + + + true + + + true + + + ОтборНаименование + + + + РазделСсылка + + <key>ru</key> + <value>Раздел ссылка</value> + + 16 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + Подсистемы + + <key>ru</key> + <value>Подсистемы</value> + + 12 + + ValueTable + + + true + + + true + + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 1 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 8 + + String + + 256 + + + + true + + + true + + + + Имя + + <key>ru</key> + <value>Имя</value> + + 9 + + String + + 512 + + + + true + + + true + + + + ПолноеИмя + + <key>ru</key> + <value>Полное имя</value> + + 2 + + String + + + + true + + + true + + + + Приоритет + + <key>ru</key> + <value>Приоритет</value> + + 3 + + String + + 100 + + + + true + + + true + + + + НомерЭлемента + + <key>ru</key> + <value>Номер элемента</value> + + 4 + + Number + + 10 + + + + true + + + true + + + + ИмяЭлемента + + <key>ru</key> + <value>Имя элемента</value> + + 5 + + String + + 512 + + + + true + + + true + + + + + ЦветГруппыВариантовОтчетов + + <key>ru</key> + <value>Цвет группы вариантов отчетов</value> + + 18 + + Color + true @@ -468,50 +2179,214 @@ - ОбщийСписокВариантовОтчетов + Настроить <key>ru</key> - <value>Полный список отчетов</value> + <value>Настроить</value> + + 1 + + ru + Настроить видимость и быстрый доступ к отчетам данного раздела + + + true + + F2 + + StdPicture.CustomizeForm + + + + Настроить + + + TextPicture + Auto + Auto + + + ПереместитьВБыстрыйДоступ + + <key>ru</key> + <value>Переместить в быстрый доступ</value> 2 ru - Общий список вариантов отчетов + Переместить в быстрый доступ + + + true + + + CommonPicture.БыстрыйДоступДобавить + + + + ПереместитьВБыстрыйДоступ + + + true + Auto + Auto + + + УбратьИзБыстрогоДоступа + + <key>ru</key> + <value>Убрать из быстрого доступа</value> + + 3 + + ru + Убрать из быстрого доступа + + + true + + + CommonPicture.БыстрыйДоступУдалить + + + + УбратьИзБыстрогоДоступа + + + Auto + Auto + + + Изменить + + <key>ru</key> + <value>Изменить</value> + + 5 + + ru + Изменить + + + true + + + StdPicture.Change + + + + Изменить + + + Auto + Auto + + + СброситьНастройки + + <key>ru</key> + <value>Сбросить настройки</value> + + 6 + + ru + Сбросить настройки видимости и быстрого доступа к отчетам данного раздела + + + true + + + StdPicture.InputFieldClear + + + + СброситьНастройки + + + TextPicture + Auto + Auto + + + СохранитьИзменения + + <key>ru</key> + <value>Сохранить изменения</value> + + 13 + + ru + Завершить настройку панели отчетов и вернуться в нормальный режим (режим просмотра) + + + true + + + StdPicture.SaveValues + + + + СохранитьИзменения + + + TextPicture + Auto + Auto + + + ОтменитьИзменения + + <key>ru</key> + <value>Отменить</value> + + 14 + + ru + Отменить изменения true - ОбщийСписокВариантовОтчетов + ОтменитьИзменения + + + TextPicture + Auto + Auto + + + ВсеОтчеты + + <key>ru</key> + <value>Все отчеты...</value> + + 4 + + ru + Все отчеты + + + true + + + + ВсеОтчеты Auto Auto - Подсистемы + ИмяРаздела - ValueList String - 500 + 256 - - НеВыводить - - ValueList - - - - КартинкаФормы - - String - - - diff --git a/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html new file mode 100644 index 000000000..bfa9c3761 --- /dev/null +++ b/SSL/src/CommonForms/ПанельОтчетов/Help/ru.html @@ -0,0 +1,23 @@ + +

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

            +

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

            +

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

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

             

            +

            В режиме настройки:

            +

            Доступны быстрые отборы по наименованию и автору.

            +

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

            +

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

            +

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

            + + + + +
            +
          • Сохранить изменения
          • Сохраняет изменения и переводит панель отчетов в режим просмотра.
            +
          • Отменить
          • Переводит панель отчетов в режим просмотра без сохранения изменений.
            +
          • Настроить (F2)
          • Выводит запрос на сохранение изменений и переводит панель отчетов в режим просмотра.
            +
          • Сбросить настройки
          • Позволяет сбросить все настройки текущего пользователя в панели отчетов данного раздела.
            \ No newline at end of file diff --git a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl index fc1430c29..b9b1974de 100644 --- a/SSL/src/CommonForms/ПанельОтчетов/Module.bsl +++ b/SSL/src/CommonForms/ПанельОтчетов/Module.bsl @@ -3,638 +3,1045 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - Подсистемы = Параметры.Подсистемы; - ИмяФормыОтчетов = Параметры.ИмяФормы; - КартинкаФормы = Параметры.КартинкаФормы; - ГруппироватьВарианты = истина; - - Заголовок = Параметры.ИмяФормы; - Если Параметры.КартинкаФормы <> "" тогда - Элементы.КартинкаОтчета.Картинка = БиблиотекаКартинок[Параметры.КартинкаФормы]; - Элементы.КартинкаОтчета.Видимость = истина; - КонецЕсли; + КартинкаБыстрыйДоступ = БиблиотекаКартинок.БыстрыйДоступ; - Если ТипЗнч(Параметры.Подсистемы) = Тип("СписокЗначений") тогда - ПутиПодсистемы = Параметры.Подсистемы; + РазделИмя = Параметры.ИмяРаздела; + РазделМетаданные = Метаданные.Подсистемы.Найти(РазделИмя); + РазделСсылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(РазделМетаданные); + + Если Параметры.Свойство("Заголовок") Тогда + Заголовок = Параметры.Заголовок; Иначе - ПутиПодсистемы = Новый СписокЗначений; - ПутиПодсистемы.Добавить(Параметры.Подсистемы); + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчеты раздела ""%1""'"), + РазделМетаданные.Представление() + ); КонецЕсли; - ОбновитьПанельОтчетов(Отказ); + ЭтаФорма.КлючНазначенияИспользования = "Раздел_" + Строка(РазделСсылка.УникальныйИдентификатор()); -КонецПроцедуры + ВсеПодсистемы = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); + Найденные = ВсеПодсистемы.Строки.НайтиСтроки(Новый Структура("РазделСсылка", РазделСсылка), Истина); + Для Каждого СтрокаДерева Из Найденные Цикл + СтрокаТаблицы = Подсистемы.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, СтрокаДерева); + СтрокаТаблицы.ИмяЭлемента = СтрЗаменить(СтрокаТаблицы.ПолноеИмя, ".", "_"); + СтрокаТаблицы.НомерЭлемента = 0; + КонецЦикла; + + ЦветСкрытыхВариантов = ЦветаСтиля.СкрытыйВариантОтчета; + ЦветВидимыхВариантов = ЦветаСтиля.ВидимыйВариантОтчета; + ЦветГруппыВариантовОтчетов = ЦветаСтиля.ГруппаВариантовОтчетов; + ШрифтЖирный = Новый Шрифт(, , Истина); + + НаборРеквизитов = ПолучитьРеквизиты(); + Для Каждого Реквизит Из НаборРеквизитов Цикл + ПостоянныеРеквизиты.Добавить(Реквизит.Имя); + КонецЦикла; + + Для Каждого Команда Из Команды Цикл + ПостоянныеКоманды.Добавить(Команда.Имя); + КонецЦикла; + + ПерерисоватьПанельОтчетов(Ложь, Ложь); +КонецПроцедуры &НаКлиенте -Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) - - Если ВыбранноеЗначение <> Неопределено тогда - УстановитьВидимостьВариантовОтчета(ВыбранноеЗначение); - КонецЕсли; - +Процедура ПриОткрытии(Отказ) + #Если ВебКлиент Тогда + ВебКлиент = Истина; + #Иначе + ВебКлиент = Ложь; + #КонецЕсли КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - - Если ИмяСобытия = "Запись_ХранилищеВариантовОтчетов" тогда - ОбновитьПанельОтчетов(); + Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Тогда + СохранитьНастройки = Ложь; + ОставитьИзмененияВНастройках = РежимНастройки; + ПерерисоватьПанельОтчетов(СохранитьНастройки, ОставитьИзмененияВНастройках); КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки); + ОтборНаименованиеСписокВыбора = Настройки.Получить("ОтборНаименованиеСписокВыбора"); + Если ТипЗнч(ОтборНаименованиеСписокВыбора) = Тип("Массив") Тогда + Элементы.ОтборНаименование.СписокВыбора.ЗагрузитьЗначения(ОтборНаименованиеСписокВыбора); + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + Настройки.Вставить("ОтборНаименованиеСписокВыбора", Элементы.ОтборНаименование.СписокВыбора.ВыгрузитьЗначения()); +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) + Если ВариантыОтчетовКлиент.СохранитьДанныеПроизвольнойФормы(Модифицированность, Отказ) Тогда + СохранитьПользовательскиеНастройки(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ПриЗакрытии() + Если ВариантыОтчетовКлиент.СохранитьДанныеПроизвольнойФормы(Модифицированность) Тогда + СохранитьПользовательскиеНастройки(); + КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура ОткрытьОтчет(Инициатор) +Процедура ВариантНажатие(Элемент) + Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя)); + Если Найденные.Количество() <> 1 Тогда + Возврат; + КонецЕсли; + Вариант = Найденные[0]; - Ключ = Инициатор.Имя; - Ключ = Лев(Ключ, Найти(Ключ, "_ГруппаРаздела_")-1); - Ключ = ВариантыОтчетовКлиент.ВосстановитьЗапрещенныеСимволы(Ключ); + // Открытие + Если Вариант.Дополнительный Тогда + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта); + ПараметрыОткрытия.Вставить("Вариант", Вариант.Ссылка); + ПараметрыОткрытия.Вставить("Отчет", Вариант.Отчет); + СтандартныеПодсистемыКлиентПереопределяемый.ОткрытьВариантДополнительногоОтчета(ПараметрыОткрытия); + + ИначеЕсли Не ЗначениеЗаполнено(Вариант.ИмяОтчета) Тогда + + Предупреждение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно открыть + |вариант отчета ""%1"", + |так как не заполнено имя отчета.'"), + Вариант.Наименование + ) + ); + + Иначе + + ПараметрыОткрытия = Новый Структура; + ПараметрыОткрытия.Вставить("КлючВарианта", Вариант.КлючВарианта); + ПараметрыОткрытия.Вставить("Раздел", РазделСсылка); + Уникальность = "Отчет." + Вариант.ИмяОтчета + "/КлючВарианта." + Вариант.КлючВарианта; + ОткрытьФорму("Отчет." + Вариант.ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность); + + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВидимостьВариантаПриИзменении(Элемент) + Флажок = Элемент; + Показать = ЭтаФорма[Флажок.Имя]; - ПозицияВарианта = Найти(Ключ, "\"); - ИмяОтчета = Лев(Ключ, ПозицияВарианта-1); - КлючВарианта = Прав(Ключ, СтрДлина(Ключ)-ПозицияВарианта); + НадписьИмя = Сред(Флажок.Имя, СтрДлина("Флажок_")+1); + Элемент = Элементы.Найти(НадписьИмя); + Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", НадписьИмя)); + Если Найденные.Количество() <> 1 ИЛИ Элемент = Неопределено Тогда + Возврат; + КонецЕсли; + Вариант = Найденные[0]; - ПараметрыОтчета = Новый Структура("КлючВарианта", КлючВарианта); - - СтандартнаяОбработка = истина; - - ВариантыОтчетовКлиентПереопределяемый.ПередОткрытиемФормыОтчета(Ключ, ПараметрыОтчета, СтандартнаяОбработка); - - Если СтандартнаяОбработка тогда - Если ИмяОтчета = "Отчет.ДополнительнаяКоманда" тогда - ПараметрКоманды = ВариантыОтчетовКлиент.ПолучитьПараметрыКоманды(ЗначениеПараметровКоманд, МассивПараметровКомманд, КлючВарианта); - Если ПараметрКоманды <> Неопределено тогда - ВариантыОтчетовКлиентПереопределяемый.ВыполнитьВнешнююКоманду(КлючВарианта, ПараметрКоманды); + ПоказатьСкрытьВариант(Вариант, Элемент, Показать); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборНаименованиеПриИзменении(Элемент) + Если ЗначениеЗаполнено(ОтборНаименование) Тогда + СписокВыбора = Элементы.ОтборНаименование.СписокВыбора; + ЭлементСписка = СписокВыбора.НайтиПоЗначению(ОтборНаименование); + Если ЭлементСписка = Неопределено Тогда + СписокВыбора.Вставить(0, ОтборНаименование); + Если СписокВыбора.Количество() > 10 Тогда + СписокВыбора.Удалить(10); КонецЕсли; Иначе - ОткрытьФорму(ИмяОтчета + ".Форма", ПараметрыОтчета, , Ключ); + Индекс = СписокВыбора.Индекс(ЭлементСписка); + Если Индекс <> 0 Тогда + СписокВыбора.Сдвинуть(Индекс, -Индекс); + КонецЕсли; КонецЕсли; + ТекущийЭлемент = Элементы.ОтборНаименование; КонецЕсли; + ПерерисоватьПанельОтчетов(Ложь, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура ОтборАвторПриИзменении(Элемент) + ПерерисоватьПанельОтчетов(Ложь, Истина); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте -Процедура ОбщийСписокВариантовОтчетов(Команда) +Процедура Настроить(Команда) + РежимНастройки = НЕ РежимНастройки; + СохранитьНастройки = Ложь; + Если НЕ РежимНастройки И Модифицированность Тогда + ТекстВопроса = НСтр("ru = 'Настройки расположения отчетов были изменены. + |Сохранить изменения?'"); + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Да Тогда + СохранитьНастройки = Истина; + КонецЕсли; + КонецЕсли; - ПараметрыФормы = Новый Структура("Подсистемы, ИмяФормы, КартинкаФормы"); + ПерерисоватьПанельОтчетов(СохранитьНастройки, Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьИзменения(Команда) + РежимНастройки = Ложь; + ПерерисоватьПанельОтчетов(Истина, Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ОтменитьИзменения(Команда) + РежимНастройки = Ложь; + ПерерисоватьПанельОтчетов(Ложь, Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура ПереместитьВБыстрыйДоступ(Команда) + Если ВебКлиент Тогда + Элемент = Элементы.Найти(Сред(Команда.Имя, Найти(Команда.Имя, "_")+1)); + Иначе + Элемент = ТекущийЭлемент; + КонецЕсли; + Если ТипЗнч(Элемент) <> Тип("ДекорацияФормы") Тогда + Возврат; + КонецЕсли; - ПараметрыФормы.Подсистемы = Подсистемы; - ПараметрыФормы.ИмяФормы = НСтр("ru = 'Все'") +" "+ Нрег(ИмяФормыОтчетов); - ПараметрыФормы.КартинкаФормы = КартинкаФормы; + Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя)); + Если Найденные.Количество() <> 1 Тогда + Возврат; + КонецЕсли; + Вариант = Найденные[0]; - СтруктураПараметров = ОткрытьФорму("ОбщаяФорма.ВсеОтчеты", ПараметрыФормы, ЭтаФорма); + ДобавитьУбратьВариантИзБыстрогоДоступа(Вариант, Элемент, Истина); +КонецПроцедуры + +&НаКлиенте +Процедура УбратьИзБыстрогоДоступа(Команда) + Если ВебКлиент Тогда + Элемент = Элементы.Найти(Сред(Команда.Имя, Найти(Команда.Имя, "_")+1)); + Иначе + Элемент = ТекущийЭлемент; + КонецЕсли; + Если ТипЗнч(Элемент) <> Тип("ДекорацияФормы") Тогда + Возврат; + КонецЕсли; + Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя)); + Если Найденные.Количество() <> 1 Тогда + Возврат; + КонецЕсли; + Вариант = Найденные[0]; + + ДобавитьУбратьВариантИзБыстрогоДоступа(Вариант, Элемент, Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура Изменить(Команда) + Если ВебКлиент Тогда + Элемент = Элементы.Найти(Сред(Команда.Имя, Найти(Команда.Имя, "_")+1)); + Иначе + Элемент = ТекущийЭлемент; + КонецЕсли; + Если ТипЗнч(Элемент) <> Тип("ДекорацияФормы") Тогда + Возврат; + КонецЕсли; + + Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", Элемент.Имя)); + Если Найденные.Количество() <> 1 Тогда + Возврат; + КонецЕсли; + Вариант = Найденные[0]; + + ОткрытьЗначение(Вариант.Ссылка); +КонецПроцедуры + +&НаКлиенте +Процедура СброситьНастройки(Команда) + ТекстВопроса = НСтр("ru = 'Сбросить настройки расположения отчетов?'"); + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Нет); + + Если Ответ = КодВозвратаДиалога.Да Тогда + СброситьНастройкиИПерерисоватьФорму(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВсеОтчеты(Команда) + ФормаПараметры = Новый Структура("РазделСсылка", РазделСсылка); + ОткрытьФорму("Справочник.ВариантыОтчетов.ФормаСписка", ФормаПараметры); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаСервере -Процедура ОбновитьПанельОтчетов(Отказ = ложь) - - МассивЭлементов = Новый Массив; - - Для каждого ЭлементГруппыСсылка из Элементы.ГруппаОсновная.ПодчиненныеЭлементы Цикл - Если ЭлементГруппыСсылка.Имя = "КартинкаОтчета" тогда - Продолжить; - КонецЕсли; - МассивЭлементов.Добавить(ЭлементГруппыСсылка); - КонецЦикла; - - Для каждого ЭлементГруппыСсылка из Элементы.ГруппаСмТакжеСпискиОтчетов.ПодчиненныеЭлементы Цикл - МассивЭлементов.Добавить(ЭлементГруппыСсылка); - КонецЦикла; - - Для каждого ЭлементГруппыСсылка из МассивЭлементов Цикл - Элементы.Удалить(ЭлементГруппыСсылка); - КонецЦикла; - - МассивКоманд = Новый Массив; - - Для каждого Команда из Команды Цикл - Если Команда.Имя = "ОбщийСписокВариантовОтчетов" тогда - Продолжить; - КонецЕсли; - МассивКоманд.Добавить(Команда); - КонецЦикла; - - Для каждого Команда из МассивКоманд Цикл - Команды.Удалить(Команда); - КонецЦикла; - - СписокОтчетов = ВариантыОтчетовПереопределяемый.СписокОтчетовПоддерживаемыхПодсистемой(); - КоличествоОтчетов = СписокОтчетов.Количество(); - Для Номер = 1 По КоличествоОтчетов Цикл - Индекс = КоличествоОтчетов - Номер; - ОтчетИмя = СписокОтчетов[Индекс]; - ОтчетИмя = Сред(ОтчетИмя, Найти(ОтчетИмя, ".")+1); - ОтчетМетаданные = Метаданные.Отчеты.Найти(ОтчетИмя); - Если ОтчетМетаданные = Неопределено ИЛИ НЕ ПравоДоступа("Просмотр", ОтчетМетаданные) Тогда - СписокОтчетов.Удалить(Индекс); +//////////////////////////////////////////////////////////////////////////////// +// Клиент + +&НаКлиенте +Процедура ПоказатьСкрытьВариант(Вариант, Элемент, Показать) + Модифицированность = Истина; + Вариант.Видимость = Показать; + Вариант.ИзмененПользователем = Истина; + Вариант.СвоиНастройки = Истина; + Элемент.ЦветТекста = ?(Показать, ЦветВидимыхВариантов, ЦветСкрытыхВариантов); + ЭтаФорма["Флажок_"+ Вариант.НадписьИмя] = Показать; + Если Вариант.Важный Тогда + Если Показать Тогда + Элемент.Шрифт = ШрифтЖирный; Иначе - ФункциональнаяОпцияПараметры = Новый Структура; - ОтчетСодержится = Ложь; - ОтчетДоступен = Ложь; - Для Каждого ФункциональнаяОпцияМетаданные Из Метаданные.ФункциональныеОпции Цикл - Если ФункциональнаяОпцияМетаданные.Состав.Содержит(ОтчетМетаданные) Тогда - ОтчетСодержится = Истина; - ФункциональнаяОпция = ПолучитьФункциональнуюОпцию(ФункциональнаяОпцияМетаданные.Имя, ФункциональнаяОпцияПараметры); - Если ФункциональнаяОпция = Истина Тогда - ОтчетДоступен = Истина; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Если ОтчетСодержится И НЕ ОтчетДоступен Тогда - СписокОтчетов.Удалить(Индекс); - КонецЕсли; + Элемент.Шрифт = Новый Шрифт; КонецЕсли; - КонецЦикла; - - ДеревоПодсистем = Новый ДеревоЗначений; - ДеревоПодсистем.Колонки.Добавить("Подсистема"); - ДеревоПодсистем.Колонки.Добавить("Название"); - - СписокПодсистем = ВариантыОтчетов.ПолучитьСписокПодсистем(ПутиПодсистемы, ДеревоПодсистем); - Если СписокПодсистем.Количество() = 0 тогда - ВызватьИсключение НСТр("ru = 'Некорректное значение параметра формы Подсистемы.'"); - Отказ = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьУбратьВариантИзБыстрогоДоступа(Вариант, Элемент, БыстрыйДоступ) + Модифицированность = Истина; + Если Вариант.БыстрыйДоступ = БыстрыйДоступ Тогда Возврат; КонецЕсли; - МаксимальнаяДлинна = 0; + // Регистрация результата для записи + Вариант.БыстрыйДоступ = БыстрыйДоступ; + Вариант.ИзмененПользователем = Истина; + Вариант.СвоиНастройки = Истина; - Для каждого ЭлементСпПодсистема из СписокПодсистем Цикл - МаксимальнаяДлинна = Макс(СтрДлина(ЭлементСпПодсистема.Значение), МаксимальнаяДлинна); - КонецЦикла; + // Связанное действие: если добавляемый в быстрый доступ вариант не видим - показываем его + Если БыстрыйДоступ И НЕ Вариант.Видимость Тогда + ПоказатьСкрытьВариант(Вариант, Элемент, Истина); + КонецЕсли; - - // Получить варианты отчетов с разделами - ТЗ = "ВЫБРАТЬ - | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ, - | ВариантыОтчетов.Наименование КАК Представление, - | ВариантыОтчетов.Описание, - | ВариантыОтчетов.БыстрыйДоступ, - | ВариантыОтчетов.Наименование КАК Сортировка, - | ВариантыОтчетов.ТипВариантаОтчета, - | ВариантыОтчетовПодсистемы.Подсистема - |ИЗ - | Справочник.ВариантыОтчетов.Подсистемы КАК ВариантыОтчетовПодсистемы - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ПО ВариантыОтчетовПодсистемы.Ссылка = ВариантыОтчетов.Ссылка - |ГДЕ - | (НЕ ВариантыОтчетов.ПометкаУдаления) - | И ВЫРАЗИТЬ(ВариантыОтчетовПодсистемы.Подсистема КАК Строка("+Формат(МаксимальнаяДлинна, "ЧГ=0")+"))В (&Подсистемы) - | И ВариантыОтчетов.КлючОбъекта В (&СписокОтчетов) - | - |УПОРЯДОЧИТЬ ПО - | Сортировка"; - - Запрос = Новый Запрос(ТЗ); - Запрос.УстановитьПараметр("Подсистемы", СписокПодсистем); - Запрос.УстановитьПараметр("СписокОтчетов", СписокОтчетов); - УстановитьПривилегированныйРежим(истина); - ТаблицаВариантов = Запрос.Выполнить().Выгрузить(); - УстановитьПривилегированныйРежим(ложь); + // Визуальный результат + ПереместитьВариантБыстрогоДоступа(Вариант.ПолучитьИдентификатор(), БыстрыйДоступ); +КонецПроцедуры - // роли вариантов - ТЗ = "ВЫБРАТЬ - | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ, - | ИсключенныеПользователи.Пользователь КАК Пользователь, - | НЕ ИсключенныеПользователи.Ссылка.БыстрыйДоступ КАК БыстрыйДоступ - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.ИсключенияБыстрогоДоступа КАК ИсключенныеПользователи - | ПО ВариантыОтчетов.Ссылка = ИсключенныеПользователи.Ссылка - |ГДЕ - | (НЕ ВариантыОтчетов.ПометкаУдаления) - | И ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта В (&Ключи) - | И ВариантыОтчетов.КлючОбъекта В (&СписокОтчетов) - | И (ИсключенныеПользователи.Пользователь = Пользователь)"; - - Запрос.Текст = ТЗ; - Запрос.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); - Запрос.УстановитьПараметр("Ключи", ТаблицаВариантов.ВыгрузитьКолонку("Ключ")); - УстановитьПривилегированныйРежим(истина); - ТаблицаПользователей = Запрос.Выполнить().Выгрузить(); - УстановитьПривилегированныйРежим(ложь); - - ТаблицаВариантов.Колонки.Добавить("Группировка", Новый ОписаниеТипов(,, Новый КвалификаторыСтроки())); - - СписокГруппировок = Новый ТаблицаЗначений; - СписокГруппировок.Колонки.Добавить("Группировка"); - СписокГруппировок.Колонки.Добавить("ГруппировкаПредставление"); - - Для каждого СтрокаПодсистемы из ДеревоПодсистем.Строки Цикл - ДанныеГруппировки = СписокГруппировок.Добавить(); - ДанныеГруппировки.Группировка = СтрокаПодсистемы.Подсистема; - ДанныеГруппировки.ГруппировкаПредставление = ""; - Для каждого СтрокаГруппировки из СтрокаПодсистемы.Строки Цикл - ДанныеГруппировки = СписокГруппировок.Добавить(); - ДанныеГруппировки.Группировка = СтрокаГруппировки.Подсистема; - ДанныеГруппировки.ГруппировкаПредставление = СтрокаГруппировки.Название; - КонецЦикла; - КонецЦикла; - - // Дерево вариантов - ГруппировкиВариантов = Новый Соответствие; - ГруппировкиВариантовСмТакже = Новый СписокЗначений; - - СгруппированныйСписокВариантовОтчетов = Новый ДеревоЗначений; - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Ключ"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Представление"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Описание"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Группировка"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("ГруппировкаПредставление"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("Сортировка"); - СгруппированныйСписокВариантовОтчетов.Колонки.Добавить("БыстрыйДоступ"); - - Если ГруппироватьВарианты тогда - Для каждого ГруппировкаВар из СписокГруппировок Цикл - Если Найти(ГруппировкаВар.Группировка, "СмТакже") > 0 тогда - Продолжить; - КонецЕсли; - СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить(); - СтрокаГруппировкиОтчета.Группировка = ГруппировкаВар.Группировка; - СтрокаГруппировкиОтчета.ГруппировкаПредставление = ГруппировкаВар.ГруппировкаПредставление; - ГруппировкиВариантов.Вставить(ГруппировкаВар.Группировка, СтрокаГруппировкиОтчета); - КонецЦикла; - КонецЕсли; - - СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить(); - СтрокаГруппировкиОтчета.Группировка = "ПрочиеИПользовательскиеВариантыОтчета"; - СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'Прочие'"); - ГруппировкиВариантов.Вставить("ПрочиеИПользовательскиеВариантыОтчета", СтрокаГруппировкиОтчета); - СтрокаФиксированнаяГруппировка = СтрокаГруппировкиОтчета; - - СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить(); - СтрокаГруппировкиОтчета.Группировка = "СмТакже"; - СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'См. также'"); - ГруппировкиВариантов.Вставить("СмТакже", СтрокаГруппировкиОтчета); - СтрокаГруппировкаСмТакже = СтрокаГруппировкиОтчета; - - СтрокаГруппировкиОтчета = СгруппированныйСписокВариантовОтчетов.Строки.Добавить(); - СтрокаГруппировкиОтчета.Группировка = "ДополнительныеОтчеты"; - СтрокаГруппировкиОтчета.ГруппировкаПредставление = НСТр("ru = 'Дополнительные отчеты'"); - ГруппировкиВариантов.Вставить("ДополнительныеОтчеты", СтрокаГруппировкиОтчета); - СтрокаГруппировкаДополнительныеОтчеты = СтрокаГруппировкиОтчета; - - ТаблицаДополнительныхКоманд = Новый ТаблицаЗначений; - ТаблицаДополнительныхКоманд.Колонки.Добавить("УникальныйИдентификатор"); - ТаблицаДополнительныхКоманд.Колонки.Добавить("Представление"); - ТаблицаДополнительныхКоманд.Колонки.Добавить("Описание"); - ТаблицаДополнительныхКоманд.Колонки.Добавить("БыстрыйДоступ"); - ТаблицаДополнительныхКоманд.Колонки.Добавить("ПараметрКоманды"); - - ВариантыОтчетовПереопределяемый.СписокДополнительныхКоманд(ТаблицаДополнительныхКоманд, ПутиПодсистемы); - - ПараметрыКоманд = Новый Массив; - - Если ТаблицаДополнительныхКоманд.Количество() > 0 Тогда - Индекс = 0; - Для Каждого СтрокаДополнительногоОтчета из ТаблицаДополнительныхКоманд Цикл - - СтрокаТаблицаВариантов = ТаблицаВариантов.Добавить(); - СтрокаТаблицаВариантов.Ключ = "Отчет.ДополнительнаяКоманда\"+СтрокаДополнительногоОтчета.УникальныйИдентификатор; - СтрокаТаблицаВариантов.Представление = СтрокаДополнительногоОтчета.Представление; - СтрокаТаблицаВариантов.Описание = СтрокаДополнительногоОтчета.Описание; - СтрокаТаблицаВариантов.БыстрыйДоступ = СтрокаДополнительногоОтчета.БыстрыйДоступ; - СтрокаТаблицаВариантов.Сортировка = СтрокаДополнительногоОтчета.Представление; - СтрокаТаблицаВариантов.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ДополнительнаяКоманда; - СтрокаТаблицаВариантов.Подсистема = "ДополнительныеОтчеты"; - - СтрокаЗначенияКоманды = ЗначениеПараметровКоманд.Добавить(); - СтрокаЗначенияКоманды.Ключ = СтрокаДополнительногоОтчета.УникальныйИдентификатор; - СтрокаЗначенияКоманды.ИндексПозицииЭлемента = Индекс; - ПараметрыКоманд.Добавить(Новый ФиксированнаяСтруктура(СтрокаДополнительногоОтчета.ПараметрКоманды)); - Индекс = Индекс + 1; - - КонецЦикла; - КонецЕсли; - - МассивПараметровКомманд = Новый ФиксированныйМассив(ПараметрыКоманд); - - // Составим список отчетов - СоответствиеВариантовНомеруСортировки = Новый Соответствие; - - Для каждого СтрокаВариантаОтчета из ТаблицаВариантов Цикл - - Если НЕ ГруппироватьВарианты или НЕ ЗначениеЗаполнено(СтрокаВариантаОтчета.Подсистема ) тогда - СтрокаВариантаОтчета.Группировка = "ПрочиеИПользовательскиеВариантыОтчета"; - Иначе - Если Найти(СтрокаВариантаОтчета.Подсистема, "СмТакже") > 0 тогда - СтрокаВариантаОтчета.Группировка = "СмТакже"; - ИначеЕсли СтрокаВариантаОтчета.Подсистема = СтрокаВариантаОтчета.Подсистема тогда - Для каждого ГруппировкаВараинта из ГруппировкиВариантов Цикл - Если СтрокаВариантаОтчета.Подсистема = ГруппировкаВараинта.Ключ тогда - СтрокаВариантаОтчета.Группировка = ГруппировкаВараинта.Ключ; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - СоответствиеВариантовНомеруСортировки.Вставить(СтрокаВариантаОтчета.Ключ, СтрокаВариантаОтчета.Сортировка); - КонецЦикла; - - Для каждого СтрокаВарианта из ТаблицаВариантов Цикл - - БыстрыйДоступ = СтрокаВарианта.БыстрыйДоступ; - СтрокиПользователи = ТаблицаПользователей.НайтиСтроки(Новый Структура("Ключ, Пользователь", СтрокаВарианта.Ключ, Пользователи.ТекущийПользователь())); - Для каждого СтрокаПользователи из СтрокиПользователи Цикл - БыстрыйДоступ = СтрокаПользователи.БыстрыйДоступ; - КонецЦикла; - - Если СтрокаВарианта.Группировка = Неопределено Тогда - НаборСтрок = СтрокаФиксированнаяГруппировка.Строки; - Иначе - НаборСтрок = ГруппировкиВариантов[СтрокаВарианта.Группировка].Строки; - КонецЕсли; - Если НаборСтрок.НайтиСтроки(Новый Структура("Ключ", СтрокаВарианта.Ключ)).Количество() = 0 Тогда - СтрокаВариантаОтчета = НаборСтрок.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаВариантаОтчета, СтрокаВарианта); - Если СтрокаВарианта.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет Тогда - СтрокаВариантаОтчета.Ключ = СтрокаВарианта.Ключ + "_Отчет_"; - КонецЕсли; - СтрокаВариантаОтчета.БыстрыйДоступ = БыстрыйДоступ; - СтрокаВариантаОтчета.Сортировка = СоответствиеВариантовНомеруСортировки[СтрокаВарианта.Ключ]; - Если НЕ ЗначениеЗаполнено(СтрокаВариантаОтчета.Сортировка) Тогда - СтрокаВариантаОтчета.Сортировка = "ЯЯ9999999999999"; - КонецЕсли; - КонецЕсли; - - КонецЦикла; - - // Удалить лишние группировки - УдаляемыеГруппировки = Новый Массив; - Для каждого СтрокаГруппировки из СгруппированныйСписокВариантовОтчетов.Строки Цикл - Если СтрокаГруппировки.Строки.Количество() = 0 тогда - УдаляемыеГруппировки.Добавить(СтрокаГруппировки); - КонецЕсли; - КонецЦикла; - - Для каждого СтрокаГруппировки из УдаляемыеГруппировки Цикл - СгруппированныйСписокВариантовОтчетов.Строки.Удалить(СтрокаГруппировки); - КонецЦикла; - - // Вывести группировки отчета - Если СгруппированныйСписокВариантовОтчетов.Строки.Количество() = 1 тогда - СтрокаГруппировки = СгруппированныйСписокВариантовОтчетов.Строки[0]; - Элементы.ГруппаОсновная.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Элементы.ГруппаОсновная); - Иначе - Элементы.ГруппаОсновная.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; - Для каждого СтрокаГруппировки из СгруппированныйСписокВариантовОтчетов.Строки Цикл - - Если Найти(СтрокаГруппировки.Группировка, "СмТакже") > 0 тогда - Продолжить; - КонецЕсли; - - // Пропустить группу "См. также" - УИ = "ГруппаРаздела_" + СтрокаГруппировки.Группировка; - Группа = ДобавитьГруппу(УИ, Элементы.ГруппаОсновная, СтрокаГруппировки.ГруппировкаПредставление, истина); - ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Группа); - КонецЦикла; - КонецЕсли; - - Если СгруппированныйСписокВариантовОтчетов.Строки.Найти("СмТакже", "Группировка") <> Неопределено тогда - Элементы.ГруппаСмТакже.БыстрыйДоступ = Истина; - СтрокаГруппировки = СтрокаГруппировкаСмТакже; - Элементы.ГруппаСмТакжеСпискиОтчетов.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; - ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Элементы.ГруппаСмТакжеСпискиОтчетов); - КонецЕсли; - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера &НаСервере -Процедура ВывестиСслыкиНаВариантыОтчетов(СтрокаГруппировки, Группа) +Процедура ПереместитьВариантБыстрогоДоступа(Знач ВариантИдентификатор, Знач БыстрыйДоступ) + Вариант = ДобавленныеВарианты.НайтиПоИдентификатору(ВариантИдентификатор); + Элемент = Элементы.Найти(Вариант.НадписьИмя); - СтрокаГруппировки.Строки.Сортировать("Сортировка, Представление"); + Если БыстрыйДоступ Тогда + Элемент.Шрифт = ШрифтЖирный; + ГруппаДляПереноса = ПодгруппаСНаименьшимКоличествомЭлементов(Элементы.БыстрыйДоступ); + Если НЕ Элементы.БыстрыйДоступДекорация.Видимость Тогда + Элементы.БыстрыйДоступДекорация.Видимость = Истина; + КонецЕсли; + ИначеЕсли Вариант.СмТакже Тогда + Элемент.Шрифт = Новый Шрифт; + ГруппаДляПереноса = ПодгруппаСНаименьшимКоличествомЭлементов(Элементы.СмТакже); + ИначеЕсли Вариант.БезГруппы Тогда + Элемент.Шрифт = ?(Вариант.Важный, ШрифтЖирный, Новый Шрифт); + ГруппаДляПереноса = ПодгруппаСНаименьшимКоличествомЭлементов(Элементы.БезГруппы); + Иначе + Элемент.Шрифт = ?(Вариант.Важный, ШрифтЖирный, Новый Шрифт); + Найденные = Подсистемы.НайтиСтроки(Новый Структура("Ссылка", Вариант.Подсистема)); + Подсистема = Найденные[0]; + Если Подсистема.НомерЭлемента = 0 Тогда + Результат = ДобавитьГруппуУровня4(Элементы.СГруппойКолонка3, Подсистема); + ГруппаДляПереноса = Результат.ГруппаУровня4; + Иначе + ГруппаДляПереноса = Элементы.Найти(Подсистема.ИмяЭлемента + "_" + Формат(Подсистема.НомерЭлемента, "ЧГ=0")); + КонецЕсли; + КонецЕсли; - ИмяГруппировки = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(СтрокаГруппировки.Группировка); + Элементы.Переместить(Элемент.Родитель, ГруппаДляПереноса); - ИмяГруппировки = "_ГруппаРаздела_" + ИмяГруппировки; + КартинкаИмя = "Картинка_" + Вариант.НадписьИмя; + Картинка = Элементы.Найти(КартинкаИмя); + КартинкаВыведена = (Картинка <> Неопределено); + Если КартинкаВыведена <> БыстрыйДоступ Тогда + Если КартинкаВыведена Тогда + Элементы.Удалить(Картинка); + Иначе + Картинка = Элементы.Вставить(КартинкаИмя, Тип("ДекорацияФормы"), Элемент.Родитель, Элемент); + Картинка.Вид = ВидДекорацииФормы.Картинка; + Картинка.Ширина = 2; + Картинка.Высота = 1; + Картинка.Картинка = КартинкаБыстрыйДоступ; + Картинка.РастягиватьПоГоризонтали = Ложь; + Картинка.РастягиватьПоВертикали = Ложь; + КонецЕсли; + КонецЕсли; - Колонка1 = ДобавитьГруппу(ИмяГруппировки + "Колонки1", Группа, "Первая колонка", , ложь); - Колонка2 = ДобавитьГруппу(ИмяГруппировки + "Колонки2", Группа, "Вторая колонка", , ложь); - Колонка3 = ДобавитьГруппу(ИмяГруппировки + "Колонки3", Группа, "Третья колонка", , ложь); + ФлажокИмя = "Флажок_" + Вариант.НадписьИмя; + Флажок = Элементы.Найти(ФлажокИмя); + ФлажокВыведен = (Флажок <> Неопределено); + Если ФлажокВыведен = БыстрыйДоступ Тогда + Если ФлажокВыведен Тогда + Элементы.Удалить(Флажок); + + УдаляемыеРеквизиты = Новый Массив; + УдаляемыеРеквизиты.Добавить(ФлажокИмя); + ИзменитьРеквизиты(, УдаляемыеРеквизиты); + Иначе + РеквизитФормы = Новый РеквизитФормы(ФлажокИмя, Новый ОписаниеТипов("Булево"), , , Истина); + + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(РеквизитФормы); + ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + Флажок = Элементы.Вставить(ФлажокИмя, Тип("ПолеФормы"), Элемент.Родитель, Элемент); + Флажок.Вид = ВидПоляФормы.ПолеФлажка; + Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Флажок.УстановитьДействие("ПриИзменении", "ВидимостьВариантаПриИзменении"); + Флажок.ПутьКДанным = ФлажокИмя; + + ЭтаФорма[ФлажокИмя] = Вариант.Видимость; + КонецЕсли; + КонецЕсли; - КоличетвоВариантов = СтрокаГруппировки.Строки.Количество(); - - МинимальноКолВоВариантов = Цел(КоличетвоВариантов/3); - Остаток = КоличетвоВариантов - МинимальноКолВоВариантов*3; - - КоличествоВариантовВКолонке1 = МинимальноКолВоВариантов + ?(Остаток >= 1, 1, 0); - КоличествоВариантовВКолонке2 = МинимальноКолВоВариантов + ?(Остаток >= 2, 1, 0); - КоличествоВариантовВКолонке3 = МинимальноКолВоВариантов; - - Для Сч = 0 по КоличествоВариантовВКолонке1-1 Цикл - СтрокаСсылки = СтрокаГруппировки.Строки[Сч]; - ДобавитьСсылкуНаВариантОтчета( - СтрокаСсылки.Ключ + ИмяГруппировки, - СтрокаСсылки.Представление, - СтрокаСсылки.Описание, - Колонка1, - СтрокаСсылки.БыстрыйДоступ - ); - КонецЦикла; - - Для Сч = КоличествоВариантовВКолонке1 по КоличествоВариантовВКолонке1 + КоличествоВариантовВКолонке2-1 Цикл - СтрокаСсылки = СтрокаГруппировки.Строки[Сч]; - ДобавитьСсылкуНаВариантОтчета( - СтрокаСсылки.Ключ + ИмяГруппировки, - СтрокаСсылки.Представление, - СтрокаСсылки.Описание, - Колонка2, - СтрокаСсылки.БыстрыйДоступ - ); - КонецЦикла; - - Для Сч = КоличествоВариантовВКолонке1 + КоличествоВариантовВКолонке2 по КоличествоВариантовВКолонке1 + КоличествоВариантовВКолонке2 + КоличествоВариантовВКолонке3-1 Цикл - СтрокаСсылки = СтрокаГруппировки.Строки[Сч]; - ДобавитьСсылкуНаВариантОтчета( - СтрокаСсылки.Ключ + ИмяГруппировки, - СтрокаСсылки.Представление, - СтрокаСсылки.Описание, - Колонка3, - СтрокаСсылки.БыстрыйДоступ - ); - КонецЦикла; + НадписьКонтекстноеМеню = Элемент.КонтекстноеМеню; + Если НадписьКонтекстноеМеню <> Неопределено Тогда + КнопкаУбрать = Элементы.Найти("УбратьИзБыстрогоДоступа_" + Вариант.НадписьИмя); + КнопкаПереместить = Элементы.Найти("ПереместитьВБыстрыйДоступ_" + Вариант.НадписьИмя); + КнопкаУбрать.Видимость = БыстрыйДоступ; + КнопкаПереместить.Видимость = НЕ БыстрыйДоступ; + КонецЕсли; КонецПроцедуры &НаСервере -Функция ДобавитьГруппу(Имя, Родитель, Заголовок = "", Горизонтально = ложь, ОтображатьЗаголовок = истина) +Процедура СброситьНастройкиИПерерисоватьФорму() + РежимНастройки = Ложь; + Модифицированность = Ложь; + РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройкиПользователяВРазделе(РазделСсылка); + ПерерисоватьПанельОтчетов(Ложь, Ложь); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Сервер + +&НаСервере +Функция ДобавитьГруппуУровня4(ВГруппу, Знач ПодсистемаСсылкаИлиСтрока) + Результат = Новый Структура; - Имя = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(Имя); - - Группа = Элементы.Добавить(Имя, Тип("ГруппаФормы"), Родитель); - Группа.Вид = ВидГруппыФормы.ОбычнаяГруппа; - Группа.Заголовок = Заголовок; - Группа.ОтображатьЗаголовок = ОтображатьЗаголовок; - Если Группа.ОтображатьЗаголовок тогда - Группа.ШрифтЗаголовка = Новый Шрифт(Группа.ШрифтЗаголовка, , , истина); + // Поиск строки подсистемы по ссылке + Если ТипЗнч(ПодсистемаСсылкаИлиСтрока) = Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных") Тогда + Найденные = Подсистемы.НайтиСтроки(Новый Структура("Ссылка", ПодсистемаСсылкаИлиСтрока)); + ПодсистемаСтрока = Найденные[0]; + Иначе + ПодсистемаСтрока = ПодсистемаСсылкаИлиСтрока; КонецЕсли; - Группа.Отображение = ОтображениеОбычнойГруппы.Отступ; - Группа.Группировка = ?(Горизонтально, ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная, - ГруппировкаПодчиненныхЭлементовФормы.Вертикальная); - Группа.РастягиватьПоГоризонтали = Истина; - Группа.ШиринаПодчиненныхЭлементов = ШиринаПодчиненныхЭлементовФормы.Одинаковая; - Возврат Группа; + ПодсистемаСтрока.НомерЭлемента = ПодсистемаСтрока.НомерЭлемента + 1; + ГруппаУровня4Имя = ПодсистемаСтрока.ИмяЭлемента + "_" + Формат(ПодсистемаСтрока.НомерЭлемента, "ЧГ=0"); + + // Пустая декорация + Если ВГруппу.ПодчиненныеЭлементы.Количество() > 0 Тогда + ДекорацияИмя = "Декорация_" + ГруппаУровня4Имя; + Декорация = Элементы.Вставить(ДекорацияИмя, Тип("ДекорацияФормы"), ВГруппу); + Декорация.Заголовок = " "; + Результат.Вставить("Декорация", Декорация); + КонецЕсли; + + // Группа + ГруппаУровня4 = Элементы.Вставить(ГруппаУровня4Имя, Тип("ГруппаФормы"), ВГруппу); + ГруппаУровня4.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаУровня4.ЦветТекстаЗаголовка = ЦветГруппыВариантовОтчетов; + ГруппаУровня4.РастягиватьПоГоризонтали = Истина; + ГруппаУровня4.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаУровня4.ШрифтЗаголовка = ШрифтЖирный; + ГруппаУровня4.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ГруппаУровня4.Заголовок = ПодсистемаСтрока.Представление; + Результат.Вставить("ГруппаУровня4", ГруппаУровня4); + + Возврат Результат; КонецФункции &НаСервере -Процедура ДобавитьСсылкуНаВариантОтчета(Ключ, Представление, Описание, Родитель, БыстрыйДоступ) +Процедура ЗаполнитьПанельОтчетов() - ИмяОтчета = Ключ; - - Ключ = ВариантыОтчетов.ЗаменитьЗапрещенныеСимволы(Ключ); - - Если Представление <> "" И Найти(Ключ, "Отчет_Точка_ДополнительнаяКоманда") = 0 тогда - ПозицияВарианта = Найти(ИмяОтчета, "\"); - ИмяОтчета = Лев(ИмяОтчета, ПозицияВарианта-1); - ИмяОтчета = СтрЗаменить(ИмяОтчета, "Отчет.", ""); - - Отчет = Метаданные.Отчеты.Найти(ИмяОтчета); - Если Отчет = Неопределено тогда - Возврат; - КонецЕсли; - - ЕстьПравоПросмотра = ПравоДоступа("Просмотр", Отчет); - Если НЕ ЕстьПравоПросмотра тогда - Возврат; - КонецЕсли; - - ПараметрыФО = Новый Структура(""); - - ДоступенПоФоОпциям = ложь; - СодержитсяВФО = ложь; - Для каждого Опция из Метаданные.ФункциональныеОпции Цикл - - Если Опция.Состав.Найти(Отчет.Имя) = Неопределено тогда - Продолжить; - КонецЕсли; - - СодержитсяВФО = Истина; - - ЗначениеФО = ПолучитьФункциональнуюОпцию(Опция.Имя, ПараметрыФО); - Если ТипЗнч(ЗначениеФО) = Тип("Булево") тогда - Если ЗначениеФО тогда - ДоступенПоФоОпциям = истина; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - Иначе - СодержитсяВФО = ложь; - ДоступенПоФоОпциям = истина; - КонецЕсли; - - Если СодержитсяВФО И НЕ ДоступенПоФоОпциям тогда - Возврат; - КонецЕсли; - - НоваяНадпись = Элементы.Добавить(Ключ, Тип("ДекорацияФормы"), Родитель); - НоваяНадпись.Вид = ВидДекорацииФормы.Надпись; - НоваяНадпись.Гиперссылка = Истина; - НоваяНадпись.Заголовок = СокрЛП(Представление); - НоваяНадпись.Видимость = БыстрыйДоступ; - НоваяНадпись.РастягиватьПоГоризонтали = Истина; - НоваяНадпись.РастягиватьПоВертикали = Ложь; - НоваяНадпись.Высота = 1; - Если Представление <> "" Тогда - НоваяНадпись.УстановитьДействие("Нажатие", "ОткрытьОтчет"); - КонецЕсли; - -Конецпроцедуры - -&НаСервере -Процедура УстановитьВидимостьВариантовОтчета(СтруктураПараметров) - - СписокКлючей = СтруктураПараметров.СписокВариантов; - - ТЗ = "ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | ВариантыОтчетов.БыстрыйДоступ, - | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК Ключ + ТекстЗапроса = + "ВЫБРАТЬ + | Подсистемы.Ссылка, + | Подсистемы.Представление, + | Подсистемы.Приоритет + |ПОМЕСТИТЬ втПодсистемы |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | &Подсистемы КАК Подсистемы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ДобавленныеВарианты.Ссылка, + | ДобавленныеВарианты.Подсистема, + | ДобавленныеВарианты.Видимость, + | ДобавленныеВарианты.БыстрыйДоступ + |ПОМЕСТИТЬ втДобавленныеВарианты + |ИЗ + | &ДобавленныеВарианты КАК ДобавленныеВарианты |ГДЕ - | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта В (&Ключ)"; - - Запрос = Новый Запрос(ТЗ); - Запрос.УстановитьПараметр("Ключ", СписокКлючей); + | ДобавленныеВарианты.ИзмененПользователем = ИСТИНА + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | НастройкиРаздела.Ссылка КАК Ссылка, + | НастройкиРаздела.Ссылка.Отчет КАК Отчет, + | НастройкиРаздела.Ссылка.КлючВарианта КАК КлючВарианта, + | НастройкиРаздела.Ссылка.Наименование КАК Наименование, + | НастройкиРаздела.Ссылка.Автор КАК Автор, + | ВЫРАЗИТЬ(НастройкиРаздела.Ссылка.Описание КАК СТРОКА(1000)) КАК Описание, + | НастройкиРаздела.РазделИлиГруппа КАК Подсистема, + | втПодсистемы.Приоритет КАК ПодсистемаПриоритет, + | втПодсистемы.Представление КАК ПодсистемаПредставление, + | НастройкиРаздела.Важный КАК Важный, + | НастройкиРаздела.СмТакже КАК СмТакже, + | ВЫБОР + | КОГДА НастройкиРаздела.Ссылка.ТипОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыОтчетов.Дополнительный) + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК Дополнительный, + | ВЫБОР + | КОГДА НастройкиРаздела.РазделИлиГруппа = &РазделСсылка + | И НастройкиРаздела.СмТакже = ЛОЖЬ + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК БезГруппы, + | ЕСТЬNULL(втДобавленныеВарианты.Видимость, ЕСТЬNULL(НастройкиПользователя.Видимость, НастройкиРаздела.Ссылка.ВидимостьПоУмолчанию + | ИЛИ ВЫБОР + | КОГДА НастройкиРаздела.Ссылка.Автор = &ТекущийПользователь + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ)) КАК Видимость, + | ЕСТЬNULL(втДобавленныеВарианты.БыстрыйДоступ, ЕСТЬNULL(НастройкиПользователя.БыстрыйДоступ, ЛОЖЬ)) КАК БыстрыйДоступ, + | ВЫБОР + | КОГДА НастройкиПользователя.Видимость ЕСТЬ NULL + | И втДобавленныеВарианты.Видимость ЕСТЬ NULL + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК СвоиНастройки, + | ВЫБОР + | КОГДА НастройкиРаздела.Ссылка.ТипОтчета = &ТипВнутренний + | ТОГДА НастройкиРаздела.Ссылка.Отчет.Имя + | КОГДА НастройкиРаздела.Ссылка.ТипОтчета = &ТипДополнительный + | ТОГДА """" + | ИНАЧЕ ПОДСТРОКА(ВЫРАЗИТЬ(НастройкиРаздела.Ссылка.Отчет КАК СТРОКА(150)), 14, 137) + | КОНЕЦ КАК ИмяОтчета, + | ВЫБОР + | КОГДА &ОтборНаименование = """" + | ТОГДА ЛОЖЬ + | КОГДА НастройкиРаздела.Ссылка.Наименование ПОДОБНО ""%"" + &ОтборНаименование + ""%"" + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ + | ИЛИ ВЫБОР + | КОГДА &ОтборАвтор = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | ТОГДА ЛОЖЬ + | КОГДА НастройкиРаздела.Ссылка.Автор = &ОтборАвтор + | ТОГДА ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ КАК СкрытОтбором + |ИЗ + | Справочник.ВариантыОтчетов.Размещение КАК НастройкиРаздела + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ втПодсистемы КАК втПодсистемы + | ПО НастройкиРаздела.РазделИлиГруппа = втПодсистемы.Ссылка + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиВариантовОтчетов КАК НастройкиПользователя + | ПО (НастройкиПользователя.Пользователь = &ТекущийПользователь) + | И НастройкиРаздела.Ссылка = НастройкиПользователя.Вариант + | И НастройкиРаздела.РазделИлиГруппа = НастройкиПользователя.РазделИлиГруппа + | ЛЕВОЕ СОЕДИНЕНИЕ втДобавленныеВарианты КАК втДобавленныеВарианты + | ПО НастройкиРаздела.Ссылка = втДобавленныеВарианты.Ссылка + | И НастройкиРаздела.РазделИлиГруппа = втДобавленныеВарианты.Подсистема + |ГДЕ + | НастройкиРаздела.Использование = ИСТИНА + | И НастройкиРаздела.Ссылка.Отчет В(&ОтчетыПользователя) + | И НастройкиРаздела.Ссылка.ПометкаУдаления = ЛОЖЬ + | И НЕ НастройкиРаздела.Ссылка.Отчет ЕСТЬ NULL + | И ЕСТЬNULL(НастройкиПользователя.Видимость, НастройкиРаздела.Ссылка.ВидимостьПоУмолчанию + | ИЛИ ВЫБОР + | КОГДА НастройкиРаздела.Ссылка.Автор = &ТекущийПользователь + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ) = ИСТИНА"; - УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); - ТекущийПользователь = Пользователи.ТекущийПользователь(); + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Подсистемы", Подсистемы.Выгрузить()); + Запрос.УстановитьПараметр("РазделСсылка", РазделСсылка); + Запрос.УстановитьПараметр("ДобавленныеВарианты", ДобавленныеВарианты.Выгрузить(, "Ссылка, Подсистема, Видимость, БыстрыйДоступ, ИзмененПользователем")); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.ТекущийПользователь()); + Запрос.УстановитьПараметр("ОтборНаименование", ?(РежимНастройки, ОтборНаименование, "")); + Запрос.УстановитьПараметр("ОтборАвтор", ?(РежимНастройки, ОтборАвтор, Справочники.Пользователи.ПустаяСсылка())); + Запрос.УстановитьПараметр("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); + Запрос.УстановитьПараметр("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); + Запрос.УстановитьПараметр("ОтчетыПользователя", ВариантыОтчетов.ОтчетыТекущегоПользователя()); - Пока Выборка.Следующий() Цикл - ЗначениеЭлемент = СписокКлючей.НайтиПоЗначению(Выборка.Ключ); - Если ЗначениеЭлемент <> Неопределено тогда - Объект = Выборка.Ссылка.ПолучитьОбъект(); - СтрокиПользователя = Объект.ИсключенияБыстрогоДоступа.НайтиСтроки(Новый Структура("Пользователь", ТекущийПользователь)); - Если ЗначениеЭлемент.Пометка <> Выборка.БыстрыйДоступ тогда - Если СтрокиПользователя.Количество() = 0 тогда - СтрокаПользователя = Объект.ИсключенияБыстрогоДоступа.Добавить(); - СтрокаПользователя.Пользователь = ТекущийПользователь; - Объект.Записать(); - КонецЕсли; - Иначе - Если СтрокиПользователя.Количество() > 0 тогда - Объект.ИсключенияБыстрогоДоступа.Удалить(СтрокиПользователя[0]); - Объект.Записать(); - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - СписокВнешниихКоманд = Новый Массив; - - Для каждого Ключ из СписокКлючей Цикл - Если Найти(Ключ.Значение, "Отчет.ДополнительнаяКоманда") > 0 Тогда - КлючВарианта = СтрЗаменить(Ключ.Значение, "Отчет.ДополнительнаяКоманда\", ""); - ПараметрКоманды = Неопределено; - Для Каждого СтрокаПараметра из ЗначениеПараметровКоманд Цикл - Если СтрокаПараметра.Ключ = КлючВарианта Тогда - ПараметрКоманды = МассивПараметровКомманд[СтрокаПараметра.ИндексПозицииЭлемента]; - КонецЕсли; - КонецЦикла; - СтруктураПараметра = Новый Структура("УникальныйИдентификатор, БыстрыйДоступ, ПараметрКоманды", - КлючВарианта, - Ключ.Пометка, - ПараметрКоманды); - - СписокВнешниихКоманд.Добавить(СтруктураПараметра); - - КонецЕсли; - КонецЦикла; - - Если СписокВнешниихКоманд.Количество() > 0 Тогда - ВариантыОтчетовПереопределяемый.УстановитьБыстрыйДоступВнешнихКоманд(СписокВнешниихКоманд); + Если РежимНастройки Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, + " + | И ЕСТЬNULL(НастройкиПользователя.Видимость, НастройкиРаздела.Ссылка.ВидимостьПоУмолчанию + | ИЛИ ВЫБОР + | КОГДА НастройкиРаздела.Ссылка.Автор = &ТекущийПользователь + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ) = ИСТИНА", + "" + ); КонецЕсли; + Запрос.Текст = ТекстЗапроса; - УстановитьПривилегированныйРежим(Ложь); + Варианты = Запрос.Выполнить().Выгрузить(); + ПараметрыДобавления = Новый Структура("ИмяГруппы"); - СписокЭлементов = СтруктураПараметров.СписокЭлементов; + ВариантыБыстрогоДоступа = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ", Ложь, Истина)); + ПараметрыДобавления.ИмяГруппы = "БыстрыйДоступ"; + ДобавитьВариантыВПанель(ВариантыБыстрогоДоступа, ПараметрыДобавления); - Для каждого Элемент из СписокЭлементов Цикл - ЭлементФормы = Элементы.Найти(Элемент.Значение); - Если ЭлементФормы <> Неопределено тогда - ЭлементФормы.Видимость = Элемент.Пометка; + ВариантыБезГруппы = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ, БезГруппы", Ложь, Ложь, Истина)); + ПараметрыДобавления.ИмяГруппы = "БезГруппы"; + ДобавитьВариантыВПанель(ВариантыБезГруппы, ПараметрыДобавления); + + ВариантыСГруппой = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ, БезГруппы, СмТакже", Ложь, Ложь, Ложь, Ложь)); + ПараметрыДобавления.ИмяГруппы = "СГруппой"; + ДобавитьВариантыВПанель(ВариантыСГруппой, ПараметрыДобавления); + + ВариантыСмТакже = Варианты.Скопировать(Новый Структура("СкрытОтбором, БыстрыйДоступ, БезГруппы, СмТакже", Ложь, Ложь, Ложь, Истина)); + ПараметрыДобавления.ИмяГруппы = "СмТакже"; + ДобавитьВариантыВПанель(ВариантыСмТакже, ПараметрыДобавления); + + // Добавление вариантов, скрытых отбором (для сохранения их пользовательских настроек) + ВариантыСкрытыеОтбором = Варианты.НайтиСтроки(Новый Структура("СкрытОтбором", Истина)); + Для Каждого Вариант Из ВариантыСкрытыеОтбором Цикл + Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("Ссылка, Подсистема", Вариант.Ссылка, Вариант.Подсистема)); + Если Найденные.Количество() = 0 Тогда + СтрокаТаблицы = ДобавленныеВарианты.Добавить(); + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Вариант); КонецЕсли; КонецЦикла; + Элементы.БыстрыйДоступДекорация.Видимость = (ВариантыБыстрогоДоступа.Количество() > 0); + Элементы.БезГруппыДекорация.Видимость = (ВариантыБезГруппы.Количество() > 0); + Элементы.СГруппойДекорация.Видимость = (ВариантыСГруппой.Количество() > 0); + Элементы.СмТакжеДекорация.Видимость = (ВариантыСмТакже.Количество() > 0); + + Если ВариантыБыстрогоДоступа.Количество() = 0 + И ВариантыБезГруппы.Количество() = 0 + И ВариантыСГруппой.Количество() = 0 + И ВариантыСмТакже.Количество() = 0 Тогда + Надпись = Элементы.Вставить("СписокОтчетовПуст", Тип("ДекорацияФормы"), Элементы.БыстрыйДоступКолонка1); + Надпись.Заголовок = НСтр("ru = 'Нет доступных отчетов.'"); + КонецЕсли; + КонецПроцедуры +&НаСервере +Процедура ДобавитьВариантыВПанель(Варианты, ПараметрыДобавления) + + ВариантыКоличество = Варианты.Количество(); + Если ВариантыКоличество = 0 Тогда + Возврат; + КонецЕсли; + + ГруппаУровня2Имя = ПараметрыДобавления.ИмяГруппы; + ГруппаУровня2 = Элементы.Найти(ГруппаУровня2Имя); + РазмещатьВПодгруппах = (ГруппаУровня2Имя = "СГруппой"); + + Если ГруппаУровня2Имя = "БыстрыйДоступ" ИЛИ ГруппаУровня2Имя = "СмТакже" Тогда + Варианты.Сортировать("Наименование ВОЗР"); // Нет важных + ИначеЕсли ГруппаУровня2Имя = "БезГруппы" Тогда + Варианты.Сортировать("Важный УБЫВ, Наименование ВОЗР"); // Есть важные + Иначе + Варианты.Сортировать("ПодсистемаПриоритет ВОЗР, Важный УБЫВ, Наименование ВОЗР"); // Есть группы и важные + КонецЕсли; + + // Переменные для поддержки динамики групп верхнего уровня + ГруппыВерхнегоУровня = Новый Массив; + Для Каждого ГруппаУровня3 Из ГруппаУровня2.ПодчиненныеЭлементы Цикл + ГруппыВерхнегоУровня.Добавить(ГруппаУровня3); + КонецЦикла; + ГруппВерхнегоУровня = ГруппыВерхнегоУровня.Количество(); + + ГруппаУровня3Индекс = 0; + ГруппаУровня3 = ГруппыВерхнегоУровня[ГруппаУровня3Индекс]; + ГруппаУровня3Свободно = ГруппыВерхнегоУровня.ВГраница(); + + Если РазмещатьВПодгруппах Тогда + ТаблицаПодсистем = Варианты.Скопировать(, "Подсистема"); + ТаблицаПодсистем.Колонки.Добавить("ВариантовВПодсистеме"); + ТаблицаПодсистем.ЗаполнитьЗначения(1, "ВариантовВПодсистеме"); + ТаблицаПодсистем.Свернуть("Подсистема", "ВариантовВПодсистеме"); + ОбщееКоличествоСтрок = ВариантыКоличество + 2*ТаблицаПодсистем.Количество() - Мин(3, ТаблицаПодсистем.Количество()); + Иначе + ТаблицаПодсистем = Неопределено; + ОбщееКоличествоСтрок = ВариантыКоличество; + КонецЕсли; + + МногоЭлементов = ОбщееКоличествоСтрок > 20; + + ГруппаУровня3Отсечка = Цел(ОбщееКоличествоСтрок / ГруппВерхнегоУровня); + ГруппаУровня3Добавка = ОбщееКоличествоСтрок - ГруппаУровня3Отсечка * ГруппВерхнегоУровня; + ГруппаУровня3Корректировка = ?(ГруппаУровня3Добавка > 0, 1, 0); + + ГруппаУровня4Осталось = 0; + + // Шаблоны заполнения создаваемых элементов управления + НадписьШаблон = Новый Структура( + "Вид, Гиперссылка, Высота, ЦветТекста, + |РастягиватьПоГоризонтали, РастягиватьПоВертикали" + ); + НадписьШаблон.Вид = ВидДекорацииФормы.Надпись; + НадписьШаблон.Гиперссылка = Истина; + НадписьШаблон.РастягиватьПоГоризонтали = Истина; + НадписьШаблон.РастягиватьПоВертикали = Ложь; + НадписьШаблон.Высота = 1; + НадписьШаблон.ЦветТекста = ЦветВидимыхВариантов; + + КартинкаШаблон = Новый Структура( + "Вид, Ширина, Высота, Картинка, + |РастягиватьПоГоризонтали, РастягиватьПоВертикали" + ); + КартинкаШаблон.Вид = ВидДекорацииФормы.Картинка; + КартинкаШаблон.Ширина = 2; + КартинкаШаблон.Высота = 1; + КартинкаШаблон.Картинка = КартинкаБыстрыйДоступ; + КартинкаШаблон.РастягиватьПоГоризонтали = Ложь; + КартинкаШаблон.РастягиватьПоВертикали = Ложь; + + ГруппаУровня4Шаблон = Новый Структура( + "Вид, ЦветТекстаЗаголовка, РастягиватьПоГоризонтали, + |Отображение, Группировка, ШрифтЗаголовка" + ); + ГруппаУровня4Шаблон.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаУровня4Шаблон.ЦветТекстаЗаголовка = ЦветГруппыВариантовОтчетов; + ГруппаУровня4Шаблон.РастягиватьПоГоризонтали = Истина; + ГруппаУровня4Шаблон.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаУровня4Шаблон.ШрифтЗаголовка = ШрифтЖирный; + ГруппаУровня4Шаблон.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + + ГруппаУровня5Шаблон = Новый Структура( + "Вид, РастягиватьПоГоризонтали, + |Отображение, Группировка, + |ОтображатьЗаголовок" + ); + ГруппаУровня5Шаблон.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаУровня5Шаблон.РастягиватьПоГоризонтали = Истина; + ГруппаУровня5Шаблон.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаУровня5Шаблон.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаУровня5Шаблон.ОтображатьЗаголовок = Ложь; + + Если РежимНастройки Тогда + КонтекстноеМеню = Новый Структура("УбратьИзБыстрогоДоступа, ПереместитьВБыстрыйДоступ, Изменить"); + КонтекстноеМеню.УбратьИзБыстрогоДоступа = Новый Структура("Видимость", (ГруппаУровня2Имя = "БыстрыйДоступ")); + КонтекстноеМеню.ПереместитьВБыстрыйДоступ = Новый Структура("Видимость", (ГруппаУровня2Имя <> "БыстрыйДоступ")); + КонтекстноеМеню.Изменить = Новый Структура("Видимость", Истина); + КонецЕсли; + + ПродолжениеСуффикс = " " + НСтр("ru = '(продолжение)'"); + + ДобавляемыеРеквизиты = Новый Массив; + + СтрокаТекущейГруппы = Неопределено; + ГруппаУровня4 = Неопределено; + ГруппаУровня3НомерЭлемента = 0; + ГруппаУровня4Выведено = 0; + Для Каждого Вариант Из Варианты Цикл + ГруппаУровня3НомерЭлемента = ГруппаУровня3НомерЭлемента + 1; + ГруппаУровня3Изменилась = Ложь; + + // Вычисление предела + ВерхнийПредел = ГруппаУровня3Отсечка + ГруппаУровня3Корректировка; + + // Корректировка предела с учетом разделения группы на 2 части + Если РазмещатьВПодгруппах И ГруппаУровня4Осталось > 1 И МногоЭлементов Тогда + ВерхнийПредел = ВерхнийПредел + ГруппаУровня3Свободно; + КонецЕсли; + + // Переход к следующей группе верхнего уровня + Если ГруппаУровня3НомерЭлемента > ВерхнийПредел + И (ГруппаУровня4Осталось = 0 ИЛИ ГруппаУровня4Осталось > 3) + И (ГруппаУровня4Выведено = 0 ИЛИ ГруппаУровня4Выведено > 2) + И ГруппаУровня3Свободно > 0 Тогда + + ГруппаУровня3НомерЭлемента = 1; + ГруппаУровня3Индекс = ГруппаУровня3Индекс + 1; + ГруппаУровня3Свободно = ГруппаУровня3Свободно - 1; + ГруппаУровня3 = ГруппыВерхнегоУровня[ГруппаУровня3Индекс]; + ГруппаУровня3Добавка = ГруппаУровня3Добавка - 1; + ГруппаУровня3Корректировка = ?(ГруппаУровня3Добавка > 0, 1, 0); + + ГруппаУровня3Изменилась = Истина; + КонецЕсли; + + // Переход к следующей группе текущего уровня + Если РазмещатьВПодгруппах + И ( + ГруппаУровня3Изменилась + ИЛИ СтрокаТекущейГруппы = Неопределено + ИЛИ СтрокаТекущейГруппы.Подсистема <> Вариант.Подсистема + ) Тогда + + НачалоСПродолжением = (СтрокаТекущейГруппы <> Неопределено И СтрокаТекущейГруппы.Подсистема = Вариант.Подсистема); + + Если НачалоСПродолжением И Прав(ГруппаУровня4.Заголовок, СтрДлина(ПродолжениеСуффикс)) <> ПродолжениеСуффикс Тогда + ГруппаУровня4.Заголовок = ГруппаУровня4.Заголовок; + КонецЕсли; + + Если НЕ НачалоСПродолжением Тогда + СтрокаТекущейГруппы = ТаблицаПодсистем.Найти(Вариант.Подсистема, "Подсистема"); + ГруппаУровня4Осталось = СтрокаТекущейГруппы.ВариантовВПодсистеме; + КонецЕслИ; + + Результат = ДобавитьГруппуУровня4(ГруппаУровня3, Вариант.Подсистема); + + ГруппаУровня4 = Результат.ГруппаУровня4; + ГруппаУровня3НомерЭлемента = ГруппаУровня3НомерЭлемента + ?(Результат.Свойство("Декорация"), 2, 1); + + Если НачалоСПродолжением Тогда + ГруппаУровня4.Заголовок = ГруппаУровня4.Заголовок + ПродолжениеСуффикс; + КонецЕсли; + + ГруппаУровня4Выведено = 0; + + КонецЕсли; + + Если РазмещатьВПодгруппах Тогда + ГруппаУровня4Выведено = ГруппаУровня4Выведено + 1; + КонецЕсли; + + // Уникальное имя добавляемого элемента + ДобавленоЭлементов = ДобавленоЭлементов + 1; + НадписьИмя = "ДобавленныйЭлемент_" + Формат(ДобавленоЭлементов, "ЧГ=0"); + + // Добавление группы нижнего уровня для горизонтальной группировки + Если РежимНастройки ИЛИ ГруппаУровня2Имя = "БыстрыйДоступ" Тогда + ГруппаУровня5Имя = "Группа_" + НадписьИмя; + ГруппаУровня5 = Элементы.Вставить(ГруппаУровня5Имя, Тип("ГруппаФормы"), ?(РазмещатьВПодгруппах, ГруппаУровня4, ГруппаУровня3)); + ЗаполнитьЗначенияСвойств(ГруппаУровня5, ГруппаУровня5Шаблон); + Иначе + ГруппаУровня5 = ?(РазмещатьВПодгруппах, ГруппаУровня4, ГруппаУровня3); + КонецЕсли; + + // Добавление флажка (для быстрого доступа не используется) + Если РежимНастройки И ГруппаУровня2Имя <> "БыстрыйДоступ" Тогда + ФлажокИмя = "Флажок_" + НадписьИмя; + + РеквизитФормы = Новый РеквизитФормы(ФлажокИмя, Новый ОписаниеТипов("Булево"), , , Истина); + ДобавляемыеРеквизиты.Добавить(РеквизитФормы); + + Флажок = Элементы.Вставить(ФлажокИмя, Тип("ПолеФормы"), ГруппаУровня5); + Флажок.Вид = ВидПоляФормы.ПолеФлажка; + Флажок.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Флажок.УстановитьДействие("ПриИзменении", "ВидимостьВариантаПриИзменении"); + КонецЕсли; + + // Добавление картинки (используется только для быстрого доступа) + Если ГруппаУровня2Имя = "БыстрыйДоступ" Тогда + КартинкаИмя = "Картинка_" + НадписьИмя; + Картинка = Элементы.Вставить(КартинкаИмя, Тип("ДекорацияФормы"), ГруппаУровня5); + ЗаполнитьЗначенияСвойств(Картинка, КартинкаШаблон); + КонецЕсли; + + // Добавление надписи (варианта) + Надпись = Элементы.Вставить(НадписьИмя, Тип("ДекорацияФормы"), ГруппаУровня5); + ЗаполнитьЗначенияСвойств(Надпись, НадписьШаблон); + Надпись.Заголовок = СокрЛП(Вариант.Наименование); + Надпись.Подсказка = СокрЛП(?(ПустаяСтрока(Вариант.Описание), Вариант.Наименование, Вариант.Описание)); + Если ЗначениеЗаполнено(Вариант.Автор) Тогда + Надпись.Подсказка = Надпись.Подсказка + Символы.ПС + НСтр("ru = 'Автор:'") + " " + СокрЛП(Строка(Вариант.Автор)); + КонецЕсли; + Надпись.УстановитьДействие("Нажатие", "ВариантНажатие"); + Если НЕ Вариант.Видимость Тогда + Надпись.ЦветТекста = ЦветСкрытыхВариантов; + КонецЕсли; + Если ГруппаУровня2Имя <> "СмТакже" + И (Вариант.Важный ИЛИ ГруппаУровня2Имя = "БыстрыйДоступ") + И Вариант.Видимость Тогда + Надпись.Шрифт = ШрифтЖирный; + КонецЕсли; + + Если РежимНастройки Тогда + НадписьКонтекстноеМеню = Надпись.КонтекстноеМеню; + Если НадписьКонтекстноеМеню <> Неопределено Тогда + Для Каждого КлючИЗначение Из КонтекстноеМеню Цикл + КомандаИмя = КлючИЗначение.Ключ; + КнопкаИмя = КомандаИмя + "_" + НадписьИмя; + Кнопка = Элементы.Вставить(КнопкаИмя, Тип("КнопкаФормы"), НадписьКонтекстноеМеню); + Если ВебКлиент Тогда + Команда = Команды.Добавить(КнопкаИмя); + ЗаполнитьЗначенияСвойств(Команда, Команды[КомандаИмя]); + Кнопка.ИмяКоманды = КнопкаИмя; + Иначе + Кнопка.ИмяКоманды = КомандаИмя; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Кнопка, КлючИЗначение.Значение); + КонецЦикла; + КонецЕсли; + КонецЕсли; + + // Регистрация добавленной надписи + ГруппирующаяСущность = ?(РазмещатьВПодгруппах, ГруппаУровня4.Имя, ГруппаУровня2Имя); + Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("Ссылка, Подсистема", Вариант.Ссылка, Вариант.Подсистема)); + Если Найденные.Количество() > 0 Тогда + СтрокаТаблицы = Найденные[0]; + Иначе + СтрокаТаблицы = ДобавленныеВарианты.Добавить(); + КонецЕсли; + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Вариант); + СтрокаТаблицы.ГруппаУровня2Имя = ГруппаУровня2Имя; + СтрокаТаблицы.НадписьИмя = НадписьИмя; + СтрокаТаблицы.ГруппирующаяСущность = ГруппирующаяСущность; + + Если РазмещатьВПодгруппах Тогда + ГруппаУровня4Осталось = ГруппаУровня4Осталось - 1; + КонецЕсли; + + КонецЦикла; + + Если РежимНастройки И ДобавляемыеРеквизиты.Количество() > 0 Тогда + ИзменитьРеквизиты(ДобавляемыеРеквизиты); + Для Каждого Реквизит Из ДобавляемыеРеквизиты Цикл + Флажок = Элементы.Найти(Реквизит.Имя); + Флажок.ПутьКДанным = Реквизит.Имя; + НадписьИмя = Сред(Реквизит.Имя, СтрДлина("Флажок_")+1); + Найденные = ДобавленныеВарианты.НайтиСтроки(Новый Структура("НадписьИмя", НадписьИмя)); + Если Найденные.Количество() > 0 Тогда + Вариант = Найденные[0]; + ЭтаФорма[Реквизит.Имя] = Вариант.Видимость; + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ПерерисоватьПанельОтчетов(СохранитьНастройки, ОставитьИзмененияВНастройках) + Если СохранитьНастройки Тогда + ОставитьИзмененияВНастройках = Ложь; + КонецЕсли; + + Если РежимНастройки И Элементы.ВерхняяПанельНадпись.Заголовок = "" Тогда + Элементы.ВерхняяПанельНадпись.Заголовок = НСтр("ru = 'Настроить быстрый доступ можно с помощью правой кнопки мыши.'"); + КонецЕсли; + + Элементы.ОтборНаименование.Видимость = РежимНастройки; + Элементы.ОтборАвтор.Видимость = РежимНастройки; + Элементы.СохранитьИзменения.Видимость = РежимНастройки; + Элементы.ОтменитьИзменения.Видимость = РежимНастройки; + Элементы.ВерхняяПанельСтрока2.Видимость = РежимНастройки; + Элементы.ВерхняяПанельОтступ.Видимость = РежимНастройки; + Элементы.ВсеОтчеты.Видимость = НЕ РежимНастройки; + Элементы.СсылкаВсеОтчеты.Видимость = НЕ РежимНастройки; + + // Заголовок + ПрефиксРежимаНастройки = НСтр("ru = 'Настройка:'") + " "; + ПрефиксВыведен = (Лев(Заголовок, СтрДлина(ПрефиксРежимаНастройки)) = ПрефиксРежимаНастройки); + Если ПрефиксВыведен <> РежимНастройки Тогда + Если РежимНастройки Тогда + Заголовок = ПрефиксРежимаНастройки + Заголовок; + Иначе + Заголовок = СтрЗаменить(Заголовок, ПрефиксРежимаНастройки, ""); + КонецЕсли; + КонецЕсли; + + // Удаление элементов + УдаляемыеЭлементы = Новый Массив; + Для Каждого ЭлементУровня2 Из Элементы.Колонки.ПодчиненныеЭлементы Цикл + Если ТипЗнч(ЭлементУровня2) = Тип("ГруппаФормы") Тогда + Для Каждого ЭлементУровня3 Из ЭлементУровня2.ПодчиненныеЭлементы Цикл + Если ТипЗнч(ЭлементУровня3) = Тип("ГруппаФормы") Тогда + Для Каждого ЭлементУровня4 Из ЭлементУровня3.ПодчиненныеЭлементы Цикл + УдаляемыеЭлементы.Добавить(ЭлементУровня4); + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл + Элементы.Удалить(УдаляемыйЭлемент); + КонецЦикла; + + // Удаление реквизитов + УдаляемыеРеквизиты = Новый Массив; + НаборРеквизитов = ПолучитьРеквизиты(); + Для Каждого Реквизит Из НаборРеквизитов Цикл + Если ПостоянныеРеквизиты.НайтиПоЗначению(Реквизит.Имя) = Неопределено Тогда + УдаляемыеРеквизиты.Добавить(Реквизит.Имя); + КонецЕсли; + КонецЦикла; + ИзменитьРеквизиты(, УдаляемыеРеквизиты); + + // Удаление команд + Если ВебКлиент Тогда + УдаляемыеКоманды = Новый Массив; + Для Каждого Команда Из Команды Цикл + Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда + УдаляемыеКоманды.Добавить(Команда); + КонецЕсли; + КонецЦикла; + Для Каждого Команда Из УдаляемыеКоманды Цикл + Команды.Удалить(Команда); + КонецЦикла; + КонецЕсли; + + // Сохранение пользовательских настроек + Если СохранитьНастройки Тогда + СохранитьПользовательскиеНастройки(); + КонецЕсли; + + // Очистка изменений в пользовательских настройках + Если НЕ ОставитьИзмененияВНастройках Тогда + ДобавленныеВарианты.Очистить(); + ДобавленоЭлементов = 0; + КонецЕсли; + + // Сброс номера последнего добавленного элемента + Для Каждого СтрокаТаблицы Из Подсистемы Цикл + СтрокаТаблицы.НомерЭлемента = 0; + КонецЦикла; + + // Заполнение панели + ЗаполнитьПанельОтчетов(); + + Если Модифицированность И НЕ ОставитьИзмененияВНастройках Тогда + Модифицированность = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура СохранитьПользовательскиеНастройки() + ИзмененныеНастройки = ДобавленныеВарианты.Выгрузить( + Новый Структура("ИзмененПользователем", Истина), + "Ссылка, Подсистема, Видимость, БыстрыйДоступ" + ); + ИзмененныеНастройки.Колонки.Ссылка.Имя = "Вариант"; + ИзмененныеНастройки.Колонки.Подсистема.Имя = "РазделИлиГруппа"; + РегистрыСведений.НастройкиВариантовОтчетов.СохранитьНастройкиПользователяВРазделе(ИзмененныеНастройки); +КонецПроцедуры + +&НаСервере +Функция ПодгруппаСНаименьшимКоличествомЭлементов(Группа) + ПодгруппаМин = Неопределено; + ВложенныхЭлементовМин = 0; + Для Каждого Подгруппа Из Группа.ПодчиненныеЭлементы Цикл + ВложенныхЭлементов = Подгруппа.ПодчиненныеЭлементы.Количество(); + Если ВложенныхЭлементов < ВложенныхЭлементовМин ИЛИ ПодгруппаМин = Неопределено Тогда + ПодгруппаМин = Подгруппа; + ВложенныхЭлементовМин = ВложенныхЭлементов; + КонецЕсли; + КонецЦикла; + Возврат ПодгруппаМин; +КонецФункции + + diff --git a/SSL/src/CommonForms/ПанельОтчетов/ПанельОтчетов.mdo b/SSL/src/CommonForms/ПанельОтчетов/ПанельОтчетов.mdo index a1833f974..bc500a63f 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/ПараметрыАдминистрированияСервернойИБ/Help/ru.html b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Help/ru.html index fadefb081..b8ab3752a 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 cb8c83bef..fae1f911b 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/Module.bsl @@ -16,13 +16,27 @@ ПараметрыАдминистрирования = СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени( - ПараметрыАдминистрирования.ИмяАдминистратораИБ); - Если ПользовательИБ <> Неопределено Тогда - ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор; + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени( + ПараметрыАдминистрирования.ИмяАдминистратораИБ); + Если ПользовательИБ <> Неопределено Тогда + ИдентификаторАдминистратораИБ = ПользовательИБ.УникальныйИдентификатор; + КонецЕсли; + + Иначе + Администраторы = РегистрыСведений.НеразделенныеПользователи.СписокАдминистраторов(); + Для каждого ЭлементСписка Из Администраторы Цикл + Если ЭлементСписка.Представление = ПараметрыАдминистрирования.ИмяАдминистратораИБ Тогда + ИдентификаторАдминистратораИБ = ЭлементСписка.Значение; + КонецЕсли; + КонецЦикла; КонецЕсли; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Элементы.РежимРаботы.ТекущаяСтраница = Элементы.НетРазделенияДанных; + Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ); + АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ); + Иначе Элементы.РежимРаботы.ТекущаяСтраница = Элементы.РазделениеДанных; НеразделенныйАдминистраторИБ = Строка(ИдентификаторАдминистратораИБ); СписокВыбора = Элементы.НеразделенныйАдминистраторИБ.СписокВыбора; @@ -31,10 +45,6 @@ Для каждого ЭлементСписка Из Администраторы Цикл СписокВыбора.Добавить(Строка(ЭлементСписка.Значение), ЭлементСписка.Представление); КонецЦикла; - Иначе - Элементы.РежимРаботы.ТекущаяСтраница = Элементы.НетРазделенияДанных; - Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторАдминистратораИБ); - АдминистраторИБ = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ИдентификаторАдминистратораИБ); КонецЕсли; ПарольАдминистратораИБ = ПараметрыАдминистрирования.ПарольАдминистратораИБ; @@ -54,16 +64,16 @@ &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда - Возврат; - КонецЕсли; - ИмяПоля = "НеразделенныйАдминистраторИБ"; - Иначе + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда Возврат; КонецЕсли; ИмяПоля = "АдминистраторИБ"; + Иначе + Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда + Возврат; + КонецЕсли; + ИмяПоля = "НеразделенныйАдминистраторИБ"; КонецЕсли; ПользовательИБ = ПолучитьАдминистратораИБ(); Если ПользовательИБ = Неопределено Тогда @@ -164,18 +174,18 @@ КонецФункции Функция ПолучитьАдминистратораИБ() - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда - Возврат Неопределено; - КонецЕсли; - Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( - Новый УникальныйИдентификатор(НеразделенныйАдминистраторИБ)); - Иначе + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Если Не ЗначениеЗаполнено(АдминистраторИБ) Тогда Возврат Неопределено; КонецЕсли; Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( АдминистраторИБ.ИдентификаторПользователяИБ); + Иначе + Если ПустаяСтрока(НеразделенныйАдминистраторИБ) Тогда + Возврат Неопределено; + КонецЕсли; + Возврат ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Новый УникальныйИдентификатор(НеразделенныйАдминистраторИБ)); КонецЕсли; КонецФункции diff --git a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo index f26786083..8a36e77cf 100644 --- a/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo +++ b/SSL/src/CommonForms/ПараметрыАдминистрированияСервернойИБ/ПараметрыАдминистрированияСервернойИБ.mdo @@ -12,5 +12,4 @@ PersonalComputer MobileDevice - true diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form index 6f711e0a5..78fc8e376 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Form.form @@ -85,6 +85,10 @@ Сервер + + ru + IP адрес или имя прокси сервера + ПроксиСерверРасширеннаяПодсказка 29 @@ -125,6 +129,10 @@ Порт + + ru + Порт прокси сервера + ПортРасширеннаяПодсказка 31 @@ -206,6 +214,10 @@ Пользователь + + ru + Логин для авторизации на прокси сервере + ПользовательРасширеннаяПодсказка 34 @@ -246,6 +258,10 @@ Пароль + + ru + Пароль для авторизации на прокси сервере + ПарольРасширеннаяПодсказка 36 @@ -437,6 +453,7 @@ Auto Right + true OnOpen @@ -446,6 +463,16 @@ OnCreateAtServer ПриСозданииНаСервере + Abort + Close + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes LockOwner true true diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html index a1a957a01..c695ee8d9 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Help/ru.html @@ -1,2 +1,3 @@ - -

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

              \ No newline at end of file + +

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

              +

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

              \ No newline at end of file diff --git a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl index 13e613d14..e208299dd 100644 --- a/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl +++ b/SSL/src/CommonForms/ПараметрыПроксиСервера/Module.bsl @@ -3,8 +3,19 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - НастройкаПроксиНаКлиенте = Параметры.НастройкаПроксиНаКлиенте; + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + НастройкаПроксиНаКлиенте = Параметры.НастройкаПроксиНаКлиенте; + Если НЕ Параметры.НастройкаПроксиНаКлиенте + И НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение НСтр("ru = 'Недостаточно прав доступа. + | + |Настройка прокси-сервера выполняется администратором.'"); + КонецЕсли; + Если НастройкаПроксиНаКлиенте Тогда НастройкаПроксиСервера = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкаПроксиСервера"); Иначе diff --git a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Form.form b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Form.form new file mode 100644 index 000000000..2b8b113da --- /dev/null +++ b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Form.form @@ -0,0 +1,354 @@ + + + + Группа1 + 3 + + Пароль + 4 + true + true + + true + + + Пароль + + + ПарольРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 5 + true + + InputField + Enter + true + Left + true + + 30 + true + true + true + true + true + true + true + Normal + + + + ПодтверждениеПароля + 6 + true + true + + true + + + ПодтверждениеПароля + + + ПодтверждениеПароляРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + ПодтверждениеПароляКонтекстноеМеню + 7 + true + + InputField + Enter + true + Left + true + + 30 + true + true + true + true + true + true + true + Normal + + + + Декорация2 + 8 + + <key>ru</key> + <value>Надежный пароль должен: +- состоять не менее чем из восьми символов, +- включать в себя заглавные латинские буквы, +- включать в себя прописные латинские буквы, +- цифры, +- символы (подчеркивание, скобки и т.д.). + +Нежелательно, чтобы пароль совпадал с именем пользователя, полностью состоял из цифр, содержал понятные слова, содержал чередующиеся +группы символов.</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 17 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 9 + true + + Label + 50 + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 12 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ФормаСоздатьПользователя + 1 + true + true + + true + + + ФормаСоздатьПользователяРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + Подробно + 2 + true + true + + true + + + ПодробноРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Form.Command.Подробно + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Пароль + + <key>ru</key> + <value>Пароль</value> + + 1 + + String + + 50 + + + + true + + + true + + ShowError + + + ПодтверждениеПароля + + <key>ru</key> + <value>Подтверждение пароля</value> + + 2 + + String + + 50 + + + + true + + + true + + ShowError + + + Пользователь + + <key>ru</key> + <value>Пользователь</value> + + 3 + + CatalogRef.Пользователи + + + true + + + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 1 + + ru + Записать и закрыть + + + true + + + StdPicture.WriteAndClose + + + + ЗаписатьИЗакрыть + + + Text + Auto + Auto + + + Подробно + + <key>ru</key> + <value>Подробные сведения</value> + + 2 + + ru + Подробно + + + true + + + + Подробно + + + Auto + Auto + + + АвтономноеРабочееМесто + + ExchangePlanRef + + true + + + + + + diff --git a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Help/ru.html b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Help/ru.html new file mode 100644 index 000000000..a9a3e1b41 --- /dev/null +++ b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Help/ru.html @@ -0,0 +1,3 @@ + +

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

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

              +

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

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

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

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

              \ No newline at end of file diff --git a/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Module.bsl b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Module.bsl new file mode 100644 index 000000000..2590e962c --- /dev/null +++ b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/Module.bsl @@ -0,0 +1,87 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); + + УстановитьПривилегированныйРежим(Истина); + + Пользователь = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПользовательДляСинхронизацииДанных(Параметры.АвтономноеРабочееМесто); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + Отказ = Ложь; + + Если ПустаяСтрока(Пароль) Тогда + + НСтрока = НСтр("ru = 'Не задан пароль.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Пароль",, Отказ); + + ИначеЕсли Пароль <> ПодтверждениеПароля Тогда + + НСтрока = НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "ПодтверждениеПароля",, Отказ); + + КонецЕсли; + + Если Отказ Тогда + Возврат; + КонецЕсли; + + ИзменитьПользователя(); + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура Подробно(Команда) + + ОткрытьЗначение(Пользователь); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ИзменитьПользователя() + + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); + + УстановитьПривилегированныйРежим(Истина); + + Пользователь = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПользовательДляСинхронизацииДанных(Параметры.АвтономноеРабочееМесто); + + Если Не ЗначениеЗаполнено(Пользователь) Тогда + ВызватьИсключение НСтр("ru = 'Пользователя для синхронизации данных с текущим автономным рабочим местом не существует.'"); + КонецЕсли; + + ПользовательОбъект = Пользователь.ПолучитьОбъект(); + + Если ПользовательОбъект = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Пользователя для синхронизации данных с текущим автономным рабочим местом не существует.'"); + КонецЕсли; + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить("Пароль", Пароль); + + ПользовательОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + + ПользовательОбъект.Записать(); + +КонецПроцедуры diff --git a/SSL/src/CommonForms/ВсеОтчеты/ВсеОтчеты.mdo b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/ПарольДляСинхронизацииДанных.mdo similarity index 59% rename from SSL/src/CommonForms/ВсеОтчеты/ВсеОтчеты.mdo rename to SSL/src/CommonForms/ПарольДляСинхронизацииДанных/ПарольДляСинхронизацииДанных.mdo index ac6a0287c..ec75a6668 100644 --- a/SSL/src/CommonForms/ВсеОтчеты/ВсеОтчеты.mdo +++ b/SSL/src/CommonForms/ПарольДляСинхронизацииДанных/ПарольДляСинхронизацииДанных.mdo @@ -1,11 +1,10 @@ - - ВсеОтчеты + + ПарольДляСинхронизацииДанных ru - Все отчеты + Пароль для синхронизации данных - Настройка состава вариантов отчетов ru diff --git a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Help/ru.html b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Help/ru.html index 36eb97388..60151a5f3 100644 --- a/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Help/ru.html +++ b/SSL/src/CommonForms/ПерсональныеНастройкиЭЦП/Help/ru.html @@ -1,4 +1,4 @@ - +

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

              diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ПечатьДокументов/ConditionalAppearance.dcssca similarity index 69% rename from SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/ConditionalAppearance.dcssca rename to SSL/src/CommonForms/ПечатьДокументов/ConditionalAppearance.dcssca index c69d93711..77b5284df 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/ConditionalAppearance.dcssca +++ b/SSL/src/CommonForms/ПечатьДокументов/ConditionalAppearance.dcssca @@ -3,25 +3,25 @@ - Наименование + НастройкиПечатныхФорм - СписокВариантовОтчета.ЧастоИспВариант + НастройкиПечатныхФорм.Печатать Equal - true + false - false - ЦветФона - style:FieldBackColor + ЦветТекста + style:ТекстЗапрещеннойЯчейкиЦвет + false Шрифт - + diff --git a/SSL/src/CommonForms/ПечатьДокументов/Form.form b/SSL/src/CommonForms/ПечатьДокументов/Form.form index 0211acc0f..bce977edd 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Form.form +++ b/SSL/src/CommonForms/ПечатьДокументов/Form.form @@ -1,20 +1,52 @@ - Панель - 67 - - ПечатьПоКомплектно - 38 + ГруппаКоманднаяПанель + 116 + + КоманднаяПанельЛеваяЧасть + 114 + + КнопкаПечатьКоманднаяПанель + 38 + true + true + + true + + false + + КнопкаПечатьКоманднаяПанельРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + Form.Command.Печать + Auto + true + true + true + UserCmds + Auto + true true true - false + + <key>ru</key> + <value>Командная панель левая часть</value> + + 10 + false - ПечатьПоКомплектноРасширеннаяПодсказка - 83 + КоманднаяПанельЛеваяЧастьРасширеннаяПодсказка + 136 Label true true @@ -22,48 +54,33 @@ Left - UsualButton - Form.Command.Печать - Normal - Auto - true - true - UserCmds - Auto + CommandBar + + Left + - Копии - 65 - - <key>ru</key> - <value>копий</value> - + Копий + 117 true true - - true - Role.ВыводНаПринтерФайлБуферОбмена - - - true - Role.ПолныеПрава - + true - Копии + Копий ru - количество копий + Количество копий OnChange - КопииПриИзменении + КопийПриИзменении - КопииРасширеннаяПодсказка - 84 + КопийРасширеннаяПодсказка + 138 Label true true @@ -72,8 +89,8 @@ - КопииКонтекстноеМеню - 66 + КопийКонтекстноеМеню + 118 true InputField @@ -82,9 +99,9 @@ Left true - 4 true true + true true true true @@ -92,338 +109,18 @@ 1 + + 999 + Normal - ГруппаКопии - 37 - - Копии1 - 70 - - <key>ru</key> - <value>Копии №1</value> - - true - true - - true - - - Копии1 - - - ru - количество копий - - - OnChange - КопииПриИзменении - - - Копии1РасширеннаяПодсказка - 87 - Label - true - true - - Left - - - - Копии1КонтекстноеМеню - 71 - true - - InputField - Enter - true - Left - true - - 4 - true - true - true - true - true - true - - 1 - - Normal - - - - Копии2 - 72 - - <key>ru</key> - <value>Копии №2</value> - - true - true - - true - - - Копии2 - - - ru - количество копий - - - OnChange - КопииПриИзменении - - - Копии2РасширеннаяПодсказка - 89 - Label - true - true - - Left - - - - Копии2КонтекстноеМеню - 73 - true - - InputField - Enter - true - Left - true - - 4 - true - true - true - true - true - true - - 1 - - Normal - - - - Копии3 - 74 - - <key>ru</key> - <value>Копии №3</value> - - true - true - - true - - - Копии3 - - - ru - количество копий - - - OnChange - КопииПриИзменении - - - Копии3РасширеннаяПодсказка - 91 - Label - true - true - - Left - - - - Копии3КонтекстноеМеню - 75 - true - - InputField - Enter - true - Left - true - - 4 - true - true - true - true - true - true - - 1 - - Normal - - - - Копии4 - 76 - - <key>ru</key> - <value>Копии №4</value> - - true - true - - true - - - Копии4 - - - ru - количество копий - - - OnChange - КопииПриИзменении - - - Копии4РасширеннаяПодсказка - 93 - Label - true - true - - Left - - - - Копии4КонтекстноеМеню - 77 - true - - InputField - Enter - true - Left - true - - 4 - true - true - true - true - true - true - - 1 - - Normal - - - - Копии5 - 78 - - <key>ru</key> - <value>Копии №5</value> - - true - true - - true - - - Копии5 - - - ru - количество копий - - - OnChange - КопииПриИзменении - - - Копии5РасширеннаяПодсказка - 95 - Label - true - true - - Left - - - - Копии5КонтекстноеМеню - 79 - true - - InputField - Enter - true - Left - true - - 4 - true - true - true - true - true - true - - 1 - - Normal - - - true - true - - - true - Role.ВыводНаПринтерФайлБуферОбмена - - - true - Role.ПолныеПрава - - - - ru - Группа копии - - - ГруппаКопииРасширеннаяПодсказка - 86 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - Группа - 68 + КоманднаяПанельПраваяЧасть + 115 - ОтправитьПоПочте - 80 + КнопкаПечатьВсеДействия + 120 true true @@ -431,8 +128,8 @@ false - ОтправитьПоПочтеРасширеннаяПодсказка - 98 + КнопкаПечатьВсеДействияРасширеннаяПодсказка + 141 Label true true @@ -440,8 +137,34 @@ Left - UsualButton - Form.Command.ОтправитьПоПочте + Form.Command.Печать + Auto + true + true + true + UserCmds + Auto + InAdditionalSubmenu + + + КнопкаПоказатьСкрытьНастройкуКомплекта + 101 + true + true + + true + + + КнопкаПоказатьСкрытьНастройкуКомплектаРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + Form.Command.ПоказатьСкрытьНастройкуКоличестваКопий Normal Auto true @@ -449,22 +172,151 @@ UserCmds Auto - - Перейти - 64 + + ГруппаНастройкаКомплектаПодменю + 121 + + КнопкаУстановитьФлажкиПодменю + 122 + true + true + + true + + + КнопкаУстановитьФлажкиПодменюРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаСнятьФлажкиПодменю + 123 + true + true + + true + + + КнопкаСнятьФлажкиПодменюРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаПереместитьВверхПодменю + 124 + true + true + + true + + + КнопкаПереместитьВверхПодменюРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаПереместитьВнизПодменю + 125 + true + true + + true + + + КнопкаПереместитьВнизПодменюРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаСброситьНастройкиПодменю + 126 + true + true + + true + + + КнопкаСброситьНастройкиПодменюРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + Form.Command.СброситьНастройки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + <key>ru</key> - <value>Перейти</value> + <value>Настройка комплекта</value> - true - true - - true - - false - ПерейтиРасширеннаяПодсказка - 99 + ГруппаНастройкаКомплектаПодменюРасширеннаяПодсказка + 143 Label true true @@ -472,27 +324,82 @@ Left - UsualButton - Form.Command.Перейти - Normal - Auto - true - true - UserCmds - Auto + Popup + + + StdPicture.ReportSettings + + Picture + Normal + - - ПерейтиКУправлениюМакетами - 81 + + ГруппаСохранитьОтправить + 108 + + КнопкаСохранить + 102 + true + true + + true + + + КнопкаСохранитьРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Form.Command.Сохранить + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаОтправить + 103 + true + true + + true + + + КнопкаОтправитьРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.Command.Отправить + Normal + Auto + true + true + UserCmds + Auto + true true true - false + + <key>ru</key> + <value>Группа сохранить отправить</value> + - ПерейтиКУправлениюМакетамиРасширеннаяПодсказка - 100 + ГруппаСохранитьОтправитьРасширеннаяПодсказка + 149 Label true true @@ -500,23 +407,103 @@ Left - UsualButton - Form.Command.ПерейтиКУправлениюМакетами - Normal - Auto - true - true - UserCmds - Auto + + + + ГруппаНавигация + 109 + + КнопкаПерейтиКДокументу + 64 + true + true + + true + + false + + КнопкаПерейтиКДокументуРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + Form.Command.ПерейтиКДокументу + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаПерейтиКУправлениюМакетами + 81 + true + true + + true + + false + + КнопкаПерейтиКУправлениюМакетамиРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + Form.Command.ПерейтиКУправлениюМакетами + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Группа навигация</value> + + + ru + Группа навигация + + + ГруппаНавигацияРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + true true true + + <key>ru</key> + <value>Командная панель правая часть</value> + - ГруппаРасширеннаяПодсказка - 97 + КоманднаяПанельПраваяЧастьРасширеннаяПодсказка + 140 Label true true @@ -524,13 +511,10 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Left + Form true @@ -538,9 +522,13 @@ true + + <key>ru</key> + <value>Группа командная панель</value> + - ПанельРасширеннаяПодсказка - 82 + ГруппаКоманднаяПанельРасширеннаяПодсказка + 135 Label true true @@ -558,26 +546,50 @@ - Страницы - 9 - - Группа1 - 10 + ГруппаПечатныеФормы + 119 + + НастройкиПечатныхФорм + 86 + true + true + + true + + + НастройкиПечатныхФорм + + None + Add + CancelSearch + Change + Copy + Delete + EndEdit + Find + OutputList + SelectAll + SortListAsc + SortListDesc - Таб1 - 15 + НастройкиПечатныхФормПечатать + 93 true true true - Таб1 + НастройкиПечатныхФорм.Печатать None + + OnChange + НастройкиПечатныхФормПечататьПриИзменении + - Таб1РасширеннаяПодсказка - 103 + НастройкиПечатныхФормПечататьРасширеннаяПодсказка + 173 Label true true @@ -586,40 +598,203 @@ - Таб1КонтекстноеМеню - 16 + НастройкиПечатныхФормПечататьКонтекстноеМеню + 94 true - SpreadsheetDocumentField - Enter + CheckBoxField + Auto + true + + StdPicture.Print + + Left + true + + + + НастройкиПечатныхФормПредставление + 89 + true + true + + true + + + НастройкиПечатныхФорм.Представление + + + НастройкиПечатныхФормПредставлениеРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + НастройкиПечатныхФормПредставлениеКонтекстноеМеню + 90 + true + + InputField + true + Auto true Left true - - 50 + true - 10 true - true - true - Special - ScrollAlways - ScrollAlways - Auto - true - true - true - true + true + true + true + true + Normal - true - true - - true - + + НастройкиПечатныхФормКоличество + 91 + true + true + + true + + + НастройкиПечатныхФорм.Количество + + + OnChange + НастройкиПечатныхФормКоличествоПриИзменении + + + НастройкиПечатныхФормКоличествоРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + + НастройкиПечатныхФормКоличествоКонтекстноеМеню + 92 + true + + InputField + true + Left + true + + + Tuning + НастройкиПечатныхФормКоличествоРегулирование + + 6 + true + true + true + true + true + true + true + + 0 + + Normal + + + Bottom + + НастройкиПечатныхФормКоманднаяПанель + 88 + Left + + + OnActivateRow + НастройкиПечатныхФормПриАктивизацииСтроки + + + OnChange + НастройкиПечатныхФормПриИзменении + + + НастройкиПечатныхФормСтрокаПоиска + 164 + + НастройкиПечатныхФормСтрокаПоискаРасширеннаяПодсказка + 166 + Label + true + true + + Left + + + + НастройкиПечатныхФормСтрокаПоискаКонтекстноеМеню + 165 + true + + НастройкиПечатныхФорм + + true + + + + НастройкиПечатныхФормСостояниеПросмотра + 167 + + НастройкиПечатныхФормСостояниеПросмотраРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + НастройкиПечатныхФормСостояниеПросмотраКонтекстноеМеню + 168 + true + + ViewStatusAddition + НастройкиПечатныхФорм + + true + + + + НастройкиПечатныхФормУправлениеПоиском + 170 + + НастройкиПечатныхФормУправлениеПоискомРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + НастройкиПечатныхФормУправлениеПоискомКонтекстноеМеню + 171 + true + + SearchControlAddition + НастройкиПечатныхФорм + + true + + - Группа1РасширеннаяПодсказка - 102 + НастройкиПечатныхФормРасширеннаяПодсказка + 163 Label true true @@ -627,33 +802,284 @@ Left - Page - - - StdPicture.SpreadsheetInsertPageBreak - - Vertical - auto - + + НастройкиПечатныхФормКонтекстноеМеню + 87 + + ГруппаНастройкаКомплектаКонтекстноеМеню + 107 + + КнопкаУстановитьФлажкиКонтекстноеМеню + 99 + true + true + + true + + + КнопкаУстановитьФлажкиКонтекстноеМенюРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + Form.Command.УстановитьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаСнятьФлажкиКонтекстноеМеню + 100 + true + true + + true + + + КнопкаСнятьФлажкиКонтекстноеМенюРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + Form.Command.СнятьФлажки + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаПереместитьВверхКонтекстноеМеню + 110 + true + true + + true + + + КнопкаПереместитьВверхКонтекстноеМенюРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveUp + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаПереместитьВнизКонтекстноеМеню + 111 + true + true + + true + + + КнопкаПереместитьВнизКонтекстноеМенюРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + Form.Item.НастройкиПечатныхФорм.StandardCommand.MoveDown + Normal + Auto + true + true + UserCmds + Auto + + + КнопкаСброситьНастройкиКонтекстноеМеню + 128 + true + true + + true + + + КнопкаСброситьНастройкиКонтекстноеМенюРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + Form.Command.СброситьНастройки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа настройка комплекта контекстное меню</value> + + + ru + Группа настройка комплекта контекстное меню + + + ГруппаНастройкаКомплектаКонтекстноеМенюРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + + + + НастройкиПечатныхФормКонтекстноеМенюКопироватьВБуферОбмена + 127 + true + true + + true + + + НастройкиПечатныхФормКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + Form.Item.НастройкиПечатныхФорм.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + true + + true + 30 + true + true + true + MultiRow +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + None + None + None + true +
              - Группа2 - 11 - - Таб2 - 17 + Страницы + 9 + + СтраницаПечатнаяФормаОбразец + 104 + + ПечатнаяФормаОбразец + 105 + true + true + + true + + + ПечатнаяФормаОбразец + + None + + ПечатнаяФормаОбразецРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + ПечатнаяФормаОбразецКонтекстноеМеню + 106 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + Special + ScrollAlways + ScrollAlways + Auto + true + true + true + true + + true true true - - Таб2 - - None - Таб2РасширеннаяПодсказка - 106 + СтраницаПечатнаяФормаОбразецРасширеннаяПодсказка + 188 Label true true @@ -661,75 +1087,139 @@ Left - - Таб2КонтекстноеМеню - 18 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - 50 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Auto - true - true - true - true + Page + + + StdPicture.SpreadsheetInsertPageBreak + + Vertical + auto - true - true - - true - - - Группа2РасширеннаяПодсказка - 105 - Label - true - true - - Left - - - Page - - - StdPicture.SpreadsheetInsertPageBreak - - Vertical - auto - - - - Группа3 - 12 - - Таб3 - 19 + + СтраницаПечатнаяФормаНедоступна + 129 + + ГруппаПечатнаяФормаНедоступна + 132 + + КартинкаПечатнаяФормаНедоступна + 130 + + <key>ru</key> + <value>Картинка печатная форма недоступна</value> + + true + true + + true + + + КартинкаПечатнаяФормаНедоступнаРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + + КартинкаПечатнаяФормаНедоступнаКонтекстноеМеню + 131 + true + + 5 + true + 2 + true + false + + + CommonPicture.Информация32 + + + + + НадписьПечатнаяФормаНедоступна + 133 + + <key>ru</key> + <value>Печатная форма недоступна.</value> + + true + true + + true + + + НадписьПечатнаяФормаНедоступнаРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + НадписьПечатнаяФормаНедоступнаКонтекстноеМеню + 134 + true + + Label + true + 2 + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа печатная форма недоступна</value> + + true + true + + ГруппаПечатнаяФормаНедоступнаРасширеннаяПодсказка + 192 + Label + true + true + + Left + + + UsualGroup + + Auto + StrongSeparation + true + true + Auto + Auto + + true true true - - Таб3 - - None + + <key>ru</key> + <value>Страница печатная форма недоступна</value> + + true + true - Таб3РасширеннаяПодсказка - 109 + СтраницаПечатнаяФормаНедоступнаРасширеннаяПодсказка + 191 Label true true @@ -737,31 +1227,10 @@ Left - - Таб3КонтекстноеМеню - 20 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - 50 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Auto - true - true - true - true + Page + + Vertical + auto true @@ -769,9 +1238,11 @@ true + true + true - Группа3РасширеннаяПодсказка - 108 + СтраницыРасширеннаяПодсказка + 187 Label true true @@ -779,165 +1250,9 @@ Left - Page - - - StdPicture.SpreadsheetInsertPageBreak - - Vertical - auto - - - - Группа4 - 13 - - Таб4 - 23 - true - true - - true - - - Таб4 - - None - - Таб4РасширеннаяПодсказка - 112 - Label - true - true - - Left - - - - Таб4КонтекстноеМеню - 24 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - 50 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Auto - true - true - true - true - - - true - true - - true - - - Группа4РасширеннаяПодсказка - 111 - Label - true - true - - Left - - - Page - - - StdPicture.SpreadsheetInsertPageBreak - - Vertical - auto - - - - Группа5 - 14 - - Таб5 - 21 - true - true - - true - - - Таб5 - - None - - Таб5РасширеннаяПодсказка - 115 - Label - true - true - - Left - - - - Таб5КонтекстноеМеню - 22 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - 50 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Auto - true - true - true - true - - - true - true - - true - - - Группа5РасширеннаяПодсказка - 114 - Label - true - true - - Left - - - Page - - - StdPicture.SpreadsheetInsertPageBreak - - Vertical - auto + Pages + + Auto true @@ -945,15 +1260,13 @@ true - + <key>ru</key> - <value>Страницы</value> - </toolTip> - <horizontalStretch>true</horizontalStretch> - <verticalStretch>true</verticalStretch> + <value>Группа печатные формы</value> + - СтраницыРасширеннаяПодсказка - 101 + ГруппаПечатныеФормыРасширеннаяПодсказка + 155 Label true true @@ -961,9 +1274,12 @@ Left - Pages - - TabsOnTop + UsualGroup + + Auto + true + true + Auto Auto @@ -975,6 +1291,10 @@ Left true + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -983,10 +1303,11 @@ OnClose ПриЗакрытии + 115 + 20 DontBlock Use true - true true Vertical true @@ -995,239 +1316,6 @@ UseIfNecessary auto true - - Таб1 - - <key>ru</key> - <value>Таб1</value> - - 3 - - SpreadsheetDocument - - - true - - - true - - - - - Таб2 - - <key>ru</key> - <value>Таб2</value> - - 4 - - SpreadsheetDocument - - - true - - - true - - - - - Таб3 - - <key>ru</key> - <value>Таб3</value> - - 5 - - SpreadsheetDocument - - - true - - - true - - - - - Таб4 - - <key>ru</key> - <value>Таб4</value> - - 6 - - SpreadsheetDocument - - - true - - - true - - - - - Таб5 - - <key>ru</key> - <value>Таб5</value> - - 7 - - SpreadsheetDocument - - - true - - - true - - - - - Копии - - <key>ru</key> - <value>Копии</value> - - 1 - - Number - - 2 - true - - - - true - - - true - - - - Копии1 - - <key>ru</key> - <value>Копии1</value> - - 8 - - Number - - 2 - true - - - - true - - - true - - - - Копии2 - - <key>ru</key> - <value>Копии2</value> - - 9 - - Number - - 2 - true - - - - true - - - true - - - - Копии3 - - <key>ru</key> - <value>Копии3</value> - - 10 - - Number - - 2 - true - - - - true - - - true - - - - Копии4 - - <key>ru</key> - <value>Копии4</value> - - 11 - - Number - - 2 - true - - - - true - - - true - - - - Копии5 - - <key>ru</key> - <value>Копии5</value> - - 12 - - Number - - 2 - true - - - - true - - - true - - - - ДоступнаПечатьПоКомплектно - - <key>ru</key> - <value>Доступна печать по комплектно</value> - - 13 - - Boolean - - - true - - - true - - ОбъектыПечати @@ -1248,46 +1336,6 @@ <itemValueType/> </extInfo> </attributes> - <attributes> - <name>ИменаТабДокументов</name> - <title> - <key>ru</key> - <value>Имена таб. документов</value> - - 15 - - ValueList - - - true - - - true - - - - - - - МакетыПечатныхФорм - - <key>ru</key> - <value>Макеты печатных форм</value> - - 2 - - ValueList - - - true - - - true - - - - - КлючНастроек @@ -1307,12 +1355,218 @@ </edit> </attributes> <attributes> - <name>НужноСохранитьНастройкиКопий</name> + <name>НастройкиПечатныхФорм</name> <title> <key>ru</key> - <value>Нужно сохранить настройки копий</value> + <value>Настройки печатных форм</value> - 18 + 16 + + ValueTable + + + true + + + true + + + Представление + + <key>ru</key> + <value>Печатная форма</value> + + 1 + + String + + + + true + + + true + + + + Количество + + <key>ru</key> + <value>Копий</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + Печатать + 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 + + String + + + + true + + + true + + + + + ПечатнаяФормаОбразец + 19 + + SpreadsheetDocument + + + true + + + true + + + + + ПараметрыВывода + + <key>ru</key> + <value>Параметры вывода</value> + + 1 + + + true + + + true + + + + НастройкиКомплектаПоУмолчанию + + <key>ru</key> + <value>Настройки комплекта по умолчанию</value> + + 2 + + ValueTable + + + true + + + true + + + ИмяМакета + + <key>ru</key> + <value>Имя макета</value> + + 1 + + String + + + + true + + + true + + + + Количество + + <key>ru</key> + <value>Копий</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + + ДоступнаНастройкаКомплекта + + <key>ru</key> + <value>Доступна настройка комплекта</value> + + 3 Boolean @@ -1323,11 +1577,46 @@ true - - ОтправитьПоПочте + + Копий <key>ru</key> - <value>Отправить</value> + <value>Копий</value> + + 4 + + Number + + 3 + + + + true + + + true + + + + НастройкиФорматаСохранения + + <key>ru</key> + <value>Настройки формата сохранения</value> + + 5 + + + true + + + true + + + + Отправить + + <key>ru</key> + <value>Отправить...</value> 1 @@ -1338,14 +1627,14 @@ true - CommonPicture.ОтправитьEmail + CommonPicture.ОтправитьПолучитьПочту - ОтправитьПоПочтеВыполнить + Отправить - Picture + TextPicture Auto Auto @@ -1358,17 +1647,17 @@ 2 ru - Печать + Напечатать на принтере true - StdPicture.Print + StdPicture.PrintImmediately - ПечатьВыполнить + Печать TextPicture @@ -1376,10 +1665,10 @@ Auto - Перейти + ПерейтиКДокументу <key>ru</key> - <value>Перейти</value> + <value>Перейти к документу...</value> 8 @@ -1395,7 +1684,7 @@ - ПерейтиВыполнить + ПерейтиКДокументу Picture @@ -1435,6 +1724,129 @@ 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 + + + ПоказатьСкрытьНастройкуКоличестваКопий + + <key>ru</key> + <value>Показать / Скрыть настройку комплекта</value> + + 6 + + ru + Показать / Скрыть настройку количества копий + + + true + + + CommonPicture.ИерархическийСписок + + + + ПоказатьСкрытьНастройкуКоличестваКопий + + + Auto + Auto + + + Сохранить + + <key>ru</key> + <value>Сохранить...</value> + + 7 + + ru + Сохранить на диске или в качестве присоединенного файла к объекту + + + true + + + StdPicture.SaveFile + + + + Сохранить + + + TextPicture + Auto + Auto + + + СброситьНастройки + + <key>ru</key> + <value>Сбросить настройки комплекта</value> + + 9 + + ru + Сбросить настройки + + + true + + + + СброситьНастройки + + + Auto + Auto + ИмяМенеджераПечати @@ -1444,23 +1856,18 @@ ИменаМакетов - - String - - + ПараметрКоманды - ВнешнийИсточник - - Boolean - + ПараметрыПечати + - ПараметрыПечати + ИсточникДанных diff --git a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl index cb7a88830..3045d4620 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/Module.bsl +++ b/SSL/src/CommonForms/ПечатьДокументов/Module.bsl @@ -1,146 +1,58 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Перем КоллекцияПечатныхФорм, ПараметрыВывода; + Перем КоллекцияПечатныхФорм; // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - Если Параметры.Свойство("ИсточникДанных") Тогда - - Если НЕ УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику( - Параметры.ИсточникДанных, - Параметры.ПараметрыИсточника, - КоллекцияПечатныхФорм, - ОбъектыПечати, - ПараметрыВывода) Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - КлючНастроек = Неопределено; - Иначе - - ИмяМенеджераПечати = Параметры.ИмяМенеджераПечати; - ИменаМакетов = Параметры.ИменаМакетов; - ПараметрКоманды = Параметры.ПараметрКоманды; - ПараметрыПечати = Параметры.ПараметрыПечати; - - УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ПараметрыПечати, - КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); - - КлючНастроек = Параметры.ИмяМенеджераПечати + "-" + Параметры.ИменаМакетов; - + СформироватьПечатныеФормы(КоллекцияПечатныхФорм, Отказ); + Если Отказ Тогда + Возврат; КонецЕсли; - ДоступнаПечатьПоКомплектно = ПараметрыВывода.ДоступнаПечатьПоКомплектно; - - Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") И Параметры.ПараметрыПечати.Свойство("ПереопределитьПользовательскиеНастройкиКоличества") Тогда - Если Параметры.ПараметрыПечати.ПереопределитьПользовательскиеНастройкиКоличества Тогда - КлючНастроек = Неопределено; - КонецЕсли; + СоздатьРеквизитыИЭлементыФормыДляПечатныхФорм(КоллекцияПечатныхФорм); + СохранитьНастройкиКомплектаПоУмолчанию(); + ЗагрузитьНастройкиКоличестваКопий(); + ЕстьРазрешенныйВывод = ЕстьРазрешенныйВывод(); + НастроитьВидимостьЭлементовФормы(ЕстьРазрешенныйВывод); + УстановитьПризнакДоступностиВыводаВПредставленияхПечатныхФорм(ЕстьРазрешенныйВывод); + УстановитьИмяПринтераВПодсказкеКнопкиПечать(); + УстановитьЗаголовокФормы(); + Если ЭтоПечатьКомплекта() Тогда + Элементы.Копий.Заголовок = НСтр("ru = 'Копий комплекта'"); КонецЕсли; - - Если ПустаяСтрока(КлючНастроек) Тогда - КоличествоКопийДляПечати = Новый Массив; - Иначе - КоличествоКопийДляПечати = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( - "КоличествоКопийДляПечати", - КлючНастроек, - Новый Массив - ); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + Если ЗначениеЗаполнено(НастройкиФорматаСохранения) Тогда + Отказ = Истина; // отказ от открытия формы + СохранитьПечатнуюФормуВФайл(); КонецЕсли; - - Колво = КоллекцияПечатныхФорм.Количество(); - - Для Сч = 1 По 5 Цикл - Если Сч > Колво Тогда - ЭтаФорма["Таб" + Сч] = Неопределено; - Элементы["Группа" + Сч].Видимость = Ложь; - Элементы["Копии" + Сч].Видимость = Ложь; - Иначе - СтрМакета = КоллекцияПечатныхФорм[Сч-1]; - - ЭтаФорма["Таб" + Сч] = СтрМакета.ТабличныйДокумент; - Элементы["Группа" + Сч].Видимость = Истина; - Элементы["Группа" + Сч].Заголовок = СтрМакета.СинонимМакета; - Элементы["Копии" + Сч].Видимость = Истина; - КраткоеПредставлениеСинонимаМакета = ?(СтрДлина(СтрМакета.СинонимМакета) > 18, - Лев(СтрМакета.СинонимМакета, 15) + "...", СтрМакета.СинонимМакета); - Элементы["Копии" + Сч].Заголовок = КраткоеПредставлениеСинонимаМакета; - Элементы["Копии" + Сч].Подсказка = СтрМакета.СинонимМакета; - - Если Сч <= КоличествоКопийДляПечати.Количество() Тогда - ЭтаФорма["Копии" + Сч] = КоличествоКопийДляПечати[Сч-1]; - Иначе - ЭтаФорма["Копии" + Сч] = СтрМакета.Экземпляров; - КонецЕсли; - - ЭтаФорма["Таб" + Сч].КоличествоЭкземпляров = ЭтаФорма["Копии" + Сч]; - ИменаТабДокументов.Добавить(Сч, СтрМакета.СинонимМакета); - - Если НЕ ПустаяСтрока(СтрМакета.ПолныйПутьКМакету) Тогда - МакетыПечатныхФорм.Добавить(СтрМакета.ПолныйПутьКМакету); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если Колво = 1 Тогда - Элементы.ГруппаКопии.Видимость = Ложь; - Элементы.Копии.Видимость = Истина; - Если КоличествоКопийДляПечати.Количество() = 1 Тогда - Копии = КоличествоКопийДляПечати[0]; - Иначе - Копии = КоллекцияПечатныхФорм[0].Экземпляров; - КонецЕсли; - Иначе - Элементы.Копии.Видимость = Ложь; - Элементы.ГруппаКопии.Видимость = Истина; - КонецЕсли; - - Если Колво <= 1 Тогда - Элементы.Страницы.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; - КонецЕсли; - - Если Пользователи.РолиДоступны("ВыводНаПринтерФайлБуферОбмена") - И РаботаСПочтовымиСообщениями.ПолучитьДоступныеУчетныеЗаписи(Истина).Количество() > 0 Тогда - Элементы.ОтправитьПоПочте.Доступность = ОбъектыПечати.Количество() > 0; - Иначе - Элементы.ОтправитьПоПочте.Доступность = Ложь; - КонецЕсли; - - Элементы.Перейти.Доступность = ОбъектыПечати.Количество() > 1; - Элементы.ПечатьПоКомплектно.Доступность = Пользователи.РолиДоступны("ВыводНаПринтерФайлБуферОбмена"); - + УстановитьТекущуюСтраницу(); КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() - Если НужноСохранитьНастройкиКопий Тогда - КоличествоКопийДляПечати = Новый Массив; - - Если Элементы.ГруппаКопии.Видимость Тогда - Для Сч = 1 По 5 Цикл - Если Элементы["Копии" + Сч].Видимость Тогда - КоличествоКопийДляПечати.Добавить(ЭтаФорма["Копии"+Сч]); - Иначе - Прервать; // дальше не имеет смысла просматривать - КонецЕсли; - КонецЦикла; - Иначе - КоличествоКопийДляПечати.Добавить(Копии); - КонецЕсли; - - Если Не ПустаяСтрока(КлючНастроек) Тогда - СохранитьНастройкиКоличестваКопий(КлючНастроек, КоличествоКопийДляПечати); - КонецЕсли; + Если Не ПустаяСтрока(КлючНастроек) Тогда + СохраняемыеНастройкиПечатныхФорм = Новый Массив; + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + СохраняемаяНастройка = Новый Структура; + СохраняемаяНастройка.Вставить("ИмяМакета", НастройкаПечатнойФормы.ИмяМакета); + СохраняемаяНастройка.Вставить("Количество", ?(НастройкаПечатнойФормы.Печатать,НастройкаПечатнойФормы.Количество, 0)); + + СохраняемыеНастройкиПечатныхФорм.Добавить(СохраняемаяНастройка); + КонецЦикла; + СохранитьНастройкиПечатныхФорм(КлючНастроек, СохраняемыеНастройкиПечатныхФорм); КонецЕсли; КонецПроцедуры @@ -149,67 +61,118 @@ // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура КопииПриИзменении(Элемент) - - Копий = ЭтаФорма[Элемент.Имя]; - ИмяТабДока = "Таб" + ?(Элемент.Имя = "Копии", "1", Сред(Элемент.Имя, 6)); - ТабДок = ЭтаФорма[ИмяТабДока]; - ТабДок.КоличествоЭкземпляров = Копий; - НужноСохранитьНастройкиКопий = Истина; +Процедура КопийПриИзменении(Элемент) + Если НастройкиПечатныхФорм.Количество() = 1 Тогда + НастройкиПечатныхФорм[0].Количество = Копий; + ЭтаФорма[НастройкиПечатныхФорм[0].ИмяРеквизита].КоличествоЭкземпляров = НастройкиПечатныхФорм[0].Количество; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ НастройкиПечатныхФорм + +&НаКлиенте +Процедура НастройкиПечатныхФормПриИзменении(Элемент) + ЕстьВыбранныеПечатныеФормы = Ложь; + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + ЕстьВыбранныеПечатныеФормы = ЕстьВыбранныеПечатныеФормы Или НастройкаПечатнойФормы.Печатать + И ЭтаФорма[НастройкаПечатнойФормы.ИмяРеквизита].ВысотаТаблицы > 0; + КонецЦикла; + Элементы.КнопкаПечатьКоманднаяПанель.Доступность = ЕстьВыбранныеПечатныеФормы; + Элементы.КнопкаПечатьВсеДействия.Доступность = ЕстьВыбранныеПечатныеФормы; + Элементы.КнопкаСохранить.Доступность = ЕстьВыбранныеПечатныеФормы; + Элементы.КнопкаОтправить.Доступность = ЕстьВыбранныеПечатныеФормы; +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиПечатныхФормПриАктивизацииСтроки(Элемент) + УстановитьТекущуюСтраницу(); +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиПечатныхФормКоличествоПриИзменении(Элемент) + ТекущиеДанные = Элементы.НастройкиПечатныхФорм.ТекущиеДанные; + ЭтаФорма[ТекущиеДанные.ИмяРеквизита].КоличествоЭкземпляров = ТекущиеДанные.Количество; +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиПечатныхФормКоличествоРегулирование(Элемент, Направление, СтандартнаяОбработка) + ТекущиеДанные = Элементы.НастройкиПечатныхФорм.ТекущиеДанные; + ТекущиеДанные.Печатать = ТекущиеДанные.Количество + Направление > 0; +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиПечатныхФормПечататьПриИзменении(Элемент) + ТекущиеДанные = Элементы.НастройкиПечатныхФорм.ТекущиеДанные; + Если ТекущиеДанные.Печатать И ТекущиеДанные.Количество = 0 Тогда + ТекущиеДанные.Количество = 1; + КонецЕсли; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте -Процедура ОтправитьПоПочтеВыполнить() +Процедура Сохранить(Команда) + НастройкиСохранения = ОткрытьФормуМодально("ОбщаяФорма.СохранениеПечатнойФормы", Новый Структура("ОбъектыПечати", ОбъектыПечати)); + Если НастройкиСохранения <> Неопределено И НастройкиСохранения <> КодВозвратаДиалога.Отмена Тогда + ФайлыВоВременномХранилище = ПоместитьТабличныеДокументыВоВременноеХранилище(НастройкиСохранения); + Если НастройкиСохранения.ВариантСохранения = "СохранитьВПапку" Тогда + СохранитьПечатныеФормыВПапку(ФайлыВоВременномХранилище, НастройкиСохранения.ПапкаДляСохранения); + Иначе + ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище, НастройкиСохранения.ОбъектДляПрикрепления); + Состояние(НСтр("ru = 'Сохранение успешно завершено.'")); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура Отправить(Команда) - НастройкиСохранения = ОткрытьФормуМодально("ОбщаяФорма.НастройкаПечатныхФормПередОтправкой"); - - Если ТипЗнч(НастройкиСохранения) <> Тип("Структура") Тогда - Возврат; + ПараметрыОткрытия = Новый Структура; + ИмяОткрываемойФормы = "ОбщаяФорма.ВыборФорматаВложений"; + Если ПолучателейБольшеОдного(ПараметрыВывода.ПараметрыОтправки.Получатель) Тогда + ПараметрыОткрытия.Вставить("Получатели", ПараметрыВывода.ПараметрыОтправки.Получатель); + ИмяОткрываемойФормы = "ОбщаяФорма.ОтправкаПечатнойФормыПоПочте"; КонецЕсли; - СписокВложений = Новый СписокЗначений; - - ПоместитьТабличныеДокументыВоВременноеХранилище(СписокВложений, НастройкиСохранения); - - РаботаСПочтовымиСообщениямиКлиент.ОткрытьФормуОтправкиПочтовогоСообщения(, , , , СписокВложений, Истина); + НастройкиСохранения = ОткрытьФормуМодально(ИмяОткрываемойФормы, ПараметрыОткрытия); + Если НастройкиСохранения <> Неопределено И НастройкиСохранения <> КодВозвратаДиалога.Отмена Тогда + СписокВложений = ПоместитьТабличныеДокументыВоВременноеХранилище(НастройкиСохранения); + ПараметрыОтправки = ПараметрыВывода.ПараметрыОтправки; + Получатели = ПараметрыОтправки.Получатель; + Если НастройкиСохранения.Свойство("Получатели") Тогда + Получатели = НастройкиСохранения.Получатели; + КонецЕсли; + РаботаСПочтовымиСообщениямиКлиент.ОткрытьФормуОтправкиПочтовогоСообщения( , Получатели, ПараметрыОтправки.Тема, ПараметрыОтправки.Текст, СписокВложений, Истина); + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура ПерейтиВыполнить() - - спсВыбора = Новый СписокЗначений; - Для Каждого Элемент Из ОбъектыПечати Цикл - спсВыбора.Добавить(Элемент.Значение); +Процедура ПерейтиКДокументу(Команда) + + СписокВыбора = Новый СписокЗначений; + Для Каждого ОбъектПечати Из ОбъектыПечати Цикл + СписокВыбора.Добавить(ОбъектПечати.Представление, Строка(ОбъектПечати.Значение)); КонецЦикла; - Элемент = спсВыбора.ВыбратьЭлемент(НСтр("ru = 'Перейти к печатной форме'")); - Если Элемент = Неопределено Тогда + ВыбранныйЭлемент = СписокВыбора.ВыбратьЭлемент(НСтр("ru = 'Перейти к печатной форме'")); + Если ВыбранныйЭлемент = Неопределено Тогда Возврат; КонецЕсли; - Элемент = ОбъектыПечати.НайтиПоЗначению(Элемент.Значение); - Если Элемент = Неопределено Тогда - Возврат; - КонецЕсли; - - ИмяОбласти = Элемент.Представление; - Для Каждого ТабДокумент Из ИменаТабДокументов Цикл + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + ПолеТабличногоДокумента = Элементы[НастройкаПечатнойФормы.ИмяРеквизита]; + ТабличныйДокумент = ЭтаФорма[НастройкаПечатнойФормы.ИмяРеквизита]; + ОбластьВыбранногоДокумента = ТабличныйДокумент.Области.Найти(ВыбранныйЭлемент.Значение); - ИмяЭлемента = "Таб" + ТабДокумент.Значение; - Таб = ЭтаФорма[ИмяЭлемента]; - Область = Таб.Области.Найти(ИмяОбласти); - Если Область = Неопределено Тогда - Продолжить; + ПолеТабличногоДокумента.ТекущаяОбласть = ТабличныйДокумент.Область("R1C1"); // переход к началу + + Если ОбластьВыбранногоДокумента <> Неопределено Тогда + ПолеТабличногоДокумента.ТекущаяОбласть = ТабличныйДокумент.Область(ОбластьВыбранногоДокумента.Верх,,ОбластьВыбранногоДокумента.Низ,); КонецЕсли; - - ТекущаяОбласть = Таб.Область(Область.Верх, , Область.Верх); - Элементы[ИмяЭлемента].ТекущаяОбласть = ТекущаяОбласть; - КонецЦикла; КонецПроцедуры @@ -217,91 +180,392 @@ &НаКлиенте Процедура ПерейтиКУправлениюМакетами(Команда) - ПараметрыОткрытия = ?(МакетыПечатныхФорм.Количество() > 0, Новый Структура("Фильтр", ОбъектыПечати[0].Значение), Неопределено); + ПараметрыОткрытия = ?(ОбъектыПечати.Количество() > 0, Новый Структура("Фильтр", ОбъектыПечати[0].Значение), Неопределено); ОткрытьФорму("РегистрСведений.ПользовательскиеМакетыПечати.Форма.МакетыПечатныхФорм", ПараметрыОткрытия); КонецПроцедуры &НаКлиенте -Процедура ПечатьВыполнить() +Процедура Печать(Команда) ТабличныеДокументы = Новый СписокЗначений; - Для Каждого ТабДокумент Из ИменаТабДокументов Цикл - ТабличныеДокументы.Добавить(ЭтаФорма["Таб" + ТабДокумент.Значение], ТабДокумент.Представление); + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Если Элементы[НастройкаПечатнойФормы.ИмяРеквизита].Вывод = ИспользованиеВывода.Разрешить И НастройкаПечатнойФормы.Печатать Тогда + ТабличныеДокументы.Добавить(ЭтаФорма[НастройкаПечатнойФормы.ИмяРеквизита], НастройкаПечатнойФормы.Представление); + КонецЕсли; КонецЦикла; УправлениеПечатьюКлиент.РаспечататьТабличныеДокументы(ТабличныеДокументы, ОбъектыПечати, - ДоступнаПечатьПоКомплектно); + ПараметрыВывода.ДоступнаПечатьПоКомплектно, ?(НастройкиПечатныхФорм.Количество() > 1, Копий, 1)); КонецПроцедуры +&НаКлиенте +Процедура ПоказатьСкрытьНастройкуКоличестваКопий(Команда) + УстановитьВидимостьНастройкиКоличестваКопий(); +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьФлажки(Команда) + УстановитьСнятьФлажки(Истина); +КонецПроцедуры + +&НаКлиенте +Процедура СнятьФлажки(Команда) + УстановитьСнятьФлажки(Ложь); +КонецПроцедуры + +&НаКлиенте +Процедура СброситьНастройки(Команда) + ВосстановитьНастройкиПечатныхФорм(); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаСервереБезКонтекста -Процедура СохранитьНастройкиКоличестваКопий(КлючНастроек, КоличествоКопийДляПечати) - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("КоличествоКопийДляПечати", КлючНастроек, КоличествоКопийДляПечати); +&НаСервере +Процедура СформироватьПечатныеФормы(КоллекцияПечатныхФорм, Отказ) + + // формирование табличных документов + Если ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда + Отказ = Отказ Или Не УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику(Параметры.ИсточникДанных, + Параметры.ПараметрыИсточника, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) + Иначе + УправлениеПечатью.СформироватьПечатныеФормы(Параметры.ИмяМенеджераПечати, Параметры.ИменаМакетов, + Параметры.ПараметрКоманды, Параметры.ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); + КонецЕсли; + + // установка признака сохранения печатной формы в файл + Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") И Параметры.ПараметрыПечати.Свойство("ФорматСохранения") Тогда + НайденныйФормат = УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента().Найти(Параметры.ПараметрыПечати.ФорматСохранения, "ТипФайлаТабличногоДокумента"); + Если НайденныйФормат <> Неопределено Тогда + НастройкиФорматаСохранения = Новый Структура("ТипФайлаТабличногоДокумента,Представление,Расширение,Фильтр"); + ЗаполнитьЗначенияСвойств(НастройкиФорматаСохранения, НайденныйФормат); + НастройкиФорматаСохранения.Фильтр = НастройкиФорматаСохранения.Представление + "|*." + НастройкиФорматаСохранения.Расширение; + КонецЕсли; + КонецЕсли; + КонецПроцедуры &НаСервере -Процедура ПоместитьТабличныеДокументыВоВременноеХранилище(СписокФайлов, НастройкиСохранения) +Процедура ЗагрузитьНастройкиКоличестваКопий() - ЗаписьZipФайла = Неопределено; - ИмяАрхива = Неопределено; - Если НастройкиСохранения.ЗапаковатьZIP Тогда + СохраненныеНастройкиПечатныхФорм = Новый Массив; + + ИспользоватьСохраненныеНастройки = Истина; + Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") И Параметры.ПараметрыПечати.Свойство("ПереопределитьПользовательскиеНастройкиКоличества") Тогда + ИспользоватьСохраненныеНастройки = Не Параметры.ПараметрыПечати.ПереопределитьПользовательскиеНастройкиКоличества; + КонецЕсли; + + Если ИспользоватьСохраненныеНастройки И Не ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда + ИменаМакетов = Параметры.ИменаМакетов; + Если ТипЗнч(ИменаМакетов) = Тип("Массив") Тогда + ИменаМакетов = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ИменаМакетов); + КонецЕсли; + + КлючНастроек = Параметры.ИмяМенеджераПечати + "-" + ИменаМакетов; + СохраненныеНастройкиПечатныхФорм = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПечатныхФорм", КлючНастроек, Новый Массив); + КонецЕсли; + + ВосстановитьНастройкиПечатныхФорм(СохраненныеНастройкиПечатныхФорм); + + Если ЭтоПечатьКомплекта() Тогда + Копий = 1; + Иначе + Копий = НастройкиПечатныхФорм[0].Количество; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СоздатьРеквизитыИЭлементыФормыДляПечатныхФорм(КоллекцияПечатныхФорм) + + // создание реквизитов для табличных документов + НовыеРеквизитыФормы = Новый Массив; + Для НомерПечатнойФормы = 1 По КоллекцияПечатныхФорм.Количество() Цикл + ИмяРеквизита = "ПечатнаяФорма" + Формат(НомерПечатнойФормы,"ЧГ=0"); + РеквизитФормы = Новый РеквизитФормы(ИмяРеквизита, Новый ОписаниеТипов("ТабличныйДокумент"),,КоллекцияПечатныхФорм[НомерПечатнойФормы - 1].СинонимМакета); + НовыеРеквизитыФормы.Добавить(РеквизитФормы); + КонецЦикла; + ИзменитьРеквизиты(НовыеРеквизитыФормы); + + // Создание страниц с табличными документами на форме + НомерПечатнойФормы = 0; + Для Каждого РеквизитФормы Из НовыеРеквизитыФормы Цикл + ОписаниеПечатнойФормы = КоллекцияПечатныхФорм[НомерПечатнойФормы]; + ИмяРеквизита = РеквизитФормы.Имя; + + ЭтаФорма[ИмяРеквизита] = ОписаниеПечатнойФормы.ТабличныйДокумент; + + // создание страниц для табличных документов + ИмяСтраницы = "Страница" + ИмяРеквизита; + Страница = Элементы.Добавить(ИмяСтраницы, Тип("ГруппаФормы"), Элементы.Страницы); + Страница.Вид = ВидГруппыФормы.Страница; + Страница.Картинка = БиблиотекаКартинок.ТабличныйДокументВставитьРазрывСтраницы; + Страница.Заголовок = ОписаниеПечатнойФормы.СинонимМакета; + Страница.Подсказка = ОписаниеПечатнойФормы.СинонимМакета; + Страница.Видимость = ЭтаФорма[ИмяРеквизита].ВысотаТаблицы > 0; + + // создание элементов под табличные документы + НовыйЭлемент = Элементы.Добавить(ИмяРеквизита, Тип("ПолеФормы"), Страница); + НовыйЭлемент.Вид = ВидПоляФормы.ПолеТабличногоДокумента; + НовыйЭлемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + НовыйЭлемент.ПутьКДанным = ИмяРеквизита; + НовыйЭлемент.Вывод = ВычислитьИспользованиеВывода(ОписаниеПечатнойФормы.ТабличныйДокумент); + НовыйЭлемент.Редактирование = НовыйЭлемент.Вывод = ИспользованиеВывода.Разрешить; + + // таблица настроек печатных форм + НастройкаПечатнойФормы = НастройкиПечатныхФорм.Добавить(); + НастройкаПечатнойФормы.Представление = ОписаниеПечатнойФормы.СинонимМакета; + НастройкаПечатнойФормы.Печатать = Истина; + НастройкаПечатнойФормы.Количество = ОписаниеПечатнойФормы.Экземпляров; + НастройкаПечатнойФормы.ИмяСтраницы = ИмяСтраницы; + НастройкаПечатнойФормы.ИмяРеквизита = ИмяРеквизита; + НастройкаПечатнойФормы.ИмяМакета = ОписаниеПечатнойФормы.ИмяМакета; + + НомерПечатнойФормы = НомерПечатнойФормы + 1; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция СохранитьНастройкиКомплектаПоУмолчанию() + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + ЗаполнитьЗначенияСвойств(НастройкиКомплектаПоУмолчанию.Добавить(), НастройкаПечатнойФормы); + КонецЦикла; +КонецФункции + +&НаСервере +Процедура НастроитьВидимостьЭлементовФормы(ЕстьРазрешенныйВывод) + + ВозможнаОтправкаПоПочте = ЕстьРазрешенныйВывод И РаботаСПочтовымиСообщениями.ПолучитьДоступныеУчетныеЗаписи(Истина).Количество() > 0; + ЕстьОбъектыПечати = ОбъектыПечати.Количество() > 0 Или ЕстьДанныеДляПечати(); + + Элементы.КнопкаПерейтиКДокументу.Видимость = ОбъектыПечати.Количество() > 1; + Элементы.КнопкаСохранить.Видимость = ЕстьОбъектыПечати; + Элементы.КнопкаОтправить.Видимость = ВозможнаОтправкаПоПочте и ЕстьОбъектыПечати; + Элементы.КнопкаПечатьКоманднаяПанель.Видимость = ЕстьРазрешенныйВывод И ЕстьОбъектыПечати; + Элементы.КнопкаПечатьВсеДействия.Видимость = ЕстьРазрешенныйВывод И ЕстьОбъектыПечати; + Элементы.Копий.Видимость = ЕстьРазрешенныйВывод И ЕстьОбъектыПечати; + + Элементы.КнопкаПоказатьСкрытьНастройкуКомплекта.Видимость = ЭтоПечатьКомплекта(); + Элементы.НастройкиПечатныхФорм.Видимость = ЭтоПечатьКомплекта(); + Элементы.ГруппаНастройкаКомплектаПодменю.Видимость = ЭтоПечатьКомплекта(); + + ДоступнаНастройкаКомплекта = Истина; + Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") И Параметры.ПараметрыПечати.Свойство("ФиксированныйКомплект") Тогда + ДоступнаНастройкаКомплекта = Не Параметры.ПараметрыПечати.ФиксированныйКомплект; + КонецЕсли; + + Элементы.ГруппаНастройкаКомплектаКонтекстноеМеню.Видимость = ДоступнаНастройкаКомплекта; + Элементы.ГруппаНастройкаКомплектаПодменю.Видимость = ЭтоПечатьКомплекта() И ДоступнаНастройкаКомплекта; + Элементы.НастройкиПечатныхФормПечатать.Видимость = ДоступнаНастройкаКомплекта; + Элементы.НастройкиПечатныхФормКоличество.Видимость = ДоступнаНастройкаКомплекта; + + Если Не ДоступнаНастройкаКомплекта Тогда + ДобавитьКоличествоЭкземпляровВПредставленияхПечатныхФорм(); + КонецЕсли; + + // отключение "технологической" страницы, которая нужна только в конфигураторе для дизайна формы + Элементы.СтраницаПечатнаяФормаОбразец.Видимость = Ложь; + +КонецПроцедуры + +&НаСервере +Процедура ДобавитьКоличествоЭкземпляровВПредставленияхПечатныхФорм() + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + НастройкаПечатнойФормы.Представление = НастройкаПечатнойФормы.Представление + " (" + НастройкаПечатнойФормы.Количество + ")"; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура УстановитьПризнакДоступностиВыводаВПредставленияхПечатныхФорм(ЕстьРазрешенныйВывод) + Если ЕстьРазрешенныйВывод Тогда + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Если Элементы[НастройкаПечатнойФормы.ИмяРеквизита].Вывод = ИспользованиеВывода.Запретить Тогда + НастройкаПечатнойФормы.Представление = НастройкаПечатнойФормы.Представление + " (" + НСтр("ru = 'вывод не доступен'") + ")"; + КонецЕсли; + КонецЦикла; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьВидимостьНастройкиКоличестваКопий(Знач Видимость = Неопределено) + Если Видимость = Неопределено Тогда + Видимость = Не Элементы.НастройкиПечатныхФорм.Видимость; + КонецЕсли; + + Элементы.НастройкиПечатныхФорм.Видимость = Видимость; + Элементы.ГруппаНастройкаКомплектаПодменю.Видимость = Видимость И ДоступнаНастройкаКомплекта; +КонецПроцедуры + +&НаСервере +Процедура УстановитьИмяПринтераВПодсказкеКнопкиПечать() + Если НастройкиПечатныхФорм.Количество() > 0 Тогда + ИмяПринтера = ЭтаФорма[НастройкиПечатныхФорм[0].ИмяРеквизита].ИмяПринтера; + Если Не ПустаяСтрока(ИмяПринтера) Тогда + ЭтаФорма.Команды["Печать"].Подсказка = НСтр("ru = 'Напечатать на принтере'") + " (" + ИмяПринтера + ")"; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗаголовокФормы() + Перем ЗаголовокФормы; + + Если ТипЗнч(Параметры.ПараметрыПечати) = Тип("Структура") Тогда + Параметры.ПараметрыПечати.Свойство("ЗаголовокФормы", ЗаголовокФормы); + КонецЕсли; + + Если ЗначениеЗаполнено(ЗаголовокФормы) Тогда + Заголовок = ЗаголовокФормы; + Иначе + Если ЭтоПечатьКомплекта() Тогда + Заголовок = НСтр("ru = 'Печать комплекта'"); + ИначеЕсли ТипЗнч(Параметры.ПараметрКоманды) <> Тип("Массив") Или Параметры.ПараметрКоманды.Количество() > 1 Тогда + Заголовок = НСтр("ru = 'Печать документов'"); + Иначе + Заголовок = НСтр("ru = 'Печать документа'"); + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьТекущуюСтраницу() + + ТекущиеДанные = Элементы.НастройкиПечатныхФорм.ТекущиеДанные; + Если ТекущиеДанные = Неопределено И НастройкиПечатныхФорм.Количество() > 0 Тогда + ТекущиеДанные = НастройкиПечатныхФорм[0]; + КонецЕсли; + + ТекущаяСтраница = Элементы.СтраницаПечатнаяФормаНедоступна; + Если ТекущиеДанные <> Неопределено И ЭтаФорма[ТекущиеДанные.ИмяРеквизита].ВысотаТаблицы > 0 Тогда + ТекущаяСтраница = Элементы[ТекущиеДанные.ИмяСтраницы]; + КонецЕсли; + + Элементы.Страницы.ТекущаяСтраница = ТекущаяСтраница; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьСнятьФлажки(Пометка) + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + НастройкаПечатнойФормы.Печатать = Пометка; + Если Пометка И НастройкаПечатнойФормы.Количество = 0 Тогда + НастройкаПечатнойФормы.Количество = 1; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Функция ВычислитьИспользованиеВывода(ТабличныйДокумент) + Если ТабличныйДокумент.Вывод = ИспользованиеВывода.Авто Тогда + Возврат ?(Пользователи.РолиДоступны("ВыводНаПринтерФайлБуферОбмена"), ИспользованиеВывода.Разрешить, ИспользованиеВывода.Запретить); + Иначе + Возврат ТабличныйДокумент.Вывод; + КонецЕсли; +КонецФункции + +&НаСервереБезКонтекста +Процедура СохранитьНастройкиПечатныхФорм(КлючНастроек, СохраняемыеНастройкиПечатныхФорм) + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПечатныхФорм", КлючНастроек, СохраняемыеНастройкиПечатныхФорм); +КонецПроцедуры + +&НаСервере +Процедура ВосстановитьНастройкиПечатныхФорм(СохраненныеНастройкиПечатныхФорм = Неопределено) + Если СохраненныеНастройкиПечатныхФорм = Неопределено Тогда + СохраненныеНастройкиПечатныхФорм = НастройкиКомплектаПоУмолчанию; + КонецЕсли; + + Если СохраненныеНастройкиПечатныхФорм = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого СохраненнаяНастройка Из СохраненныеНастройкиПечатныхФорм Цикл + НайденныеНастройки = НастройкиПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета", СохраненнаяНастройка.ИмяМакета)); + Для Каждого НастройкаПечатнойФормы Из НайденныеНастройки Цикл + ИндексСтроки = НастройкиПечатныхФорм.Индекс(НастройкаПечатнойФормы); + НастройкиПечатныхФорм.Сдвинуть(ИндексСтроки, НастройкиПечатныхФорм.Количество()-1 - ИндексСтроки); // сдвиг в конец + НастройкаПечатнойФормы.Количество = СохраненнаяНастройка.Количество; + ЭтаФорма[НастройкаПечатнойФормы.ИмяРеквизита].КоличествоЭкземпляров = НастройкаПечатнойФормы.Количество; + НастройкаПечатнойФормы.Печатать = НастройкаПечатнойФормы.Количество > 0; + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Функция ПоместитьТабличныеДокументыВоВременноеХранилище(НастройкиСохранения) + Перем ЗаписьZipФайла, ИмяАрхива; + + Результат = Новый СписокЗначений; + + // подготовка архива + Если НастройкиСохранения.УпаковатьВАрхив Тогда ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); ЗаписьZipФайла = Новый ЗаписьZipФайла(ИмяАрхива); КонецЕсли; - СписокТипов = НастройкиСохранения.СписокТипов; - + // подготовка временной папки ИмяВременнойПапки = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ИмяВременнойПапки); + ИспользованныеИменаФайлов = Новый Соответствие; - Для Каждого ТабДокумент Из ИменаТабДокументов Цикл - ТабДок = ЭтаФорма["Таб" + ТабДокумент.Значение]; - НомерПечатнойФормы = ТабДокумент.Значение; - Для Каждого ТипФайла Из СписокТипов Цикл + ВыбранныеФорматыСохранения = НастройкиСохранения.ФорматыСохранения; + ТаблицаФорматов = УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента(); + + // сохранение печатных форм + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + + Если Не НастройкаПечатнойФормы.Печатать Тогда + Продолжить; + КонецЕсли; + + ПечатнаяФорма = ЭтаФорма[НастройкаПечатнойФормы.ИмяРеквизита]; + + Если ПечатнаяФорма.Вывод = ИспользованиеВывода.Запретить Тогда + Продолжить; + КонецЕсли; + + НомерПечатнойФормы = НастройкиПечатныхФорм.Индекс(НастройкаПечатнойФормы) + 1; + Для Каждого ТипФайла Из ВыбранныеФорматыСохранения Цикл + НастройкиФормата = ТаблицаФорматов.НайтиСтроки(Новый Структура("ТипФайлаТабличногоДокумента", ТипФайла))[0]; - ИмяФайла = "[ИмяМакета] ([НомерПечатнойФормы]).[Расширение]"; + ИмяФайла = ПолучитьИмяВременногоФайлаДляПечатнойФормы(НастройкаПечатнойФормы.Представление,НастройкиФормата.Расширение,ИспользованныеИменаФайлов); + ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ИмяВременнойПапки) + ИмяФайла; - ИмяФайла = СтрЗаменить(ИмяФайла, "[ИмяМакета]", ТабДокумент.Представление); - ИмяФайла = СтрЗаменить(ИмяФайла, "[НомерПечатнойФормы]", НомерПечатнойФормы); - ИмяФайла = СтрЗаменить(ИмяФайла, "[Расширение]", ТипФайла.Представление); + ПечатнаяФорма.Записать(ПолноеИмяФайла, ТипФайла); - ИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла); - - ИмяВременногоФайла = ИмяВременнойПапки + "\" + ИмяФайла; - ТабДок.Записать(ИмяВременногоФайла, ТипФайла.Значение); - - Если ТипФайла.Значение = ТипФайлаТабличногоДокумента.HTML Тогда - ВставитьКартинкиВHTML(ИмяВременногоФайла); - КонецЕсли; + Если ТипФайла = ТипФайлаТабличногоДокумента.HTML Тогда + ВставитьКартинкиВHTML(ПолноеИмяФайла); + КонецЕсли; Если ЗаписьZipФайла <> Неопределено Тогда - ЗаписьZipФайла.Добавить(ИмяВременногоФайла); + ЗаписьZipФайла.Добавить(ПолноеИмяФайла); Иначе - ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВременногоФайла); + ДвоичныеДанные = Новый ДвоичныеДанные(ПолноеИмяФайла); ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтаФорма.УникальныйИдентификатор); - СписокФайлов.Добавить(ПутьВоВременномХранилище, ИмяФайла); - УдалитьФайлы(ИмяВременногоФайла); + Результат.Добавить(ПутьВоВременномХранилище, ИмяФайла); КонецЕсли; КонецЦикла; + КонецЦикла; + // если архив подготовлен, записываем и помещаем его во временное хранилище Если ЗаписьZipФайла <> Неопределено Тогда ЗаписьZipФайла.Записать(); ФайлАрхива = Новый Файл(ИмяАрхива); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяАрхива); ПутьВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ЭтаФорма.УникальныйИдентификатор); - СписокФайлов.Добавить(ПутьВоВременномХранилище, ФайлАрхива.Имя); + Результат.Добавить(ПутьВоВременномХранилище, ПолучитьИмяФайлаДляАрхива()); КонецЕсли; УдалитьФайлы(ИмяВременнойПапки); -КонецПроцедуры + Возврат Результат; + +КонецФункции &НаСервере Процедура ВставитьКартинкиВHTML(ИмяФайлаHTML) @@ -329,3 +593,170 @@ ТекстовыйДокумент.Записать(ИмяФайлаHTML, КодировкаТекста.UTF8); КонецПроцедуры + +&НаСервере +Функция ПолучитьИмяВременногоФайлаДляПечатнойФормы(ИмяМакета, Расширение, ИспользованныеИменаФайлов) + + ШаблонИмениФайла = "%1%2.%3"; + + ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонИмениФайла, ИмяМакета, "", Расширение)); + + НомерИспользования = ?(ИспользованныеИменаФайлов[ИмяВременногоФайла] <> Неопределено, + ИспользованныеИменаФайлов[ИмяВременногоФайла] + 1, + 1); + + ИспользованныеИменаФайлов.Вставить(ИмяВременногоФайла, НомерИспользования); + + // если имя уже было ранее использовано, прибавляем счётчик в конце имени + Если НомерИспользования > 1 Тогда + ИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонИмениФайла, + ИмяМакета, + " (" + НомерИспользования + ")", + Расширение)); + КонецЕсли; + + Возврат ИмяВременногоФайла; + +КонецФункции + +&НаСервере +Функция ПолучитьИмяФайлаДляАрхива() + + Результат = ""; + + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + + Если Не НастройкаПечатнойФормы.Печатать Тогда + Продолжить; + КонецЕсли; + + ПечатнаяФорма = ЭтаФорма[НастройкаПечатнойФормы.ИмяРеквизита]; + + Если ПечатнаяФорма.Вывод = ИспользованиеВывода.Запретить Тогда + Продолжить; + КонецЕсли; + + Если ПустаяСтрока(Результат) Тогда + Результат = НастройкаПечатнойФормы.Представление; + Иначе + Результат = НСтр("ru = 'Документы'"); + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат Результат + ".zip"; + +КонецФункции + +&НаКлиенте +Процедура СохранитьПечатнуюФормуВФайл() + + ФорматыСохранения = Новый Массив; + ФорматыСохранения.Добавить(НастройкиФорматаСохранения.ТипФайлаТабличногоДокумента); + НастройкиСохранения = Новый Структура("ФорматыСохранения,УпаковатьВАрхив", ФорматыСохранения, Ложь); + ФайлыВоВременномХранилище = ПоместитьТабличныеДокументыВоВременноеХранилище(НастройкиСохранения); + + Для Каждого ФайлДляЗаписи Из ФайлыВоВременномХранилище Цикл + #Если ВебКлиент Тогда + ПолучитьФайл(ФайлДляЗаписи.Значение, ФайлДляЗаписи.Представление); + #Иначе + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(НастройкиФорматаСохранения.Расширение); + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.Значение); + ДвоичныеДанные.Записать(ИмяВременногоФайла); + ЗапуститьПриложение(ИмяВременногоФайла); + #КонецЕсли + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьПечатныеФормыВПапку(СписокФайловВоВременномХранилище, Папка = "") + + #Если ВебКлиент Тогда + Для Каждого ФайлДляЗаписи Из СписокФайловВоВременномХранилище Цикл + ПолучитьФайл(ФайлДляЗаписи.Значение, ФайлДляЗаписи.Представление); + КонецЦикла; + Возврат; + #КонецЕсли + + БольшеНеЗадаватьЭтотВопрос = Ложь; + ОтветПользователя = "Отмена"; + + Для Каждого ФайлДляЗаписи Из СписокФайловВоВременномХранилище Цикл + ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Папка) + ФайлДляЗаписи.Представление; + + // проверка существования файла с таким же именем + ПроверяемыйФайл = Новый Файл(ПолноеИмяФайла); + Если ПроверяемыйФайл.Существует() Тогда + СписокКнопок = Новый СписокЗначений; + СписокКнопок.Добавить("Заменить", НСтр("ru = 'Заменить'")); + СписокКнопок.Добавить("Пропустить", НСтр("ru = 'Пропустить'")); + СписокКнопок.Добавить("Отмена", НСтр("ru = 'Отмена'")); + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл %1 уже существует в указанной папке. Заменить?'"), """" + ПолноеИмяФайла + """" + Символы.ПС); + + Если Не БольшеНеЗадаватьЭтотВопрос Тогда + ОтветПользователя = СтандартныеПодсистемыКлиент.ВопросПользователю(ТекстВопроса, СписокКнопок, , "Отмена", + НСтр("ru = 'Сохранение печатной формы'"),,БольшеНеЗадаватьЭтотВопрос); + КонецЕсли; + + Если ОтветПользователя = "Отмена" Тогда + Возврат; + ИначеЕсли ОтветПользователя = "Пропустить" Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ФайлДляЗаписи.Значение); + ДвоичныеДанные.Записать(ПолноеИмяФайла); + КонецЦикла; + + Состояние(НСтр("ru = 'Сохранение успешно завершено'"), , НСтр("ru = 'в папку:'") + " " + Папка); + +КонецПроцедуры + +&НаСервере +Процедура ПрисоединитьПечатныеФормыКОбъекту(ФайлыВоВременномХранилище, ОбъектДляПрисоединения) + Для Каждого Файл Из ФайлыВоВременномХранилище Цикл + СтандартныеПодсистемыПереопределяемый.ПриПрисоединенииПечатнойФормыКОбъекту(ОбъектДляПрисоединения, Файл.Представление, Файл.Значение); + КонецЦикла; +КонецПроцедуры + +&НаСервере +Функция ЭтоПечатьКомплекта() + Возврат НастройкиПечатныхФорм.Количество() > 1; +КонецФункции + +&НаСервере +Функция ЕстьРазрешенныйВывод() + + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Если Элементы[НастройкаПечатнойФормы.ИмяРеквизита].Вывод = ИспользованиеВывода.Разрешить Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +&НаКлиенте +Функция ПолучателейБольшеОдного(Получатель) + Если ТипЗнч(Получатель) = Тип("Массив") Или ТипЗнч(Получатель) = Тип("СписокЗначений") Тогда + Возврат Получатель.Количество() > 1; + Иначе + Возврат ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(Получатель).Количество() > 1; + КонецЕсли; +КонецФункции + +&НаСервере +Функция ЕстьДанныеДляПечати() + Результат = Ложь; + Для Каждого НастройкаПечатнойФормы Из НастройкиПечатныхФорм Цикл + Результат = Результат Или НастройкаПечатнойФормы.Печатать И ЭтаФорма[НастройкаПечатнойФормы.ИмяРеквизита].ВысотаТаблицы > 0; + КонецЦикла; + Возврат Результат; +КонецФункции diff --git a/SSL/src/CommonForms/ПечатьДокументов/ПечатьДокументов.mdo b/SSL/src/CommonForms/ПечатьДокументов/ПечатьДокументов.mdo index cbbcbd83f..05f4eaf8d 100644 --- a/SSL/src/CommonForms/ПечатьДокументов/ПечатьДокументов.mdo +++ b/SSL/src/CommonForms/ПечатьДокументов/ПечатьДокументов.mdo @@ -1,5 +1,5 @@ - + ПечатьДокументов ru diff --git a/SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html b/SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html index cba0b0936..754901119 100644 --- a/SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html +++ b/SSL/src/CommonForms/ПодписьЭЦП/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

              diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form index 653fbf00a..500f1b540 100644 --- a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form +++ b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Form.form @@ -11,6 +11,10 @@ Пароль + + ru + Введите пароль учетной записи + ПарольРасширеннаяПодсказка 13 @@ -56,6 +60,10 @@ ПодтверждениеПароля + + ru + Введите пароль учетной записи ещё раз + ПодтверждениеПароляРасширеннаяПодсказка 15 @@ -98,6 +106,10 @@ СохранятьПароль Right + + ru + Сохранять пароль в информационной базе + СохранятьПарольРасширеннаяПодсказка 17 diff --git a/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html b/SSL/src/CommonForms/ПодтверждениеПароляУчетнойЗаписи/Help/ru.html index f718ea652..b5ad1de70 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 63c1b8267..08da9643f 100644 --- a/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl +++ b/SSL/src/CommonForms/ПоискПоИндексу/Module.bsl @@ -123,9 +123,12 @@ СписокКнопок = Новый СписокЗначений; СписокКнопок.Добавить("Выбрать"); СписокКнопок.Добавить("Отмена"); - Ответ = Вопрос(НСтр("ru='""" + Элементы.НайденныеЗаписиПоИндексу.ТекущиеДанные.Улица - + ", " + Элементы.НайденныеЗаписиПоИндексу.ТекущиеДанные.Описание + """ не актуален." - + Символы.ПС + "Выбрать его?'"), СписокКнопок); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1, %2 не актуален. + |Выбрать его?'"), + Элементы.НайденныеЗаписиПоИндексу.ТекущиеДанные.Улица, + Элементы.НайденныеЗаписиПоИндексу.ТекущиеДанные.Описание); + Ответ = Вопрос(ТекстВопроса, СписокКнопок); Если Ответ = "Отмена" Тогда Возврат; КонецЕсли; @@ -220,5 +223,3 @@ КонецЕсли; КонецФункции - - diff --git a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl index fed26869b..e3df2798a 100644 --- a/SSL/src/CommonForms/ПользователиСервиса/Module.bsl +++ b/SSL/src/CommonForms/ПользователиСервиса/Module.bsl @@ -28,7 +28,8 @@ ТекущаяОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - Результат = Прокси.GetUserList(ТекущаяОбластьДанных, СписокПользователей, СообщениеОбОшибке); + Результат = Прокси.GetUserList(ТекущаяОбластьДанных, Константы.КлючОбластиДанных.Получить(), + СписокПользователей, СообщениеОбОшибке); Если НЕ Результат Тогда ШаблонСообщения = НСтр("ru = 'Ошибка при попытке получения списка пользователей сервиса: @@ -119,23 +120,11 @@ Продолжить; КонецЕсли; - UserInfo = Неопределено; - СообщениеОбОшибке = ""; - Результат = Прокси.GetUserInfo(Строка(СтрокаТаблицы.Идентификатор), - UserInfo, СообщениеОбОшибке); - Если НЕ Результат Тогда - ШаблонСообщения = НСтр("ru = 'Ошибка при получении информации о пользователе с идентификатором %1: - |%2'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, СтрокаТаблицы.Идентификатор, СообщениеОбОшибке); - ЗаписьЖурналаРегистрации("ManageApplication", УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщения); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); - Продолжить; - КонецЕсли; - СообщениеОбОшибке = ""; ТекущаяОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); - Результат = Прокси.GrantUserAccess(Строка(СтрокаТаблицы.Идентификатор), ТекущаяОбластьДанных, "User", СообщениеОбОшибке); + Результат = Прокси.GrantUserAccess(ТекущаяОбластьДанных, Константы.КлючОбластиДанных.Получить(), + Строка(СтрокаТаблицы.Идентификатор), "User", СообщениеОбОшибке); Если НЕ Результат Тогда ШаблонСообщения = НСтр("ru = 'Ошибка при предоставлении пользователя доступа в приложение %1 с сервисом: diff --git a/SSL/src/CommonForms/ПраваДоступа/Form.form b/SSL/src/CommonForms/ПраваДоступа/Form.form index c240032c2..1c181bfd7 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Form.form +++ b/SSL/src/CommonForms/ПраваДоступа/Form.form @@ -13,7 +13,7 @@ НедостаточноПравНаПросмотрРасширеннаяПодсказка - 114 + 112 Label true true @@ -74,7 +74,7 @@ ГруппыДоступаНаименованиеРасширеннаяПодсказка - 132 + 130 Label true true @@ -115,7 +115,7 @@ ГруппыДоступаПрофильПредставлениеРасширеннаяПодсказка - 134 + 132 Label true true @@ -156,7 +156,7 @@ ГруппыДоступаАдминистраторРасширеннаяПодсказка - 136 + 134 Label true true @@ -197,7 +197,7 @@ ГруппыДоступаВключитьВГруппуРасширеннаяПодсказка - 119 + 117 Label true true @@ -223,7 +223,7 @@ ГруппыДоступаИсключитьИзГруппыРасширеннаяПодсказка - 120 + 118 Label true true @@ -249,7 +249,7 @@ ГруппыДоступаИзменитьГруппуРасширеннаяПодсказка - 121 + 119 Label true true @@ -277,10 +277,10 @@ ГруппыДоступаСтрокаПоиска - 123 + 121 ГруппыДоступаСтрокаПоискаРасширеннаяПодсказка - 125 + 123 Label true true @@ -290,7 +290,7 @@ ГруппыДоступаСтрокаПоискаКонтекстноеМеню - 124 + 122 true ГруппыДоступа @@ -300,10 +300,10 @@ ГруппыДоступаСостояниеПросмотра - 126 + 124 ГруппыДоступаСостояниеПросмотраРасширеннаяПодсказка - 128 + 126 Label true true @@ -313,7 +313,7 @@ ГруппыДоступаСостояниеПросмотраКонтекстноеМеню - 127 + 125 true ViewStatusAddition @@ -324,10 +324,10 @@ ГруппыДоступаУправлениеПоиском - 129 + 127 ГруппыДоступаУправлениеПоискомРасширеннаяПодсказка - 131 + 129 Label true true @@ -337,7 +337,7 @@ ГруппыДоступаУправлениеПоискомКонтекстноеМеню - 130 + 128 true SearchControlAddition @@ -348,7 +348,7 @@ ГруппыДоступаРасширеннаяПодсказка - 122 + 120 Label true true @@ -369,7 +369,7 @@ ГруппыДоступаКонтекстноеМенюИзменитьГруппуРасширеннаяПодсказка - 117 + 115 Label true true @@ -402,7 +402,7 @@ ГруппыДоступаКонтекстноеАвтоМенюРасширеннаяПодсказка - 118 + 116 Label true true @@ -469,7 +469,7 @@ ГруппыДоступаОписаниеПредставлениеРасширеннаяПодсказка - 146 + 144 Label true true @@ -511,7 +511,7 @@ ЕстьЗапрещенныеГруппыКартинкаРасширеннаяПодсказка - 149 + 147 Label true true @@ -550,7 +550,7 @@ ЕстьЗапрещенныеГруппыТекстРасширеннаяПодсказка - 150 + 148 Label true true @@ -582,7 +582,7 @@ ПредупреждениеЕстьСкрытыеГруппыДоступаРасширеннаяПодсказка - 148 + 146 Label true true @@ -610,7 +610,7 @@ ГруппыДоступаПользователяРасширеннаяПодсказка - 116 + 114 Label true true @@ -666,13 +666,9 @@ Роли.Пометка - - OnChange - РолиПометкаПриИзменении - РолиПометкаРасширеннаяПодсказка - 167 + 162 Label true true @@ -703,7 +699,7 @@ РолиСинонимРасширеннаяПодсказка - 169 + 164 Label true true @@ -747,7 +743,7 @@ РолиКолонокРасширеннаяПодсказка - 166 + 161 Label true true @@ -765,84 +761,6 @@ РолиКоманднаяПанель 87 - - РолиУстановитьФлажки - 108 - true - - true - - false - - РолиУстановитьФлажкиРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - Form.Command.УстановитьФлажки - Normal - Auto - true - true - UserCmds - Auto - - - РолиСнятьФлажки - 107 - true - - true - - false - - РолиСнятьФлажкиРасширеннаяПодсказка - 153 - Label - true - true - - Left - - - Form.Command.СнятьФлажки - Normal - Auto - true - true - UserCmds - Auto - - - РолиПоказатьТолькоВыбранныеРоли - 104 - true - - true - - false - - РолиПоказатьТолькоВыбранныеРолиРасширеннаяПодсказка - 154 - Label - true - true - - Left - - - Form.Command.ПоказатьТолькоВыбранныеРоли - Normal - Auto - true - true - UserCmds - Auto - РолиПоказатьПодсистемыРолей 96 @@ -853,7 +771,7 @@ РолиПоказатьПодсистемыРолейРасширеннаяПодсказка - 155 + 150 Label true true @@ -861,7 +779,7 @@ Left - Form.Command.ПоказатьПодсистемыРолей + Form.Command.ГруппировкаРолейПоПодсистемам Normal Auto true @@ -873,10 +791,10 @@ РолиСтрокаПоиска - 157 + 152 РолиСтрокаПоискаРасширеннаяПодсказка - 159 + 154 Label true true @@ -886,7 +804,7 @@ РолиСтрокаПоискаКонтекстноеМеню - 158 + 153 true Роли @@ -896,10 +814,10 @@ РолиСостояниеПросмотра - 160 + 155 РолиСостояниеПросмотраРасширеннаяПодсказка - 162 + 157 Label true true @@ -909,7 +827,7 @@ РолиСостояниеПросмотраКонтекстноеМеню - 161 + 156 true ViewStatusAddition @@ -920,10 +838,10 @@ РолиУправлениеПоиском - 163 + 158 РолиУправлениеПоискомРасширеннаяПодсказка - 165 + 160 Label true true @@ -933,7 +851,7 @@ РолиУправлениеПоискомКонтекстноеМеню - 164 + 159 true SearchControlAddition @@ -944,7 +862,7 @@ РолиРасширеннаяПодсказка - 156 + 151 Label true true @@ -998,7 +916,7 @@ 48 ОтображениеРолейРасширеннаяПодсказка - 151 + 149 Label true true @@ -1027,7 +945,7 @@ ГруппыДоступаИРолиРасширеннаяПодсказка - 115 + 113 Label true true @@ -1053,7 +971,7 @@ ФормаИзменитьГруппуРасширеннаяПодсказка - 109 + 107 Label true true @@ -1079,7 +997,7 @@ ФормаОтчетПраваДоступаРасширеннаяПодсказка - 110 + 108 Label true true @@ -1113,7 +1031,7 @@ ПанельФормыРасширеннаяПодсказка - 111 + 109 Label true true @@ -1135,7 +1053,7 @@ ФормаСправкаРасширеннаяПодсказка - 112 + 110 Label true true @@ -1161,7 +1079,7 @@ ФормаОбновитьРасширеннаяПодсказка - 113 + 111 Label true true @@ -1395,23 +1313,6 @@ ПоказатьПодсистемыРолей - - ПоказатьТолькоВыбранныеРоли - - <key>ru</key> - <value>Показать только выбранные роли</value> - - 3 - - Boolean - - - true - - - true - - Роли @@ -1557,23 +1458,6 @@ </edit> </columns> </attributes> - <attributes> - <name>СкрытьРольПолныеПрава</name> - <title> - <key>ru</key> - <value>Скрыть роль полные права</value> - - 7 - - Boolean - - - true - - - true - - ВключитьВГруппу @@ -1690,15 +1574,15 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>ПоказатьПодсистемыРолей</name> + <name>ГруппировкаРолейПоПодсистемам</name> <title> <key>ru</key> - <value>Группировка по подсистемам</value> + <value>По подсистемам</value> 4 ru - Показать группировку по подсистемам + Группировать список ролей по подсистемам true @@ -1708,83 +1592,13 @@ - ПоказатьПодсистемыРолей + ГруппировкаРолейПоПодсистемам TextPicture Auto Auto - - ПоказатьТолькоВыбранныеРоли - - <key>ru</key> - <value>Только выбранные роли</value> - - 5 - - ru - Показать только выбранные роли - - - true - - - CommonPicture.ПоказатьТолькоВыбранныеРоли - - - - ПоказатьТолькоВыбранныеРоли - - - TextPicture - Auto - Auto - - - СнятьФлажки - - <key>ru</key> - <value>Снять флажки</value> - - 7 - - true - - - StdPicture.UncheckAll - - - - СнятьФлажки - - - true - Auto - Auto - - - УстановитьФлажки - - <key>ru</key> - <value>Установить флажки</value> - - 9 - - true - - - StdPicture.CheckAll - - - - УстановитьФлажки - - - true - Auto - Auto - Пользователь diff --git a/SSL/src/CommonForms/ПраваДоступа/Module.bsl b/SSL/src/CommonForms/ПраваДоступа/Module.bsl index d26d4c3ed..3f1c4b4b3 100644 --- a/SSL/src/CommonForms/ПраваДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступа/Module.bsl @@ -4,58 +4,71 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Отказ от инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Возврат при получении формы для анализа. Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; // Установка заголовка формы. - Заголовок = УправлениеДоступом.ЗаголовокПодчиненнойФормы(НСтр("ru = 'Права доступа: %1 (%2)'"), Параметры.Пользователь); + Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( + НСтр("ru = 'Права доступа: %1 (%2)'"), Параметры.Пользователь); ПользовательИБПолноправный = Пользователи.ЭтоПолноправныйПользователь(); СвойДоступ = Параметры.Пользователь = Пользователи.АвторизованныйПользователь(); - ПользовательИБОтветственный = НЕ ПользовательИБПолноправный И ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыДоступа); + + ПользовательИБОтветственный = + НЕ ПользовательИБПолноправный + И ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыДоступа); - Элементы.ГруппыДоступаКонтекстноеМенюИзменитьГруппу.Видимость = ПользовательИБПолноправный ИЛИ ПользовательИБОтветственный; - Элементы.ФормаОтчетПраваДоступа.Видимость = ПользовательИБПолноправный ИЛИ Параметры.Пользователь = Пользователи.ТекущийПользователь(); + Элементы.ГруппыДоступаКонтекстноеМенюИзменитьГруппу.Видимость = + ПользовательИБПолноправный + ИЛИ ПользовательИБОтветственный; + + Элементы.ФормаОтчетПраваДоступа.Видимость = + ПользовательИБПолноправный + ИЛИ Параметры.Пользователь = Пользователи.ТекущийПользователь(); // Настройка команды для неполноправного пользователя - Элементы.ФормаИзменитьГруппу.Видимость = НЕ ПользовательИБПолноправный И ПользовательИБОтветственный; - // Настройка команд для полноправного пользователя - Элементы.ГруппыДоступаВключитьВГруппу.Видимость = ПользовательИБПолноправный; - Элементы.ГруппыДоступаИсключитьИзГруппы.Видимость = ПользовательИБПолноправный; - Элементы.ГруппыДоступаИзменитьГруппу.Видимость = ПользовательИБПолноправный; - // Настройка отображения закладок страниц - Элементы.ГруппыДоступаИРоли.ОтображениеСтраниц = ?(ПользовательИБПолноправный, ОтображениеСтраницФормы.ЗакладкиСверху, ОтображениеСтраницФормы.Нет); - // Настройка отображения командной панели для полноправного пользователя - Элементы.ГруппыДоступа.ПоложениеКоманднойПанели = ?(ПользовательИБПолноправный, ПоложениеКоманднойПанелиЭлементаФормы.Верх, ПоложениеКоманднойПанелиЭлементаФормы.Нет); - // Настройка отображения ролей для полноправного пользователя - Элементы.ОтображениеРолей.Видимость = ПользовательИБПолноправный; + Элементы.ФормаИзменитьГруппу.Видимость = + НЕ ПользовательИБПолноправный И ПользовательИБОтветственный; - Если ПользовательИБПолноправный ИЛИ ПользовательИБОтветственный ИЛИ СвойДоступ Тогда + // Настройка команд для полноправного пользователя + Элементы.ГруппыДоступаВключитьВГруппу.Видимость = ПользовательИБПолноправный; + Элементы.ГруппыДоступаИсключитьИзГруппы.Видимость = ПользовательИБПолноправный; + Элементы.ГруппыДоступаИзменитьГруппу.Видимость = ПользовательИБПолноправный; + + // Настройка отображения закладок страниц + Элементы.ГруппыДоступаИРоли.ОтображениеСтраниц = + ?(ПользовательИБПолноправный, + ОтображениеСтраницФормы.ЗакладкиСверху, + ОтображениеСтраницФормы.Нет); + + // Настройка отображения командной панели для полноправного пользователя + Элементы.ГруппыДоступа.ПоложениеКоманднойПанели = + ?(ПользовательИБПолноправный, + ПоложениеКоманднойПанелиЭлементаФормы.Верх, + ПоложениеКоманднойПанелиЭлементаФормы.Нет); + + // Настройка отображения ролей для полноправного пользователя + Элементы.ОтображениеРолей.Видимость = ПользовательИБПолноправный; + + Если ПользовательИБПолноправный + ИЛИ ПользовательИБОтветственный + ИЛИ СвойДоступ Тогда + ВывестиГруппыДоступа(); Иначе // Обычному пользователю запрещено просматривать любые настройки чужого доступа Элементы.ГруппыДоступаВключитьВГруппу.Видимость = Ложь; Элементы.ГруппыДоступаИсключитьИзГруппы.Видимость = Ложь; - // - Элементы.ГруппыДоступаИРоли.Видимость = Ложь; + + Элементы.ГруппыДоступаИРоли.Видимость = Ложь; Элементы.НедостаточноПравНаПросмотр.Видимость = Истина; КонецЕсли; - //** Установка начальных значений - // перед загрузкой данных из настроек на сервере - // для случая, когда данные ещё не были записаны и не загружаются - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - // Выбор ролей не предполагается, поэтому только выбранные роли - ПоказатьТолькоВыбранныеРоли = Истина; - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина; - // - ОбновитьДеревоРолей(); - - УстановитьТолькоПросмотрРолей(Истина, Истина); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы"); + ОбработатьИнтерфейсРолей("УстановитьТолькоПросмотрРолей", Истина); КонецПроцедуры @@ -66,7 +79,7 @@ ИЛИ ВРег(ИмяСобытия) = ВРег("Запись_ПрофилиГруппДоступа") Тогда ВывестиГруппыДоступа(); - РазвернутьПодсистемыРолей(); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецЕсли; КонецПроцедуры @@ -74,15 +87,7 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда - ПоказатьПодсистемыРолей = Ложь; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь; - Иначе - ПоказатьПодсистемыРолей = Истина; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; - КонецЕсли; - - ОбновитьДеревоРолей(); + ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки); КонецПроцедуры @@ -96,6 +101,7 @@ ТекущийРодитель = Элементы.ГруппыДоступа.ТекущийРодитель; Если ТекущиеДанные = Неопределено Тогда + ГруппаДоступаИзменена = ЗначениеЗаполнено(ТекущаяГруппаДоступа); ТекущаяГруппаДоступа = Неопределено; Иначе @@ -111,31 +117,17 @@ СтандартнаяОбработка = Ложь; - НайденнаяСтрока = ГруппыДоступа.НайтиПоИдентификатору(ВыбраннаяСтрока); - Если НайденнаяСтрока <> Неопределено Тогда + Если ГруппыДоступа.НайтиПоИдентификатору(ВыбраннаяСтрока) <> Неопределено Тогда + Если Элементы.ФормаИзменитьГруппу.Видимость ИЛИ Элементы.ГруппыДоступаИзменитьГруппу.Видимость Тогда + ИзменитьГруппу(Элементы.ФормаИзменитьГруппу); КонецЕсли; КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Роли - -//////////////////////////////////////////////////////////////////////////////// -// Для работы интерфейса ролей - -&НаКлиенте -Процедура РолиПометкаПриИзменении(Элемент) - - Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда - ОбновитьСоставРолей(Элементы.Роли.ТекущаяСтрока, Элементы.Роли.ТекущиеДанные.Пометка); - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -144,13 +136,16 @@ ПараметрыФормы = Новый Структура; Выбранные = Новый Массив; + Для каждого ОписаниеГруппыДоступа Из ГруппыДоступа Цикл Выбранные.Добавить(ОписаниеГруппыДоступа.ГруппаДоступа); КонецЦикла; ПараметрыФормы.Вставить("Выбранные", Выбранные); ПараметрыФормы.Вставить("ПользовательГрупп", Параметры.Пользователь); - НоваяГруппаДоступаПользователя = ОткрытьФормуМодально("Справочник.ГруппыДоступа.Форма.ВыборПоАдминистратору", ПараметрыФормы); + + НоваяГруппаДоступаПользователя = ОткрытьФормуМодально( + "Справочник.ГруппыДоступа.Форма.ВыборПоАдминистратору", ПараметрыФормы); Если ТипЗнч(НоваяГруппаДоступаПользователя) = Тип("СправочникСсылка.ГруппыДоступа") И ЗначениеЗаполнено(НоваяГруппаДоступаПользователя) Тогда @@ -158,6 +153,7 @@ ОписаниеОшибки = ""; ИзменитьСоставГруппы(НоваяГруппаДоступаПользователя, Истина, ОписаниеОшибки); Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Предупреждение(ОписаниеОшибки); Иначе ОповеститьОбИзменении(НоваяГруппаДоступаПользователя); @@ -178,6 +174,7 @@ ОписаниеОшибки = ""; ИзменитьСоставГруппы(ТекущаяГруппаДоступа, Ложь, ОписаниеОшибки); Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда + Предупреждение(ОписаниеОшибки); Иначе ОповеститьОбИзменении(ТекущаяГруппаДоступа); @@ -195,19 +192,18 @@ Предупреждение(НСтр("ru = 'Группа доступа не выбрана.'")); Возврат; - ИначеЕсли НЕ (ПользовательИБПолноправный - ИЛИ ПользовательИБОтветственный - И РазрешеноИзменениеСоставаПользователейГруппы(ТекущаяГруппаДоступа) ) Тогда - // + ИначеЕсли ПользовательИБПолноправный + ИЛИ ПользовательИБОтветственный + И РазрешеноИзменениеСоставаПользователейГруппы(ТекущаяГруппаДоступа) Тогда + + ПараметрыФормы.Вставить("Ключ", ТекущаяГруппаДоступа); + ОткрытьФорму("Справочник.ГруппыДоступа.ФормаОбъекта", ПараметрыФормы); + Иначе Предупреждение(НСтр("ru = 'Невозможно изменить группу доступа, |так как текущий пользователь |не администратор участников группы доступа и |не полноправный администратор.'")); Возврат; - - Иначе - ПараметрыФормы.Вставить("Ключ", ТекущаяГруппаДоступа); - ОткрытьФорму("Справочник.ГруппыДоступа.ФормаОбъекта", ПараметрыФормы); КонецЕсли; КонецПроцедуры @@ -216,7 +212,7 @@ Процедура Обновить(Команда) ВывестиГруппыДоступа(); - РазвернутьПодсистемыРолей(); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры @@ -225,6 +221,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Пользователь", Параметры.Пользователь); + ОткрытьФорму("Отчет.ПраваДоступа.Форма", ПараметрыФормы); КонецПроцедуры @@ -233,41 +230,10 @@ // Для работы интерфейса ролей &НаКлиенте -Процедура ПоказатьТолькоВыбранныеРоли(Команда) +Процедура ГруппировкаРолейПоПодсистемам(Команда) - ПоказатьТолькоВыбранныеРоли = НЕ ПоказатьТолькоВыбранныеРоли; - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = ПоказатьТолькоВыбранныеРоли; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПоказатьПодсистемыРолей(Команда) - - ПоказатьПодсистемыРолей = НЕ ПоказатьПодсистемыРолей; - Элементы.РолиПоказатьПодсистемыРолей.Пометка = ПоказатьПодсистемыРолей; - - ОбновитьДеревоРолей(); - РазвернутьПодсистемыРолей(); - -КонецПроцедуры - -&НаКлиенте -Процедура УстановитьФлажки(Команда) - - ОбновитьСоставРолей(Неопределено, Истина); - Если ПоказатьТолькоВыбранныеРоли Тогда - РазвернутьПодсистемыРолей(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура СнятьФлажки(Команда) - - ОбновитьСоставРолей(Неопределено, Ложь); + ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам"); + ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтаФорма); КонецПроцедуры @@ -279,9 +245,11 @@ Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Если ПользовательИБПолноправный ИЛИ СвойДоступ Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ГруппыДоступа.Ссылка @@ -339,28 +307,33 @@ ВсеГруппыДоступа = Запрос.Выполнить().Выгрузить(); - // Установка представления для группы доступа - // Удаление текущего пользователя из группы доступа, если он входит в нее только непосредственно + // Установка представления для группы доступа. + // Удаление текущего пользователя из группы доступа, если он входит в нее только непосредственно. ЕстьЗапрещенныеГруппы = Ложь; Индекс = ВсеГруппыДоступа.Количество()-1; + Пока Индекс >= 0 Цикл Строка = ВсеГруппыДоступа[Индекс]; + Если РазрешенныеГруппыДоступа.Найти(Строка.ГруппаДоступа, "Ссылка") = Неопределено Тогда ВсеГруппыДоступа.Удалить(Индекс); ЕстьЗапрещенныеГруппы = Истина; КонецЕсли; Индекс = Индекс - 1; КонецЦикла; + ЗначениеВРеквизитФормы(ВсеГруппыДоступа, "ГруппыДоступа"); Элементы.ПредупреждениеЕстьСкрытыеГруппыДоступа.Видимость = ЕстьЗапрещенныеГруппы; Если НЕ ЗначениеЗаполнено(ТекущаяГруппаДоступа) Тогда + Если ГруппыДоступа.Количество() > 0 Тогда ТекущаяГруппаДоступа = ГруппыДоступа[0].ГруппаДоступа; КонецЕсли; КонецЕсли; Для каждого ОписаниеГруппыДоступа Из ГруппыДоступа Цикл + Если ОписаниеГруппыДоступа.ГруппаДоступа = ТекущаяГруппаДоступа Тогда Элементы.ГруппыДоступа.ТекущаяСтрока = ОписаниеГруппыДоступа.ПолучитьИдентификатор(); Прервать; @@ -486,7 +459,7 @@ Если ТипЗнч(Параметры.Пользователь) = Тип("СправочникСсылка.Пользователи") ИЛИ ТипЗнч(Параметры.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - // + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Роли.Роль @@ -502,8 +475,7 @@ | ПО Роли.Ссылка = ГруппыДоступаПользователи.Ссылка.Профиль | И ((НЕ Роли.Ссылка.ПометкаУдаления))"; Иначе - // Группа пользователей или - // Группа внешних пользователей + // Группа пользователей или Группа внешних пользователей. Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Роли.Роль @@ -517,7 +489,22 @@ КонецЕсли; ЗначениеВРеквизитФормы(Запрос.Выполнить().Выгрузить(), "ПрочитанныеРоли"); - ОбновитьДеревоРолей(); + Отбор = Новый Структура("Роль", "ПолныеПрава"); + Если ПрочитанныеРоли.НайтиСтроки(Отбор).Количество() > 0 Тогда + + Отбор = Новый Структура("Роль", "АдминистраторСистемы"); + Если ПрочитанныеРоли.НайтиСтроки(Отбор).Количество() > 0 Тогда + + ПрочитанныеРоли.Очистить(); + ПрочитанныеРоли.Добавить().Роль = "ПолныеПрава"; + ПрочитанныеРоли.Добавить().Роль = "АдминистраторСистемы"; + Иначе + ПрочитанныеРоли.Очистить(); + ПрочитанныеРоли.Добавить().Роль = "ПолныеПрава"; + КонецЕсли; + КонецЕсли; + + ОбработатьИнтерфейсРолей("ОбновитьДеревоРолей"); КонецПроцедуры @@ -525,275 +512,21 @@ // Для работы интерфейса ролей &НаСервере -Функция КоллекцияРолей(ТаблицаЗначенийДляЧтения = Ложь) +Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) - Если ТаблицаЗначенийДляЧтения Тогда - Возврат РеквизитФормыВЗначение("ПрочитанныеРоли"); - КонецЕсли; + ПараметрыДействия = Новый Структура; + ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); + ПараметрыДействия.Вставить("Форма", ЭтаФорма); + ПараметрыДействия.Вставить("КоллекцияРолей", ПрочитанныеРоли); - Возврат ПрочитанныеРоли; - - -КонецФункции - -&НаСервере -Процедура УстановитьТолькоПросмотрРолей(Знач ТолькоПросмотрРолей = Неопределено, Знач РазрешитьПросмотрТолькоВыбранных = Ложь) - - Если ТолькоПросмотрРолей <> Неопределено Тогда - Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей; - Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей; - КонецЕсли; - - Если РазрешитьПросмотрТолькоВыбранных Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность = Ложь; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура РазвернутьПодсистемыРолей(Коллекция = Неопределено); - - Если Коллекция = Неопределено Тогда - Коллекция = Роли.ПолучитьЭлементы(); - КонецЕсли; - - // Развернуть все - Для каждого Строка ИЗ Коллекция Цикл - Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор()); - Если НЕ Строка.ЭтоРоль Тогда - РазвернутьПодсистемыРолей(Строка.ПолучитьЭлементы()); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьДеревоРолей() - - Если НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность Тогда - Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина; - ПоказатьТолькоВыбранныеРоли = Истина; - КонецЕсли; - - // Запоминание текущей строки - ТекущаяПодсистема = ""; - ТекущаяРоль = ""; - // - Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда - ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока); - Если ТекущиеДанные.ЭтоРоль Тогда - ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя); - ТекущаяРоль = ТекущиеДанные.Имя; - Иначе - ТекущаяПодсистема = ТекущиеДанные.Имя; - ТекущаяРоль = ""; - КонецЕсли; - КонецЕсли; - - ДеревоРолей = ПользователиСерверПовтИсп.ДеревоРолей(ПоказатьПодсистемыРолей).Скопировать(); - ДобавитьИменаНесуществующихРолей(ДеревоРолей); - ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); - ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); - ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); - - ЗначениеВРеквизитФормы(ДеревоРолей, "Роли"); - - Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево); - - // Восстановление текущей строки - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеПодсистемы = НайденныеСтроки[0]; - ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы); - СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы); - Если ЗначениеЗаполнено(ТекущаяРоль) Тогда - НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль)); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор(); - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; - Иначе - Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); - КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыДействия.Вставить("ТипПользователя", + Перечисления.ТипыПользователей.ПользовательОбластиДанных); Иначе - НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина); - Если НайденныеСтроки.Количество() <> 0 Тогда - ОписаниеРоли = НайденныеСтроки[0]; - ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли); - СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли); - Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор(); - КонецЕсли; + ПараметрыДействия.Вставить("ТипПользователя", + Перечисления.ТипыПользователей.ПользовательЛокальногоРешения); КонецЕсли; -КонецПроцедуры - -&НаСервере -Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли); - - Если Строка.ЭтоРоль Тогда - Если СкрытьРольПолныеПрава И - (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 6; - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - КонецЕсли; - Иначе - Если Строка.Строки.Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.НомерКартинки = 5; - Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений) - - Если СтрокаДереваЗначений.Родитель = Неопределено Тогда - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы(); - Иначе - ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель); - ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы(); - КонецЕсли; - - Возврат ДанныеФормыКоллекцияЭлементовДерева; - -КонецФункции - - -&НаСервере -Процедура ОбновитьСоставРолей(ИдентификаторСтроки, Добавить); - - Если ИдентификаторСтроки = Неопределено Тогда - // Обработка всех - КоллекцияРолей = КоллекцияРолей(); - КоллекцияРолей.Очистить(); - Если Добавить Тогда - ВсеРоли = ПользователиСерверПовтИсп.ВсеРоли(); - Для каждого ОписаниеРоли Из ВсеРоли Цикл - Если ОписаниеРоли.Имя <> "ПолныеПрава" И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда - КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя; - КонецЕсли; - КонецЦикла; - КонецЕсли; - Если ПоказатьТолькоВыбранныеРоли Тогда - Если КоллекцияРолей.Количество() > 0 Тогда - ОбновитьДеревоРолей(); - Иначе - Роли.ПолучитьЭлементы().Очистить(); - КонецЕсли; - // Возврат - Возврат; - // Возврат - КонецЕсли; - Иначе - ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки); - Если ТекущиеДанные.ЭтоРоль Тогда - ДобавитьУдалитьРоль(ТекущиеДанные.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(ТекущиеДанные.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЕсли; - - ОбновитьПометкуВыбранныхРолей(Роли.ПолучитьЭлементы()); - - Модифицированность = Истина; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьУдалитьРоль(Знач Роль, Знач Добавить) - - НайденныеРоли = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Роль)); - - Если Добавить Тогда - Если НайденныеРоли.Количество() = 0 Тогда - КоллекцияРолей().Добавить().Роль = Роль; - КонецЕсли; - Иначе - Если НайденныеРоли.Количество() > 0 Тогда - КоллекцияРолей().Удалить(НайденныеРоли[0]); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьУдалитьРолиПодсистемы(Знач Коллекция, Знач Добавить) - - Для каждого Строка Из Коллекция Цикл - Если Строка.ЭтоРоль Тогда - ДобавитьУдалитьРоль(Строка.Имя, Добавить); - Иначе - ДобавитьУдалитьРолиПодсистемы(Строка.ПолучитьЭлементы(), Добавить); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьПометкуВыбранныхРолей(Знач Коллекция) - - Индекс = Коллекция.Количество()-1; - - Пока Индекс >= 0 Цикл - Строка = Коллекция[Индекс]; - - Если Строка.ЭтоРоль Тогда - Строка.Пометка = КоллекцияРолей().НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; - Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда - Коллекция.Удалить(Индекс); - КонецЕсли; - Иначе - ОбновитьПометкуВыбранныхРолей(Строка.ПолучитьЭлементы()); - Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда - Коллекция.Удалить(Индекс); - Иначе - Строка.Пометка = Истина; - Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл - Если НЕ Элемент.Пометка Тогда - Строка.Пометка = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Индекс = Индекс-1; - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ДобавитьИменаНесуществующихРолей(ДеревоРолей) - - // Добавление несуществующих ролей - Для каждого Строка Из КоллекцияРолей() Цикл - Если ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, Строка.Роль), Истина).Количество() = 0 Тогда - СтрокаДерева = ДеревоРолей.Строки.Вставить(0); - СтрокаДерева.ЭтоРоль = Истина; - СтрокаДерева.Имя = Строка.Роль; - СтрокаДерева.Синоним = "? " + Строка.Роль; - КонецЕсли; - КонецЦикла; + ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); КонецПроцедуры diff --git a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl index aeb804320..659fc537d 100644 --- a/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl +++ b/SSL/src/CommonForms/ПраваДоступаУпрощенно/Module.bsl @@ -4,7 +4,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Отказ от инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Возврат при получении формы для анализа. Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -15,13 +15,13 @@ КонецЕсли; Если Пользователи.ЭтоПолноправныйПользователь() Тогда - // Просмотр и редактирование состава профилей и ограничений доступа + // Просмотр и редактирование состава профилей и ограничений доступа. ОтборПрофилейТолькоТекущегоПользователя = Ложь; - // + ИначеЕсли Параметры.Пользователь = Пользователи.АвторизованныйПользователь() Тогда - // Просмотр своих профилей и отчета о правах доступа + // Просмотр своих профилей и отчета о правах доступа. ОтборПрофилейТолькоТекущегоПользователя = Истина; - // Скрытие лишних сведений + // Скрытие лишних сведений. Элементы.Профили.ТолькоПросмотр = Истина; Элементы.ПрофилиПометка.Видимость = Ложь; Элементы.Доступ.Видимость = Ложь; @@ -34,10 +34,11 @@ Возврат; КонецЕсли; - //** Подготовка постоянных коллекций + // Заполнение вспомогательных данных. // Установка заголовка формы - Заголовок = УправлениеДоступом.ЗаголовокПодчиненнойФормы(НСтр("ru = 'Права доступа: %1 (%2)'"), Параметры.Пользователь); + Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( + НСтр("ru = 'Права доступа: %1 (%2)'"), Параметры.Пользователь); Если ТипЗнч(Параметры.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда Элементы.Профили.Заголовок = НСтр("ru = 'Профили внешнего пользователя'"); @@ -45,13 +46,15 @@ Элементы.Профили.Заголовок = НСтр("ru = 'Профили пользователя'"); КонецЕсли; - // Заполнение списка видов доступа через права по значениям доступа - Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа().НайтиСтроки(Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина)) Цикл + // Заполнение списка видов доступа через права по значениям доступа. + Отбор = Новый Структура("ВидДоступаЧерезПраваПоЗначениямДоступа", Истина); + Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа().НайтиСтроки(Отбор) Цикл ВидыДоступаЧерезПраваПоЗначениямДоступа.Добавить(СвойстваВидаДоступа.ВидДоступа); КонецЦикла; - // Заполнение типов значений доступа всех видов доступа - Для каждого СвойстваВидаДоступа Из УправлениеДоступом.СвойстваВидаДоступа() Цикл + // Заполнение типов значений доступа всех видов доступа. + Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебный.СвойстваВидаДоступа() Цикл + Для каждого Тип Из СвойстваВидаДоступа.ВидДоступа.ТипЗначения.Типы() Цикл МассивТипов = Новый Массив; МассивТипов.Добавить(Тип); @@ -59,9 +62,13 @@ МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); Если Метаданные.Перечисления.Найти(МетаданныеТипа.Имя) = МетаданныеТипа Тогда + ПредставлениеТипа = МетаданныеТипа.Представление(); Иначе - ПредставлениеТипа = ?(ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта), МетаданныеТипа.ПредставлениеОбъекта, МетаданныеТипа.Представление()); + ПредставлениеТипа = + ?(ЗначениеЗаполнено(МетаданныеТипа.ПредставлениеОбъекта), + МетаданныеТипа.ПредставлениеОбъекта, + МетаданныеТипа.Представление()); КонецЕсли; НоваяСтрока = ТипыЗначенийДоступаВидовДоступа.Добавить(); @@ -77,13 +84,15 @@ ВидДоступаПользователи = ПланыВидовХарактеристик.ВидыДоступа.Пользователи; ВидДоступаВнешниеПользователи = ПланыВидовХарактеристик.ВидыДоступа.ВнешниеПользователи; - ИспользоватьВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей(); - СправочникВнешниеПользователиДоступен = ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); + ИспользоватьВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей(); + СправочникВнешниеПользователиДоступен = + ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); - // Заполнение данных + // Заполнение данных. Запрос = Новый Запрос; Запрос.УстановитьПараметр("Пользователь", Параметры.Пользователь); - Запрос.УстановитьПараметр("ОтборПрофилейТолькоТекущегоПользователя", ОтборПрофилейТолькоТекущегоПользователя); + Запрос.УстановитьПараметр("ОтборПрофилейТолькоТекущегоПользователя", + ОтборПрофилейТолькоТекущегоПользователя); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | Профили.Ссылка, @@ -104,9 +113,9 @@ | ПО (ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка) | И (ГруппыДоступаПользователи.Пользователь = &Пользователь) |ГДЕ - | (НЕ Профили.ПометкаУдаления) - | И (НЕ(&ОтборПрофилейТолькоТекущегоПользователя = ИСТИНА - | И ГруппыДоступаПользователи.Ссылка ЕСТЬ NULL )) + | НЕ Профили.ПометкаУдаления + | И НЕ(&ОтборПрофилейТолькоТекущегоПользователя = ИСТИНА + | И ГруппыДоступаПользователи.Ссылка ЕСТЬ NULL ) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -136,7 +145,7 @@ | ПО Профили.ПерсональнаяГруппаДоступа = ГруппыДоступаВидыДоступа.Ссылка | И (ПрофилиВидыДоступа.ВидДоступа = ГруппыДоступаВидыДоступа.ВидДоступа) |ГДЕ - | (НЕ ПрофилиВидыДоступа.Предустановленный) + | НЕ ПрофилиВидыДоступа.Предустановленный |; | |//////////////////////////////////////////////////////////////////////////////// @@ -153,7 +162,7 @@ | ПО Профили.ПерсональнаяГруппаДоступа = ГруппыДоступаЗначенияДоступа.Ссылка | И (ПрофилиВидыДоступа.ВидДоступа = ГруппыДоступаЗначенияДоступа.ВидДоступа) |ГДЕ - | (НЕ ПрофилиВидыДоступа.Предустановленный)"; + | НЕ ПрофилиВидыДоступа.Предустановленный"; УстановитьПривилегированныйРежим(Истина); РезультатыЗапроса = Запрос.ВыполнитьПакет(); @@ -164,14 +173,16 @@ ЗначениеВРеквизитФормы(РезультатыЗапроса[3].Выгрузить(), "ЗначенияДоступа"); - // Определение необходимости настройки ограничений доступа + // Определение необходимости настройки ограничений доступа. Если НЕ УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда Элементы.Доступ.Видимость = Ложь; КонецЕсли; - //** Заполнение изменяемых коллекций Для каждого СвойстваПрофиля Из Профили Цикл - Для каждого ОписаниеВидаДоступа Из ВидыДоступа.НайтиСтроки(Новый Структура("Профиль", СвойстваПрофиля.Профиль)) Цикл + + Отбор = Новый Структура("Профиль", СвойстваПрофиля.Профиль); + Для каждого ОписаниеВидаДоступа Из ВидыДоступа.НайтиСтроки(Отбор) Цикл + ОбновитьПредставлениеИспользованияВидаДоступа(ЭтаФорма, СвойстваПрофиля, ОписаниеВидаДоступа); ОбновитьНомерСтрокиПоВиду(ЭтаФорма, СвойстваПрофиля, ОписаниеВидаДоступа); КонецЦикла; @@ -221,7 +232,8 @@ Отказ = Ложь; ТекущиеДанные = Элементы.Профили.ТекущиеДанные; - Если ТекущиеДанные <> Неопределено И НЕ ТекущиеДанные.Пометка Тогда + Если ТекущиеДанные <> Неопределено + И НЕ ТекущиеДанные.Пометка Тогда // Проверка незаполненных и повторяющихся значений доступа // перед отключением профиля и отключением доступности его настройки. ОчиститьСообщения(); @@ -308,7 +320,6 @@ Элементы.ВидыДоступа.ТекущиеДанные.ДоступРазрешен = (ВыбранноеЗначение = "ВсеРазрешены"); Модифицированность = Истина; - // ПриИзмененииТекущегоВидаДоступа(ЭтаФорма); КонецПроцедуры @@ -319,15 +330,25 @@ &НаКлиенте Процедура ЗначенияДоступаПриИзменении(Элемент) - Если Элемент.ТекущиеДанные <> Неопределено И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда + Если Элемент.ТекущиеДанные <> Неопределено + И НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.ВидДоступа) Тогда + Элемент.ТекущиеДанные.Профиль = ТекущийПрофиль; Элемент.ТекущиеДанные.ВидДоступа = ТекущийВидДоступа; + Отбор = Новый Структура("Профиль, ВидДоступа", ТекущийПрофиль, ТекущийВидДоступа); Элемент.ТекущиеДанные.НомерСтрокиПоВиду = ЗначенияДоступа.НайтиСтроки(Отбор).Количество(); КонецЕсли; - ОбновитьНомерСтрокиПоВиду(ЭтаФорма, Элементы.Профили.ТекущиеДанные, Элементы.ВидыДоступа.ТекущиеДанные); - ОбновитьПредставлениеИспользованияВидаДоступа(ЭтаФорма, Элементы.Профили.ТекущиеДанные, Элементы.ВидыДоступа.ТекущиеДанные); + ОбновитьНомерСтрокиПоВиду( + ЭтаФорма, + Элементы.Профили.ТекущиеДанные, + Элементы.ВидыДоступа.ТекущиеДанные); + + ОбновитьПредставлениеИспользованияВидаДоступа( + ЭтаФорма, + Элементы.Профили.ТекущиеДанные, + Элементы.ВидыДоступа.ТекущиеДанные); КонецПроцедуры @@ -338,8 +359,9 @@ Элемент.ТекущиеДанные.ЗначениеДоступа = ТекущиеТипыЗначенийДоступа[0].Значение; КонецЕсли; - Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено - И ТекущиеТипыЗначенийДоступа.Количество() > 1; + Элементы.ЗначениеДоступа.КнопкаОчистки + = ТекущийТипЗначенияДоступа <> Неопределено + И ТекущиеТипыЗначенийДоступа.Количество() > 1; КонецПроцедуры @@ -359,8 +381,9 @@ ТекущиеДанные.ЗначениеДоступа = ТекущийТипЗначенияДоступа; КонецЕсли; - Элементы.ЗначениеДоступа.КнопкаОчистки = ТекущийТипЗначенияДоступа <> Неопределено - И ТекущиеТипыЗначенийДоступа.Количество() > 1; + Элементы.ЗначениеДоступа.КнопкаОчистки + = ТекущийТипЗначенияДоступа <> Неопределено + И ТекущиеТипыЗначенийДоступа.Количество() > 1; Если ТекущийТипЗначенияДоступа = ПользовательПустаяСсылка ИЛИ ТекущийТипЗначенияДоступа = ГруппаПользователейПустаяСсылка Тогда @@ -369,8 +392,9 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); ПараметрыФормы.Вставить("ВыборГруппПользователей", Ложь); + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); ИначеЕсли ТекущийТипЗначенияДоступа = ВнешнийПользовательПустаяСсылка ИЛИ @@ -380,8 +404,9 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Ложь); + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент); КонецЕсли; @@ -390,19 +415,31 @@ &НаКлиенте Процедура ЗначениеДоступаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + ТекущиеДанные = Элементы.ЗначенияДоступа.ТекущиеДанные; + Если ВыбранноеЗначение = Тип("СправочникСсылка.Пользователи") ИЛИ ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыПользователей") Тогда СтандартнаяОбработка = Ложь; - НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа; - ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", Новый Структура("ВыборГруппПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ВыборГруппПользователей", Истина); + + ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элемент); ИначеЕсли ВыбранноеЗначение = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ ВыбранноеЗначение = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда СтандартнаяОбработка = Ложь; - НачальноеЗначение = Элементы.ЗначенияДоступа.ТекущиеДанные.ЗначениеДоступа; - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", Новый Структура("ВыборГруппВнешнихПользователей, ТекущаяСтрока", Истина, НачальноеЗначение), Элемент); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ТекущаяСтрока", ТекущиеДанные.ЗначениеДоступа); + ПараметрыФормы.Вставить("ВыборГруппВнешнихПользователей", Истина); + + ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элемент); КонецЕсли; КонецПроцедуры @@ -424,10 +461,17 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст, , ТекущийВидДоступа = ВидДоступаВнешниеПользователи, ТекущийВидДоступа <> ВидДоступаПользователи); + Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи + ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда + + ДанныеВыбора = СформироватьДанныеВыбораПользователя( + Текст, + , + ТекущийВидДоступа = ВидДоступаВнешниеПользователи, + ТекущийВидДоступа <> ВидДоступаПользователи); Иначе - ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь); + ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа( + Текст, ТекущийВидДоступа, Ложь); КонецЕсли; КонецЕсли; @@ -439,10 +483,17 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст, , ТекущийВидДоступа = ВидДоступаВнешниеПользователи, ТекущийВидДоступа <> ВидДоступаПользователи); + Если ТекущийВидДоступа = ВидДоступаВнешниеПользователи + ИЛИ ТекущийВидДоступа = ВидДоступаПользователи Тогда + + ДанныеВыбора = СформироватьДанныеВыбораПользователя( + Текст, + , + ТекущийВидДоступа = ВидДоступаВнешниеПользователи, + ТекущийВидДоступа <> ВидДоступаПользователи); Иначе - ДанныеВыбора = УправлениеДоступом.СформироватьДанныеВыбораЗначенияДоступа(Текст, ТекущийВидДоступа, Ложь); + ДанныеВыбора = СформироватьДанныеВыбораЗначенияДоступа( + Текст, ТекущийВидДоступа, Ложь); КонецЕсли; КонецЕсли; @@ -463,6 +514,7 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Пользователь", Параметры.Пользователь); + ОткрытьФорму("Отчет.ПраваДоступа.Форма", ПараметрыФормы); КонецПроцедуры @@ -488,13 +540,20 @@ Пользователи.НайтиНеоднозначныхПользователейИБ(); - // Получить список измененных + // Получение списка изменений. Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Параметры.Пользователь); - Запрос.УстановитьПараметр("Профили", Профили.Выгрузить(, "Профиль, Пометка")); - Запрос.УстановитьПараметр("ВидыДоступа", ВидыДоступа.Выгрузить(, "Профиль, ВидДоступа, ДоступРазрешен")); - Запрос.УстановитьПараметр("ЗначенияДоступа", ЗначенияДоступа.Выгрузить(, "Профиль, ВидДоступа, ЗначениеДоступа")); - //Запрос.МенеджерВременныхТаблиц + + Запрос.УстановитьПараметр("Пользователь", Параметры.Пользователь); + + Запрос.УстановитьПараметр( + "Профили", Профили.Выгрузить(, "Профиль, Пометка")); + + Запрос.УстановитьПараметр( + "ВидыДоступа", ВидыДоступа.Выгрузить(, "Профиль, ВидДоступа, ДоступРазрешен")); + + Запрос.УстановитьПараметр( + "ЗначенияДоступа", ЗначенияДоступа.Выгрузить(, "Профиль, ВидДоступа, ЗначениеДоступа")); + Запрос.Текст = "ВЫБРАТЬ | Профили.Профиль КАК Ссылка, @@ -544,7 +603,7 @@ | ПО (ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка) | И (ГруппыДоступаПользователи.Пользователь = &Пользователь) |ГДЕ - | (НЕ Профили.ПометкаУдаления) + | НЕ Профили.ПометкаУдаления |; | |//////////////////////////////////////////////////////////////////////////////// @@ -574,6 +633,7 @@ |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Профили.Ссылка КАК Профиль, + | СправочникПрофили.Наименование КАК ПрофильНаименование, | Профили.Пометка, | ТекущиеПрофили.ПерсональнаяГруппаДоступа |ИЗ @@ -640,46 +700,58 @@ | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Профили КАК Профили | ПО ПрофилиИзмененыхГрупп.Профиль = Профили.Ссылка | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекущиеПрофили КАК ТекущиеПрофили - | ПО ПрофилиИзмененыхГрупп.Профиль = ТекущиеПрофили.Ссылка"; + | ПО ПрофилиИзмененыхГрупп.Профиль = ТекущиеПрофили.Ссылка + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК СправочникПрофили + | ПО (СправочникПрофили.Ссылка = ПрофилиИзмененыхГрупп.Профиль)"; НачатьТранзакцию(); Попытка Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл + Если ЗначениеЗаполнено(Выборка.ПерсональнаяГруппаДоступа) Тогда ЗаблокироватьДанныеДляРедактирования(Выборка.ПерсональнаяГруппаДоступа); ГруппаДоступаОбъект = Выборка.ПерсональнаяГруппаДоступа.ПолучитьОбъект(); Иначе - // Создание персональной группы доступа + // Создание персональной группы доступа. ГруппаДоступаОбъект = Справочники.ГруппыДоступа.СоздатьЭлемент(); - ГруппаДоступаОбъект.Родитель = УправлениеДоступом.РодительПерсональныхГруппДоступа(); - ГруппаДоступаОбъект.Наименование = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Выборка.Профиль, "Наименование"); + ГруппаДоступаОбъект.Родитель = УправлениеДоступомСлужебный.РодительПерсональныхГруппДоступа(); + ГруппаДоступаОбъект.Наименование = Выборка.ПрофильНаименование; ГруппаДоступаОбъект.Пользователь = Параметры.Пользователь; ГруппаДоступаОбъект.Профиль = Выборка.Профиль; КонецЕсли; + Если Выборка.Профиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда Если Выборка.Пометка Тогда - Если ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь") = Неопределено Тогда + Если ГруппаДоступаОбъект.Пользователи.Найти( + Параметры.Пользователь, "Пользователь") = Неопределено Тогда + ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь; КонецЕсли; Иначе - ОписаниеПользователя = ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь"); + ОписаниеПользователя = ГруппаДоступаОбъект.Пользователи.Найти( + Параметры.Пользователь, "Пользователь"); + Если ОписаниеПользователя <> Неопределено Тогда ГруппаДоступаОбъект.Пользователи.Удалить(ОписаниеПользователя); Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - // Проверка пустого списка пользователей ИБ в группе доступа Администраторы + // Проверка пустого списка пользователей ИБ в группе доступа Администраторы. НайденПользовательИБ = Ложь; Для каждого ОписаниеПользователя ИЗ ГруппаДоступаОбъект.Пользователи Цикл Если ЗначениеЗаполнено(ОписаниеПользователя.Пользователь) - И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда - // + И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеПользователя.Пользователь.ИдентификаторПользователяИБ) + <> Неопределено Тогда + НайденПользовательИБ = Истина; Прервать; КонецЕсли; КонецЦикла; Если НЕ НайденПользовательИБ Тогда - ВызватьИсключение(НСтр("ru = 'Профиль Администратор должен быть хотя бы у одного пользователя, которому разрешен доступ к информационной базе.'")); + ВызватьИсключение + НСтр("ru = 'Профиль Администратор должен быть хотя бы у одного пользователя, + |которому разрешен доступ к информационной базе.'"); КонецЕсли; КонецЕсли; КонецЕсли; @@ -689,11 +761,17 @@ Если Выборка.Пометка Тогда ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь; КонецЕсли; + Отбор = Новый Структура("Профиль", Выборка.Профиль); - ГруппаДоступаОбъект.ВидыДоступа.Загрузить( ВидыДоступа.Выгрузить( Отбор, "ВидДоступа, ДоступРазрешен")); - ГруппаДоступаОбъект.ЗначенияДоступа.Загрузить(ЗначенияДоступа.Выгрузить(Отбор, "ВидДоступа, ЗначениеДоступа")); + + ГруппаДоступаОбъект.ВидыДоступа.Загрузить( + ВидыДоступа.Выгрузить(Отбор, "ВидДоступа, ДоступРазрешен")); + + ГруппаДоступаОбъект.ЗначенияДоступа.Загрузить( + ЗначенияДоступа.Выгрузить(Отбор, "ВидДоступа, ЗначениеДоступа")); КонецЕсли; ГруппаДоступаОбъект.Записать(); + Если ЗначениеЗаполнено(Выборка.ПерсональнаяГруппаДоступа) Тогда РазблокироватьДанныеДляРедактирования(Выборка.ПерсональнаяГруппаДоступа); КонецЕсли; @@ -702,7 +780,8 @@ Модифицированность = Ложь; Исключение ОтменитьТранзакцию(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , , , Отказ); КонецПопытки; КонецПроцедуры @@ -764,28 +843,37 @@ #Если Клиент Тогда ТекущиеДанные = Элементы.ВидыДоступа.ТекущиеДанные; #Иначе - ТекущиеДанные = ВидыДоступа.НайтиПоИдентификатору(?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, -1, Элементы.ВидыДоступа.ТекущаяСтрока)); + ТекущиеДанные = ВидыДоступа.НайтиПоИдентификатору( + ?(Элементы.ВидыДоступа.ТекущаяСтрока = Неопределено, + -1, + Элементы.ВидыДоступа.ТекущаяСтрока)); #КонецЕсли Если ТекущиеДанные <> Неопределено Тогда Форма.ТекущийВидДоступа = ТекущиеДанные.ВидДоступа; - Если Форма.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ТекущиеДанные.ВидДоступа) = Неопределено Тогда + Если Форма.ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению( + ТекущиеДанные.ВидДоступа) = Неопределено Тогда + ЗначенияЗадаются = Истина; Элементы.ТипыВидовДоступа.ТекущаяСтраница = Элементы.ОбычныйВидДоступа; - // Установка отбора значений + // Установка отбора значений. Если Элементы.ЗначенияДоступа.ОтборСтрок = Неопределено ИЛИ Элементы.ЗначенияДоступа.ОтборСтрок.Профиль <> Форма.ТекущийПрофиль ИЛИ Элементы.ЗначенияДоступа.ОтборСтрок.ВидДоступа <> ТекущиеДанные.ВидДоступа Тогда - // - Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль, ВидДоступа", Форма.ТекущийПрофиль, ТекущиеДанные.ВидДоступа); + + Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура( + "Профиль, ВидДоступа", Форма.ТекущийПрофиль, ТекущиеДанные.ВидДоступа); КонецЕсли; Иначе - Элементы.ТипыВидовДоступа.ТекущаяСтраница = ?(ТекущиеДанные.ДоступРазрешен, Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаПредупреждение, Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаИнформация); + Элементы.ТипыВидовДоступа.ТекущаяСтраница = + ?(ТекущиеДанные.ДоступРазрешен, + Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаПредупреждение, + Элементы.ВидДоступаЧерезПраваПоЗначениямДоступаИнформация); КонецЕсли; - // Обновление поля НадписьВидДоступа + // Обновление поля НадписьВидДоступа. Форма.НадписьВидДоступа = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(ТекущиеДанные.ВидДоступа = Форма.ВидДоступаПользователи, ?(ТекущиеДанные.ДоступРазрешен, @@ -802,27 +890,44 @@ ), Строка(ТекущиеДанные.ВидДоступа)); - ОбновитьПредставлениеИспользованияВидаДоступа(Форма, Элементы.Профили.ТекущиеДанные, ТекущиеДанные); + ОбновитьПредставлениеИспользованияВидаДоступа( + Форма, Элементы.Профили.ТекущиеДанные, ТекущиеДанные); Иначе Форма.НадписьВидДоступа = ""; Форма.ТекущийВидДоступа = Неопределено; - Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура("Профиль, ВидДоступа", Форма.ТекущийПрофиль, Неопределено); + + Элементы.ЗначенияДоступа.ОтборСтрок = Новый ФиксированнаяСтруктура( + "Профиль, ВидДоступа", Форма.ТекущийПрофиль, Неопределено); Если ВидыДоступа.Количество() = 0 Тогда ЗначенияДоступа.Очистить(); КонецЕсли; КонецЕсли; - Форма.ТекущийТипЗначенияДоступа = ?(ТекущиеДанные = Неопределено, Неопределено, ТекущиеДанные.ТекущийТипЗначенияДоступа); + Форма.ТекущийТипЗначенияДоступа = + ?(ТекущиеДанные = Неопределено, + Неопределено, + ТекущиеДанные.ТекущийТипЗначенияДоступа); + Форма.ТекущиеТипыЗначенийДоступа = Новый СписокЗначений; Если ЗначенияЗадаются Тогда - Для каждого ОписаниеТипаВидаДоступа Из Форма.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа)) Цикл - Форма.ТекущиеТипыЗначенийДоступа.Добавить(ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, ОписаниеТипаВидаДоступа.ПредставлениеТипа); + + Отбор = Новый Структура("ВидДоступа", ТекущиеДанные.ВидДоступа); + ОписанияТиповВидовДоступа = Форма.ТипыЗначенийДоступаВидовДоступа.НайтиСтроки(Отбор); + + Для каждого ОписаниеТипаВидаДоступа Из ОписанияТиповВидовДоступа Цикл + Форма.ТекущиеТипыЗначенийДоступа.Добавить( + ОписаниеТипаВидаДоступа.ТипЗначенияДоступа, + ОписаниеТипаВидаДоступа.ПредставлениеТипа); КонецЦикла; Иначе Если ТекущиеДанные <> Неопределено Тогда - Отбор = Новый Структура("Профиль, ВидДоступа", Форма.ТекущийПрофиль, Форма.ТекущийВидДоступа); + + Отбор = Новый Структура; + Отбор.Вставить("Профиль", Форма.ТекущийПрофиль); + Отбор.Вставить("ВидДоступа", Форма.ТекущийВидДоступа); + Для каждого Строка Из ЗначенияДоступа.НайтиСтроки(Отбор) Цикл ЗначенияДоступа.Удалить(Строка); КонецЦикла @@ -834,7 +939,9 @@ КонецЕсли; Элементы.ЗначенияДоступа.Доступность = ЗначенияЗадаются; - Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы.ЗначенияДоступаДобавить.Доступность = ЗначенияЗадаются; + + Элементы.ЗначенияДоступа.КоманднаяПанель.ПодчиненныеЭлементы.ЗначенияДоступаДобавить.Доступность = + ЗначенияЗадаются; КонецПроцедуры @@ -845,23 +952,42 @@ ЗначенияДоступа = Форма.ЗначенияДоступа; ВидыДоступаЧерезПраваПоЗначениямДоступа = Форма.ВидыДоступаЧерезПраваПоЗначениямДоступа; - Если СвойстваПрофиля = Неопределено ИЛИ ОписаниеВидаДоступа = Неопределено Тогда + Если СвойстваПрофиля = Неопределено + ИЛИ ОписаниеВидаДоступа = Неопределено Тогда + ОписаниеВидаДоступа.Использование = ""; Возврат; КонецЕсли; - КоличествоЗначений = ЗначенияДоступа.НайтиСтроки(Новый Структура("Профиль, ВидДоступа", СвойстваПрофиля.Профиль, ОписаниеВидаДоступа.ВидДоступа)).Количество(); + Отбор = Новый Структура; + Отбор.Вставить("Профиль", СвойстваПрофиля.Профиль); + Отбор.Вставить("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа); + КоличествоЗначений = ЗначенияДоступа.НайтиСтроки(Отбор).Количество(); Если КоличествоЗначений > 0 Тогда - ПрописьЧисла = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = ',,,,,,,,0'")); - ПрописьЧислаИПредмета = ЧислоПрописью(КоличествоЗначений, "Л = ru_RU", НСтр("ru = '-го значения,-х значений,-и значений,,,,,,0'")); - ЧислоИПредмет = СтрЗаменить(ПрописьЧислаИПредмета, ПрописьЧисла, Формат(КоличествоЗначений, "ЧГ=")); + + ПрописьЧисла = ЧислоПрописью( + КоличествоЗначений, "Л = ru_RU", НСтр("ru = ',,,,,,,,0'")); + + ПрописьЧислаИПредмета = ЧислоПрописью( + КоличествоЗначений, + "Л = ru_RU", + НСтр("ru = '-го значения,-х значений,-и значений,,,,,,0'")); + + ЧислоИПредмет = СтрЗаменить( + ПрописьЧислаИПредмета, + ПрописьЧисла, + Формат(КоличествоЗначений, "ЧГ=")); + ОписаниеВидаДоступа.Использование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(ОписаниеВидаДоступа.ДоступРазрешен, НСтр("ru = 'Все разрешены, кроме %1'"), НСтр("ru = 'Все запрещены, кроме %1'") ), ЧислоИПредмет); - ИначеЕсли ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению(ОписаниеВидаДоступа.ВидДоступа) = Неопределено Тогда + + ИначеЕсли ВидыДоступаЧерезПраваПоЗначениямДоступа.НайтиПоЗначению( + ОписаниеВидаДоступа.ВидДоступа) = Неопределено Тогда + ОписаниеВидаДоступа.Использование = ?(ОписаниеВидаДоступа.ДоступРазрешен, НСтр("ru = 'Все разрешены, без исключений'"), @@ -880,7 +1006,8 @@ ЗначенияДоступа = Форма.ЗначенияДоступа; - Отбор = Новый Структура("Профиль, ВидДоступа", СвойстваПрофиля.Профиль, ОписаниеВидаДоступа.ВидДоступа); + Отбор = Новый Структура("Профиль", СвойстваПрофиля.Профиль); + Отбор = Новый Структура("ВидДоступа", ОписаниеВидаДоступа.ВидДоступа); ЗначенияДоступаПоВиду = ЗначенияДоступа.НайтиСтроки(Отбор); ТекущийНомер = 1; @@ -891,12 +1018,10 @@ КонецПроцедуры - &НаКлиенте Функция ВыбранТипЗначенияДоступа(Знач ТипыЗначенияДоступа) Если ТекущийТипЗначенияДоступа <> Неопределено Тогда - Возврат Истина; ИначеЕсли ТипыЗначенияДоступа.Количество() = 1 Тогда @@ -923,7 +1048,10 @@ КонецЕсли; КонецЕсли; - Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент(НСтр("ru = 'Выбор типа данных'"), ТипыЗначенияДоступа[0]); + Элемент = ТипыЗначенияДоступа.ВыбратьЭлемент( + НСтр("ru = 'Выбор типа данных'"), + ТипыЗначенияДоступа[0]); + Если Элемент <> Неопределено Тогда ТекущийТипЗначенияДоступа = Элемент.Значение; Возврат Истина; @@ -947,11 +1075,10 @@ Пока НЕ Отказ И НомерСтрокиВидаДоступа >= 0 Цикл ТекущаяСтрокаВидаДоступа = ВидыДоступаПрофиля[НомерСтрокиВидаДоступа]; - ЗначенияДоступаВидаДоступа = ЗначенияДоступа.НайтиСтроки(Новый Структура( - "Профиль, - |ВидДоступа", - СвойстваПрофиля.Профиль, - ТекущаяСтрокаВидаДоступа.ВидДоступа)); + Отбор = Новый Структура; + Отбор.Вставить("Профиль", СвойстваПрофиля.Профиль); + Отбор.Вставить("ВидДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа); + ЗначенияДоступаВидаДоступа = ЗначенияДоступа.НайтиСтроки(Отбор); НомерСтроки = ЗначенияДоступаВидаДоступа.Количество()-1; @@ -971,19 +1098,18 @@ "ЗначенияДоступа", НомерСтроки, НСтр("ru = 'Значение в строке %1 не выбрано.'")); + Отказ = Истина; Прервать; КонецЕсли; // Проверка наличия повторяющихся значений. - НайденныеЗначения = ЗначенияДоступа.НайтиСтроки( - Новый Структура( - "Профиль, - |ВидДоступа, - |ЗначениеДоступа", - СвойстваПрофиля.Профиль, - ТекущаяСтрокаВидаДоступа.ВидДоступа, - ТекущаяСтрока.ЗначениеДоступа)); + Отбор = Новый Структура; + Отбор.Вставить("Профиль", СвойстваПрофиля.Профиль); + Отбор.Вставить("ВидДоступа", ТекущаяСтрокаВидаДоступа.ВидДоступа); + Отбор.Вставить("ЗначениеДоступа", ТекущаяСтрока.ЗначениеДоступа); + + НайденныеЗначения = ЗначенияДоступа.НайтиСтроки(Отбор); Если НайденныеЗначения.Количество() > 1 Тогда @@ -996,6 +1122,7 @@ "ЗначенияДоступа", НомерСтроки, НСтр("ru = 'Значение в строке %1 повторяется.'")); + Отказ = Истина; Прервать; КонецЕсли; @@ -1007,3 +1134,27 @@ КонецЦикла; КонецПроцедуры + +&НаСервереБезКонтекста +Функция СформироватьДанныеВыбораПользователя(Знач Текст, + Знач ВключаяГруппы = Истина, + Знач ВключаяВнешнихПользователей = Неопределено, + Знач БезПользователей = Ложь) Экспорт + + Возврат Пользователи.СформироватьДанныеВыбораПользователя( + Текст, + ВключаяГруппы, + ВключаяВнешнихПользователей, + БезПользователей); + +КонецФункции + +&НаСервереБезКонтекста +Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина) + + Возврат УправлениеДоступомСлужебный.СформироватьДанныеВыбораЗначенияДоступа( + Текст, + ВидДоступа, + ВключаяГруппы); + +КонецФункции diff --git a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl index 91932f8ea..ac88c7d5e 100644 --- a/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl +++ b/SSL/src/CommonForms/ПраваПоЗначениямДоступа/Module.bsl @@ -4,7 +4,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Отказ от инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Возврат при получении формы для анализа. Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; @@ -13,42 +13,63 @@ // Проверка разрешения на открытие формы. ОписаниеОшибки = ""; - Если НЕ УправлениеДоступом.РазрешеноУправлениеПравамиПоЗначениямДоступа(СсылкаНаОбъект, ОписаниеОшибки, ТолькоПросмотр) Тогда + Если НЕ УправлениеДоступом.РазрешеноУправлениеПравамиПоЗначениямДоступа( + СсылкаНаОбъект, ОписаниеОшибки, ТолькоПросмотр) Тогда + ВызватьИсключение(ОписаниеОшибки); КонецЕсли; - ИспользоватьВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей() И ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); + ИспользоватьВнешнихПользователей + = ВнешниеПользователи.ИспользоватьВнешнихПользователей() + И ПравоДоступа("Просмотр", Метаданные.Справочники.ВнешниеПользователи); УстановитьПривилегированныйРежим(Истина); - СписокТиповПользователей.Добавить(Тип("СправочникСсылка.Пользователи"), "Пользователи"); - СписокТиповПользователей.Добавить(Тип("СправочникСсылка.ВнешниеПользователи"), "ВнешниеПользователи"); + СписокТиповПользователей.Добавить( + Тип("СправочникСсылка.Пользователи"), + "Пользователи"); + + СписокТиповПользователей.Добавить( + Тип("СправочникСсылка.ВнешниеПользователи"), + "ВнешниеПользователи"); // Определение режима редактирования прав. - НастройкаПоЗначениюДоступа = (ТипЗнч(СсылкаНаОбъект) <> Тип("СправочникСсылка.ГруппыПользователей")) И - (ТипЗнч(СсылкаНаОбъект) <> Тип("СправочникСсылка.Пользователи")) И - (ТипЗнч(СсылкаНаОбъект) <> Тип("СправочникСсылка.ГруппыВнешнихПользователей")) И - (ТипЗнч(СсылкаНаОбъект) <> Тип("СправочникСсылка.ВнешниеПользователи")); - НастройкаПоГруппеПользователей = (ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ГруппыПользователей")) ИЛИ - (ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ГруппыВнешнихПользователей")); - ВнешнийПользовательИлиГруппа = (ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ГруппыВнешнихПользователей")) ИЛИ - (ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ВнешниеПользователи")); + НастройкаПоЗначениюДоступа + = (ТипЗнч(СсылкаНаОбъект) <> Тип("СправочникСсылка.ГруппыПользователей")) + И (ТипЗнч(СсылкаНаОбъект) <> Тип("СправочникСсылка.Пользователи")) + И (ТипЗнч(СсылкаНаОбъект) <> Тип("СправочникСсылка.ГруппыВнешнихПользователей")) + И (ТипЗнч(СсылкаНаОбъект) <> Тип("СправочникСсылка.ВнешниеПользователи")); + + НастройкаПоГруппеПользователей + = (ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ГруппыПользователей")) + ИЛИ (ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ГруппыВнешнихПользователей")); + + ВнешнийПользовательИлиГруппа + = (ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ГруппыВнешнихПользователей")) + ИЛИ (ТипЗнч(СсылкаНаОбъект) = Тип("СправочникСсылка.ВнешниеПользователи")); // Установка заголовка формы. - Заголовок = УправлениеДоступом.ЗаголовокПодчиненнойФормы(НСтр("ru = 'Права доступа: %1 (%2)'"), СсылкаНаОбъект); + Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( + НСтр("ru = 'Права доступа: %1 (%2)'"), СсылкаНаОбъект); МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); + Если НастройкаПоЗначениюДоступа Тогда - НазваниеЗначенийДоступа = УправлениеДоступом.НазваниеОбъектаИзМетаданных(МетаданныеОбъекта); + + НазваниеЗначенийДоступа = УправлениеДоступомСлужебный.НазваниеОбъектаИзМетаданных(МетаданныеОбъекта); Элементы.ВидДоступа.Видимость = Ложь; ТаблицаЗначенийДоступа = МетаданныеОбъекта.ПолноеИмя(); - ВидыДоступа = УправлениеДоступом.ВидыДоступаТаблицы(ТаблицаЗначенийДоступа); - Если ВидыДоступа.Количество() <> 1 ИЛИ НЕ УправлениеДоступом.СвойстваВидаДоступа(ВидыДоступа[0]).ВидДоступаЧерезПраваПоЗначениямДоступа Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Для значений доступа ""%1"" не найдено вида доступа через права по значениям доступа.'"), - Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа).Синоним)); + ВидыДоступа = УправлениеДоступомСлужебный.ВидыДоступаТаблицы(ТаблицаЗначенийДоступа); + + Если ВидыДоступа.Количество() <> 1 + ИЛИ НЕ УправлениеДоступомСлужебный.СвойстваВидаДоступа( + ВидыДоступа[0]).ВидДоступаЧерезПраваПоЗначениямДоступа Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для значений доступа ""%1"" не найдено вида доступа + |через права по значениям доступа.'"), + Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа).Синоним); КонецЕсли; ВидДоступа = ВидыДоступа[0]; Иначе @@ -65,16 +86,26 @@ | Наименование"); ВидыДоступа = Запрос.Выполнить().Выбрать(); Пока ВидыДоступа.Следующий() Цикл - Если УправлениеДоступом.СвойстваВидаДоступа(ВидыДоступа.Ссылка).ВидДоступаЧерезПраваПоЗначениямДоступа Тогда + + Если УправлениеДоступомСлужебный.СвойстваВидаДоступа( + ВидыДоступа.Ссылка).ВидДоступаЧерезПраваПоЗначениямДоступа Тогда + Элементы.ВидДоступа.СписокВыбора.Добавить(ВидыДоступа.Ссылка, ВидыДоступа.Наименование); КонецЕсли; КонецЦикла; + Если Элементы.ВидДоступа.СписокВыбора.Количество() = 0 Тогда - ВызватьИсключение(НСтр("ru = 'Не найдено видов доступа через права по значениям доступа.'")); + ВызватьИсключение НСтр("ru = 'Не найдено видов доступа через права по значениям доступа.'"); КонецЕсли; + ВидДоступа = Элементы.ВидДоступа.СписокВыбора[0].Значение; - ТаблицаЗначенийДоступа = УправлениеДоступом.СвойстваВидаДоступа(ВидДоступа).Таблицы[0]; - НазваниеЗначенийДоступа = УправлениеДоступом.НазваниеОбъектаИзМетаданных(Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа)); + + ТаблицаЗначенийДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа( + ВидДоступа).Таблицы[0]; + + НазваниеЗначенийДоступа = УправлениеДоступомСлужебный.НазваниеОбъектаИзМетаданных( + Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа)); + Элементы.ВидДоступа.Видимость = Элементы.ВидДоступа.СписокВыбора.Количество() > 1; КонецЕсли; @@ -94,7 +125,7 @@ Ошибки = Неопределено; - // Проверка незаполненных прав + // Проверка незаполненных прав. ИмяПервогоПрава = ""; Для каждого ВозможноеПраво Из ВозможныеПрава Цикл ИмяПервогоПрава = ВозможноеПраво.Ключ; @@ -137,11 +168,9 @@ КонецЕсли; // Проверка наличия повторяющихся значений. - Отбор = Новый Структура( - "НаследуетсяОт, - |Пользователь", - ТекущаяСтрока["НаследуетсяОт"], - ТекущаяСтрока["Пользователь"]); + Отбор = Новый Структура; + Отбор.Вставить("НаследуетсяОт" , ТекущаяСтрока["НаследуетсяОт"]); + Отбор.Вставить("Пользователь", ТекущаяСтрока["Пользователь"]); Если ГруппыПрав.НайтиСтроки(Отбор).Количество() > 1 Тогда @@ -241,12 +270,15 @@ &НаСервере Процедура ВидДоступаПриИзмененииНаСервере() - НоваяТаблицаЗначенийДоступа = УправлениеДоступом.СвойстваВидаДоступа(ВидДоступа).Таблицы[0]; + НоваяТаблицаЗначенийДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа( + ВидДоступа).Таблицы[0]; Если ТаблицаЗначенийДоступа <> НоваяТаблицаЗначенийДоступа Тогда ТаблицаЗначенийДоступа = НоваяТаблицаЗначенийДоступа; - НазваниеЗначенийДоступа = УправлениеДоступом.НазваниеОбъектаИзМетаданных(Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа)); + + НазваниеЗначенийДоступа = УправлениеДоступомСлужебный.НазваниеОбъектаИзМетаданных( + Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа)); ЗаполнитьПрава(); @@ -326,13 +358,17 @@ Элементы.ГруппыПрав.ТекущиеДанные.НаследуетсяОт = ДобавленныеРеквизиты.НаследуетсяОт; КонецЕсли; Если Элементы.Найти("ГруппыПравГруппаПользователей") <> Неопределено Тогда - Элементы.ГруппыПрав.ТекущиеДанные.ГруппаПользователей = ДобавленныеРеквизиты.ГруппаПользователей; + Элементы.ГруппыПрав.ТекущиеДанные.ГруппаПользователей = + ДобавленныеРеквизиты.ГруппаПользователей; КонецЕсли; Иначе Элементы.ГруппыПрав.ТекущиеДанные.РаспространяетсяВИерархии = Истина; Для каждого ДобавленныйРеквизит Из ДобавленныеРеквизиты Цикл - Элементы.ГруппыПрав.ТекущиеДанные[ДобавленныйРеквизит.Ключ] = ДобавленныйРеквизит.Значение; + + Элементы.ГруппыПрав.ТекущиеДанные[ДобавленныйРеквизит.Ключ] = + ДобавленныйРеквизит.Значение; + КонецЦикла; КонецЕсли; @@ -376,7 +412,7 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст); + ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст); КонецЕсли; КонецПроцедуры @@ -386,7 +422,7 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст); + ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст); КонецЕсли; КонецПроцедуры @@ -472,8 +508,17 @@ &НаКлиенте Процедура Перечитать(Команда) - Если НЕ Модифицированность ИЛИ Вопрос(НСтр("ru = 'Данные изменены. Прочитать без сохранения?'"), РежимДиалогаВопрос.ОКОтмена, 5, КодВозвратаДиалога.Отмена) = КодВозвратаДиалога.ОК Тогда + Если НЕ Модифицированность Тогда ПрочитатьПрава(); + Иначе + Ответ = Вопрос(НСтр("ru = 'Данные изменены. Прочитать без сохранения?'"), + РежимДиалогаВопрос.ДаНет, + 5, + КодВозвратаДиалога.Нет); + + Если Ответ = КодВозвратаДиалога.Да Тогда + ПрочитатьПрава(); + КонецЕсли; КонецЕсли; КонецПроцедуры @@ -486,11 +531,14 @@ Функция ПолучитьПраваТаблицДляШаблонов(ТаблицаЗначенийДоступа, Право) ПраваТаблицДляШаблонов = Новый Соответствие; - ОписаниеПрава = УправлениеДоступом.ВозможныеПраваПоЗначениюДоступа(ТаблицаЗначенийДоступа).Найти(Право, "Имя"); + + ОписаниеПрава = УправлениеДоступомСлужебный.ВозможныеПраваПоЗначениюДоступа( + ТаблицаЗначенийДоступа).Найти(Право, "Имя"); + Для каждого Таблица Из ОписаниеПрава.ЧтениеВТаблицах Цикл ПраваТаблицы = ПраваТаблицДляШаблонов.Получить(Таблица); Если ПраваТаблицы = Неопределено Тогда - ПраваТаблицы = Новый Структура("Чтение, Добавление, Изменение, Удаление", Ложь, Ложь, Ложь, Ложь); + ПраваТаблицы = СтруктураПрав(); ПраваТаблицДляШаблонов.Вставить(Таблица, ПраваТаблицы); КонецЕсли; ПраваТаблицы.Чтение = Истина; @@ -498,7 +546,7 @@ Для каждого Таблица Из ОписаниеПрава.ДобавлениеВТаблицах Цикл ПраваТаблицы = ПраваТаблицДляШаблонов.Получить(Таблица); Если ПраваТаблицы = Неопределено Тогда - ПраваТаблицы = Новый Структура("Чтение, Добавление, Изменение, Удаление", Ложь, Ложь, Ложь, Ложь); + ПраваТаблицы = СтруктураПрав(); ПраваТаблицДляШаблонов.Вставить(Таблица, ПраваТаблицы); КонецЕсли; ПраваТаблицы.Добавление = Истина; @@ -506,7 +554,7 @@ Для каждого Таблица Из ОписаниеПрава.ИзменениеВТаблицах Цикл ПраваТаблицы = ПраваТаблицДляШаблонов.Получить(Таблица); Если ПраваТаблицы = Неопределено Тогда - ПраваТаблицы = Новый Структура("Чтение, Добавление, Изменение, Удаление", Ложь, Ложь, Ложь, Ложь); + ПраваТаблицы = СтруктураПрав(); ПраваТаблицДляШаблонов.Вставить(Таблица, ПраваТаблицы); КонецЕсли; ПраваТаблицы.Изменение = Истина; @@ -514,20 +562,27 @@ Для каждого Таблица Из ОписаниеПрава.УдалениеВТаблицах Цикл ПраваТаблицы = ПраваТаблицДляШаблонов.Получить(Таблица); Если ПраваТаблицы = Неопределено Тогда - ПраваТаблицы = Новый Структура("Чтение, Добавление, Изменение, Удаление", Ложь, Ложь, Ложь, Ложь); + ПраваТаблицы = СтруктураПрав(); ПраваТаблицДляШаблонов.Вставить(Таблица, ПраваТаблицы); КонецЕсли; ПраваТаблицы.Удаление = Истина; КонецЦикла; Если ПраваТаблицДляШаблонов.Количество() = 0 Тогда - ПраваТаблицДляШаблонов.Вставить("", Новый Структура("Чтение, Добавление, Изменение, Удаление", Ложь, Ложь, Ложь, Ложь)); + ПраваТаблицДляШаблонов.Вставить("", СтруктураПрав()); КонецЕсли; Возврат ПраваТаблицДляШаблонов; КонецФункции +&НаСервере +Функция СтруктураПрав() + + Возврат Новый Структура("Чтение, Добавление, Изменение, Удаление", Ложь, Ложь, Ложь, Ложь); + +КонецФункции + &НаСервере Процедура ДобавитьРеквизит(НовыеРеквизиты, Реквизит, НачальноеЗначение) @@ -549,30 +604,35 @@ &НаСервере Процедура ДобавитьРеквизитыЭлементыФормы(НовыеРеквизиты = Неопределено) - ОписанияВозможныхПрав = УправлениеДоступом.ВозможныеПраваПоЗначениюДоступа(ТаблицаЗначенийДоступа); + ОписанияВозможныхПрав = УправлениеДоступомСлужебный.ВозможныеПраваПоЗначениюДоступа( + ТаблицаЗначенийДоступа); Если НастройкаПоЗначениюДоступа Тогда Если НовыеРеквизиты <> Неопределено Тогда - ДобавитьРеквизит( - НовыеРеквизиты, - Новый РеквизитФормы( - "Пользователь", - Новый ОписаниеТипов( - "СправочникСсылка.Пользователи, - |СправочникСсылка.ГруппыПользователей, - |СправочникСсылка.ВнешниеПользователи, - |СправочникСсылка.ГруппыВнешнихПользователей"), - "ГруппыПрав", - НСтр("ru = 'Пользователь'")), - Справочники.Пользователи.ПустаяСсылка()); - ДобавитьРеквизит( - НовыеРеквизиты, - Новый РеквизитФормы( - "НомерКартинки", - Новый ОписаниеТипов("Число"), - "ГруппыПрав"), - -1); + // Добавление реквизита формы Пользователь. + МассивТипов = Новый Массив; + МассивТипов.Добавить(Тип("СправочникСсылка.Пользователи")); + МассивТипов.Добавить(Тип("СправочникСсылка.ГруппыПользователей")); + МассивТипов.Добавить(Тип("СправочникСсылка.ВнешниеПользователи")); + МассивТипов.Добавить(Тип("СправочникСсылка.ГруппыВнешнихПользователей")); + ОписаниеТипов = Новый ОписаниеТипов(МассивТипов); + + РеквизитФормы = Новый РеквизитФормы( + "Пользователь", + ОписаниеТипов, + "ГруппыПрав", + НСтр("ru = 'Пользователь'")); + + ДобавитьРеквизит(НовыеРеквизиты, РеквизитФормы, Справочники.Пользователи.ПустаяСсылка()); + + // Добавление реквизита формы НомерКартинки. + РеквизитФормы = Новый РеквизитФормы( + "НомерКартинки", + Новый ОписаниеТипов("Число"), + "ГруппыПрав"); + + ДобавитьРеквизит(НовыеРеквизиты, РеквизитФормы, -1); Иначе Элемент = ДобавитьЭлемент("ГруппыПравПользователь", Тип("ПолеФормы"), Элементы.ГруппыПрав); Элемент.Вид = ВидПоляФормы.ПолеВвода; @@ -588,16 +648,20 @@ КонецЕсли; Иначе Если НовыеРеквизиты <> Неопределено Тогда - ДобавитьРеквизит( - НовыеРеквизиты, - Новый РеквизитФормы( - "ЗначениеДоступа", - Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа).СтандартныеРеквизиты.Ссылка.Тип, - "ГруппыПрав", - НазваниеЗначенийДоступа), - Неопределено); + // Добавление реквизита формы ЗначениеДоступа. + РеквизитФормы = Новый РеквизитФормы( + "ЗначениеДоступа", + Метаданные.НайтиПоПолномуИмени(ТаблицаЗначенийДоступа).СтандартныеРеквизиты.Ссылка.Тип, + "ГруппыПрав", + НазваниеЗначенийДоступа); + + ДобавитьРеквизит(НовыеРеквизиты, РеквизитФормы, Неопределено); Иначе - Элемент = ДобавитьЭлемент("ГруппыПравЗначениеДоступа", Тип("ПолеФормы"), Элементы.ГруппыПрав); + Элемент = ДобавитьЭлемент( + "ГруппыПравЗначениеДоступа", + Тип("ПолеФормы"), + Элементы.ГруппыПрав); + Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "ГруппыПрав.ЗначениеДоступа"; КонецЕсли; @@ -607,14 +671,14 @@ Для каждого ОписаниеПрава Из ОписанияВозможныхПрав Цикл Если НовыеРеквизиты <> Неопределено Тогда - ДобавитьРеквизит( - НовыеРеквизиты, - Новый РеквизитФормы( - ОписаниеПрава.Имя, - Новый ОписаниеТипов("Булево"), - "ГруппыПрав", - ОписаниеПрава.Синоним), - ОписаниеПрава.НачальноеЗначение); + // Добавление реквизита формы права. + РеквизитФормы = Новый РеквизитФормы( + ОписаниеПрава.Имя, + Новый ОписаниеТипов("Булево"), + "ГруппыПрав", + ОписаниеПрава.Синоним); + + ДобавитьРеквизит(НовыеРеквизиты, РеквизитФормы, ОписаниеПрава.НачальноеЗначение); ВозможныеПрава.Вставить(ОписаниеПрава.Имя); @@ -632,7 +696,11 @@ КонецЕсли; КонецЦикла; Иначе - Элемент = ДобавитьЭлемент("ГруппыПрав" + ОписаниеПрава.Имя, Тип("ПолеФормы"), Элементы.ГруппыПрав); + Элемент = ДобавитьЭлемент( + "ГруппыПрав" + ОписаниеПрава.Имя, + Тип("ПолеФормы"), + Элементы.ГруппыПрав); + Элемент.Вид = ВидПоляФормы.ПолеФлажка; Элемент.ПутьКДанным = "ГруппыПрав."+ ОписаниеПрава.Имя; Элемент.УстановитьДействие("ПриИзменении", "ГруппыПравПравоПриИзменении"); @@ -649,18 +717,26 @@ Если НастройкаПоЗначениюДоступа Тогда Если НовыеРеквизиты <> Неопределено Тогда - ТипыНаследуетсяОт = Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.ЗначениеДоступа.Тип.Типы(); + + ТипыНаследуетсяОт = Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа + .Измерения.ЗначениеДоступа.Тип.Типы(); + ТипыНаследуетсяОт.Добавить(Тип("Строка")); - ДобавитьРеквизит( - НовыеРеквизиты, - Новый РеквизитФормы( - "НаследуетсяОт", - Новый ОписаниеТипов(ТипыНаследуетсяОт), - "ГруппыПрав", - НСтр("ru = 'Наследуется от'")), - НСтр("ru = '<не наследуется>'")); + + // Добавление реквизита формы НаследуетсяОт. + РеквизитФормы = Новый РеквизитФормы( + "НаследуетсяОт", + Новый ОписаниеТипов(ТипыНаследуетсяОт), + "ГруппыПрав", + НСтр("ru = 'Наследуется от'")); + + ДобавитьРеквизит(НовыеРеквизиты, РеквизитФормы, НСтр("ru = '<не наследуется>'")); Иначе - Элемент = ДобавитьЭлемент("ГруппыПравНаследуетсяОт", Тип("ПолеФормы"), Элементы.ГруппыПрав); + Элемент = ДобавитьЭлемент( + "ГруппыПравНаследуетсяОт", + Тип("ПолеФормы"), + Элементы.ГруппыПрав); + Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "ГруппыПрав.НаследуетсяОт"; Элемент.ТолькоПросмотр = Истина; @@ -668,19 +744,25 @@ КонецЕсли; ИначеЕсли НЕ НастройкаПоГруппеПользователей Тогда Если НовыеРеквизиты <> Неопределено Тогда - ДобавитьРеквизит( - НовыеРеквизиты, - Новый РеквизитФормы( - "ГруппаПользователей", - Новый ОписаниеТипов( - "СправочникСсылка.ГруппыПользователей, - |СправочникСсылка.ГруппыВнешнихПользователей, - |Строка"), - "ГруппыПрав", - НСтр("ru = 'От группы'")), - Неопределено); + // Добавление реквизита формы ГруппаПользователей. + МассивТипов = Новый Массив; + МассивТипов.Добавить(Тип("СправочникСсылка.ГруппыПользователей")); + МассивТипов.Добавить(Тип("СправочникСсылка.ГруппыВнешнихПользователей")); + ОписаниеТипов = Новый ОписаниеТипов(МассивТипов); + + РеквизитФормы = Новый РеквизитФормы( + "ГруппаПользователей", + ОписаниеТипов, + "ГруппыПрав", + НСтр("ru = 'От группы'")); + + ДобавитьРеквизит(НовыеРеквизиты, РеквизитФормы, Неопределено); Иначе - Элемент = ДобавитьЭлемент("ГруппыПравГруппаПользователей", Тип("ПолеФормы"), Элементы.ГруппыПрав); + Элемент = ДобавитьЭлемент( + "ГруппыПравГруппаПользователей", + Тип("ПолеФормы"), + Элементы.ГруппыПрав); + Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = "ГруппыПрав.ГруппаПользователей"; Элемент.ТолькоПросмотр = НЕ НастройкаПоЗначениюДоступа; @@ -804,7 +886,7 @@ ИначеЕсли НастройкаПоГруппеПользователей Тогда // Чтение прав по группе пользователей (без прав, наследуемых по иерархии). Запрос.УстановитьПараметр("ГруппаПользователей", Параметры.СсылкаНаОбъект); - Запрос.Текст = СтрЗаменить( + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПраваПоЗначениямДоступа.ЗначениеДоступа, | ПраваПоЗначениямДоступа.Право, @@ -817,7 +899,11 @@ | И ТИПЗНАЧЕНИЯ(ПраваПоЗначениямДоступа.ЗначениеДоступа) = &ТаблицаЗначенийДоступа | |УПОРЯДОЧИТЬ ПО - | ПраваПоЗначениямДоступа.ЗначениеДоступа", "&ТаблицаЗначенийДоступа", "Тип(" + ТаблицаЗначенийДоступа + ")"); + | ПраваПоЗначениямДоступа.ЗначениеДоступа"; + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, "&ТаблицаЗначенийДоступа", "Тип(" + ТаблицаЗначенийДоступа + ")"); + Выборка = Запрос.Выполнить().Выбрать(); ТекущееЗначениеДоступа = Неопределено; Пока Выборка.Следующий() Цикл @@ -835,7 +921,7 @@ Иначе // Чтение прав по пользователю (без прав, наследуемых по иерархии). Запрос.УстановитьПараметр("Пользователь", Параметры.СсылкаНаОбъект); - Запрос.Текст = СтрЗаменить( + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПраваПоЗначениямДоступа.ЗначениеДоступа, | ПраваПоЗначениямДоступа.Пользователь, @@ -853,20 +939,33 @@ | |УПОРЯДОЧИТЬ ПО | ПраваПоЗначениямДоступа.ЗначениеДоступа, - | ПраваПоЗначениямДоступа.Пользователь", "&ТаблицаЗначенийДоступа", "Тип(" + ТаблицаЗначенийДоступа + ")"); + | ПраваПоЗначениямДоступа.Пользователь"; + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, "&ТаблицаЗначенийДоступа", "Тип(" + ТаблицаЗначенийДоступа + ")"); + Выборка = Запрос.Выполнить().Выбрать(); ТекущееЗначениеДоступа = Неопределено; ТекущийПользователь = Неопределено; Пока Выборка.Следующий() Цикл - Если ТекущееЗначениеДоступа <> Выборка.ЗначениеДоступа ИЛИ ТекущийПользователь <> Выборка.Пользователь Тогда + + Если ТекущееЗначениеДоступа <> Выборка.ЗначениеДоступа + ИЛИ ТекущийПользователь <> Выборка.Пользователь Тогда + ТекущееЗначениеДоступа = Выборка.ЗначениеДоступа; ТекущийПользователь = Выборка.Пользователь; + ГруппаПрав = ГруппыПрав.Добавить(); - ГруппаПрав.ГруппаПользователей = ?(ТипЗнч(Выборка.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") ИЛИ ТипЗнч(Выборка.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей"), Выборка.Пользователь, Неопределено); + ГруппаПрав.ГруппаПользователей = + ?( ТипЗнч(Выборка.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") + ИЛИ ТипЗнч(Выборка.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей"), + Выборка.Пользователь, + Неопределено); ГруппаПрав.ЗначениеДоступа = Выборка.ЗначениеДоступа; ГруппаПрав.Запрещено = Выборка.Запрещено; ГруппаПрав.РаспространяетсяВИерархии = Выборка.РаспространяетсяВИерархии; КонецЕсли; + Если ВозможныеПрава.Свойство(Выборка.Право) Тогда ГруппаПрав[Выборка.Право] = Истина; КонецЕсли; @@ -910,11 +1009,16 @@ |УПОРЯДОЧИТЬ ПО | ВладелецПрава, | Пользователь"; + Выборка = Запрос.Выполнить().Выбрать(); ТекущийВладелецПрава = Неопределено; ТекущийПользователь = Неопределено; + Пока Выборка.Следующий() Цикл - Если ТекущийВладелецПрава <> Выборка.ВладелецПрава ИЛИ ТекущийПользователь <> Выборка.Пользователь Тогда + + Если ТекущийВладелецПрава <> Выборка.ВладелецПрава + ИЛИ ТекущийПользователь <> Выборка.Пользователь Тогда + ТекущийВладелецПрава = Выборка.ВладелецПрава; ТекущийПользователь = Выборка.Пользователь; ГруппаПрав = ГруппыПрав.Добавить(); @@ -923,6 +1027,7 @@ ГруппаПрав.Запрещено = Выборка.Запрещено; ГруппаПрав.РаспространяетсяВИерархии = Выборка.РаспространяетсяВИерархии; КонецЕсли; + Если ВозможныеПрава.Свойство(Выборка.Право) Тогда ГруппаПрав[Выборка.Право] = Истина; КонецЕсли; @@ -939,7 +1044,9 @@ КонецЕсли; ОписаниеОшибки = ""; - Если НЕ УправлениеДоступом.РазрешеноУправлениеПравамиПоЗначениямДоступа(Параметры.СсылкаНаОбъект, ОписаниеОшибки) Тогда + Если НЕ УправлениеДоступом.РазрешеноУправлениеПравамиПоЗначениямДоступа( + Параметры.СсылкаНаОбъект, ОписаниеОшибки) Тогда + ВызватьИсключение(ОписаниеОшибки); КонецЕсли; @@ -954,18 +1061,26 @@ НаборЗаписей.Отбор.ВидДоступа.Установить(ВидДоступа); НаборЗаписей.Отбор.ЗначениеДоступа.Установить(Параметры.СсылкаНаОбъект); НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда Запись = НаборЗаписей.Добавить(); Запись.ВидДоступа = ВидДоступа; Запись.ГруппаДоступа = Параметры.СсылкаНаОбъект; Запись.ЗначениеДоступа = Параметры.СсылкаНаОбъект; КонецЕсли; + Для каждого Запись Из НаборЗаписей Цикл - Запись.ТолькоВидДоступа = Ложь; - Запись.СвязьСРодителем = Запись.ГруппаДоступа <> Запись.ЗначениеДоступа; - Запись.НаследоватьПраваРодителей = ?(Запись.СвязьСРодителем, Ложь, НаследоватьПраваРодителей); - Запись.ИспользоватьПраваСсылки = ?(Запись.СвязьСРодителем, НаследоватьПраваРодителей, Истина); + + Запись.ТолькоВидДоступа = Ложь; + Запись.СвязьСРодителем = Запись.ГруппаДоступа <> Запись.ЗначениеДоступа; + + Запись.НаследоватьПраваРодителей = + ?(Запись.СвязьСРодителем, Ложь, НаследоватьПраваРодителей); + + Запись.ИспользоватьПраваСсылки = + ?(Запись.СвязьСРодителем, НаследоватьПраваРодителей, Истина); КонецЦикла; + НаборЗаписей.Записать(); КонецЕсли; @@ -976,15 +1091,22 @@ Для каждого ГруппаПрав ИЗ ГруппыПрав Цикл Если ТипЗнч(ГруппаПрав.НаследуетсяОт) = Тип("Строка") Тогда + Для каждого ВозможноеПраво Из ВозможныеПрава Цикл Если ГруппаПрав[ВозможноеПраво.Ключ] Тогда - Для каждого ОписаниеТаблицы Из ПолучитьПраваТаблицДляШаблонов(ТаблицаЗначенийДоступа, ВозможноеПраво.Ключ) Цикл + + ОписанияТаблиц = ПолучитьПраваТаблицДляШаблонов( + ТаблицаЗначенийДоступа, ВозможноеПраво.Ключ); + + Для каждого ОписаниеТаблицы Из ОписанияТаблиц Цикл + Право = НаборЗаписей.Добавить(); Право.ЗначениеДоступа = Параметры.СсылкаНаОбъект; Право.Пользователь = ГруппаПрав.Пользователь; Право.Право = ВозможноеПраво.Ключ; Право.Запрещено = ГруппаПрав.Запрещено; Право.РаспространяетсяВИерархии = ГруппаПрав.РаспространяетсяВИерархии; + // Заполнение данных для стандартных шаблонов ограничения доступа. Право.Таблица = ОписаниеТаблицы.Ключ; Если Право.Запрещено Тогда @@ -999,8 +1121,10 @@ Право.Удаление = ОписаниеТаблицы.Значение.Удаление; КонецЕсли; КонецЦикла; + КонецЕсли; КонецЦикла; + КонецЕсли; КонецЦикла; @@ -1010,11 +1134,19 @@ Иначе ТаблицаЗаписей = НаборЗаписей.Выгрузить(Новый Массив); ЗначенияДоступа = Новый Соответствие; + Для каждого ГруппаПрав ИЗ ГруппыПрав Цикл - Если НастройкаПоГруппеПользователей ИЛИ НЕ ЗначениеЗаполнено(ГруппаПрав.ГруппаПользователей) Тогда + Если НастройкаПоГруппеПользователей + ИЛИ НЕ ЗначениеЗаполнено(ГруппаПрав.ГруппаПользователей) Тогда + Для каждого ВозможноеПраво Из ВозможныеПрава Цикл Если ГруппаПрав[ВозможноеПраво.Ключ] Тогда - Для каждого ОписаниеТаблицы Из ПолучитьПраваТаблицДляШаблонов(ГруппаПрав.ЗначениеДоступа.Метаданные().ПолноеИмя(), ВозможноеПраво.Ключ) Цикл + + ОписанияТаблиц = ПолучитьПраваТаблицДляШаблонов( + ГруппаПрав.ЗначениеДоступа.Метаданные().ПолноеИмя(), + ВозможноеПраво.Ключ); + + Для каждого ОписаниеТаблицы Из ОписанияТаблиц Цикл Право = ТаблицаЗаписей.Добавить(); Право.ЗначениеДоступа = ГруппаПрав.ЗначениеДоступа; Право.Пользователь = Параметры.СсылкаНаОбъект; @@ -1036,14 +1168,17 @@ КонецЕсли; ЗначенияДоступа.Вставить(ГруппаПрав.ЗначениеДоступа); КонецЦикла; + КонецЕсли; КонецЦикла; + КонецЕсли; КонецЦикла; Отбор = Новый Структура("ЗначениеДоступа"); НаборЗаписей.Отбор.Пользователь.Установить(Параметры.СсылкаНаОбъект); ЗаписанныеЗначенияДоступа = Новый Массив; + Для каждого КлючИЗначение Из ЗначенияДоступа Цикл Отбор.ЗначениеДоступа = КлючИЗначение.Ключ; НаборЗаписей.Отбор.ЗначениеДоступа.Установить(Отбор.ЗначениеДоступа); @@ -1053,31 +1188,41 @@ КонецЦикла; // Удаление прав удаленных групп прав. - Запрос = Новый Запрос( + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПраваПоЗначениямДоступа.ЗначениеДоступа |ИЗ | РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениямДоступа |ГДЕ | ПраваПоЗначениямДоступа.Пользователь = &Пользователь - | И (НЕ ПраваПоЗначениямДоступа.ЗначениеДоступа В (&ЗаписанныеЗначенияДоступа))"); + | И НЕ ПраваПоЗначениямДоступа.ЗначениеДоступа В (&ЗаписанныеЗначенияДоступа)"; + Запрос.УстановитьПараметр("Пользователь", Параметры.СсылкаНаОбъект); Запрос.УстановитьПараметр("ЗаписанныеЗначенияДоступа", ЗаписанныеЗначенияДоступа); НаборЗаписей.Очистить(); - Для каждого ЗначениеДоступаБезПрав Из Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ЗначениеДоступа") Цикл + ЗначенияДоступаБезПрав = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ЗначениеДоступа"); + + Для каждого ЗначениеДоступаБезПрав Из ЗначенияДоступаБезПрав Цикл НаборЗаписей.Отбор.ЗначениеДоступа.Установить(ЗначениеДоступаБезПрав); НаборЗаписей.Записать(); КонецЦикла; КонецЕсли; - РазрешеноУправлениеПравамиПослеЗаписи = УправлениеДоступом.РазрешеноУправлениеПравамиПоЗначениямДоступа(Параметры.СсылкаНаОбъект, ОписаниеПредупреждения); + + РазрешеноУправлениеПравамиПослеЗаписи + = УправлениеДоступом.РазрешеноУправлениеПравамиПоЗначениямДоступа( + Параметры.СсылкаНаОбъект, + ОписаниеПредупреждения); + Модифицированность = Ложь; ЗафиксироватьТранзакцию(); Исключение ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ОтменитьТранзакцию(); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Ошибка при записи прав:'") + Символы.ПС + ПредставлениеОшибки, , , , Отказ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Ошибка при записи прав:'") + Символы.ПС + ПредставлениеОшибки, , , , Отказ); КонецПопытки; КонецПроцедуры @@ -1085,32 +1230,38 @@ &НаКлиенте Процедура ПроверкаВозможностиИзмененияПрав(Отказ, ПроверкаУдаления = Ложь) - Если НастройкаПоЗначениюДоступа И ТипЗнч(Элементы.ГруппыПрав.ТекущиеДанные["НаследуетсяОт"]) <> Тип("Строка") Тогда + Если НастройкаПоЗначениюДоступа + И ТипЗнч(Элементы.ГруппыПрав.ТекущиеДанные["НаследуетсяОт"]) <> Тип("Строка") Тогда + Отказ = Истина; - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Эта наследуемая настройка редактируется только в форме - |""Права доступа: %1 (%2)"" .'"), - Элементы.ГруппыПрав.ТекущиеДанные["НаследуетсяОт"], - НазваниеЗначенийДоступа); - ТекстСообщения = - ТекстСообщения + - ?(ПроверкаУдаления, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Эта наследуемая настройка редактируется только в форме + |""Права доступа: %1 (%2)"" .'"), + Элементы.ГруппыПрав.ТекущиеДанные["НаследуетсяОт"], + НазваниеЗначенийДоступа); + + ТекстСообщения = ТекстСообщения + ?( + ПроверкаУдаления, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = ' | |Для удаления всех наследуемых настроек для ""%1"" |можно снять флажок ""Наследовать права родителей""."), НаименованиеНастройки), - ""); - ИначеЕсли НЕ НастройкаПоЗначениюДоступа И НЕ НастройкаПоГруппеПользователей И ЗначениеЗаполнено(Элементы.ГруппыПрав.ТекущиеДанные["ГруппаПользователей"]) Тогда + ""); + + ИначеЕсли НЕ НастройкаПоЗначениюДоступа + И НЕ НастройкаПоГруппеПользователей + И ЗначениеЗаполнено(Элементы.ГруппыПрав.ТекущиеДанные["ГруппаПользователей"]) Тогда + Отказ = Истина; - ТекстСообщения = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Эта настройка редактируется только в форме - |""Права доступа: %1 (%2)"".'"), - Элементы.ГруппыПрав.ТекущиеДанные["ГруппаПользователей"], - ?(ВнешнийПользовательИлиГруппа, - НСтр("ru = 'Группа внешних пользователей'"), - НСтр("ru = 'Группа пользователей'")) ); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Эта настройка редактируется только в форме + |""Права доступа: %1 (%2)"".'"), + Элементы.ГруппыПрав.ТекущиеДанные["ГруппаПользователей"], + ?(ВнешнийПользовательИлиГруппа, + НСтр("ru = 'Группа внешних пользователей'"), + НСтр("ru = 'Группа пользователей'")) ); КонецЕсли; Если Отказ Тогда @@ -1125,9 +1276,13 @@ ВыборИПодборВнешнихПользователей = Ложь; Если ИспользоватьВнешнихПользователей Тогда - Элемент = СписокТиповПользователей.ВыбратьЭлемент("Выбор типа данных", СписокТиповПользователей[0]); + + Элемент = СписокТиповПользователей.ВыбратьЭлемент( + "Выбор типа данных", СписокТиповПользователей[0]); + Если Элемент <> Неопределено Тогда - ВыборИПодборВнешнихПользователей = Элемент.Значение = Тип("СправочникСсылка.ВнешниеПользователи"); + ВыборИПодборВнешнихПользователей = + Элемент.Значение = Тип("СправочникСсылка.ВнешниеПользователи"); Иначе Возврат Ложь; КонецЕсли; @@ -1142,18 +1297,21 @@ ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); - ПараметрыФормы.Вставить("ТекущаяСтрока", ?(Элементы.ГруппыПрав.ТекущиеДанные = Неопределено, Неопределено, Элементы.ГруппыПрав.ТекущиеДанные.Пользователь)); - - Если ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) И - ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.Пользователи") ИЛИ - ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") ) Тогда + ПараметрыФормы.Вставить("ТекущаяСтрока", ?( + Элементы.ГруппыПрав.ТекущиеДанные = Неопределено, + Неопределено, + Элементы.ГруппыПрав.ТекущиеДанные.Пользователь)); + Если ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) + И ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.Пользователи") + ИЛИ ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыПользователей") ) Тогда + ВыборИПодборВнешнихПользователей = Ложь; - - ИначеЕсли ИспользоватьВнешнихПользователей И - ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) И - ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ВнешниеПользователи") ИЛИ - ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") ) Тогда + + ИначеЕсли ИспользоватьВнешнихПользователей + И ЗначениеЗаполнено(ПараметрыФормы.ТекущаяСтрока) + И ( ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ВнешниеПользователи") + ИЛИ ТипЗнч(ПараметрыФормы.ТекущаяСтрока) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") ) Тогда ВыборИПодборВнешнихПользователей = Истина; Иначе @@ -1169,9 +1327,16 @@ КонецЕсли; Если ВыборИПодборВнешнихПользователей Тогда - ОткрытьФорму("Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, Элементы.ГруппыПравПользователь); + + ОткрытьФорму( + "Справочник.ВнешниеПользователи.ФормаВыбора", + ПараметрыФормы, + Элементы.ГруппыПравПользователь); Иначе - ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыФормы, Элементы.ГруппыПравПользователь); + ОткрытьФорму( + "Справочник.Пользователи.ФормаВыбора", + ПараметрыФормы, + Элементы.ГруппыПравПользователь); КонецЕсли; КонецПроцедуры @@ -1183,6 +1348,22 @@ Возврат; КонецЕсли; - Пользователи.ЗаполнитьНомераКартинокПользователей(ГруппыПрав, "Пользователь", "НомерКартинки", ИдентификаторСтроки); + Пользователи.ЗаполнитьНомераКартинокПользователей( + ГруппыПрав, "Пользователь", "НомерКартинки", ИдентификаторСтроки); КонецПроцедуры + +&НаСервереБезКонтекста +Функция СформироватьДанныеВыбораПользователя(Знач Текст, + Знач ВключаяГруппы = Истина, + Знач ВключаяВнешнихПользователей = Неопределено, + Знач БезПользователей = Ложь) Экспорт + + Возврат Пользователи.СформироватьДанныеВыбораПользователя( + Текст, + ВключаяГруппы, + ВключаяВнешнихПользователей, + БезПользователей); + + +КонецФункции diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form index 8f50a08a4..56ca21dd4 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Form.form @@ -32,7 +32,7 @@ None СписокПодписанЭЦПРасширеннаяПодсказка - 165 + 166 Label true true @@ -81,7 +81,7 @@ None СписокЗашифрованРасширеннаяПодсказка - 167 + 168 Label true true @@ -129,7 +129,7 @@ СписокНаименованиеРасширеннаяПодсказка - 169 + 170 Label true true @@ -165,7 +165,7 @@ СписокОписаниеРасширеннаяПодсказка - 171 + 172 Label true true @@ -184,6 +184,7 @@ Left true + 30 true 1 true @@ -200,7 +201,7 @@ СписокДатаСозданияРасширеннаяПодсказка - 173 + 174 Label true true @@ -236,7 +237,7 @@ СписокДатаИзмененияРасширеннаяПодсказка - 175 + 176 Label true true @@ -272,7 +273,7 @@ СписокАвторРасширеннаяПодсказка - 177 + 178 Label true true @@ -312,7 +313,7 @@ СписокРазмерРасширеннаяПодсказка - 179 + 180 Label true true @@ -368,10 +369,10 @@ СписокСтрокаПоиска - 156 + 157 СписокСтрокаПоискаРасширеннаяПодсказка - 158 + 159 Label true true @@ -381,7 +382,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 157 + 158 true Список @@ -391,10 +392,10 @@ СписокСостояниеПросмотра - 159 + 160 СписокСостояниеПросмотраРасширеннаяПодсказка - 161 + 162 Label true true @@ -404,7 +405,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 160 + 161 true ViewStatusAddition @@ -415,10 +416,10 @@ СписокУправлениеПоиском - 162 + 163 СписокУправлениеПоискомРасширеннаяПодсказка - 164 + 165 Label true true @@ -428,7 +429,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 163 + 164 true SearchControlAddition @@ -439,7 +440,7 @@ СписокРасширеннаяПодсказка - 155 + 156 Label true true @@ -453,10 +454,6 @@ СписокКонтекстноеМенюСоздать 54 - - <key>ru</key> - <value>Добавить</value> - true true @@ -464,7 +461,7 @@ СписокКонтекстноеМенюСоздатьРасширеннаяПодсказка - 131 + 132 Label true true @@ -472,7 +469,7 @@ Left - Form.StandardCommand.Create + Form.Command.Создать Normal Auto true @@ -493,7 +490,7 @@ СписокКонтекстноеМенюОткрытьФайлДляПросмотраРасширеннаяПодсказка - 133 + 134 Label true true @@ -524,7 +521,7 @@ СписокКонтекстноеМенюГруппаКомандВажноеРасширеннаяПодсказка - 132 + 133 Label true true @@ -547,7 +544,7 @@ СписокКонтекстноеМенюРедактироватьРасширеннаяПодсказка - 135 + 136 Label true true @@ -573,7 +570,7 @@ СписокКонтекстноеМенюЗакончитьРедактированиеРасширеннаяПодсказка - 136 + 137 Label true true @@ -599,7 +596,7 @@ СписокКонтекстноеМенюОсвободитьРасширеннаяПодсказка - 137 + 138 Label true true @@ -630,7 +627,7 @@ СписокКонтекстноеМенюГруппаКомандСовместныйДоступРасширеннаяПодсказка - 134 + 135 Label true true @@ -653,7 +650,7 @@ СписокКонтекстноеМенюСкопироватьРасширеннаяПодсказка - 139 + 140 Label true true @@ -661,7 +658,7 @@ Left - Form.StandardCommand.Copy + Form.Command.Скопировать Normal Auto true @@ -679,7 +676,7 @@ СписокКонтекстноеМенюУстановитьПометкуУдаленияРасширеннаяПодсказка - 140 + 141 Label true true @@ -705,7 +702,7 @@ СписокКонтекстноеМенюСохранитьКакРасширеннаяПодсказка - 141 + 142 Label true true @@ -731,7 +728,7 @@ СписокКонтекстноеМенюОбновитьИзФайлаНаДискеРасширеннаяПодсказка - 142 + 143 Label true true @@ -761,7 +758,7 @@ СписокКонтекстноеМенюИзменитьРасширеннаяПодсказка - 143 + 144 Label true true @@ -769,7 +766,7 @@ Left - Form.StandardCommand.Change + 0 Normal Auto true @@ -795,7 +792,7 @@ СписокКонтекстноеМенюГруппаКомандСтандартныеРасширеннаяПодсказка - 138 + 139 Label true true @@ -815,7 +812,7 @@ СписокКонтекстноеМенюОткрытьКаталогФайлаРасширеннаяПодсказка - 144 + 145 Label true true @@ -844,7 +841,7 @@ СписокКонтекстноеМенюНайтиРасширеннаяПодсказка - 146 + 147 Label true true @@ -870,7 +867,7 @@ СписокКонтекстноеМенюОтменитьПоискРасширеннаяПодсказка - 147 + 148 Label true true @@ -901,7 +898,7 @@ СписокКонтекстноеМенюГруппаКомандОтСпискаРасширеннаяПодсказка - 145 + 146 Label true true @@ -924,7 +921,7 @@ СписокКонтекстноеМенюЭЦППодписатьРасширеннаяПодсказка - 149 + 150 Label true true @@ -950,7 +947,7 @@ СписокКонтекстноеМенюДобавитьЭЦПИзФайлаРасширеннаяПодсказка - 150 + 151 Label true true @@ -976,7 +973,7 @@ СписокКонтекстноеМенюСохранитьВместеСЭЦПРасширеннаяПодсказка - 151 + 152 Label true true @@ -1005,7 +1002,7 @@ СписокКонтекстноеМенюЗашифроватьРасширеннаяПодсказка - 153 + 154 Label true true @@ -1031,7 +1028,7 @@ СписокКонтекстноеМенюРасшифроватьРасширеннаяПодсказка - 154 + 155 Label true true @@ -1062,7 +1059,7 @@ СписокКонтекстноеМенюГруппаКомандШифрованияРасширеннаяПодсказка - 152 + 153 Label true true @@ -1094,7 +1091,7 @@ СписокКонтекстноеМенюГруппаКомандЭЦПРасширеннаяПодсказка - 148 + 149 Label true true @@ -1156,10 +1153,6 @@ ФормаСоздать 1 - - <key>ru</key> - <value>Добавить</value> - true true @@ -1167,7 +1160,7 @@ ФормаСоздатьРасширеннаяПодсказка - 102 + 103 Label true true @@ -1175,7 +1168,7 @@ Left - Form.StandardCommand.Create + Form.Command.Создать Normal Auto true @@ -1196,7 +1189,7 @@ ФормаОткрытьФайлДляПросмотраРасширеннаяПодсказка - 104 + 105 Label true true @@ -1227,7 +1220,7 @@ ГруппаКомандВажноеРасширеннаяПодсказка - 103 + 104 Label true true @@ -1250,7 +1243,7 @@ ФормаРедактироватьРасширеннаяПодсказка - 106 + 107 Label true true @@ -1276,7 +1269,7 @@ ФормаЗакончитьРедактированиеРасширеннаяПодсказка - 107 + 108 Label true true @@ -1302,7 +1295,7 @@ ФормаОсвободитьРасширеннаяПодсказка - 108 + 109 Label true true @@ -1330,7 +1323,7 @@ ГруппаКомандСовместныйДоступРасширеннаяПодсказка - 105 + 106 Label true true @@ -1353,7 +1346,7 @@ ФормаЭЦППодписатьРасширеннаяПодсказка - 110 + 111 Label true true @@ -1379,7 +1372,7 @@ ФормаСохранитьВместеСЭЦПРасширеннаяПодсказка - 111 + 112 Label true true @@ -1405,7 +1398,7 @@ ФормаДобавитьЭЦПИзФайлаРасширеннаяПодсказка - 112 + 113 Label true true @@ -1434,7 +1427,7 @@ ФормаЗашифроватьРасширеннаяПодсказка - 114 + 115 Label true true @@ -1460,7 +1453,7 @@ ФормаРасшифроватьРасширеннаяПодсказка - 115 + 116 Label true true @@ -1491,7 +1484,7 @@ ГруппаКнопокШифрованияРасширеннаяПодсказка - 113 + 114 Label true true @@ -1523,7 +1516,7 @@ ГруппаКомандЭЦПРасширеннаяПодсказка - 109 + 110 Label true true @@ -1550,7 +1543,7 @@ ФормаСкопироватьРасширеннаяПодсказка - 117 + 118 Label true true @@ -1558,7 +1551,7 @@ Left - Form.StandardCommand.Copy + Form.Command.Скопировать Normal Auto true @@ -1576,7 +1569,7 @@ ФормаУстановитьПометкуУдаленияРасширеннаяПодсказка - 118 + 119 Label true true @@ -1603,7 +1596,7 @@ ФормаСохранитьКакРасширеннаяПодсказка - 119 + 120 Label true true @@ -1629,7 +1622,7 @@ ФормаОбновитьИзФайлаНаДискеРасширеннаяПодсказка - 120 + 121 Label true true @@ -1647,20 +1640,16 @@ InAdditionalSubmenu - ФормаИзменить - 20 - - <key>ru</key> - <value>Свойства файла</value> - + ФормаОткрытьСвойстваФайла + 102 true true true - ФормаИзменитьРасширеннаяПодсказка - 121 + ФормаОткрытьСвойстваФайлаРасширеннаяПодсказка + 122 Label true true @@ -1668,15 +1657,12 @@ Left - Form.StandardCommand.Change + Form.Command.ОткрытьСвойстваФайла Normal Auto true true UserCmds - - StdPicture.Properties - Auto true @@ -1694,7 +1680,7 @@ ГруппаКомандСтандартныеРасширеннаяПодсказка - 116 + 117 Label true true @@ -1714,7 +1700,7 @@ ФормаОткрытьКаталогФайлаРасширеннаяПодсказка - 122 + 123 Label true true @@ -1744,7 +1730,7 @@ ФормаНайтиРасширеннаяПодсказка - 124 + 125 Label true true @@ -1771,7 +1757,7 @@ ФормаОтменитьПоискРасширеннаяПодсказка - 125 + 126 Label true true @@ -1798,7 +1784,7 @@ ФормаНастройкаСпискаРасширеннаяПодсказка - 126 + 127 Label true true @@ -1824,7 +1810,7 @@ ФормаВывестиСписокРасширеннаяПодсказка - 127 + 128 Label true true @@ -1850,7 +1836,7 @@ ФормаОбновитьРасширеннаяПодсказка - 128 + 129 Label true true @@ -1876,7 +1862,7 @@ ФормаИзменитьФормуРасширеннаяПодсказка - 129 + 130 Label true true @@ -1908,7 +1894,7 @@ ГруппаКомандОтСпискаРасширеннаяПодсказка - 123 + 124 Label true true @@ -1928,7 +1914,7 @@ ФормаСправкаРасширеннаяПодсказка - 130 + 131 Label true true @@ -1958,6 +1944,7 @@ OnCreateAtServer ПриСозданииНаСервере + Change Delete SetDeletionMark DontBlock @@ -2008,7 +1995,7 @@ ЛОЖЬ КАК ПометкаУдаления, 1 КАК ИндексКартинки, ВЫРАЗИТЬ("" КАК Строка(50)) КАК Наименование, - "" КАК Описание, + ВЫРАЗИТЬ("" КАК Строка(500)) КАК Описание, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаСоздания, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) КАК ДатаИзменения, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) КАК Автор, @@ -2138,12 +2125,12 @@ ЭЦППодписать <key>ru</key> - <value>Подписать</value> + <value>Подписать...</value> 5 ru - Подписать файл + Подписать файл электронно-цифровой подписью true @@ -2292,12 +2279,12 @@ СохранитьВместеСЭЦП <key>ru</key> - <value>Сохранить вместе с ЭЦП</value> + <value>Сохранить вместе с ЭЦП...</value> 11 ru - Сохранить вместе СЭЦП + Сохранить файл вместе с электронно-цифровой подписью true @@ -2315,12 +2302,12 @@ ДобавитьЭЦПИзФайла <key>ru</key> - <value>Добавить ЭЦП из файла</value> + <value>Добавить ЭЦП из файла...</value> 12 ru - Добавить ЭЦПИз файла + Добавить электронно-цифровую подпись из файла true @@ -2338,12 +2325,12 @@ Зашифровать <key>ru</key> - <value>Зашифровать</value> + <value>Зашифровать...</value> 15 ru - Зашифровать + Зашифровать файл true @@ -2364,12 +2351,12 @@ Расшифровать <key>ru</key> - <value>Расшифровать</value> + <value>Расшифровать...</value> 16 ru - Расшифровать + Расшифровать файл true @@ -2383,6 +2370,85 @@ Auto Auto + + ОткрытьСвойстваФайла + + <key>ru</key> + <value>Свойства файла</value> + + 1 + + ru + Открыть свойства файла + + + true + + F2 + + StdPicture.Properties + + + + ОткрытьСвойстваФайла + + + Picture + Auto + Auto + + + Создать + + <key>ru</key> + <value>Добавить...</value> + + 6 + + ru + Добавить файл + + + true + + + StdPicture.CreateListItem + + + + Создать + + + TextPicture + Auto + Auto + + + Скопировать + + <key>ru</key> + <value>Скопировать</value> + + 7 + + ru + Скопировать файл + + + true + + F9 + + StdPicture.CloneListItem + + + + Скопировать + + + Auto + Auto + ВладелецФайла diff --git a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl index 4b74bfeff..450176ed6 100644 --- a/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныеФайлы/Module.bsl @@ -1,3 +1,4 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -11,7 +12,7 @@ Возврат; КонецЕсли; - Если НЕ Параметры.Свойство("ВладелецФайла") Тогда + Если Параметры.ВладелецФайла = Неопределено Тогда ВызватьИсключение НСтр("ru = 'Список присоединенных файлов можно посмотреть |только в форме объекта-владельца.'"); КонецЕсли; @@ -22,8 +23,12 @@ МетаданныеСправочникаСФайлами = Метаданные.НайтиПоТипу(ТипСправочникаСФайлами); - Если НЕ ПравоДоступа("Изменение", МетаданныеСправочникаСФайлами) - ИЛИ НЕ ПравоДоступа("Изменение", Параметры.ВладелецФайла.Метаданные()) + Если НЕ ПравоДоступа("ИнтерактивноеДобавление", МетаданныеСправочникаСФайлами) Тогда + СкрытьКнопкиДобавления(); + КонецЕсли; + + Если НЕ ПравоДоступа("Редактирование", МетаданныеСправочникаСФайлами) + ИЛИ НЕ ПравоДоступа("Редактирование", Параметры.ВладелецФайла.Метаданные()) ИЛИ Параметры.ТолькоПросмотр = Истина Тогда СкрытьКнопкиИзменения(); @@ -50,6 +55,8 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) + УстановитьДоступностьКнопок(); + УниверсальноеВремя = УниверсальноеВремя(ТекущаяДата()); Список.Параметры.УстановитьЗначениеПараметра( @@ -176,7 +183,9 @@ КонецЕсли; Если МассивИменФайлов.Количество() > 0 Тогда - ПрисоединенныеФайлыКлиент.ДобавитьФайлыПеретаскиванием(Параметры.ВладелецФайла, УникальныйИдентификатор, МассивИменФайлов); + + ПрисоединенныеФайлыСлужебныйКлиент.ДобавитьФайлыПеретаскиванием( + Параметры.ВладелецФайла, УникальныйИдентификатор, МассивИменФайлов); КонецЕсли; КонецПроцедуры @@ -187,6 +196,13 @@ /////////////////////////////////////////////////////////////////////////////////// // Обработчики команд файлов +&НаКлиенте +Процедура Создать(Команда) + + Элементы.Список.ДобавитьСтроку(); + +КонецПроцедуры + &НаКлиенте Процедура ОткрытьФайлДляПросмотра(Команда) @@ -207,7 +223,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ТекущиеДанные.Зашифрован Тогда // Файл может быть изменен в другом сеансе. @@ -215,34 +231,7 @@ Возврат; КонецЕсли; - ПрисоединенныеФайлыКлиент.ОткрытьКаталогСФайлом(ДанныеФайла); - -КонецПроцедуры - -&НаКлиенте -Процедура СохранитьКак(Команда) - - Если НЕ ПроверитьДействиеРазрешено() Тогда - Возврат; - КонецЕсли; - - ТекущиеДанные = Элементы.Список.ТекущиеДанные; - - Если ТекущиеДанные.Зашифрован - ИЛИ (ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь) Тогда - Возврат; - КонецЕсли; - - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); - - Если ДанныеФайла.Зашифрован - ИЛИ (ДанныеФайла.ФайлРедактируется И ДанныеФайла.ФайлРедактируетТекущийПользователь) Тогда - // Файл может быть изменен в другом сеансе. - ОповеститьОбИзменении(ТекущиеДанные.Ссылка); - Возврат; - КонецЕсли; - - ПрисоединенныеФайлыКлиент.СохранитьФайлКак(ДанныеФайла); + ПрисоединенныеФайлыСлужебныйКлиент.ОткрытьКаталогСФайлом(ДанныеФайла); КонецПроцедуры @@ -261,7 +250,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); Если ДанныеФайла.Зашифрован ИЛИ ДанныеФайла.ПодписанЭЦП @@ -271,14 +260,62 @@ Возврат; КонецЕсли; - Если ПрисоединенныеФайлыКлиент.ОбновитьПрисоединенныйФайл(ТекущиеДанные.Ссылка, - ДанныеФайла, - УникальныйИдентификатор) Тогда + Если ПрисоединенныеФайлыКлиент.ОбновитьПрисоединенныйФайл( + ТекущиеДанные.Ссылка, ДанныеФайла, УникальныйИдентификатор) Тогда + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура СохранитьКак(Команда) + + Если НЕ ПроверитьДействиеРазрешено() Тогда + Возврат; + КонецЕсли; + + ТекущиеДанные = Элементы.Список.ТекущиеДанные; + + Если ТекущиеДанные.Зашифрован + ИЛИ (ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь) Тогда + Возврат; + КонецЕсли; + + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + + Если ДанныеФайла.Зашифрован + ИЛИ (ДанныеФайла.ФайлРедактируется И ДанныеФайла.ФайлРедактируетТекущийПользователь) Тогда + // Файл может быть изменен в другом сеансе. + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); + Возврат; + КонецЕсли; + + ПрисоединенныеФайлыКлиент.СохранитьФайлКак(ДанныеФайла); + +КонецПроцедуры + +&НаКлиенте +Процедура Скопировать(Команда) + + Элементы.Список.СкопироватьСтроку(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьСвойстваФайла(Команда) + + Если Элементы.Список.ТекущиеДанные = Неопределено Тогда + Возврат + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПрисоединенныйФайл", Элементы.Список.ТекущиеДанные.Ссылка); + + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы); + +КонецПроцедуры + &НаКлиенте Процедура УстановитьПометкуУдаления(Команда) @@ -323,7 +360,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.ФайлРедактируется ИЛИ ДанныеФайла.Зашифрован Тогда @@ -332,7 +369,7 @@ Возврат; КонецЕсли; - Если ПрисоединенныеФайлыКлиент.СформироватьПодписьФайла(ТекущиеДанные.Ссылка, ДанныеФайла) Тогда + Если ПрисоединенныеФайлыСлужебныйКлиент.СформироватьПодписьФайла(ТекущиеДанные.Ссылка, ДанныеФайла) Тогда ЭлектроннаяЦифроваяПодписьКлиент.ИнформироватьОПодписанииОбъекта(ТекущиеДанные.Ссылка); УстановитьДоступностьКнопок(); @@ -353,7 +390,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.Зашифрован Тогда // Файл может быть изменен в другом сеансе. @@ -379,7 +416,8 @@ Возврат; КонецЕсли; - ПрисоединенныеФайлыКлиент.ДобавитьЭЦПИзФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ПрисоединенныеФайлыСлужебныйКлиент.ДобавитьЭЦПИзФайла( + ТекущиеДанные.Ссылка, УникальныйИдентификатор); КонецПроцедуры @@ -397,7 +435,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.ФайлРедактируется ИЛИ ДанныеФайла.Зашифрован Тогда @@ -405,8 +443,9 @@ ОповеститьОбИзменении(ТекущиеДанные.Ссылка); Возврат; КонецЕсли; - - ПрисоединенныеФайлыКлиент.Зашифровать(ТекущиеДанные.Ссылка, ДанныеФайла, УникальныйИдентификатор); + + ПрисоединенныеФайлыСлужебныйКлиент.Зашифровать( + ТекущиеДанные.Ссылка, ДанныеФайла, УникальныйИдентификатор); УстановитьДоступностьКнопок(); @@ -425,7 +464,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если НЕ ДанныеФайла.Зашифрован Тогда // Файл может быть изменен в другом сеансе. @@ -433,7 +472,8 @@ Возврат; КонецЕсли; - ПрисоединенныеФайлыКлиент.Расшифровать(ТекущиеДанные.Ссылка, ДанныеФайла, УникальныйИдентификатор); + ПрисоединенныеФайлыСлужебныйКлиент.Расшифровать( + ТекущиеДанные.Ссылка, ДанныеФайла, УникальныйИдентификатор); УстановитьДоступностьКнопок(); @@ -457,7 +497,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ( ДанныеФайла.ФайлРедактируется И НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь) @@ -471,7 +511,9 @@ ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); Если НЕ ТекущиеДанные.ФайлРедактируется Тогда - ПрисоединенныеФайлы.ЗанятьФайлДляРедактированияСервер(ТекущиеДанные.Ссылка); + + ЗанятьФайлДляРедактированияСервер(ТекущиеДанные.Ссылка); + ОповеститьОбИзменении(ТекущиеДанные.Ссылка); УстановитьДоступностьКнопок(); КонецЕсли; @@ -492,7 +534,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, , Ложь); Если НЕ ДанныеФайла.ФайлРедактируется ИЛИ НЕ ДанныеФайла.ФайлРедактируетТекущийПользователь Тогда @@ -501,9 +543,11 @@ ИнформацияОФайле = Новый Структура; - Если ПрисоединенныеФайлыКлиент.ПоместитьРедактируемыйФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда + Если ПрисоединенныеФайлыСлужебныйКлиент.ПоместитьРедактируемыйФайлНаДискеВХранилище( + ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда + + ПоместитьФайлВХранилищеИОсвободить(ТекущиеДанные.Ссылка, ИнформацияОФайле); - ПрисоединенныеФайлы.ПоместитьФайлВХранилищеИОсвободить(ТекущиеДанные.Ссылка, ИнформацияОФайле); ОповеститьОбИзменении(ТекущиеДанные.Ссылка); УстановитьДоступностьКнопок(); КонецЕсли; @@ -524,7 +568,7 @@ Возврат; КонецЕсли; - ПрисоединенныеФайлы.ОсвободитьФайл(ТекущиеДанные.Ссылка); + ОсвободитьФайл(ТекущиеДанные.Ссылка); ОповеститьОбИзменении(ТекущиеДанные.Ссылка); УстановитьДоступностьКнопок(); @@ -548,7 +592,7 @@ ФайлРедактируется = ТекущиеДанные.ФайлРедактируется И ТекущиеДанные.ФайлРедактируетТекущийПользователь; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); Если ДанныеФайла.Зашифрован Тогда // Файл может быть изменен в другом сеансе. @@ -598,6 +642,17 @@ КонецФункции +&НаСервере +Процедура СкрытьКнопкиДобавления() + + Элементы.ФормаСоздать.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюСоздать.Видимость = Ложь; + + Элементы.ФормаСкопировать.Видимость = Ложь; + Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Ложь; + +КонецПроцедуры + &НаСервере Процедура СкрытьКнопкиИзменения() @@ -624,7 +679,8 @@ #КонецЕсли Если Элементы.Список.ТекущиеДанные = Неопределено Тогда - Возврат; + ИменаКоманд = Новый Массив; + ИменаКоманд.Добавить("Создать"); ИначеЕсли ТипЗнч(Элементы.Список.ТекущаяСтрока) <> ТипСправочникаСФайлами Тогда ИменаКоманд = Новый Массив; @@ -653,6 +709,39 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, + Знач ИдентификаторФормы = Неопределено, + Знач ПолучатьСсылкуНаДвоичныеДанные = Истина) + + Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗанятьФайлДляРедактированияСервер(Знач ПрисоединенныйФайл) + + ПрисоединенныеФайлыСлужебный.ЗанятьФайлДляРедактированияСервер(ПрисоединенныйФайл); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ОсвободитьФайл(Знач ПрисоединенныйФайл) + + ПрисоединенныеФайлыСлужебный.ОсвободитьФайл(ПрисоединенныйФайл); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПоместитьФайлВХранилищеИОсвободить(Знач ПрисоединенныйФайл, + Знач ИнформацияОФайле) + + ПрисоединенныеФайлыСлужебный.ПоместитьФайлВХранилищеИОсвободить( + ПрисоединенныйФайл, ИнформацияОФайле); + +КонецПроцедуры + &НаСервереБезКонтекста Процедура УстановитьЗначениеПометкиУдаления(Знач ПрисоединенныйФайл, Знач ПометкаУдаления) @@ -677,7 +766,7 @@ | ИНАЧЕ Файлы.ИндексКартинки | КОНЕЦ КАК ИндексКартинки, | Файлы.Наименование КАК Наименование, - | Файлы.Описание, + | ВЫРАЗИТЬ(Файлы.Описание КАК Строка(500)) КАК Описание, | Файлы.ДатаСоздания, | ДОБАВИТЬКДАТЕ(Файлы.ДатаМодификацииУниверсальная, СЕКУНДА, &СекундДоМестногоВремени) КАК ДатаИзменения, | Файлы.Автор, @@ -742,6 +831,7 @@ // Команды независимые от состояния объектов. ИменаКоманд.Добавить("Создать"); + ИменаКоманд.Добавить("ОткрытьСвойстваФайла"); ИменаКоманд.Добавить("УстановитьПометкуУдаления"); ИменаКоманд.Добавить("Скопировать"); diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form index 2c67e4907..e6ea43dd2 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Form.form @@ -2000,7 +2000,7 @@ ПодписатьФайлЭЦП <key>ru</key> - <value>Подписать</value> + <value>Подписать...</value> 7 @@ -2183,7 +2183,7 @@ ДобавитьЭЦПИзФайла <key>ru</key> - <value>Добавить ЭЦП из файла</value> + <value>Добавить ЭЦП из файла...</value> 6 @@ -2206,7 +2206,7 @@ Зашифровать <key>ru</key> - <value>Зашифровать</value> + <value>Зашифровать...</value> 8 @@ -2232,7 +2232,7 @@ Расшифровать <key>ru</key> - <value>Расшифровать</value> + <value>Расшифровать...</value> 15 @@ -2255,7 +2255,7 @@ СохранитьВместеСЭЦП <key>ru</key> - <value>Сохранить вместе с ЭЦП</value> + <value>Сохранить вместе с ЭЦП...</value> 16 @@ -2393,7 +2393,7 @@ СохранитьПодпись <key>ru</key> - <value>Сохранить</value> + <value>Сохранить в файл...</value> 22 diff --git a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl index ab9ce2825..733dbc05a 100644 --- a/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl +++ b/SSL/src/CommonForms/ПрисоединенныйФайл/Module.bsl @@ -1,3 +1,4 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -21,8 +22,8 @@ ПользовательПустаяСссылка = Справочники.Пользователи.ПустаяСсылка(); Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - ЗначениеКопирования = Параметры.ЗначениеКопирования; КопируемыйОбъект = Параметры.ЗначениеКопирования.ПолучитьОбъект(); + ЗначениеКопирования = Параметры.ЗначениеКопирования; ОбъектЗначение = Справочники[КопируемыйОбъект.Метаданные().Имя].СоздатьЭлемент(); ЗаполнитьЗначенияСвойств( @@ -140,11 +141,11 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, , Ложь); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, , Ложь); ИнформацияОФайле = Новый Структура; - Если ПрисоединенныеФайлыКлиент.ВыбратьФайлНаДискеИПоместитьВХранилище( + Если ПрисоединенныеФайлыСлужебныйКлиент.ВыбратьФайлНаДискеИПоместитьВХранилище( ДанныеФайла, ИнформацияОФайле, УникальныйИдентификатор) Тогда ОбновитьДвоичныеДанныеФайлаНаСервере(ИнформацияОФайле); @@ -258,12 +259,11 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); ДанныеПодписи = Неопределено; - Если ПрисоединенныеФайлыКлиент.ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи( + Если ПрисоединенныеФайлыСлужебныйКлиент.ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи( ЭтаФорма.Объект.Ссылка, ДанныеФайла, ДанныеПодписи) Тогда ЗанестиИнформациюОднойПодписи(ДанныеПодписи); @@ -293,16 +293,15 @@ ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); Если ПодключитьРасширениеРаботыСФайлами() Тогда - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); - МассивПодписей = ПрисоединенныеФайлыКлиент.ПолучитьМассивПодписей( + МассивПодписей = ПрисоединенныеФайлыСлужебныйКлиент.ПолучитьМассивПодписей( ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); Если МассивПодписей.Количество() > 0 Тогда ЗанестиИнформациюОПодписях(МассивПодписей); - ПрисоединенныеФайлыКлиент.ОповеститьОДобавленииПодписиИзФайла( + ПрисоединенныеФайлыСлужебныйКлиент.ОповеститьОДобавленииПодписиИзФайла( ЭтаФорма.Объект.Ссылка, МассивПодписей.Количество()); КонецЕсли; Иначе @@ -323,8 +322,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); ПрисоединенныеФайлыКлиент.СохранитьВместеСЭЦП( ЭтаФорма.Объект.Ссылка, @@ -342,14 +340,12 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ЭтаФорма.Объект.Ссылка, - УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); ЗашифрованныеДанные = Неопределено; МассивОтпечатков = Новый Массив; - Если НЕ ПрисоединенныеФайлыКлиент.ПолучитьЗашифрованныеДанные( + Если НЕ ПрисоединенныеФайлыСлужебныйКлиент.ПолучитьЗашифрованныеДанные( ЭтаФорма.Объект.Ссылка, ДанныеФайла, УникальныйИдентификатор, @@ -361,7 +357,7 @@ ЗашифроватьСервер(ЗашифрованныеДанные, МассивОтпечатков); - ПрисоединенныеФайлыКлиент.ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге( + ПрисоединенныеФайлыСлужебныйКлиент.ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге( ЭтаФорма.Объект.Ссылка, ДанныеФайла); ЗаполнитьСписокШифрования(); @@ -378,10 +374,10 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); РасшифрованныеДанные = Неопределено; - Если НЕ ПрисоединенныеФайлыКлиент.ПолучитьРасшифрованныеДанные( + Если НЕ ПрисоединенныеФайлыСлужебныйКлиент.ПолучитьРасшифрованныеДанные( ЭтаФорма.Объект.Ссылка, ДанныеФайла, РасшифрованныеДанные, @@ -391,7 +387,7 @@ РасшифроватьСервер(РасшифрованныеДанные); - ПрисоединенныеФайлыКлиент.ОповеститьОРасшифровкеФайла(ЭтаФорма.Объект.Ссылка); + ПрисоединенныеФайлыСлужебныйКлиент.ОповеститьОРасшифровкеФайла(ЭтаФорма.Объект.Ссылка); ЗаполнитьСписокШифрования(); @@ -424,7 +420,7 @@ ДанныеВыделенныхСтрок.Добавить(ДанныеСтроки); КонецЦикла; - ФайловыеФункции.ПроверитьНаСервере(ДанныеВыделенныхСтрок); + ПроверитьНаСервере(ДанныеВыделенныхСтрок); Индекс = 0; Для Каждого Элемент Из Элементы.ТаблицаПодписей.ВыделенныеСтроки Цикл @@ -437,7 +433,7 @@ МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(); ДвоичныеДанные = ПолучитьИзВременногоХранилища( - ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка).СсылкаНаДвоичныеДанныеФайла); + ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка).СсылкаНаДвоичныеДанныеФайла); Для Каждого Элемент Из Элементы.ТаблицаПодписей.ВыделенныеСтроки Цикл ДанныеСтроки = Элементы.ТаблицаПодписей.ДанныеСтроки(Элемент); @@ -471,7 +467,7 @@ ДанныеСтрок.Добавить(ДанныеСтроки); КонецЦикла; - ФайловыеФункции.ПроверитьВсеНаСервере(ДанныеСтрок); + ПроверитьВсеНаСервере(ДанныеСтрок); Индекс = 0; Для Каждого СтрокаТЗ Из ТаблицаПодписей Цикл @@ -481,7 +477,7 @@ КонецЦикла; Иначе ДвоичныеДанные = ПолучитьИзВременногоХранилища( - ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка).СсылкаНаДвоичныеДанныеФайла); + ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка).СсылкаНаДвоичныеДанныеФайла); МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(); @@ -570,8 +566,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); Если ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) Тогда ПрисоединенныеФайлыКлиент.ОткрытьФайл(ДанныеФайла, Истина); @@ -593,14 +588,14 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, , Ложь); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, , Ложь); ИнформацияОФайле = Новый Структура; - Если ПрисоединенныеФайлыКлиент.ПоместитьРедактируемыйФайлНаДискеВХранилище( - ДанныеФайла, - ИнформацияОФайле, - УникальныйИдентификатор) Тогда + Если ПрисоединенныеФайлыСлужебныйКлиент.ПоместитьРедактируемыйФайлНаДискеВХранилище( + ДанныеФайла, + ИнформацияОФайле, + УникальныйИдентификатор) Тогда ПоместитьФайлВХранилищеИОсвободить(ИнформацияОФайле); ОповеститьОбИзменении(ЭтаФорма.Объект.Ссылка); @@ -629,6 +624,30 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервереБезКонтекста +Процедура ПроверитьНаСервере(ДанныеВыделенныхСтрок) + + ФайловыеФункцииСлужебный.ПроверитьНаСервере(ДанныеВыделенныхСтрок); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПроверитьВсеНаСервере(ТаблицаПодписей) + + ФайловыеФункцииСлужебный.ПроверитьВсеНаСервере(ТаблицаПодписей); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, + Знач ИдентификаторФормы = Неопределено, + Знач ПолучатьСсылкуНаДвоичныеДанные = Истина) + + Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные); + +КонецФункции + &НаКлиенте Процедура ОткрытьФайлДляПросмотра() @@ -637,8 +656,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); ФайлРедактируется = ЗначениеЗаполнено(ЭтаФорма.Объект.Редактирует) И ЭтаФорма.Объект.Редактирует = ТекущийПользователь; @@ -655,10 +673,9 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); - ПрисоединенныеФайлыКлиент.ОткрытьКаталогСФайлом(ДанныеФайла); + ПрисоединенныеФайлыСлужебныйКлиент.ОткрытьКаталогСФайлом(ДанныеФайла); КонецПроцедуры @@ -670,8 +687,7 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла( - ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПолучитьДанныеФайла(ЭтаФорма.Объект.Ссылка, УникальныйИдентификатор); ПрисоединенныеФайлыКлиент.СохранитьФайлКак(ДанныеФайла); @@ -836,7 +852,7 @@ Процедура РасшифроватьСервер(РасшифрованныеДанные) ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); - ПрисоединенныеФайлы.Расшифровать(ЗаписываемыйОбъект, РасшифрованныеДанные); + ПрисоединенныеФайлыСлужебный.Расшифровать(ЗаписываемыйОбъект, РасшифрованныеДанные); ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); УстановитьДоступностьКнопок(ЭтаФорма, Элементы, ТекущийПользователь); @@ -1046,7 +1062,7 @@ ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); - ПрисоединенныеФайлы.Зашифровать(ЗаписываемыйОбъект, ЗашифрованныеДанные, МассивОтпечатков); + ПрисоединенныеФайлыСлужебный.Зашифровать(ЗаписываемыйОбъект, ЗашифрованныеДанные, МассивОтпечатков); ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); @@ -1086,7 +1102,7 @@ Процедура ЗанятьФайлДляРедактированияСервер() ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); - ПрисоединенныеФайлы.ЗанятьФайлДляРедактированияСервер(ЗаписываемыйОбъект); + ПрисоединенныеФайлыСлужебный.ЗанятьФайлДляРедактированияСервер(ЗаписываемыйОбъект); ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); УстановитьДоступностьКнопок(ЭтаФорма, Элементы, ТекущийПользователь); @@ -1097,7 +1113,7 @@ Процедура ПоместитьФайлВХранилищеИОсвободить(Знач ИнформацияОФайле) ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); - ПрисоединенныеФайлы.ПоместитьФайлВХранилищеИОсвободить(ЗаписываемыйОбъект, ИнформацияОФайле); + ПрисоединенныеФайлыСлужебный.ПоместитьФайлВХранилищеИОсвободить(ЗаписываемыйОбъект, ИнформацияОФайле); ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); КонецПроцедуры @@ -1106,7 +1122,7 @@ Процедура ОсвободитьФайл() ЗаписываемыйОбъект = РеквизитФормыВЗначение("Объект"); - ПрисоединенныеФайлы.ОсвободитьФайл(ЗаписываемыйОбъект); + ПрисоединенныеФайлыСлужебный.ОсвободитьФайл(ЗаписываемыйОбъект); ЗначениеВРеквизитФормы(ЗаписываемыйОбъект, "Объект"); КонецПроцедуры @@ -1121,7 +1137,7 @@ КонецЕсли; Попытка - ФайловыеФункцииКлиент.КорректноеИмяФайла(ЭтаФорма.Объект.Наименование); + ФайловыеФункцииСлужебныйКлиент.КорректноеИмяФайла(ЭтаФорма.Объект.Наименование); Исключение Информация = ИнформацияОбОшибке(); @@ -1169,18 +1185,18 @@ Если ЗначениеЗаполнено(ЗначениеКопирования) Тогда ДвоичныеДанные = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ЗначениеКопирования); - Если ФайловыеФункции.ПолучитьТипХраненияФайлов() + Если ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда НачатьТранзакцию(); ТранзакцияАктивна = Истина; СсылкаНового = Справочники[ИмяСправочника].ПолучитьСсылку(); ЗаписываемыйОбъект.УстановитьСсылкуНового(СсылкаНового); - ПрисоединенныеФайлы.ЗаписатьФайлВИнформационнуюБазу(СсылкаНового, ДвоичныеДанные); + ПрисоединенныеФайлыСлужебный.ЗаписатьФайлВИнформационнуюБазу(СсылкаНового, ДвоичныеДанные); ЗаписываемыйОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; Иначе // Добавление файла в один из томов (где есть свободное место). - ФайловыеФункции.ДобавитьНаДиск( + ФайловыеФункцииСлужебный.ДобавитьНаДиск( ДвоичныеДанные, ЗаписываемыйОбъект.ПутьКФайлу, ЗаписываемыйОбъект.Том, diff --git a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Form.form b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form similarity index 88% rename from SSL/src/CommonForms/РедактированиеЗначенийСвойств/Form.form rename to SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form index f0996aead..6608db332 100644 --- a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Form.form +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Form.form @@ -1,5 +1,9 @@ + + <key>ru</key> + <value>Дополнительные сведения</value> + ТаблицаЗначенийСвойств 3 @@ -11,6 +15,7 @@ ТаблицаЗначенийСвойств + true false None @@ -20,7 +25,7 @@ ТаблицаЗначенийСвойствНомерКартинки 6 true - false + true true @@ -30,7 +35,7 @@ None ТаблицаЗначенийСвойствНомерКартинкиРасширеннаяПодсказка - 31 + 36 Label true true @@ -44,6 +49,7 @@ true PictureField + true Enter true Left @@ -76,7 +82,7 @@ ТаблицаЗначенийСвойствНаименованиеРасширеннаяПодсказка - 33 + 38 Label true true @@ -112,7 +118,7 @@ false ТаблицаЗначенийСвойствКартинкаИСвойствоРасширеннаяПодсказка - 30 + 35 Label true true @@ -144,7 +150,7 @@ ТаблицаЗначенийСвойствЗначениеРасширеннаяПодсказка - 35 + 40 Label true true @@ -207,10 +213,10 @@ ТаблицаЗначенийСвойствСтрокаПоиска - 21 + 26 ТаблицаЗначенийСвойствСтрокаПоискаРасширеннаяПодсказка - 23 + 28 Label true true @@ -220,7 +226,7 @@ ТаблицаЗначенийСвойствСтрокаПоискаКонтекстноеМеню - 22 + 27 true ТаблицаЗначенийСвойств @@ -230,10 +236,10 @@ ТаблицаЗначенийСвойствСостояниеПросмотра - 24 + 29 ТаблицаЗначенийСвойствСостояниеПросмотраРасширеннаяПодсказка - 26 + 31 Label true true @@ -243,7 +249,7 @@ ТаблицаЗначенийСвойствСостояниеПросмотраКонтекстноеМеню - 25 + 30 true ViewStatusAddition @@ -254,10 +260,10 @@ ТаблицаЗначенийСвойствУправлениеПоиском - 27 + 32 ТаблицаЗначенийСвойствУправлениеПоискомРасширеннаяПодсказка - 29 + 34 Label true true @@ -267,7 +273,7 @@ ТаблицаЗначенийСвойствУправлениеПоискомКонтекстноеМеню - 28 + 33 true SearchControlAddition @@ -278,7 +284,7 @@ ТаблицаЗначенийСвойствРасширеннаяПодсказка - 20 + 25 Label true true @@ -313,110 +319,65 @@ true - - ГруппаКоманд - 18 - - КомандаОК - 13 - true - true - - true - - false - - КомандаОКРасширеннаяПодсказка - 46 - Label - true - true - - Left - - - Form.Command.КомандаОК - Auto - true - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - Auto - - - КомандаОтмена - 14 - true - true - - true - - false - - КомандаОтменаРасширеннаяПодсказка - 47 - Label - true - true - - Left - - - Form.Command.КомандаОтмена - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - Auto - - true - true - - true - - - <key>ru</key> - <value>Группа команд</value> - - - ru - Группа команд - - - ГруппаКомандРасширеннаяПодсказка - 45 - Label - true - true - - Left - - - CommandBar - - Right - - Top true ФормаКоманднаяПанель -1 - РедактироватьСоставСвойств + ФормаЗаписатьИЗакрыть + 21 + true + true + + true + + + ФормаЗаписатьИЗакрытьРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + Form.Command.ЗаписатьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + ФормаЗаписать + 20 + true + true + + true + + + ФормаЗаписатьРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.Записать + Normal + Auto + true + true + UserCmds + Auto + + + ИзменитьСоставДополнительныхСведений 2 true true @@ -425,8 +386,8 @@ false - РедактироватьСоставСвойствРасширеннаяПодсказка - 19 + ИзменитьСоставДополнительныхСведенийРасширеннаяПодсказка + 24 Label true true @@ -434,7 +395,7 @@ Left - Form.Command.РедактироватьСоставСвойств + Form.Command.ИзменитьСоставДополнительныхСведений Normal Auto true @@ -447,6 +408,7 @@ Style.ButtonBackColor Auto + InAdditionalSubmenu Left true @@ -463,9 +425,9 @@ OnCreateAtServer ПриСозданииНаСервере + 60 LockOwner true - true true Vertical true @@ -625,23 +587,6 @@ - - БылаНажатаКнопкаЗакрытия - - <key>ru</key> - <value>Была нажата кнопка закрытия</value> - - 4 - - Boolean - - - true - - - true - - СсылкаНаОбъект @@ -660,15 +605,15 @@ </edit> </attributes> <formCommands> - <name>РедактироватьСоставСвойств</name> + <name>ИзменитьСоставДополнительныхСведений</name> <title> <key>ru</key> - <value>Изменить состав доп. реквизитов и сведений</value> + <value>Изменить состав дополнительных сведений</value> 1 ru - Изменить состав дополнительных реквизитов и сведений + Изменить состав дополнительных сведений @@ -802,22 +747,50 @@ - РедактироватьСоставСвойств + ИзменитьСоставДополнительныхСведений Auto Auto - КомандаОК + Записать <key>ru</key> - <value>ОК</value> + <value>Записать</value> 2 + + + true + Role.ИзменениеДополнительныхСведений + + + true + Role.ПолныеПрава + + + + StdPicture.Write + + + + Записать + + + Auto + Auto + + + ЗаписатьИЗакрыть + + <key>ru</key> + <value>Записать и закрыть</value> + + 3 ru - ОК + Записать и закрыть @@ -831,29 +804,7 @@ - КомандаОК - - - Auto - Auto - - - КомандаОтмена - - <key>ru</key> - <value>Отмена</value> - - 3 - - ru - Отмена - - - true - - - - КомандаОтмена + ЗаписатьИЗакрыть Auto @@ -864,6 +815,13 @@ AnyRef + true + + + ПанельНавигацииФормы + + Boolean + diff --git a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Module.bsl b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl similarity index 81% rename from SSL/src/CommonForms/РедактированиеЗначенийСвойств/Module.bsl rename to SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl index 4bcf042ab..36d9ddfef 100644 --- a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/Module.bsl @@ -9,23 +9,21 @@ Возврат; КонецЕсли; - БылаНажатаКнопкаЗакрытия = Ложь; + Если Параметры.ПанельНавигацииФормы + И ПравоДоступа("Редактирование", Метаданные.РегистрыСведений.ДополнительныеСведения) Тогда + + Элементы.ФормаЗаписатьИЗакрыть.Видимость = Ложь; + Элементы.ФормаЗаписать.КнопкаПоУмолчанию = Истина; + Элементы.ФормаЗаписать.Отображение = ОтображениеКнопки.КартинкаИТекст; + КонецЕсли; + СсылкаНаОбъект = Параметры.Ссылка; // Получение списка доступных наборов свойств. - ДоступныеНаборы = УправлениеСвойствами.ПолучитьДоступныеНаборыСвойств(Параметры.Ссылка); - - Если ДоступныеНаборы = Неопределено Тогда - ДоступныеНаборыСвойств = Новый СписокЗначений; - ИначеЕсли ТипЗнч(ДоступныеНаборы) = Тип("СписокЗначений") Тогда - ДоступныеНаборыСвойств = ДоступныеНаборы; - ИначеЕсли ДоступныеНаборы <> Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка() Тогда - ДоступныеНаборыСвойств.Добавить(ДоступныеНаборы); - КонецЕсли; - - // Установка заголовока. - Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Дополнительные сведения: %1'"), Строка(Параметры.Ссылка) ); + НаборыСвойств = УправлениеСвойствами.ПолучитьНаборыСвойствОбъекта(Параметры.Ссылка); + Для каждого Строка Из НаборыСвойств Цикл + ДоступныеНаборыСвойств.Добавить(Строка.Набор); + КонецЦикла; // Заполнение таблицы значений свойств. ЗаполнитьТаблицуЗначенийСвойств(Истина); @@ -35,9 +33,7 @@ &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - Если НЕ БылаНажатаКнопкаЗакрытия Тогда - ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность); - КонецЕсли; + ОбщегоНазначенияКлиент.ЗапроситьПодтверждениеЗакрытияФормы(Отказ, Модифицированность); КонецПроцедуры @@ -93,43 +89,51 @@ // ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте -Процедура КомандаОК(Команда) +Процедура Записать(Команда) ЗаписатьЗначенияСвойств(); - БылаНажатаКнопкаЗакрытия = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаписатьИЗакрыть(Команда) + + ЗаписатьЗначенияСвойств(); + Закрыть(); КонецПроцедуры &НаКлиенте -Процедура КомандаОтмена(Команда) - - БылаНажатаКнопкаЗакрытия = Истина; - Закрыть(); - -КонецПроцедуры - -&НаКлиенте -Процедура РедактироватьСоставСвойств(Команда) +Процедура ИзменитьСоставДополнительныхСведений(Команда) Если ДоступныеНаборыСвойств.Количество() = 0 Тогда - Предупреждение(НСтр("ru = 'У объекта отсутствуют дополнительные свойста.'")); + Предупреждение( + НСтр("ru = 'Не удалось получить наборы дополнительных сведений объекта. + | + |Возможно у объекта не заполнены необходимые реквизиты.'")); Возврат; ИначеЕсли ДоступныеНаборыСвойств.Количество() = 1 Тогда + Элемент = ДоступныеНаборыСвойств.Получить(0); Иначе - Элемент = ДоступныеНаборыСвойств.ВыбратьЭлемент(); + + Элемент = ДоступныеНаборыСвойств.ВыбратьЭлемент( + НСтр("ru = 'Выберите набор дополнительных сведений'")); + Если Элемент = Неопределено Тогда Возврат; КонецЕсли; КонецЕсли; - ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Ключ", Элемент.Значение); + ПараметрыФормы.Вставить("СкрытьДополнительныеРеквизиты", Истина); - ОткрытьФормуМодально("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", ПараметрыФормы); + ОткрытьФормуМодально( + "Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", + ПараметрыФормы); КонецПроцедуры @@ -181,6 +185,8 @@ ЗаписатьНаборСвойствВРегистр(СсылкаНаОбъект, ЗначенияСвойств); + Модифицированность = Ложь; + КонецПроцедуры &НаСервереБезКонтекста @@ -237,4 +243,3 @@ Возврат ЗначенияСвойств; КонецФункции - diff --git a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/РедактированиеЗначенийСвойств.mdo b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/РедактированиеДополнительныхСведений.mdo similarity index 66% rename from SSL/src/CommonForms/РедактированиеЗначенийСвойств/РедактированиеЗначенийСвойств.mdo rename to SSL/src/CommonForms/РедактированиеДополнительныхСведений/РедактированиеДополнительныхСведений.mdo index be6a2a1c7..f04363545 100644 --- a/SSL/src/CommonForms/РедактированиеЗначенийСвойств/РедактированиеЗначенийСвойств.mdo +++ b/SSL/src/CommonForms/РедактированиеДополнительныхСведений/РедактированиеДополнительныхСведений.mdo @@ -1,9 +1,9 @@ - РедактированиеЗначенийСвойств + РедактированиеДополнительныхСведений ru - Редактирование значений свойств + Редактирование дополнительных сведений PersonalComputer MobileDevice diff --git a/SSL/src/CommonForms/РедактированиеНовогоПисьма/Form.form b/SSL/src/CommonForms/РедактированиеНовогоПисьма/Form.form index ff7ace588..4c8102e9e 100644 --- a/SSL/src/CommonForms/РедактированиеНовогоПисьма/Form.form +++ b/SSL/src/CommonForms/РедактированиеНовогоПисьма/Form.form @@ -24,7 +24,7 @@ ЭлектронныйАдресКомуРасширеннаяПодсказка - 51 + 50 Label true true @@ -70,7 +70,7 @@ ТемаПисьмаРасширеннаяПодсказка - 53 + 52 Label true true @@ -115,7 +115,7 @@ ТелоПисьмаРасширеннаяПодсказка - 55 + 54 Label true true @@ -180,7 +180,7 @@ Вложение1РасширеннаяПодсказка - 73 + 72 Label true true @@ -220,7 +220,7 @@ Вложение2РасширеннаяПодсказка - 75 + 74 Label true true @@ -261,7 +261,7 @@ false ПриложитьФайлРасширеннаяПодсказка - 62 + 61 Label true true @@ -301,10 +301,10 @@ ВложенияСтрокаПоиска - 64 + 63 ВложенияСтрокаПоискаРасширеннаяПодсказка - 66 + 65 Label true true @@ -314,7 +314,7 @@ ВложенияСтрокаПоискаКонтекстноеМеню - 65 + 64 true Вложения @@ -324,10 +324,10 @@ ВложенияСостояниеПросмотра - 67 + 66 ВложенияСостояниеПросмотраРасширеннаяПодсказка - 69 + 68 Label true true @@ -337,7 +337,7 @@ ВложенияСостояниеПросмотраКонтекстноеМеню - 68 + 67 true ViewStatusAddition @@ -348,10 +348,10 @@ ВложенияУправлениеПоиском - 70 + 69 ВложенияУправлениеПоискомРасширеннаяПодсказка - 72 + 71 Label true true @@ -361,7 +361,7 @@ ВложенияУправлениеПоискомКонтекстноеМеню - 71 + 70 true SearchControlAddition @@ -372,7 +372,7 @@ ВложенияРасширеннаяПодсказка - 63 + 62 Label true true @@ -397,7 +397,7 @@ false КонтекстноеМенюВложенияПриложитьФайлРасширеннаяПодсказка - 59 + 58 Label true true @@ -424,7 +424,7 @@ false КонтекстноеМенюВложенияУдалитьРасширеннаяПодсказка - 60 + 59 Label true true @@ -455,7 +455,7 @@ ГруппаПриложитьФайлРасширеннаяПодсказка - 58 + 57 Label true true @@ -476,7 +476,7 @@ false КонтекстноеМенюВложенияОткрытьФайлРасширеннаяПодсказка - 61 + 60 Label true true @@ -532,7 +532,7 @@ ГруппаВложенияРасширеннаяПодсказка - 57 + 56 Label true true @@ -561,7 +561,7 @@ ОсновнаяГруппаТелаПисьмаРасширеннаяПодсказка - 50 + 49 Label true true @@ -582,63 +582,6 @@ ГруппаУчетнаяЗапись 30 - - АдресОтвета - 38 - true - true - - true - - - АдресОтвета - - - ru - Введите адрес электронной почты на который вы хотите получить ответ на это письмо - - - АдресОтветаРасширеннаяПодсказка - 86 - Label - true - true - - Left - - - - АдресОтветаКонтекстноеМеню - 39 - true - - InputField - Enter - true - Left - true - - - Clearing - АдресОтветаОчистка - - - TextEditEnd - АдресОтветаОкончаниеВводаТекста - - - ChoiceProcessing - АдресОтветаОбработкаВыбора - - true - true - true - true - true - true - Normal - - УчетнаяЗапись 25 @@ -657,7 +600,7 @@ УчетнаяЗаписьРасширеннаяПодсказка - 88 + 85 Label true true @@ -704,6 +647,63 @@ Normal + + АдресОтвета + 38 + true + true + + true + + + АдресОтвета + + + ru + Введите адрес электронной почты на который вы хотите получить ответ на это письмо + + + АдресОтветаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + АдресОтветаКонтекстноеМеню + 39 + true + + InputField + Enter + true + Left + true + + + Clearing + АдресОтветаОчистка + + + TextEditEnd + АдресОтветаОкончаниеВводаТекста + + + ChoiceProcessing + АдресОтветаОбработкаВыбора + + true + true + true + true + true + true + Normal + + true true @@ -719,7 +719,7 @@ ГруппаУчетнаяЗаписьРасширеннаяПодсказка - 85 + 84 Label true true @@ -731,13 +731,14 @@ Vertical Auto + NormalSeparation true true Auto Auto - Bottom + Top true ФормаКоманднаяПанель @@ -769,33 +770,6 @@ UserCmds Auto - - Отмена - 24 - true - true - - true - - false - - ОтменаРасширеннаяПодсказка - 48 - Label - true - true - - Left - - - Form.StandardCommand.Cancel - Normal - Auto - true - true - UserCmds - Auto - Справка 27 @@ -807,7 +781,7 @@ false СправкаРасширеннаяПодсказка - 49 + 48 Label true true @@ -823,7 +797,8 @@ UserCmds Auto - Right + Left + true OnOpen @@ -1095,7 +1070,7 @@ ОтправитьПисьмо <key>ru</key> - <value>Отправить письмо</value> + <value>Отправить</value> 1 @@ -1107,7 +1082,7 @@ - ОтправитьПисьмоВыполнить + ОтправитьПисьмо Auto @@ -1117,18 +1092,18 @@ ПриложитьФайл <key>ru</key> - <value>Приложить файл</value> + <value>Приложить файл...</value> 2 ru - Приложить файл + Приложить файл к письму true - CommonPicture.ПриложитьФайл + CommonPicture.Скрепка @@ -1173,13 +1148,7 @@ Кому - - ValueList - String - - 1000 - - + Тема diff --git a/SSL/src/CommonForms/РедактированиеНовогоПисьма/Help/ru.html b/SSL/src/CommonForms/РедактированиеНовогоПисьма/Help/ru.html index 92cb1674c..e46c1c1c4 100644 --- a/SSL/src/CommonForms/РедактированиеНовогоПисьма/Help/ru.html +++ b/SSL/src/CommonForms/РедактированиеНовогоПисьма/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                diff --git a/SSL/src/CommonForms/РедактированиеНовогоПисьма/Module.bsl b/SSL/src/CommonForms/РедактированиеНовогоПисьма/Module.bsl index 069dca145..343fd524e 100644 --- a/SSL/src/CommonForms/РедактированиеНовогоПисьма/Module.bsl +++ b/SSL/src/CommonForms/РедактированиеНовогоПисьма/Module.bsl @@ -157,7 +157,7 @@ КонецЕсли; КонецЕсли; - Если ТипЗнч(Параметры.Кому) = Тип("СписокЗначений") Тогда + Если ТипЗнч(Параметры.Кому) = Тип("СписокЗначений") Тогда ПочтовыйАдресПолучателя = ""; Для Каждого ЭлементПочтовыйАдрес Из Параметры.Кому Цикл Если ЗначениеЗаполнено(ЭлементПочтовыйАдрес.Представление) тогда @@ -174,6 +174,10 @@ КонецЦикла; ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("Строка") Тогда ПочтовыйАдресПолучателя = Параметры.Кому; + ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("Массив") Тогда + Для Каждого СтруктураПолучателя Из Параметры.Кому Цикл + ПочтовыйАдресПолучателя = ПочтовыйАдресПолучателя + СтруктураПолучателя.Представление + " <" + СтруктураПолучателя.Адрес + ">; "; + КонецЦикла; КонецЕсли; // Получаем список адресов, которые пользователь использовал ранее @@ -284,7 +288,7 @@ Процедура АдресОтветаОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - АктуализироватьАдресОтветаВХранимомСписоке(АдресОтвета, Ложь); + АктуализироватьАдресОтветаВХранимомСписке(АдресОтвета, Ложь); Для Каждого ЭлементаАдресОтвета Из Элементы.АдресОтвета.СписокВыбора Цикл Если ЭлементаАдресОтвета.Значение = АдресОтвета @@ -365,7 +369,7 @@ КонецПроцедуры &НаКлиенте -Процедура ОтправитьПисьмоВыполнить() +Процедура ОтправитьПисьмо() ОчиститьСообщения(); @@ -409,7 +413,7 @@ КонецЕсли; Попытка - ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; @@ -436,6 +440,13 @@ // СЕКЦИЯ ОБРАБОТЧИКОВ СОБЫТИЙ ФОРМЫ И ЭЛЕМЕНТОВ ФОРМЫ // +&НаСервереБезКонтекста +Функция ОтправитьПочтовоеСообщение(знач УчетнаяЗапись, знач ПараметрыПисьма) + + Возврат ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(УчетнаяЗапись, ПараметрыПисьма); + +КонецФункции + &НаСервереБезКонтекста Функция ПолучитьПочтовыйАдресПоУчетнойЗаписи(знач УчетнаяЗапись) @@ -451,7 +462,6 @@ Заголовок = НСтр("ru = 'Сообщение отправлено'"); Элементы.ОтправитьПисьмо.Доступность = Ложь; - Элементы.Отмена.Заголовок = НСтр("ru = 'Закрыть'");; Элементы.ЭлектронныйАдресКому.ТолькоПросмотр = Истина; Элементы.ТемаПисьма.ТолькоПросмотр = Истина; Элементы.ТелоПисьма.ТолькоПросмотр = Истина; @@ -517,6 +527,13 @@ ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.Прочитать(ИмяФайла); + Попытка + УдалитьФайлы(ИмяФайла); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение табличного документа'"), УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + Возврат ТабличныйДокумент; КонецФункции @@ -622,14 +639,14 @@ &НаСервереБезКонтекста Функция СохранитьАдресОтвета(знач АдресОтвета) - АктуализироватьАдресОтветаВХранимомСписоке(АдресОтвета); + АктуализироватьАдресОтветаВХранимомСписке(АдресОтвета); КонецФункции // Добавляет адрес ответа в список сохраняемых значений // &НаСервереБезКонтекста -Функция АктуализироватьАдресОтветаВХранимомСписоке(знач АдресОтвета, +Функция АктуализироватьАдресОтветаВХранимомСписке(знач АдресОтвета, знач ДобавлятьАдресВСписок = Истина) // Получаем список адресов, которые пользователь использовал ранее diff --git a/SSL/src/CommonForms/СертификатЭЦП/Help/ru.html b/SSL/src/CommonForms/СертификатЭЦП/Help/ru.html index 51a8c3618..bc42a5d59 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/СозданиеНачальногоОбразаСФайлами/Help/ru.html b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Help/ru.html index 06f0ca292..799b97a9a 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 1031e92fa..ffa501450 100644 --- a/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl +++ b/SSL/src/CommonForms/СозданиеНачальногоОбразаСФайлами/Module.bsl @@ -40,13 +40,8 @@ ЕстьФайлыВТомах = Ложь; - Если ФайловыеФункции.ЕстьТомаХраненияФайлов() Тогда - - КоличествоФайлов = ФайловыеФункции.ПолучитьКоличествоФайловВТомах(); - Если КоличествоФайлов <> 0 Тогда - ЕстьФайлыВТомах = Истина; - КонецЕсли; - + Если ФайловыеФункцииСлужебный.ЕстьТомаХраненияФайлов() Тогда + ЕстьФайлыВТомах = ФайловыеФункцииСлужебныйКлиентСервер.ЕстьФайлыВТомах(); КонецЕсли; Если ЕстьФайлыВТомах Тогда @@ -62,7 +57,7 @@ Элементы.ГруппаПутьКАрхивуСФайламиТомов.Видимость = Ложь; КонецЕсли; - Если СтандартныеПодсистемыВызовСервераПереопределяемый.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда + Если СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда Элементы.ПолноеИмяФайловойБазы.Заголовок = НСтр("ru = 'Для сервера 1С:Предприятия под управлением Microsoft Windows'"); Элементы.ПутьКАрхивуСФайламиТомов.Заголовок = НСтр("ru = 'Для сервера 1С:Предприятия под управлением Microsoft Windows'"); diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form b/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form new file mode 100644 index 000000000..2ac4b678f --- /dev/null +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Form.form @@ -0,0 +1,475 @@ + + + + ГруппаСтраницы + 5 + + СтраницаДоВыгрузки + 6 + + ДекорацияСообщениеДоВыгрузки + 1 + + <key>ru</key> + <value>Процесс выгрузки данных может занять продолжительное время. + +Выгрузка не сможет начаться, пока другие пользователи работают с информационной базой. +</value> + + true + true + + true + + + ДекорацияСообщениеДоВыгрузкиРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + ДекорацияСообщениеДоВыгрузкиКонтекстноеМеню + 2 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>До выгрузки</value> + + + СтраницаДоВыгрузкиРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + Page + + Vertical + + + + СтраницаПослеВыгрузкиУспех + 8 + + ДекорацияСообщениеПослеВыгрузкиУспех + 9 + + <key>ru</key> + <value>Процесс выгрузки успешно завершен.</value> + + true + true + + true + + + ДекорацияСообщениеПослеВыгрузкиУспехРасширеннаяПодсказка + 34 + Label + true + true + + Left + + + + ДекорацияСообщениеПослеВыгрузкиУспехКонтекстноеМеню + 10 + true + + Label + true + true + true + + Left + + + + ГруппаФайл + 13 + + ДекорацияФайл + 14 + + <key>ru</key> + <value>Файл выгрузки помещен в хранилище менеджера сервиса.</value> + + true + true + + true + + + ДекорацияФайлРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + ДекорацияФайлКонтекстноеМеню + 15 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа файл</value> + + + ГруппаФайлРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>После выгрузки Успех</value> + + + СтраницаПослеВыгрузкиУспехРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Page + + Vertical + + + + СтраницаПослеВыгрузкиОшибка + 22 + + СообщениеОбОшибке + 25 + + <key>ru</key> + <value>Процесс выгрузки закончился с ошибкой</value> + + true + true + + true + + + СообщениеОбОшибке + + Top + + СообщениеОбОшибкеРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + СообщениеОбОшибкеКонтекстноеМеню + 26 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>После выгрузки Ошибка</value> + + + СтраницаПослеВыгрузкиОшибкаРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + Page + + Vertical + + + true + true + + true + + + <key>ru</key> + <value>Группа страницы</value> + + true + true + + ГруппаСтраницыРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + Pages + + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаСоздатьКопиюОбласти + 4 + true + true + + true + + + ФормаСоздатьКопиюОбластиРасширеннаяПодсказка + 27 + Label + true + true + + Left + + + Form.Command.СоздатьКопиюОбласти + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗакрыть + 3 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 28 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + + ФормаСправка + 12 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 1 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 2 + + UUID + + + true + + + true + + + + СообщениеОбОшибке + + <key>ru</key> + <value>Сообщение об ошибке</value> + + 5 + + String + + + + true + + + true + + + + СоздатьКопиюОбласти + + <key>ru</key> + <value>Создать копию области</value> + + 1 + + true + + + + СоздатьКопиюОбласти + + + Auto + Auto + + + + + + diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl new file mode 100644 index 000000000..9df720121 --- /dev/null +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/Module.bsl @@ -0,0 +1,150 @@ +&НаКлиенте +Перем ПараметрыОбработчикаОжидания; + +&НаКлиенте +Перем ФормаДлительнойОперации; + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Не ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + ВызватьИсключение(НСтр("ru = 'Не установлено значение разделителя'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ПереключитьСтраницу(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СоздатьКопиюОбласти(Команда) + + Попытка + Результат = СоздатьКопиюОбластиНаСервере(); + Исключение + ПереключитьСтраницу("СтраницаПослеВыгрузкиОшибка"); + КонецПопытки; + + Если Результат.ЗаданиеВыполнено Тогда + ОбработатьРезультатВыполненияЗадания(); + Иначе + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + ФормаДлительнойОперации = ДлительныеОперацииКлиент.ОткрытьФормуДлительнойОперации(ЭтаФорма, ИдентификаторЗадания); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + + Попытка + Если ФормаДлительнойОперации.Открыта() + И ФормаДлительнойОперации.ИдентификаторЗадания = ИдентификаторЗадания Тогда + + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); + ОбработатьРезультатВыполненияЗадания(); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + КонецЕсли; + Исключение + ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); + ПереключитьСтраницу("СтраницаПослеВыгрузкиОшибка"); + ЗаписатьИсключениеНаСервере(ПредставлениеОшибки); + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьРезультатВыполненияЗадания() + + Если Не ПустаяСтрока(АдресХранилища) Тогда + УдалитьИзВременногоХранилища(АдресХранилища); + АдресХранилища = ""; + // Перейти на страницу результата + ПереключитьСтраницу("СтраницаПослеВыгрузкиУспех"); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПереключитьСтраницу(Знач ИмяСтраницы = "СтраницаДоВыгрузки") + + Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы[ИмяСтраницы]; + + Если ИмяСтраницы = "СтраницаДоВыгрузки" Тогда + Элементы.ФормаСоздатьКопиюОбласти.Доступность = Истина; + Иначе + Элементы.ФормаСоздатьКопиюОбласти.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ЗаписатьИсключениеНаСервере(Знач ПредставлениеОшибки) + + Событие = РезервноеКопированиеОбластейДанныхПовтИсп.НаименованиеФоновогоРезервногоКопирования(); + ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка, , , ПредставлениеОшибки); + СообщениеОбОшибке = ПредставлениеОшибки; + +КонецПроцедуры + +&НаСервере +Функция СоздатьКопиюОбластиНаСервере() + + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + + ПараметрыЗадания = РезервноеКопированиеОбластейДанных.СоздатьПустыеПараметрыВыгрузки(); + ПараметрыЗадания.ОбластьДанных = ОбластьДанных; + ПараметрыЗадания.ИДКопии = Новый УникальныйИдентификатор; + ПараметрыЗадания.Принудительно = Истина; + ПараметрыЗадания.ПоТребованию = Истина; + + Попытка + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + РезервноеКопированиеОбластейДанныхПовтИсп.ИмяМетодаФоновогоРезервногоКопирования(), + ПараметрыЗадания, + РезервноеКопированиеОбластейДанныхПовтИсп.НаименованиеФоновогоРезервногоКопирования()); + + Исключение + ПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписатьИсключениеНаСервере(ПредставлениеОшибки); + КонецПопытки; + + АдресХранилища = Результат.АдресХранилища; + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + Возврат Результат; + +КонецФункции + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции diff --git a/SSL/src/CommonForms/СозданиеРезервнойКопии/СозданиеРезервнойКопии.mdo b/SSL/src/CommonForms/СозданиеРезервнойКопии/СозданиеРезервнойКопии.mdo new file mode 100644 index 000000000..0c5613b91 --- /dev/null +++ b/SSL/src/CommonForms/СозданиеРезервнойКопии/СозданиеРезервнойКопии.mdo @@ -0,0 +1,10 @@ + + + СозданиеРезервнойКопии + + ru + Создание резервной копии + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form new file mode 100644 index 000000000..84ec8a443 --- /dev/null +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Form.form @@ -0,0 +1,856 @@ + + + + ВыборМестаСохраненияФайла + 50 + + ВариантСохранения + 67 + true + true + + true + + + ВариантСохранения + + None + + OnChange + ВариантСохраненияПриИзменении + + + ВариантСохраненияРасширеннаяПодсказка + 83 + Label + true + true + + Left + + + + ВариантСохраненияКонтекстноеМеню + 68 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Сохранить в папку на компьютер + + + СохранитьВПапку + + + + + ru + Присоединить к документу + + + Присоединить + + + Vertical + + + + ГруппаМестаСохранения + 69 + + СтраницаСохранениеВПапку + 70 + + ПапкаДляСохраненияФайлов + 42 + true + true + + true + + + ВыбраннаяПапка + + None + + ПапкаДляСохраненияФайловРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + ПапкаДляСохраненияФайловКонтекстноеМеню + 43 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ПапкаДляСохраненияФайловНачалоВыбора + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница сохранение в папку</value> + + + ru + Страница сохранение в папку + + + СтраницаСохранениеВПапкуРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + СтраницаПрисоединениеКОбъекту + 71 + + ВыбранныйОбъект + 48 + true + true + + true + + + ВыбранныйОбъект + + None + + ВыбранныйОбъектРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ВыбранныйОбъектКонтекстноеМеню + 49 + true + + InputField + Enter + true + Left + true + + + Clearing + ВыбранныйОбъектОчистка + + true + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Страница присоединение к объекту</value> + + + ru + Страница присоединение к объекту + + + СтраницаПрисоединениеКОбъектуРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа места сохранения</value> + + + ru + Группа места сохранения + + + ГруппаМестаСохраненияРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Выбор места сохранения файла</value> + + + ru + Выбор места сохранения файла + + + ВыборМестаСохраненияФайлаРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ГруппаВыборФорматов + 77 + + ВыбранныеФорматыСохранения + 72 + true + true + + true + + + ВыбранныеФорматыСохранения + + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + Pickup + SelectAll + SortListAsc + SortListDesc + + ВыбранныеФорматыСохраненияПометка + 78 + true + true + + true + + + ВыбранныеФорматыСохранения.Check + + + ВыбранныеФорматыСохраненияПометкаРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияПометкаКонтекстноеМеню + 79 + true + + CheckBoxField + Auto + true + Left + true + + + + ВыбранныеФорматыСохраненияЗначение + 75 + true + true + + true + + + ВыбранныеФорматыСохранения.Value + + + ВыбранныеФорматыСохраненияЗначениеРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияЗначениеКонтекстноеМеню + 76 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ВыбранныеФорматыСохраненияКоманднаяПанель + 74 + Left + + + ВыбранныеФорматыСохраненияСтрокаПоиска + 94 + + ВыбранныеФорматыСохраненияСтрокаПоискаРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияСтрокаПоискаКонтекстноеМеню + 95 + true + + ВыбранныеФорматыСохранения + + true + + + + ВыбранныеФорматыСохраненияСостояниеПросмотра + 97 + + ВыбранныеФорматыСохраненияСостояниеПросмотраРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияСостояниеПросмотраКонтекстноеМеню + 98 + true + + ViewStatusAddition + ВыбранныеФорматыСохранения + + true + + + + ВыбранныеФорматыСохраненияУправлениеПоиском + 100 + + ВыбранныеФорматыСохраненияУправлениеПоискомРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияУправлениеПоискомКонтекстноеМеню + 101 + true + + SearchControlAddition + ВыбранныеФорматыСохранения + + true + + + + ВыбранныеФорматыСохраненияРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ВыбранныеФорматыСохраненияКонтекстноеМеню + 73 + true + + true + 10 + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + true + true + + ВыбранныеФорматыСохранения.Picture + + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>В форматах</value> + + + ru + Группа выбор форматов + + + ГруппаВыборФорматовРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ГруппаДополнительныеПараметры + 63 + + УпаковатьВАрхив + 14 + + <key>ru</key> + <value>Дополнительно упаковать в архив (.zip)</value> + + true + true + + true + + + УпаковатьВАрхив + + Right + + УпаковатьВАрхивРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + УпаковатьВАрхивКонтекстноеМеню + 15 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>В форматах</value> + + + ru + Группа дополнительные параметры + + + ГруппаДополнительныеПараметрыРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + КнопкаСохранить + 17 + + <key>ru</key> + <value>Сохранить</value> + + true + true + + true + + false + + КнопкаСохранитьРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.Command.Сохранить + Auto + true + true + true + UserCmds + Auto + + + КнопкаОтмена + 64 + true + true + + true + + + КнопкаОтменаРасширеннаяПодсказка + 81 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + + BeforeLoadDataFromSettingsAtServer + ПередЗагрузкойДанныхИзНастроекНаСервере + + Abort + Close + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 40 + DontBlock + Use + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + УпаковатьВАрхив + + <key>ru</key> + <value>Упаковать в архив (.zip)</value> + + 2 + + Boolean + + + true + + + true + + + УпаковатьВАрхив + + + + ВыбраннаяПапка + + <key>ru</key> + <value>Сохранить в папку на компьютер</value> + + 4 + + String + + 255 + + + + true + + + true + + + ВыбраннаяПапка + + + + ВариантСохранения + + <key>ru</key> + <value>Вариант сохранения</value> + + 8 + + String + + 20 + + + + true + + + true + + + ВариантСохранения + + + + ВыбранныйОбъект + + <key>ru</key> + <value>Выбранный объект</value> + + 9 + + AnyRef + + + true + + + true + + + + ВыбранныеФорматыСохранения + + <key>ru</key> + <value>Выбранные форматы сохранения</value> + + 12 + + ValueList + + + true + + + true + + + ВыбранныеФорматыСохранения + + + + + + + Сохранить + + <key>ru</key> + <value>Сохранить</value> + + 1 + + ru + Сохранить + + + true + + + + Сохранить + + + Auto + Auto + + + ОбъектыПечати + + ValueList + + + + + + + diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl new file mode 100644 index 000000000..24d47a56e --- /dev/null +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/Module.bsl @@ -0,0 +1,161 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // заполнение списка форматов + Для Каждого ФорматСохранения Из УправлениеПечатью.НастройкиФорматовСохраненияТабличногоДокумента() Цикл + ВыбранныеФорматыСохранения.Добавить(ФорматСохранения.ТипФайлаТабличногоДокумента, Строка(ФорматСохранения.Ссылка), Ложь, ФорматСохранения.Картинка); + КонецЦикла; + ВыбранныеФорматыСохранения[0].Пометка = Истина; // по умолчанию выбран только первый формат из списка + + // заполнение списка выбора для присоединения файлов к объекту + Для Каждого ОбъектПечати Из Параметры.ОбъектыПечати Цикл + Если КОбъектуМожноПрисоединятьФайлы(ОбъектПечати.Значение) Тогда + Элементы.ВыбранныйОбъект.СписокВыбора.Добавить(ОбъектПечати.Значение); + КонецЕсли; + КонецЦикла; + + // место сохранения по умолчанию + ВариантСохранения = "СохранитьВПапку"; + + // объект для присоединения по умолчанию + Если Элементы.ВыбранныйОбъект.СписокВыбора.Количество() > 0 Тогда + ВыбранныйОбъект = Элементы.ВыбранныйОбъект.СписокВыбора[0].Значение; + Иначе + Элементы.ВариантСохранения.Видимость = Ложь; + Элементы.ПапкаДляСохраненияФайлов.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Верх; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) + + ФорматыСохраненияИзНастроек = Настройки["ВыбранныеФорматыСохранения"]; + Если ФорматыСохраненияИзНастроек <> Неопределено Тогда + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + ФорматИзНастроек = ФорматыСохраненияИзНастроек.НайтиПоЗначению(ВыбранныйФормат.Значение); + Если ФорматИзНастроек <> Неопределено Тогда + ВыбранныйФормат.Пометка = ФорматИзНастроек.Пометка; + КонецЕсли; + КонецЦикла; + Настройки.Удалить("ВыбранныеФорматыСохранения"); + КонецЕсли; + + Если Элементы.ВыбранныйОбъект.СписокВыбора.Количество() = 0 Тогда + НастройкаВариантСохранения = Настройки["ВариантСохранения"]; + Если НастройкаВариантСохранения <> Неопределено Тогда + Настройки.Удалить("ВариантСохранения"); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + УстановитьСтраницуМестаСохранения(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ВариантСохраненияПриИзменении(Элемент) + УстановитьСтраницуМестаСохранения(); + ОчиститьСообщения(); +КонецПроцедуры + +&НаКлиенте +Процедура ПапкаДляСохраненияФайловНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + ДиалогВыбораПапки = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + Если Не ПустаяСтрока(ВыбраннаяПапка) Тогда + ДиалогВыбораПапки.Каталог = ВыбраннаяПапка; + КонецЕсли; + Если ДиалогВыбораПапки.Выбрать() Тогда + ВыбраннаяПапка = ДиалогВыбораПапки.Каталог; + ОчиститьСообщения(); + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныйОбъектОчистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Сохранить(Команда) + + #Если Не ВебКлиент Тогда + Если ВариантСохранения = "СохранитьВПапку" И ПустаяСтрока(ВыбраннаяПапка) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Необходимо указать папку.'"),,"ВыбраннаяПапка"); + Возврат; + КонецЕсли; + #КонецЕсли + + ФорматыСохранения = Новый Массив; + + Для Каждого ВыбранныйФормат Из ВыбранныеФорматыСохранения Цикл + Если ВыбранныйФормат.Пометка Тогда + ФорматыСохранения.Добавить(ВыбранныйФормат.Значение); + КонецЕсли; + КонецЦикла; + + Если ФорматыСохранения.Количество() = 0 Тогда + Предупреждение(НСтр("ru = 'Необходимо указать как минимум один из предложенных форматов.'")); + Возврат; + КонецЕсли; + + Результат = Новый Структура; + Результат.Вставить("УпаковатьВАрхив", УпаковатьВАрхив); + Результат.Вставить("ФорматыСохранения", ФорматыСохранения); + Результат.Вставить("ВариантСохранения", ВариантСохранения); + Результат.Вставить("ПапкаДляСохранения", ВыбраннаяПапка); + Результат.Вставить("ОбъектДляПрикрепления", ВыбранныйОбъект); + + Закрыть(Результат); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура УстановитьСтраницуМестаСохранения() + + #Если ВебКлиент Тогда + Элементы.ГруппаМестаСохранения.ТекущаяСтраница = Элементы.СтраницаПрисоединениеКОбъекту; + Элементы.ВыбранныйОбъект.Доступность = ВариантСохранения = "Присоединить"; + #Иначе + Если ВариантСохранения = "Присоединить" Тогда + Элементы.ГруппаМестаСохранения.ТекущаяСтраница = Элементы.СтраницаПрисоединениеКОбъекту; + Иначе + Элементы.ГруппаМестаСохранения.ТекущаяСтраница = Элементы.СтраницаСохранениеВПапку; + КонецЕсли; + #КонецЕсли + +КонецПроцедуры + +&НаСервере +Функция КОбъектуМожноПрисоединятьФайлы(СсылкаНаОбъект) + Результат = Неопределено; + + СтандартныеПодсистемыПереопределяемый.ПриПроверкеВозможностиПрисоединенияФайловКОбъекту(СсылкаНаОбъект, Результат); + + Если Результат = Неопределено Тогда + Результат = Ложь; + КонецЕсли; + + Возврат Результат; +КонецФункции + + diff --git a/SSL/src/CommonForms/СохранениеПечатнойФормы/СохранениеПечатнойФормы.mdo b/SSL/src/CommonForms/СохранениеПечатнойФормы/СохранениеПечатнойФормы.mdo new file mode 100644 index 000000000..d2e36d432 --- /dev/null +++ b/SSL/src/CommonForms/СохранениеПечатнойФормы/СохранениеПечатнойФормы.mdo @@ -0,0 +1,11 @@ + + + СохранениеПечатнойФормы + + ru + Сохранение печатной формы + + PersonalComputer + MobileDevice + true + diff --git a/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html b/SSL/src/CommonForms/СтруктураПодчиненности/Help/ru.html index 5ae86ed63..2ebae4d7e 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 cca610ed9..eb9bab6d9 100644 --- a/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl +++ b/SSL/src/CommonForms/СтруктураПодчиненности/Module.bsl @@ -457,32 +457,32 @@ СтрокиДерева = ДеревоРодитель.ПолучитьЭлементы(); МетаданныеДокумента = ТекущийДокумент.Метаданные(); СписокРеквизитов = Новый СписокЗначений; - + Для Каждого Реквизит ИЗ МетаданныеДокумента.Реквизиты Цикл - + Если Метаданные.КритерииОтбора.СвязанныеДокументы.Состав.Содержит(Реквизит) Тогда - - Для Каждого ТекущийТип Из Реквизит.Тип.Типы() Цикл - - МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); - - Если МетаданныеРеквизита <> Неопределено - И Метаданные.Документы.Содержит(МетаданныеРеквизита) - И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда - - ЗначениеРеквизита = ТекущийДокумент[Реквизит.Имя]; - - Если ЗначениеЗаполнено(ЗначениеРеквизита) - И ТипЗнч(ЗначениеРеквизита) = ТекущийТип - И ЗначениеРеквизита <> ТекущийДокумент - И СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено Тогда - - СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс")); - + + Для Каждого ТекущийТип Из Реквизит.Тип.Типы() Цикл + + МетаданныеРеквизита = Метаданные.НайтиПоТипу(ТекущийТип); + + Если МетаданныеРеквизита <> Неопределено + И Метаданные.Документы.Содержит(МетаданныеРеквизита) + И ПравоДоступа("Чтение", МетаданныеРеквизита) Тогда + + ЗначениеРеквизита = ТекущийДокумент[Реквизит.Имя]; + + Если ЗначениеЗаполнено(ЗначениеРеквизита) + И ТипЗнч(ЗначениеРеквизита) = ТекущийТип + И ЗначениеРеквизита <> ТекущийДокумент + И СписокРеквизитов.НайтиПоЗначению(ЗначениеРеквизита) = Неопределено Тогда + + СписокРеквизитов.Добавить(ЗначениеРеквизита,Формат(ЗначениеРеквизита.Дата,"ДФ=yyyyMMddЧЧММсс")); + + КонецЕсли; КонецЕсли; - КонецЕсли; - КонецЦикла; - + КонецЦикла; + КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonForms/УстановкаПодписиЭЦП/Help/ru.html b/SSL/src/CommonForms/УстановкаПодписиЭЦП/Help/ru.html index 07ad276b9..7ca718867 100644 --- a/SSL/src/CommonForms/УстановкаПодписиЭЦП/Help/ru.html +++ b/SSL/src/CommonForms/УстановкаПодписиЭЦП/Help/ru.html @@ -1,4 +1,4 @@ - +

                Установка ЭЦП

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

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

                diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form new file mode 100644 index 000000000..4ec545569 --- /dev/null +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Form.form @@ -0,0 +1,3967 @@ + + + + КомпоновщикНастроекНастройки + 1 + + <key>ru</key> + <value>Таблица настроек</value> + + true + true + + true + + + Отчет.SettingsComposer.Settings + + None + + КомпоновщикНастроекНастройкиКоманднаяПанель + 3 + Left + true + + + OnActivateRow + КомпоновщикНастроекНастройкиПриАктивизацииСтроки + + + OnActivateField + КомпоновщикНастроекНастройкиПриАктивизацииПоля + + + КомпоновщикНастроекНастройкиСтрокаПоиска + 131 + + КомпоновщикНастроекНастройкиСтрокаПоискаРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиСтрокаПоискаКонтекстноеМеню + 132 + true + + КомпоновщикНастроекНастройки + + true + + + + КомпоновщикНастроекНастройкиСостояниеПросмотра + 134 + + КомпоновщикНастроекНастройкиСостояниеПросмотраРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиСостояниеПросмотраКонтекстноеМеню + 135 + true + + ViewStatusAddition + КомпоновщикНастроекНастройки + + true + + + + КомпоновщикНастроекНастройкиУправлениеПоиском + 137 + + КомпоновщикНастроекНастройкиУправлениеПоискомРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиУправлениеПоискомКонтекстноеМеню + 138 + true + + SearchControlAddition + КомпоновщикНастроекНастройки + + true + + + + КомпоновщикНастроекНастройкиРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиКонтекстноеМеню + 2 + true + + Tree + true + true + true + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true +
                + + СтраницыНастроек + 4 + + СтраницаПараметровДанных + 5 + + КомпоновщикНастроекНастройкиПараметрыДанных + 6 + + <key>ru</key> + <value>Настройки параметов</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemDataParameters + + None + + КомпоновщикНастроекНастройкиПараметрыДанныхКоманднаяПанель + 8 + Left + true + + + КомпоновщикНастроекНастройкиПараметрыДанныхСтрокаПоиска + 151 + + КомпоновщикНастроекНастройкиПараметрыДанныхСтрокаПоискаРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПараметрыДанныхСтрокаПоискаКонтекстноеМеню + 152 + true + + КомпоновщикНастроекНастройкиПараметрыДанных + + true + + + + КомпоновщикНастроекНастройкиПараметрыДанныхСостояниеПросмотра + 154 + + КомпоновщикНастроекНастройкиПараметрыДанныхСостояниеПросмотраРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПараметрыДанныхСостояниеПросмотраКонтекстноеМеню + 155 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиПараметрыДанных + + true + + + + КомпоновщикНастроекНастройкиПараметрыДанныхУправлениеПоиском + 157 + + КомпоновщикНастроекНастройкиПараметрыДанныхУправлениеПоискомРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПараметрыДанныхУправлениеПоискомКонтекстноеМеню + 158 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиПараметрыДанных + + true + + + + КомпоновщикНастроекНастройкиПараметрыДанныхРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПараметрыДанныхКонтекстноеМеню + 7 + true + + Tree + true + true + true + 50 + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandAllLevels + true + true + None + None + None + true +
                + true + true + + true + + + <key>ru</key> + <value>Параметры</value> + + + СтраницаПараметровДанныхРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionDataParameters + + Vertical + auto + +
                + + СтраницаПользовательскихПолей + 9 + + КомпоновщикНастроекНастройкиПользовательскиеПоля + 10 + + <key>ru</key> + <value>Настройки пользовательских полей</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemUserFields + + None + + КомпоновщикНастроекНастройкиПользовательскиеПоляКоманднаяПанель + 12 + Left + true + + + КомпоновщикНастроекНастройкиПользовательскиеПоляСтрокаПоиска + 170 + + КомпоновщикНастроекНастройкиПользовательскиеПоляСтрокаПоискаРасширеннаяПодсказка + 172 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПользовательскиеПоляСтрокаПоискаКонтекстноеМеню + 171 + true + + КомпоновщикНастроекНастройкиПользовательскиеПоля + + true + + + + КомпоновщикНастроекНастройкиПользовательскиеПоляСостояниеПросмотра + 173 + + КомпоновщикНастроекНастройкиПользовательскиеПоляСостояниеПросмотраРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПользовательскиеПоляСостояниеПросмотраКонтекстноеМеню + 174 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиПользовательскиеПоля + + true + + + + КомпоновщикНастроекНастройкиПользовательскиеПоляУправлениеПоиском + 176 + + КомпоновщикНастроекНастройкиПользовательскиеПоляУправлениеПоискомРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПользовательскиеПоляУправлениеПоискомКонтекстноеМеню + 177 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиПользовательскиеПоля + + true + + + + КомпоновщикНастроекНастройкиПользовательскиеПоляРасширеннаяПодсказка + 169 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПользовательскиеПоляКонтекстноеМеню + 11 + true + + true + true + true + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + true + true + None + None + None + true +
                + true + true + + true + + + <key>ru</key> + <value>Пользовательские поля</value> + + + СтраницаПользовательскихПолейРасширеннаяПодсказка + 168 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionUserFields + + auto + +
                + + СтраницаПолейГруппировки + 13 + + СтраницыПолейГруппировки + 14 + + НастройкиПолейГруппировки + 15 + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировок + 16 + + <key>ru</key> + <value>Доступные поля группируемых полей</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemGroupFields.GroupFieldsAvailableFields + + None + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокКоманднаяПанель + 18 + Left + true + + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСтрокаПоиска + 191 + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСтрокаПоискаРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСтрокаПоискаКонтекстноеМеню + 192 + true + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировок + + true + + + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСостояниеПросмотра + 194 + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСостояниеПросмотраРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокСостояниеПросмотраКонтекстноеМеню + 195 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировок + + true + + + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокУправлениеПоиском + 197 + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокУправлениеПоискомРасширеннаяПодсказка + 199 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокУправлениеПоискомКонтекстноеМеню + 198 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировок + + true + + + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокРасширеннаяПодсказка + 190 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПоляГруппировкиДоступныеПоляПолейГруппировокКонтекстноеМеню + 17 + true + + Tree + true + true + true + 60 + true + true + 15 + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + true + true + true + true + None + None + None + true +
                + + КомпоновщикНастроекНастройкиПоляГруппировки + 19 + + <key>ru</key> + <value>Таблица группируемых полей</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemGroupFields + + None + + КомпоновщикНастроекНастройкиПоляГруппировкиКоманднаяПанель + 21 + Left + true + + + КомпоновщикНастроекНастройкиПоляГруппировкиСтрокаПоиска + 209 + + КомпоновщикНастроекНастройкиПоляГруппировкиСтрокаПоискаРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПоляГруппировкиСтрокаПоискаКонтекстноеМеню + 210 + true + + КомпоновщикНастроекНастройкиПоляГруппировки + + true + + + + КомпоновщикНастроекНастройкиПоляГруппировкиСостояниеПросмотра + 212 + + КомпоновщикНастроекНастройкиПоляГруппировкиСостояниеПросмотраРасширеннаяПодсказка + 214 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПоляГруппировкиСостояниеПросмотраКонтекстноеМеню + 213 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиПоляГруппировки + + true + + + + КомпоновщикНастроекНастройкиПоляГруппировкиУправлениеПоиском + 215 + + КомпоновщикНастроекНастройкиПоляГруппировкиУправлениеПоискомРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПоляГруппировкиУправлениеПоискомКонтекстноеМеню + 216 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиПоляГруппировки + + true + + + + КомпоновщикНастроекНастройкиПоляГруппировкиРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПоляГруппировкиКонтекстноеМеню + 20 + true + + true + true + true + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + true + true + None + None + None + true +
                + true + true + + true + + + <key>ru</key> + <value>Страница группируемых полей</value> + + + НастройкиПолейГруппировкиРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + Page + + LeftNarrowest + auto + +
                + + НедоступныеНастройкиПолейГруппировки + 22 + + НадписьНедоступныхПолейГруппировки + 23 + + <key>ru</key> + <value>Текущий элемент не может содержать поля группировки. +Выберите в дереве структуры группировку, для которой требуется просмотреть или изменить состав полей группировки.</value> + + true + true + + true + + + НадписьНедоступныхПолейГруппировкиРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + + НадписьНедоступныхПолейГруппировкиКонтекстноеМеню + 24 + true + + Label + true + 2 + true + true + false + + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница недоступных группируемых полей</value> + + + НедоступныеНастройкиПолейГруппировкиРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы группируемых полей</value> + + + СтраницыПолейГруппировкиРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + Pages + + Auto + +
                + true + true + + true + + + <key>ru</key> + <value>Группируемые поля</value> + + + СтраницаПолейГруппировкиРасширеннаяПодсказка + 187 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionGroupFields + + Vertical + auto + +
                + + СтраницаПолейВыбора + 25 + + ЛокальныеВыбранныеПоля + 26 + + <key>ru</key> + <value>Текущий элемент имеет собственные настройки выбранных полей (для детальной настройки элемента)</value> + + true + true + + true + + + ЛокальныеВыбранныеПоля + + Right + + OnChange + ЛокальныеВыбранныеПоляПриИзменении + + + ЛокальныеВыбранныеПоляРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + + ЛокальныеВыбранныеПоляКонтекстноеМеню + 27 + true + + CheckBoxField + Enter + true + Left + true + + + + СтраницыПолейВыбора + 28 + + НастройкиВыбранныхПолей + 29 + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбора + 30 + + <key>ru</key> + <value>Доступные поля полей</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemSelection.SelectionAvailableFields + + None + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораКоманднаяПанель + 32 + Left + true + + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСтрокаПоиска + 234 + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСтрокаПоискаРасширеннаяПодсказка + 236 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСтрокаПоискаКонтекстноеМеню + 235 + true + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбора + + true + + + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСостояниеПросмотра + 237 + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСостояниеПросмотраРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораСостояниеПросмотраКонтекстноеМеню + 238 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбора + + true + + + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораУправлениеПоиском + 240 + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораУправлениеПоискомРасширеннаяПодсказка + 242 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораУправлениеПоискомКонтекстноеМеню + 241 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбора + + true + + + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиВыборДоступныеПоляВыбораКонтекстноеМеню + 31 + true + + Tree + true + true + true + 60 + true + true + 15 + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + true + true + true + true + None + None + None + true +
                + + КомпоновщикНастроекНастройкиВыбор + 33 + + <key>ru</key> + <value>Таблица полей</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemSelection + + None + + КомпоновщикНастроекНастройкиВыборКоманднаяПанель + 35 + Left + true + + + КомпоновщикНастроекНастройкиВыборСтрокаПоиска + 252 + + КомпоновщикНастроекНастройкиВыборСтрокаПоискаРасширеннаяПодсказка + 254 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиВыборСтрокаПоискаКонтекстноеМеню + 253 + true + + КомпоновщикНастроекНастройкиВыбор + + true + + + + КомпоновщикНастроекНастройкиВыборСостояниеПросмотра + 255 + + КомпоновщикНастроекНастройкиВыборСостояниеПросмотраРасширеннаяПодсказка + 257 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиВыборСостояниеПросмотраКонтекстноеМеню + 256 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиВыбор + + true + + + + КомпоновщикНастроекНастройкиВыборУправлениеПоиском + 258 + + КомпоновщикНастроекНастройкиВыборУправлениеПоискомРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиВыборУправлениеПоискомКонтекстноеМеню + 259 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиВыбор + + true + + + + КомпоновщикНастроекНастройкиВыборРасширеннаяПодсказка + 251 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиВыборКонтекстноеМеню + 34 + true + + Tree + true + true + true + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true +
                + true + true + + true + + + <key>ru</key> + <value>Страница полей</value> + + + НастройкиВыбранныхПолейРасширеннаяПодсказка + 232 + Label + true + true + + Left + + + Page + + LeftNarrowest + auto + +
                + + ОтключенныеНастройкиВыбранныхПолей + 36 + + НадписьЛокальныхВыбранныхПолей + 37 + + <key>ru</key> + <value>Выбранные поля для текущего элемента будут автоматически формироваться на основании выбранных полей всего отчета. +Выберите в дереве структуры элемент - отчет для редактирования его выбранных полей. +Если необходимо, чтобы текущий элемент имел выбранные поля, отличные от выбранных полей отчета, установите флажок, расположенный над этим текстом.</value> + + true + true + + true + + + НадписьЛокальныхВыбранныхПолейРасширеннаяПодсказка + 270 + Label + true + true + + Left + + + + НадписьЛокальныхВыбранныхПолейКонтекстноеМеню + 38 + true + + Label + true + 3 + true + true + false + + Left + + + + ПереходКВыбраннымПолямОтчета + 39 + + <key>ru</key> + <value>Нажмите здесь для перехода к выбранным полям отчета.</value> + + true + true + + true + + + ПереходКВыбраннымПолямОтчетаРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + ПереходКВыбраннымПолямОтчетаКонтекстноеМеню + 40 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница отключенных полей</value> + + + ОтключенныеНастройкиВыбранныхПолейРасширеннаяПодсказка + 269 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НедоступныеНастройкиВыбранныхПолей + 41 + + НадписьНедоступныхВыбранныхПолей + 42 + + <key>ru</key> + <value>У текущего элемента не могут быть установлены выбранные поля. +Выберите в дереве структуры элемент - отчет для редактирования его выбранных полей.</value> + + true + true + + true + + + НадписьНедоступныхВыбранныхПолейРасширеннаяПодсказка + 273 + Label + true + true + + Left + + + + НадписьНедоступныхВыбранныхПолейКонтекстноеМеню + 43 + true + + Label + true + 2 + true + true + false + + Left + + + + ПереходКВыбраннымПолямОтчета1 + 44 + + <key>ru</key> + <value>Нажмите здесь для перехода к выбранным полям отчета.</value> + + true + true + + true + + + ПереходКВыбраннымПолямОтчета1РасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + ПереходКВыбраннымПолямОтчета1КонтекстноеМеню + 45 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница недоступных полей</value> + + + НедоступныеНастройкиВыбранныхПолейРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы полей</value> + + + СтраницыПолейВыбораРасширеннаяПодсказка + 231 + Label + true + true + + Left + + + Pages + + Auto + +
                + true + true + + true + + + <key>ru</key> + <value>Поля</value> + + + СтраницаПолейВыбораРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionSelection + + Vertical + auto + +
                + + СтраницаОтбора + 46 + + ЛокальныйОтбор + 47 + + <key>ru</key> + <value>Текущий элемент имеет собственный отбор (для фильтрации записей, выводимых в элементе)</value> + + true + true + + true + + + ЛокальныйОтбор + + Right + + OnChange + ЛокальныйОтборПриИзменении + + + ЛокальныйОтборРасширеннаяПодсказка + 276 + Label + true + true + + Left + + + + ЛокальныйОтборКонтекстноеМеню + 48 + true + + CheckBoxField + Enter + true + Left + true + + + + СтраницыОтбора + 49 + + НастройкиОтбора + 50 + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбора + 51 + + <key>ru</key> + <value>Доступные поля отбора</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemFilter.FilterAvailableFields + + None + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораКоманднаяПанель + 53 + Left + true + + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСтрокаПоиска + 281 + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСтрокаПоискаРасширеннаяПодсказка + 283 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСтрокаПоискаКонтекстноеМеню + 282 + true + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбора + + true + + + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСостояниеПросмотра + 284 + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСостояниеПросмотраРасширеннаяПодсказка + 286 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораСостояниеПросмотраКонтекстноеМеню + 285 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбора + + true + + + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораУправлениеПоиском + 287 + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораУправлениеПоискомРасширеннаяПодсказка + 289 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораУправлениеПоискомКонтекстноеМеню + 288 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбора + + true + + + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиОтборДоступныеПоляОтбораКонтекстноеМеню + 52 + true + + Tree + true + true + true + 60 + true + true + 15 + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + true + true + true + true + None + None + None + true +
                + + КомпоновщикНастроекНастройкиОтбор + 54 + + <key>ru</key> + <value>Таблица отбора</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemFilter + + None + + КомпоновщикНастроекНастройкиОтборКоманднаяПанель + 56 + Left + true + + + КомпоновщикНастроекНастройкиОтборСтрокаПоиска + 299 + + КомпоновщикНастроекНастройкиОтборСтрокаПоискаРасширеннаяПодсказка + 301 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиОтборСтрокаПоискаКонтекстноеМеню + 300 + true + + КомпоновщикНастроекНастройкиОтбор + + true + + + + КомпоновщикНастроекНастройкиОтборСостояниеПросмотра + 302 + + КомпоновщикНастроекНастройкиОтборСостояниеПросмотраРасширеннаяПодсказка + 304 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиОтборСостояниеПросмотраКонтекстноеМеню + 303 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиОтбор + + true + + + + КомпоновщикНастроекНастройкиОтборУправлениеПоиском + 305 + + КомпоновщикНастроекНастройкиОтборУправлениеПоискомРасширеннаяПодсказка + 307 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиОтборУправлениеПоискомКонтекстноеМеню + 306 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиОтбор + + true + + + + КомпоновщикНастроекНастройкиОтборРасширеннаяПодсказка + 298 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиОтборКонтекстноеМеню + 55 + true + + Tree + true + true + true + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true + All + false +
                + true + true + + true + + + <key>ru</key> + <value>Страница полей</value> + + + НастройкиОтбораРасширеннаяПодсказка + 279 + Label + true + true + + Left + + + Page + + LeftNarrowest + auto + +
                + + ОтключенныеНастройкиОтбора + 57 + + НадписьЛокальногоОтбора + 58 + + <key>ru</key> + <value>В текущем элементе отбор не установлен. +Выберите в дереве структуры отчет для редактирования отбора отчета в целом. +Если необходимо, чтобы текущий элемент имел собственный отбор, установите флажок, расположенный над этим текстом.</value> + + true + true + + true + + + НадписьЛокальногоОтбораРасширеннаяПодсказка + 317 + Label + true + true + + Left + + + + НадписьЛокальногоОтбораКонтекстноеМеню + 59 + true + + Label + true + 3 + true + true + false + + Left + + + + ПереходКОтборуОтчета + 60 + + <key>ru</key> + <value>Нажмите здесь для перехода к отбору отчета.</value> + + true + true + + true + + + ПереходКОтборуОтчетаРасширеннаяПодсказка + 318 + Label + true + true + + Left + + + + ПереходКОтборуОтчетаКонтекстноеМеню + 61 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница отключенного отбора</value> + + + ОтключенныеНастройкиОтбораРасширеннаяПодсказка + 316 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НедоступныеНастройкиОтбора + 62 + + НадписьНедоступногоОтбора + 63 + + <key>ru</key> + <value>У текущего элемента не может быть установлен отбор. +Выберите в дереве структуры отчет для редактирования отбора отчета в целом.</value> + + true + true + + true + + + НадписьНедоступногоОтбораРасширеннаяПодсказка + 320 + Label + true + true + + Left + + + + НадписьНедоступногоОтбораКонтекстноеМеню + 64 + true + + Label + true + 2 + true + true + false + + Left + + + + ПереходКОтборуОтчета1 + 65 + + <key>ru</key> + <value>Нажмите здесь для перехода к отбору отчета.</value> + + true + true + + true + + + ПереходКОтборуОтчета1РасширеннаяПодсказка + 321 + Label + true + true + + Left + + + + ПереходКОтборуОтчета1КонтекстноеМеню + 66 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница недоступного отбора</value> + + + НедоступныеНастройкиОтбораРасширеннаяПодсказка + 319 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы отбора</value> + + + СтраницыОтбораРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + Pages + + Auto + +
                + true + true + + true + + + <key>ru</key> + <value>Отбор</value> + + + СтраницаОтбораРасширеннаяПодсказка + 275 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionFilter + + Vertical + auto + +
                + + СтраницаПорядка + 67 + + ЛокальныйПорядок + 68 + + <key>ru</key> + <value>Текущий элемент имеет собственную сортировку (для упорядочивания записей, выводимых в элементе)</value> + + true + true + + true + + + ЛокальныйПорядок + + Right + + OnChange + ЛокальныйПорядокПриИзменении + + + ЛокальныйПорядокРасширеннаяПодсказка + 323 + Label + true + true + + Left + + + + ЛокальныйПорядокКонтекстноеМеню + 69 + true + + CheckBoxField + Enter + true + Left + true + + + + СтраницыПорядка + 70 + + НастройкиПорядка + 71 + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядка + 72 + + <key>ru</key> + <value>Доступные поля сортировки</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemOrder.OrderAvailableFields + + None + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаКоманднаяПанель + 74 + Left + true + + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСтрокаПоиска + 328 + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСтрокаПоискаРасширеннаяПодсказка + 330 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСтрокаПоискаКонтекстноеМеню + 329 + true + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядка + + true + + + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСостояниеПросмотра + 331 + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСостояниеПросмотраРасширеннаяПодсказка + 333 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаСостояниеПросмотраКонтекстноеМеню + 332 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядка + + true + + + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаУправлениеПоиском + 334 + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаУправлениеПоискомРасширеннаяПодсказка + 336 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаУправлениеПоискомКонтекстноеМеню + 335 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядка + + true + + + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаРасширеннаяПодсказка + 327 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПорядокДоступныеПоляПорядкаКонтекстноеМеню + 73 + true + + Tree + true + true + true + 60 + true + true + 15 + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + Auto + Auto + true + true + true + true + None + None + None + true +
                + + КомпоновщикНастроекНастройкиПорядок + 75 + + <key>ru</key> + <value>Таблица сортировки</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemOrder + + None + + КомпоновщикНастроекНастройкиПорядокКоманднаяПанель + 77 + Left + true + + + КомпоновщикНастроекНастройкиПорядокСтрокаПоиска + 346 + + КомпоновщикНастроекНастройкиПорядокСтрокаПоискаРасширеннаяПодсказка + 348 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПорядокСтрокаПоискаКонтекстноеМеню + 347 + true + + КомпоновщикНастроекНастройкиПорядок + + true + + + + КомпоновщикНастроекНастройкиПорядокСостояниеПросмотра + 349 + + КомпоновщикНастроекНастройкиПорядокСостояниеПросмотраРасширеннаяПодсказка + 351 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПорядокСостояниеПросмотраКонтекстноеМеню + 350 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиПорядок + + true + + + + КомпоновщикНастроекНастройкиПорядокУправлениеПоиском + 352 + + КомпоновщикНастроекНастройкиПорядокУправлениеПоискомРасширеннаяПодсказка + 354 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПорядокУправлениеПоискомКонтекстноеМеню + 353 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиПорядок + + true + + + + КомпоновщикНастроекНастройкиПорядокРасширеннаяПодсказка + 345 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПорядокКонтекстноеМеню + 76 + true + + true + true + true + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + true + true + None + None + None + true +
                + true + true + + true + + + <key>ru</key> + <value>Страница сортировки</value> + + + НастройкиПорядкаРасширеннаяПодсказка + 326 + Label + true + true + + Left + + + Page + + LeftNarrowest + auto + +
                + + ОтключенныеНастройкиПорядка + 78 + + НадписьЛокальногоПорядка + 79 + + <key>ru</key> + <value>В текущем элементе сортировка не установлена. +Выберите в дереве структуры отчет для редактирования сортировки отчета в целом. +Если необходимо, чтобы текущий элемент имел собственную сортировку, установите флажок, расположенный над этим текстом.</value> + + true + true + + true + + + НадписьЛокальногоПорядкаРасширеннаяПодсказка + 364 + Label + true + true + + Left + + + + НадписьЛокальногоПорядкаКонтекстноеМеню + 80 + true + + Label + true + 3 + true + true + false + + Left + + + + ПереходКПорядкуОтчета + 81 + + <key>ru</key> + <value>Нажмите здесь для перехода к сортировке отчета.</value> + + true + true + + true + + + ПереходКПорядкуОтчетаРасширеннаяПодсказка + 365 + Label + true + true + + Left + + + + ПереходКПорядкуОтчетаКонтекстноеМеню + 82 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница отключенной сортировки</value> + + + ОтключенныеНастройкиПорядкаРасширеннаяПодсказка + 363 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НедоступныеНастройкиПорядка + 83 + + НадписьНедоступногоПорядка + 84 + + <key>ru</key> + <value>У текущего элемента не может быть установлена сортировка. +Выберите в дереве структуры отчет для редактирования сортировки отчета в целом.</value> + + true + true + + true + + + НадписьНедоступногоПорядкаРасширеннаяПодсказка + 367 + Label + true + true + + Left + + + + НадписьНедоступногоПорядкаКонтекстноеМеню + 85 + true + + Label + true + 2 + true + true + false + + Left + + + + ПереходКПорядкуОтчета1 + 86 + + <key>ru</key> + <value>Нажмите здесь для перехода к сортировке отчета.</value> + + true + true + + true + + + ПереходКПорядкуОтчета1РасширеннаяПодсказка + 368 + Label + true + true + + Left + + + + ПереходКПорядкуОтчета1КонтекстноеМеню + 87 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница недоступной сортировки</value> + + + НедоступныеНастройкиПорядкаРасширеннаяПодсказка + 366 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы сортировки</value> + + + СтраницыПорядкаРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + Pages + + Auto + +
                + true + true + + true + + + <key>ru</key> + <value>Сортировка</value> + + + СтраницаПорядкаРасширеннаяПодсказка + 322 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionOrder + + Vertical + auto + +
                + + СтраницаУсловногоОформления + 88 + + ЛокальноеУсловноеОформление + 89 + + <key>ru</key> + <value>Текущий элемент имеет собственное условное оформление (для оформления записей, выводимых в элементе)</value> + + true + true + + true + + + ЛокальноеУсловноеОформление + + Right + + OnChange + ЛокальноеУсловноеОформлениеПриИзменении + + + ЛокальноеУсловноеОформлениеРасширеннаяПодсказка + 370 + Label + true + true + + Left + + + + ЛокальноеУсловноеОформлениеКонтекстноеМеню + 90 + true + + CheckBoxField + Enter + true + Left + true + + + + СтраницыУсловногоОформления + 91 + + НастройкиУсловногоОформления + 92 + + КомпоновщикНастроекНастройкиУсловноеОформление + 93 + + <key>ru</key> + <value>Таблица условного оформления</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemConditionalAppearance + + None + + КомпоновщикНастроекНастройкиУсловноеОформлениеКоманднаяПанель + 95 + Left + true + + + КомпоновщикНастроекНастройкиУсловноеОформлениеСтрокаПоиска + 375 + + КомпоновщикНастроекНастройкиУсловноеОформлениеСтрокаПоискаРасширеннаяПодсказка + 377 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиУсловноеОформлениеСтрокаПоискаКонтекстноеМеню + 376 + true + + КомпоновщикНастроекНастройкиУсловноеОформление + + true + + + + КомпоновщикНастроекНастройкиУсловноеОформлениеСостояниеПросмотра + 378 + + КомпоновщикНастроекНастройкиУсловноеОформлениеСостояниеПросмотраРасширеннаяПодсказка + 380 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиУсловноеОформлениеСостояниеПросмотраКонтекстноеМеню + 379 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиУсловноеОформление + + true + + + + КомпоновщикНастроекНастройкиУсловноеОформлениеУправлениеПоиском + 381 + + КомпоновщикНастроекНастройкиУсловноеОформлениеУправлениеПоискомРасширеннаяПодсказка + 383 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиУсловноеОформлениеУправлениеПоискомКонтекстноеМеню + 382 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиУсловноеОформление + + true + + + + КомпоновщикНастроекНастройкиУсловноеОформлениеРасширеннаяПодсказка + 374 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиУсловноеОформлениеКонтекстноеМеню + 94 + true + + true + true + true + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + true + true + None + None + None + true + false +
                + true + true + + true + + + <key>ru</key> + <value>Страница условного оформления</value> + + + НастройкиУсловногоОформленияРасширеннаяПодсказка + 373 + Label + true + true + + Left + + + Page + + auto + +
                + + ОтключенныеНастройкиУсловногоОформления + 96 + + НадписьЛокальногоУсловногоОформления + 97 + + <key>ru</key> + <value>В текущем элементе условное оформление не установлено. +Выберите в дереве структуры отчет для редактирования условного оформления отчета в целом. +Если необходимо, чтобы текущий элемент имел собственное условное оформление, установите флажок, расположенный над этим текстом.</value> + + true + true + + true + + + НадписьЛокальногоУсловногоОформленияРасширеннаяПодсказка + 393 + Label + true + true + + Left + + + + НадписьЛокальногоУсловногоОформленияКонтекстноеМеню + 98 + true + + Label + true + 3 + true + true + false + + Left + + + + ПереходКУсловномуОформлениюОтчета + 99 + + <key>ru</key> + <value>Нажмите здесь для перехода к условному оформлению отчета.</value> + + true + true + + true + + + ПереходКУсловномуОформлениюОтчетаРасширеннаяПодсказка + 394 + Label + true + true + + Left + + + + ПереходКУсловномуОформлениюОтчетаКонтекстноеМеню + 100 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница отключенного условного оформления</value> + + + ОтключенныеНастройкиУсловногоОформленияРасширеннаяПодсказка + 392 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НедоступныеНастройкиУсловногоОформления + 101 + + НадписьНедоступногоУсловногоОформления + 102 + + <key>ru</key> + <value>У текущего элемента не может быть установлено условное оформление. +Выберите в дереве структуры отчет для редактирования условного оформления отчета в целом.</value> + + true + true + + true + + + НадписьНедоступногоУсловногоОформленияРасширеннаяПодсказка + 396 + Label + true + true + + Left + + + + НадписьНедоступногоУсловногоОформленияКонтекстноеМеню + 103 + true + + Label + true + 2 + true + true + false + + Left + + + + ПереходКУсловномуОформлениюОтчета1 + 104 + + <key>ru</key> + <value>Нажмите здесь для перехода к условному оформлению отчета.</value> + + true + true + + true + + + ПереходКУсловномуОформлениюОтчета1РасширеннаяПодсказка + 397 + Label + true + true + + Left + + + + ПереходКУсловномуОформлениюОтчета1КонтекстноеМеню + 105 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница недоступного условного оформления</value> + + + НедоступныеНастройкиУсловногоОформленияРасширеннаяПодсказка + 395 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы условного оформления</value> + + + СтраницыУсловногоОформленияРасширеннаяПодсказка + 372 + Label + true + true + + Left + + + Pages + + Auto + +
                + true + true + + true + + + <key>ru</key> + <value>Условное оформление</value> + + + СтраницаУсловногоОформленияРасширеннаяПодсказка + 369 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionConditionalAppearance + + Vertical + auto + +
                + + СтраницаПараметровВывода + 106 + + ЛокальныеПараметрыВывода + 107 + + <key>ru</key> + <value>Текущий элемент имеет собственные дополнительные настройки</value> + + true + true + + true + + + ЛокальныеПараметрыВывода + + Right + + OnChange + ЛокальныеПараметрыВыводаПриИзменении + + + ЛокальныеПараметрыВыводаРасширеннаяПодсказка + 399 + Label + true + true + + Left + + + + ЛокальныеПараметрыВыводаКонтекстноеМеню + 108 + true + + CheckBoxField + Enter + true + Left + true + + + + СтраницыПараметровВывода + 109 + + НастройкиПараметровВывода + 110 + + КомпоновщикНастроекНастройкиПараметрыВывода + 111 + + <key>ru</key> + <value>Таблица дополнительных настроек</value> + + true + true + + true + + + Items.КомпоновщикНастроекНастройки.CurrentData.ItemOutputParameters + + None + + КомпоновщикНастроекНастройкиПараметрыВыводаКоманднаяПанель + 113 + Left + true + + + КомпоновщикНастроекНастройкиПараметрыВыводаСтрокаПоиска + 404 + + КомпоновщикНастроекНастройкиПараметрыВыводаСтрокаПоискаРасширеннаяПодсказка + 406 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПараметрыВыводаСтрокаПоискаКонтекстноеМеню + 405 + true + + КомпоновщикНастроекНастройкиПараметрыВывода + + true + + + + КомпоновщикНастроекНастройкиПараметрыВыводаСостояниеПросмотра + 407 + + КомпоновщикНастроекНастройкиПараметрыВыводаСостояниеПросмотраРасширеннаяПодсказка + 409 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПараметрыВыводаСостояниеПросмотраКонтекстноеМеню + 408 + true + + ViewStatusAddition + КомпоновщикНастроекНастройкиПараметрыВывода + + true + + + + КомпоновщикНастроекНастройкиПараметрыВыводаУправлениеПоиском + 410 + + КомпоновщикНастроекНастройкиПараметрыВыводаУправлениеПоискомРасширеннаяПодсказка + 412 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПараметрыВыводаУправлениеПоискомКонтекстноеМеню + 411 + true + + SearchControlAddition + КомпоновщикНастроекНастройкиПараметрыВывода + + true + + + + КомпоновщикНастроекНастройкиПараметрыВыводаРасширеннаяПодсказка + 403 + Label + true + true + + Left + + + + КомпоновщикНастроекНастройкиПараметрыВыводаКонтекстноеМеню + 112 + true + + Tree + true + true + true + 50 + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + ExpandAllLevels + true + true + None + None + None + true +
                + true + true + + true + + + <key>ru</key> + <value>Страница дополнительных настроек</value> + + + НастройкиПараметровВыводаРасширеннаяПодсказка + 402 + Label + true + true + + Left + + + Page + + auto + +
                + + ОтключенныеНастройкиПараметровВывода + 114 + + НадписьЛокальныхПараметровВывода + 115 + + <key>ru</key> + <value>В текущем элементе дополнительные настройки не установлены. +Выберите в дереве структуры отчет для редактирования дополнительных настроек отчета в целом. +Если необходимо, чтобы текущий элемент имел собственные дополнительные настройки, установите флажок, расположенный над этим текстом.</value> + + true + true + + true + + + НадписьЛокальныхПараметровВыводаРасширеннаяПодсказка + 422 + Label + true + true + + Left + + + + НадписьЛокальныхПараметровВыводаКонтекстноеМеню + 116 + true + + Label + true + 3 + true + true + false + + Left + + + + ПереходКПараметрамВыводаОтчета + 117 + + <key>ru</key> + <value>Нажмите здесь для перехода к дополнительным настройкам отчета.</value> + + true + true + + true + + + ПереходКПараметрамВыводаОтчетаРасширеннаяПодсказка + 423 + Label + true + true + + Left + + + + ПереходКПараметрамВыводаОтчетаКонтекстноеМеню + 118 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница отключенных дополнительных настроек</value> + + + ОтключенныеНастройкиПараметровВыводаРасширеннаяПодсказка + 421 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НедоступныеНастройкиПараметровВывода + 119 + + НадписьНедоступныхПараметровВывода + 120 + + <key>ru</key> + <value>У текущего элемента не могут быть установлены дополнительные настройки. +Выберите в дереве структуры отчет для редактирования дополнительных настроек отчета в целом.</value> + + true + true + + true + + + НадписьНедоступныхПараметровВыводаРасширеннаяПодсказка + 425 + Label + true + true + + Left + + + + НадписьНедоступныхПараметровВыводаКонтекстноеМеню + 121 + true + + Label + true + 2 + true + true + false + + Left + + + + ПереходКПараметрамВыводаОтчета1 + 122 + + <key>ru</key> + <value>Нажмите здесь для перехода к дополнительным настройкам отчета.</value> + + true + true + + true + + + ПереходКПараметрамВыводаОтчета1РасширеннаяПодсказка + 426 + Label + true + true + + Left + + + + ПереходКПараметрамВыводаОтчета1КонтекстноеМеню + 123 + true + + Label + true + true + + + Click + ПерейтиКОтчету + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Страница недоступных дополнительных настроек</value> + + + НедоступныеНастройкиПараметровВыводаРасширеннаяПодсказка + 424 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Страницы дополнительных настроек</value> + + + СтраницыПараметровВыводаРасширеннаяПодсказка + 401 + Label + true + true + + Left + + + Pages + + Auto + +
                + true + true + + true + + + <key>ru</key> + <value>Дополнительные настройки</value> + + + СтраницаПараметровВыводаРасширеннаяПодсказка + 398 + Label + true + true + + Left + + + Page + + + StdPicture.DataCompositionOutputParameters + + Vertical + auto + +
                + true + true + + true + + + <key>ru</key> + <value>Группа настроек</value> + + + СтраницыНастроекРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
                + Bottom + true + + ФормаКоманднаяПанель + -1 + + ЗавершитьРедактирование + 124 + true + true + + true + + + ЗавершитьРедактированиеРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Form.Command.ЗавершитьРедактирование + Auto + true + true + true + UserCmds + Auto + + + ФормаЗакончитьРедактирование + 125 + true + + true + + + ФормаЗакончитьРедактированиеРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + Form.StandardCommand.EndEdit + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтмена + 126 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + Form.StandardCommand.CancelEdit + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Отчет + 1 + + ReportObject + + + true + + + true + +
                true
                +
                + + ЛокальныеВыбранныеПоля + + <key>ru</key> + <value>Локальные выбранные поля</value> + + 2 + + Boolean + + + true + + + true + + + + ЛокальныйОтбор + + <key>ru</key> + <value>Локальный отбор</value> + + 3 + + Boolean + + + true + + + true + + + + ЛокальныйПорядок + + <key>ru</key> + <value>Локальный порядок</value> + + 4 + + Boolean + + + true + + + true + + + + ЛокальноеУсловноеОформление + + <key>ru</key> + <value>Локальное условное оформление</value> + + 5 + + Boolean + + + true + + + true + + + + ЛокальныеПараметрыВывода + + <key>ru</key> + <value>Локальное условное оформление</value> + + 6 + + Boolean + + + true + + + true + + + + РежимВыбора + + <key>ru</key> + <value>Режим выбора</value> + + 7 + + Boolean + + + true + + + true + + + + ЗавершитьРедактирование + + <key>ru</key> + <value>Завершить редактирование</value> + + 1 + + ru + Завершить редактирование + + + true + + + + ЗавершитьРедактирование + + + Auto + Auto + + + + + + + Variant + +
                diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl new file mode 100644 index 000000000..db0dfe4b5 --- /dev/null +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/Module.bsl @@ -0,0 +1,375 @@ +//////////////////////////////////////////////////////////////////////////////// +// Стандартный функционал + +&НаКлиенте +Процедура ПоляГруппировкиНедоступны() + + Элементы.СтраницыПолейГруппировки.ТекущаяСтраница = Элементы.НедоступныеНастройкиПолейГруппировки; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляДоступны(ЭлементСтруктуры) + + Если Отчет.КомпоновщикНастроек.Настройки.НаличиеВыбораУЭлемента(ЭлементСтруктуры) Тогда + + ЛокальныеВыбранныеПоля = Истина; + Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НастройкиВыбранныхПолей; + + Иначе + + ЛокальныеВыбранныеПоля = Ложь; + Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиВыбранныхПолей; + + КонецЕсли; + + Элементы.ЛокальныеВыбранныеПоля.ТолькоПросмотр = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбранныеПоляНедоступны() + + ЛокальныеВыбранныеПоля = Ложь; + Элементы.ЛокальныеВыбранныеПоля.ТолькоПросмотр = Истина; + Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НедоступныеНастройкиВыбранныхПолей; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтборДоступен(ЭлементСтруктуры) + + Если Отчет.КомпоновщикНастроек.Настройки.НаличиеОтбораУЭлемента(ЭлементСтруктуры) Тогда + + ЛокальныйОтбор = Истина; + Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НастройкиОтбора; + + Иначе + + ЛокальныйОтбор = Ложь; + Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиОтбора; + + КонецЕсли; + + Элементы.ЛокальныйОтбор.ТолькоПросмотр = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ОтборНедоступен() + + ЛокальныйОтбор = Ложь; + Элементы.ЛокальныйОтбор.ТолькоПросмотр = Истина; + Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НедоступныеНастройкиОтбора; + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядокДоступен(ЭлементСтруктуры) + + Если Отчет.КомпоновщикНастроек.Настройки.НаличиеПорядкаУЭлемента(ЭлементСтруктуры) Тогда + + ЛокальныйПорядок = Истина; + Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НастройкиПорядка; + + Иначе + + ЛокальныйПорядок = Ложь; + Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПорядка; + + КонецЕсли; + + Элементы.ЛокальныйПорядок.ТолькоПросмотр = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядокНедоступен() + + ЛокальныйПорядок = Ложь; + Элементы.ЛокальныйПорядок.ТолькоПросмотр = Истина; + Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НедоступныеНастройкиПорядка; + +КонецПроцедуры + +&НаКлиенте +Процедура УсловноеОформлениеДоступно(ЭлементСтруктуры) + + Если Отчет.КомпоновщикНастроек.Настройки.НаличиеУсловногоОформленияУЭлемента(ЭлементСтруктуры) Тогда + + ЛокальноеУсловноеОформление = Истина; + Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НастройкиУсловногоОформления; + + Иначе + + ЛокальноеУсловноеОформление = Ложь; + Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.ОтключенныеНастройкиУсловногоОформления; + + КонецЕсли; + + Элементы.ЛокальноеУсловноеОформление.ТолькоПросмотр = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура УсловноеОформлениеНедоступно() + + ЛокальноеУсловноеОформление = Ложь; + Элементы.ЛокальноеУсловноеОформление.ТолькоПросмотр = Истина; + Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НедоступныеНастройкиУсловногоОформления; + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыВыводаДоступны(ЭлементСтруктуры) + + Если Отчет.КомпоновщикНастроек.Настройки.НаличиеПараметровВыводаУЭлемента(ЭлементСтруктуры) Тогда + + ЛокальныеПараметрыВывода = Истина; + Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; + + Иначе + + ЛокальныеПараметрыВывода = Ложь; + Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПараметровВывода; + + КонецЕсли; + + Элементы.ЛокальныеПараметрыВывода.ТолькоПросмотр = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ПараметрыВыводаНедоступны() + + ЛокальныеПараметрыВывода = Ложь; + Элементы.ЛокальныеПараметрыВывода.ТолькоПросмотр = Истина; + Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НедоступныеНастройкиПараметровВывода; + +КонецПроцедуры + +&НаКлиенте +Процедура КомпоновщикНастроекНастройкиПриАктивизацииПоля(Элемент) + + Перем ВыбраннаяСтраница; + + Если Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеВыбора" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаПолейВыбора; + + ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеОтбора" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаОтбора; + + ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеПорядка" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаПорядка; + + ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеУсловногоОформления" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаУсловногоОформления; + + ИначеЕсли Элементы.КомпоновщикНастроекНастройки.ТекущийЭлемент.Имя = "КомпоновщикНастроекНастройкиНаличиеПараметровВывода" Тогда + + ВыбраннаяСтраница = Элементы.СтраницаПараметровВывода; + + КонецЕсли; + + Если ВыбраннаяСтраница <> Неопределено Тогда + + Элементы.СтраницыНастроек.ТекущаяСтраница = ВыбраннаяСтраница; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КомпоновщикНастроекНастройкиПриАктивизацииСтроки(Элемент) + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + ТипЭлемента = ТипЗнч(ЭлементСтруктуры); + + Если ТипЭлемента = Неопределено ИЛИ + ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") ИЛИ + ТипЭлемента = Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") Тогда + + ПоляГруппировкиНедоступны(); + ВыбранныеПоляНедоступны(); + ОтборНедоступен(); + ПорядокНедоступен(); + УсловноеОформлениеНедоступно(); + ПараметрыВыводаНедоступны(); + + ИначеЕсли ТипЭлемента = Тип("НастройкиКомпоновкиДанных") ИЛИ + ТипЭлемента = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + + ПоляГруппировкиНедоступны(); + + ЛокальныеВыбранныеПоля = Истина; + Элементы.ЛокальныеВыбранныеПоля.ТолькоПросмотр = Истина; + Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НастройкиВыбранныхПолей; + + ЛокальныйОтбор = Истина; + Элементы.ЛокальныйОтбор.ТолькоПросмотр = Истина; + Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НастройкиОтбора; + + ЛокальныйПорядок = Истина; + Элементы.ЛокальныйПорядок.ТолькоПросмотр = Истина; + Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НастройкиПорядка; + + ЛокальноеУсловноеОформление = Истина; + Элементы.ЛокальноеУсловноеОформление.ТолькоПросмотр = Истина; + Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НастройкиУсловногоОформления; + + ЛокальныеПараметрыВывода = Истина; + Элементы.ЛокальныеПараметрыВывода.ТолькоПросмотр = Истина; + Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; + + ИначеЕсли ТипЭлемента = Тип("ГруппировкаКомпоновкиДанных") ИЛИ + ТипЭлемента = Тип("ГруппировкаТаблицыКомпоновкиДанных") ИЛИ + ТипЭлемента = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + + Элементы.СтраницыПолейГруппировки.ТекущаяСтраница = Элементы.НастройкиПолейГруппировки; + + ВыбранныеПоляДоступны(ЭлементСтруктуры); + ОтборДоступен(ЭлементСтруктуры); + ПорядокДоступен(ЭлементСтруктуры); + УсловноеОформлениеДоступно(ЭлементСтруктуры); + ПараметрыВыводаДоступны(ЭлементСтруктуры); + + ИначеЕсли ТипЭлемента = Тип("ТаблицаКомпоновкиДанных") ИЛИ + ТипЭлемента = Тип("ДиаграммаКомпоновкиДанных") Тогда + + ПоляГруппировкиНедоступны(); + ВыбранныеПоляДоступны(ЭлементСтруктуры); + ОтборНедоступен(); + ПорядокНедоступен(); + УсловноеОформлениеДоступно(ЭлементСтруктуры); + ПараметрыВыводаДоступны(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКОтчету(Элемент) + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + НастройкиЭлемента = Отчет.КомпоновщикНастроек.Настройки.НастройкиЭлемента(ЭлементСтруктуры); + Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока = Отчет.КомпоновщикНастроек.Настройки.ПолучитьИдентификаторПоОбъекту(НастройкиЭлемента); + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальныеВыбранныеПоляПриИзменении(Элемент) + + Если ЛокальныеВыбранныеПоля Тогда + + Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.НастройкиВыбранныхПолей; + + Иначе + + Элементы.СтраницыПолейВыбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиВыбранныхПолей; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьВыборЭлемента(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальныйОтборПриИзменении(Элемент) + + Если ЛокальныйОтбор Тогда + + Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.НастройкиОтбора; + + Иначе + + Элементы.СтраницыОтбора.ТекущаяСтраница = Элементы.ОтключенныеНастройкиОтбора; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьОтборЭлемента(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальныйПорядокПриИзменении(Элемент) + + Если ЛокальныйПорядок Тогда + + Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.НастройкиПорядка; + + Иначе + + Элементы.СтраницыПорядка.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПорядка; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьПорядокЭлемента(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальноеУсловноеОформлениеПриИзменении(Элемент) + + Если ЛокальноеУсловноеОформление Тогда + + Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.НастройкиУсловногоОформления; + + Иначе + + Элементы.СтраницыУсловногоОформления.ТекущаяСтраница = Элементы.ОтключенныеНастройкиУсловногоОформления; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьУсловноеОформлениеЭлемента(ЭлементСтруктуры); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЛокальныеПараметрыВыводаПриИзменении(Элемент) + + Если ЛокальныеПараметрыВывода Тогда + + Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.НастройкиПараметровВывода; + + Иначе + + Элементы.СтраницыПараметровВывода.ТекущаяСтраница = Элементы.ОтключенныеНастройкиПараметровВывода; + + ЭлементСтруктуры = Отчет.КомпоновщикНастроек.Настройки.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройки.ТекущаяСтрока); + Отчет.КомпоновщикНастроек.Настройки.ОчиститьПараметрыВыводаЭлемента(ЭлементСтруктуры); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Параметры.Свойство("РежимВыбора", РежимВыбора); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗавершитьРедактирование(Команда) + Если РежимВыбора Тогда + ОповеститьОВыборе(Отчет.КомпоновщикНастроек); + Иначе + Закрыть(Истина); + КонецЕсли; +КонецПроцедуры + diff --git a/SSL/src/CommonForms/ФормаВариантаОтчета/ФормаВариантаОтчета.mdo b/SSL/src/CommonForms/ФормаВариантаОтчета/ФормаВариантаОтчета.mdo new file mode 100644 index 000000000..24f2c59f8 --- /dev/null +++ b/SSL/src/CommonForms/ФормаВариантаОтчета/ФормаВариантаОтчета.mdo @@ -0,0 +1,10 @@ + + + ФормаВариантаОтчета + + ru + Форма варианта отчета + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form new file mode 100644 index 000000000..5ed59064e --- /dev/null +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Form.form @@ -0,0 +1,302 @@ + + + + КомпоновщикНастроекПользовательскиеНастройки + 1 + + <key>ru</key> + <value>Пользовательские настройки</value> + + true + true + + true + + + Отчет.SettingsComposer.UserSettings + + None + HierarchicalList + List + Tree + None + + КомпоновщикНастроекПользовательскиеНастройкиКоманднаяПанель + 3 + Left + true + + + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоиска + 11 + + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню + 12 + true + + КомпоновщикНастроекПользовательскиеНастройки + + true + + + + КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотра + 14 + + КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню + 15 + true + + ViewStatusAddition + КомпоновщикНастроекПользовательскиеНастройки + + true + + + + КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоиском + 17 + + КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню + 18 + true + + SearchControlAddition + КомпоновщикНастроекПользовательскиеНастройки + + true + + + + КомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиКонтекстноеМеню + 2 + true + + HierarchicalList + true + true + true + true + true + true + MultiRow +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + Auto + Auto + true + true + None + None + None + true + All + Show +
                + Bottom + true + + ФормаКоманднаяПанель + -1 + + ЗавершитьРедактирование + 4 + true + true + + true + + + ЗавершитьРедактированиеРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + Form.Command.ЗавершитьРедактирование + Auto + true + true + true + UserCmds + Auto + + + ФормаЗавершитьРедактирование + 5 + true + + true + + + ФормаЗавершитьРедактированиеРасширеннаяПодсказка + 8 + Label + true + true + + Left + + + Form.StandardCommand.EndEdit + Normal + Auto + true + true + UserCmds + Auto + + + ФормаОтмена + 6 + true + true + + true + + + ФормаОтменаРасширеннаяПодсказка + 9 + Label + true + true + + Left + + + Form.StandardCommand.CancelEdit + Normal + Auto + true + true + UserCmds + Auto + + Right + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Отчет + 1 + + ReportObject + + + true + + + true + +
                true
                +
                + + РежимВыбора + + <key>ru</key> + <value>Режим выбора</value> + + 2 + + Boolean + + + true + + + true + + + + ЗавершитьРедактирование + + <key>ru</key> + <value>Завершить редактирование</value> + + 1 + + ru + Завершить редактирование + + + true + + + + ЗавершитьРедактирование + + + Auto + Auto + + + + + + + Settings + +
                diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl new file mode 100644 index 000000000..02ee77119 --- /dev/null +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/Module.bsl @@ -0,0 +1,23 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Параметры.Свойство("РежимВыбора", РежимВыбора); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗавершитьРедактирование(Команда) + Если РежимВыбора Тогда + ОповеститьОВыборе(Отчет.КомпоновщикНастроек); + Иначе + Закрыть(Истина); + КонецЕсли; +КонецПроцедуры diff --git a/SSL/src/CommonForms/ФормаНастроекОтчета/ФормаНастроекОтчета.mdo b/SSL/src/CommonForms/ФормаНастроекОтчета/ФормаНастроекОтчета.mdo new file mode 100644 index 000000000..b2f3d1732 --- /dev/null +++ b/SSL/src/CommonForms/ФормаНастроекОтчета/ФормаНастроекОтчета.mdo @@ -0,0 +1,10 @@ + + + ФормаНастроекОтчета + + ru + Форма настроек отчета + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonForms/ФормаОтчета/ConditionalAppearance.dcssca b/SSL/src/CommonForms/ФормаОтчета/ConditionalAppearance.dcssca new file mode 100644 index 000000000..34f5a3c4f --- /dev/null +++ b/SSL/src/CommonForms/ФормаОтчета/ConditionalAppearance.dcssca @@ -0,0 +1,40 @@ + + + + + + РассылкаОтчетовСоздатьНовую1 + + + РассылкаОтчетовПрисоединитьКСуществующей1 + + + РассылкаОтчетовСоздатьНовую + + + РассылкаОтчетовПрисоединитьКСуществующей + + + + + РассылкиИспользование + Equal + false + + + + + Видимость + false + + + Доступность + false + + + Отображать + false + + + + diff --git a/SSL/src/CommonForms/ФормаОтчета/Form.form b/SSL/src/CommonForms/ФормаОтчета/Form.form new file mode 100644 index 000000000..0a0d661c2 --- /dev/null +++ b/SSL/src/CommonForms/ФормаОтчета/Form.form @@ -0,0 +1,2658 @@ + + + + ВыборВариантаОтчета + 1 + + ОтчетНаименованиеТекущегоВарианта + 2 + true + true + + true + + + ОтчетНаименованиеТекущегоВарианта + + Left + + ОтчетНаименованиеТекущегоВариантаРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + ОтчетНаименованиеТекущегоВариантаКонтекстноеМеню + 3 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗагрузитьВариант + 4 + true + true + + true + + + ЗагрузитьВариантРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + UsualButton + Form.StandardCommand.LoadVariant + Normal + Auto + true + true + UserCmds + Auto + + true + + true + + + <key>ru</key> + <value>Выбор варианта отчета</value> + + + ru + Выбор варианта отчета + + + ВыборВариантаОтчетаРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОсновнаяКоманднаяПанель + 44 + + ЛеваяЧастьКоманднойПанели + 49 + + КнопкаСформировать + 48 + true + true + + true + + + КнопкаСформироватьРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + Form.StandardCommand.Generate + Auto + true + true + true + UserCmds + Auto + + + КнопкиТабличногоДокумента + 88 + + Найти + 62 + true + true + + true + + + НайтиРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.Find + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + СвернутьВсеГруппы + 60 + true + true + + true + + + СвернутьВсеГруппыРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.CollapseAllGroups + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + РазвернутьВсеГруппы + 61 + true + true + + true + + + РазвернутьВсеГруппыРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.ExpandAllGroups + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Кнопки табличного документа</value> + + + ru + Кнопки табличного документа + + + КнопкиТабличногоДокументаРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + + + + Печать + 56 + true + true + + true + + + ПечатьРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Form.StandardCommand.Print + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Сохранить + 57 + + <key>ru</key> + <value>Сохранить...</value> + + true + true + + true + + + СохранитьРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + Form.StandardCommand.Save + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + Отправить + 63 + + ОтправитьПоЭлектроннойПочте + 97 + true + true + + true + + + ОтправитьПоЭлектроннойПочтеРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + Form.Command.ОтправитьПоЭлектроннойПочте + Normal + PictureAndText + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Отправить</value> + + + ru + Отправить отчет по электронной почте + + + ОтправитьРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Popup + + + CommonPicture.ЭлектронноеПисьмо + + Auto + Normal + + + true + true + + true + + + <key>ru</key> + <value>Левая часть командной панели</value> + + + ru + Левая часть командной панели + + false + false + + ЛеваяЧастьКоманднойПанелиРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + CommandBar + + Left + + + + ПустаяДекорация + 84 + true + true + + true + + + ПустаяДекорацияРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + + ПустаяДекорацияКонтекстноеМеню + 85 + true + + Label + true + true + true + false + + Center + + + + ПраваяЧастьКоманднойПанели + 5 + + КомандыВажные + 50 + + ФормаСформировать + 46 + true + true + + true + + + ФормаСформироватьРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + Form.StandardCommand.Generate + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ПодменюПечать + 93 + + ФормаПечать + 52 + true + true + + true + + + ФормаПечатьРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Form.StandardCommand.Print + Normal + Auto + true + true + UserCmds + Auto + + + ФормаПредварительныйПросмотр + 90 + true + true + + true + + + ФормаПредварительныйПросмотрРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.Preview + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаПараметрыСтраницы + 94 + true + true + + true + + + ФормаПараметрыСтраницыРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + Form.Item.ОтчетТабличныйДокумент.StandardCommand.PageSetup + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Печать</value> + + + ПодменюПечатьРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + + + ФормаСохранить + 51 + + <key>ru</key> + <value>Сохранить...</value> + + true + true + + true + + + ФормаСохранитьРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Form.StandardCommand.Save + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ОтправитьВсеДействия + 74 + + ОтправитьПоЭлектроннойПочтеВсеДействия + 98 + true + true + + true + + + ОтправитьПоЭлектроннойПочтеВсеДействияРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + Form.Command.ОтправитьПоЭлектроннойПочте + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Отправить</value> + + + ru + Отправить отчет по электронной почте + + + ОтправитьВсеДействияРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + Popup + + + CommonPicture.ОтправитьПолучитьПочту + + Auto + Normal + + + true + true + + true + + + <key>ru</key> + <value>Команды важные</value> + + + ru + Команды важные + + + КомандыВажныеРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + + + + КомандыВариантовПользовательскихНастроек + 36 + + СкрытьПоказатьБыстрыеНастройки + 13 + true + true + + true + + + СкрытьПоказатьБыстрыеНастройкиРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Form.Command.СкрытьПоказатьБыстрыеНастройки + Normal + Auto + true + true + UserCmds + Auto + + + НастроитьОтчет + 12 + true + true + + true + + + НастроитьОтчетРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + Form.Command.НастроитьОтчет + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ФормаЗагрузитьНастройкиОтчета + 38 + + <key>ru</key> + <value>Загрузить настройки...</value> + + true + true + + true + + + ФормаЗагрузитьНастройкиОтчетаРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + Form.StandardCommand.LoadReportSettings + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСохранитьНастройкиОтчета + 37 + + <key>ru</key> + <value>Сохранить настройки...</value> + + true + true + + true + + + ФормаСохранитьНастройкиОтчетаРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + Form.StandardCommand.SaveReportSettings + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ДополнительныеКомандыВариантовПользовательскихНастроек + 11 + + ФормаСтандартныеНастройки + 39 + + <key>ru</key> + <value>Сбросить настройки</value> + + true + + true + + + ФормаСтандартныеНастройкиРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Form.StandardCommand.StandardSettings + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СброситьНастройки + 87 + true + true + + true + + + СброситьНастройкиРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + Form.Command.СброситьНастройки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Дополнительные команды вариантов пользовательских настроек</value> + + + ru + + + + ДополнительныеКомандыВариантовПользовательскихНастроекРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Команды вариантов пользовательских настроек</value> + + + ru + Команды вариантов пользовательских настроек + + + КомандыВариантовПользовательскихНастроекРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + + + + КомандыВариантовОтчета + 32 + + ИзменитьВариантОтчета + 86 + true + true + + true + + + ИзменитьВариантОтчетаРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + Form.Command.ИзменитьВариантОтчета + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаИзменитьВариант + 33 + + <key>ru</key> + <value>Изменить вариант отчета...</value> + + true + + true + + + ФормаИзменитьВариантРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + Form.StandardCommand.ChangeVariant + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаЗагрузитьВариант + 35 + + <key>ru</key> + <value>Выбрать вариант отчета...</value> + + true + true + + true + + + ФормаЗагрузитьВариантРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + Form.StandardCommand.LoadVariant + Normal + Picture + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаСохранитьВариант + 34 + + <key>ru</key> + <value>Сохранить вариант отчета...</value> + + true + true + + true + + + ФормаСохранитьВариантРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Form.StandardCommand.SaveVariant + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды вариантов отчета</value> + + + ru + Команды вариантов отчета + + + КомандыВариантовОтчетаРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + + + + КомандыСмТакже + 40 + + ФормаНовоеОкно + 41 + true + true + + true + + + ФормаНовоеОкноРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Form.StandardCommand.NewWindow + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаИзменитьФорму + 42 + true + true + + true + + + ФормаИзменитьФормуРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + Form.StandardCommand.CustomizeForm + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Команды см также</value> + + + ru + Команды см также + + + КомандыСмТакжеРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + + + ФормаСправка + 43 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Правая часть командной панели</value> + + + ru + Правая часть командной панели + + false + false + + ПраваяЧастьКоманднойПанелиРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + CommandBar + + Right + Form + + + true + true + + true + + + <key>ru</key> + <value>Основная командная панель</value> + + + ru + Основная командная панель + + + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + РезультатИБыстрыеНастройки + 6 + + ОтчетТабличныйДокумент + 7 + true + true + + true + + + ОтчетТабличныйДокумент + + true + None + + ОтчетТабличныйДокументРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + ОтчетТабличныйДокументКонтекстноеМеню + 8 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + + AdditionalDetailProcessing + ОтчетТабличныйДокументОбработкаДополнительнойРасшифровки + + + DetailProcessing + ОтчетТабличныйДокументОбработкаРасшифровки + + 60 + true + 15 + true + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + true + true + true + + + + БыстрыеНастройки + 14 + + Периоды + 31 + true + true + + true + + + <key>ru</key> + <value>Периоды</value> + + + ru + + + + ПериодыРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ПараметрыОтчета + 99 + true + true + + true + + + <key>ru</key> + <value>Параметры отчета</value> + + + ru + Параметры отчета + + + ПараметрыОтчетаРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ПараметрыИОтборы + 18 + + ГруппыОтборов + 96 + true + true + + true + + + <key>ru</key> + <value>Группы отборов</value> + + + ru + Группы отборов + + + ГруппыОтборовРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ЗначенияПараметровИОтборов + 19 + + ЛевоеЗначение + 20 + true + true + + true + + + <key>ru</key> + <value>Левое значение</value> + + + ru + + + + ЛевоеЗначениеРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ПравоеЗначение + 21 + true + true + + true + + + <key>ru</key> + <value>Правое значение</value> + + + ru + + + + ПравоеЗначениеРасширеннаяПодсказка + 153 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Значения параметров и отборов</value> + + + ru + + + + ЗначенияПараметровИОтборовРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + СпискиОтборов + 22 + true + true + + true + + + <key>ru</key> + <value>Списки отборов</value> + + + ru + + + + СпискиОтборовРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры и отборы</value> + + + ru + + + + ПараметрыИОтборыРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + ВыбранныеПоля + 81 + true + true + + true + + + <key>ru</key> + <value>Выбранные поля</value> + + + ru + Выбранные поля + + + ВыбранныеПоляРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Порядки + 79 + true + true + + true + + + <key>ru</key> + <value>Порядки</value> + + + ru + + + + ПорядкиРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ОформленияИГруппировки + 83 + + Оформления + 24 + true + true + + true + + + <key>ru</key> + <value>Оформления</value> + + + ru + + + + ОформленияРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + Группировки + 80 + true + true + + true + + + <key>ru</key> + <value>Группировки</value> + + + ГруппировкиРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Оформления и группировки</value> + + + ru + Оформления и группировки + + + ОформленияИГруппировкиРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + + СтруктурыНастроек + 82 + true + true + + true + + + <key>ru</key> + <value>Структуры настроек</value> + + + ru + Структуры настроек + + + СтруктурыНастроекРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Быстрые настройки</value> + + + ru + + + 42 + + БыстрыеНастройкиРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Результат и быстрые настройки</value> + + + ru + + + + РезультатИБыстрыеНастройкиРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Left + + + ChoiceProcessing + ОбработкаВыбора + + + OnCreateAtServer + ПриСозданииНаСервере + + ReportSettings + DontBlock + 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 + + + + + ОтчетДанныеРасшифровки + + <key>ru</key> + <value>Отчет данные расшифровки</value> + + 4 + + String + + + + 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> + + 9 + + ValueTable + + + true + + + true + + + Отбор + + <key>ru</key> + <value>Отбор</value> + + 1 + + String + + + + true + + + true + + + + ПутьКФорме + + <key>ru</key> + <value>Путь к форме</value> + + 3 + + String + + + + true + + + true + + + + + НастройкиОтчета + + <key>ru</key> + <value>Настройки отчета</value> + + 10 + + + true + + + true + + + + ВерсияСтандартныхФункцийОтчетов + + <key>ru</key> + <value>Версия стандартных функций отчетов</value> + + 11 + + String + + + + true + + + true + + + + КлючОбъекта + + <key>ru</key> + <value>Ключ объекта</value> + + 13 + + String + + + + true + + + true + + + + ОписаниеОбъектов + + <key>ru</key> + <value>Описание объектов</value> + + 15 + + ValueList + + + true + + + true + + + + + + + СвязиОтборов + + <key>ru</key> + <value>Связи отборов</value> + + 17 + + ValueTable + + + true + + + true + + + ИдентификаторОтбора + + <key>ru</key> + <value>Идентификатор отбора</value> + + 1 + + String + + + + true + + + true + + + + Тип + + <key>ru</key> + <value>Тип отбора</value> + + 2 + + String + + + + true + + + true + + + + РеквизитПоля + + <key>ru</key> + <value>Реквизит поля (Реквизит через на который по которому будет применен отбор при открытии формы)</value> + + 3 + + String + + + + true + + + true + + + + ИдентификаторЗначенияОтбора + + <key>ru</key> + <value>Идентификатор значения отбора (Идентификатор отбора из которого берется значение)</value> + + 4 + + String + + + + true + + + true + + + + ТипЗначенияОтбора + + <key>ru</key> + <value>Тип значения отбора, из которого берется значение</value> + + 5 + + String + + + + true + + + true + + + + ИдентификаторОбъекта + + <key>ru</key> + <value>Идентификатор объекта, УИ объекта СКД</value> + + 6 + + String + + + + true + + + true + + + + + НаименованиеОтчета + + <key>ru</key> + <value>Наименование отчета</value> + + 19 + + String + + + + true + + + true + + + + ПостоянныеКоманды + + <key>ru</key> + <value>Постоянные команды</value> + + 20 + + ValueList + + + true + + + true + + + + + + + ПостоянныеРеквизиты + + <key>ru</key> + <value>Постоянные реквизиты</value> + + 21 + + ValueList + + + true + + + true + + + + + + + ПостоянныеЭлементы + + <key>ru</key> + <value>Постоянные элементы</value> + + 22 + + ValueList + + + true + + + true + + + + + + + ЭтаФормаПараметры + + <key>ru</key> + <value>Эта форма параметры</value> + + 6 + + + true + + + true + + + + КэшНастроекСКД + + <key>ru</key> + <value>Кэш настроек СКД</value> + + 23 + + ValueTable + + + true + + + true + + + Идентификатор + + <key>ru</key> + <value>Идентификатор</value> + + 1 + + String + + + + true + + + true + + + + ИмяЭлемента + + <key>ru</key> + <value>Имя элемента</value> + + 2 + + String + + + + true + + + true + + + + ИмяРеквизита + + <key>ru</key> + <value>Имя реквизита</value> + + 3 + + String + + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Представление</value> + + 4 + + String + + + + true + + + true + + + + ЭтоПараметр + + <key>ru</key> + <value>Это параметр</value> + + 5 + + Boolean + + + true + + + true + + + + ЭтоОтбор + + <key>ru</key> + <value>Это отбор</value> + + 6 + + Boolean + + + true + + + true + + + + ПолеКД + + <key>ru</key> + <value>Поле КД</value> + + 7 + + DataCompositionField + + + true + + + true + + + + ИмяРеквизитаИспользование + + <key>ru</key> + <value>Имя реквизита использование</value> + + 8 + + String + + + + true + + + true + + + + + ОтчетСформирован + + <key>ru</key> + <value>Отчет сформирован</value> + + 14 + + Boolean + + + true + + + true + + + + ВариантСсылка + + <key>ru</key> + <value>Вариант ссылка</value> + + 5 + + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + НастроитьОтчет + + <key>ru</key> + <value>Изменить настройки...</value> + + 1 + + ru + Изменить текущие настройки отчета... + + + true + + + StdPicture.ReportSettings + + + + НастроитьОтчет + + + TextPicture + Auto + Auto + + + СкрытьПоказатьБыстрыеНастройки + + <key>ru</key> + <value>Быстрые настройки</value> + + 2 + + true + + + CommonPicture.БыстрыеНастройкиОтчета + + + + СкрытьПоказатьБыстрыеНастройки + + + Auto + Auto + + + ИзменитьВариантОтчета + + <key>ru</key> + <value>Изменить вариант отчета...</value> + + 3 + + ru + Изменить вариант отчета + + + true + + + + ИзменитьВариантОтчета + + + Auto + Auto + + + СброситьНастройки + + <key>ru</key> + <value>Сбросить настройки</value> + + 7 + + ru + Сбросить настройки + + + true + + + + СброситьНастройки + + + Auto + Auto + + + ОтправитьПоЭлектроннойПочте + + <key>ru</key> + <value>Отправить сейчас...</value> + + 4 + + ru + Создать новое письмо и прикрепить отчет как вложение + + + true + + + CommonPicture.ЭлектронноеПисьмо + + + + ОтправитьПоЭлектроннойПочте + + + Auto + Auto + + + + + + + + OnLoadUserSettingsAtServer + ПриЗагрузкеПользовательскихНастроекНаСервере + + + OnLoadVariantAtServer + ПриЗагрузкеВариантаНаСервере + + ОтчетТабличныйДокумент + ОтчетДанныеРасшифровки + ОтчетНаименованиеТекущегоВарианта + +
                diff --git a/SSL/src/CommonForms/ФормаОтчета/Module.bsl b/SSL/src/CommonForms/ФормаОтчета/Module.bsl new file mode 100644 index 000000000..5603317c1 --- /dev/null +++ b/SSL/src/CommonForms/ФормаОтчета/Module.bsl @@ -0,0 +1,2283 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + // Реквизиты + ДобавляемыеРеквизиты = Новый Массив; + + ВсеТипы = Новый ОписаниеТипов(); + + ИмяТаблицы = "ПутиКФормамОтборов"; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Тип", ВсеТипы, ИмяТаблицы)); + + ИмяТаблицы = "КэшНастроекСКД"; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Тип", ВсеТипы, ИмяТаблицы)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Пользовательская", ВсеТипы, ИмяТаблицы)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Общая", ВсеТипы, ИмяТаблицы)); + + ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + // Локальные переменные + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + ОтчетМетаданные = ОтчетОбъект.Метаданные(); + СхемаКомпоновкиДанных = ОтчетОбъект.СхемаКомпоновкиДанных; + + // Реквизиты + ВерсияСтандартныхФункцийОтчетов = ""; + Попытка + ВерсияСтандартныхФункцийОтчетов = ОтчетОбъект.ВерсияСтандартныхФункцийОтчетов(); + Исключение + КонецПопытки; + Если ВерсияСтандартныхФункцийОтчетов = "1" Тогда + НастройкиОтчета = ОтчетОбъект.ПолучитьНастройкиОтчета(); + Иначе + НастройкиОтчета = ФункцииОтчетовКлиентСервер.ПолучитьНастройкиОтчетаПоУмолчанию(); + КонецЕсли; + + // Параметры по умолчанию + ЗаполнитьЗначенияСвойств(ОтчетТабличныйДокумент, НастройкиОтчета.ПараметрыПечатиПоУмолчанию); + + РежимРасшифровки = (Параметры.Свойство("Расшифровка") И Параметры.Расшифровка <> Неопределено); + РежимВариантаОтчета = (Параметры.Свойство("КлючВарианта") И Параметры.КлючВарианта <> Неопределено); + КлючОбъекта = ОтчетМетаданные.ПолноеИмя(); + НаименованиеОтчета = СокрЛП(ОтчетМетаданные.Представление()); + + // Параметры формы + ЭтаФормаПараметры = Новый Структура( + "КлючНазначенияИспользования, КлючПользовательскихНастроек, + |Расшифровка, СформироватьПриОткрытии, ТолькоПросмотр, + |ФиксированныеНастройки, ОтчетСсылка" + ); + ЗаполнитьЗначенияСвойств(ЭтаФормаПараметры, Параметры); + Если НЕ ЗначениеЗаполнено(ЭтаФормаПараметры.ОтчетСсылка) Тогда + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОбъекта); + Если НЕ ЗначениеЗаполнено(ОтчетИнформация.ТекстОшибки) Тогда + ЭтаФормаПараметры.ОтчетСсылка = ОтчетИнформация.Отчет; + Иначе + ЭтаФормаПараметры.ОтчетСсылка = КлючОбъекта; + КонецЕсли; + КонецЕсли; + ЭтаФормаПараметры = Новый ФиксированнаяСтруктура(ЭтаФормаПараметры); + + ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ЭтаФормаПараметры.ОтчетСсылка, КлючТекущегоВарианта); + + // Скрытие команд вариантов + Если Параметры.Свойство("ВидимостьКомандВариантовОтчетов") И Параметры.ВидимостьКомандВариантовОтчетов = Ложь Тогда + Элементы.КомандыВариантовОтчета.Видимость = Ложь; + КонецЕсли; + + // Регистрация элементов, команд и реквизитов формы, которые не удаляются при перезаполнении быстрых настроек + НаборРеквизитов = ПолучитьРеквизиты(); + Для Каждого Реквизит Из НаборРеквизитов Цикл + ПостоянныеРеквизиты.Добавить(Реквизит.Имя); + КонецЦикла; + + Для Каждого Команда Из Команды Цикл + ПостоянныеКоманды.Добавить(Команда.Имя); + КонецЦикла; + + НаборЭлементов = Новый Массив; + ДобавитьПодчиненныеЭлементы(НаборЭлементов, Элементы.БыстрыеНастройки.ПодчиненныеЭлементы, Истина); + Для Каждого Элемент Из НаборЭлементов Цикл + ПостоянныеЭлементы.Добавить(Элемент.Имя); + КонецЦикла; + + // Приведение зависимых элементов формы к кондиции + ВидимостьДоступностьКорректность(); + + // Механизмы расширения + СтандартныеПодсистемыПереопределяемый.ФормаОтчетаПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка); + ФормаОтчетаПереопределяемый.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка); + + // Если в подменю одна команда, то выпадающий список не отображается. + Если Элементы.Отправить.ПодчиненныеЭлементы.Количество() = 1 Тогда + Элементы.Отправить.Вид = ВидГруппыФормы.ГруппаКнопок; + Элементы.ОтправитьПоЭлектроннойПочте.Заголовок = Элементы.Отправить.Заголовок; + КонецЕсли; + Если Элементы.ОтправитьВсеДействия.ПодчиненныеЭлементы.Количество() = 1 Тогда + Элементы.ОтправитьВсеДействия.Вид = ВидГруппыФормы.ГруппаКнопок; + Элементы.ОтправитьПоЭлектроннойПочтеВсеДействия.Заголовок = Элементы.ОтправитьВсеДействия.Заголовок; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) + Результат = Ложь; + + #Если ТолстыйКлиентОбычноеПриложение Тогда + Если ИсточникВыбора.ИмяФормы = "ОбщаяФорма.ФормаНастроекОтчета" Тогда + СуффиксФормыИсточникаИзменений = "Настроек"; + ИначеЕсли ИсточникВыбора.ИмяФормы = "ОбщаяФорма.ФормаВариантаОтчета" Тогда + СуффиксФормыИсточникаИзменений = "Варианта"; + Иначе + СуффиксФормыИсточникаИзменений = ""; + КонецЕсли; + #Иначе + СуффиксФормыИсточникаИзменений = СтрЗаменить("^" + ИсточникВыбора.ИмяФормы, "^" + ИмяФормы, ""); // ^ - начало строки + #КонецЕсли + + Если СуффиксФормыИсточникаИзменений = "Настроек" ИЛИ СуффиксФормыИсточникаИзменений = "Варианта" Тогда + + БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(ВыбранноеЗначение, СуффиксФормыИсточникаИзменений); + БыстрыеНастройкиЗаполнить(); + + Результат = Истина; + + КонецЕсли; + + // Механизмы расширения + СтандартныеПодсистемыКлиентПереопределяемый.ФормаОтчетаОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат); + ФормаОтчетаКлиентПереопределяемый.ОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеВариантаНаСервере(НовыеНастройкиКД) + // Заполнение панели быстрых настроек + РежимВариантаОтчета = Истина; + ВариантСсылка = ВариантыОтчетов.ПолучитьСсылку(ЭтаФормаПараметры.ОтчетСсылка, КлючТекущегоВарианта); + БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеНастройкиКД); + БыстрыеНастройкиЗаполнить(); + + // Вызов переопределяемого модуля + ФормаОтчетаПереопределяемый.ПриЗагрузкеВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД); +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеПользовательскихНастроекНаСервере(НовыеПользовательскиеНастройкиКД) + + Если РежимВариантаОтчета Тогда + БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеПользовательскиеНастройкиКД); + БыстрыеНастройкиЗаполнить(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +//////////////////////////////////////////////////////////////////////////////// +// Табличный документ + +&НаКлиенте +Процедура ОтчетТабличныйДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + ФормаОтчетаКлиентПереопределяемый.ОбработкаРасшифровки(ЭтаФорма, Элемент, Расшифровка, СтандартнаяОбработка); +КонецПроцедуры + +&НаКлиенте +Процедура ОтчетТабличныйДокументОбработкаДополнительнойРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + ФормаОтчетаКлиентПереопределяемый.ОбработкаДополнительнойРасшифровки(ЭтаФорма, Элемент, Расшифровка, СтандартнаяОбработка); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - При изменении + +&НаКлиенте +Процедура Подключаемый_Параметр_Использование_ПриИзменении(Элемент) + + ИспользованиеПриИзменении(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ГруппаЭлементовОтбораКомпоновкиДанных_Использование_ПриИзменении(Элемент) + + ИспользованиеПриИзменении(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЭлементОтбораКомпоновкиДанных_Использование_ПриИзменении(Элемент) + + ИспользованиеПриИзменении(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_Параметр_Значение_ПриИзменении(Элемент) + + СкомпоноватьНастройкиЭлемента(Элемент, Истина, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЭлементОтбораКомпоновкиДанных_Таблица_ПриИзменении(Элемент) + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Истина, Истина); + + ЗаполнитьПараметрыВыбора(Настройки.Идентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЭлементОтбораКомпоновкиДанных_Значение_ПриИзменении(Элемент) + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Истина, Истина); + + ЗаполнитьПараметрыВыбора(Настройки.Идентификатор); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_Группировки_Использование_ПриИзменении(Элемент) + + ИспользованиеПриИзменении(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЭлементУсловногоОформленияКомпоновкиДанных_Использование_ПриИзменении(Элемент) + + ИспользованиеПриИзменении(Элемент); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВыбранныеПоляКомпоновкиДанных_КолонкаИспользование_ПриИзменении(Элемент) + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Истина, Ложь); + + СтрокаТаблицы = Настройки.Элемент.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаПользовательскойНастройки = ФункцииОтчетовКлиентСервер.НайтиВложеннуюПользовательскуюНастройку(Настройки.Пользовательская, СтрокаТаблицы.Идентификатор); + Если СтрокаПользовательскойНастройки <> Неопределено Тогда + СтрокаПользовательскойНастройки.Использование = СтрокаТаблицы.Использование; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПорядокКомпоновкиДанных_КолонкаИспользование_ПриИзменении(Элемент) + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Истина, Ложь); + + СтрокаТаблицы = Настройки.Элемент.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + + СтрокаПользовательскойНастройки = ФункцииОтчетовКлиентСервер.НайтиВложеннуюПользовательскуюНастройку(Настройки.Пользовательская, СтрокаТаблицы.Идентификатор); + Если СтрокаПользовательскойНастройки <> Неопределено Тогда + СтрокаПользовательскойНастройки.Использование = СтрокаТаблицы.Использование; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтруктураНастроекКомпоновкиДанных_КолонкаИспользование_ПриИзменении(Элемент) + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Истина, Ложь); + + СтрокаТаблицы = Настройки.Элемент.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + ИндексСтрокиТаблицы = Настройки.Значение.Индекс(СтрокаТаблицы); + + ПолеГруппировки = Настройки.Пользовательская.Структура.Получить(ИндексСтрокиТаблицы); + ПолеГруппировки.Использование = СтрокаТаблицы.Использование; + ПолеГруппировки.Состояние = СостояниеЭлементаНастройкиКомпоновкиДанных[?(СтрокаТаблицы.Использование, "Включен", "Отключен")]; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_ВидПериода_ПриИзменении(Элемент) + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Ложь, Ложь); + + СтраницыИмя = "Период_Страницы_" + Настройки.ЭлементИдентификатор; + СтраницаПроизвольныйПериодИмя = "Период_Страница_Произвольный_" + Настройки.ЭлементИдентификатор; + СтраницаСтандартныйПериодИмя = "Период_Страница_Стандартный_" + Настройки.ЭлементИдентификатор; + + ВидПериода = ЭтаФорма[Элемент.Имя]; + Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод") Тогда + + Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаПроизвольныйПериодИмя]; + + ЭтаФорма["Период_Произвольный_Начало_" + Настройки.ЭлементИдентификатор] = Настройки.Пользовательская.Значение.ДатаНачала; + ЭтаФорма["Период_Произвольный_Окончание_" + Настройки.ЭлементИдентификатор] = Настройки.Пользовательская.Значение.ДатаОкончания; + + Иначе + + Элементы[СтраницыИмя].ТекущаяСтраница = Элементы[СтраницаСтандартныйПериодИмя]; + + НачалоПериода = НачалоДня(Настройки.Пользовательская.Значение.ДатаНачала); + + Если НЕ ЗначениеЗаполнено(НачалоПериода) Тогда + НачалоПериода = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()); + КонецЕсли; + + НачалоПериода = ФункцииОтчетовКлиентСервер.НачалоПериодаОтчета(ВидПериода, НачалоПериода); + КонецПериода = ФункцииОтчетовКлиентСервер.КонецПериодаОтчета(ВидПериода, НачалоПериода); + + Настройки.Пользовательская.Значение.ДатаНачала = НачалоПериода; + Настройки.Пользовательская.Значение.ДатаОкончания = КонецПериода; + Настройки.Пользовательская.Использование = Истина; + + Список = ФункцииОтчетовКлиентСервер.ПолучитьСписокПериодов(НачалоПериода, ВидПериода); + ЭлементСписка = Список.НайтиПоЗначению(НачалоПериода); + Если ЭлементСписка <> Неопределено Тогда + ЭтаФорма["Период_Стандартный_Значение_" + Настройки.ЭлементИдентификатор] = ЭлементСписка.Представление; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении(Элемент) + + ЭтаФорма[Элемент.Имя] = НачалоДня(ЭтаФорма[Элемент.Имя]); + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Ложь, Ложь); + Настройки.Пользовательская.Использование = Истина; + Настройки.Пользовательская.Значение.ДатаНачала = ЭтаФорма[Элемент.Имя]; + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении(Элемент) + + ЭтаФорма[Элемент.Имя] = КонецДня(ЭтаФорма[Элемент.Имя]); + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Ложь, Ложь); + Настройки.Пользовательская.Использование = Истина; + Настройки.Пользовательская.Значение.ДатаОкончания = ЭтаФорма[Элемент.Имя]; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - Очистка + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_Значение_Очистка(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - Обработка выбора + +&НаКлиенте +Процедура Подключаемый_ЭлементОтбораКомпоновкиДанных_Таблица_ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + // Контроль уникальности + Сразу можно загружать итоговый список значений в пользовательскую настройку + СтандартнаяОбработка = Ложь; + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Ложь, Ложь); + + Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда + Для Каждого ЭлементМассива Из ВыбранноеЗначение Цикл + Если Настройки.Значение.НайтиПоЗначению(ЭлементМассива) = Неопределено Тогда + Настройки.Значение.Добавить(ЭлементМассива); + КонецЕсли; + КонецЦикла; + Иначе + Если Настройки.Значение.НайтиПоЗначению(ВыбранноеЗначение) = Неопределено Тогда + Настройки.Значение.Добавить(ВыбранноеЗначение); + КонецЕсли; + КонецЕсли; + + Если Настройки.Пользовательская.ПравоеЗначение = Неопределено Тогда + Настройки.Пользовательская.ПравоеЗначение = Новый СписокЗначений; + КонецЕсли; + + Настройки.Пользовательская.ПравоеЗначение.ЗагрузитьЗначения(Настройки.Значение.ВыгрузитьЗначения()); + Настройки.Пользовательская.Использование = Истина; + ЭтаФорма[Настройки.СтрокаКэша.ИмяРеквизитаИспользование] = Истина; + + ЗаполнитьПараметрыВыбора(Настройки.Идентификатор); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - Начало выбора из списка + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_Значение_НачалоВыбораИзСписка(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Ложь, Ложь); + + ВидПериода = ЭтаФорма["Период_ВидПериода_" + Настройки.ЭлементИдентификатор]; + + НачалоПериода = Настройки.Пользовательская.Значение.ДатаНачала; + Если НачалоПериода = '00010101' тогда + НачалоПериода = ФункцииОтчетовКлиентСервер.НачалоПериодаОтчета(ВидПериода, ОбщегоНазначенияКлиент.ДатаСеанса()); + КонецЕсли; + + РезультатВыбора = ВыбратьПериодИзВыпадающегоСписка(Элемент, ВидПериода, НачалоПериода); + + Если РезультатВыбора = Неопределено Тогда + Возврат; + КонецЕсли; + + НачалоПериода = ФункцииОтчетовКлиентСервер.НачалоПериодаОтчета(ВидПериода, РезультатВыбора.Значение); + КонецПериода = ФункцииОтчетовКлиентСервер.КонецПериодаОтчета(ВидПериода, РезультатВыбора.Значение); + + ЭтаФорма[Элемент.Имя] = РезультатВыбора.Представление; + ЭтаФорма["Период_Произвольный_Начало_" + Настройки.ЭлементИдентификатор] = НачалоПериода; + ЭтаФорма["Период_Произвольный_Окончание_" + Настройки.ЭлементИдентификатор] = КонецПериода; + + Настройки.Пользовательская.Значение.ДатаНачала = НачалоПериода; + Настройки.Пользовательская.Значение.ДатаОкончания = КонецПериода; + Настройки.Пользовательская.Использование = Истина; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые - Начало выбора + +&НаКлиенте +Процедура Подключаемый_СтандартныйПериод_Значение_НачалоВыбора(Элемент, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ВыбратьПериодВОтдельнойФорме(Элемент); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СкрытьПоказатьБыстрыеНастройки(Команда) + + СостояниеДоИзменения = Новый Структура("Видимость, ДополнительныйРежимОтображения, Картинка, Текст"); + ЗаполнитьЗначенияСвойств(СостояниеДоИзменения, Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния); + + ДопСвойства = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства; + ДопСвойства.ВидимостьБыстрыхНастроек = НЕ ДопСвойства.ВидимостьБыстрыхНастроек; + ВидимостьДоступностьКорректность("СкрытьПоказатьБыстрыеНастройки"); + + ЗаполнитьЗначенияСвойств(Элементы.ОтчетТабличныйДокумент.ОтображениеСостояния, СостояниеДоИзменения); + +КонецПроцедуры + +&НаКлиенте +Процедура НастроитьОтчет(Команда) + + ПараметрыФормы = Новый Структура; + Для Каждого КлючИЗначение Из ЭтаФормаПараметры Цикл + ПараметрыФормы.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("КлючВарианта", КлючТекущегоВарианта); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("ПредставлениеВарианта", ОтчетНаименованиеТекущегоВарианта); + ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); + + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ОткрытьФорму(КлючОбъекта + ".ФормаНастроек", ПараметрыФормы, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьВариантОтчета(Команда) + + ПараметрыФормы = Новый Структура; + Для Каждого КлючИЗначение Из ЭтаФормаПараметры Цикл + ПараметрыФормы.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + КонецЦикла; + ПараметрыФормы.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыФормы.Вставить("КлючВарианта", КлючТекущегоВарианта); + ПараметрыФормы.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыФормы.Вставить("ПредставлениеВарианта", ОтчетНаименованиеТекущегоВарианта); + ПараметрыФормы.Вставить("ПредставлениеПользовательскихНастроек", ""); + + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ОткрытьФорму(КлючОбъекта + ".ФормаВарианта", ПараметрыФормы, ЭтаФорма); + +КонецПроцедуры + +&НаКлиенте +Процедура СброситьНастройки(Команда) + Если ВариантМодифицирован = Истина Тогда + Предупреждение(НСтр("ru = 'Необходимо сохранить вариант отчета до сброса пользовательских настроек.'")); + Возврат; + КонецЕсли; + + // Заполнение панели быстрых настроек + БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму("СброситьНастройки"); + БыстрыеНастройкиЗаполнить(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОтправитьПоЭлектроннойПочте(Команда) + Если НЕ ФункцииОтчетовКлиентСервер.АктуализироватьТабличныйДокумент(ЭтаФорма, "ОтчетТабличныйДокумент") Тогда + Возврат; + КонецЕсли; + + ТабличныеДокументы = Новый СписокЗначений; + ТабличныеДокументы.Добавить(ЭтаФорма.ОтчетТабличныйДокумент, ЭтаФорма.ОтчетНаименованиеТекущегоВарианта); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ТабличныеДокументы", ТабличныеДокументы); + + ОткрытьФорму("ОбщаяФорма.ОтправкаТабличныхДокументовПоПочте", ПараметрыФормы, , ); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Подключаемые + +&НаКлиенте +Процедура Подключаемый_Команда(Команда) + // Механизмы расширения + Результат = Ложь; + СтандартныеПодсистемыКлиентПереопределяемый.ФормаОтчетаОбработчикКоманды(ЭтаФорма, Команда, Результат); + ФормаОтчетаКлиентПереопределяемый.ОбработчикКоманды(ЭтаФорма, Команда, Результат); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ЭлементОтбораКомпоновкиДанных_Таблица_Подбор(Команда) + + Настройки = СкомпоноватьНастройкиЭлемента(Команда, Ложь, Ложь); + + Если ТипЗнч(Настройки.Значение) <> Тип("СписокЗначений") Тогда + Возврат; + КонецЕсли; + + ПростыеТипы = Новый Массив; + ПростыеТипы.Добавить(Тип("Строка")); + ПростыеТипы.Добавить(Тип("Дата")); + ПростыеТипы.Добавить(Тип("Число")); + + СписокВыбора = Новый СписокЗначений; + + МассивТипов = Настройки.Значение.ТипЗначения.Типы(); + Для Каждого Тип Из МассивТипов Цикл + Если ПростыеТипы.Найти(Тип) = Неопределено Тогда + СписокВыбора.Добавить(Тип, Строка(Тип)); + КонецЕсли; + КонецЦикла; + + Если СписокВыбора.Количество() = 0 Тогда + Возврат; + ИначеЕсли СписокВыбора.Количество() = 1 Тогда + ВыбранныйТип = СписокВыбора[0].Значение; + Иначе + ВыбранныйЭлемент = ВыбратьИзМеню(СписокВыбора, Элементы[Команда.Имя].Родитель); + //ВыбранныйЭлемент = ВыбратьИзМеню(СписокВыбора); + Если ВыбранныйЭлемент = Неопределено Тогда + Возврат; + КонецЕсли; + ВыбранныйТип = ВыбранныйЭлемент.Значение; + КонецЕсли; + + ЭлементЗначение = Элементы.Найти("Отбор_Значение_" + Настройки.ЭлементИдентификатор); + + Найденные = ПутиКФормамОтборов.НайтиСтроки(Новый Структура("Отбор, Тип", Настройки.Идентификатор, ТипЗнч(Неопределено))); + Если Найденные.Количество() = 0 Тогда + Найденные = ПутиКФормамОтборов.НайтиСтроки(Новый Структура("Отбор, Тип", Настройки.Идентификатор, ВыбранныйТип)); + КонецЕсли; + Если Найденные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ПутьКФорме = Найденные[0].ПутьКФорме; + + ПараметрыФормыВыбора = ФункцииОтчетовКлиентСервер.ПолучитьСтруктуруОтборов(ЭтаФорма, Отчет.КомпоновщикНастроек, Настройки.ЭлементИдентификатор, ВыбранныйТип); + // Стандартные параметры формы + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриЗакрытииВладельца", Истина); + ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура); + // Стандартные параметры формы выбора (см. Расширение управляемой формы для динамического списка) + ПараметрыФормыВыбора.Вставить("ВыборГруппИЭлементов", ЭлементЗначение.ВыборГруппИЭлементов); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + // Предполагаемые параметры + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); + ПараметрыФормыВыбора.Вставить("РазрешитьНачалоПеретаскивания", Ложь); + + Для Каждого ПараметрВыбора Из ЭлементЗначение.ПараметрыВыбора Цикл + Если ЗначениеЗаполнено(ПараметрВыбора.Имя) Тогда + Если ВРег(Лев(ПараметрВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + ПараметрыФормыВыбора.Отбор.Вставить(Сред(ПараметрВыбора.Имя, 7), ПараметрВыбора.Значение); + Иначе + ПараметрыФормыВыбора.Вставить(ПараметрВыбора.Имя, ПараметрВыбора.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Для Каждого СвязьПараметраВыбора Из ЭлементЗначение.СвязиПараметровВыбора Цикл + НастройкиВедущего = СкомпоноватьНастройкиЭлемента(СвязьПараметраВыбора.ПутьКДанным, Ложь, Ложь); + Если НастройкиВедущего.Использование И ЗначениеЗаполнено(СвязьПараметраВыбора.Имя) Тогда + Если ВРег(Лев(СвязьПараметраВыбора.Имя, 6)) = ВРег("Отбор.") Тогда + ПараметрыФормыВыбора.Отбор.Вставить(Сред(СвязьПараметраВыбора.Имя, 7), НастройкиВедущего.Значение); + Иначе + ПараметрыФормыВыбора.Вставить(СвязьПараметраВыбора.Имя, НастройкиВедущего.Значение); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ОткрытьФорму(ПутьКФорме, ПараметрыФормыВыбора, Элементы.Найти(Настройки.СтрокаКэша.ИмяРеквизита)); + +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВыбранныеПоляКомпоновкиДанных_ПереместитьВверх(Команда) + Направление = -1; + ПереместитьСтрокуТаблицы(Направление, Команда); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ВыбранныеПоляКомпоновкиДанных_ПереместитьВниз(Команда) + Направление = 1; + ПереместитьСтрокуТаблицы(Направление, Команда); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПорядокКомпоновкиДанных_ПереместитьВверх(Команда) + Направление = -1; + ПереместитьСтрокуТаблицы(Направление, Команда); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПорядокКомпоновкиДанных_ПереместитьВниз(Команда) + Направление = 1; + ПереместитьСтрокуТаблицы(Направление, Команда); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтруктураНастроекКомпоновкиДанных_ПереместитьВверх(Команда) + Направление = -1; + ПереместитьСтрокуТаблицы(Направление, Команда); +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_СтруктураНастроекКомпоновкиДанных_ПереместитьВниз(Команда) + Направление = 1; + ПереместитьСтрокуТаблицы(Направление, Команда); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Клиент + Сервер + +&НаКлиентеНаСервереБезКонтекста +Функция ПривестиИдентификаторКИмени(Идентификатор) + Возврат СтрЗаменить(Строка(Идентификатор), "-", ""); +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция ПривестиИмяКИдентификатору(ЭлементИдентификатор) + + Возврат ( + Сред(ЭлементИдентификатор, 1, 8) + + "-" + + Сред(ЭлементИдентификатор, 9, 4) + + "-" + + Сред(ЭлементИдентификатор, 13, 4) + + "-" + + Сред(ЭлементИдентификатор, 17, 4) + + "-" + + Сред(ЭлементИдентификатор, 21) + ); + +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция НайтиВКэше(КэшНастроекСКД, ИмяРеквизита, ЗначениеРеквизита) + Найденные = КэшНастроекСКД.НайтиСтроки(Новый Структура(ИмяРеквизита, ЗначениеРеквизита)); + Если Найденные.Количество() > 0 Тогда + Возврат Найденные[0]; + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Клиент + +&НаКлиенте +Процедура ИспользованиеПриИзменении(Элемент) + + Настройки = СкомпоноватьНастройкиЭлемента(Элемент, Ложь, Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьПериодВОтдельнойФорме(ЭлементИлиКоманда) + + Настройки = СкомпоноватьНастройкиЭлемента(ЭлементИлиКоманда, Ложь, Ложь); + + ВидПериода = ЭтаФорма["Период_ВидПериода_" + Настройки.ЭлементИдентификатор]; + + МинимальнаяПериодичность = НастройкиОтчета.СоответствиеПериодичностиПараметров[Настройки.Общая.Параметр]; + Если МинимальнаяПериодичность = Неопределено Тогда + МинимальнаяПериодичность = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День"); + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("НачалоПериода", Настройки.Пользовательская.Значение.ДатаНачала); + ПараметрыФормы.Вставить("КонецПериода", Настройки.Пользовательская.Значение.ДатаОкончания); + ПараметрыФормы.Вставить("МинимальныйПериод", МинимальнаяПериодичность); + ПараметрыФормы.Вставить("ВидПериода", ВидПериода); + + РезультатВыбора = ОткрытьФормуМодально("ОбщаяФорма.ВыборПроизвольногоПериода", ПараметрыФормы, ЭтаФорма); + Если РезультатВыбора = Неопределено Тогда + Возврат; + КонецЕсли; + + Если Настройки.Пользовательская.Значение.ДатаНачала = РезультатВыбора.НачалоПериода + И Настройки.Пользовательская.Значение.ДатаОкончания = РезультатВыбора.КонецПериода Тогда + Возврат; + КонецЕсли; + + Настройки.Пользовательская.Значение.ДатаНачала = РезультатВыбора.НачалоПериода; + Настройки.Пользовательская.Значение.ДатаОкончания = РезультатВыбора.КонецПериода; + Настройки.Пользовательская.Использование = Истина; + + Элементы["Период_Страницы_" + Настройки.ЭлементИдентификатор].ТекущаяСтраница = Элементы["Период_Страница_Произвольный_" + Настройки.ЭлементИдентификатор]; + ЭтаФорма["Период_ВидПериода_" + Настройки.ЭлементИдентификатор] = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); + + ЭтаФорма["Период_Произвольный_Начало_" + Настройки.ЭлементИдентификатор] = РезультатВыбора.НачалоПериода; + ЭтаФорма["Период_Произвольный_Окончание_" + Настройки.ЭлементИдентификатор] = РезультатВыбора.КонецПериода; + +КонецПроцедуры + +&НаКлиенте +Функция ВыбратьПериодИзВыпадающегоСписка(Элемент, ВидПериода, НачалоПериода, ЛистаниеВверх = Неопределено) + + СписокВыбора = ФункцииОтчетовКлиентСервер.ПолучитьСписокПериодов(НачалоПериода, ВидПериода); + + Если ЛистаниеВверх = Истина Тогда + НачальноеЗначение = 0; + ИначеЕсли ЛистаниеВверх = Ложь Тогда + НачальноеЗначение = СписокВыбора.Количество() - 1; + Иначе + НачальноеЗначение = СписокВыбора.НайтиПоЗначению(НачалоПериода); + КонецЕсли; + + РезультатВыбора = ВыбратьИзСписка(СписокВыбора, Элемент, НачальноеЗначение); + + Если РезультатВыбора = Неопределено тогда + Возврат Неопределено; + КонецЕсли; + + Индекс = СписокВыбора.Индекс(РезультатВыбора); + Если Индекс = 0 Тогда + Возврат ВыбратьПериодИзВыпадающегоСписка(Элемент, ВидПериода, РезультатВыбора.Значение, Истина); + ИначеЕсли Индекс = СписокВыбора.Количество() - 1 Тогда + Возврат ВыбратьПериодИзВыпадающегоСписка(Элемент, ВидПериода, РезультатВыбора.Значение, Ложь); + КонецЕсли; + + Возврат РезультатВыбора; + +КонецФункции + +&НаКлиенте +Процедура ПереместитьСтрокуТаблицы(Направление, Команда) + + Настройки = СкомпоноватьНастройкиЭлемента(Команда, Ложь, Ложь); + + СтрокаТаблицы = Настройки.Элемент.ТекущиеДанные; + Если СтрокаТаблицы = Неопределено Тогда + Возврат; + КонецЕсли; + ИндексСтроки = Настройки.Значение.Индекс(СтрокаТаблицы); + + Если ИндексСтроки + Направление < 0 ИЛИ ИндексСтроки + Направление >= Настройки.Значение.Количество() Тогда + Возврат; + КонецЕсли; + + СтрокаПользовательскойНастройки = ФункцииОтчетовКлиентСервер.НайтиВложеннуюПользовательскуюНастройку(Настройки.Пользовательская, СтрокаТаблицы.Идентификатор); + Настройки.Пользовательская.Элементы.Сдвинуть(СтрокаПользовательскойНастройки, Направление); + + Настройки.Значение.Сдвинуть(ИндексСтроки, Направление); + +КонецПроцедуры + +&НаКлиенте +Функция СкомпоноватьНастройкиЭлемента(ИмяИлиЭлементИлиКоманда, УстановитьИспользование, УстановитьЗначение) + + Если ТипЗнч(ИмяИлиЭлементИлиКоманда) = Тип("Строка") Тогда + ИмяИнициатора = ИмяИлиЭлементИлиКоманда; + Иначе + ИмяИнициатора = ИмяИлиЭлементИлиКоманда.Имя; + КонецЕсли; + + Настройки = Новый Структура( + "Идентификатор, ЭлементИдентификатор, СтрокаКэша, Пользовательская, Общая, Прочие, + |Использование, Значение, Элемент" + ); + Настройки.ЭлементИдентификатор = Прав(ИмяИнициатора, 32); + Настройки.Идентификатор = ПривестиИмяКИдентификатору(Настройки.ЭлементИдентификатор); + Настройки.СтрокаКэша = НайтиВКэше(КэшНастроекСКД, "Идентификатор", Настройки.Идентификатор); + Настройки.Пользовательская = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ПолучитьОбъектПоИдентификатору(Настройки.СтрокаКэша.Пользовательская); + Настройки.Общая = Настройки.СтрокаКэша.Общая; + + Если ЗначениеЗаполнено(Настройки.СтрокаКэша.ИмяРеквизита) Тогда + Настройки.Значение = ЭтаФорма[Настройки.СтрокаКэша.ИмяРеквизита]; + КонецЕсли; + + Если ЗначениеЗаполнено(Настройки.СтрокаКэша.ИмяЭлемента) Тогда + Настройки.Элемент = Элементы.Найти(Настройки.СтрокаКэша.ИмяЭлемента); + КонецЕсли; + + ИмяРеквизитаИспользование = Настройки.СтрокаКэша.ИмяРеквизитаИспользование; + Если ЗначениеЗаполнено(ИмяРеквизитаИспользование) Тогда + Если УстановитьИспользование И ЭтаФорма.Элементы[ИмяРеквизитаИспользование].ТолькоПросмотр = Ложь Тогда + ЭтаФорма[ИмяРеквизитаИспользование] = ЗначениеЗаполнено(Настройки.Значение); + КонецЕсли; + Настройки.Использование = ЭтаФорма[ИмяРеквизитаИспользование]; + Настройки.Пользовательская.Использование = Настройки.Использование; + Иначе + Настройки.Использование = Истина; + КонецЕсли; + + Если УстановитьЗначение Тогда + ТипОбщейНастройки = ТипЗнч(Настройки.Общая); + Если ТипОбщейНастройки = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + Настройки.Пользовательская.ПравоеЗначение = Настройки.Значение; + ИначеЕсли ТипОбщейНастройки = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + Настройки.Пользовательская.Значение = Настройки.Значение; + КонецЕсли; + КонецЕсли; + + Возврат Настройки; + +КонецФункции + +&НаКлиенте +Функция ВыполнитьКонтекстныйВызовСервера(КлючОперации, ПараметрыОперации) Экспорт // Исключение из стандартов разработки + + Возврат КонтекстныйВызовСервера(КлючОперации, ПараметрыОперации); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера + +&НаСервере +Процедура ВидимостьДоступностьКорректность(Изменения = "") + + // Быстрые настройки + Если Изменения = "" ИЛИ Изменения = "СкрытьПоказатьБыстрыеНастройки" Тогда + Элементы.КомандыВариантовПользовательскихНастроек.Видимость = РежимВариантаОтчета; + Элементы.КомандыВариантовОтчета.Видимость = РежимВариантаОтчета; + Элементы.БыстрыеНастройки.Видимость = РежимВариантаОтчета; + + Если РежимВариантаОтчета Тогда + Если Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Количество() = 0 Тогда + Элементы.КомандыВариантовПользовательскихНастроек.Видимость = Ложь; + Элементы.БыстрыеНастройки.Видимость = Ложь; + Иначе + Элементы.КомандыВариантовПользовательскихНастроек.Видимость = Истина; + ВидимостьБыстрыхНастроек = Неопределено; + Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства.Свойство("ВидимостьБыстрыхНастроек", ВидимостьБыстрыхНастроек); + Если ВидимостьБыстрыхНастроек = Истина Тогда + Элементы.БыстрыеНастройки.Видимость = Истина; + Элементы.СкрытьПоказатьБыстрыеНастройки.Пометка = Истина; + Элементы.СкрытьПоказатьБыстрыеНастройки.Заголовок = НСтр("ru = 'Скрыть быстрые настройки'"); + Иначе + Элементы.БыстрыеНастройки.Видимость = Ложь; + Элементы.СкрытьПоказатьБыстрыеНастройки.Пометка = Ложь; + Элементы.СкрытьПоказатьБыстрыеНастройки.Заголовок = НСтр("ru = 'Показать быстрые настройки'"); + КонецЕсли; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Заголовок + Если Изменения = "" ИЛИ Изменения = "ВариантОтчета" Тогда + ОтчетНаименованиеТекущегоВарианта = СокрЛП(ОтчетНаименованиеТекущегоВарианта); + Если ЗначениеЗаполнено(ОтчетНаименованиеТекущегоВарианта) Тогда + Заголовок = ОтчетНаименованиеТекущегоВарианта; + Иначе + Заголовок = НаименованиеОтчета; + Конецесли; + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиЗагрузитьСхемуИОчиститьФорму(НовыеНастройки, СуффиксФормыИсточникаИзменений = "") + + Если ТипЗнч(НовыеНастройки) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + + ПользовательскиеНастройкиМодифицированы = Истина; + + Если СуффиксФормыИсточникаИзменений = "Варианта" Тогда + ВариантМодифицирован = Истина; + КонецЕсли; + + Если СуффиксФормыИсточникаИзменений = "Настроек" И ВариантМодифицирован = Ложь Тогда + + ПользовательскиеНастройкиКД = НовыеНастройки.ПользовательскиеНастройки; + КэшНастроек = РеквизитФормыВЗначение("КэшНастроекСКД", Тип("ТаблицаЗначений")); + Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл + Идентификатор = ПользовательскиеНастройкиКД.ПолучитьИдентификаторПоОбъекту(ПользовательскаяНастройка); + СтрокаТаблицы = КэшНастроек.Найти(Идентификатор, "Пользовательская"); + Если СтрокаТаблицы = Неопределено Тогда + ВариантМодифицирован = Истина; + Прервать; + КонецЕсли; + КэшНастроек.Удалить(СтрокаТаблицы); + КонецЦикла; + + Если КэшНастроек.Количество() > 0 Тогда + ВариантМодифицирован = Истина; + КонецЕсли; + + КонецЕсли; + + //Отчет.КомпоновщикНастроек = НовыеНастройки; + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройки.Настройки); + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеНастройки.ПользовательскиеНастройки); + + ИначеЕсли ТипЗнч(НовыеНастройки) = Тип("НастройкиКомпоновкиДанных") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(НовыеНастройки); + ИначеЕсли ТипЗнч(НовыеНастройки) = Тип("ПользовательскиеНастройкиКомпоновкиДанных") Тогда + Отчет.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(НовыеНастройки); + ИначеЕсли НовыеНастройки = "СброситьНастройки" Тогда + ОтчетОбъект = РеквизитФормыВЗначение("Отчет"); + ОтчетМетаданные = ОтчетОбъект.Метаданные(); + + // Чтение настроек варианта + КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; + ВариантНастройкиКД = ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек.Найти(КлючТекущегоВарианта); + Если ВариантНастройкиКД = Неопределено Тогда + // Из хранилища + Если ОтчетМетаданные.ХранилищеВариантов = Неопределено Тогда + МенеджерХранилища = ХранилищеВариантовОтчетов; + Иначе + МенеджерХранилища = ХранилищаНастроек[ОтчетМетаданные.ХранилищеВариантов.Имя]; + КонецЕсли; + НастройкиКД = МенеджерХранилища.Загрузить(КлючОбъекта, КлючТекущегоВарианта); + Иначе + // Из метаданных СКД + НастройкиКД = ВариантНастройкиКД.Настройки; + КонецЕсли; + Если НастройкиКД = Неопределено Тогда + НастройкиКД = ОтчетОбъект.СхемаКомпоновкиДанных.НастройкиПоУмолчанию; + КонецЕсли; + + АдресСхемыКД = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, УникальныйИдентификатор); + КомпоновщикНастроекКД.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемыКД)); + КомпоновщикНастроекКД.ЗагрузитьНастройки(НастройкиКД); + + ПользовательскиеНастройкиМодифицированы = Истина; + КонецЕсли; + + // Удаление элементов + УдаляемыеЭлементы = Новый Массив; + ДобавитьПодчиненныеЭлементы(УдаляемыеЭлементы, Элементы.БыстрыеНастройки.ПодчиненныеЭлементы, Истина); + Для Каждого УдаляемыйЭлемент Из УдаляемыеЭлементы Цикл + Элементы.Удалить(УдаляемыйЭлемент); + КонецЦикла; + + // Удаление реквизитов + УдаляемыеРеквизиты = Новый Массив; + НаборРеквизитов = ПолучитьРеквизиты(); + Для Каждого Реквизит Из НаборРеквизитов Цикл + Если ПостоянныеРеквизиты.НайтиПоЗначению(Реквизит.Имя) = Неопределено Тогда + УдаляемыеРеквизиты.Добавить(Реквизит.Имя); + КонецЕсли; + КонецЦикла; + ИзменитьРеквизиты(Новый Массив, УдаляемыеРеквизиты); + + // Удаление команд + УдаляемыеКоманды = Новый Массив; + Для Каждого Команда Из Команды Цикл + Если ПостоянныеКоманды.НайтиПоЗначению(Команда.Имя) = Неопределено Тогда + УдаляемыеКоманды.Добавить(Команда); + КонецЕсли; + КонецЦикла; + Для Каждого Команда Из УдаляемыеКоманды Цикл + Команды.Удалить(Команда); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиЗаполнить() + + // Элементы управления + БыстрыеНастройкиСоздатьЭлементыУправления(); + + // Значения + БыстрыеНастройкиЗагрузитьЗначения(); + + // Связи отборов + ЗаполнитьПараметрыВыбора(); + + // Заголовок + ВидимостьДоступностьКорректность(); + + // Вызов переопределяемого модуля + ФормаОтчетаПереопределяемый.ПослеЗаполненияПанелиБыстрыхНастроек(ЭтаФорма); + +КонецПроцедуры + +&НаСервере +Функция КонтекстныйВызовСервера(КлючОперации, ПараметрыОперации) + + РезультатВызова = Новый Структура; + ФормаОтчетаПереопределяемый.КонтекстныйВызовСервера(ЭтаФорма, КлючОперации, ПараметрыОперации, РезультатВызова); + Возврат РезультатВызова; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Сервер + +&НаСервере +Процедура БыстрыеНастройкиСоздатьЭлементыУправления() + + // Реквизиты + ДобавляемыеРеквизиты = Новый Массив; + ПутиКДанным = Новый СписокЗначений; + ТипыСписковЗначений = Новый Соответствие; + ОбработчикиСобытий = Новый Структура; + + ПутиКФормамОтборов.Очистить(); + + ГрупповыеВидыСравнений = Новый Массив; + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); + + КэшНастроекСКД.Очистить(); + КэшНастроек = РеквизитФормыВЗначение("КэшНастроекСКД", Тип("ТаблицаЗначений")); + + СвязиПоТипу = Новый ТаблицаЗначений; + СвязиПоТипу.Колонки.Добавить("ПодчиненныйИдентификатор"); + СвязиПоТипу.Колонки.Добавить("ВедущийПоле"); + СвязиПоТипу.Колонки.Добавить("НомерСубконто"); + + СвязиПараметровВыбора = Новый ТаблицаЗначений; + СвязиПараметровВыбора.Колонки.Добавить("ПодчиненныйИдентификатор"); + СвязиПараметровВыбора.Колонки.Добавить("ВедущийПоле"); + СвязиПараметровВыбора.Колонки.Добавить("РеквизитСвязи"); + СвязиПараметровВыбора.Колонки.Добавить("Действие"); + + // Связи из метаданных + СвязиОбъектовМетаданных = Новый ТаблицаЗначений; + СвязиОбъектовМетаданных.Колонки.Добавить("ПодчиненныйРеквизит", Новый ОписаниеТипов("Строка")); + СвязиОбъектовМетаданных.Колонки.Добавить("ПодчиненныйТип", Новый ОписаниеТипов("Тип")); + СвязиОбъектовМетаданных.Колонки.Добавить("ВедущийТип", Новый ОписаниеТипов("Тип")); + Для Каждого Подчиненный Из Метаданные.Справочники Цикл + Для Каждого Владелец Из Подчиненный.Владельцы Цикл + СтрокаТаблицы = СвязиОбъектовМетаданных.Добавить(); + СтрокаТаблицы.ПодчиненныйРеквизит = "Отбор.Владелец"; + СтрокаТаблицы.ПодчиненныйТип = Тип(СтрЗаменить(Подчиненный.ПолноеИмя(), ".", "Ссылка.")); + СтрокаТаблицы.ВедущийТип = Тип(СтрЗаменить(Владелец.ПолноеИмя(), ".", "Ссылка.")); + КонецЦикла; + КонецЦикла; + ФормаОтчетаПереопределяемый.ДополнитьСвязиОбъектовМетаданных(СвязиОбъектовМетаданных); + СвязиОбъектовМетаданных.Колонки.Добавить("ПодчиненныйНайденВСКД", Новый ОписаниеТипов("Булево")); + СвязиОбъектовМетаданных.Колонки.Добавить("ПодчиненныйМассивИдентификаторов", Новый ОписаниеТипов("Массив")); + СвязиОбъектовМетаданных.Колонки.Добавить("ВедущийНайденВСКД", Новый ОписаниеТипов("Булево")); + СвязиОбъектовМетаданных.Колонки.Добавить("ВедущийМассивИдентификаторов", Новый ОписаниеТипов("Массив")); + + СписокОтборов = Новый ТаблицаЗначений; + СписокОтборов.Колонки.Добавить("ИдентификаторОтбора"); + СписокОтборов.Колонки.Добавить("ИдентификаторОбъекта"); + СписокОтборов.Колонки.Добавить("Тип"); + СписокОтборов.Колонки.Добавить("Поле"); + + КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; + ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + НастройкиКД = КомпоновщикНастроекКД.ПолучитьНастройки(); + + ШаблонТаблицы = Новый Структура; + ШаблонТаблицы.Вставить("Отображение", ОтображениеТаблицы.Список); + ШаблонТаблицы.Вставить("ПоложениеЗаголовка", ПоложениеЗаголовкаЭлементаФормы.Нет); + ШаблонТаблицы.Вставить("ПоложениеКоманднойПанели", ПоложениеКоманднойПанелиЭлементаФормы.Нет); + ШаблонТаблицы.Вставить("ВертикальныеЛинии", Ложь); + ШаблонТаблицы.Вставить("ГоризонтальныеЛинии", Ложь); + ШаблонТаблицы.Вставить("Шапка", Ложь); + ШаблонТаблицы.Вставить("Подвал", Ложь); + ШаблонТаблицы.Вставить("ИзменятьПорядокСтрок", Истина); + ШаблонТаблицы.Вставить("РастягиватьПоГоризонтали", Истина); + ШаблонТаблицы.Вставить("РастягиватьПоВертикали", Истина); + ШаблонТаблицы.Вставить("Высота", 3); + + ШаблонГруппыСФлажками = Новый Структура; + ШаблонГруппыСФлажками.Вставить("Вид", ВидГруппыФормы.ОбычнаяГруппа); + ШаблонГруппыСФлажками.Вставить("Группировка", ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная); + ШаблонГруппыСФлажками.Вставить("Отображение", ОтображениеОбычнойГруппы.Линия); + ШаблонГруппыСФлажками.Вставить("ОтображатьЗаголовок", Истина); + ШаблонГруппыСФлажками.Вставить("РастягиватьПоГоризонтали", Истина); + + ШаблонПоляВводаПроизвольногоПериода = Новый Структура; + ШаблонПоляВводаПроизвольногоПериода.Вставить("Вид", ВидПоляФормы.ПолеВвода); + ШаблонПоляВводаПроизвольногоПериода.Вставить("РастягиватьПоГоризонтали", Истина); + ШаблонПоляВводаПроизвольногоПериода.Вставить("КнопкаВыбора", Истина); + ШаблонПоляВводаПроизвольногоПериода.Вставить("КнопкаОткрытия", Ложь); + ШаблонПоляВводаПроизвольногоПериода.Вставить("КнопкаОчистки", Ложь); + ШаблонПоляВводаПроизвольногоПериода.Вставить("КнопкаРегулирования", Ложь); + ШаблонПоляВводаПроизвольногоПериода.Вставить("КнопкаСпискаВыбора", Ложь); + ШаблонПоляВводаПроизвольногоПериода.Вставить("РедактированиеТекста", Истина); + + Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл + + Идентификатор = ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки; + ЭлементИдентификатор = ПривестиИдентификаторКИмени(Идентификатор); + + СтрокаКэша = КэшНастроек.Добавить(); + СтрокаКэша.Идентификатор = Идентификатор; + СтрокаКэша.Представление = Заголовок; + СтрокаКэша.Пользовательская = ПользовательскиеНастройкиКД.ПолучитьИдентификаторПоОбъекту(ПользовательскаяНастройка); + + ОбщаяНастройка = ФункцииОтчетовКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору(НастройкиКД, Идентификатор); + Если ОбщаяНастройка = Неопределено + ИЛИ ОбщаяНастройка.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + Продолжить; + КонецЕсли; + + ТипОбщейНастройки = ТипЗнч(ОбщаяНастройка); + + Если ТипОбщейНастройки = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + СтрокаКэша.ЭтоОтбор = Истина; + СтрокаКэша.ПолеКД = ОбщаяНастройка.ЛевоеЗначение; + СтрокаКэша.Общая = ОбщаяНастройка; + ДоступнаяНастройка = ФункцииОтчетовКлиентСервер.ПолучитьДоступноеПоле(НастройкиКД.ДоступныеПоляОтбора, ОбщаяНастройка.ЛевоеЗначение); + ИначеЕсли ТипОбщейНастройки = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + СтрокаКэша.ЭтоПараметр = Истина; + СтрокаКэша.ПолеКД = Новый ПолеКомпоновкиДанных("ПараметрыДанных." + Строка(ОбщаяНастройка.Параметр)); + СтрокаКэша.Общая = ОбщаяНастройка; + ДоступнаяНастройка = ФункцииОтчетовКлиентСервер.ПолучитьДоступныйПараметр(НастройкиКД.ПараметрыДанных.ДоступныеПараметры, ОбщаяНастройка.Параметр); + Иначе + ДоступнаяНастройка = Неопределено; + КонецЕсли; + + // Переменные цикла + ПараметрыВыбора = Новый Массив; + + // Связи - Объявление + Если ДоступнаяНастройка <> Неопределено Тогда + + Если ЗначениеЗаполнено(ДоступнаяНастройка.СвязьПоТипу) Тогда + + СтрокаСвязи = СвязиПоТипу.Добавить(); + СтрокаСвязи.ПодчиненныйИдентификатор = Идентификатор; + СтрокаСвязи.ВедущийПоле = ДоступнаяНастройка.СвязьПоТипу.Поле; + СтрокаСвязи.НомерСубконто = ДоступнаяНастройка.СвязьПоТипу.ЭлементСвязи; + + КонецЕсли; + + Для Каждого СтрокаСвязи Из ДоступнаяНастройка.ПолучитьСвязиПараметровВыбора() Цикл + + СтрокаСвязиПараметров = СвязиПараметровВыбора.Добавить(); + СтрокаСвязиПараметров.ПодчиненныйИдентификатор = Идентификатор; + СтрокаСвязиПараметров.ВедущийПоле = СтрокаСвязи.Поле; + СтрокаСвязиПараметров.РеквизитСвязи = СтрокаСвязи.Имя; + СтрокаСвязиПараметров.Действие = СтрокаСвязи.ИзменениеЗначения; + + КонецЦикла; + + Для Каждого ПараметрВыбораКД Из ДоступнаяНастройка.ПолучитьПараметрыВыбора() Цикл + ПараметрыВыбора.Добавить(Новый ПараметрВыбора(ПараметрВыбораКД.Имя, ПараметрВыбораКД.Значение)); + КонецЦикла; + + КонецЕсли; + + СменитьТипНаГруппуЭлементовОтбора = Ложь; + + // Заголовок настройки + СтруктураПредставлений = Новый Структура("Представление, ПредставлениеПользовательскойНастройки"); + ЗаполнитьЗначенияСвойств(СтруктураПредставлений, ОбщаяНастройка); + Если ЗначениеЗаполнено(СтруктураПредставлений.ПредставлениеПользовательскойНастройки) Тогда + ЭлементЗаголовок = СтруктураПредставлений.ПредставлениеПользовательскойНастройки; + ИначеЕсли ЗначениеЗаполнено(СтруктураПредставлений.Представление) Тогда + ЭлементЗаголовок = СтруктураПредставлений.Представление; + СменитьТипНаГруппуЭлементовОтбора = Истина; + ИначеЕсли ДоступнаяНастройка <> Неопределено И ЗначениеЗаполнено(ДоступнаяНастройка.Заголовок) Тогда + ЭлементЗаголовок = ДоступнаяНастройка.Заголовок; + Иначе + ЭлементЗаголовок = ""; + КонецЕсли; + ЭлементЗаголовок = СокрЛП(ЭлементЗаголовок); + + Если ТипОбщейНастройки = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + ИЛИ СменитьТипНаГруппуЭлементовОтбора Тогда + + ИспользованиеИмя = "ГруппаОтбора_Использование_" + ЭлементИдентификатор; + + // Реквизиты + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИспользованиеИмя, Новый ОписаниеТипов("Булево"))); + + // Связь реквизитов с элементами + ПутиКДанным.Добавить(ИспользованиеИмя, ИспользованиеИмя); + + // Имена реквизитов + СтрокаКэша.ИмяРеквизитаИспользование = ИспользованиеИмя; + СтрокаКэша.ИмяРеквизита = ИспользованиеИмя; + СтрокаКэша.ИмяЭлемента = ИспользованиеИмя; + + // Флажок + ИспользованиеОтбора = Элементы.Добавить(ИспользованиеИмя, Тип("ПолеФормы"), Элементы.ГруппыОтборов); + ИспользованиеОтбора.Вид = ВидПоляФормы.ПолеФлажка; + ИспользованиеОтбора.Заголовок = ЭлементЗаголовок; + ИспользованиеОтбора.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + ИспользованиеОтбора.УстановитьДействие("ПриИзменении", "Подключаемый_ГруппаЭлементовОтбораКомпоновкиДанных_Использование_ПриИзменении"); + + ИначеЕсли ТипОбщейНастройки = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + + ЭтоГрупповойВидСравнения = (ГрупповыеВидыСравнений.Найти(ОбщаяНастройка.ВидСравнения) <> Неопределено); + + ВычитаемыеТипы = Новый Массив; + ДоступнаяНастройкаТипы = ДоступнаяНастройка.ТипЗначения.Типы(); + Для Каждого Тип Из ДоступнаяНастройкаТипы Цикл + Если Тип = Тип("ПолеКомпоновкиДанных") Тогда + ВычитаемыеТипы.Добавить(Тип); + КонецЕсли; + ЗарегистрироватьСвязиВедущихИПодчиненных(СвязиОбъектовМетаданных, Тип, Идентификатор); + Если ЭтоГрупповойВидСравнения Тогда + ОбъектМетаданных = Метаданные.НайтиПоТипу(Тип); + Если ОбъектМетаданных <> Неопределено Тогда + СтрокаОтбора = ПутиКФормамОтборов.Добавить(); + СтрокаОтбора.Отбор = Идентификатор; + СтрокаОтбора.Тип = Тип; + СтрокаОтбора.ПутьКФорме = ОбъектМетаданных.ПолноеИмя() + ".ФормаВыбора"; + КонецЕсли; + КонецЕсли; + КонецЦикла; + ОтборОписаниеТипов = Новый ОписаниеТипов(ДоступнаяНастройка.ТипЗначения, , ВычитаемыеТипы); + + ИспользованиеОтбораИмя = "ИспользованиеОтбора_" + ЭлементИдентификатор; + ОтборИмя = "Отбор_" + ЭлементИдентификатор; + + // Реквизиты + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИспользованиеОтбораИмя, Новый ОписаниеТипов("Булево"))); + Если ЭтоГрупповойВидСравнения Тогда + ТипыСписковЗначений.Вставить("Отбор_" + ЭлементИдентификатор, ОтборОписаниеТипов); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ОтборИмя, Новый ОписаниеТипов("СписокЗначений"))); + Иначе + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ОтборИмя, ОтборОписаниеТипов)); + КонецЕсли; + + // Связь реквизитов с элементами + ПутиКДанным.Добавить(ИспользованиеОтбораИмя, ИспользованиеОтбораИмя); + ПутиКДанным.Добавить(ОтборИмя, ОтборИмя); + + // Имена реквизитов + СтрокаКэша.ИмяРеквизитаИспользование = ИспользованиеОтбораИмя; + СтрокаКэша.ИмяРеквизита = ОтборИмя; + + // Элементы и группы + Если ЭтоГрупповойВидСравнения Тогда + + ОтборЗначениеИмя = "Отбор_Значение_" + ЭлементИдентификатор; + + ПутиКДанным.Добавить(ОтборЗначениеИмя, ОтборИмя + ".Значение"); + + СтрокаКэша.ИмяЭлемента = ОтборЗначениеИмя; + + КомандаПодбор = Команды.Добавить("Подбор_" + ЭлементИдентификатор); + КомандаПодбор.Действие = "Подключаемый_ЭлементОтбораКомпоновкиДанных_Таблица_Подбор"; + КомандаПодбор.Заголовок = НСтр("ru = 'Подбор'"); + КомандаПодбор.Отображение = ОтображениеКнопки.Текст; + + ГруппаОтбора = Элементы.Добавить("ГруппаОтбора_" + ЭлементИдентификатор, Тип("ГруппаФормы"), Элементы.СпискиОтборов); + ГруппаОтбора.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаОтбора.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ГруппаОтбора.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаОтбора.Заголовок = ЭлементЗаголовок; + ГруппаОтбора.ОтображатьЗаголовок = Ложь; + + ГруппаПанелиОтбора = Элементы.Добавить("ГруппаПанелиОтбора_" + ЭлементИдентификатор, Тип("ГруппаФормы"), ГруппаОтбора); + ГруппаПанелиОтбора.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаПанелиОтбора.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаПанелиОтбора.Отображение = ОтображениеОбычнойГруппы.Нет; + ГруппаПанелиОтбора.ОтображатьЗаголовок = Ложь; + + ФлажокИспользование = Элементы.Добавить(ИспользованиеОтбораИмя, Тип("ПолеФормы"), ГруппаПанелиОтбора); + ФлажокИспользование.Вид = ВидПоляФормы.ПолеФлажка; + ФлажокИспользование.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + ФлажокИспользование.Заголовок = ЭлементЗаголовок + ":"; + ФлажокИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_ЭлементОтбораКомпоновкиДанных_Использование_ПриИзменении"); + Если ОбщаяНастройка.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке + ИЛИ ОбщаяНастройка.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии Тогда + ФлажокИспользование.Заголовок = ЭлементЗаголовок + " (" + НСтр("ru = 'за исключением выбранных'") + "):"; + КонецЕсли; + + ПанельКнопокОтбора = Элементы.Добавить("ПанельКнопокОтбора_" + ЭлементИдентификатор, Тип("ГруппаФормы"), ГруппаПанелиОтбора); + ПанельКнопокОтбора.Вид = ВидГруппыФормы.КоманднаяПанель; + ПанельКнопокОтбора.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право; + + КнопкаПодбор = Элементы.Добавить("Подбор_" + ЭлементИдентификатор, Тип("КнопкаФормы"), ПанельКнопокОтбора); + КнопкаПодбор.ИмяКоманды = "Подбор_" + ЭлементИдентификатор; + + ТаблицаОтбора = Элементы.Добавить(ОтборИмя, Тип("ТаблицаФормы"), ГруппаОтбора); + ЗаполнитьЗначенияСвойств(ТаблицаОтбора, ШаблонТаблицы); + + СобытияТаблицы = Новый Структура; + СобытияТаблицы.Вставить("ПриИзменении", "Подключаемый_ЭлементОтбораКомпоновкиДанных_Таблица_ПриИзменении"); + СобытияТаблицы.Вставить("ОбработкаВыбора", "Подключаемый_ЭлементОтбораКомпоновкиДанных_Таблица_ОбработкаВыбора"); + ОбработчикиСобытий.Вставить(ОтборИмя, СобытияТаблицы); + + КолонкаЗначение = Элементы.Добавить(ОтборЗначениеИмя, Тип("ПолеФормы"), ТаблицаОтбора); + КолонкаЗначение.Вид = ВидПоляФормы.ПолеВвода; + + ЗаполнитьЗначенияСвойств(КолонкаЗначение, ДоступнаяНастройка, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); + + Если ЗначениеЗаполнено(ДоступнаяНастройка.ФормаВыбора) Тогда + СтрокаОтбора = ПутиКФормамОтборов.Добавить(); + СтрокаОтбора.Отбор = Идентификатор; + СтрокаОтбора.Тип = ТипЗнч(Неопределено); + СтрокаОтбора.ПутьКФорме = ДоступнаяНастройка.ФормаВыбора; + КонецЕсли; + + Если ПараметрыВыбора.Количество() > 0 Тогда + КолонкаЗначение.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора); + КонецЕсли; + + Иначе + + СтрокаКэша.ИмяЭлемента = ОтборИмя; + + // Элементы + ФлажокИспользование = Элементы.Добавить(ИспользованиеОтбораИмя, Тип("ПолеФормы"), Элементы.ЛевоеЗначение); + ФлажокИспользование.Вид = ВидПоляФормы.ПолеФлажка; + ФлажокИспользование.Заголовок = ЭлементЗаголовок + ":"; + ФлажокИспользование.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + ФлажокИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_ЭлементОтбораКомпоновкиДанных_Использование_ПриИзменении"); + + //Элементы.ЛевоеЗначениеОтбора.Ширина = Макс(СтрДлина(ЭлементЗаголовок), Элементы.ЛевоеЗначениеОтбора.Ширина);//Мин(, 20); + + ЗначениеОтбора = Элементы.Добавить(ОтборИмя, Тип("ПолеФормы"), Элементы.ПравоеЗначение); + ЗначениеОтбора.Вид = ВидПоляФормы.ПолеВвода; + ЗначениеОтбора.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + //ЗначениеОтбора.РастягиватьПоГоризонтали = Истина; + //ЗначениеОтбора.РастягиватьПоВертикали = Ложь; + ////ЗначениеОтбора.РастягиватьПоВертикали = Ложь; + ЗначениеОтбора.КнопкаВыбора = Истина; + ЗначениеОтбора.КнопкаОткрытия = Ложь; + ЗначениеОтбора.КнопкаОчистки = Истина; + ЗначениеОтбора.КнопкаРегулирования = Ложь; + ЗначениеОтбора.КнопкаСпискаВыбора = Ложь; + //ЗначениеОтбора.Ширина = ?(ДоступнаяНастройка.ТипЗначения.СодержитТип(Тип("Дата")), 24, 20); + ЗначениеОтбора.УстановитьДействие("ПриИзменении", "Подключаемый_ЭлементОтбораКомпоновкиДанных_Значение_ПриИзменении"); + + ЗаполнитьЗначенияСвойств(ЗначениеОтбора, ДоступнаяНастройка, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); + + Если ПараметрыВыбора.Количество() > 0 Тогда + ЗначениеОтбора.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора); + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ТипОбщейНастройки = Тип("ГруппировкаКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("ТаблицаКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("ГруппировкаТаблицыКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("ДиаграммаКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + + ИспользованиеЭлементаСтруктурыИмя = "ИспользованиеЭлементаСтруктуры_" + ЭлементИдентификатор; + + // Реквизиты + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИспользованиеЭлементаСтруктурыИмя, Новый ОписаниеТипов("Булево"))); + + // Связь реквизитов с элементами + ПутиКДанным.Добавить(ИспользованиеЭлементаСтруктурыИмя, ИспользованиеЭлементаСтруктурыИмя); + + // Имена реквизитов + СтрокаКэша.ИмяРеквизитаИспользование = ИспользованиеЭлементаСтруктурыИмя; + СтрокаКэша.ИмяРеквизита = ИспользованиеЭлементаСтруктурыИмя; + СтрокаКэша.ИмяЭлемента = ИспользованиеЭлементаСтруктурыИмя; + + // Элементы + ИспользованиеГруппировки = Элементы.Добавить(ИспользованиеЭлементаСтруктурыИмя, Тип("ПолеФормы"), Элементы.Группировки); + ИспользованиеГруппировки.Вид = ВидПоляФормы.ПолеФлажка; + ИспользованиеГруппировки.Заголовок = ЭлементЗаголовок; + ИспользованиеГруппировки.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + ИспользованиеГруппировки.УстановитьДействие("ПриИзменении", "Подключаемый_Группировки_Использование_ПриИзменении"); + + ИначеЕсли ТипОбщейНастройки = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда + + Если НЕ ЗначениеЗаполнено(ЭлементЗаголовок) Тогда + ЭлементЗаголовок = Строка(ОбщаяНастройка.Оформление); + КонецЕсли; + + УсловноеОформлениеИмя = "УсловноеОформление_" + ЭлементИдентификатор; + + // Реквизиты + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(УсловноеОформлениеИмя, Новый ОписаниеТипов("Булево"))); + + // Связь реквизитов с элементами + ПутиКДанным.Добавить(УсловноеОформлениеИмя, УсловноеОформлениеИмя); + + // Имена реквизитов + СтрокаКэша.ИмяРеквизитаИспользование = УсловноеОформлениеИмя; + СтрокаКэша.ИмяРеквизита = УсловноеОформлениеИмя; + СтрокаКэша.ИмяЭлемента = УсловноеОформлениеИмя; + + // Элементы + ФлагУсловногоОформления = Элементы.Добавить(УсловноеОформлениеИмя, Тип("ПолеФормы"), Элементы.Оформления); + ФлагУсловногоОформления.Вид = ВидПоляФормы.ПолеФлажка; + ФлагУсловногоОформления.Заголовок = ЭлементЗаголовок; + ФлагУсловногоОформления.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + ФлагУсловногоОформления.УстановитьДействие("ПриИзменении", "Подключаемый_ЭлементУсловногоОформленияКомпоновкиДанных_Использование_ПриИзменении"); + + ИначеЕсли ТипОбщейНастройки = Тип("ВыбранныеПоляКомпоновкиДанных") Тогда + + ТаблицаИмя = "ТаблицаПолейВыбора_" + ЭлементИдентификатор; + КолонкаИспользованиеИмя = "ТаблицаПолейВыбора_Использование_" + ЭлементИдентификатор; + КолонкаПредставлениеИмя = "ТаблицаПолейВыбора_Представление_" + ЭлементИдентификатор; + КомандаПереместитьВверхИмя = "ТаблицаПолейВыбора_ПереместитьВверх_" + ЭлементИдентификатор; + КомандаПереместитьВнизИмя = "ТаблицаПолейВыбора_ПереместитьВниз_" + ЭлементИдентификатор; + + // Реквизиты + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ТаблицаИмя, Новый ОписаниеТипов("ТаблицаЗначений"))); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ТаблицаИмя)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Использование", Новый ОписаниеТипов("Булево"), ТаблицаИмя)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ТаблицаИмя)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИдентификаторРодителя", Новый ОписаниеТипов("Строка"), ТаблицаИмя)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоГруппа", Новый ОписаниеТипов("Булево"), ТаблицаИмя)); + + // Связь реквизитов с элементами + ПутиКДанным.Добавить(ТаблицаИмя, ТаблицаИмя); + ПутиКДанным.Добавить(КолонкаИспользованиеИмя, ТаблицаИмя + ".Использование"); + ПутиКДанным.Добавить(КолонкаПредставлениеИмя, ТаблицаИмя + ".Представление"); + + // Имена реквизитов + СтрокаКэша.ИмяРеквизитаИспользование = ""; + СтрокаКэша.ИмяРеквизита = ТаблицаИмя; + СтрокаКэша.ИмяЭлемента = ТаблицаИмя; + + // Команды + КомандаПереместитьВверх = Команды.Добавить(КомандаПереместитьВверхИмя); + КомандаПереместитьВверх.Действие = "Подключаемый_ВыбранныеПоляКомпоновкиДанных_ПереместитьВверх"; + КомандаПереместитьВверх.Картинка = БиблиотекаКартинок.ПереместитьВверх; + КомандаПереместитьВверх.Отображение = ОтображениеКнопки.Картинка; + + КомандаПереместитьВниз = Команды.Добавить(КомандаПереместитьВнизИмя); + КомандаПереместитьВниз.Действие = "Подключаемый_ВыбранныеПоляКомпоновкиДанных_ПереместитьВниз"; + КомандаПереместитьВниз.Картинка = БиблиотекаКартинок.ПереместитьВниз; + КомандаПереместитьВниз.Отображение = ОтображениеКнопки.Картинка; + + // Группы и элементы + Группа = Элементы.Добавить("ГруппаПолейВыбора_" + ЭлементИдентификатор, Тип("ГруппаФормы"), Элементы.ВыбранныеПоля); + ЗаполнитьЗначенияСвойств(Группа, ШаблонГруппыСФлажками); + Группа.Заголовок = ЭлементЗаголовок + ":"; + + ТаблицаПолейВыбора = Элементы.Добавить(ТаблицаИмя, Тип("ТаблицаФормы"), Группа); + ЗаполнитьЗначенияСвойств(ТаблицаПолейВыбора, ШаблонТаблицы); + ТаблицаПолейВыбора.ИзменятьСоставСтрок = Ложь; + + КолонкаИспользование = Элементы.Добавить(КолонкаИспользованиеИмя, Тип("ПолеФормы"), ТаблицаПолейВыбора); + КолонкаИспользование.Вид = ВидПоляФормы.ПолеФлажка; + КолонкаИспользование.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; + КолонкаИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_ВыбранныеПоляКомпоновкиДанных_КолонкаИспользование_ПриИзменении"); + + КолонкаПредставление = Элементы.Добавить(КолонкаПредставлениеИмя, Тип("ПолеФормы"), ТаблицаПолейВыбора); + КолонкаПредставление.Вид = ВидПоляФормы.ПолеВвода; + КолонкаПредставление.ТолькоПросмотр = Истина; + + // Командная панель + ТаблицаКоманднаяПанель = Элементы.Добавить(ТаблицаИмя + "_КоманднаяПанель", Тип("ГруппаФормы"), Группа); + ТаблицаКоманднаяПанель.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ТаблицаКоманднаяПанель.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ТаблицаКоманднаяПанель.Отображение = ОтображениеОбычнойГруппы.Нет; + ТаблицаКоманднаяПанель.ОтображатьЗаголовок = Ложь; + + // Кнопки + КнопкаПереместитьВверх = Элементы.Добавить(КомандаПереместитьВверхИмя, Тип("КнопкаФормы"), ТаблицаКоманднаяПанель); + КнопкаПереместитьВверх.ИмяКоманды = КомандаПереместитьВверхИмя; + КнопкаПереместитьВверх.Заголовок = НСтр("ru = 'Переместить группировку вверх'"); + + КнопкаПереместитьВниз = Элементы.Добавить(КомандаПереместитьВнизИмя, Тип("КнопкаФормы"), ТаблицаКоманднаяПанель); + КнопкаПереместитьВниз.ИмяКоманды = КомандаПереместитьВнизИмя; + КнопкаПереместитьВниз.Заголовок = НСтр("ru = 'Переместить группировку вниз'"); + + // Условное оформление для групп + ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформления.Использование = Истина; + + ОтборОформления = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ОтборОформления.Использование = Истина; + ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ТаблицаИмя + ".ЭтоГруппа"); + ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ОтборОформления.ПравоеЗначение = Истина; + + ПолеОформление = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); + ПолеОформление.Использование = Истина; + ПолеОформление.Поле = Новый ПолеКомпоновкиДанных(ТаблицаИмя); + + ШрифтОформления = ЭлементУсловногоОформления.Оформление.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Шрифт")); + ШрифтОформления.Значение = Новый Шрифт(ШрифтОформления.Значение, , , Истина, , Истина, ); + ШрифтОформления.Использование = Истина; + + ИначеЕсли ТипОбщейНастройки = Тип("ПорядокКомпоновкиДанных") Тогда + + ТаблицаИмя = "ТаблицаПорядка_" + ЭлементИдентификатор; + КолонкаИспользованиеИмя = "ТаблицаПорядка_Использование_" + ЭлементИдентификатор; + КолонкаПредставлениеИмя = "ТаблицаПорядка_Представление_" + ЭлементИдентификатор; + КомандаПереместитьВверхИмя = "ТаблицаПорядка_ПереместитьВверх_" + ЭлементИдентификатор; + КомандаПереместитьВнизИмя = "ТаблицаПорядка_ПереместитьВниз_" + ЭлементИдентификатор; + + // Реквизиты + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ТаблицаИмя, Новый ОписаниеТипов("ТаблицаЗначений"))); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Использование", Новый ОписаниеТипов("Булево"), ТаблицаИмя)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ТаблицаИмя)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ТаблицаИмя)); + + // Связь реквизитов с элементами + ПутиКДанным.Добавить(ТаблицаИмя, ТаблицаИмя); + ПутиКДанным.Добавить(КолонкаИспользованиеИмя, ТаблицаИмя + ".Использование"); + ПутиКДанным.Добавить(КолонкаПредставлениеИмя, ТаблицаИмя + ".Представление"); + + // Имена реквизитов + СтрокаКэша.ИмяРеквизитаИспользование = ""; + СтрокаКэша.ИмяРеквизита = ТаблицаИмя; + СтрокаКэша.ИмяЭлемента = ТаблицаИмя; + + // Команды + КомандаПереместитьВверх = Команды.Добавить(КомандаПереместитьВверхИмя); + КомандаПереместитьВверх.Действие = "Подключаемый_ПорядокКомпоновкиДанных_ПереместитьВверх"; + КомандаПереместитьВверх.Картинка = БиблиотекаКартинок.ПереместитьВверх; + КомандаПереместитьВверх.Отображение = ОтображениеКнопки.Картинка; + + КомандаПереместитьВверх = Команды.Добавить(КомандаПереместитьВнизИмя); + КомандаПереместитьВверх.Действие = "Подключаемый_ПорядокКомпоновкиДанных_ПереместитьВниз"; + КомандаПереместитьВверх.Картинка = БиблиотекаКартинок.ПереместитьВниз; + КомандаПереместитьВверх.Отображение = ОтображениеКнопки.Картинка; + + // Группы и элементы + Группа = Элементы.Добавить("ГруппаПорядка_" + ЭлементИдентификатор, Тип("ГруппаФормы"), Элементы.Порядки); + ЗаполнитьЗначенияСвойств(Группа, ШаблонГруппыСФлажками); + Группа.Заголовок = ЭлементЗаголовок + ":"; + + ТаблицаПолейВыбора = Элементы.Добавить(ТаблицаИмя, Тип("ТаблицаФормы"), Группа); + ЗаполнитьЗначенияСвойств(ТаблицаПолейВыбора, ШаблонТаблицы); + ТаблицаПолейВыбора.ИзменятьСоставСтрок = Ложь; + + КолонкаИспользование = Элементы.Добавить(КолонкаИспользованиеИмя, Тип("ПолеФормы"), ТаблицаПолейВыбора); + КолонкаИспользование.Вид = ВидПоляФормы.ПолеФлажка; + КолонкаИспользование.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; + КолонкаИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_ПорядокКомпоновкиДанных_КолонкаИспользование_ПриИзменении"); + + КолонкаПредставление = Элементы.Добавить(КолонкаПредставлениеИмя, Тип("ПолеФормы"), ТаблицаПолейВыбора); + КолонкаПредставление.Вид = ВидПоляФормы.ПолеВвода; + КолонкаПредставление.ТолькоПросмотр = Истина; + + // Командная панель + ТаблицаКоманднаяПанель = Элементы.Добавить("ТаблицаПорядка_КоманднаяПанель_" + ЭлементИдентификатор, Тип("ГруппаФормы"), Группа); + ТаблицаКоманднаяПанель.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ТаблицаКоманднаяПанель.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ТаблицаКоманднаяПанель.Отображение = ОтображениеОбычнойГруппы.Нет; + ТаблицаКоманднаяПанель.ОтображатьЗаголовок = Ложь; + + // Кнопки + КнопкаВверх = Элементы.Добавить(КомандаПереместитьВверхИмя, Тип("КнопкаФормы"), ТаблицаКоманднаяПанель); + КнопкаВверх.ИмяКоманды = КомандаПереместитьВверхИмя; + КнопкаВверх.Заголовок = НСтр("ru = 'Переместить строку вверх'"); + + КнопкаВниз = Элементы.Добавить(КомандаПереместитьВнизИмя, Тип("КнопкаФормы"), ТаблицаКоманднаяПанель); + КнопкаВниз.ИмяКоманды = КомандаПереместитьВнизИмя; + КнопкаВниз.Заголовок = НСтр("ru = 'Переместить строку вниз'"); + + ИначеЕсли ТипОбщейНастройки = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + + Если ТипЗнч(ПользовательскаяНастройка.Значение) = Тип("СтандартныйПериод") Тогда + + ВидПериодаИмя = "Период_ВидПериода_" + ЭлементИдентификатор; + ПериодИмя = "Период_Стандартный_Значение_" + ЭлементИдентификатор; + ПериодНачалоИмя = "Период_Произвольный_Начало_" + ЭлементИдентификатор; + ПериодОкончаниеИмя = "Период_Произвольный_Окончание_" + ЭлементИдентификатор; + + // Реквизиты + ОписаниеТипаДата = Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ВидПериодаИмя, Новый ОписаниеТипов("ПеречислениеСсылка.ДоступныеПериодыОтчета"))); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ПериодИмя, Новый ОписаниеТипов("Строка"))); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ПериодНачалоИмя, ОписаниеТипаДата)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ПериодОкончаниеИмя, ОписаниеТипаДата)); + + // Связь реквизитов с элементами + ПутиКДанным.Добавить(ВидПериодаИмя, ВидПериодаИмя); + ПутиКДанным.Добавить(ПериодИмя, ПериодИмя); + ПутиКДанным.Добавить(ПериодНачалоИмя, ПериодНачалоИмя); + ПутиКДанным.Добавить(ПериодОкончаниеИмя, ПериодОкончаниеИмя); + + // Основная Группа + ОсновнаяГруппа = Элементы.Добавить("ГруппаПериод_" + ЭлементИдентификатор, Тип("ГруппаФормы"), Элементы.Периоды); + ОсновнаяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ОсновнаяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ОсновнаяГруппа.Отображение = ОтображениеОбычнойГруппы.Нет; + ОсновнаяГруппа.ОтображатьЗаголовок = Ложь; + //ОсновнаяГруппа.Заголовок = ЭлементЗаголовок; + + // Вид периода + ВидПериода = Элементы.Добавить(ВидПериодаИмя, Тип("ПолеФормы"), ОсновнаяГруппа); + ВидПериода.Вид = ВидПоляФормы.ПолеВвода; + ВидПериода.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Лево; + ВидПериода.РедактированиеТекста = Ложь; + ВидПериода.Заголовок = ЭлементЗаголовок; + ВидПериода.КнопкаВыбора = Ложь; + ВидПериода.КнопкаОткрытия = Ложь; + ВидПериода.КнопкаОчистки = Ложь; + ВидПериода.КнопкаРегулирования = Ложь; + ВидПериода.КнопкаСпискаВыбора = Истина; + ВидПериода.РастягиватьПоГоризонтали = Ложь; + ВидПериода.Ширина = 9; + ВидПериода.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_ВидПериода_ПриИзменении"); + + // Вид периода - Список выбора + МинимальнаяПериодичность = НастройкиОтчета.СоответствиеПериодичностиПараметров[ОбщаяНастройка.Параметр]; + Если МинимальнаяПериодичность = Неопределено Тогда + МинимальнаяПериодичность = Перечисления.ДоступныеПериодыОтчета.День; + КонецЕсли; + + ДоступныеПериоды = ФункцииОтчетовКлиентСервер.ПолучитьСписокДоступныхПериодов(); + Для Индекс = ДоступныеПериоды.Найти(МинимальнаяПериодичность) По ДоступныеПериоды.ВГраница() Цикл + ВидПериода.СписокВыбора.Добавить(ДоступныеПериоды[Индекс]); + КонецЦикла; + + // Страницы + ГруппаСтраниц = Элементы.Добавить("Период_Страницы_" + ЭлементИдентификатор, Тип("ГруппаФормы"), ОсновнаяГруппа); + ГруппаСтраниц.Вид = ВидГруппыФормы.Страницы; + ГруппаСтраниц.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + //ГруппаСтраниц.РастягиватьПоГоризонтали = Истина; + //ГруппаСтраниц.Ширина = 30; + + // Страница СтандартныйПериод + СтраницаСтандартныйПериод = Элементы.Добавить("Период_Страница_Стандартный_" + ЭлементИдентификатор, Тип("ГруппаФормы"), ГруппаСтраниц); + СтраницаСтандартныйПериод.Вид = ВидГруппыФормы.Страница; + СтраницаСтандартныйПериод.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + СтраницаСтандартныйПериод.ОтображатьЗаголовок = Ложь; + + // Страница Произвольный + СтраницаПроизвольныйПериод = Элементы.Добавить("Период_Страница_Произвольный_" + ЭлементИдентификатор, Тип("ГруппаФормы"), ГруппаСтраниц); + СтраницаПроизвольныйПериод.Вид = ВидГруппыФормы.Страница; + СтраницаПроизвольныйПериод.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + СтраницаПроизвольныйПериод.ОтображатьЗаголовок = Ложь; + + // Стандартный период + Период = Элементы.Добавить(ПериодИмя, Тип("ПолеФормы"), СтраницаСтандартныйПериод); + Период.Вид = ВидПоляФормы.ПолеВвода; + Период.Заголовок = НСтр("ru = 'Период'"); + Период.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + Период.КнопкаВыбора = Истина; + Период.КнопкаОткрытия = Ложь; + Период.КнопкаОчистки = Ложь; + Период.КнопкаРегулирования = Ложь; + Период.КнопкаСпискаВыбора = Истина; + Период.РедактированиеТекста = Ложь; + Период.УстановитьДействие("Очистка", "Подключаемый_СтандартныйПериод_Значение_Очистка"); + Период.УстановитьДействие("НачалоВыбораИзСписка", "Подключаемый_СтандартныйПериод_Значение_НачалоВыбораИзСписка"); + Период.УстановитьДействие("НачалоВыбора", "Подключаемый_СтандартныйПериод_Значение_НачалоВыбора"); + + // Начало произвольного периода + ПериодНачало = Элементы.Добавить(ПериодНачалоИмя, Тип("ПолеФормы"), СтраницаПроизвольныйПериод); + ЗаполнитьЗначенияСвойств(ПериодНачало, ШаблонПоляВводаПроизвольногоПериода); + ПериодНачало.Заголовок = НСтр("ru = 'с'"); + ПериодНачало.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_НачалоПериода_ПриИзменении"); + + // Окончание произвольного периода + ПериодОкончание = Элементы.Добавить(ПериодОкончаниеИмя, Тип("ПолеФормы"), СтраницаПроизвольныйПериод); + ЗаполнитьЗначенияСвойств(ПериодОкончание, ШаблонПоляВводаПроизвольногоПериода); + ПериодОкончание.Заголовок = НСтр("ru = 'по'"); + ПериодОкончание.УстановитьДействие("ПриИзменении", "Подключаемый_СтандартныйПериод_КонецПериода_ПриИзменении"); + + Иначе + + ЗначениеИмя = "Параметр_Значение_" + ЭлементИдентификатор; + ИспользуетсяВсегда = (ДоступнаяНастройка.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда); + + // Имена реквизитов + СтрокаКэша.ИмяРеквизита = ЗначениеИмя; + СтрокаКэша.ИмяЭлемента = ЗначениеИмя; + + СодержитТипДата = Ложь; + СодержитДругиеТипы = Ложь; + + ВычитаемыеТипы = Новый Массив; + ДоступнаяНастройкаТипы = ДоступнаяНастройка.ТипЗначения.Типы(); + Для Каждого Тип Из ДоступнаяНастройкаТипы Цикл + Если Тип = Тип("ПолеКомпоновкиДанных") Тогда + ВычитаемыеТипы.Добавить(Тип); + КонецЕсли; + Если Тип = Тип("Дата") Тогда + СодержитТипДата = Истина; + Иначе + СодержитДругиеТипы = Истина; + КонецЕсли; + ЗарегистрироватьСвязиВедущихИПодчиненных(СвязиОбъектовМетаданных, Тип, Идентификатор); + КонецЦикла; + + // Реквизиты + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ЗначениеИмя, Новый ОписаниеТипов(ДоступнаяНастройка.ТипЗначения, , ВычитаемыеТипы))); + + // Связь реквизитов с элементами + ПутиКДанным.Добавить(ЗначениеИмя, ЗначениеИмя); + + ЗначениеПараметраБулево = (ТипЗнч(ОбщаяНастройка.Значение) = Тип("Булево")); + + Если ИспользуетсяВсегда Тогда + + ПользовательскаяНастройка.Использование = Истина; + + Иначе + + ИспользованиеИмя = "Параметр_Использование_" + ЭлементИдентификатор; + + СтрокаКэша.ИмяРеквизитаИспользование = ИспользованиеИмя; + + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИспользованиеИмя, Новый ОписаниеТипов("Булево"))); + + ПутиКДанным.Добавить(ИспользованиеИмя, ИспользованиеИмя); + + ФлажокИспользование = Элементы.Добавить(ИспользованиеИмя, Тип("ПолеФормы"), Элементы.ЛевоеЗначение); + ФлажокИспользование.Вид = ВидПоляФормы.ПолеФлажка; + ФлажокИспользование.Заголовок = ЭлементЗаголовок + ":"; + ФлажокИспользование.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + ФлажокИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_Параметр_Использование_ПриИзменении"); + + КонецЕсли; + + Параметр = Элементы.Добавить(ЗначениеИмя, Тип("ПолеФормы"), ?(ИспользуетсяВсегда, Элементы.ПараметрыОтчета, Элементы.ПравоеЗначение)); + Параметр.Вид = ВидПоляФормы.ПолеВвода; + Параметр.Заголовок = ЭлементЗаголовок; + Параметр.КнопкаВыбора = Истина; + Параметр.КнопкаОткрытия = Ложь; + Параметр.КнопкаОчистки = НЕ ДоступнаяНастройка.ЗапрещатьНезаполненныеЗначения; + Параметр.КнопкаРегулирования = Ложь; + Параметр.КнопкаСпискаВыбора = Ложь; + //////Параметр.РастягиватьПоГоризонтали = Истина; + Параметр.УстановитьДействие("ПриИзменении", "Подключаемый_Параметр_Значение_ПриИзменении"); + + Если ИспользуетсяВсегда И ДоступнаяНастройка.ТипЗначения = Новый ОписаниеТипов("Булево") Тогда + Параметр.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право; + ИначеЕсли ИспользуетсяВсегда Тогда + Параметр.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; + Иначе + Параметр.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет; + КонецЕсли; + + ЗаполнитьЗначенияСвойств(Параметр, ДоступнаяНастройка, "БыстрыйВыбор, Маска, ФормаВыбора, ФорматРедактирования"); + Параметр.АвтоОтметкаНезаполненного = ДоступнаяНастройка.ЗапрещатьНезаполненныеЗначения; + + КонецЕсли; + + ИначеЕсли ТипОбщейНастройки = Тип("ОтборКомпоновкиДанных") Тогда + + ИначеЕсли ТипОбщейНастройки = Тип("СтруктураНастроекКомпоновкиДанных") Тогда + + ТаблицаГруппировокИмя = "ТаблицаГруппировок_" + ЭлементИдентификатор; + ТаблицаГруппировокИспользованиеИмя = "ТаблицаГруппировок_Использование_" + ЭлементИдентификатор; + ТаблицаГруппировокПредставлениеИмя = "ТаблицаГруппировок_Представление_" + ЭлементИдентификатор; + ТаблицаГруппировокПереместитьВверхИмя = "ТаблицаГруппировок_ПереместитьВверх_" + ЭлементИдентификатор; + ТаблицаГруппировокПереместитьВнизИмя = "ТаблицаГруппировок_ПереместитьВниз_" + ЭлементИдентификатор; + + // Реквизиты + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ТаблицаГруппировокИмя, Новый ОписаниеТипов("ТаблицаЗначений"))); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ТаблицаГруппировокИмя)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Использование", Новый ОписаниеТипов("Булево"), ТаблицаГруппировокИмя)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ТаблицаГруппировокИмя)); + + // Связь реквизитов с элементами + ПутиКДанным.Добавить(ТаблицаГруппировокИмя, ТаблицаГруппировокИмя); + ПутиКДанным.Добавить(ТаблицаГруппировокИспользованиеИмя, ТаблицаГруппировокИмя + ".Использование"); + ПутиКДанным.Добавить(ТаблицаГруппировокПредставлениеИмя, ТаблицаГруппировокИмя + ".Представление"); + + // Имена реквизитов + СтрокаКэша.ИмяРеквизитаИспользование = ""; + СтрокаКэша.ИмяРеквизита = ТаблицаГруппировокИмя; + СтрокаКэша.ИмяЭлемента = ТаблицаГруппировокИмя; + + // Команды + КомандаПереместитьВверх = Команды.Добавить(ТаблицаГруппировокПереместитьВверхИмя); + КомандаПереместитьВверх.Действие = "Подключаемый_СтруктураНастроекКомпоновкиДанных_ПереместитьВверх"; + КомандаПереместитьВверх.Картинка = БиблиотекаКартинок.ПереместитьВверх; + КомандаПереместитьВверх.Отображение = ОтображениеКнопки.Картинка; + + КомандаПереместитьВверх = Команды.Добавить(ТаблицаГруппировокПереместитьВнизИмя); + КомандаПереместитьВверх.Действие = "Подключаемый_СтруктураНастроекКомпоновкиДанных_ПереместитьВниз"; + КомандаПереместитьВверх.Картинка = БиблиотекаКартинок.ПереместитьВниз; + КомандаПереместитьВверх.Отображение = ОтображениеКнопки.Картинка; + + // Группы и элементы + ГруппаГруппировки = Элементы.Добавить("ГруппаГруппировки_" + ЭлементИдентификатор, Тип("ГруппаФормы"), Элементы.СтруктурыНастроек); + ГруппаГруппировки.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ГруппаГруппировки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Горизонтальная; + ГруппаГруппировки.Отображение = ОтображениеОбычнойГруппы.Линия; + ГруппаГруппировки.Заголовок = ЭлементЗаголовок + ":"; + ГруппаГруппировки.ОтображатьЗаголовок = Истина; + + ТаблицаГруппировок = Элементы.Добавить(ТаблицаГруппировокИмя, Тип("ТаблицаФормы"), ГруппаГруппировки); + ЗаполнитьЗначенияСвойств(ТаблицаГруппировок, ШаблонТаблицы); + ТаблицаГруппировок.ИзменятьСоставСтрок = Ложь; + + КолонкаИспользование = Элементы.Добавить(ТаблицаГруппировокИспользованиеИмя, Тип("ПолеФормы"), ТаблицаГруппировок); + КолонкаИспользование.Вид = ВидПоляФормы.ПолеФлажка; + КолонкаИспользование.РежимРедактирования = РежимРедактированияКолонки.Непосредственно; + КолонкаИспользование.УстановитьДействие("ПриИзменении", "Подключаемый_СтруктураНастроекКомпоновкиДанных_КолонкаИспользование_ПриИзменении"); + + КолонкаПредставление = Элементы.Добавить(ТаблицаГруппировокПредставлениеИмя, Тип("ПолеФормы"), ТаблицаГруппировок); + КолонкаПредставление.Вид = ВидПоляФормы.ПолеВвода; + КолонкаПредставление.ТолькоПросмотр = Истина; + + // Командная панель + ТаблицаКоманднаяПанель = Элементы.Добавить("ТаблицаГруппировок_КоманднаяПанель_" + ЭлементИдентификатор, Тип("ГруппаФормы"), ГруппаГруппировки); + ТаблицаКоманднаяПанель.Вид = ВидГруппыФормы.ОбычнаяГруппа; + ТаблицаКоманднаяПанель.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная; + ТаблицаКоманднаяПанель.Отображение = ОтображениеОбычнойГруппы.Нет; + ТаблицаКоманднаяПанель.ОтображатьЗаголовок = Ложь; + + // Кнопки + КнопкаВверх = Элементы.Добавить(ТаблицаГруппировокПереместитьВверхИмя, Тип("КнопкаФормы"), ТаблицаКоманднаяПанель); + КнопкаВверх.ИмяКоманды = ТаблицаГруппировокПереместитьВверхИмя; + КнопкаВверх.Заголовок = НСтр("ru = 'Переместить группировку вверх'"); + + КнопкаВниз = Элементы.Добавить(ТаблицаГруппировокПереместитьВнизИмя, Тип("КнопкаФормы"), ТаблицаКоманднаяПанель); + КнопкаВниз.ИмяКоманды = ТаблицаГруппировокПереместитьВнизИмя; + КнопкаВниз.Заголовок = НСтр("ru = 'Переместить группировку вниз'"); + + Иначе + + КонецЕсли; + КонецЦикла; + + ИзменитьРеквизиты(ДобавляемыеРеквизиты, Новый Массив); + + // Установка связей элементов с данными + Для Каждого КлючИЗначение Из ТипыСписковЗначений Цикл + ЭтаФорма[КлючИЗначение.Ключ].ТипЗначения = КлючИЗначение.Значение; + ЭтаФорма[КлючИЗначение.Ключ].Очистить(); + КонецЦикла; + + Для Каждого ЭлементСписка Из ПутиКДанным Цикл + Элементы[ЭлементСписка.Значение].ПутьКДанным = ЭлементСписка.Представление; + КонецЦикла; + + // Некоторые действия доступны только после установки связи элементов с данными + Для Каждого ЭлементИОбработчики Из ОбработчикиСобытий Цикл + Элемент = Элементы[ЭлементИОбработчики.Ключ]; + Для Каждого Обработчики Из ЭлементИОбработчики.Значение Цикл + Элемент.УстановитьДействие(Обработчики.Ключ, Обработчики.Значение); + КонецЦикла; + КонецЦикла; + + // Связи отборов + СвязиОтборов.Очистить(); + Найденные = СвязиОбъектовМетаданных.НайтиСтроки(Новый Структура("ПодчиненныйНайденВСКД, ВедущийНайденВСКД", Истина, Истина)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + ПодчиненныйМетаданные = Метаданные.НайтиПоТипу(СтрокаТаблицы.ПодчиненныйТип); + ВедущийМетаданные = Метаданные.НайтиПоТипу(СтрокаТаблицы.ВедущийТип); + + Если ПодчиненныйМетаданные = Неопределено ИЛИ ВедущийМетаданные = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПодчиненныйИмяТипа = СтрЗаменить(ПодчиненныйМетаданные.ПолноеИмя(), ".", "Ссылка."); + ВедущийИмяТипа = СтрЗаменить(ВедущийМетаданные.ПолноеИмя(), ".", "Ссылка."); + + Для Каждого ПодчиненныйИдентификатор Из СтрокаТаблицы.ПодчиненныйМассивИдентификаторов Цикл + Для Каждого ВедущийИдентификатор Из СтрокаТаблицы.ВедущийМассивИдентификаторов Цикл + + СтрокаСвязиОтбора = СвязиОтборов.Добавить(); + СтрокаСвязиОтбора.ИдентификаторОтбора = ПодчиненныйИдентификатор; + СтрокаСвязиОтбора.Тип = ПодчиненныйИмяТипа; + СтрокаСвязиОтбора.РеквизитПоля = СтрокаТаблицы.ПодчиненныйРеквизит; + СтрокаСвязиОтбора.ИдентификаторЗначенияОтбора = ВедущийИдентификатор; + СтрокаСвязиОтбора.ТипЗначенияОтбора = ВедущийИмяТипа; + + КонецЦикла; + КонецЦикла; + КонецЦикла; + + // Связи по типу + Для Каждого ЭлементСвязи Из СвязиПоТипу Цикл + + Подчиненный = НайтиВКэше(КэшНастроек, "Идентификатор", ЭлементСвязи.ПодчиненныйИдентификатор); + Ведущий = НайтиВКэше(КэшНастроек, "ПолеКД", ЭлементСвязи.ВедущийПоле); + + Если Подчиненный = Неопределено ИЛИ Ведущий = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПодчиненныйЭлемент = Элементы.Найти(Подчиненный.ИмяЭлемента); + Если ПодчиненныйЭлемент = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПодчиненныйЭлемент.СвязьПоТипу = Новый СвязьПоТипу(Ведущий.ИмяРеквизита, ЭлементСвязи.НомерСубконто); + + КонецЦикла; + + // Связи параметров выбора + Для Каждого ЭлементСвязи Из СвязиПараметровВыбора Цикл + + Если НЕ ЗначениеЗаполнено(ЭлементСвязи.РеквизитСвязи) Тогда + ЭлементСвязи.РеквизитСвязи = "ИмяПараметраСвязиНеУказано"; + КонецЕсли; + + Подчиненный = НайтиВКэше(КэшНастроек, "Идентификатор", ЭлементСвязи.ПодчиненныйИдентификатор); + Ведущий = НайтиВКэше(КэшНастроек, "ПолеКД", ЭлементСвязи.ВедущийПоле); + + Если Подчиненный = Неопределено ИЛИ Ведущий = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПодчиненныйЭлемент = Элементы.Найти(Подчиненный.ИмяЭлемента); + Если ПодчиненныйЭлемент = Неопределено Тогда + Продолжить; + КонецЕсли; + + МассивЭлементов = Новый Массив; + Для Каждого СвязьПараметра Из ПодчиненныйЭлемент.СвязиПараметровВыбора Цикл + МассивЭлементов.Добавить(СвязьПараметра); + КонецЦикла; + МассивЭлементов.Добавить(Новый СвязьПараметраВыбора(ЭлементСвязи.РеквизитСвязи, Ведущий.ИмяРеквизита, ЭлементСвязи.Действие)); + ПодчиненныйЭлемент.СвязиПараметровВыбора = Новый ФиксированныйМассив(МассивЭлементов); + + КонецЦикла; + + ЗначениеВРеквизитФормы(КэшНастроек, "КэшНастроекСКД"); + +КонецПроцедуры + +&НаСервере +Процедура БыстрыеНастройкиЗагрузитьЗначения() + + ГрупповыеВидыСравнений = Новый Массив; + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); + + КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; + ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + НастройкиКД = КомпоновщикНастроекКД.ПолучитьНастройки(); + + Если НЕ ПользовательскиеНастройкиКД.ДополнительныеСвойства.Свойство("ВидимостьБыстрыхНастроек") Тогда + ПользовательскиеНастройкиКД.ДополнительныеСвойства.Вставить("ВидимостьБыстрыхНастроек", Истина); + КонецЕсли; + + Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл + + Идентификатор = ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки; + ЭлементИдентификатор = ПривестиИдентификаторКИмени(Идентификатор); + + ОбщаяНастройка = ФункцииОтчетовКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору(НастройкиКД, Идентификатор); + Если ОбщаяНастройка = Неопределено + ИЛИ ОбщаяНастройка.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + Продолжить; + КонецЕсли; + + ТипОбщейНастройки = ТипЗнч(ОбщаяНастройка); + + Если ТипОбщейНастройки = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ДоступнаяНастройка = ФункцииОтчетовКлиентСервер.ПолучитьДоступноеПоле(НастройкиКД.ДоступныеПоляОтбора, ОбщаяНастройка.ЛевоеЗначение); + ИначеЕсли ТипОбщейНастройки = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ДоступнаяНастройка = ФункцииОтчетовКлиентСервер.ПолучитьДоступныйПараметр(НастройкиКД.ПараметрыДанных.ДоступныеПараметры, ОбщаяНастройка.Параметр); + Иначе + ДоступнаяНастройка = Неопределено; + КонецЕсли; + + СменитьТипНаГруппуЭлементовОтбора = Ложь; + + // Заголовок настройки + СтруктураПредставлений = Новый Структура("Представление, ПредставлениеПользовательскойНастройки"); + ЗаполнитьЗначенияСвойств(СтруктураПредставлений, ОбщаяНастройка); + Если ЗначениеЗаполнено(СтруктураПредставлений.ПредставлениеПользовательскойНастройки) Тогда + ЭлементЗаголовок = СтруктураПредставлений.ПредставлениеПользовательскойНастройки; + ИначеЕсли ЗначениеЗаполнено(СтруктураПредставлений.Представление) Тогда + ЭлементЗаголовок = СтруктураПредставлений.Представление; + СменитьТипНаГруппуЭлементовОтбора = Истина; + ИначеЕсли ДоступнаяНастройка <> Неопределено И ЗначениеЗаполнено(ДоступнаяНастройка.Заголовок) Тогда + ЭлементЗаголовок = ДоступнаяНастройка.Заголовок; + Иначе + ЭлементЗаголовок = ""; + КонецЕсли; + ЭлементЗаголовок = СокрЛП(ЭлементЗаголовок); + + Если ТипОбщейНастройки = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + ИЛИ СменитьТипНаГруппуЭлементовОтбора Тогда + + ИспользованиеОтбораИмя = "ГруппаОтбора_Использование_" + ЭлементИдентификатор; + ЭтаФорма[ИспользованиеОтбораИмя] = ПользовательскаяНастройка.Использование; + + ИначеЕсли ТипОбщейНастройки = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + + ОтборИмя = "Отбор_" + ЭлементИдентификатор; + ИспользованиеОтбораИмя = "ИспользованиеОтбора_" + ЭлементИдентификатор; + + ЭтаФорма[ИспользованиеОтбораИмя] = ПользовательскаяНастройка.Использование; + + ЭтоГрупповойВидСравнения = (ГрупповыеВидыСравнений.Найти(ОбщаяНастройка.ВидСравнения) <> Неопределено); + Если ЭтоГрупповойВидСравнения Тогда + СписокЗначений = ЭтаФорма[ОтборИмя]; + СписокЗначений.Очистить(); + Если ПользовательскаяНастройка.ПравоеЗначение <> Неопределено Тогда + Для Каждого ЭлементСписка Из ПользовательскаяНастройка.ПравоеЗначение Цикл + ЗаполнитьЗначенияСвойств(СписокЗначений.Добавить(), ЭлементСписка); + КонецЦикла; + КонецЕсли; + Иначе + ЭтаФорма[ОтборИмя] = ПользовательскаяНастройка.ПравоеЗначение; + КонецЕсли; + + ИначеЕсли ТипОбщейНастройки = Тип("ГруппировкаКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("ТаблицаКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("ГруппировкаТаблицыКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("ДиаграммаКомпоновкиДанных") + ИЛИ ТипОбщейНастройки = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + + ИспользованиеЭлементаСтруктурыИмя = "ИспользованиеЭлементаСтруктуры_" + ЭлементИдентификатор; + ЭтаФорма[ИспользованиеЭлементаСтруктурыИмя] = ПользовательскаяНастройка.Использование; + + ИначеЕсли ТипОбщейНастройки = Тип("ЭлементУсловногоОформленияКомпоновкиДанных") Тогда + + УсловноеОформлениеИмя = "УсловноеОформление_" + ЭлементИдентификатор; + ЭтаФорма[УсловноеОформлениеИмя] = ПользовательскаяНастройка.Использование; + + ИначеЕсли ТипОбщейНастройки = Тип("ВыбранныеПоляКомпоновкиДанных") Тогда + + ТаблицаИмя = "ТаблицаПолейВыбора_" + ЭлементИдентификатор; + Таблица = ЭтаФорма[ТаблицаИмя]; + Таблица.Очистить(); + ФункцииОтчетовКлиентСервер.ДобавитьЭлементыНастройки(ЭтаФорма, Таблица, ПользовательскаяНастройка, ПользовательскаяНастройка, Истина); + + ИначеЕсли ТипОбщейНастройки = Тип("ПорядокКомпоновкиДанных") Тогда + + ТаблицаИмя = "ТаблицаПорядка_" + ЭлементИдентификатор; + Таблица = ЭтаФорма[ТаблицаИмя]; + Таблица.Очистить(); + Для Каждого ЭлементПорядка Из ПользовательскаяНастройка.Элементы Цикл + Если ТипЗнч(ЭлементПорядка) = Тип("ЭлементПорядкаКомпоновкиДанных") Тогда + ДоступноеПоле = ФункцииОтчетовКлиентСервер.ПолучитьДоступноеПоле(НастройкиКД.ДоступныеПоляПорядка, ЭлементПорядка.Поле); + СтрокаПорядка = Таблица.Добавить(); + СтрокаПорядка.Использование = ЭлементПорядка.Использование; + СтрокаПорядка.Идентификатор = ПользовательскаяНастройка.ПолучитьИдентификаторПоОбъекту(ЭлементПорядка); + СтрокаПорядка.Представление = ДоступноеПоле.Заголовок; + КонецЕсли; + КонецЦикла; + + ИначеЕсли ТипОбщейНастройки = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + + Если ТипЗнч(ПользовательскаяНастройка.Значение) = Тип("СтандартныйПериод") Тогда + + ВидПериодаИмя = "Период_ВидПериода_" + ЭлементИдентификатор; + ПериодИмя = "Период_Стандартный_Значение_" + ЭлементИдентификатор; + ПериодНачалоИмя = "Период_Произвольный_Начало_" + ЭлементИдентификатор; + ПериодОкончаниеИмя = "Период_Произвольный_Окончание_" + ЭлементИдентификатор; + + НачалоПериода = ПользовательскаяНастройка.Значение.ДатаНачала; + КонецПериода = ПользовательскаяНастройка.Значение.ДатаОкончания; + ВидПериода = ФункцииОтчетовКлиентСервер.ПолучитьВидПериода(НачалоПериода, КонецПериода, Элементы[ВидПериодаИмя].СписокВыбора); + Представление = ФункцииОтчетовКлиентСервер.ПолучитьПредставлениеПериода(ВидПериода, НачалоПериода, КонецПериода); + + Если ВидПериода = Перечисления.ДоступныеПериодыОтчета.ПроизвольныйПериод Тогда + Элементы["Период_Страницы_" + ЭлементИдентификатор].ТекущаяСтраница = Элементы["Период_Страница_Произвольный_" + ЭлементИдентификатор]; + Иначе + Элементы["Период_Страницы_" + ЭлементИдентификатор].ТекущаяСтраница = Элементы["Период_Страница_Стандартный_" + ЭлементИдентификатор]; + КонецЕсли; + + ЭтаФорма[ВидПериодаИмя] = ВидПериода; + ЭтаФорма[ПериодИмя] = Представление; + ЭтаФорма[ПериодНачалоИмя] = НачалоПериода; + ЭтаФорма[ПериодОкончаниеИмя] = КонецПериода; + + Иначе + + ПараметрИмя = "Параметр_Значение_" + ЭлементИдентификатор; + ИспользуетсяВсегда = (ДоступнаяНастройка.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда); + + Если ТипЗнч(ПользовательскаяНастройка.Значение) = Тип("СтандартнаяДатаНачала") Тогда + ЭтаФорма[ПараметрИмя] = Дата(ПользовательскаяНастройка.Значение); + Иначе + ЭтаФорма[ПараметрИмя] = ПользовательскаяНастройка.Значение; + КонецЕсли; + + Если НЕ ИспользуетсяВсегда Тогда + ИспользованиеИмя = "Параметр_Использование_" + ЭлементИдентификатор; + ЭтаФорма[ИспользованиеИмя] = ПользовательскаяНастройка.Использование; + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ТипОбщейНастройки = Тип("ОтборКомпоновкиДанных") Тогда + + + ИначеЕсли ТипОбщейНастройки = Тип("СтруктураНастроекКомпоновкиДанных") Тогда + + ТаблицаГруппировокИмя = "ТаблицаГруппировок_" + ЭлементИдентификатор; + + Таблица = ЭтаФорма[ТаблицаГруппировокИмя]; + Таблица.Очистить(); + + Для Каждого ЭлементСтруктуры Из ПользовательскаяНастройка.Структура Цикл + Представление = ""; + Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") + ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаТаблицыКомпоновкиДанных") + ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + + Для Каждого ПолеГруппировки Из ЭлементСтруктуры.ПоляГруппировки.Элементы Цикл + Если НЕ ПолеГруппировки.Использование Тогда + Продолжить; + КонецЕсли; + ДоступноеПоле = ФункцииОтчетовКлиентСервер.ПолучитьДоступноеПоле(НастройкиКД.ДоступныеПоляГруппировок, ПолеГруппировки.Поле); + Если ДоступноеПоле = Неопределено Тогда + Представление = Строка(ПолеГруппировки.Поле); + ИначеЕсли ДоступноеПоле.Родитель <> Неопределено Тогда + Представление = Представление + СтрЗаменить(СтрЗаменить(ДоступноеПоле.Заголовок, ДоступноеПоле.Родитель.Заголовок, ""), ".", "")+ ", "; + ИНаче + Представление = Представление + ДоступноеПоле.Заголовок + ", "; + КонецЕсли; + КонецЦикла; + + Представление = Лев(Представление, СтрДлина(Представление) - 2); + Иначе + Представление = НСтр("ru = 'Таблица / диаграмма'"); + КонецЕсли; + + СтрокиГруппировки = Таблица.Добавить(); + СтрокиГруппировки.Идентификатор = ЭлементСтруктуры.ИдентификаторПользовательскойНастройки; + СтрокиГруппировки.Использование = ЭлементСтруктуры.Использование; + СтрокиГруппировки.Представление = Представление; + КонецЦикла; + + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ДобавитьПодчиненныеЭлементы(Куда, Откуда, Рекурсивно) + Для Каждого ПодчиненныйЭлемент Из Откуда Цикл + Если Рекурсивно И (ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") ИЛИ ТипЗнч(ПодчиненныйЭлемент) = Тип("ТаблицаФормы")) Тогда + ДобавитьПодчиненныеЭлементы(Куда, ПодчиненныйЭлемент.ПодчиненныеЭлементы, Истина); + КонецЕсли; + Если ПостоянныеЭлементы.НайтиПоЗначению(ПодчиненныйЭлемент.Имя) = Неопределено Тогда + Куда.Добавить(ПодчиненныйЭлемент); + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьПараметрыВыбора(ИдентификаторОтбора = "") + + Если ИдентификаторОтбора = "" Тогда + Найденные = СвязиОтборов; + Иначе + Найденные = СвязиОтборов.НайтиСтроки(Новый Структура("ИдентификаторЗначенияОтбора", ИдентификаторОтбора)) + КонецЕсли; + + КомпоновщикНастроекКД = Отчет.КомпоновщикНастроек; + ПользовательскиеНастройкиКД = КомпоновщикНастроекКД.ПользовательскиеНастройки; + НастройкиКД = КомпоновщикНастроекКД.ПолучитьНастройки(); + + ГрупповыеВидыСравнений = Новый Массив; + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.ВСписке); + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии); + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.НеВСписке); + ГрупповыеВидыСравнений.Добавить(ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии); + + Для Каждого СтрокаОтбора Из Найденные Цикл + + ПодчиненныйИдентификатор = СтрокаОтбора.ИдентификаторОтбора; + ПодчиненныйЭлементИдентификатор = ПривестиИдентификаторКИмени(ПодчиненныйИдентификатор); + ПодчиненныйПользовательскаяНастройка = ФункцииОтчетовКлиентСервер.НайтиПользовательскуюНастройку(ПользовательскиеНастройкиКД, ПодчиненныйИдентификатор); + Если ТипЗнч(ПодчиненныйПользовательскаяНастройка) <> Тип("ОтборКомпоновкиДанных") Тогда + Продолжить; + КонецЕсли; + + ВедущийИдентификатор = СтрокаОтбора.ИдентификаторЗначенияОтбора; + ВедущийПользовательскаяНастройка = ФункцииОтчетовКлиентСервер.НайтиПользовательскуюНастройку(ПользовательскиеНастройкиКД, ВедущийИдентификатор); + Если ВедущийПользовательскаяНастройка = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПодчиненныйОбщаяНастройка = ФункцииОтчетовКлиентСервер.ПолучитьОбъектПоПользовательскомуИдентификатору(НастройкиКД, ПодчиненныйИдентификатор); + Если ПодчиненныйОбщаяНастройка = Неопределено + ИЛИ ПодчиненныйОбщаяНастройка.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ Тогда + Продолжить; + КонецЕсли; + + ЭтоГрупповойВидСравнения = (ГрупповыеВидыСравнений.Найти(ПодчиненныйОбщаяНастройка.ВидСравнения) <> Неопределено); + + Если ЭтоГрупповойВидСравнения Тогда + ПодчиненныйЭлемент = Элементы.Найти("Отбор_Значение_" + ПодчиненныйЭлементИдентификатор); + Если ПодчиненныйЭлемент = Неопределено Тогда + Продолжить; + КонецЕсли; + МассивТипов = ЭтаФорма["Отбор_" + ПодчиненныйЭлементИдентификатор].ТипЗначения.Типы(); + Для Каждого Тип Из МассивТипов Цикл + Если ВедущийПользовательскаяНастройка.Использование Тогда + ПодчиненныйПараметрыВыбора = МассивПараметровВыбораПолей(ПользовательскиеНастройкиКД, ПодчиненныйИдентификатор, Тип); + Иначе + ПодчиненныйПараметрыВыбора = Новый Массив; + КонецЕсли; + ПодчиненныйЭлемент.ПараметрыВыбора = Новый ФиксированныйМассив(ПодчиненныйПараметрыВыбора); + КонецЦикла; + Иначе + ПодчиненныйЭлемент = ЭтаФорма.Элементы.Найти("Отбор_" + ПодчиненныйЭлементИдентификатор); + Если ПодчиненныйЭлемент = Неопределено Тогда + Продолжить; + КонецЕсли; + Тип = ТипЗнч(ЭтаФорма["Отбор_" + ПодчиненныйЭлементИдентификатор]); + Если ВедущийПользовательскаяНастройка.Использование Тогда + ПодчиненныйПараметрыВыбора = МассивПараметровВыбораПолей(ПользовательскиеНастройкиКД, ПодчиненныйИдентификатор, Тип); + Иначе + ПодчиненныйПараметрыВыбора = Новый Массив; + КонецЕсли; + ПодчиненныйЭлемент.ПараметрыВыбора = Новый ФиксированныйМассив(ПодчиненныйПараметрыВыбора); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция МассивПараметровВыбораПолей(ПользовательскиеНастройкиКД, ПодчиненныйИдентификатор, Тип) + + МассивСвязейПараметров = Новый Массив; + + МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); + Если МетаданныеТипа = Неопределено Тогда + Возврат МассивСвязейПараметров; + КонецЕсли; + + ИмяТипа = СтрЗаменить(МетаданныеТипа.ПолноеИмя(), ".", "Ссылка."); + + Найденные = СвязиОтборов.НайтиСтроки(Новый Структура("ИдентификаторОтбора, Тип", ПодчиненныйИдентификатор, ИмяТипа)); + Для Каждого СтрокаСвязи Из Найденные Цикл + Идентификатор = СтрокаСвязи.ИдентификаторЗначенияОтбора; + ЭлементИдентификатор = ПривестиИдентификаторКИмени(Идентификатор); + ПользовательскаяНастройка = ФункцииОтчетовКлиентСервер.НайтиПользовательскуюНастройку(ПользовательскиеНастройкиКД, Идентификатор); + Если ТипЗнч(ПользовательскаяНастройка) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЗначениеПараметра = ЭтаФорма["Отбор_" + ЭлементИдентификатор]; + ИначеЕсли ТипЗнч(ПользовательскаяНастройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЗначениеПараметра = ЭтаФорма["Параметр_" + ЭлементИдентификатор]; + Иначе + Продолжить; + КонецЕсли; + МассивСвязейПараметров.Добавить(Новый ПараметрВыбора(СтрокаСвязи.РеквизитПоля, ЗначениеПараметра)); + КонецЦикла; + + Возврат МассивСвязейПараметров; + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗарегистрироватьСвязиВедущихИПодчиненных(СвязиОбъектовМетаданных, Тип, Идентификатор) + + // Регистрация подчиненного + Найденные = СвязиОбъектовМетаданных.НайтиСтроки(Новый Структура("ПодчиненныйТип", Тип)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + СтрокаТаблицы.ПодчиненныйНайденВСКД = Истина; + СтрокаТаблицы.ПодчиненныйМассивИдентификаторов.Добавить(Идентификатор); + КонецЦикла; + + // Регистрация ведущего + Найденные = СвязиОбъектовМетаданных.НайтиСтроки(Новый Структура("ВедущийТип", Тип)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + СтрокаТаблицы.ВедущийНайденВСКД = Истина; + СтрокаТаблицы.ВедущийМассивИдентификаторов.Добавить(Идентификатор); + КонецЦикла; + +КонецПроцедуры + diff --git a/SSL/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo b/SSL/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo new file mode 100644 index 000000000..706c3a8d1 --- /dev/null +++ b/SSL/src/CommonForms/ФормаОтчета/ФормаОтчета.mdo @@ -0,0 +1,10 @@ + + + ФормаОтчета + + ru + Форма отчета + + PersonalComputer + MobileDevice + diff --git a/SSL/src/CommonModules/АвтономнаяРаботаВызовСервераСлужебный/Module.bsl b/SSL/src/CommonModules/АвтономнаяРаботаВызовСервераСлужебный/Module.bsl new file mode 100644 index 000000000..d2edf4e21 --- /dev/null +++ b/SSL/src/CommonModules/АвтономнаяРаботаВызовСервераСлужебный/Module.bsl @@ -0,0 +1,25 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен данными в модели сервиса". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция СинхронизацияССервисомДавноНеВыполнялась() Экспорт + + Возврат АвтономнаяРаботаСлужебный.СинхронизацияССервисомДавноНеВыполнялась(); + +КонецФункции + +Функция ПараметрыФормыВыполненияОбменаДанными() Экспорт + + Возврат АвтономнаяРаботаСлужебный.ПараметрыФормыВыполненияОбменаДанными(); + +КонецФункции + +Процедура ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Экспорт + + АвтономнаяРаботаСлужебный.ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске(); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/АвтономнаяРаботаВызовСервераСлужебный/АвтономнаяРаботаВызовСервераСлужебный.mdo b/SSL/src/CommonModules/АвтономнаяРаботаВызовСервераСлужебный/АвтономнаяРаботаВызовСервераСлужебный.mdo new file mode 100644 index 000000000..77b20f586 --- /dev/null +++ b/SSL/src/CommonModules/АвтономнаяРаботаВызовСервераСлужебный/АвтономнаяРаботаВызовСервераСлужебный.mdo @@ -0,0 +1,10 @@ + + + АвтономнаяРаботаВызовСервераСлужебный + + ru + Автономная работа вызов сервера служебный + + true + true + diff --git a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl new file mode 100644 index 000000000..95bdc324c --- /dev/null +++ b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/Module.bsl @@ -0,0 +1,829 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен данными в модели сервиса". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Переопределяет действие перед авторизацией пользователя, +// выполняемой при начале работы системы (в процессе получения +// параметров работы клиента при запуске). +// +// Можно заполнить состав пользователей и выполнить перезапуск. +// +// Требуется, например, при настройке автономного рабочего места. +// +// Параметры: +// Перезапустить - Булево, начальное значение Ложь. Если указать +// Истина, тогда работа системы будет прекращена. +// +Процедура ПередАвторизациейТекущегоПользователяПриНачалеРаботыСистемы(Перезапустить) Экспорт + + Если НеобходимоВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Тогда + ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске(); + Перезапустить = Истина; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ, ИСПОЛЬЗУЕМЫЕ НА СТОРОНЕ СЕРВИСА + +Процедура СоздатьНачальныйОбразАвтономногоРабочегоМеста(Параметры, + АдресВременногоХранилищаНачальногоОбраза, + АдресВременногоХранилищаИнформацииОПакетеУстановки + ) Экспорт + + ПомощникСозданияАвтономногоРабочегоМеста = Обработки.ПомощникСозданияАвтономногоРабочегоМеста.Создать(); + + ЗаполнитьЗначенияСвойств(ПомощникСозданияАвтономногоРабочегоМеста, Параметры); + + УстановитьПривилегированныйРежим(Истина); + + ПомощникСозданияАвтономногоРабочегоМеста.СоздатьНачальныйОбразАвтономногоРабочегоМеста( + Параметры.НастройкаОтборовНаУзле, + АдресВременногоХранилищаНачальногоОбраза, + АдресВременногоХранилищаИнформацииОПакетеУстановки + ); + +КонецПроцедуры + +Процедура УдалитьАвтономноеРабочееМесто(Параметры, АдресХранилища) Экспорт + + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + + Пользователь = РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ПользовательДляСинхронизацииДанных(Параметры.АвтономноеРабочееМесто); + + Если Пользователь <> Неопределено Тогда + + ПользовательОбъект = Пользователь.ПолучитьОбъект(); + + Если ПользовательОбъект <> Неопределено Тогда + + ПользовательОбъект.Удалить(); + + КонецЕсли; + + КонецЕсли; + + АвтономноеРабочееМестоОбъект = Параметры.АвтономноеРабочееМесто.ПолучитьОбъект(); + + Если АвтономноеРабочееМестоОбъект <> Неопределено Тогда + + АвтономноеРабочееМестоОбъект.Удалить(); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция АвтономнаяРаботаПоддерживается() Экспорт + + Возврат ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается(); + +КонецФункции + +Функция КоличествоАвтономныхРабочихМест() Экспорт + + ТекстЗапроса = " + |ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК Таблица + |ГДЕ + | Таблица.Ссылка <> &ПриложениеВСервисе + | И НЕ Таблица.ПометкаУдаления"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ПланОбменаАвтономнойРаботы()); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПриложениеВСервисе", ПриложениеВСервисе()); + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.Количество; +КонецФункции + +Функция ПриложениеВСервисе() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда + + Возврат ПланыОбмена.ГлавныйУзел(); + + Иначе + + Возврат ПланыОбмена[ПланОбменаАвтономнойРаботы()].ЭтотУзел(); + + КонецЕсли; + +КонецФункции + +Функция АвтономноеРабочееМесто() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Таблица.Ссылка КАК АвтономноеРабочееМесто + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК Таблица + |ГДЕ + | Таблица.Ссылка <> &ПриложениеВСервисе + | И НЕ Таблица.ПометкаУдаления"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ПланОбменаАвтономнойРаботы()); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПриложениеВСервисе", ПриложениеВСервисе()); + Запрос.Текст = ТекстЗапроса; + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.АвтономноеРабочееМесто; +КонецФункции + +Функция ПланОбменаАвтономнойРаботы() Экспорт + + Возврат ОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы(); + +КонецФункции + +Функция ЭтоУзелАвтономногоРабочегоМеста(Знач УзелИнформационнойБазы) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбменДаннымиПовтИсп.ЭтоУзелАвтономногоРабочегоМеста(УзелИнформационнойБазы); + +КонецФункции + +Функция ДатаПоследнейУспешнойСинхронизации(АвтономноеРабочееМесто) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | МИНИМУМ(СостоянияУспешныхОбменовДанными.ДатаОкончания) КАК ДатаСинхронизации + |ИЗ + | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными + |ГДЕ + | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы = &АвтономноеРабочееМесто"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("АвтономноеРабочееМесто", АвтономноеРабочееМесто); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат ?(ЗначениеЗаполнено(Выборка.ДатаСинхронизации), Выборка.ДатаСинхронизации, Неопределено); +КонецФункции + +Функция СформироватьНаименованиеАвтономногоРабочегоМестаПоУмолчанию() Экспорт + + ТекстЗапроса = " + |ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК Таблица + |ГДЕ + | Таблица.Наименование ПОДОБНО &ШаблонИмени"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ПланОбменаАвтономнойРаботы()); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ШаблонИмени", НаименованиеАвтономногоРабочегоМестаПоУмолчанию() + "%"); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Количество = Выборка.Количество; + + Если Количество = 0 Тогда + + Возврат НаименованиеАвтономногоРабочегоМестаПоУмолчанию(); + + Иначе + + Результат = "[Наименование] ([Количество])"; + Результат = СтрЗаменить(Результат, "[Наименование]", НаименованиеАвтономногоРабочегоМестаПоУмолчанию()); + Результат = СтрЗаменить(Результат, "[Количество]", Формат(Количество + 1, "ЧГ=0")); + + Возврат Результат; + КонецЕсли; + +КонецФункции + +Функция СформироватьПрефиксАвтономногоРабочегоМеста(Знач ПоследнийПрефикс = "") Экспорт + + ДопустимыеСимволы = ДопустимыеСимволыПрефиксаАвтономногоРабочегоМеста(); + + СимволПоследнегоАвтономногоРабочегоМеста = Лев(ПоследнийПрефикс, 1); + + ПозицияСимвола = Найти(ДопустимыеСимволы, СимволПоследнегоАвтономногоРабочегоМеста); + + Если ПозицияСимвола = 0 ИЛИ ПустаяСтрока(СимволПоследнегоАвтономногоРабочегоМеста) Тогда + + Символ = Лев(ДопустимыеСимволы, 1); // Используем первый символ + + ИначеЕсли ПозицияСимвола >= СтрДлина(ДопустимыеСимволы) Тогда + + Символ = Прав(ДопустимыеСимволы, 1); // Используем последний символ + + Иначе + + Символ = Сред(ДопустимыеСимволы, ПозицияСимвола + 1, 1); // Используем следующий символ + + КонецЕсли; + + ПрефиксПриложения = Прав(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"), 1); + + Результат = "[Символ][ПрефиксПриложения]"; + Результат = СтрЗаменить(Результат, "[Символ]", Символ); + Результат = СтрЗаменить(Результат, "[ПрефиксПриложения]", ПрефиксПриложения); + + Возврат Результат; +КонецФункции + +Функция ИмяФайлаПакетаУстановки() Экспорт + + Возврат НСтр("ru = 'Автономная работа.zip'"); + +КонецФункции + +Функция ОписаниеОграниченийПередачиДанных(АвтономноеРабочееМесто) Экспорт + + ПланОбменаАвтономнойРаботы = ПланОбменаАвтономнойРаботы(); + + НастройкаОтборовНаУзле = ПланыОбмена[ПланОбменаАвтономнойРаботы].НастройкаОтборовНаУзле(); + + Если НастройкаОтборовНаУзле = Неопределено + ИЛИ НастройкаОтборовНаУзле.Количество() = 0 Тогда + Возврат ""; + КонецЕсли; + + Реквизиты = Новый Массив; + + Для Каждого Элемент Из НастройкаОтборовНаУзле Цикл + + Реквизиты.Добавить(Элемент.Ключ); + + КонецЦикла; + + Реквизиты = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Реквизиты); + + ЗначенияРеквизитов = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(АвтономноеРабочееМесто, Реквизиты); + + Для Каждого Элемент Из НастройкаОтборовНаУзле Цикл + + Если ТипЗнч(Элемент.Значение) = Тип("Структура") Тогда + + Таблица = ЗначенияРеквизитов[Элемент.Ключ].Выгрузить(); + + Для Каждого ВложенныйЭлемент Из Элемент.Значение Цикл + + НастройкаОтборовНаУзле[Элемент.Ключ][ВложенныйЭлемент.Ключ] = Таблица.ВыгрузитьКолонку(ВложенныйЭлемент.Ключ); + + КонецЦикла; + + Иначе + + НастройкаОтборовНаУзле[Элемент.Ключ] = ЗначенияРеквизитов[Элемент.Ключ]; + + КонецЕсли; + + КонецЦикла; + + Возврат ПланыОбмена[ПланОбменаАвтономнойРаботы].ОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле); +КонецФункции + +Функция МониторАвтономныхРабочихМест() Экспорт + + ТекстЗапроса = " + |ВЫБРАТЬ + | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы КАК АвтономноеРабочееМесто, + | МИНИМУМ(СостоянияУспешныхОбменовДанными.ДатаОкончания) КАК ДатаСинхронизации + |ПОМЕСТИТЬ СостоянияУспешныхОбменовДанными + |ИЗ + | РегистрСведений.СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными + | + |СГРУППИРОВАТЬ ПО + | СостоянияУспешныхОбменовДанными.УзелИнформационнойБазы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ПланОбмена.Ссылка КАК АвтономноеРабочееМесто, + | ЕСТЬNULL(СостоянияУспешныхОбменовДанными.ДатаСинхронизации, &ПредставлениеПустойДаты) КАК ДатаСинхронизации + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + | + | ЛЕВОЕ СОЕДИНЕНИЕ СостоянияУспешныхОбменовДанными КАК СостоянияУспешныхОбменовДанными + | ПО ПланОбмена.Ссылка = СостоянияУспешныхОбменовДанными.АвтономноеРабочееМесто + | + |ГДЕ + | ПланОбмена.Ссылка <> &ПриложениеВСервисе + | И НЕ ПланОбмена.ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | ПланОбмена.Представление"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ПланОбменаАвтономнойРаботы()); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ПриложениеВСервисе", ПриложениеВСервисе()); + Запрос.УстановитьПараметр("ПредставлениеПустойДаты", НСтр("ru = 'Синхронизация не выполнялась'")); + Запрос.Текст = ТекстЗапроса; + + Возврат Запрос.Выполнить().Выгрузить(); +КонецФункции + +Функция СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста() Экспорт + + Возврат НСтр("ru = 'Автономная работа.Создание автономного рабочего места'"); + +КонецФункции + +Функция СобытиеЖурналаРегистрацииУдалениеАвтономногоРабочегоМеста() Экспорт + + Возврат НСтр("ru = 'Автономная работа.Удаление автономного рабочего места'"); + +КонецФункции + +Функция ТекстИнструкцииИзМакета(Знач ИмяМакета) Экспорт + + Результат = Обработки.ПомощникСозданияАвтономногоРабочегоМеста.ПолучитьМакет(ИмяМакета).ПолучитьТекст(); + Результат = СтрЗаменить(Результат, "[НазваниеПрограммы]", Метаданные.Синоним); + Результат = СтрЗаменить(Результат, "[ВерсияПлатформы]", ОбменДаннымиВМоделиСервиса.ТребуемаяВерсияПлатформы()); + Возврат Результат; +КонецФункции + +Функция ЗаменитьНедопустимыеСимволыВИмениПользователя(Знач Значение, Знач СимволЗамены = "_") Экспорт + + НедопустимыеСимволы = ОбменДаннымиКлиентСервер.НедопустимыеСимволыВИмениПользователяWSПрокси(); + + Для Индекс = 1 По СтрДлина(НедопустимыеСимволы) Цикл + + НедопустимыйСимвол = Сред(НедопустимыеСимволы, Индекс, 1); + + Значение = СтрЗаменить(Значение, НедопустимыйСимвол, СимволЗамены); + + КонецЦикла; + + Возврат Значение; +КонецФункции + +Функция ДобавитьКлассОшибки(Знач ПредставлениеОшибки, Знач Класс) Экспорт + + Возврат Класс + ПредставлениеОшибки; + +КонецФункции + +Функция УдалитьКлассОшибки(Знач ПредставлениеОшибки, Знач Класс) Экспорт + + Возврат СтрЗаменить(ПредставлениеОшибки, Класс, ""); + +КонецФункции + +Функция КлассОшибкиСозданиеСлужебногоПользователя() Экспорт + + Возврат "#SA_CreateUser#"; + +КонецФункции + +// + +Функция НаименованиеАвтономногоРабочегоМестаПоУмолчанию() + + Результат = НСтр("ru = 'Автономная работа - %1'"); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат, ПолноеИмяПользователя()); +КонецФункции + +Функция ДопустимыеСимволыПрефиксаАвтономногоРабочегоМеста() + + Возврат НСтр("ru = 'АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЭЮЯабвгдежзиклмнопрстуфхцчшэюя'"); // 54 символа + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ, ИСПОЛЬЗУЕМЫЕ НА СТОРОНЕ АВТОНОМНОГО РАБОЧЕГО МЕСТА + +Процедура СинхронизироватьДанныеСПриложениемВИнтернете() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если Не ЭтоАвтономноеРабочееМесто() Тогда + + ПодробноеПредставлениеОшибки = + НСтр("ru = 'Эта информационная база не является автономным рабочим местом. Синхронизация данных отменена.'") + ; + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСинхронизацияДанных(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки + ); + ВызватьИсключение ПодробноеПредставлениеОшибки; + КонецЕсли; + + Отказ = Ложь; + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, ПриложениеВСервисе(), Истина, Истина, + Перечисления.ВидыТранспортаСообщенийОбмена.WS + ); + + Если Отказ Тогда + ВызватьИсключение НСтр("ru = 'В процессе синхронизации данных с приложением в Интернете возникли ошибки (см. журнал регистрации).'"); + КонецЕсли; + +КонецПроцедуры + +Процедура ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Экспорт + + Если Не ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ВызватьИсключение НСтр("ru = 'Первый запуск автономного рабочего места должен выполняться + |в файловом режиме работы информационной базы.'" + ); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ЗагрузитьДанныеНачальногоОбраза(); + + ЗагрузитьПараметрыИзНачальногоОбраза(); + +КонецПроцедуры + +Процедура ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете() Экспорт + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + УстановитьПривилегированныйРежим(Истина); + + РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.СинхронизацияДанныхСПриложениемВИнтернете, Ложь + ); + + КонецЕсли; + +КонецПроцедуры + +Функция НеобходимоВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Экспорт + + Возврат ЭтоАвтономноеРабочееМесто() + И Не Константы.НастройкаАвтономногоРабочегоМестаЗавершена.Получить() + ; +КонецФункции + +Функция СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы() Экспорт + + Возврат ЭтоАвтономноеРабочееМесто() + И Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() + И Константы.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы.Получить() + И СинхронизацияССервисомДавноНеВыполнялась() + ; +КонецФункции + +Функция СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы() Экспорт + + Возврат ЭтоАвтономноеРабочееМесто() + И Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() + И Константы.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы.Получить() + ; +КонецФункции + +Функция ОткрытьПомощникНастройкиАвтономногоРабочегоМеста() Экспорт + + Возврат ЭтоАвтономноеРабочееМесто() + И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() + ; +КонецФункции + +Функция РасписаниеСинхронизацииДанныхПоУмолчанию() Экспорт // Каждый час + + Месяцы = Новый Массив; + Месяцы.Добавить(1); + Месяцы.Добавить(2); + Месяцы.Добавить(3); + Месяцы.Добавить(4); + Месяцы.Добавить(5); + Месяцы.Добавить(6); + Месяцы.Добавить(7); + Месяцы.Добавить(8); + Месяцы.Добавить(9); + Месяцы.Добавить(10); + Месяцы.Добавить(11); + Месяцы.Добавить(12); + + ДниНедели = Новый Массив; + ДниНедели.Добавить(1); + ДниНедели.Добавить(2); + ДниНедели.Добавить(3); + ДниНедели.Добавить(4); + ДниНедели.Добавить(5); + ДниНедели.Добавить(6); + ДниНедели.Добавить(7); + + Расписание = Новый РасписаниеРегламентногоЗадания; + Расписание.Месяцы = Месяцы; + Расписание.ДниНедели = ДниНедели; + Расписание.ПериодПовтораВТечениеДня = 60*60; // 60 минут + Расписание.ПериодПовтораДней = 1; // каждый день + + Возврат Расписание; +КонецФункции + +Функция ЭтоАвтономноеРабочееМесто() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто(); + +КонецФункции + +Функция АдресДляВосстановленияПароляУчетнойЗаписи() Экспорт + + Результат = ОбменДаннымиВМоделиСервисаПереопределяемый.АдресДляВосстановленияПароляУчетнойЗаписи(); + + Если ПустаяСтрока(Результат) Тогда + Результат = "https://1cfresh.com/recover"; + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ПараметрыФормыВыполненияОбменаДанными() Экспорт + + Возврат Новый Структура("УзелИнформационнойБазы, АдресДляВосстановленияПароляУчетнойЗаписи", + ПриложениеВСервисе(), АдресДляВосстановленияПароляУчетнойЗаписи() + ); +КонецФункции + +Функция СинхронизацияССервисомДавноНеВыполнялась(Интервал = 3600) Экспорт // 1 час по умолчанию + + УстановитьПривилегированныйРежим(Истина); + + Возврат ТекущаяДатаСеанса() - ДатаПоследнейУспешнойСинхронизации(ПриложениеВСервисе()) > Интервал; + +КонецФункции + +// + +Процедура ЗагрузитьПараметрыИзНачальногоОбраза() + + Параметры = ПолучитьПараметрыИзНачальногоОбраза(); + + Попытка + ПланыОбмена.УстановитьГлавныйУзел(Неопределено); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение НСтр("ru = 'Возможно, информационная база открыта в режиме конфигуратора. + |Завершите работу конфигуратора и повторите запуск программы.'" + ); + КонецПопытки; + + // Создаем узлы плана обмена автономной работы в нулевой области данных + УзелАвтономногоРабочегоМеста = ПланыОбмена[ПланОбменаАвтономнойРаботы()].ЭтотУзел().ПолучитьОбъект(); + УзелАвтономногоРабочегоМеста.Код = Параметры.КодАвтономногоРабочегоМеста; + УзелАвтономногоРабочегоМеста.Наименование = Параметры.НаименованиеАвтономногоРабочегоМеста; + УзелАвтономногоРабочегоМеста.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + УзелАвтономногоРабочегоМеста.Записать(); + + УзелПриложенияВСервисе = ПланыОбмена[ПланОбменаАвтономнойРаботы()].СоздатьУзел(); + УзелПриложенияВСервисе.Код = Параметры.КодПриложенияВСервисе; + УзелПриложенияВСервисе.Наименование = Параметры.НаименованиеПриложенияВСервисе; + УзелПриложенияВСервисе.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + УзелПриложенияВСервисе.Записать(); + + // Назначаем созданный узел главным + ПланыОбмена.УстановитьГлавныйУзел(УзелПриложенияВСервисе.Ссылка); + + НачатьТранзакцию(); + Попытка + + Константы.НастройкаАвтономногоРабочегоМестаЗавершена.Установить(Истина); + Константы.ИспользоватьОбменДанными.Установить(Истина); + Константы.НастройкиПодчиненногоУзлаРИБ.Установить(""); + Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(Параметры.Префикс); + Константы.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы.Установить(Истина); + Константы.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы.Установить(Истина); + Константы.ЗаголовокСистемы.Установить(Параметры.ЗаголовокСистемы); + + Константы.ЭтоАвтономноеРабочееМесто.Установить(Истина); + Константы.ИспользоватьРазделениеПоОбластямДанных.Установить(Ложь); + + // константа влияет на открытие помощника по настройке автономного рабочего места + Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", ПриложениеВСервисе()); + СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); + + СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 200); + СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 200); + + СтруктураЗаписи.Вставить("WSИспользоватьПередачуБольшогоОбъемаДанных", Истина); + + СтруктураЗаписи.Вставить("WSURLВебСервиса", Параметры.URL); + СтруктураЗаписи.Вставить("WSИмяПользователя", Параметры.ИмяПользователя); + + // добавляем запись в РС + РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); + + // Устанавливаем дату создания начального образа, как дату первой успешной синхронизации данных. + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", ПриложениеВСервисе()); + СтруктураЗаписи.Вставить("ДействиеПриОбмене", Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + СтруктураЗаписи.Вставить("ДатаОкончания", Параметры.ДатаСозданияНачальногоОбраза); + РегистрыСведений.СостоянияУспешныхОбменовДанными.ДобавитьЗапись(СтруктураЗаписи); + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", ПриложениеВСервисе()); + СтруктураЗаписи.Вставить("ДействиеПриОбмене", Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + СтруктураЗаписи.Вставить("ДатаОкончания", Параметры.ДатаСозданияНачальногоОбраза); + РегистрыСведений.СостоянияУспешныхОбменовДанными.ДобавитьЗапись(СтруктураЗаписи); + + // Устанавливаем расписание синхронизации по умолчанию. + // Расписание отключаем, т.к. пароль пользователя не задан. + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.СинхронизацияДанныхСПриложениемВИнтернете); + РегламентноеЗадание.Использование = Ложь; + РегламентноеЗадание.Расписание = РасписаниеСинхронизацииДанныхПоУмолчанию(); + РегламентноеЗадание.Записать(); + + // Создаем пользователя ИБ и связываем его с пользователем из справочника пользователей. + Роли = Новый Массив; + Роли.Добавить("АдминистраторСистемы"); + Роли.Добавить("ПолныеПрава"); + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить("Имя", Параметры.ИмяВладельца); + ОписаниеПользователяИБ.Вставить("ПолноеИмя", Параметры.ИмяВладельца); + ОписаниеПользователяИБ.Вставить("Роли", Роли); + ОписаниеПользователяИБ.Вставить("АутентификацияСтандартная", Истина); + ОписаниеПользователяИБ.Вставить("ПоказыватьВСпискеВыбора", Истина); + + Пользователь = Справочники.Пользователи.ПолучитьСсылку(Новый УникальныйИдентификатор(Параметры.Владелец)).ПолучитьОбъект(); + + Если Пользователь = Неопределено Тогда + ВызватьИсключение НСтр("ru = 'Идентификация пользователя не выполнена. + |Возможно, справочник пользователей не включен в состав плана обмена автономной работы.'" + ); + КонецЕсли; + + УстановитьМинимальнуюДлинуПаролейПользователей(0); + УстановитьПроверкуСложностиПаролейПользователей(Ложь); + + Пользователь.Наименование = Параметры.ИмяВладельца; + Пользователь.Служебный = Ложь; + Пользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + Пользователь.Записать(); + + ПланыОбмена.УдалитьРегистрациюИзменений(УзелПриложенияВСервисе.Ссылка); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура ЗагрузитьДанныеНачальногоОбраза() + + КаталогИнформационнойБазы = ОбщегоНазначенияКлиентСервер.КаталогФайловойИнформационнойБазы(); + + ИмяФайлаДанныхНачальногоОбраза = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогИнформационнойБазы, + "data.xml" + ); + + ФайлДанныхНачальногоОбраза = Новый Файл(ИмяФайлаДанныхНачальногоОбраза); + Если Не ФайлДанныхНачальногоОбраза.Существует() Тогда + Возврат; // Данные начального образа были успешно загружены ранее + КонецЕсли; + + ДанныеНачальногоОбраза = Новый ЧтениеXML; + ДанныеНачальногоОбраза.ОткрытьФайл(ИмяФайлаДанныхНачальногоОбраза); + ДанныеНачальногоОбраза.Прочитать(); + ДанныеНачальногоОбраза.Прочитать(); + + НачатьТранзакцию(); + Попытка + + Пока ВозможностьЧтенияXML(ДанныеНачальногоОбраза) Цикл + + ЭлементДанных = ПрочитатьXML(ДанныеНачальногоОбраза); + + ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; + СтандартныеПодсистемыПереопределяемый.ПриПолученииДанныхОтГлавного(, ЭлементДанных, ПолучениеЭлемента, Ложь); + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Продолжить; + КонецЕсли; + + ЭлементДанных.ОбменДанными.Загрузка = Истина; + ЭлементДанных.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов"); + ЭлементДанных.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); + ЭлементДанных.Записать(); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + + ДанныеНачальногоОбраза = Неопределено; + ВызватьИсключение; + КонецПопытки; + + ДанныеНачальногоОбраза.Закрыть(); + + Попытка + УдалитьФайлы(ИмяФайлаДанныхНачальногоОбраза); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьПараметрыИзНачальногоОбраза() + + СтрокаXML = Константы.НастройкиПодчиненногоУзлаРИБ.Получить(); + + Если ПустаяСтрока(СтрокаXML) Тогда + ВызватьИсключение НСтр("ru = 'В автономное рабочее место не были переданы настройки. + |Работа с автономным рабочим место невозможна.'" + ); + КонецЕсли; + + ЧтениеXML = Новый ЧтениеXML; + ЧтениеXML.УстановитьСтроку(СтрокаXML); + + ЧтениеXML.Прочитать(); // Параметры + ВерсияФормата = ЧтениеXML.ПолучитьАтрибут("ВерсияФормата"); + + ЧтениеXML.Прочитать(); // ПараметрыАвтономногоРабочегоМеста + + Результат = СчитатьДанныеВСтуктуру(ЧтениеXML); + + ЧтениеXML.Закрыть(); + + Возврат Результат; +КонецФункции + +Функция СчитатьДанныеВСтуктуру(ЧтениеXML) + + // возвращаемое значение функции + Результат = Новый Структура; + + Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда + ВызватьИсключение НСтр("ru = 'Ошибка чтения XML'"); + КонецЕсли; + + ЧтениеXML.Прочитать(); + + Пока ЧтениеXML.ТипУзла <> ТипУзлаXML.КонецЭлемента Цикл + + Ключ = ЧтениеXML.Имя; + + Результат.Вставить(Ключ, ПрочитатьXML(ЧтениеXML)); + + КонецЦикла; + + ЧтениеXML.Прочитать(); + + Возврат Результат; +КонецФункции + +Функция СобытиеЖурналаРегистрацииСинхронизацияДанных() + + Возврат НСтр("ru = 'Автономная работа.Синхронизация данных'"); + +КонецФункции diff --git a/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/АвтономнаяРаботаСлужебный.mdo b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/АвтономнаяРаботаСлужебный.mdo new file mode 100644 index 000000000..750c93b7a --- /dev/null +++ b/SSL/src/CommonModules/АвтономнаяРаботаСлужебный/АвтономнаяРаботаСлужебный.mdo @@ -0,0 +1,11 @@ + + + АвтономнаяРаботаСлужебный + + ru + Автономная работа служебный + + true + true + true + diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl index fafede3ce..7b118d2a0 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификатор/Module.bsl @@ -15,7 +15,6 @@ Функция ПолучитьВерсииАдресныхОбъектов() Экспорт Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПустаяДата", '00000000'); Запрос.Текст = "ВЫБРАТЬ | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК АдресныйОбъект @@ -115,6 +114,10 @@ АдресныеСведения, АльтернативныеНазвания); + Если АдресныеСведения.Количество() = 0 Тогда + Возврат; + КонецЕсли; + ЗаписатьКлассификатор(КодАдресногоОбъекта, АдресныеСведения); КонецПроцедуры @@ -165,10 +168,14 @@ // Возвращает структуру, содержащую информацию по адресному объекту // // Параметры -// КодАдресногоОбъекта - Строка - номер адресного объекта от 1 до 89 + 99 в формате NN +// КодАдресногоОбъекта - Строка - номер адресного объекта от 1 до 89 + 99 в формате NN // // Возвращаемое значение -// Структура, с ключами: КодАдресногоОбъекта, Наименование, Сокращение, Индекс. +// Структура, с ключами: +// КодАдресногоОбъекта - Строка - код адресного объекта. +// Наименование - Строка - наименование адресного объекта. +// Сокращение - Строка - сокращение адресного объекта. +// Индекс - Строка - индекс. // Функция ИнформацияПоАдресномуОбъекту(КодАдресногоОбъекта) Экспорт @@ -374,23 +381,6 @@ //////////////////////////////////////////////////////////////////////////////// // Прочие служебные процедуры и функции -// Проверяет наличие обновлений адресного классификатора на веб сервере -// для тех объектов, которые ранее уже загружались. -// -// Возвращаемое значение -// Массив структур, в котором каждая структура имеет формат: -// ключ КодАдресногоОбъекта - строка - код адресного объекта -// ключ Наименование - строка - наименование адресного объекта -// ключ Сокращение - строка - сокращение адресного объекта -// ключ Индекс - строка - индекс адресного объекта -// ключ ОбновлениеДоступно - Булево -// -Функция ПроверитьОбновлениеАдресныхОбъектовСервер() Экспорт - - Возврат АдресныйКлассификаторКлиентСервер.ПроверитьОбновлениеАдресныхОбъектов(); - -КонецФункции - // Процедура загружает из файлов КЛАДР в регистр сведений данные по адресному объекту. // // Параметры: @@ -404,16 +394,12 @@ СтруктураВозврата = Новый Структура("СтатусВыполнения, СообщениеПользователю, ПутьКДанным, ПутьКДаннымНаСервере"); + СтруктураВозврата.ПутьКДаннымНаСервере = ПараметрыЗагрузки.ПутьКДаннымНаСервере; + Попытка Если ПараметрыЗагрузки.ИсточникДанныхДляЗагрузки = 1 Тогда - Результат = АдресныйКлассификаторКлиентСервер.ПолучитьВерсииДоступныеНаСайте1С(); - Если НЕ Результат.Статус Тогда - СтруктураВозврата.СтатусВыполнения = Ложь; - ПоместитьВоВременноеХранилище(СтруктураВозврата, АдресХранилища); - Возврат; - КонецЕсли; - ДоступныеВерсии = Результат.ДоступныеВерсии; + ДоступныеВерсии = ПараметрыЗагрузки.ДоступныеВерсии; Иначе ДоступныеВерсии = Новый Соответствие; Для Каждого АдресныйОбъект Из ПараметрыЗагрузки.АдресныеОбъекты Цикл @@ -441,15 +427,8 @@ АдресныеСведения = ИнформацияПоАдресномуОбъекту(АдресныйОбъект); ТекущаяВерсия = ?(ТекущиеВерсии[АдресныйОбъект] = Неопределено, '00000000', ТекущиеВерсии[АдресныйОбъект]); ДоступнаяВерсия = ?(ДоступныеВерсии[АдресныйОбъект] = Неопределено, '00000000', ДоступныеВерсии[АдресныйОбъект]); + // Пропускаем загрузку, если адресные сведения уже актуальны. Если ДоступнаяВерсия <= ТекущаяВерсия Тогда - СообщениеПользователю = СообщениеПользователю + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сведения по объекту: %1 %2 не загружены, так как - |текущая версия от %3, а загружаемая от %4.'"), - АдресныеСведения.Наименование, - АдресныеСведения.Сокращение, - Формат(ТекущаяВерсия, "ДЛФ=D"), - Формат(ДоступнаяВерсия, "ДЛФ=D")); Продолжить; КонецЕсли; @@ -480,7 +459,7 @@ ПоместитьВоВременноеХранилище(СтруктураВозврата, АдресХранилища); Возврат; - КонецПопытки; + КонецПопытки; СтруктураВозврата.СтатусВыполнения = СтатусВыполнения; СтруктураВозврата.СообщениеПользователю = СообщениеПользователю; @@ -524,6 +503,11 @@ // Параметры: // ТекстXML - Строка - строка, содержащая текст XML. // +// Возвращаемое значение: +// Соответствие с полями: +// Ключ - Строка - адресный объект. +// Значение - Дата - дата актуальности адресного объекта. +// Функция ПолучитьВерсииАдресныхСведений(знач ТекстXML) Экспорт ЧтениеXML = Новый ЧтениеXML; @@ -847,24 +831,33 @@ СтрДлина(АльтернативныйОбъект.Код) - 2) + "00"; Если ПризнакАктуальности = "51" Тогда + // адресную информацию необходимо искать в altnames.dbf OLDCODE = КодАктуальногоНаименования; - xB.Найти (OLDCODE, "="); - - НовыйКод = СокрЛП(xB.NewCode); - - // пытаемся найти актуальный объект в адресных сведениях - СтрокаТаблицы = АдресныеСведения.Найти(НовыйКод, "Код"); + Если xB.Найти (OLDCODE, "=") Тогда + НовыйКод = СокрЛП(xB.NewCode); + // пытаемся найти актуальный объект в адресных сведениях + СтрокаТаблицы = АдресныеСведения.Найти(НовыйКод, "Код"); + Иначе + СтрокаТаблицы = Неопределено; + КонецЕсли; Если СтрокаТаблицы = Неопределено Тогда КодУдаленногоНП = Лев(АльтернативныйОбъект.Код, СтрДлина(АльтернативныйОбъект.Код) - 2) + "99"; - НоваяСтрока = АдресныеСведения.Добавить(); - Код = Лев(АльтернативныйОбъект.Код, СтрДлина(АльтернативныйОбъект.Код) - 2) + "00"; + КоличествоЭлементов = АдресныеСведения.НайтиСтроки(Новый Структура("Код", Код)).Количество(); + + // Если уже имеется элемент с таким кодом, то пропускаем его + Если КоличествоЭлементов > 0 Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = АдресныеСведения.Добавить(); + ТипАдресногоЭлемента = ПолучитьТипАдресногоЭлементаПоКоду(Код); НоваяСтрока.Код = Код; diff --git a/SSL/src/CommonModules/АдресныйКлассификатор/АдресныйКлассификатор.mdo b/SSL/src/CommonModules/АдресныйКлассификатор/АдресныйКлассификатор.mdo index 83c822830..95134491b 100644 --- a/SSL/src/CommonModules/АдресныйКлассификатор/АдресныйКлассификатор.mdo +++ b/SSL/src/CommonModules/АдресныйКлассификатор/АдресныйКлассификатор.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl new file mode 100644 index 000000000..6a0aaf1bd --- /dev/null +++ b/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/Module.bsl @@ -0,0 +1,71 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Адресный классификатор". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Проверяет наличие обновлений адресного классификатора на веб сервере +// для тех объектов, которые ранее уже загружались. +// +// Возвращаемое значение +// Массив структур, в котором каждая структура имеет формат: +// ключ КодАдресногоОбъекта - строка - код адресного объекта +// ключ Наименование - строка - наименование адресного объекта +// ключ Сокращение - строка - сокращение адресного объекта +// ключ Индекс - строка - индекс адресного объекта +// ключ ОбновлениеДоступно - Булево +// +Функция ПроверитьОбновлениеАдресныхОбъектовСервер() Экспорт + + Возврат АдресныйКлассификаторКлиентСервер.ПроверитьОбновлениеАдресныхОбъектов(); + +КонецФункции + +// Возвращает версию адресных объектов, записанную при последнем обновлении +// Если записи об адресном объекте нет - возвращается дата 01.09.2008 +// +// Возвращаемое значение +// Массив соответствий: ключ - номер адресного объекта, значение - дата выпуска версии +// +Функция ПолучитьВерсииАдресныхОбъектов() Экспорт + + Возврат АдресныйКлассификатор.ПолучитьВерсииАдресныхОбъектов(); + +КонецФункции + +// Возвращает структуру, содержащую информацию по адресному объекту +// +// Параметры +// КодАдресногоОбъекта - Строка - номер адресного объекта от 1 до 89 + 99 в формате NN +// +// Возвращаемое значение +// Структура, с ключами: +// КодАдресногоОбъекта - Строка - код адресного объекта. +// Наименование - Строка - наименование адресного объекта. +// Сокращение - Строка - сокращение адресного объекта. +// Индекс - Строка - индекс. +// +Функция ИнформацияПоАдресномуОбъекту(КодАдресногоОбъекта) Экспорт + + Возврат АдресныйКлассификатор.ИнформацияПоАдресномуОбъекту(КодАдресногоОбъекта); + +КонецФункции + +// Считывает с диска файл версий адресных объектов и возвращает +// версии сведений по адресным объектам +// +// Параметры: +// ТекстXML - Строка - строка, содержащая текст XML. +// +// Возвращаемое значение: +// Соответствие с полями: +// Ключ - Строка - адресный объект. +// Значение - Дата - дата актуальности адресного объекта. +// +Функция ПолучитьВерсииАдресныхСведений(ТекстXML) Экспорт + + Возврат АдресныйКлассификатор.ПолучитьВерсииАдресныхСведений(ТекстXML); + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/АдресныйКлассификаторВызовСервера.mdo b/SSL/src/CommonModules/АдресныйКлассификаторВызовСервера/АдресныйКлассификаторВызовСервера.mdo new file mode 100644 index 000000000..4528ab622 --- /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 872fe37f8..524091e78 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиент/Module.bsl @@ -10,11 +10,11 @@ // Процедура ЗагрузитьАдресныйКлассификатор() Экспорт - #Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'В Веб-клиенте загрузка адресного классификатора не поддерживается.'")); - #Иначе - ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ФормаЗагрузкиАдресногоКлассификатора"); - #КонецЕсли +#Если ВебКлиент Тогда + Предупреждение(НСтр("ru = 'В веб-клиенте загрузка адресного классификатора не поддерживается.'")); +#Иначе + ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ЗагрузкаАдресногоКлассификатора"); +#КонецЕсли КонецПроцедуры @@ -24,7 +24,7 @@ Процедура ОпределитьНеобходимостьОбновленияАдресныхОбъектов() Экспорт #Если ВебКлиент Тогда - Результат = АдресныйКлассификатор.ПроверитьОбновлениеАдресныхОбъектовСервер(); + Результат = АдресныйКлассификаторВызовСервера.ПроверитьОбновлениеАдресныхОбъектовСервер(); #Иначе Результат = АдресныйКлассификаторКлиентСервер.ПроверитьОбновлениеАдресныхОбъектов(); #КонецЕсли @@ -56,10 +56,17 @@ КонецЦикла; Если КоличествоОбновлений > 0 Тогда - Текст = НСтр("ru = 'На сервере присутствуют обновления для следующих адресных объектов:'") - + Символы.ПС - + СписокСтрока; - + + Если КоличествоОбновлений > 5 Тогда + Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Обнаружены обновления для адресных объектов (%1).'"), КоличествоОбновлений) + + Символы.ПС; + Иначе + Текст = НСтр("ru = 'Обнаружены обновления следующих адресных объектов:'") + + Символы.ПС + + СписокСтрока; + КонецЕсли; + #Если ВебКлиент Тогда Предупреждение(Текст); #Иначе @@ -69,20 +76,19 @@ Результат = Вопрос(Текст, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет, "Обновление адресного классификатора"); Если Результат = КодВозвратаДиалога.Да Тогда - ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ФормаЗагрузкиАдресногоКлассификатора", + ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ЗагрузкаАдресногоКлассификатора", Новый Структура("АдресныеОбъекты", АдресныеОбъекты) ); КонецЕсли; #КонецЕсли Иначе ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Обновление не требуется. - |Информационная база содержит актуальные адресные сведения - |при сравнении с версией классификатора от %1.'"), + НСтр("ru = 'Обновление адресного классификатора не требуется. + |В программе уже загружены актуальные адресные сведения от %1.'"), Формат(Результат.ВерсияПоследнегоОбновленияКЛАДР, "ДЛФ=D")); - Предупреждение(ТекстПредупреждения, , НСтр("ru = 'Адресный классификатор'")); + Предупреждение(ТекстПредупреждения); КонецЕсли; Иначе - Предупреждение(НСтр("ru = 'Адресный классификатор не заполнен.'"), , НСтр("ru = 'Адресный классификатор'")); + Предупреждение(НСтр("ru = 'Адресный классификатор не заполнен.'")); КонецЕсли; КонецПроцедуры @@ -91,7 +97,7 @@ // Процедура ОчиститьКлассификатор() Экспорт - ОткрытьФормуМодально("РегистрСведений.АдресныйКлассификатор.Форма.ФормаОчисткиАдресногоКлассификатора"); + ОткрытьФормуМодально("РегистрСведений.АдресныйКлассификатор.Форма.ОчисткаАдресногоКлассификатора"); КонецПроцедуры @@ -413,46 +419,4 @@ КонецФункции -// Передает сжатый файл КЛАДР на сервер. На стороне сервера файл распаковывается. -// -// Параметры -// ПутьКФайламНаКлиенте - строка - путь к каталогу с файлом -// ИмяФайла - строка - имя файла архива, который нужно передать на сервер и распаковывать -// -// Возвращаемое значение -// Строка - путь к каталогу на сервере, в который был распакован файл -// -// -Процедура ПередатьФайлНаСервер(знач ПутьКФайламНаКлиенте, знач ИмяФайла, ПутьККаталогуНаСервере) Экспорт - - ПутьКФайлуАрхива = ПутьКФайламНаКлиенте + ЗаменитьРасширение_DBF_На_ZIP(ИмяФайла); - - Файл = Новый Файл(ПутьКФайлуАрхива); - - Если Файл.Существует() Тогда - АдресныйКлассификатор.СохранитьФайлНаСервереИРаспаковать(Новый ДвоичныеДанные(ПутьКФайлуАрхива), - ЗаменитьРасширение_DBF_На_ZIP(ИмяФайла), - ПутьККаталогуНаСервере); - Иначе - ВызватьИсключение НСтр("ru = 'Невозможно передать файл данных на сервер. Файл не найден.'"); - КонецЕсли; - -КонецПроцедуры - -// Передает сжатый файлы КЛАДР на сервер. На стороне сервера файл распаковывается. -// -// Параметры: -// ПутьКФайламНаКлиенте - Строка - путь к каталогу с файлом на клиенте -// ПутьККаталогуНаСервере - Строка - путь к каталогу, в который будет распаковываться файл на сервере -// АдресныйОбъект - Строка - номер адресного объекта в формате NN. -// -Процедура ПередатьФайлыНаСерверПоАдреснымОбъектам(знач ПутьКФайламНаКлиенте, ПутьККаталогуНаСервере, АдресныйОбъект) Экспорт - - ИмяФайла = "BASE" + АдресныйОбъект + ".ZIP"; - АдресныйКлассификатор.СохранитьФайлНаСервереИРаспаковать(Новый ДвоичныеДанные(ПутьКФайламНаКлиенте + ИмяФайла), - ИмяФайла, - ПутьККаталогуНаСервере); - -КонецПроцедуры - #КонецЕсли diff --git a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl b/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl index 5eac527b1..d72ca9902 100644 --- a/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АдресныйКлассификаторКлиентСервер/Module.bsl @@ -19,7 +19,7 @@ // Функция ПроверитьОбновлениеАдресныхОбъектов() Экспорт - ВерсииХранимыхСведений = АдресныйКлассификатор.ПолучитьВерсииАдресныхОбъектов(); + ВерсииХранимыхСведений = АдресныйКлассификаторВызовСервера.ПолучитьВерсииАдресныхОбъектов(); Результат = ПолучитьВерсииДоступныеНаСайте1С(); Если НЕ Результат.Статус Тогда @@ -31,7 +31,7 @@ Для Каждого ЭлементХранимаяВерсия Из ВерсииХранимыхСведений Цикл АдресныйОбъект = ЭлементХранимаяВерсия.Представление; - АдресныеСведения = АдресныйКлассификатор.ИнформацияПоАдресномуОбъекту(АдресныйОбъект); + АдресныеСведения = АдресныйКлассификаторВызовСервера.ИнформацияПоАдресномуОбъекту(АдресныйОбъект); АдресныеСведения.Вставить("ОбновлениеДоступно", ?(ТипЗнч(ДоступныеВерсии[АдресныйОбъект]) <> Тип("Дата"), Ложь, @@ -86,7 +86,7 @@ УдалитьФайлы(РезультатПолученияФайлов.Путь); - ДоступныеВерсии = АдресныйКлассификатор.ПолучитьВерсииАдресныхСведений(ТекстXML); + ДоступныеВерсии = АдресныйКлассификаторВызовСервера.ПолучитьВерсииАдресныхСведений(ТекстXML); Возврат Новый Структура("Статус, ДоступныеВерсии", Истина, ДоступныеВерсии); diff --git a/SSL/src/CommonModules/Анкетирование/Module.bsl b/SSL/src/CommonModules/Анкетирование/Module.bsl index e6ddd0b36..20b15dd51 100644 --- a/SSL/src/CommonModules/Анкетирование/Module.bsl +++ b/SSL/src/CommonModules/Анкетирование/Module.bsl @@ -190,7 +190,7 @@ НоваяСтрока.Формулировка = "Анкета"; НоваяСтрока.ТипСтроки = "Корень"; - НоваяСтрока.КодКартинки = ПолучитьКодКартинкиШаблонаАнкеты(Ложь); + НоваяСтрока.КодКартинки = АнкетированиеКлиентСервер.ПолучитьКодКартинкиШаблонаАнкеты(Ложь); КонецПроцедуры @@ -207,7 +207,7 @@ НоваяСтрока.Формулировка = Формулировка; НоваяСтрока.ТипСтроки = Формулировка; - НоваяСтрока.КодКартинки = ПолучитьКодКартинкиШаблонаАнкеты(Ложь); + НоваяСтрока.КодКартинки = АнкетированиеКлиентСервер.ПолучитьКодКартинкиШаблонаАнкеты(Ложь); КонецПроцедуры @@ -267,7 +267,7 @@ КонецЕсли; НоваяСтрока.ВопросШаблона = Выборка.ВопросШаблона; - НоваяСтрока.КодКартинки = ПолучитьКодКартинкиШаблонаАнкеты(Выборка.ЭтоРаздел,Выборка.ТипВопроса); + НоваяСтрока.КодКартинки = АнкетированиеКлиентСервер.ПолучитьКодКартинкиШаблонаАнкеты(Выборка.ЭтоРаздел,Выборка.ТипВопроса); НоваяСтрока.ТипВопроса = Выборка.ТипВопроса; НоваяСтрока.ТипТабличногоВопроса = Выборка.ТипТабличногоВопроса; НоваяСтрока.ТипСтроки = ?(Выборка.ЭтоРаздел,"Раздел","Вопрос"); @@ -1422,7 +1422,7 @@ НовыйЭлементДерева = ЭлементыДереваРодителя.Добавить(); НовыйЭлементДерева.Формулировка = ВыборкаРазделы.Формулировка; - НовыйЭлементДерева.КодКартинки = ПолучитьКодКартинкиШаблонаАнкеты(Истина); + НовыйЭлементДерева.КодКартинки = АнкетированиеКлиентСервер.ПолучитьКодКартинкиШаблонаАнкеты(Истина); НовыйЭлементДерева.ТипСтроки = "Раздел"; НовыйЭлементДерева.Ссылка = ВыборкаРазделы.Ссылка; НовыйЭлементДерева.КоличествоВопросов = ВыборкаРазделы.Количество; @@ -1804,30 +1804,7 @@ КонецПроцедуры -// Возвращает код картинки в зависимости от типа вопроса и принадлежности к разделу. -// -// Параметры -// ЭтоРаздел - Булево - признак раздела -// ТипВопроса - Перечисление.ТипыВопросовШаблонаАнкеты -// -// Возвращаемое значение: -// Число - код картинки для отображения в дереве -// -Функция ПолучитьКодКартинкиШаблонаАнкеты(ЭтоРаздел,ТипВопроса = Неопределено) Экспорт - - Если ЭтоРаздел Тогда - Возврат 1; - ИначеЕсли ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Простой Тогда - Возврат 2; - ИначеЕсли ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.ВопросСУсловием Тогда - Возврат 4; - ИначеЕсли ТипВопроса = Перечисления.ТипыВопросовШаблонаАнкеты.Табличный Тогда - Возврат 3; - Иначе - Возврат 0; - КонецЕсли; - -КонецФункции + // Получает представления элементарный вопросов табличных вопросов // и заполняет соответствие ПредставленияВопросов, из которого потом будут получаться представления diff --git a/SSL/src/CommonModules/Анкетирование/Анкетирование.mdo b/SSL/src/CommonModules/Анкетирование/Анкетирование.mdo index 04cb45128..e9e8607c0 100644 --- a/SSL/src/CommonModules/Анкетирование/Анкетирование.mdo +++ b/SSL/src/CommonModules/Анкетирование/Анкетирование.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl index 3ed602457..f7dde6d20 100644 --- a/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/АнкетированиеКлиентСервер/Module.bsl @@ -141,4 +141,29 @@ Возврат -1; +КонецФункции + +// Возвращает код картинки в зависимости от типа вопроса и принадлежности к разделу. +// +// Параметры +// ЭтоРаздел - Булево - признак раздела +// ТипВопроса - Перечисление.ТипыВопросовШаблонаАнкеты +// +// Возвращаемое значение: +// Число - код картинки для отображения в дереве +// +Функция ПолучитьКодКартинкиШаблонаАнкеты(ЭтоРаздел,ТипВопроса = Неопределено) Экспорт + + Если ЭтоРаздел Тогда + Возврат 1; + ИначеЕсли ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Простой") Тогда + Возврат 2; + ИначеЕсли ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.ВопросСУсловием") Тогда + Возврат 4; + ИначеЕсли ТипВопроса = ПредопределенноеЗначение("Перечисление.ТипыВопросовШаблонаАнкеты.Табличный") Тогда + Возврат 3; + Иначе + Возврат 0; + КонецЕсли; + КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl index 2a6eaa590..a24b340b0 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/Module.bsl @@ -101,11 +101,6 @@ Функция ПеренаправитьЗадачи(Знач МассивЗадач, Знач ИнфоОПеренаправлении, Знач ТолькоПроверка = Ложь, МассивПеренаправленныхЗадач = Неопределено) Экспорт - // Перенаправление задач доступно всем, кто имеет права на их изменение. - Если ПравоДоступа("Изменение", Метаданные.Задачи.ЗадачаИсполнителя) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - Результат = Истина; Для Каждого Задача Из МассивЗадач Цикл @@ -137,11 +132,13 @@ // позволить выполнять перенаправление по команде из формы этой задачи. ЗадачаОбъект = Задача.Ссылка.ПолучитьОбъект(); + УстановитьПривилегированныйРежим(Истина); НоваяЗадача = Задачи.ЗадачаИсполнителя.СоздатьЗадачу(); НоваяЗадача.Заполнить(ЗадачаОбъект); ЗаполнитьЗначенияСвойств(НоваяЗадача, ИнфоОПеренаправлении, "Исполнитель,РольИсполнителя,ОсновнойОбъектАдресации,ДополнительныйОбъектАдресации"); НоваяЗадача.Записать(); + УстановитьПривилегированныйРежим(Ложь); МассивПеренаправленныхЗадач.Добавить(НоваяЗадача.Ссылка); @@ -154,7 +151,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи'"), + ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; @@ -165,40 +162,6 @@ КонецФункции -// Возвращает дату завершения указанного бизнес-процесса, -// полученную как максимальная дата исполнения задач бизнес-процесса. -// -// Параметры -// БизнесПроцессСсылка - бизнес-процесс -// -// Возвращаемое значение: -// Дата -// -Функция ДатаЗавершенияБизнесПроцесса(БизнесПроцессСсылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | МАКСИМУМ(ЗадачаИсполнителя.ДатаИсполнения) КАК МаксДатаИсполнения - |ИЗ - | Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя - |ГДЕ - | ЗадачаИсполнителя.БизнесПроцесс = &БизнесПроцесс - | И ЗадачаИсполнителя.Выполнена = ИСТИНА"; - Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцессСсылка); - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат ТекущаяДатаСеанса(); - КонецЕсли; - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Возврат Выборка.МаксДатаИсполнения; - -КонецФункции - // Отмечает указанные бизнес-процессы как активные // Процедура СделатьАктивнымБизнесПроцессы(БизнесПроцессы) Экспорт @@ -219,7 +182,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, + ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -232,23 +195,28 @@ Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда Возврат; - КонецЕсли; - - Если Не ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцесс) Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вашего уровня прав недостаточно для того, чтобы сделать активным бизнес-процесс ""%1"".'"), - Строка(БизнесПроцесс)); - ВызватьИсключение ТекстСообщения; - КонецЕсли; + КонецЕсли; Объект = БизнесПроцесс.ПолучитьОбъект(); - Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда - Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; - Объект.Записать(); - КонецЕсли; + Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен Тогда + + Если Объект.Завершен Тогда + ВызватьИсключение НСтр("ru = 'Невозможно сделать активными завершенные бизнес-процессы.'"); + КонецЕсли; + + Если Не Объект.Стартован Тогда + ВызватьИсключение НСтр("ru = 'Невозможно сделать активными не стартовавшие бизнес-процессы.'"); + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Бизнес-процесс уже активен.'"); + КонецЕсли; + + Объект.Заблокировать(); + Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; + Объект.Записать(); -КонецПроцедуры +КонецПроцедуры // Отмечает указанные бизнес-процессы как остановленные // @@ -268,7 +236,8 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -280,78 +249,28 @@ Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда Возврат; - КонецЕсли; - - Если Не ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцесс) Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вашего уровня прав недостаточно для остановки бизнес-процесса ""%1"".'"), - Строка(БизнесПроцесс)); - ВызватьИсключение ТекстСообщения; - КонецЕсли; + КонецЕсли; Объект = БизнесПроцесс.ПолучитьОбъект(); + + Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда + + Если Объект.Завершен Тогда + ВызватьИсключение НСтр("ru = 'Невозможно остановить завершенные бизнес-процессы.'"); + КонецЕсли; + + Если Не Объект.Стартован Тогда + ВызватьИсключение НСтр("ru = 'Невозможно остановить не стартовавшие бизнес-процессы.'"); + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Бизнес-процесс уже остановлен.'"); + КонецЕсли; + Объект.Заблокировать(); + Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен; + Объект.Записать(); - Если Объект.Завершен = Истина Тогда - ВызватьИсключение НСтр("ru = 'Нельзя останавливать завершенные бизнес-процессы.'"); - КонецЕсли; - - Если Объект.Стартован <> Истина Тогда - ВызватьИсключение НСтр("ru = 'Нельзя останавливать не стартовавшие бизнес-процессы.'"); - КонецЕсли; - - Если Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен Тогда - Объект.Состояние = Перечисления.СостоянияБизнесПроцессов.Остановлен; - Объект.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Возвращает число невыполненных задач по указанным бизнес-процессам -// -Функция ПолучитьЧислоНевыполненныхЗадачБизнесПроцессов(БизнесПроцессы) Экспорт - - ЧислоЗадач = 0; - - Для каждого БизнесПроцесс Из БизнесПроцессы Цикл - - Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Продолжить; - КонецЕсли; - - ЧислоЗадач = ЧислоЗадач + ПолучитьЧислоНевыполненныхЗадачБизнесПроцесса(БизнесПроцесс); - - КонецЦикла; - - Возврат ЧислоЗадач; - -КонецФункции - -// Возвращает число невыполненных задач по указанному бизнес-процессу -// -Функция ПолучитьЧислоНевыполненныхЗадачБизнесПроцесса(БизнесПроцесс) Экспорт - - Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Возврат 0; - КонецЕсли; - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | КОЛИЧЕСТВО(*) КАК Количество - |ИЗ - | Задача.ЗадачаИсполнителя КАК Задачи - |ГДЕ - | Задачи.БизнесПроцесс = &БизнесПроцесс - | И Задачи.Выполнена = Ложь"; - - Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс); - - Выборка = Запрос.Выполнить().Выбрать(); - Выборка.Следующий(); - - Возврат Выборка.Количество; - -КонецФункции +КонецПроцедуры // Отмечает указанные задачи как принятые к исполнению // @@ -378,7 +297,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, + ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -412,7 +331,7 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции'"), УровеньЖурналаРегистрации.Ошибка,,, + ЗаписьЖурналаРегистрации(БизнесПроцессыИЗадачиСервер.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -441,6 +360,7 @@ // Процедура УведомитьИсполнителейОНовыхЗадачах() Экспорт + // При выполнении в регламентном задании переходим безусловно в привилегированный режим. Если ПустаяСтрока(ИмяПользователя()) Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; @@ -450,6 +370,7 @@ УстановитьПривилегированныйРежим(Истина); ДатаПоследнегоУведомления = Константы.ДатаУведомленияОНовыхЗадачах.Получить(); УстановитьПривилегированныйРежим(Ложь); + // Если оповещение ранее не производилось, или последнее оповещение происходило // ранее, чем за сутки, то отбираем новые задачи за последние сутки. Если (ДатаПоследнегоУведомления = '00010101000000') @@ -484,6 +405,7 @@ // Процедура ПроконтролироватьЗадачи() Экспорт + // При выполнении в регламентном задании переходим безусловно в привилегированный режим. Если ПустаяСтрока(ИмяПользователя()) Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; @@ -507,10 +429,10 @@ // Задача адресована лично исполнителю? Если ЗначениеЗаполнено(ПросроченнаяЗадача.Исполнитель) Тогда ПолучательПисьма = ""; - БизнесПроцессыИЗадачиПереопределяемый.ПолучитьАдресЭлектроннойПочты(ПросроченнаяЗадача.Исполнитель, ПолучательПисьма); + СтандартныеПодсистемыПереопределяемый.ПолучитьАдресЭлектроннойПочты(ПросроченнаяЗадача.Исполнитель, ПолучательПисьма); НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, ПросроченнаяЗадача.Исполнитель, ТекстПисьма, "Исполнителю"); ПолучательПисьма = ""; - БизнесПроцессыИЗадачиПереопределяемый.ПолучитьАдресЭлектроннойПочты(ПросроченнаяЗадача.Автор, ПолучательПисьма); + СтандартныеПодсистемыПереопределяемый.ПолучитьАдресЭлектроннойПочты(ПросроченнаяЗадача.Автор, ПолучательПисьма); НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, ПросроченнаяЗадача.Автор, ТекстПисьма, "Автору"); Иначе Исполнители = ВыбратьИсполнителейЗадач(ПросроченнаяЗадача); @@ -520,7 +442,7 @@ // Исполнитель не выполняет свои задачи. Для Каждого Исполнитель Из Исполнители Цикл ПолучательПисьма = ""; - БизнесПроцессыИЗадачиПереопределяемый.ПолучитьАдресЭлектроннойПочты(Исполнитель.Исполнитель, ПолучательПисьма); + СтандартныеПодсистемыПереопределяемый.ПолучитьАдресЭлектроннойПочты(Исполнитель.Исполнитель, ПолучательПисьма); НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, Исполнитель.Исполнитель, ТекстПисьма, "Исполнителю"); КонецЦикла; Иначе // Задачу исполнять некому. @@ -529,7 +451,7 @@ Для Каждого Координатор Из Координаторы Цикл ПолучательПисьма = ""; - БизнесПроцессыИЗадачиПереопределяемый.ПолучитьАдресЭлектроннойПочты(Координатор, ПолучательПисьма); + СтандартныеПодсистемыПереопределяемый.ПолучитьАдресЭлектроннойПочты(Координатор, ПолучательПисьма); НайтиПисьмоИДобавитьТекст(НаборПисемПоАдресатам, ПолучательПисьма, Координатор, ТекстПисьма, "Координатору"); КонецЦикла; КонецЕсли; @@ -616,46 +538,6 @@ КонецПроцедуры -// Возвращает массив подчиненных указанной задаче бизнес-процессов -// -// Параметры -// ЗадачаСсылка - задача. -// -// Возвращаемое значение: -// массив ссылок на бизнес-процессы -// -Функция ПолучитьБизнесПроцессыГлавнойЗадачи(ЗадачаСсылка) Экспорт - - Результат = Новый Массив; - Для Каждого ТипБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл - - Попытка - ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | %1.Ссылка КАК Ссылка - |ИЗ - | %2 КАК %1 - |ГДЕ - | %1.ГлавнаяЗадача = &ГлавнаяЗадача", ТипБизнесПроцесса.Имя, ТипБизнесПроцесса.ПолноеИмя()); - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ГлавнаяЗадача", ЗадачаСсылка); - - РезультатЗапроса = Запрос.Выполнить(); - Выборка = РезультатЗапроса.Выбрать(); - Пока Выборка.Следующий() Цикл - Результат.Добавить(Выборка.Ссылка); - КонецЦикла; - - Исключение - // У бизнес-процесса может и не быть главной задачи - КонецПопытки - - КонецЦикла; - - Возврат Результат; - -КонецФункции - // Формирует список подбора для указания исполнителя в полях // ввода составного типа (Пользователь и Роль) Функция СформироватьДанныеВыбораИсполнителя(Текст) Экспорт @@ -671,6 +553,8 @@ |ГДЕ | Пользователи.Наименование ПОДОБНО &Текст | И Пользователи.Недействителен = ЛОЖЬ + | И Пользователи.Служебный = ЛОЖЬ + | И Пользователи.ПометкаУдаления = ЛОЖЬ | |ОБЪЕДИНИТЬ ВСЕ | @@ -679,17 +563,18 @@ |ИЗ | Справочник.РолиИсполнителей КАК РолиИсполнителей |ГДЕ - | РолиИсполнителей.Наименование ПОДОБНО &Текст"; + | РолиИсполнителей.Наименование ПОДОБНО &Текст + | И НЕ РолиИсполнителей.ПометкаУдаления"; Запрос.УстановитьПараметр("Текст", Текст + "%"); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ДанныеВыбора.Добавить(Выборка.Ссылка); - КонецЦикла; + КонецЦикла; Возврат ДанныеВыбора; -КонецФункции +КонецФункции //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -944,7 +829,7 @@ Функция ОтправитьУведомлениеОНовыхЗадачах(Исполнитель, ЗадачиПоИсполнителю) ПочтовыйАдресПолучателя = ""; - БизнесПроцессыИЗадачиПереопределяемый.ПолучитьАдресЭлектроннойПочты(Исполнитель, ПочтовыйАдресПолучателя); + СтандартныеПодсистемыПереопределяемый.ПолучитьАдресЭлектроннойПочты(Исполнитель, ПочтовыйАдресПолучателя); Если ПустаяСтрока(ПочтовыйАдресПолучателя) Тогда ЗаписьЖурналаРегистрации(НСтр("ru = 'Бизнес-процессы и задачи.Уведомление о новых задачах'"), УровеньЖурналаРегистрации.Информация,,, @@ -1023,7 +908,53 @@ КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Прочие внутренние процедуры и функции +// Прочие служебные процедуры и функции + +// Возвращает число невыполненных задач по указанным бизнес-процессам +// +Функция КоличествоНевыполненныхЗадачБизнесПроцессов(БизнесПроцессы) Экспорт + + КоличествоЗадач = 0; + + Для каждого БизнесПроцесс Из БизнесПроцессы Цикл + + Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Продолжить; + КонецЕсли; + + КоличествоЗадач = КоличествоЗадач + КоличествоНевыполненныхЗадачБизнесПроцесса(БизнесПроцесс); + + КонецЦикла; + + Возврат КоличествоЗадач; + +КонецФункции + +// Возвращает число невыполненных задач по указанному бизнес-процессу +// +Функция КоличествоНевыполненныхЗадачБизнесПроцесса(БизнесПроцесс) Экспорт + + Если ТипЗнч(БизнесПроцесс) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда + Возврат 0; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | Задача.ЗадачаИсполнителя КАК Задачи + |ГДЕ + | Задачи.БизнесПроцесс = &БизнесПроцесс + | И Задачи.Выполнена = Ложь"; + + Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцесс); + + Выборка = Запрос.Выполнить().Выбрать(); + Выборка.Следующий(); + + Возврат Выборка.Количество; + +КонецФункции // Помечает на удаление указанные бизнес-процессы // @@ -1056,215 +987,10 @@ КонецПроцедуры -// Проверяет наличие прав для того, чтобы отметить бизнес-процесс -// как остановленный или активный -// -Функция ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцесс) - - Результат = БизнесПроцессыИЗадачиПереопределяемый.ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцесс); - Если Результат <> Неопределено Тогда - Возврат Результат; - КонецЕсли; - - Если Пользователи.ЭтоПолноправныйПользователь() Тогда - Возврат Истина; - КонецЕсли; - - Если БизнесПроцесс.Автор = Пользователи.ТекущийПользователь() Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Записать бизнес-процесс БизнесПроцессСсылка в общий список, -// задав при этом значения полей из структуры ЗначенияПолей. -// -Процедура ЗаписатьВСписокБизнесПроцессов(БизнесПроцессСсылка, ЗначенияПолей) Экспорт - - НаборЗаписей = РегистрыСведений.ДанныеБизнесПроцессов.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.БизнесПроцесс.Значение = БизнесПроцессСсылка; - НаборЗаписей.Отбор.БизнесПроцесс.Использование = Истина; - Запись = НаборЗаписей.Добавить(); - ЗаполнитьЗначенияСвойств(Запись, ЗначенияПолей); - Запись.БизнесПроцесс = БизнесПроцессСсылка; - - БизнесПроцессыИЗадачиПереопределяемый.ПриЗаписиСпискаБизнесПроцессов(Запись); - - УстановитьПривилегированныйРежим(Истина); - НаборЗаписей.Записать(); - -КонецПроцедуры - -// Помечает на удаление задачи указанного бизнес-процесса. -// -// Параметры -// БизнесПроцессСсылка - бизнес-процесс -// ПометкаУдаления - Булево - значение свойства ПометкаУдаления. -// -Процедура УстановитьПометкуУдаленияЗадач(БизнесПроцессСсылка, ПометкаУдаления) Экспорт - - ПредыдущаяПометкаУдаления = ОбщегоНазначения.ПолучитьЗначениеРеквизита(БизнесПроцессСсылка, "ПометкаУдаления"); - Если ПометкаУдаления <> ПредыдущаяПометкаУдаления Тогда - УстановитьПривилегированныйРежим(Истина); - БизнесПроцессыИЗадачиСервер.УстановитьПометкуУдаленияЗадач(БизнесПроцессСсылка, ПометкаУдаления); - КонецЕсли; - -КонецПроцедуры - -// Получить группу исполнителей задач, которая соответствует реквизитам адресации. -// Если группа еще не существует, то создается и возвращается новая. -// -// Параметры -// РольИсполнителя - СправочникСсылка.РолиИсполнителей -// ОсновнойОбъектАдресации - ЛюбаяСсылка -// ДополнительныйОбъектАдресации - ЛюбаяСсылка -// -// Возвращаемое значение: -// СправочникСсылка.ГруппыИсполнителейЗадач -// -Функция ГруппаИсполнителейЗадач(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ГруппыИсполнителейЗадач.Ссылка КАК Ссылка - |ИЗ - | Справочник.ГруппыИсполнителейЗадач КАК ГруппыИсполнителейЗадач - |ГДЕ - | ГруппыИсполнителейЗадач.РольИсполнителя = &РольИсполнителя - | И ГруппыИсполнителейЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации - | И ГруппыИсполнителейЗадач.ДополнительныйОбъектАдресации = &ДополнительныйОбъектАдресации"); - Запрос.УстановитьПараметр("РольИсполнителя", РольИсполнителя); - Запрос.УстановитьПараметр("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); - Запрос.УстановитьПараметр("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ГруппаИсполнителей = Выборка.Ссылка; - Иначе - // Требуется добавить новую группу исполнителей задач. - ГруппаИсполнителейОбъект = Справочники.ГруппыИсполнителейЗадач.СоздатьЭлемент(); - ГруппаИсполнителейОбъект.РольИсполнителя = РольИсполнителя; - ГруппаИсполнителейОбъект.ОсновнойОбъектАдресации = ОсновнойОбъектАдресации; - ГруппаИсполнителейОбъект.ДополнительныйОбъектАдресации = ДополнительныйОбъектАдресации; - ГруппаИсполнителейОбъект.Записать(); - ГруппаИсполнителей = ГруппаИсполнителейОбъект.Ссылка; - КонецЕсли; - - Возврат ГруппаИсполнителей; - -КонецФункции - -// Получает группы исполнителей задач согласно новым записям исполнителей задач. -// -// Параметры -// НовыеИсполнителиЗадач - ТаблицаЗначений - выгрузка из набора записей регистра сведений ИсполнителиЗадач -// -// Возвращаемое значение: -// Массив - с элементами типа СправочникСсылка.ГруппыИсполнителейЗадач -// -Функция ПолучитьГруппыДоступаЗадач(НовыеИсполнителиЗадач) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НазванияПолей = "РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации"; - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | НовыеЗаписи.РольИсполнителя КАК РольИсполнителя, - | НовыеЗаписи.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, - | НовыеЗаписи.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации - |ПОМЕСТИТЬ НовыеЗаписи - |ИЗ - | &НовыеЗаписи КАК НовыеЗаписи - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ЕСТЬNULL(ГруппыИсполнителейЗадач.Ссылка, ЗНАЧЕНИЕ(Справочник.ГруппыИсполнителейЗадач.ПустаяСсылка)) КАК Ссылка, - | НовыеЗаписи.РольИсполнителя КАК РольИсполнителя, - | НовыеЗаписи.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, - | НовыеЗаписи.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации - |ИЗ - | НовыеЗаписи КАК НовыеЗаписи - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыИсполнителейЗадач КАК ГруппыИсполнителейЗадач - | ПО НовыеЗаписи.РольИсполнителя = ГруппыИсполнителейЗадач.РольИсполнителя - | И НовыеЗаписи.ОсновнойОбъектАдресации = ГруппыИсполнителейЗадач.ОсновнойОбъектАдресации - | И НовыеЗаписи.ДополнительныйОбъектАдресации = ГруппыИсполнителейЗадач.ДополнительныйОбъектАдресации"); - Запрос.УстановитьПараметр("НовыеЗаписи", НовыеИсполнителиЗадач.Скопировать(,НазванияПолей)); - ГруппыИсполнителей = Запрос.Выполнить().Выгрузить(); - ОтборГруппыИсполнителей = Новый Структура(НазванияПолей); - ГруппыИсполнителейЗадач = Новый Массив; - - Для каждого Запись Из НовыеИсполнителиЗадач Цикл - ЗаполнитьЗначенияСвойств(ОтборГруппыИсполнителей, Запись); - ГруппаИсполнителей = ГруппыИсполнителей.НайтиСтроки(ОтборГруппыИсполнителей)[0]; - // нужно обновить ссылку в найденной строке. - Если НЕ ЗначениеЗаполнено(ГруппаИсполнителей.Ссылка) Тогда - // Требуется добавить новую группу исполнителей. - ГруппаИсполнителейОбъект = Справочники.ГруппыИсполнителейЗадач.СоздатьЭлемент(); - ЗаполнитьЗначенияСвойств(ГруппаИсполнителейОбъект, ОтборГруппыИсполнителей); - ГруппаИсполнителейОбъект.Записать(); - ГруппаИсполнителей.Ссылка = ГруппаИсполнителейОбъект.Ссылка; - КонецЕсли; - ГруппыИсполнителейЗадач.Добавить(ГруппаИсполнителей.Ссылка); - КонецЦикла; - Возврат ГруппыИсполнителейЗадач; - -КонецФункции - -// Пометить на удаление вложенные и подчиненные бизнес-процессы задачи ЗадачаСсылка. -// -// Параметры -// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя -// НовоеЗначениеПометкиУдаления - Булево -// -Процедура ПриПометкеУдаленияЗадачи(ЗадачаСсылка, НовоеЗначениеПометкиУдаления) Экспорт - - ОбъектЗадачи = ЗадачаСсылка.Метаданные(); - Если НовоеЗначениеПометкиУдаления Тогда - ВыполнитьПроверкуПравДоступа("ИнтерактивнаяПометкаУдаления", ОбъектЗадачи); - КонецЕсли; - Если Не НовоеЗначениеПометкиУдаления Тогда - ВыполнитьПроверкуПравДоступа("ИнтерактивноеСнятиеПометкиУдаления", ОбъектЗадачи); - КонецЕсли; - - НачатьТранзакцию(); - Попытка - // Помечаем вложенные бизнес-процессы - УстановитьПривилегированныйРежим(Истина); - ВложенныеБизнесПроцессы = БизнесПроцессыИЗадачиСервер.БизнесПроцессыВедущейЗадачи(ЗадачаСсылка); - Для Каждого ВложенныйБизнесПроцесс Из ВложенныеБизнесПроцессы Цикл - БизнесПроцессОбъект = ВложенныйБизнесПроцесс.ПолучитьОбъект(); - БизнесПроцессОбъект.УстановитьПометкуУдаления(НовоеЗначениеПометкиУдаления); - КонецЦикла; - УстановитьПривилегированныйРежим(Ложь); - - // Помечаем подчиненные бизнес-процессы - ПодчиненныеБизнесПроцессы = ПолучитьБизнесПроцессыГлавнойЗадачи(ЗадачаСсылка); - Для Каждого ПодчиненныйБизнесПроцесс Из ПодчиненныеБизнесПроцессы Цикл - БизнесПроцессОбъект = ПодчиненныйБизнесПроцесс.ПолучитьОбъект(); - БизнесПроцессОбъект.Заблокировать(); - БизнесПроцессОбъект.УстановитьПометкуУдаления(НовоеЗначениеПометкиУдаления); - КонецЦикла; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - // Возвращает Истина, если задача соответствует указанной точке маршрута -Функция ПроверитьТипЗадачи(Задача, ТочкаМаршрута) Экспорт +Функция ПроверитьТипЗадачи(ЗадачаОбъект, ТочкаМаршрута) Экспорт - Если Задача.ТочкаМаршрута = ТочкаМаршрута Тогда - Возврат Истина; - КонецЕсли; - - Возврат Ложь; + Возврат ЗадачаОбъект.ТочкаМаршрута = ТочкаМаршрута; КонецФункции diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/БизнесПроцессыИЗадачиВызовСервера.mdo b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/БизнесПроцессыИЗадачиВызовСервера.mdo index 1bb040b21..7d95058b4 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/БизнесПроцессыИЗадачиВызовСервера.mdo +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиВызовСервера/БизнесПроцессыИЗадачиВызовСервера.mdo @@ -6,5 +6,7 @@ Бизнес процессы и задачи вызов сервера true + true + true true diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl index fa6f2f4c6..21cfb0d3b 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиКлиент/Module.bsl @@ -85,6 +85,9 @@ // Параметры // ЗадачаСсылка - ЗадачаИсполнителяСсылка - задача. // +// Возвращаемое значение: +// Булево - Истина, если форма выполнения задачи была найдена и открыта. +// Функция ОткрытьФормуВыполненияЗадачи(Знач ЗадачаСсылка) Экспорт ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ПолучитьФормуВыполненияЗадачи(ЗадачаСсылка); @@ -247,7 +250,17 @@ КонецПроцедуры // Открывает форму выбора исполнителя -Процедура ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей) Экспорт +// +// ЭлементИсполнитель - элемент формы, в которой выполняется выбора исполнителя, +// который будет указан как владелец формы выбора исполнителя +// РеквизитИсполнитель - выбранное ранее значение исполнителя. +// Используется для установки текущей строки в форме выбора исполнителя +// ТолькоПростыеРоли - булево, если Итисна то указывает что для выбора нужно +// использовать только роли без объектов адресации +// БезВнешнихРолей - булево, если Истина, то указывает, что для выбора надо +// использовать только роли, у которых не установлен признак ВнешняяРоль +// +Процедура ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, ТолькоПростыеРоли = Ложь, БезВнешнихРолей = Ложь) Экспорт Если БизнесПроцессыИЗадачиКлиентПереопределяемый.ВыбратьИсполнителя(ЭлементИсполнитель, РеквизитИсполнитель, ТолькоПростыеРоли, БезВнешнихРолей) Тогда diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl index 226791429..e0b1e0cee 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиПереопределяемый/Module.bsl @@ -6,22 +6,6 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Возвращает адрес электронной почты пользователя Получатель. -// -// Параметры -// Получатель – СправочникСсылка.Пользователи -// Адрес - Строка – возвращаемый адрес электронной почты. -// -// -Процедура ПолучитьАдресЭлектроннойПочты(Знач Получатель, Адрес) Экспорт - - // СтандартныеПодсистемы.КонтактнаяИнформация - Адрес = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта( - Получатель, Справочники.ВидыКонтактнойИнформации.EmailПользователя); - // Конец СтандартныеПодсистемы.КонтактнаяИнформация - -КонецПроцедуры - // Вызывается для обновления данных бизнес-процесса в регистре сведений // ДанныеБизнесПроцессов. // @@ -52,50 +36,3 @@ Возврат Ложь; КонецФункции - -// Возвращает Истина, если используется подсистема ВнешниеЗадачиИБизнесПроцессы -Функция ИспользоватьВнешниеЗадачиИБизнесПроцессы() Экспорт - - Возврат Истина; - -КонецФункции - -// Возвращает содержание переданного объекта -// Параметры -// ПредметЗадачи - объект, представление которого надо сформировать -// Возвращает содержание в виде HTML или MXL документа -Функция ПолучитьПредставлениеПредметаВнешнейЗадачи(ПредметЗадачи) Экспорт - - // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи - Возврат ВнешниеЗадачиВызовСервера.ПолучитьПредставлениеПредметаВнешнейЗадачи(ПредметЗадачи); - // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи - -КонецФункции - -// Возвращает массив объектов типа ОписаниеПередаваемогоФайла -// или Неопределено -Функция ПолучитьСписокФайлов(Источник) Экспорт - - // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи - Возврат ВнешниеЗадачиВызовСервера.ПолучитьСписокФайлов(Источник); - // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи - -КонецФункции - -// Возвращает Истина, если задача является внешней -Функция ЭтоВнешняяЗадача(ЗадачаСсылка) Экспорт - - // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи - Возврат ВнешниеЗадачиВызовСервера.ЭтоВнешняяЗадача(ЗадачаСсылка); - // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи - -КонецФункции - -// Помечает задачу-источник как выполненную -Процедура ВыполнитьЗадачуИсточник(БизнесПроцесс) Экспорт - - // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи - ВнешниеЗадачиВызовСервера.ВыполнитьЗадачуИсточник(БизнесПроцесс); - // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи - -КонецПроцедуры diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl index c3dfad9e4..f004f94f9 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСервер/Module.bsl @@ -29,16 +29,16 @@ Если Элемент = Неопределено Тогда Элемент = ФормаЗадачи.Элементы.Добавить("__СостояниеЗадачиКартинка", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Картинка; - Элемент.Картинка = БиблиотекаКартинок.Информация32; - Элемент.Высота = 2; - Элемент.Ширина = 4; + Элемент.Картинка = БиблиотекаКартинок.Информация; + Элемент.Высота = 1; + Элемент.Ширина = 2; КонецЕсли; Элемент = ФормаЗадачи.Элементы.Найти("__СостояниеЗадачи"); Если Элемент = Неопределено Тогда Элемент = ФормаЗадачи.Элементы.Добавить("__СостояниеЗадачи", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Надпись; - Элемент.Высота = 2; + Элемент.Высота = 0; // автовысота КонецЕсли; ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); ДатаИсполненияСтрокой = ?(ИспользоватьДатуИВремяВСрокахЗадач, @@ -57,9 +57,9 @@ Если Элемент = Неопределено Тогда Элемент = ФормаЗадачи.Элементы.Добавить("__ВедущаяЗадачаКартинка", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Картинка; - Элемент.Картинка = БиблиотекаКартинок.Информация32; - Элемент.Высота = 2; - Элемент.Ширина = 4; + Элемент.Картинка = БиблиотекаКартинок.Информация; + Элемент.Высота = 1; + Элемент.Ширина = 2; КонецЕсли; Элемент = ФормаЗадачи.Элементы.Найти("__ВедущаяЗадача"); @@ -67,7 +67,7 @@ Элемент = ФормаЗадачи.Элементы.Добавить("__ВедущаяЗадача", Тип("ДекорацияФормы"), Родитель); Элемент.Вид = ВидДекорацииФормы.Надпись; Элемент.Заголовок = НСтр("ru ='Это ведущая задача для вложенных бизнес-процессов.'"); - Элемент.Высота = 2; + Элемент.Высота = 0; // автовысота КонецЕсли; КонецЕсли; @@ -250,6 +250,133 @@ КонецФункции +// Возвращает дату завершения указанного бизнес-процесса, +// полученную как максимальная дата исполнения задач бизнес-процесса. +// +// Параметры +// БизнесПроцессСсылка - бизнес-процесс +// +// Возвращаемое значение: +// Дата +// +Функция ДатаЗавершенияБизнесПроцесса(БизнесПроцессСсылка) Экспорт + + ВыполнитьПроверкуПравДоступа("Чтение", БизнесПроцессСсылка.Метаданные()); + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | МАКСИМУМ(ЗадачаИсполнителя.ДатаИсполнения) КАК МаксДатаИсполнения + |ИЗ + | Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя + |ГДЕ + | ЗадачаИсполнителя.БизнесПроцесс = &БизнесПроцесс + | И ЗадачаИсполнителя.Выполнена = ИСТИНА"; + Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцессСсылка); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат ТекущаяДатаСеанса(); + КонецЕсли; + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Возврат Выборка.МаксДатаИсполнения; + +КонецФункции + +// Возвращает массив подчиненных указанной задаче бизнес-процессов +// +// Параметры +// ЗадачаСсылка - задача. +// +// Возвращаемое значение: +// массив ссылок на бизнес-процессы +// +Функция БизнесПроцессыГлавнойЗадачи(ЗадачаСсылка) Экспорт + + Результат = Новый Массив; + Для Каждого ТипБизнесПроцесса Из Метаданные.БизнесПроцессы Цикл + + Попытка + ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | %1.Ссылка КАК Ссылка + |ИЗ + | %2 КАК %1 + |ГДЕ + | %1.ГлавнаяЗадача = &ГлавнаяЗадача", ТипБизнесПроцесса.Имя, ТипБизнесПроцесса.ПолноеИмя()); + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ГлавнаяЗадача", ЗадачаСсылка); + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Результат.Добавить(Выборка.Ссылка); + КонецЦикла; + + Исключение + // У бизнес-процесса может и не быть главной задачи + КонецПопытки + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Проверяет у текущего пользователя наличие прав на изменение состояния бизнес-процесса +// +// Параметры +// БизнесПроцессОбъект - объект бизнес-процесса. +// +Процедура ПроверитьПраваНаИзменениеСостоянияБизнесПроцесса(БизнесПроцессОбъект) Экспорт + + Если Не ЗначениеЗаполнено(БизнесПроцессОбъект.Состояние) Тогда + БизнесПроцессОбъект.Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; + КонецЕсли; + + Если БизнесПроцессОбъект.ЭтоНовый() Тогда + ПредыдущееСостояние = Перечисления.СостоянияБизнесПроцессов.Активен; + Иначе + ПредыдущееСостояние = ОбщегоНазначения.ПолучитьЗначениеРеквизита(БизнесПроцессОбъект.Ссылка, "Состояние"); + КонецЕсли; + + Если ПредыдущееСостояние <> БизнесПроцессОбъект.Состояние Тогда + + Если Не ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцессОбъект) Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав для остановки бизнес-процесса ""%1"".'"), + Строка(БизнесПроцессОбъект)); + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + Если ПредыдущееСостояние = Перечисления.СостоянияБизнесПроцессов.Активен Тогда + + Если БизнесПроцессОбъект.Завершен Тогда + ВызватьИсключение НСтр("ru = 'Невозможно остановить завершенные бизнес-процессы.'"); + КонецЕсли; + + Если Не БизнесПроцессОбъект.Стартован Тогда + ВызватьИсключение НСтр("ru = 'Невозможно остановить не стартовавшие бизнес-процессы.'"); + КонецЕсли; + + ИначеЕсли ПредыдущееСостояние = Перечисления.СостоянияБизнесПроцессов.Остановлен Тогда + + Если БизнесПроцессОбъект.Завершен Тогда + ВызватьИсключение НСтр("ru = 'Невозможно сделать активными завершенные бизнес-процессы.'"); + КонецЕсли; + + Если Не БизнесПроцессОбъект.Стартован Тогда + ВызватьИсключение НСтр("ru = 'Невозможно сделать активными не стартовавшие бизнес-процессы.'"); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -446,7 +573,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | ЗадачаИсполнителя.Ссылка + | ЗадачаИсполнителя.Ссылка КАК Ссылка |ИЗ | Задача.ЗадачаИсполнителя КАК ЗадачаИсполнителя |ГДЕ @@ -481,7 +608,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | БизнесПроцессы.Ссылка + | БизнесПроцессы.Ссылка КАК Ссылка |ИЗ | %БизнесПроцесс% КАК БизнесПроцессы |ГДЕ @@ -519,7 +646,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | БизнесПроцессы.Ссылка + | БизнесПроцессы.Ссылка КАК Ссылка |ИЗ | %БизнесПроцесс% КАК БизнесПроцессы |ГДЕ @@ -545,7 +672,7 @@ КонецЦикла; КонецПроцедуры - + // Заполняет реквизит ГлавнаяЗадача при создании бизнес-процесса // на основании другого бизнес-процесса // @@ -563,7 +690,175 @@ БизнесПроцессОбъект.ГлавнаяЗадача = ДанныеЗаполнения; КонецЕсли; -КонецПроцедуры +КонецПроцедуры + +// Получает группы исполнителей задач согласно новым записям исполнителей задач. +// +// Параметры +// НовыеИсполнителиЗадач - ТаблицаЗначений - выгрузка из набора записей регистра сведений ИсполнителиЗадач +// +// Возвращаемое значение: +// Массив - с элементами типа СправочникСсылка.ГруппыИсполнителейЗадач +// +Функция ГруппыДоступаЗадач(НовыеИсполнителиЗадач) Экспорт + + НазванияПолей = "РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации"; + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | НовыеЗаписи.РольИсполнителя КАК РольИсполнителя, + | НовыеЗаписи.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, + | НовыеЗаписи.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации + |ПОМЕСТИТЬ НовыеЗаписи + |ИЗ + | &НовыеЗаписи КАК НовыеЗаписи + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ЕСТЬNULL(ГруппыИсполнителейЗадач.Ссылка, ЗНАЧЕНИЕ(Справочник.ГруппыИсполнителейЗадач.ПустаяСсылка)) КАК Ссылка, + | НовыеЗаписи.РольИсполнителя КАК РольИсполнителя, + | НовыеЗаписи.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации, + | НовыеЗаписи.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации + |ИЗ + | НовыеЗаписи КАК НовыеЗаписи + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыИсполнителейЗадач КАК ГруппыИсполнителейЗадач + | ПО НовыеЗаписи.РольИсполнителя = ГруппыИсполнителейЗадач.РольИсполнителя + | И НовыеЗаписи.ОсновнойОбъектАдресации = ГруппыИсполнителейЗадач.ОсновнойОбъектАдресации + | И НовыеЗаписи.ДополнительныйОбъектАдресации = ГруппыИсполнителейЗадач.ДополнительныйОбъектАдресации"); + Запрос.УстановитьПараметр("НовыеЗаписи", НовыеИсполнителиЗадач.Скопировать(,НазванияПолей)); + ГруппыИсполнителей = Запрос.Выполнить().Выгрузить(); + ОтборГруппыИсполнителей = Новый Структура(НазванияПолей); + ГруппыИсполнителейЗадач = Новый Массив; + + Для каждого Запись Из НовыеИсполнителиЗадач Цикл + ЗаполнитьЗначенияСвойств(ОтборГруппыИсполнителей, Запись); + ГруппаИсполнителей = ГруппыИсполнителей.НайтиСтроки(ОтборГруппыИсполнителей)[0]; + // нужно обновить ссылку в найденной строке. + Если НЕ ЗначениеЗаполнено(ГруппаИсполнителей.Ссылка) Тогда + // Требуется добавить новую группу исполнителей. + ГруппаИсполнителейОбъект = Справочники.ГруппыИсполнителейЗадач.СоздатьЭлемент(); + ЗаполнитьЗначенияСвойств(ГруппаИсполнителейОбъект, ОтборГруппыИсполнителей); + ГруппаИсполнителейОбъект.Записать(); + ГруппаИсполнителей.Ссылка = ГруппаИсполнителейОбъект.Ссылка; + КонецЕсли; + ГруппыИсполнителейЗадач.Добавить(ГруппаИсполнителей.Ссылка); + КонецЦикла; + Возврат ГруппыИсполнителейЗадач; + +КонецФункции + +// Получить группу исполнителей задач, которая соответствует реквизитам адресации. +// Если группа еще не существует, то создается и возвращается новая. +// +// Параметры +// РольИсполнителя - СправочникСсылка.РолиИсполнителей +// ОсновнойОбъектАдресации - ЛюбаяСсылка +// ДополнительныйОбъектАдресации - ЛюбаяСсылка +// +// Возвращаемое значение: +// СправочникСсылка.ГруппыИсполнителейЗадач +// +Функция ГруппаИсполнителейЗадач(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации) Экспорт + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ГруппыИсполнителейЗадач.Ссылка КАК Ссылка + |ИЗ + | Справочник.ГруппыИсполнителейЗадач КАК ГруппыИсполнителейЗадач + |ГДЕ + | ГруппыИсполнителейЗадач.РольИсполнителя = &РольИсполнителя + | И ГруппыИсполнителейЗадач.ОсновнойОбъектАдресации = &ОсновнойОбъектАдресации + | И ГруппыИсполнителейЗадач.ДополнительныйОбъектАдресации = &ДополнительныйОбъектАдресации"); + Запрос.УстановитьПараметр("РольИсполнителя", РольИсполнителя); + Запрос.УстановитьПараметр("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); + Запрос.УстановитьПараметр("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ГруппаИсполнителей = Выборка.Ссылка; + Иначе + // Требуется добавить новую группу исполнителей задач. + ГруппаИсполнителейОбъект = Справочники.ГруппыИсполнителейЗадач.СоздатьЭлемент(); + ГруппаИсполнителейОбъект.РольИсполнителя = РольИсполнителя; + ГруппаИсполнителейОбъект.ОсновнойОбъектАдресации = ОсновнойОбъектАдресации; + ГруппаИсполнителейОбъект.ДополнительныйОбъектАдресации = ДополнительныйОбъектАдресации; + ГруппаИсполнителейОбъект.Записать(); + ГруппаИсполнителей = ГруппаИсполнителейОбъект.Ссылка; + КонецЕсли; + + Возврат ГруппаИсполнителей; + +КонецФункции + +// Пометить на удаление вложенные и подчиненные бизнес-процессы задачи ЗадачаСсылка. +// +// Параметры +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя +// НовоеЗначениеПометкиУдаления - Булево +// +Процедура ПриПометкеУдаленияЗадачи(ЗадачаСсылка, НовоеЗначениеПометкиУдаления) Экспорт + + ОбъектЗадачи = ЗадачаСсылка.Метаданные(); + Если НовоеЗначениеПометкиУдаления Тогда + ВыполнитьПроверкуПравДоступа("ИнтерактивнаяПометкаУдаления", ОбъектЗадачи); + КонецЕсли; + Если Не НовоеЗначениеПометкиУдаления Тогда + ВыполнитьПроверкуПравДоступа("ИнтерактивноеСнятиеПометкиУдаления", ОбъектЗадачи); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + // Помечаем вложенные бизнес-процессы + УстановитьПривилегированныйРежим(Истина); + ВложенныеБизнесПроцессы = БизнесПроцессыВедущейЗадачи(ЗадачаСсылка); + Для Каждого ВложенныйБизнесПроцесс Из ВложенныеБизнесПроцессы Цикл + БизнесПроцессОбъект = ВложенныйБизнесПроцесс.ПолучитьОбъект(); + БизнесПроцессОбъект.УстановитьПометкуУдаления(НовоеЗначениеПометкиУдаления); + КонецЦикла; + УстановитьПривилегированныйРежим(Ложь); + + // Помечаем подчиненные бизнес-процессы + ПодчиненныеБизнесПроцессы = БизнесПроцессыГлавнойЗадачи(ЗадачаСсылка); + Для Каждого ПодчиненныйБизнесПроцесс Из ПодчиненныеБизнесПроцессы Цикл + БизнесПроцессОбъект = ПодчиненныйБизнесПроцесс.ПолучитьОбъект(); + БизнесПроцессОбъект.Заблокировать(); + БизнесПроцессОбъект.УстановитьПометкуУдаления(НовоеЗначениеПометкиУдаления); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Проверяет наличие прав для того, чтобы отметить бизнес-процесс +// как остановленный или активный. +// +// Параметры +// БизнесПроцесс - бизнес-процесс ссылка. +// +// ВозвращаемоеЗначение +// Если права есть - Истина, иначе Ложь. +// +Функция ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцесс) + + Результат = БизнесПроцессыИЗадачиПереопределяемый.ЕстьПраваНаОстановкуБизнесПроцесса(БизнесПроцесс); + Если Результат <> Неопределено Тогда + Возврат Результат; + КонецЕсли; + + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + Возврат Истина; + КонецЕсли; + + Если БизнесПроцесс.Автор = Пользователи.ТекущийПользователь() Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы @@ -594,7 +889,7 @@ Обработчик.Процедура = "БизнесПроцессыИЗадачиСервер.ОбновлениеКодаРолиИсполнителя"; КонецПроцедуры - + // Инициализировать предпопределенную роль исполнителей ОтветственныйЗаКонтрольИсполнения. // Процедура ОбновлениеИнформационнойБазы() Экспорт @@ -625,7 +920,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | БизнесПроцессы.Ссылка + | БизнесПроцессы.Ссылка КАК Ссылка |ИЗ | %БизнесПроцесс% КАК БизнесПроцессы"; @@ -650,7 +945,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | Задачи.Ссылка + | Задачи.Ссылка КАК Ссылка |ИЗ | Задача.ЗадачаИсполнителя КАК Задачи"; @@ -711,8 +1006,8 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | РолиИсполнителей.Ссылка, - | РолиИсполнителей.Код + | РолиИсполнителей.Ссылка КАК Ссылка, + | РолиИсполнителей.Код КАК Код |ИЗ | Справочник.РолиИсполнителей КАК РолиИсполнителей"; diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl index e5e489b82..9ecd1349b 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/Module.bsl @@ -17,10 +17,18 @@ Возврат; КонецЕсли; + НаборЗаписей = РегистрыСведений.ДанныеБизнесПроцессов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.БизнесПроцесс.Значение = Источник.Ссылка; + НаборЗаписей.Отбор.БизнесПроцесс.Использование = Истина; + Запись = НаборЗаписей.Добавить(); + Запись.БизнесПроцесс = Источник.Ссылка; СписокПолей = "Номер,Дата,Завершен,Стартован,Автор,ДатаЗавершения,Наименование,ПометкаУдаления"; - ЗначенияПолей = Новый Структура(СписокПолей); - ЗаполнитьЗначенияСвойств(ЗначенияПолей, Источник, СписокПолей); - БизнесПроцессыИЗадачиВызовСервера.ЗаписатьВСписокБизнесПроцессов(Источник.Ссылка, ЗначенияПолей); + ЗаполнитьЗначенияСвойств(Запись, Источник, СписокПолей); + + БизнесПроцессыИЗадачиПереопределяемый.ПриЗаписиСпискаБизнесПроцессов(Запись); + + УстановитьПривилегированныйРежим(Истина); + НаборЗаписей.Записать(); КонецПроцедуры @@ -36,7 +44,11 @@ Возврат; КонецЕсли; - БизнесПроцессыИЗадачиВызовСервера.УстановитьПометкуУдаленияЗадач(Источник.Ссылка, Источник.ПометкаУдаления); + ПредыдущаяПометкаУдаления = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Источник.Ссылка, "ПометкаУдаления"); + Если Источник.ПометкаУдаления <> ПредыдущаяПометкаУдаления Тогда + УстановитьПривилегированныйРежим(Истина); + БизнесПроцессыИЗадачиСервер.УстановитьПометкуУдаленияЗадач(Источник.Ссылка, Источник.ПометкаУдаления); + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/БизнесПроцессыИЗадачиСобытия.mdo b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/БизнесПроцессыИЗадачиСобытия.mdo index f60e6ad4f..dabad588e 100644 --- a/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/БизнесПроцессыИЗадачиСобытия.mdo +++ b/SSL/src/CommonModules/БизнесПроцессыИЗадачиСобытия/БизнесПроцессыИЗадачиСобытия.mdo @@ -9,5 +9,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl index aa6c1164e..ed3e83b56 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетов/Module.bsl @@ -1,792 +1,939 @@ //////////////////////////////////////////////////////////////////////////////// -// Подсистема "Варианты отчетов" +// Подсистема "Варианты отчетов" (сервер) // +// Выполняется на сервере. //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Позволяет установить описание варианта отчета. Для использования из модуля менеджера отчета. -// -// Параметры: -// Настройки (Структура) Передается "как есть" из первого параметра процедуры НастройкиОтчета. -// Ключ (Строка) Имя варианта отчета. Если необходимо зарегистрировать сам отчет, а не вариант -// (например, если отчет не на СКД), то в этот параметр необходимо передать "_СсылкаНаОтчет". -// Описание (Строка) Описание варианта отчета. Локализуем. -// -// Например: -// Процедура НастройкиОтчета(Настройки) Экспорт -// ВариантыОтчетов.УстановитьОписаниеВариантаВДопНастройках(Настройки, "ПОСчету50", НСтр("ru = 'Кассовые операции за текущий месяц'")); -// КонецПроцедуры -// -Процедура УстановитьОписаниеВариантаВДопНастройках(Настройки, Ключ, Описание) Экспорт - - Настройки.ОписаниеВариантов.Вставить(Ключ, Описание); - -КонецПроцедуры - -////////////////////////////////////////////////////////////////// -// Работа с дополнительными настройками - -// Добавить вариант отчета в подсистему. Для использования в функции КомандныйИнтерфейс -// общего модуля ВариантыОтчетовПереопределяемый. +// Формирует список разделов, в которых размещены команды вызова панели отчетов. // // Параметры: -// ДопНастройки - параметр настройки процедуры НастройкиОтчетов -// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" -// ПутьКПодсистеме - путь к подсистеме, к которой вариант привязывается +// Нет // -// Пример кода: -// -// Функция КомандныйИнтерфейс() Экспорт -// ДанныеОПодсистемахВариантов = ВариантыОтчетов.НоваяСтруктураКомандногоИнтерфейса(); -// ВариантыОтчетов.ДобавитьПодсистемуВариантаВДопНастройках(Настройки, "Отчет.ДинамикаИзмененийФайлов\СводнаяДиаграммаИзменения", "Администрирование"); -// Возврат ДанныеОПодсистемахВариантов; -// КонецФункции -// -Процедура ДобавитьПодсистемуВариантаВДопНастройках(ДопНастройки, Ключ, ПутьКПодсистеме) Экспорт - - Если ДопНастройки = Неопределено или Ключ = "" или ПутьКПодсистеме = "" тогда - Возврат; - КонецЕсли; - - СтрокаПодсистемы = ДопНастройки.СоответствиеПодсистемИВариантов.Добавить(); - СтрокаПодсистемы.Ключ = Ключ; - СтрокаПодсистемы.ПутьКПодсистеме = ПутьКПодсистеме; - -Конецпроцедуры - -// Удалить вариант отчета из подсистемы. Для использования в функции КомандныйИнтерфейс -// переопределяемого модуля. -// -// Параметры: -// ДопНастройки - параметр настройки процедуры НастройкиОтчетов -// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" -// ПутьКПодсистеме - путь к подсистеме, к которой вариант привязывается -// -// Пример кода: -// ВариантыОтчетов.УдалитьПодсистемуВариантаВДопНастройках(ДанныеОПодсистемахВариантов, "Отчет.ДинамикаИзмененийФайлов\СводнаяДиаграммаИзменения", "Администрирование"); -// -Процедура УдалитьПодсистемуВариантаВДопНастройках(ДопНастройки, Ключ, ПутьКПодсистеме) Экспорт - - Если ДопНастройки = Неопределено или Ключ = "" или ПутьКПодсистеме = "" тогда - Возврат; - КонецЕсли; - - СтрокаНеИспПодсистем = ДопНастройки.НеИспользоватьПодсистемыОтчета.Добавить(); - СтрокаНеИспПодсистем.Ключ = Ключ; - СтрокаНеИспПодсистем.ПутьКПодсистеме = ПутьКПодсистеме; - -КонецПроцедуры - -// Добавить вариант отчета не на базе СКД. Для использования в процедуре НастройкиОтчета -// менеджера отчета. -// -// Параметры: -// ДопНастройки - параметр настройки процедуры НастройкиОтчетов -// Ключ - общий ключ варианта отчета "Отчет.Взаиморасчеты\Основной" -// Представление - представление варианта отчета -// ЗначениеНастройки - путь к подсистеме, к которой вариант привязывается -// -// Пример кода: -// -// Процедура НастройкиОтчета(Настройки) Экспорт -// ВариантыОтчетов.ДобавитьПредопределенныйВариантВДопНастройках(Настройки, "Отчет.ОСВ\ПОСчету50", НСтр("ru = 'Кассовые операции'"), Новый Структура("Счет", 50)); -// КонецПроцедуры -// -Процедура ДобавитьПредопределенныйВариантВДопНастройках(ДопНастройки, Ключ, Представление, ЗначениеНастройки) Экспорт - - Если ДопНастройки = Неопределено или Ключ = "" или Представление = "" тогда - Возврат; - КонецЕсли; - - ДопНастройки.ПредопределенныеВариантыБезСКД.Добавить(Ключ, Представление); - ДопНастройки.ЗначенияНастроекОтчетовБезСКД.Вставить(Ключ, ЗначениеНастройки); - -КонецПроцедуры - -// Возвращает структуру данных для переопределения командного интерфейса. -// -Функция НоваяСтруктураКомандногоИнтерфейса() Экспорт - - ДанныеОПодсистемахВариантов = Новый Структура("СоответствиеПодсистемИВариантов, НеИспользоватьПодсистемыОтчета"); - ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов = Новый ТаблицаЗначений; - ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.Колонки.Добавить("Ключ"); - ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.Колонки.Добавить("ПутьКПодсистеме"); - - ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемыОтчета = Новый ТаблицаЗначений; - ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемыОтчета.Колонки.Добавить("Ключ"); - ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемыОтчета.Колонки.Добавить("ПутьКПодсистеме"); - - Возврат ДанныеОПодсистемахВариантов; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции - -// Возвращает список значений подсистем отчетов. -// Для внутреннего использования. -// -Функция ПолучитьСписокПодсистемОтчетов() Экспорт - - СоответствиеПодсистемОтчетам = Новый ТаблицаЗначений; - СоответствиеПодсистемОтчетам.Колонки.Добавить("Отчет"); - СоответствиеПодсистемОтчетам.Колонки.Добавить("ПутьКПодсистеме"); - СоответствиеПодсистемОтчетам.Колонки.Добавить("НазваниеПодсистемы"); - СоответствиеПодсистемОтчетам.Колонки.Добавить("Пояснение"); - - Для каждого Подсистема из Метаданные.Подсистемы Цикл - Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда - Продолжить; - КонецЕсли; - Путь = Подсистема.Имя; - ДобавитьОтчетыПодсистемы(Подсистема, СоответствиеПодсистемОтчетам, Путь); - КонецЦикла; - - Возврат СоответствиеПодсистемОтчетам; - -КонецФункции - -// Возвращает список виртуальных подсистем. -// Для внутреннего использования. -// -Функция ПолучитьВиртуальныеПодсистемы(ПутьПодсистемы) Экспорт - - ПодсистемыВиртуальные = Новый СписокЗначений; - - ПутиИПодсистем = ПолучитьПутьВиртуальныхПодсистем(); - - Для каждого ЗначениеПути из ПутиИПодсистем Цикл - - Если ЗначениеПути.Значение.ПутьПодсистемы = ПутьПодсистемы тогда - ПодсистемыВиртуальные.Добавить(ЗначениеПути.Значение.ПутьПодсистемы+"\"+ ЗначениеПути.Значение.ИмяПодсистемы, ЗначениеПути.Представление); - КонецЕсли; - - КонецЦикла; - - Возврат ПодсистемыВиртуальные; - -КонецФункции - -// Возвращает список подсистем (разделов). -// Для внутреннего использования. -// -Функция ПолучитьСписокПодсистем(ПутиПодсистемы, ДеревоПодсистем) Экспорт - - СписокПодсистем = Новый СписокЗначений; - - Для каждого Подсистема из Метаданные.Подсистемы Цикл - - Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда - Продолжить; - КонецЕсли; - - ПутьКПодсистеме = Подсистема.Имя; - - ПодсистемаПрисутствует = ложь; - - Для каждого ЭлементПодсистемы из ПутиПодсистемы Цикл - ПутьПодсистемы = ЭлементПодсистемы.Значение; - Если Найти(ПутьКПодсистеме, ПутьПодсистемы) > 0 тогда - ПодсистемаПрисутствует = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если ПодсистемаПрисутствует тогда - СтрокаДереваПодсистем = ДеревоПодсистем.Строки.Добавить(); - СтрокаДереваПодсистем.Подсистема = ПутьКПодсистеме; - СтрокаДереваПодсистем.Название = Подсистема.Синоним; - - ЕстьПравоПросмотра = ПравоДоступа("Просмотр", Подсистема); - Если НЕ ЕстьПравоПросмотра тогда - Продолжить; - КонецЕсли; - - ПараметрыФункциональнаяОпция = Новый Структура(""); - - ДоступенПоФункциональнаяОпцияОпциям = ложь; - СодержитсяВФункциональнаяОпция = ложь; - Для каждого ФункциональнаяОпция из Метаданные.ФункциональныеОпции Цикл - - Если Не ФункциональнаяОпция.Состав.Содержит(Подсистема) тогда - Продолжить; - КонецЕсли; - - СодержитсяВФункциональнаяОпция = Истина; - - ЗначениеФункциональнаяОпция = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, ПараметрыФункциональнаяОпция); - Если ТипЗнч(ЗначениеФункциональнаяОпция) = Тип("Булево") тогда - Если ЗначениеФункциональнаяОпция тогда - ДоступенПоФункциональнаяОпцияОпциям = истина; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если СодержитсяВФункциональнаяОпция И НЕ ДоступенПоФункциональнаяОпцияОпциям тогда - Продолжить; - КонецЕсли; - - - СтрокаПодсистемы = СписокПодсистем.Добавить(); - СтрокаПодсистемы.Значение = ПутьКПодсистеме; - СтрокаПодсистемы.Представление = Подсистема.Синоним; - ДобавитьДеревоПодсистем(СписокПодсистем, Подсистема, ПутьКПодсистеме, СтрокаДереваПодсистем); - КонецЕсли; - - КонецЦикла; - - ВиртуальныеПодсистемы = ПолучитьВиртуальныеПодсистемы(Подсистема); - - Для каждого Подсистема из ВиртуальныеПодсистемы Цикл - - ПутьКПодсистеме = Подсистема.Значение; - - ПодсистемаПрисутствует = ложь; - - Для каждого ЭлементПодсистемы из ПутиПодсистемы Цикл - ПутьПодсистемы = ЭлементПодсистемы.Значение; - Если Найти(ПутьКПодсистеме, ПутьПодсистемы) > 0 тогда - ПодсистемаПрисутствует = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если ПодсистемаПрисутствует тогда - - СтрокаДереваПодсистем = ДеревоПодсистем.Строки.Добавить(); - СтрокаДереваПодсистем.Подсистема = ПутьКПодсистеме; - СтрокаДереваПодсистем.Название = Подсистема.Представление; - - СтрокаПодсистемы = СписокПодсистем.Добавить(); - СтрокаПодсистемы.Значение = Подсистема.Значение; - СтрокаПодсистемы.Представление = Подсистема.Представление; - ДобавитьДеревоВиртуальныхПодсистем(СписокПодсистем, Подсистема.Значение, СтрокаДереваПодсистем); - КонецЕсли; - - КонецЦикла; - - Возврат СписокПодсистем; - -КонецФункции - -// Заменяет запрещенные символы в именах элементов формы на их допустимые аналоги. -// -Функция ЗаменитьЗапрещенныеСимволы(Знач СтрокаДляЗамены) Экспорт - - СтрокаРезультат = СтрокаДляЗамены; - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ".", "_Точка_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ",", "_Зап_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "\", "_Слэш_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "-", "_Тирэ_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, " ", "_П_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "!", "_Воскл_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "@", "_Соб_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "№", "_Ном_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ";", "_ТЗап_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "%", "_Проц_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ":", "_ДвТ_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "?", "_Воп_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "*", "_Звезд_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "(", "_ОСк_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ")", "_ЗСк_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "=", "_Рав_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "~", "_Вол_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "`", "_Ап_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "#", "_Реш_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "$", "_Дол_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "^", "_Степ_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "&", "_Анд_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "{", "_ОФС_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "{", "_ЗФС_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "[", "_ОКС_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "[", "_ЗКС_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, """", "_Кав_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "'", "_ОКав_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "|", "_Пал_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "\", "_ПСл_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "/", "_ОСл_"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, ">", "_Бол_"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "<", "_Мен_"); - - Возврат СтрокаРезультат; - -КонецФункции - -// Возвращает шаблон заполнения для доп. настроек отчета. -// Для внутреннего использования. -// -Функция ПолучитьСтруктуруДополнительныхНастроек() Экспорт - - ДополнительныеНастройки = Новый Структура("ПредопределенныеВариантыБезСКД, - |ЗначенияНастроекОтчетовБезСКД, - |ОписаниеВариантов"); - - ДополнительныеНастройки.ПредопределенныеВариантыБезСКД = Новый СписокЗначений; - ДополнительныеНастройки.ЗначенияНастроекОтчетовБезСКД = Новый Соответствие; - - ДополнительныеНастройки.ОписаниеВариантов = Новый Соответствие; - - Возврат ДополнительныеНастройки; - -КонецФункции - -// Получает право изменения вариантов отчета -// -// Параметры: -// КлючОбъекта - (...) -// |- (Неопределено) - Право проверяется для всех отчетов конфигурации -// |- (Строка) - Имя отчета с точкой -// // Возвращаемое значение: -// Истина - Есть право изменения вариантов -// Ложь - Нет права изменения вариантов +// Результат (ТаблицаЗначений) +// |- Ссылка (СправочникСсылка.ИдентификаторыОбъектовМетаданных) +// |- Метаданные (ОбъектМетаданных) +// |- Имя (Строка) +// |- Представление (Строка) // -Функция ПравоИзмененияВариантов(КлючОбъекта = Неопределено, ЧерезИсключение = Ложь) Экспорт - Если КлючОбъекта = Неопределено Тогда - - Для Каждого ОтчетМД Из Метаданные.Отчеты Цикл - Если НЕ ПравоДоступа("Просмотр", ОтчетМД) Тогда - Если ЧерезИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недостаточно прав доступа для работы с отчетом %1'"), - ОтчетМД.Представление() - ); - Иначе - Возврат Ложь; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Иначе - - ОтчетМД = Метаданные.Отчеты.Найти(СтрЗаменить(КлючОбъекта, "Отчет.", "")); - Если ОтчетМД = Неопределено Тогда - Если ЧерезИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчет %1 не найден в системе'"), - КлючОбъекта - ); - Иначе - Возврат Ложь; - КонецЕсли; - ИначеЕсли НЕ ПравоДоступа("Использование", ОтчетМД) Тогда - Если ЧерезИсключение Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Недостаточно прав доступа к отчету %1'"), - ОтчетМД.Представление() - ); - Иначе - Возврат Ложь; - КонецЕсли; +Функция ИспользуемыеРазделы() Экспорт + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + Результат.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + Результат.Колонки.Добавить("Имя", ОписаниеТиповСтрока()); + Результат.Колонки.Добавить("Представление", ОписаниеТиповСтрока()); + + РазделыМетаданные = Новый Массив; + + ВариантыОтчетовПереопределяемый.ОпределитьРазделыСВариантамиОтчетов(РазделыМетаданные); + + Для Каждого РазделМетаданные Из РазделыМетаданные Цикл + Строка = Результат.Добавить(); + Строка.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(РазделМетаданные); + Строка.Метаданные = РазделМетаданные; + Строка.Имя = РазделМетаданные.Имя; + Строка.Представление = РазделМетаданные.Представление(); + КонецЦикла; + + Возврат Результат; +КонецФункции // ИспользуемыеРазделы + +// Формирует дерево настроек и размещения предопределенных вариантов отчетов +// конфигурации, подключенных к подсистеме. +// +// Параметры: +// Нет +// +// Возвращаемое значение: +// ДеревоВариантов (ДеревоЗначений) +// ---- Реквизиты только для чтения: ---- +// |- Отчет (*) Полное имя или ссылка на отчет +// |- Метаданные (ОбъектМетаданных) Метаданные отчета +// |- КлючВарианта (Строка) Имя варианта отчета +// |- ОписаниеПолучено (Булево) +// |- СистемнаяИнформация (Структура) +// ---- Реквизиты для изменения: ---- +// |- Включен (Булево) Если Ложь, то вариант отчета не регистрируется в подсистеме +// |- Наименование (Строка) Наименование варианта отчета +// |- Описание (Строка) Информация о варианте отчета +// |- Размещение (Соответствие) Настройки размещения варианта отчета в разделах +// |- Ключ (ОбъектМетаданных) Подсистема, в которой размещается отчет или вариант отчета +// |- Значение (Строка) Настройки размещения в подсистеме. +// |- "" - Вывод отчета в своей группе обычным шрифтом. +// |- "Важный" - Вывод отчета в своей группе жирным шрифтом. +// |- "СмТакже" - Вывод отчета в группе "См. также". +// +Функция ДеревоНастроекВариантовОтчетовКонфигурации() Экспорт + + РеквизитыСправочника = Метаданные.Справочники.ВариантыОтчетов.Реквизиты; + + ДеревоВариантов = Новый ДеревоЗначений; + ДеревоВариантов.Колонки.Добавить("Отчет", РеквизитыСправочника.Отчет.Тип); + ДеревоВариантов.Колонки.Добавить("Метаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + ДеревоВариантов.Колонки.Добавить("КлючВарианта", РеквизитыСправочника.КлючВарианта.Тип); + ДеревоВариантов.Колонки.Добавить("ОписаниеПолучено", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("Включен", Новый ОписаниеТипов("Булево")); + ДеревоВариантов.Колонки.Добавить("Наименование", ОписаниеТиповСтрока()); + ДеревоВариантов.Колонки.Добавить("Описание", ОписаниеТиповСтрока()); + ДеревоВариантов.Колонки.Добавить("Размещение", Новый ОписаниеТипов("Соответствие")); + ДеревоВариантов.Колонки.Добавить("СистемнаяИнформация", Новый ОписаниеТипов("Структура")); + ДеревоВариантов.Колонки.Добавить("ЭтоВариант", Новый ОписаниеТипов("Булево")); + + ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); + ПодключеныВсеОтчеты = ПодключеныВсеОтчеты(); + Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл + Если НЕ ПодключеныВсеОтчеты + И (ОтчетМетаданные.ХранилищеВариантов = Неопределено + ИЛИ ОтчетМетаданные.ХранилищеВариантов.Имя <> "ХранилищеВариантовОтчетов") Тогда + Продолжить; КонецЕсли; + // Настройки отчета + СтрокаОтчет = ДеревоВариантов.Строки.Добавить(); + СтрокаОтчет.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные); + СтрокаОтчет.Метаданные = ОтчетМетаданные; + СтрокаОтчет.Включен = Истина; + СтрокаОтчет.Описание = ОтчетМетаданные.Пояснение; + СтрокаОтчет.Наименование = ОтчетМетаданные.Представление(); + СтрокаОтчет.СистемнаяИнформация = Новый Структура; + СтрокаОтчет.СистемнаяИнформация.Вставить("ПостроенНаСКД", ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных <> Неопределено); + СтрокаОтчет.ОписаниеПолучено = Истина; + СтрокаОтчет.ЭтоВариант = Ложь; + + // Подсистемы отчета + Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетМетаданные", ОтчетМетаданные)); + Для Каждого СтрокаПодсистема Из Найденные Цикл + СтрокаОтчет.Размещение.Вставить(СтрокаПодсистема.ПодсистемаМетаданные, ""); + КонецЦикла; + + // Варианты отчета + Если СтрокаОтчет.СистемнаяИнформация.ПостроенНаСКД Тогда + ОтчетМенеджер = Отчеты[ОтчетМетаданные.Имя]; + ИмяСхемыКД = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных.Имя; + СхемаКД = ОтчетМенеджер.ПолучитьМакет(ИмяСхемыКД); + Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл + Вариант = СтрокаОтчет.Строки.Добавить(); + Вариант.Отчет = СтрокаОтчет.Отчет; + Вариант.КлючВарианта = ВариантНастроекКД.Имя; + Вариант.Наименование = ВариантНастроекКД.Представление; + Вариант.Размещение = СтрокаОтчет.Размещение; + Вариант.ЭтоВариант = Истина; + КонецЦикла; + Иначе + Вариант = СтрокаОтчет.Строки.Добавить(); + Вариант.Отчет = СтрокаОтчет.Отчет; + Вариант.КлючВарианта = ""; + Вариант.Наименование = СтрокаОтчет.Наименование; + Вариант.Размещение = СтрокаОтчет.Размещение; + Вариант.ЭтоВариант = Истина; + КонецЕсли; + + КонецЦикла; + + ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов(ДеревоВариантов); + + Возврат ДеревоВариантов; +КонецФункции // ДеревоНастроекВариантовОтчетовКонфигурации + +// Получает ссылку варианта отчета по набору ключевых реквизитов. +// +// Параметры: +// Отчет (Соответствует реквизиту справочника) Полное имя или ссылка отчета. +// КлючВарианта (Соответствует реквизиту справочника) Имя варианта отчета. +// +// Возвращаемое значение: +// Результат (СправочникСсылка.ВариантыОтчетов, Неопределено) +// +Функция ПолучитьСсылку(Отчет, КлючВарианта) Экспорт + Результат = Неопределено; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; + Запрос.УстановитьПараметр("Отчет", Отчет); + Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); + + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + Результат = Выборка.Ссылка; + КонецЕсли; + + Возврат Результат; +КонецФункции // ПолучитьСсылку + +// Формирует массив отчетов, доступных текущему пользователю. +// +// Возвращаемое значение: +// Результат (Массив) из (*) см. тип реквизита Отчет справочника ВариантыОтчетов. +// Ссылки отчетов, доступных текущему пользователю. +// +// Описание: +// Данный массив следует использовать во всех запросах к таблице +// справочника "ВариантыОтчетов" как отбор по реквизиту "Отчет", +// кроме случаев выборки вариантов из внешних отчетов. +// +Функция ОтчетыТекущегоПользователя() Экспорт + Результат = ВариантыОтчетовПовтИсп.ОтчетыКонфигурацииДоступныеТекущемуПользователю(); + СтандартныеПодсистемыПереопределяемый.ДобавитьДополнительныеОтчетыДоступныеТекущемуПользователю(Результат); + Возврат Результат; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Поддержка переопределяемых модулей + +// Формирует описание настроек отчета. +// +// Параметры: +// ДеревоВариантов (ДеревоЗначений) Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// ОтчетЗначениеИлиМетаданные (...) Метаданные или ссылка отчета. +// |- (ОбъектМетаданных) +// |- (СправочникСсылка.ИдентификаторыОбъектовМетаданных) +// +// Возвращаемое значение: +// Отчет (СтрокаДереваЗначений) +// см. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +Функция ОписаниеОтчета(ДеревоВариантов, ОтчетЗначениеИлиМетаданные) Экспорт + + ЭтоМетаданные = (ТипЗнч(ОтчетЗначениеИлиМетаданные) = Тип("ОбъектМетаданных")); + Если ЭтоМетаданные Тогда + СтрокаОтчет = ДеревоВариантов.Строки.Найти(ОтчетЗначениеИлиМетаданные, "Метаданные", Ложь); + Иначе + СтрокаОтчет = ДеревоВариантов.Строки.Найти(ОтчетЗначениеИлиМетаданные, "Отчет", Ложь); + КонецЕсли; + + Если СтрокаОтчет = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка получения описания отчета ""%1"", + |он не подключен к подсистеме ""%2""'"), + СтрокаОтчет.Метаданные.Имя, + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы() + ); + КонецЕсли; + + Возврат СтрокаОтчет; + +КонецФункции // ОписаниеОтчета + +// Формирует описание настроек варианта отчета. +// +// Параметры: +// ДеревоВариантов (ДеревоЗначений) Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// ОтчетСтрокаДереваИлиЗначениеИлиМетаданные (...) Описание настроек, метаданные или ссылка отчета. +// |- (СтрокаДерева) +// |- (ОбъектМетаданных) +// |- (СправочникСсылка.ИдентификаторыОбъектовМетаданных) +// КлючВарианта (Строка) Имя варианта отчета как оно задано в схеме компоновки данных. +// +// Возвращаемое значение: +// Вариант (СтрокаДереваЗначений) +// см. "Реквизиты для изменения" функции ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +Функция ОписаниеВарианта(ДеревоВариантов, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные, КлючВарианта) Экспорт + + Если ТипЗнч(ОтчетСтрокаДереваИлиЗначениеИлиМетаданные) <> Тип("СтрокаДереваЗначений") Тогда + СтрокаОтчет = ОписаниеОтчета(ДеревоВариантов, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные); + Иначе + СтрокаОтчет = ОтчетСтрокаДереваИлиЗначениеИлиМетаданные; + КонецЕсли; + + СтрокаВариант = СтрокаОтчет.Строки.Найти(КлючВарианта, "КлючВарианта", Ложь); + + Если СтрокаВариант = Неопределено Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка получения описания варианта ""%1"" отчета ""%2"", + |он не подключен к подсистеме ""%3""'"), + КлючВарианта, + СтрокаОтчет.Метаданные.Имя, + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы() + ); + КонецЕсли; + + Если НЕ СтрокаВариант.ОписаниеПолучено Тогда + + // Флажок изменения настроек + СтрокаВариант.ОписаниеПолучено = Истина; + + // Копирование настроек отчета + СтрокаВариант.Включен = СтрокаОтчет.Включен; + + Если СтрокаВариант.КлючВарианта = "" Тогда + СтрокаВариант.Наименование = СтрокаОтчет.Наименование; + СтрокаВариант.Описание = СтрокаОтчет.Описание; + КонецЕсли; + + СтрокаВариант.Размещение = ОбщегоНазначенияКлиентСервер.СкопироватьСоответствие(СтрокаОтчет.Размещение); + КонецЕсли; - Возврат Истина; -КонецФункции + Возврат СтрокаВариант; + +КонецФункции // ОписаниеВарианта + +//////////////////////////////////////////////////////////////////////////////// +// Для вызова из обработчиков обновления на конкретную версию + +// Восстанавливает настройки всех вариантов отчета. +// +// Параметры: +// Кэш (Неопределено, Структура) Содержит кэш параметров, используемых в процедуре. Заполняется внутри процедуры. +// ОтчетЗначениеИлиМетаданные (...) +// |- (ОбъектМетаданных) Метаданные отчета. +// |- (СправочникСсылка.ИдентификаторыОбъектовМетаданных) +// +Процедура ВосстановитьИсходныеНастройкиОтчета(Кэш, ОтчетЗначениеИлиМетаданные) Экспорт + + Если ТипЗнч(Кэш) <> Тип("Структура") Тогда + Кэш = Новый Структура; + КонецЕсли; + + Если НЕ Кэш.Свойство("ДеревоВариантов") Тогда + Кэш.Вставить("ДеревоВариантов", ДеревоНастроекВариантовОтчетовКонфигурации()); + КонецЕсли; + + СтрокаОтчет = ОписаниеОтчета(Кэш.ДеревоВариантов, ОтчетЗначениеИлиМетаданные); + Для Каждого СтрокаВариант Из СтрокаОтчет.Строки Цикл + ВосстановитьИсходныеНастройкиВарианта(Кэш, СтрокаОтчет, СтрокаВариант.КлючВарианта); + КонецЦикла; + +КонецПроцедуры // ВосстановитьНастройкиОтчета + +// Восстанавливает настройки варианта отчета. +// +// Параметры: +// Кэш (Неопределено, Структура) Содержит кэш параметров, используемых в процедуре. Заполняется внутри процедуры. +// ОтчетСтрокаДереваИлиЗначениеИлиМетаданные (...) +// |- (ОбъектМетаданных) Метаданные отчета. +// |- (СтрокаДерева) +// |- (СправочникСсылка.ИдентификаторыОбъектовМетаданных) +// КлючВарианта (Строка) Имя варианта отчета как оно задано в схеме компоновки данных. +// +Процедура ВосстановитьИсходныеНастройкиВарианта(Кэш, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные, КлючВарианта) Экспорт + + Если ТипЗнч(Кэш) <> Тип("Структура") Тогда + Кэш = Новый Структура; + КонецЕсли; + + Если НЕ Кэш.Свойство("ДеревоВариантов") Тогда + Кэш.Вставить("ДеревоВариантов", ДеревоНастроекВариантовОтчетовКонфигурации()); + КонецЕсли; + + НастройкиВарианта = ОписаниеВарианта(Кэш.ДеревоВариантов, ОтчетСтрокаДереваИлиЗначениеИлиМетаданные, КлючВарианта); + + ВариантСсылка = ПолучитьСсылку(НастройкиВарианта.Отчет, КлючВарианта); + Если ВариантСсылка = Неопределено Тогда + // Вариант не зарегистрирован, настройки будут установлены при его регистрации + Возврат; + КонецЕсли; + + ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); + ВариантОбъект.Наименование = НастройкиВарианта.Наименование; + ВариантОбъект.Отчет = НастройкиВарианта.Отчет; + ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний; + ВариантОбъект.КлючВарианта = НастройкиВарианта.КлючВарианта; + ВариантОбъект.Пользовательский = Ложь; + ВариантОбъект.Описание = НастройкиВарианта.Описание; + ВариантОбъект.ВидимостьПоУмолчанию = Истина; + + ВариантОбъект.Размещение.Очистить(); + ВосстановитьРазмещениеПредопределенногоВариантаОтчета(ВариантОбъект, НастройкиВарианта); + + ВариантОбъект.Записать(); + +КонецПроцедуры // ВосстановитьНастройкиВарианта //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. +// Добавляет обработчики обновления подсистемы "Варианты отчетов". // // Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// +// Обработчики (ТаблицаЗначений) - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); Обработчик.Версия = "*"; - Обработчик.Процедура = "ВариантыОтчетов.ОбработкаПредопределенныхВариантов"; + Обработчик.Процедура = "ВариантыОтчетов.Обновить"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.2.3"; - Обработчик.Процедура = "ВариантыОтчетов.УстановитьПризнакВариантаВнешнегоОтчета"; + Обработчик.Версия = "2.1.1.18"; + Обработчик.Процедура = "ВариантыОтчетов.ПереименоватьРольЧтениеВариантовОтчетов"; КонецПроцедуры -// Регистрирует предопределенные варианты отчетов при обновлении ИБ и заполнении пустой ИБ. -// -// Параметры: -// ИзмененныеОбъектыДанных (Соответствие) -// |- Ключ (Строка) Старое имя отчета -// |- Значение (Строка) Новое имя отчета +// Актуализирует данные справочника "Варианты отчетов". // -Функция ОбработкаПредопределенныхВариантов(ИзмененныеОбъектыДанных = Неопределено) Экспорт +Процедура Обновить() Экспорт - // обновить название отчетов и ключи объектов + //////////////////////////////////////////////////////////////////////////////// + // План обновления: - НачатьТранзакцию(); - Попытка - БылиОшибки = ложь; - - ТекстЗапроса = "ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | ВариантыОтчетов.КлючОбъекта, - | ВариантыОтчетов.ПредставлениеОбъекта - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов"; - - Запрос = Новый Запрос(ТекстЗапроса); - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - ИмяОтчета = Выборка.КлючОбъекта; - - Если ИзмененныеОбъектыДанных <> Неопределено тогда - ИзменИмяОтчета = ИзмененныеОбъектыДанных[ИмяОтчета]; - Если ИзменИмяОтчета <> Неопределено тогда - ИмяОтчета = ИзменИмяОтчета; - КонецЕсли; - КонецЕсли; - - ИмяОтчета = СтрЗаменить(ИмяОтчета, "Отчет.", ""); - ОтчетМетаданные = Метаданные.Отчеты.Найти(ИмяОтчета); - Если ОтчетМетаданные = Неопределено тогда - ОбъектВариантаОтчета = Выборка.Ссылка.ПолучитьОбъект(); - ОбъектВариантаОтчета.ПометкаУдаления = истина; - ОбъектВариантаОтчета.Записать(); - Иначе - Если Выборка.ПредставлениеОбъекта <> ОтчетМетаданные.Синоним или Выборка.КлючОбъекта <> "Отчет." + ОтчетМетаданные.Имя тогда - ОбъектВариантаОтчета = Выборка.Ссылка.ПолучитьОбъект(); - ОбъектВариантаОтчета.КлючОбъекта = "Отчет." + ОтчетМетаданные.Имя; - ОбъектВариантаОтчета.ПредставлениеОбъекта = ОтчетМетаданные.Синоним; - ОбъектВариантаОтчета.ПометкаУдаления = ложь; - ОбъектВариантаОтчета.Записать(); - КонецЕсли; - КонецЕсли; - КонецЦИкла; - - // Обновление вариантов - СписокОшибокПриОбновлении = Новый Массив; - - СписокКлючейПредопределенныхВариантов = Новый СписокЗначений; - ОтчетыБезСКД = Новый Массив; - - СписокОтчетов = ВариантыОтчетовПереопределяемый.СписокОтчетовПоддерживаемыхПодсистемой(); - СоответсвиеОтчетаПодсистемам = ПолучитьСписокПодсистемОтчетов(); - - ДанныеОПодсистемахВариантов = Новый Структура("СоответствиеПодсистемИВариантов, НеИспользоватьПодсистемуОтчета"); - ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов = Новый ТаблицаЗначений; - ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.Колонки.Добавить("Ключ"); - ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.Колонки.Добавить("ПутьКПодсистеме"); - - ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемуОтчета = Новый ТаблицаЗначений; - ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемуОтчета.Колонки.Добавить("Ключ"); - ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемуОтчета.Колонки.Добавить("ПутьКПодсистеме"); - - ОписаниеВариантов = Новый Соответствие; - ЗначениеНастроекДопВариантов = Новый Соответствие; - СписокДопВариантов = Новый СписокЗначений; - - Для каждого Отчет из Метаданные.Отчеты Цикл - - ПолноеИмяОтчета = Отчет.ПолноеИмя(); - - Если СписокОтчетов.НайтиПоЗначению(ПолноеИмяОтчета) = Неопределено тогда - Продолжить; - КонецЕсли; - - Если Отчет.ОсновнаяСхемаКомпоновкиДанных <> Неопределено тогда - Макет = Отчет.ОсновнаяСхемаКомпоновкиДанных.Имя; - СКД = Отчеты[Отчет.Имя].ПолучитьМакет(Макет); - Для каждого Вариант из СКД.ВариантыНастроек Цикл - СписокКлючейПредопределенныхВариантов.Добавить(Отчет.ПолноеИмя() + "\" + Вариант.Имя, Вариант.Представление); - КонецЦикла; - Иначе - СписокКлючейПредопределенныхВариантов.Добавить(ПолноеИмяОтчета + "\СсылкаНаОтчет", Отчет.Синоним); - ОтчетыБезСКД.Добавить(ПолноеИмяОтчета); - КонецЕсли; - - ДобавитьВДопНастройки(ПолноеИмяОтчета, ОписаниеВариантов, ДанныеОПодсистемахВариантов, СписокДопВариантов, ЗначениеНастроекДопВариантов); - - КонецЦикла; - - Для каждого Вариант из СписокДопВариантов Цикл - - НомерСимвола = Найти(Вариант.Значение, "\"); - ПолноеИмяОтчета = Лев(Вариант.Значение, НомерСимвола-1); - - СписокКлючейПредопределенныхВариантов.Добавить(Вариант.Значение, Вариант.Представление); - - КонецЦикла; - - // Определяем, что обновлять. - ВариантыДляОбновления = Новый СписокЗначений; - НовыеВариантыДляДобавления = Новый СписокЗначений; - ВариантыНеИспользуемые = Новый Массив; - - Для каждого Вариант из СписокКлючейПредопределенныхВариантов Цикл - НовыеВариантыДляДобавления.Добавить(Вариант.Значение, Вариант.Представление); - КонецЦикла; - - ТекстЗапроса = "ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | ВариантыОтчетов.КлючОбъекта + ""\"" + ВариантыОтчетов.КлючВарианта КАК КлючОбъекта, - | ВариантыОтчетов.ТипВариантаОтчета - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | (ВариантыОтчетов.ТипВариантаОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыВариантовОтчетов.Предопределенный) - | ИЛИ ВариантыОтчетов.ТипВариантаОтчета = ЗНАЧЕНИЕ(Перечисление.ТипыВариантовОтчетов.Отчет))"; - - Запрос = Новый Запрос(ТекстЗапроса); - УстановитьПривилегированныйРежим(истина); - Выборка = Запрос.Выполнить().Выбрать(); - УстановитьПривилегированныйРежим(ложь); - - Пока Выборка.Следующий() Цикл - - Если Выборка.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Предопределенный тогда - ЭлементСписка = СписокКлючейПредопределенныхВариантов.НайтиПоЗначению(Выборка.КлючОбъекта); - Иначе - ЭлементСписка = СписокКлючейПредопределенныхВариантов.НайтиПоЗначению(Выборка.КлючОбъекта+"СсылкаНаОтчет"); - КонецЕсли; - - Если ЭлементСписка = Неопределено тогда - ВариантыНеИспользуемые.Добавить(Выборка.Ссылка); - Иначе - ВариантыДляОбновления.Добавить(Выборка.Ссылка, ЭлементСписка.Представление); - Если Выборка.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Предопределенный тогда - ИсключаемыйВариант = НовыеВариантыДляДобавления.НайтиПоЗначению(Выборка.КлючОбъекта); - Иначе - ИсключаемыйВариант = НовыеВариантыДляДобавления.НайтиПоЗначению(Выборка.КлючОбъекта+"СсылкаНаОтчет"); - КонецЕсли; - - Если ИсключаемыйВариант <> Неопределено Тогда - НовыеВариантыДляДобавления.Удалить(ИсключаемыйВариант); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - // обновляем существующие варианты - Для каждого Вариант из ВариантыДляОбновления Цикл - - ВариантОбъект = Вариант.Значение.Ссылка.Получитьобъект(); - - ВариантОбъект.Наименование = Вариант.Представление; - ВариантОбъект.Описание = ОписаниеВариантов[ВариантОбъект.КлючОбъекта + "\" + ВариантОбъект.КлючВарианта]; - ВариантОбъект.ПометкаУдаления = ложь; - - // удалим ссылки на подсистемы - МассивПредопределенныхПодсистем = ВариантОбъект.Подсистемы.НайтиСтроки(Новый Структура("Предопределенная", истина)); - Для каждого Подсистема из МассивПредопределенныхПодсистем Цикл - ВариантОбъект.Подсистемы.Удалить(Подсистема); - КонецЦикла; - - // добавим подсистемы отчета - МассивПодсистем = СоответсвиеОтчетаПодсистемам.НайтиСтроки(Новый Структура("Отчет", ВариантОбъект.КлючОбъекта)); - - Для каждого Подсистема из МассивПодсистем Цикл - - СтруктураПоиска = Новый Структура("Ключ, ПутьКПодсистеме", ВариантОбъект.КлючОбъекта + "\" + ВариантОбъект.КлючВарианта, Подсистема.ПутьКПодсистеме); - НеИспользоватьПодсистемуОтчета = ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемуОтчета.НайтиСтроки(СтруктураПоиска); - - Если НеИспользоватьПодсистемуОтчета.Количество() = 0 тогда - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Найти(Подсистема.ПутьКПодсистеме, "Подсистема"); - Если СтрокаПодсистемы = Неопределено Тогда - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Добавить(); - КонецЕсли; - - СтрокаПодсистемы.Подсистема = Подсистема.ПутьКПодсистеме; - СтрокаПодсистемы.Название = Подсистема.НазваниеПодсистемы; - СтрокаПодсистемы.Предопределенная = Истина; - КонецЕсли; - КонецЦикла; - - // добавим подсистемы варианта - МассивПодсистем = ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.НайтиСтроки(Новый Структура("Ключ", ВариантОбъект.КлючОбъекта + "\" + ВариантОбъект.КлючВарианта)); - - Для каждого Подсистема из МассивПодсистем Цикл - - ПодсистемаМетаДанные = Метаданные.НайтиПоПолномуИмени("Подсистема." + СтрЗаменить(Подсистема.ПутьКПодсистеме, "\", ".Подсистема.")); - НазваниеПодсистемы = ""; - Если ПодсистемаМетаДанные <> Неопределено тогда - НазваниеПодсистемы = ПодсистемаМетаДанные.Представление(); - КонецЕсли; - - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Найти(Подсистема.ПутьКПодсистеме, "Подсистема"); - Если СтрокаПодсистемы = Неопределено Тогда - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Добавить(); - КонецЕсли; - - СтрокаПодсистемы.Подсистема = Подсистема.ПутьКПодсистеме; - СтрокаПодсистемы.Название = НазваниеПодсистемы; - - СтрокаПодсистемы.Предопределенная = Истина; - КонецЦикла; - - ВариантОбъект.ПометкаУдаления = Ложь; + Кэш = Новый Структура; + Кэш.Вставить("ИспользуемыеРазделы", ИспользуемыеРазделы()); + Кэш.Вставить("ПодключеныВсеОтчеты", ПодключеныВсеОтчеты()); + Кэш.Вставить("ДеревоВариантов", ДеревоНастроекВариантовОтчетовКонфигурации()); + + //////////////////////////////////////////////////////////////////////////////// + // 1. Перейти к редакции 2.1, если переход требуется и еще не выполнялся. + Если НеобходимПереходКРедакции21() Тогда + ПерейтиКРедакции21(Кэш); + КонецЕсли; + + //////////////////////////////////////////////////////////////////////////////// + // 2. Перенести варианты отчетов из стандартного хранилища. + // Выполняется только для пользовательских вариантов отчетов. + Если Кэш.ПодключеныВсеОтчеты Тогда + ЗавершитьКонвертациюВариантовОтчетов(); + Иначе + ПрямаяКонвертацияВариантовОтчетов(); + КонецЕсли; + + //////////////////////////////////////////////////////////////////////////////// + // 3. Заменить ключи старых вариантов на актуальные. + // Выполняется только для предопределенных вариантов отчетов. + ОбновитьКлючиВариантовОтчетов(Кэш); + + //////////////////////////////////////////////////////////////////////////////// + // 4. Актуализировать предопределенные варианты отчетов. + // Выполняется только для предопределенных вариантов отчетов. + ОбновитьПредопределенные(Кэш); + + //////////////////////////////////////////////////////////////////////////////// + // 5. Установка пометки удаления вариантов удаленных отчетов. + // Выполняется для всех вариантов отчетов. + ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш); + +КонецПроцедуры - Если СписокДопВариантов.НайтиПоЗначению(ВариантОбъект.КлючОбъекта) <> Неопределено тогда - ВариантОбъект.ХранилищеЗначений = ЗначениеНастроекДопВариантов[ВариантОбъект.КлючОбъекта]; - КонецЕсли; - - ВариантОбъект.Записать(); - - КонецЦикла; +// Переименовывает роль "Чтение вариантов отчетов" на "Использование вариантов отчетов". +// +Процедура ПереименоватьРольЧтениеВариантовОтчетов() Экспорт + + ТаблицаПереименований = Новый ТаблицаЗначений; + ТаблицаПереименований.Колонки.Добавить("СтароеИмяРоли"); + ТаблицаПереименований.Колонки.Добавить("НовоеИмяРоли"); + + Переименование = ТаблицаПереименований.Добавить(); + Переименование.СтароеИмяРоли = "ЧтениеВариантовОтчетов"; + Переименование.НовоеИмяРоли = "ИспользованиеВариантовОтчетов"; + + СтандартныеПодсистемыПереопределяемый.ОбновитьПереименованныеРоли(ТаблицаПереименований); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы / Начальное заполнение и актуализация справочника + +// Замена старых ключей вариантов отчетов на актуальные. +// +Процедура ОбновитьКлючиВариантовОтчетов(Кэш) + ПредставлениеПроцедуры = НСтр("ru = 'Обновить ключи вариантов отчетов'"); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + // Составить таблицу замен старых ключей вариантов на актуальные. + ОписаниеТиповРеквизитаКлючВарианта = Метаданные.Справочники.ВариантыОтчетов.Реквизиты.КлючВарианта.Тип; + + Изменения = Новый ТаблицаЗначений; + Изменения.Колонки.Добавить("Отчет", Новый ОписаниеТипов("ОбъектМетаданных")); + Изменения.Колонки.Добавить("СтароеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); + Изменения.Колонки.Добавить("АктуальноеИмяВарианта", ОписаниеТиповРеквизитаКлючВарианта); + + ВариантыОтчетовПереопределяемый.ЗарегистрироватьИзмененияКлючейВариантовОтчетов(Изменения); + + Изменения.Колонки.Отчет.Имя = "ОтчетМетаданные"; + Изменения.Колонки.Добавить("Отчет", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.Отчет.Тип); + + // Проверить корректность замен. + Для Каждого Изменение Из Изменения Цикл + Изменение.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Изменение.ОтчетМетаданные); + Найденные = Изменения.НайтиСтроки(Новый Структура("ОтчетМетаданные, СтароеИмяВарианта", Изменение.ОтчетМетаданные, Изменение.АктуальноеИмяВарианта)); + Если Найденные.Количество() > 0 Тогда + Конфликт = Найденные[0]; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка регистрации изменений имени варианта отчета ""%1"": + |Актуальное имя варианта ""%2"" (старое имя ""%3"") + |так же числится как старое имя ""%4"" (актуальное имя ""%5"").'"), + Строка(Изменение.Отчет), + Изменение.АктуальноеИмяВарианта, + Изменение.СтароеИмяВарианта, + Конфликт.СтароеИмяВарианта, + Конфликт.АктуальноеИмяВарианта + ); + КонецЕсли; + Найденные = Изменения.НайтиСтроки(Новый Структура("ОтчетМетаданные, СтароеИмяВарианта", Изменение.ОтчетМетаданные, Изменение.СтароеИмяВарианта)); + Если Найденные.Количество() > 2 Тогда + Конфликт = Найденные[1]; + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка регистрации изменений имени варианта отчета ""%1"": + |Старое имя варианта ""%2"" (актуальное имя ""%3"") + |так же числится как старое имя + |варианта отчета ""%4"" (актуальное имя ""%5"").'"), + Строка(Изменение.Отчет), + Изменение.СтароеИмяВарианта, + Изменение.АктуальноеИмяВарианта, + Строка(Конфликт.ОтчетМетаданные.Представление()), + Конфликт.АктуальноеИмяВарианта + ); + КонецЕсли; + КонецЦикла; + + // Получить ссылки вариантов отчетов для замены ключей, + // исключив из списка замен те варианты отчетов, + // актуальные ключи которых уже зарегистрированы, + // или старые ключи которых уже не заняты. + ТекстЗапроса = + "ВЫБРАТЬ + | Изменения.Отчет, + | Изменения.СтароеИмяВарианта, + | Изменения.АктуальноеИмяВарианта + |ПОМЕСТИТЬ втИзменения + |ИЗ + | &Изменения КАК Изменения + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | втИзменения.Отчет, + | втИзменения.АктуальноеИмяВарианта, + | ВариантыОтчетовСтарые.Ссылка + |ИЗ + | втИзменения КАК втИзменения + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетовАктуальные + | ПО втИзменения.Отчет = ВариантыОтчетовАктуальные.Отчет + | И втИзменения.АктуальноеИмяВарианта = ВариантыОтчетовАктуальные.КлючВарианта + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетовСтарые + | ПО втИзменения.Отчет = ВариантыОтчетовСтарые.Отчет + | И втИзменения.СтароеИмяВарианта = ВариантыОтчетовСтарые.КлючВарианта + |ГДЕ + | ВариантыОтчетовАктуальные.Ссылка ЕСТЬ NULL + | И НЕ ВариантыОтчетовСтарые.Ссылка ЕСТЬ NULL "; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Изменения", Изменения); + Запрос.Текст = ТекстЗапроса; + + // Заменить старые имена вариантов на актуальные. + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.КлючВарианта = Выборка.АктуальноеИмяВарианта; + ВариантОбъект.Записать(); + КонецЦикла; + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); +КонецПроцедуры // ОбновитьКлючиВариантовОтчетов + +// Актуализация предопределенных вариантов отчетов. +// +Процедура ОбновитьПредопределенные(Кэш) + ПредставлениеПроцедуры = НСтр("ru = 'Обновить предопределенные'"); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + ТекстЗапроса = + "ВЫБРАТЬ + | ВариантыОтчетов.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Пользовательский = ЛОЖЬ + | И ВариантыОтчетов.ТипОтчета = &ТипВнутренний + | + |УПОРЯДОЧИТЬ ПО + | ВариантыОтчетов.ПометкаУдаления УБЫВ"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); + + Выборка = Запрос.Выполнить().Выбрать(); + ВариантОбъект = Неопределено; + + Кэш.ДеревоВариантов.Колонки.Добавить("НайденВБазеДанных", Новый ОписаниеТипов("Булево")); + + // Перебрать варианты из базы данных, удалить неактуальные, привести в соответствие актуальные. + ПоискВарианта = Новый Структура("Отчет, КлючВарианта, НайденВБазеДанных, ЭтоВариант", , , Ложь, Истина); + Пока Выборка.Следующий() Цикл + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); - // добавить новые варианты - ПоискДубликатов = Новый Запрос; - ПоискДубликатов.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | 0 - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |ГДЕ - | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта - | И ВариантыОтчетов.КлючВарианта = &КлючВарианта - | И ВариантыОтчетов.ТипВариантаОтчета = &ТипВариантаОтчета"; - - // - Для Каждого Вариант из НовыеВариантыДляДобавления Цикл - - Индекс = Найти(Вариант.Значение, "\"); - КлючОбъекта = Лев(Вариант.Значение, Индекс - 1); - КлючВарианта = Сред(Вариант.Значение, Индекс + 1); - Если КлючВарианта = "СсылкаНаОтчет" Тогда - ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Отчет; - КлючВарианта = ""; - Иначе - ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Предопределенный; + ЗаполнитьЗначенияСвойств(ПоискВарианта, ВариантОбъект); + Найденные = Кэш.ДеревоВариантов.Строки.НайтиСтроки(ПоискВарианта, Истина); + Если Найденные.Количество() = 0 Тогда + Если НЕ ВариантОбъект.ПометкаУдаления Тогда + ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + ВариантОбъект.УстановитьПометкуУдаления(Истина); КонецЕсли; - - ПоискДубликатов.УстановитьПараметр("КлючОбъекта", КлючОбъекта); - ПоискДубликатов.УстановитьПараметр("КлючВарианта", КлючВарианта); - ПоискДубликатов.УстановитьПараметр("ТипВариантаОтчета", ТипВариантаОтчета); - - Если НЕ ПоискДубликатов.Выполнить().Пустой() Тогда - Продолжить; - КонецЕсли; - - ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); - - ИмяОтчета = КлючОбъекта; - - Если ИзмененныеОбъектыДанных <> Неопределено тогда - ИзменИмяОтчета = ИзмененныеОбъектыДанных[ИмяОтчета]; - Если ИзменИмяОтчета <> Неопределено тогда - ИмяОтчета = ИзменИмяОтчета; - КонецЕсли; - КонецЕсли; - - ИмяОтчета = СтрЗаменить(ИмяОтчета, "Отчет.", ""); - ОтчетМетаданные = Метаданные.Отчеты.Найти(ИмяОтчета); - Если ОтчетМетаданные <> Неопределено тогда - ВариантОбъект.ПредставлениеОбъекта = ОтчетМетаданные.Синоним; - КонецЕсли; - - ВариантОбъект.ТипВариантаОтчета = ТипВариантаОтчета; - ВариантОбъект.КлючОбъекта = КлючОбъекта; - ВариантОбъект.КлючВарианта = КлючВарианта; - ВариантОбъект.Наименование = Вариант.Представление; - ВариантОбъект.Описание = ОписаниеВариантов[Вариант.Значение]; - ВариантОбъект.БыстрыйДоступ = Истина; - - МассивПодсистем = СоответсвиеОтчетаПодсистемам.НайтиСтроки(Новый Структура("Отчет", ВариантОбъект.КлючОбъекта)); - - Для каждого Подсистема из МассивПодсистем Цикл - - СтруктураПоиска = Новый Структура("Ключ, ПутьКПодсистеме", ВариантОбъект.КлючОбъекта + "\" + ВариантОбъект.КлючВарианта, Подсистема.ПутьКПодсистеме); - НеИспользоватьПодсистемуОтчета = ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемуОтчета.НайтиСтроки(СтруктураПоиска); - - Если НеИспользоватьПодсистемуОтчета.Количество() = 0 тогда - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Найти(Подсистема.ПутьКПодсистеме, "Подсистема"); - Если СтрокаПодсистемы = Неопределено Тогда - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Добавить(); - КонецЕсли; - - СтрокаПодсистемы.Подсистема = Подсистема.ПутьКПодсистеме; - СтрокаПодсистемы.Название = Подсистема.НазваниеПодсистемы; - СтрокаПодсистемы.Предопределенная = Истина; - КонецЕсли; - КонецЦикла; - - // добавить подсистемы варианта - МассивПодсистем = ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.НайтиСтроки(Новый Структура("Ключ", ВариантОбъект.КлючОбъекта + "\" + ВариантОбъект.КлючВарианта)); - - Для каждого Подсистема из МассивПодсистем Цикл - ПодсистемаМетаДанные = Метаданные.НайтиПоПолномуИмени("Подсистема." + СтрЗаменить(Подсистема.ПутьКПодсистеме, "\", ".Подсистема.")); - НазваниеПодсистемы = ""; - Если ПодсистемаМетаДанные <> Неопределено тогда - НазваниеПодсистемы = ПодсистемаМетаДанные.Представление(); - КонецЕсли; - - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Найти(Подсистема.ПутьКПодсистеме, "Подсистема"); - Если СтрокаПодсистемы = Неопределено Тогда - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Добавить(); - КонецЕсли; - - СтрокаПодсистемы.Подсистема = Подсистема.ПутьКПодсистеме; - СтрокаПодсистемы.Название = НазваниеПодсистемы; - СтрокаПодсистемы.Предопределенная = Истина; - КонецЦикла; - - Если СписокДопВариантов.НайтиПоЗначению(ВариантОбъект.КлючОбъекта) <> Неопределено тогда - ВариантОбъект.ХранилищеЗначений = ЗначениеНастроекДопВариантов.Получить(ВариантОбъект.КлючОбъекта + "\" + ВариантОбъект.КлючВарианта); - КонецЕсли; - - ВариантОбъект.Записать(); - - КонецЦикла; - - // добавить новые варианты - Для каждого Вариант из ВариантыНеИспользуемые Цикл - ВариантОбъект = Вариант.Получитьобъект(); - ВариантОбъект.УстановитьПометкуУдаления(истина); - КонецЦикла; - - // перенос вариантов отчетов - Если ХранилищеВариантовОтчетов = ХранилищаНастроек.ХранилищеВариантовОтчетов Тогда - ЗавершитьКонвертациюВариантовОтчетов(); - Иначе - ПрямаяКонвертацияВариантовОтчетов(); + Продолжить; КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение - ОписаниеОшибки = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации( - ИмяСобытия(), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.ВариантыОтчетов, - , - НСТр("ru = 'В процессе обновления вариантов возникла ошибка:'") - + Символы.ПС - + ПодробноеПредставлениеОшибки(ОписаниеОшибки) - ); - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; + СтрокаВариант = ОписаниеВарианта(Кэш.ДеревоВариантов, ВариантОбъект.Отчет, ВариантОбъект.КлючВарианта); + СтрокаВариант.НайденВБазеДанных = Истина; + + Если СтрокаВариант.Включен = ВариантОбъект.ПометкаУдаления Тогда + ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + ВариантОбъект.УстановитьПометкуУдаления(НЕ СтрокаВариант.Включен); + КонецЕсли; + + Если НЕ СтрокаВариант.Включен Тогда + Продолжить; + КонецЕсли; + + // Реквизиты, для которых требуется жесткое восстановление настроек. + ВариантОбъект.Наименование = СтрокаВариант.Наименование; + ВариантОбъект.Автор = Неопределено; + ВариантОбъект.ТолькоДляАвтора = Ложь; + Если ЗначениеЗаполнено(СтрокаВариант.Описание) Тогда + ВариантОбъект.Описание = СтрокаВариант.Описание; + КонецЕсли; + + // Мягкое восстановление настроек размещения - без очистки настроек, сделанных в режиме "Предприятие". + ВосстановитьРазмещениеПредопределенногоВариантаОтчета(ВариантОбъект, СтрокаВариант); + + ВариантОбъект.Записать(); + КонецЦикла; - Возврат истина; -КонецФункции + // Добавить варианты, которых нет в базы данных. + Найденные = Кэш.ДеревоВариантов.Строки.НайтиСтроки(Новый Структура("НайденВБазеДанных, ЭтоВариант", Ложь, Истина), Истина); + Для Каждого СтрокаВариант Из Найденные Цикл + НастройкиВарианта = ?(СтрокаВариант.ОписаниеПолучено, СтрокаВариант, СтрокаВариант.Родитель); + + ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); + ВариантОбъект.Наименование = СтрокаВариант.Наименование; + ВариантОбъект.Отчет = СтрокаВариант.Отчет; + ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний; + ВариантОбъект.КлючВарианта = СтрокаВариант.КлючВарианта; + ВариантОбъект.Пользовательский = Ложь; + ВариантОбъект.Описание = СтрокаВариант.Описание; + ВариантОбъект.ВидимостьПоУмолчанию = Истина; + + ВосстановитьРазмещениеПредопределенногоВариантаОтчета(ВариантОбъект, НастройкиВарианта); + + ВариантОбъект.Записать(); + КонецЦикла; + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); +КонецПроцедуры // ОбновитьПредопределенные -// Загружает варианты, предварительно сохраненные из системного хранилища вариантов в хранилище общих настроек, -// в хранилище подсистемы. +// Установка пометки удаления вариантов удаленных отчетов. +// +Процедура ПометитьНаУдалениеВариантыУдаленныхОтчетов(Кэш) + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВариантыОтчетов.Ссылка + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ИдентификаторыОбъектовМетаданных КАК ИдентификаторыОбъектовМетаданных + | ПО ВариантыОтчетов.Отчет = ИдентификаторыОбъектовМетаданных.Ссылка + | И (ИдентификаторыОбъектовМетаданных.ПометкаУдаления = ИСТИНА) + | И (ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ)"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + ПредставлениеПроцедуры = НСтр("ru = 'Установка пометки удаления вариантов удаленных отчетов'"); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + МассивСсылокВариантов = Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"); + Для Каждого ВариантСсылка Из МассивСсылокВариантов Цикл + ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); + ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + ВариантОбъект.УстановитьПометкуУдаления(Истина); + КонецЦикла; + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); +КонецПроцедуры // ОбновитьПредопределенные + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы / Переход к редакции 2.1 + +// Определяет необходимость перехода к редакции 2.1. +// +Функция НеобходимПереходКРедакции21() + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 КАК Поле1 + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.УдалитьКлючОбъекта <> """""; + Возврат НЕ Запрос.Выполнить().Пустой(); +КонецФункции // НеобходимПереходКРедакции21 + +// Выполняет конвертацию вариантов для использования в редакции 2.1. +// +Процедура ПерейтиКРедакции21(Кэш) + ПредставлениеПроцедуры = НСтр("ru = 'Перейти к редакции 2.1'"); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.УдалитьКлючОбъекта КАК ОтчетПолноеИмя + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.УдалитьКлючОбъекта <> """""; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + // Сформировать информацию об отчете + ОтчетИнформация = СформироватьИнформациюОбОтчетеПоПолномуИмени(Выборка.ОтчетПолноеИмя); + + // Проверить результат + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ОшибкаПоВарианту(Выборка.Ссылка, ОтчетИнформация.ТекстОшибки); + Продолжить; + КонецЕсли; + + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + + Если ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.УдалитьПользовательский + ИЛИ ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Внешний Тогда + ВариантОбъект.Пользовательский = Истина; + Иначе + ВариантОбъект.Пользовательский = Ложь; + КонецЕсли; + + ВариантОбъект.Отчет = ОтчетИнформация.Отчет; + ВариантОбъект.ТипОтчета = ОтчетИнформация.ТипОтчета; + + Если ОтчетИнформация.ТипОтчета = Перечисления.ТипыОтчетов.Внешний Тогда + // Установка настроек варианта внешнего отчета, характерных для всех вариантов внешних отчетов. + // Все варианты внешних отчетов являются пользовательскими поскольку + // предопределенные варианты внешних отчетов не регистрируются в системе, + // а зачитываются каждый раз динамически. + ВариантОбъект.Пользовательский = Истина; + + // Варианты внешних отчетов не могут открываться из панели отчетов. + ВариантОбъект.Размещение.Очистить(); + + Иначе + + Если НЕ Редакция21ПривестиНастройкиПоРазделам(ВариантОбъект, Кэш) + ИЛИ НЕ Редакция21ПеренестиПользовательскиеНастройкиВРегистр(ВариантОбъект, Кэш) Тогда + ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + ВариантОбъект.УстановитьПометкуУдаления(Истина); + КонецЕсли; + + КонецЕсли; + + // Поставляемые варианты не имеют автора + Если НЕ ВариантОбъект.Пользовательский Тогда + ВариантОбъект.Автор = Неопределено; + КонецЕсли; + + ВариантОбъект.УдалитьКлючОбъекта = ""; + ВариантОбъект.УдалитьПредставлениеОбъекта = ""; + ВариантОбъект.УдалитьИсключенияБыстрогоДоступа.Очистить(); + ВариантОбъект.Записать(); + КонецЦикла; + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); +КонецПроцедуры + +// Замена структуры хранения настроек по разделам, переход на ссылки справочника ИОМ. +// Вызывается только для вариантов внутренних отчетов. +// +Функция Редакция21ПривестиНастройкиПоРазделам(ВариантОбъект, Кэш) + РазмещениеВарианта = Новый Соответствие; + + Найденные = ВариантОбъект.Размещение.НайтиСтроки(Новый Структура("РазделИлиГруппа", Справочники.ИдентификаторыОбъектовМетаданных.ПустаяСсылка())); + Для Каждого СтрокаТаблицы Из Найденные Цикл + ПодсистемаПолноеИмя = СтрокаТаблицы.УдалитьПодсистема; + Если ЗначениеЗаполнено(ПодсистемаПолноеИмя) Тогда + ПодсистемаПолноеИмя = "Подсистема." + СтрЗаменить(ПодсистемаПолноеИмя, "\", ".Подсистема."); + ПодсистемаМетаданные = Метаданные.НайтиПоПолномуИмени(ПодсистемаПолноеИмя); + Если ПодсистемаМетаданные <> Неопределено Тогда + РазмещениеВарианта.Вставить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПодсистемаМетаданные)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + ВариантОбъект.Размещение.Очистить(); + + Для Каждого КлючИЗначение Из РазмещениеВарианта Цикл + Если ЗначениеЗаполнено(КлючИЗначение.Ключ) Тогда + СтрокаТаблицы = ВариантОбъект.Размещение.Добавить(); + СтрокаТаблицы.РазделИлиГруппа = КлючИЗначение.Ключ; + СтрокаТаблицы.Использование = Истина; + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции // Редакция21ПривестиНастройкиПоРазделам + +// Заполнение регистра "НастройкиВариантовОтчетов". +// Вызывается только для вариантов внутренних отчетов. +// +Функция Редакция21ПеренестиПользовательскиеНастройкиВРегистр(ВариантОбъект, Кэш) + ТаблицаПодсистем = ВариантОбъект.Размещение.Выгрузить(Новый Структура("Использование", Истина)); + ТаблицаПодсистем.Свернуть("РазделИлиГруппа"); + + ТаблицаПользователей = ВариантОбъект.УдалитьИсключенияБыстрогоДоступа.Выгрузить(); + ТаблицаПользователей.Свернуть("Пользователь"); + + НаборЗаписей = РегистрыСведений.НастройкиВариантовОтчетов.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Вариант.Установить(ВариантОбъект.Ссылка, Истина); + + Для Каждого СтрокаПодсистема Из ТаблицаПодсистем Цикл + + Для Каждого СтрокаПользователь Из ТаблицаПользователей Цикл + + Запись = НаборЗаписей.Добавить(); + Запись.Активность = Истина; + Запись.Вариант = ВариантОбъект.Ссылка; + Запись.РазделИлиГруппа = СтрокаПодсистема.РазделИлиГруппа; + Запись.Пользователь = СтрокаПользователь.Пользователь; + Запись.Видимость = НЕ ВариантОбъект.ВидимостьПоУмолчанию; + + КонецЦикла; + + КонецЦикла; + + НаборЗаписей.Записать(Истина); + + Возврат Истина; +КонецФункции // Редакция21ПеренестиПользовательскиеНастройкиВРегистр + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы / Перенос вариантов из стандартного хранилища + +// Загружает варианты из системного хранилища вариантов в хранилище подсистемы при частичном внедрении. +// +Процедура ПрямаяКонвертацияВариантовОтчетов() Экспорт + ПредставлениеПроцедуры = НСтр("ru = 'Прямая конвертация вариантов отчетов'"); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + // Результат, который будет сохранен в хранилище + ТаблицаВариантов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПереносВариантовОтчетов", "ТаблицаВариантов", , , ""); + Если ТипЗнч(ТаблицаВариантов) <> Тип("ТаблицаЗначений") ИЛИ ТаблицаВариантов.Количество() = 0 Тогда + ТаблицаВариантов = Новый ТаблицаЗначений; + ТаблицаВариантов.Колонки.Добавить("Отчет", ОписаниеТиповСтрока()); + ТаблицаВариантов.Колонки.Добавить("Вариант", ОписаниеТиповСтрока()); + ТаблицаВариантов.Колонки.Добавить("Автор", ОписаниеТиповСтрока()); + ТаблицаВариантов.Колонки.Добавить("Настройка", Новый ОписаниеТипов("ХранилищеЗначения")); + ТаблицаВариантов.Колонки.Добавить("ПредставлениеОтчета", ОписаниеТиповСтрока()); + ТаблицаВариантов.Колонки.Добавить("ПредставлениеВарианта", ОписаниеТиповСтрока()); + ТаблицаВариантов.Колонки.Добавить("ИдентификаторАвтора", Новый ОписаниеТипов("УникальныйИдентификатор")); + КонецЕсли; + + УдалятьВсе = Истина; + МассивУдаляемыхКлючейОбъектов = Новый Массив; + + ВыборкаХранилища = ХранилищеВариантовОтчетов.Выбрать(); + ОшибокЧтенияПодряд = 0; + Пока Истина Цикл + Попытка + ЭлементВыборкиПолучен = ВыборкаХранилища.Следующий(); + ОшибокЧтенияПодряд = 0; + Исключение + ЭлементВыборкиПолучен = Неопределено; + ОшибокЧтенияПодряд = ОшибокЧтенияПодряд + 1; + ОшибкаПоВарианту( + Неопределено, + НСтр("ru = 'В процессе выборки вариантов отчетов из стандартного хранилища возникла ошибка:'") + + Символы.ПС + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + + Если ЭлементВыборкиПолучен = Ложь Тогда + Прервать; + ИначеЕсли ЭлементВыборкиПолучен = Неопределено Тогда + Если ОшибокЧтенияПодряд > 100 Тогда + Прервать; + Иначе + Продолжить; + КонецЕсли; + КонецЕсли; + + // Пропуск неподключенных внутренних отчетов. + ОтчетМетаданные = Метаданные.НайтиПоПолномуИмени(ВыборкаХранилища.КлючОбъекта); + Если ОтчетМетаданные <> Неопределено Тогда + ХранилищеМетаданные = ОтчетМетаданные.ХранилищеВариантов; + Если ХранилищеМетаданные = Неопределено ИЛИ ХранилищеМетаданные.Имя <> "ХранилищеВариантовОтчетов" Тогда + УдалятьВсе = Ложь; + Продолжить; + КонецЕсли; + КонецЕсли; + + // Внешние варианты отчетов переносятся все, поскольку для них невозможно определить + // подключены они к хранилищу подсистемы или нет. + МассивУдаляемыхКлючейОбъектов.Добавить(ВыборкаХранилища.КлючОбъекта); + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ВыборкаХранилища.Пользователь); + Если ПользовательИБ = Неопределено Тогда + Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ВыборкаХранилища.Пользователь, Истина); + Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + Продолжить; + КонецЕсли; + ИдентификаторПользователя = Пользователь.ИдентификаторПользователяИБ; + Иначе + ИдентификаторПользователя = ПользовательИБ.УникальныйИдентификатор; + КонецЕсли; + + СтрокаТаблицы = ТаблицаВариантов.Добавить(); + СтрокаТаблицы.Отчет = ВыборкаХранилища.КлючОбъекта; + СтрокаТаблицы.Вариант = ВыборкаХранилища.КлючНастроек; + СтрокаТаблицы.Автор = ВыборкаХранилища.Пользователь; + СтрокаТаблицы.Настройка = Новый ХранилищеЗначения(ВыборкаХранилища.Настройки, Новый СжатиеДанных(9)); + СтрокаТаблицы.ПредставлениеВарианта = ВыборкаХранилища.Представление; + СтрокаТаблицы.ИдентификаторАвтора = ИдентификаторПользователя; + Если ОтчетМетаданные = Неопределено Тогда + СтрокаТаблицы.ПредставлениеОтчета = ВыборкаХранилища.КлючОбъекта; + Иначе + СтрокаТаблицы.ПредставлениеОтчета = ОтчетМетаданные.Представление(); + КонецЕсли; + КонецЦикла; + + // Очистка стандартного хранилища + Если УдалятьВсе Тогда + ХранилищеВариантовОтчетов.Удалить(Неопределено, Неопределено, Неопределено); + Иначе + Для Каждого КлючОбъекта Из МассивУдаляемыхКлючейОбъектов Цикл + ХранилищеВариантовОтчетов.Удалить(КлючОбъекта, Неопределено, Неопределено); + КонецЦикла; + КонецЕсли; + + // Результат выполнения + ЗавершениеПроцедуры(ПредставлениеПроцедуры); + + // Загрузка вариантов в хранилище подсистемы + ЗавершитьКонвертациюВариантовОтчетов(ТаблицаВариантов); + +КонецПроцедуры // ПрямаяКонвертацияВариантовОтчетов() + +// Загружает в хранилище подсистемы варианты отчетов, предварительно сохраненные +// из системного хранилища вариантов в хранилище общих настроек. // Используется для загрузки вариантов отчетов при полном или частичном внедрении. // При полном внедрении может вызваться из обработки "ПереносВариантовОтчетов". // // Параметры: -// ТаблицаВариантов - (ТаблицаЗначений) Необязательный. Используется в системных целях. -// +// ТаблицаВариантов (ТаблицаЗначений) Необязательный. Используется в системных целях. +// Процедура ЗавершитьКонвертациюВариантовОтчетов(ТаблицаВариантов = Неопределено) Экспорт Если ТаблицаВариантов = Неопределено Тогда @@ -797,23 +944,54 @@ Возврат; КонецЕсли; - ТаблицаВариантов.Сортировать("Отчет Возр, Вариант Возр"); + ПредставлениеПроцедуры = НСтр("ru = 'Завершить конвертацию вариантов отчетов'"); + ЗапускПроцедуры(ПредставлениеПроцедуры); + + // Замена имен колонок под структуру справочника + ТаблицаВариантов.Колонки.Отчет.Имя = "ОтчетПолноеИмя"; + ТаблицаВариантов.Колонки.Вариант.Имя = "КлючВарианта"; + ТаблицаВариантов.Колонки.ПредставлениеВарианта.Имя = "Наименование"; + + // Преобразование имен отчетов в ссылки справоничка ИОМ + ТаблицаВариантов.Колонки.Добавить("Отчет", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.Отчет.Тип); + ТаблицаВариантов.Колонки.Добавить("Определен", Новый ОписаниеТипов("Булево")); + ТаблицаВариантов.Колонки.Добавить("ТипОтчета", Метаданные.Справочники.ВариантыОтчетов.Реквизиты.ТипОтчета.Тип); + Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл + ОтчетИнформация = СформироватьИнформациюОбОтчетеПоПолномуИмени(СтрокаТаблицы.ОтчетПолноеИмя); + + // Проверить результат + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ОшибкаПоВарианту(Неопределено, ОтчетИнформация.ТекстОшибки); + Продолжить; + КонецЕсли; + + СтрокаТаблицы.Определен = Истина; + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ОтчетИнформация, "Отчет, ТипОтчета"); + КонецЦикла; + + ТаблицаВариантов.Сортировать("ОтчетПолноеИмя Возр, КлючВарианта Возр"); // Существующие варианты отчетов ТекстЗапроса = "ВЫБРАТЬ | ТаблицаВариантов.Отчет, - | ТаблицаВариантов.Вариант, + | ТаблицаВариантов.ОтчетПолноеИмя, + | ТаблицаВариантов.ТипОтчета, + | ТаблицаВариантов.КлючВарианта, | ТаблицаВариантов.Автор |ПОМЕСТИТЬ втВарианты |ИЗ | &ТаблицаВариантов КАК ТаблицаВариантов + |ГДЕ + | ТаблицаВариантов.Определен = ИСТИНА |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | втВарианты.Отчет, - | втВарианты.Вариант, + | втВарианты.ОтчетПолноеИмя, + | втВарианты.ТипОтчета, + | втВарианты.КлючВарианта, | ВариантыОтчетов.Ссылка, | ПользователиПоИмени.Ссылка КАК ПользовательПоИмени |ИЗ @@ -822,8 +1000,9 @@ | ПО втВарианты.Автор = ПользователиПоИмени.Наименование | И (ПользователиПоИмени.ПометкаУдаления = ЛОЖЬ) | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов - | ПО втВарианты.Отчет = ВариантыОтчетов.КлючОбъекта - | И втВарианты.Вариант = ВариантыОтчетов.КлючВарианта"; + | ПО втВарианты.Отчет = ВариантыОтчетов.Отчет + | И втВарианты.КлючВарианта = ВариантыОтчетов.КлючВарианта + | И втВарианты.ТипОтчета = ВариантыОтчетов.ТипОтчета"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТаблицаВариантов", ТаблицаВариантов); @@ -848,16 +1027,12 @@ ПользователиПоИдентификатору = Запрос.Выполнить().Выгрузить(); - // Пользователь по умолчанию - ТекущийПользователь = Пользователи.ТекущийПользователь(); - - // (ТаблицаЗначений) Колонки: Отчет, ПутьКПодсистеме, НазваниеПодсистемы, Пояснение - ПодсистемыОтчетов = ПолучитьСписокПодсистемОтчетов(); + ПодсистемыОтчетов = РазмещениеОтчетовВПодсистемах(); // Загрузка вариантов в хранилище подсистемы - НачатьТранзакцию(); - Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл - Найденные = ВариантыБД.НайтиСтроки(Новый Структура("Отчет, Вариант", СтрокаТаблицы.Отчет, СтрокаТаблицы.Вариант)); + ОпределенныеВарианты = ТаблицаВариантов.НайтиСтроки(Новый Структура("Определен", Истина)); + Для Каждого СтрокаТаблицы Из ОпределенныеВарианты Цикл + Найденные = ВариантыБД.НайтиСтроки(Новый Структура("Отчет, КлючВарианта", СтрокаТаблицы.Отчет, СтрокаТаблицы.КлючВарианта)); ВариантБД = Найденные[0]; // Если вариант уже загружен в справочник "Варианты отчетов" - не загружаем его. @@ -868,423 +1043,580 @@ // СправочникОбъект ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); - // Настройки КД - ВариантОбъект.ХранилищеЗначений = СтрокаТаблицы.Настройка; + // Уже подготовленные параметры + ЗаполнитьЗначенияСвойств(ВариантОбъект, СтрокаТаблицы, "Наименование, Отчет, ТипОтчета, КлючВарианта"); - // Заполнение нового варианта - ВариантОбъект.КлючОбъекта = СтрокаТаблицы.Отчет; - ВариантОбъект.КлючВарианта = СтрокаТаблицы.Вариант; - ВариантОбъект.ПредставлениеОбъекта = СтрокаТаблицы.ПредставлениеОтчета; - ВариантОбъект.Наименование = СтрокаТаблицы.ПредставлениеВарианта; - - // Тип варианта - ОтчетМетаданные = Метаданные.Отчеты.Найти(СтрЗаменить(СтрокаТаблицы.Отчет, "Отчет.", "")); - Если ОтчетМетаданные = Неопределено Тогда - ВариантОбъект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет; - Иначе - ВариантОбъект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Пользовательский; + // Настройки + Настройки = СтрокаТаблицы.Настройка; + Если ТипЗнч(Настройки) = Тип("ХранилищеЗначения") Тогда + Настройки = Настройки.Получить(); КонецЕсли; + ВариантОбъект.Настройки = Новый ХранилищеЗначения(Настройки); + + // В стандартном хранилище хранятся только пользовательские ВО + ВариантОбъект.Пользовательский = Истина; + ВариантОбъект.ТолькоДляАвтора = Истина; // Автор варианта ПользовательПоИД = ПользователиПоИдентификатору.Найти(СтрокаТаблицы.ИдентификаторАвтора, "Идентификатор"); Если ПользовательПоИД <> Неопределено И ЗначениеЗаполнено(ПользовательПоИД.Пользователь) Тогда - ВариантОбъект.Администратор = ПользовательПоИД.Пользователь; + ВариантОбъект.Автор = ПользовательПоИД.Пользователь; ИначеЕсли ВариантБД <> Неопределено И ЗначениеЗаполнено(ВариантБД.ПользовательПоИмени) Тогда - ВариантОбъект.Администратор = ВариантБД.ПользовательПоИмени; + ВариантОбъект.Автор = ВариантБД.ПользовательПоИмени; Иначе - ВариантОбъект.Записать(); - ЗаписьЖурналаРегистрации( - ИмяСобытия(), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.ВариантыОтчетов, + ОшибкаПоВарианту( ВариантОбъект.Ссылка, - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вариант ""%1"" отчета ""%2"": не найден автор ""%3""'"), - ВариантОбъект.Наименование, - ВариантОбъект.ПредставлениеОбъекта, - СтрокаТаблицы.Автор - ) + НСтр("ru = 'Вариант ""%1"" отчета ""%2"": не найден автор ""%3""'"), + ВариантОбъект.Наименование, + СтрокаТаблицы.ПредставлениеОтчета, + СтрокаТаблицы.Автор ); КонецЕсли; - // Быстрый доступ - только для автора - ВариантОбъект.БыстрыйДоступ = Ложь; - ВариантОбъект.ИсключенияБыстрогоДоступа.Добавить().Пользователь = ВариантОбъект.Администратор; - - // Подсистемы варианта - ПодсистемыОтчета = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("Отчет", ВариантОбъект.КлючОбъекта)); - Для Каждого Подсистема Из ПодсистемыОтчета Цикл - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Найти(Подсистема.ПутьКПодсистеме, "Подсистема"); - Если СтрокаПодсистемы = Неопределено Тогда - СтрокаПодсистемы = ВариантОбъект.Подсистемы.Добавить(); - КонецЕсли; - - СтрокаПодсистемы.Подсистема = Подсистема.ПутьКПодсистеме; - СтрокаПодсистемы.Название = Подсистема.НазваниеПодсистемы; - СтрокаПодсистемы.Предопределенная = Истина; + // Поскольку переносятся пользовательские варианты отчетов, + // то настройки размещения можно взять только из метаданных отчета. + Найденные = ПодсистемыОтчетов.НайтиСтроки(Новый Структура("ОтчетПолноеИмя", СтрокаТаблицы.ОтчетПолноеИмя)); + Для Каждого СтрокаПодсистема Из Найденные Цикл + СтрокаРаздел = ВариантОбъект.Размещение.Добавить(); + СтрокаРаздел.Использование = Истина; + СтрокаРаздел.РазделИлиГруппа = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(СтрокаПодсистема.ПодсистемаМетаданные); КонецЦикла; ВариантОбъект.Записать(); КонецЦикла; - ЗафиксироватьТранзакцию(); // Очистка ОбщегоНазначения.ХранилищеОбщихНастроекУдалить("ПереносВариантовОтчетов", "ТаблицаВариантов", ""); + + ЗавершениеПроцедуры(ПредставлениеПроцедуры); КонецПроцедуры // ЗавершитьКонвертациюВариантовОтчетов() -// Загружает варианты из системного хранилища вариантов в хранилище подсистемы при частичном внедрении. +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Формирует ссылку и тип отчета по полному имени. // // Параметры: -// ИспользоватьДопОтчеты - (Булево) Признак поиска вариантов отчетов подсистемы "Дополнительные отчеты и обработки" +// ОтчетПолноеИмя (Строка) Полное имя отчета в виде +// "Отчет.<ИмяОтчета>" или "ВнешнийОтчет.<ИмяОтчета>" // -Процедура ПрямаяКонвертацияВариантовОтчетов() Экспорт +// Возвращаемое значение: +// Результат (Структура) +// |- Отчет +// |- ТипОтчета +// |- ОтчетИмя +// |- ОтчетМетаданные +// |- ТекстОшибки +// |- (Неопределено) Если ошибки нет +// |- (Строка) Текст ошибки +// +Функция СформироватьИнформациюОбОтчетеПоПолномуИмени(ОтчетПолноеИмя) Экспорт + Результат = Новый Структура("Отчет, ТипОтчета, ОтчетПолноеИмя, ОтчетИмя, ОтчетМетаданные, ТекстОшибки"); + Результат.ОтчетПолноеИмя = ОтчетПолноеИмя; - // Результат, который будет сохранен в хранилище - ТипСтрока = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(1000)); - ТаблицаВариантов = Новый ТаблицаЗначений; - ТаблицаВариантов.Колонки.Добавить("Отчет", ТипСтрока); - ТаблицаВариантов.Колонки.Добавить("Вариант", ТипСтрока); - ТаблицаВариантов.Колонки.Добавить("Автор", ТипСтрока); - ТаблицаВариантов.Колонки.Добавить("Настройка", Новый ОписаниеТипов("ХранилищеЗначения")); - ТаблицаВариантов.Колонки.Добавить("ПредставлениеОтчета", ТипСтрока); - ТаблицаВариантов.Колонки.Добавить("ПредставлениеВарианта", ТипСтрока); - ТаблицаВариантов.Колонки.Добавить("ИдентификаторАвтора", Новый ОписаниеТипов("УникальныйИдентификатор")); + ПозияТочки = Найти(ОтчетПолноеИмя, "."); + Если ПозияТочки = 0 Тогда + Префикс = ""; + Результат.ОтчетИмя = ОтчетПолноеИмя; + Иначе + Префикс = Лев(ОтчетПолноеИмя, ПозияТочки - 1); + Результат.ОтчетИмя = Сред(ОтчетПолноеИмя, ПозияТочки + 1); + КонецЕсли; - ВыборкаХранилища = ХранилищеВариантовОтчетов.Выбрать(); - ОшибокЧтенияПодряд = 0; - Пока Истина Цикл - Попытка - ЭлементВыборкиПолучен = ВыборкаХранилища.Следующий(); - ОшибокЧтенияПодряд = 0; - Исключение - ЭлементВыборкиПолучен = Неопределено; - ОшибокЧтенияПодряд = ОшибокЧтенияПодряд + 1; - ЗаписьЖурналаРегистрации( - ИмяСобытия(), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники.ВариантыОтчетов, - , - НСтр("ru = 'В процессе выборки вариантов отчетов из стандартного хранилища возникла ошибка:'") - + Символы.ПС - + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Если ВРег(Префикс) = "ОТЧЕТ" Тогда + Результат.ОтчетМетаданные = Метаданные.Отчеты.Найти(Результат.ОтчетИмя); + Если Результат.ОтчетМетаданные = Неопределено Тогда + ПредупреждениеПоВарианту( + Неопределено, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Отчет ""%1"" не найден в программе, + |он будет значиться как внешний.'"), + ОтчетПолноеИмя + ) + ); + Результат.ОтчетПолноеИмя = "ВнешнийОтчет." + Результат.ОтчетИмя; + КонецЕсли; + ИначеЕсли ВРег(Префикс) = "ВНЕШНИЙОТЧЕТ" Тогда + // Дополнительных проверок не требуется + Иначе + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Для отчета ""%1"" невозможно определить тип (не установлен префикс).'"), + ОтчетПолноеИмя + ); + Возврат Результат; + КонецЕсли; + + Если Результат.ОтчетМетаданные = Неопределено Тогда + Результат.Отчет = Результат.ОтчетПолноеИмя; + Результат.ТипОтчета = Перечисления.ТипыОтчетов.Внешний; + СтандартныеПодсистемыПереопределяемый.ЗаменитьТипИСсылкуЕслиОтчетДополнительный(Результат); + Иначе + Если НЕ ПравоДоступа("Просмотр", Результат.ОтчетМетаданные) Тогда + Результат.ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав доступа к отчету ""%1"".'"), + ОтчетПолноеИмя ); - КонецПопытки; - - Если ЭлементВыборкиПолучен = Ложь Тогда - Прервать; - ИначеЕсли ЭлементВыборкиПолучен = Неопределено Тогда - Если ОшибокЧтенияПодряд > 100 Тогда - Прервать; - Иначе - Продолжить; - КонецЕсли; КонецЕсли; - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ВыборкаХранилища.Пользователь); - Если ПользовательИБ = Неопределено Тогда - Пользователь = Справочники.Пользователи.НайтиПоНаименованию(ВыборкаХранилища.Пользователь, Истина); - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда - Продолжить; - КонецЕсли; - ИдентификаторПользователя = Пользователь.ИдентификаторПользователяИБ; - Иначе - ИдентификаторПользователя = ПользовательИБ.УникальныйИдентификатор; - КонецЕсли; - - ОтчетМД = Метаданные.Отчеты.Найти(СтрЗаменить(ВыборкаХранилища.КлючОбъекта, "Отчет.", "")); - ПредставлениеОтчета = ?(ОтчетМД = Неопределено, ВыборкаХранилища.КлючОбъекта, ОтчетМД.Представление()); - - СтрокаТаблицы = ТаблицаВариантов.Добавить(); - СтрокаТаблицы.Отчет = ВыборкаХранилища.КлючОбъекта; - СтрокаТаблицы.Вариант = ВыборкаХранилища.КлючНастроек; - СтрокаТаблицы.Автор = ВыборкаХранилища.Пользователь; - СтрокаТаблицы.Настройка = Новый ХранилищеЗначения(ВыборкаХранилища.Настройки, Новый СжатиеДанных(9)); - СтрокаТаблицы.ПредставлениеОтчета = ПредставлениеОтчета; - СтрокаТаблицы.ПредставлениеВарианта = ВыборкаХранилища.Представление; - СтрокаТаблицы.ИдентификаторАвтора = ИдентификаторПользователя; - КонецЦикла; + Результат.Отчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Результат.ОтчетМетаданные); + Результат.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний; + КонецЕсли; - // Загрузка вариантов в хранилище подсистемы - ЗавершитьКонвертациюВариантовОтчетов(ТаблицаВариантов); - -КонецПроцедуры // ПрямаяКонвертацияВариантовОтчетов() + Возврат Результат; +КонецФункции // СформироватьИнформациюОбОтчетеПоПолномуИмени -// Для внешних отчетов заполняет реквизит ТипВариантаОтчета значением -// Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет -// -Процедура УстановитьПризнакВариантаВнешнегоОтчета() Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ - | ВариантыОтчетов.Ссылка, - | ВариантыОтчетов.КлючОбъекта - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчетов - |"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл +// Формирует таблицу размещения отчетов по подсистемам конфигурации. +// +// Параметры: +// Результат (Неопределено) Используется для рекурсии. +// ПодсистемаРодитель (Неопределено) Используется для рекурсии. +// +// Возвращаемое значение: +// Результат (ТаблицаЗначений) +// |- ОтчетМетаданные +// |- ОтчетПолноеИмя +// |- ПодсистемаМетаданные +// |- ПодсистемаПолноеИмя +// +Функция РазмещениеОтчетовВПодсистемах(Результат = Неопределено, ПодсистемаРодитель = Неопределено) Экспорт + Если Результат = Неопределено Тогда + ПолноеИмяОписаниеТипов = Метаданные.Справочники.ИдентификаторыОбъектовМетаданных.Реквизиты.ПолноеИмя.Тип; - ИмяОтчета = СтрЗаменить(Выборка.КлючОбъекта, "Отчет.", ""); - МетаданныеОтчета = Метаданные.Отчеты.Найти(ИмяОтчета); - ЭтоВнешнийОтчет = (МетаданныеОтчета = Неопределено); - Если ЭтоВнешнийОтчет Тогда - Объект = Выборка.Ссылка.ПолучитьОбъект(); - Объект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет; - Объект.Записать(); - КонецЕсли; + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("ОтчетМетаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + Результат.Колонки.Добавить("ОтчетПолноеИмя", ПолноеИмяОписаниеТипов); + Результат.Колонки.Добавить("ПодсистемаМетаданные", Новый ОписаниеТипов("ОбъектМетаданных")); + Результат.Колонки.Добавить("ПодсистемаПолноеИмя", ПолноеИмяОписаниеТипов); - КонецЦикла; + ПодсистемаРодитель = Метаданные; + КонецЕсли; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции - -// Для внутреннего использования -// -Процедура ДобавитьОтчетыПодсистемы(Подсистема, СоответствиеПодсистемОтчетам, Знач Путь) - - Для каждого ОбъектМетаданных из Подсистема.Состав Цикл - - Если ОбъектМетаданных = Неопределено тогда + // Перебор вложенных подсистем родителя + Для Каждого ПодсистемаМетаданные Из ПодсистемаРодитель.Подсистемы Цикл + Если НЕ ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс Тогда Продолжить; КонецЕсли; - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - - Если Найти(ПолноеИмя, "Отчет.") <> 0 Тогда - - СтрокаДанных = СоответствиеПодсистемОтчетам.Добавить(); - СтрокаДанных.Отчет = ПолноеИмя; - СтрокаДанных.ПутьКПодсистеме = Путь; - СтрокаДанных.НазваниеПодсистемы = Подсистема.Синоним; - СтрокаДанных.Пояснение = Подсистема.Пояснение; - - КонецЕсли; - КонецЦикла; - - Для каждого Подсистема из Подсистема.Подсистемы Цикл - Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда - Продолжить; - КонецЕсли; - ДобавитьОтчетыПодсистемы(Подсистема, СоответствиеПодсистемОтчетам, Путь + "\" + Подсистема.Имя); - КонецЦикла; - -КонецПроцедуры - -// Для внутреннего использования -// -Функция ПолучитьПутьВиртуальныхПодсистем() - - СписокЗначений = Новый СписокЗначений; - - СписокВиртуальныхПодсистем = ВариантыОтчетовПереопределяемый.ОписаниеВиртуальныхПодсистем(); - - Для каждого Подсистема из СписокВиртуальныхПодсистем Цикл - - НомерПозицииПоследнегоРазделителя = 0; - - ДлинаПути = СтрДлина(Подсистема.Значение); - - Для Сч = 1 по ДлинаПути Цикл - - Если КодСимвола(Подсистема.Значение, Сч) = КодСимвола("\") тогда - - НомерПозицииПоследнегоРазделителя = Сч; - + // Состав подсистемы + Для Каждого ОтчетМетаданные Из ПодсистемаМетаданные.Состав Цикл + Если НЕ Метаданные.Отчеты.Содержит(ОтчетМетаданные) Тогда + Продолжить; КонецЕсли; + + СтрокаТаблицы = Результат.Добавить(); + СтрокаТаблицы.ОтчетМетаданные = ОтчетМетаданные; + СтрокаТаблицы.ОтчетПолноеИмя = ОтчетМетаданные.ПолноеИмя(); + СтрокаТаблицы.ПодсистемаМетаданные = ПодсистемаМетаданные; + СтрокаТаблицы.ПодсистемаПолноеИмя = ПодсистемаМетаданные.ПолноеИмя(); + КонецЦикла; - ПутьПодсистемы = Лев(Подсистема.Значение, НомерПозицииПоследнегоРазделителя-1); - ИмяПодсистемы = Прав(Подсистема.Значение, ДлинаПути -НомерПозицииПоследнегоРазделителя); - НазваниеПодсистемы = Подсистема.Представление; + РазмещениеОтчетовВПодсистемах(Результат, ПодсистемаМетаданные);; + КонецЦикла; + + Возврат Результат; +КонецФункции // РазмещениеОтчетовВПодсистемах + +// Восстановление настроек табличной части "Размещение" предопределенного варианта отчета. +// Для перезаписи настроек табличная часть "Размещение" должна быть очищена до вызова. +// +// Параметры: +// ВариантОбъект (СправочникОбъект.ВариантыОтчетов, ДанныеФормыСтруктура) +// +Функция ВосстановитьРазмещениеПредопределенногоВариантаОтчета(ВариантОбъект, ОписаниеВарианта) Экспорт + АктуальныеПодсистемыВарианта = Новый Массив; + + // Регистрация актуальных подсистем + Для Каждого КлючИЗначение Из ОписаниеВарианта.Размещение Цикл - СписокЗначений.Добавить(Новый Структура("ПутьПодсистемы, ИмяПодсистемы", ПутьПодсистемы, ИмяПодсистемы), НазваниеПодсистемы); + Подсистема = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(КлючИЗначение.Ключ); + + АктуальныеПодсистемыВарианта.Добавить(Подсистема); + + Найденные = ВариантОбъект.Размещение.НайтиСтроки(Новый Структура("РазделИлиГруппа", Подсистема)); + Если Найденные.Количество() = 0 Тогда + СтрокаТаблицы = ВариантОбъект.Размещение.Добавить(); + СтрокаТаблицы.РазделИлиГруппа = Подсистема; + СтрокаТаблицы.Использование = Истина; + Иначе + СтрокаТаблицы = Найденные[0]; + КонецЕсли; + + Если НЕ СтрокаТаблицы.Предопределенная Тогда + СтрокаТаблицы.Предопределенная = Истина; + СтрокаТаблицы.Важный = (КлючИЗначение.Значение = "Важный"); + СтрокаТаблицы.СмТакже = (КлючИЗначение.Значение = "СмТакже"); + КонецЕсли; КонецЦикла; - Возврат СписокЗначений; + // Удаление неактуальных подсистем + Найденные = ВариантОбъект.Размещение.НайтиСтроки(Новый Структура("Предопределенная", Истина)); + Для Каждого СтрокаТаблицы Из Найденные Цикл + Если АктуальныеПодсистемыВарианта.Найти(СтрокаТаблицы.РазделИлиГруппа) = Неопределено Тогда + ВариантОбъект.Размещение.Удалить(СтрокаТаблицы); + КонецЕсли; + КонецЦикла; + + Возврат Истина; +КонецФункции // ВосстановитьРазмещениеПредопределенногоВариантаОтчета + +// Определяет доступность объекта метаданных по функциональным опциям. +// Вызывающие функции кэшированы в целях оптимизации. +// +// Параметры: +// ОбъектМетаданных (ОбъектМетаданных) +// +// Возвращаемое значение: +// (Булево) Истина если объект доступен. +// +Функция ОбъектМетаданныхДоступенПоФункциональнымОпицям(ОбъектМетаданных) Экспорт + Содержится = Ложь; + Доступен = Ложь; + + Параметры = Новый Структура; + Для Каждого ФункциональнаяОпция Из Метаданные.ФункциональныеОпции Цикл + Если ФункциональнаяОпция.Состав.Содержит(ОбъектМетаданных) Тогда + Содержится = Истина; + Значение = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, Параметры); + Если Значение = Истина Тогда + Доступен = Истина; + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат НЕ Содержится ИЛИ Доступен; +КонецФункции // ОбъектМетаданныхДоступенПоФункциональнымОпицям + +// Добавляет подсистемы родителя с фильтром по правам доступа и функциональным опциям. +// +Процедура ДобавитьПодсистемыТекущегоПользователя(РодительСтрока, РодительМетаданные = Неопределено, РазделСсылка = Неопределено) Экспорт + ДляКорневойСтроки = (РодительМетаданные = Неопределено); + ПриоритетРодителя = ?(ДляКорневойСтроки, "", РодительСтрока.Приоритет + "."); + Подсистемы = ?(ДляКорневойСтроки, ИспользуемыеРазделы(), РодительМетаданные.Подсистемы); + Приоритет = 0; + Для Каждого Подсистема Из Подсистемы Цикл + ПодсистемаМетаданные = ?(ТипЗнч(Подсистема) = Тип("ОбъектМетаданных"), Подсистема, Подсистема.Метаданные); + Если ПодсистемаМетаданные.ВключатьВКомандныйИнтерфейс + И ПравоДоступа("Просмотр", ПодсистемаМетаданные) + И ОбъектМетаданныхДоступенПоФункциональнымОпицям(ПодсистемаМетаданные) Тогда + + Приоритет = Приоритет + 1; + + СтрокаДерева = РодительСтрока.Строки.Добавить(); + СтрокаДерева.Ссылка = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ПодсистемаМетаданные); + СтрокаДерева.Имя = ПодсистемаМетаданные.Имя; + СтрокаДерева.ПолноеИмя = ПодсистемаМетаданные.ПолноеИмя(); + СтрокаДерева.Представление = ПодсистемаМетаданные.Представление(); + СтрокаДерева.РазделСсылка = ?(ДляКорневойСтроки, СтрокаДерева.Ссылка, РазделСсылка); + СтрокаДерева.Приоритет = ПриоритетРодителя + Формат(Приоритет, "ЧЦ=4; ЧДЦ=0; ЧВН=; ЧГ=0"); + Если СтрЧислоВхождений(ПриоритетРодителя, ".") > 2 Тогда + СтрокаДерева.ПолноеПредставление = РодительСтрока.Представление + ": " + СтрокаДерева.Представление; + Иначе + СтрокаДерева.ПолноеПредставление = СтрокаДерева.Представление; + КонецЕсли; + + ДобавитьПодсистемыТекущегоПользователя(СтрокаДерева, ПодсистемаМетаданные, СтрокаДерева.РазделСсылка); + + КонецЕсли; + КонецЦикла; +КонецПроцедуры // ДобавитьПодсистемыТекущегоПользователя + +// Формирует описание типов Строка заданной длины. +// +Функция ОписаниеТиповСтрока(ДлинаСтроки = 1000) Экспорт + Возврат Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(ДлинаСтроки)); КонецФункции -// Для внутреннего использования -// -Процедура ДобавитьДеревоПодсистем(СписокПодсистем, Подсистема, Знач ПутьПодсистемы, СтрокаДереваПодсистем) - - Для каждого ПодсистемаПодчиненная из Подсистема.Подсистемы Цикл - - Если Не ПодсистемаПодчиненная.ВключатьВКомандныйИнтерфейс тогда - Продолжить; - КонецЕсли; - - ЕстьПравоПросмотра = ПравоДоступа("Просмотр", ПодсистемаПодчиненная); - Если НЕ ЕстьПравоПросмотра тогда - Продолжить; - КонецЕсли; - - ПараметрыФункциональнаяОпция = Новый Структура(""); - - ДоступенПоФункциональнаяОпцияОпциям = ложь; - СодержитсяВФункциональнаяОпция = ложь; - Для каждого ФункциональнаяОпция из Метаданные.ФункциональныеОпции Цикл - - Если Не ФункциональнаяОпция.Состав.Содержит(ПодсистемаПодчиненная) тогда - Продолжить; - КонецЕсли; - - СодержитсяВФункциональнаяОпция = Истина; - - ЗначениеФункциональнаяОпция = ПолучитьФункциональнуюОпцию(ФункциональнаяОпция.Имя, ПараметрыФункциональнаяОпция); - Если ТипЗнч(ЗначениеФункциональнаяОпция) = Тип("Булево") тогда - Если ЗначениеФункциональнаяОпция тогда - ДоступенПоФункциональнаяОпцияОпциям = истина; - Прервать; - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Если СодержитсяВФункциональнаяОпция И НЕ ДоступенПоФункциональнаяОпцияОпциям тогда - Продолжить; - КонецЕсли; - - ПутьКПодсистеме = ПутьПодсистемы + "\" + ПодсистемаПодчиненная.Имя; - - Если Найти(ПутьКПодсистеме, ПутьПодсистемы) > 0 тогда - СтрокаДереваПодсистемПодчиненная = СтрокаДереваПодсистем.Строки.Добавить(); - СтрокаДереваПодсистемПодчиненная.Подсистема = ПутьКПодсистеме; - СтрокаДереваПодсистемПодчиненная.Название = ПодсистемаПодчиненная.Синоним; - - СтрокаПодсистемы = СписокПодсистем.Добавить(); - СтрокаПодсистемы.Значение = ПутьКПодсистеме; - СтрокаПодсистемы.Представление = ПодсистемаПодчиненная.Синоним; - ДобавитьДеревоПодсистем(СписокПодсистем, ПодсистемаПодчиненная, ПутьКПодсистеме, СтрокаДереваПодсистемПодчиненная); - КонецЕсли; - КонецЦикла; - - ВиртуальныеПодсистемы = ПолучитьВиртуальныеПодсистемы(ПутьПодсистемы); - - Для каждого ПодсистемаПодчиненная из ВиртуальныеПодсистемы Цикл - - ПутьКПодсистеме = ПодсистемаПодчиненная.Значение; - - Если Найти(ПутьКПодсистеме, ПутьПодсистемы) > 0 тогда - СтрокаДереваПодсистемПодчиненная = СтрокаДереваПодсистем.Строки.Добавить(); - СтрокаДереваПодсистемПодчиненная.Подсистема = ПутьКПодсистеме; - СтрокаДереваПодсистемПодчиненная.Название = ПодсистемаПодчиненная.Представление; - - СтрокаПодсистемы = СписокПодсистем.Добавить(); - СтрокаПодсистемы.Значение = ПодсистемаПодчиненная.Значение; - СтрокаПодсистемы.Представление = ПодсистемаПодчиненная.Представление; - ДобавитьДеревоВиртуальныхПодсистем(СписокПодсистем, ПодсистемаПодчиненная.Значение, СтрокаДереваПодсистемПодчиненная); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры +// По составу ролей определяет полные права к данным подсистемы. +// +Функция ПолныеПраваНаВарианты() Экспорт + Возврат Пользователи.РолиДоступны("ДобавлениеИзменениеВариантовОтчетов"); +КонецФункции -// Для внутреннего использования -// -Процедура ДобавитьДеревоВиртуальныхПодсистем(СписокПодсистем, Знач Подсистема, СтрокаДереваПодсистем) +// Проверяет свободно ли наименование варианта отчета. +// +Функция НаименованиеЗанято(Отчет, Ссылка, Наименование) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 КАК Поле1 + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.Ссылка <> &Ссылка + | И ВариантыОтчетов.Наименование = &Наименование + | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; + Запрос.УстановитьПараметр("Отчет", Отчет); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("Наименование", Наименование); - ВиртуальныеПодсистемы = ПолучитьВиртуальныеПодсистемы(Подсистема); + УстановитьПривилегированныйРежим(Истина); + Результат = НЕ Запрос.Выполнить().Пустой(); + УстановитьПривилегированныйРежим(Ложь); - Для каждого ПодсистемаПодчиненная из ВиртуальныеПодсистемы Цикл - - ПутьКПодсистеме = ПодсистемаПодчиненная.Значение; - Если Найти(ПутьКПодсистеме, Подсистема) > 0 тогда - СтрокаДереваПодсистемПодчиненная = СтрокаДереваПодсистем.Строки.Добавить(); - СтрокаДереваПодсистемПодчиненная.Подсистема = ПутьКПодсистеме; - СтрокаДереваПодсистемПодчиненная.Название = Подсистема.Представление; - - СтрокаПодсистемы = СписокПодсистем.Добавить(); - СтрокаПодсистемы.Значение = ПодсистемаПодчиненная.Значение; - СтрокаПодсистемы.Представление = ПодсистемаПодчиненная.Представление; - ДобавитьДеревоВиртуальныхПодсистем(СписокПодсистем, ПодсистемаПодчиненная.Значение, СтрокаДереваПодсистемПодчиненная); - КонецЕсли; - + Возврат Результат; +КонецФункции + +// Проверяет свободен ли ключ варианта отчета. +// +Функция КлючВариантаЗанят(Отчет, Ссылка, КлючВарианта) Экспорт + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | 1 КАК Поле1 + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.Ссылка <> &Ссылка + | И ВариантыОтчетов.КлючВарианта = &КлючВарианта + | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; + Запрос.УстановитьПараметр("Отчет", Отчет); + Запрос.УстановитьПараметр("Ссылка", Ссылка); + Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); + + УстановитьПривилегированныйРежим(Истина); + Результат = НЕ Запрос.Выполнить().Пустой(); + УстановитьПривилегированныйРежим(Ложь); + + Возврат Результат; +КонецФункции + +// Определяет способ внедрения подсистемы. +// +Функция ПодключеныВсеОтчеты() Экспорт + Возврат (Метаданные.ХранилищеВариантовОтчетов <> Неопределено И Метаданные.ХранилищеВариантовОтчетов.Имя = "ХранилищеВариантовОтчетов"); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с деревом подсистем из форм + +// Добавляет элементы условного оформления дерева подсистем. +// +Процедура ДеревоПодсистемДобавитьУсловноеОформление(ЭтаФорма) Экспорт + ЭтаФорма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеВажный()); + ЭтаФорма.Элементы.ДеревоПодсистемВажность.СписокВыбора.Добавить(ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже()); + + Отборы = Новый Соответствие; + Отборы.Вставить("ДеревоПодсистем.Приоритет", ""); + + Оформление = Новый Соответствие; + Оформление.Вставить("ТолькоПросмотр", Истина); + + Поля = "ДеревоПодсистем"; + + ДобавитьЭлементУсловногоОформления(ЭтаФорма, Отборы, Оформление, Поля); + + Оформление = Новый Соответствие; + Оформление.Вставить("Отображать", Ложь); + + Поля = "ДеревоПодсистемИспользование, ДеревоПодсистемВажность"; + + ДобавитьЭлементУсловногоОформления(ЭтаФорма, Отборы, Оформление, Поля); + +КонецПроцедуры // ФормаЭлементаСоздатьУсловноеОформлениеДляРазделов + +// Добавляет элемент условного оформления. +// +Функция ДобавитьЭлементУсловногоОформления(ЭтаФорма, Отборы, Оформление, Поля) + ЭлементУсловногоОформленияКД = ЭтаФорма.УсловноеОформление.Элементы.Добавить(); + ЭлементУсловногоОформленияКД.Использование = Истина; + + Для Каждого КлючИЗначение Из Отборы Цикл + ЭлементОтбораКД = ЭлементУсловногоОформленияКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); + ЭлементОтбораКД.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; + ЭлементОтбораКД.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(КлючИЗначение.Ключ); + ЭлементОтбораКД.ПравоеЗначение = КлючИЗначение.Значение; + ЭлементОтбораКД.Применение = ТипПримененияОтбораКомпоновкиДанных.Элементы; КонецЦикла; -КонецПроцедуры - -// Для внутреннего использования -// -Процедура ДобавитьВДопНастройки(ИмяОтчета, ОписаниеВариантов, ДанныеОПодсистемахВариантов, СписокДопВариантов, ЗначениеНастроекДопВариантов) - - ДанныеДополнительныхНастроек = ПолучитьСтруктуруДополнительныхНастроек(); - ИмяОтчетаБезПрефикса = СтрЗаменить(ИмяОтчета, "Отчет.", ""); - ОтчетМенеджер = Отчеты[ИмяОтчетаБезПрефикса]; - - НастройкиПолучены = Ложь; - Попытка - ОтчетМенеджер.НастройкиОтчета(ДанныеДополнительныхНастроек); - НастройкиПолучены = Истина; - Исключение - ЗаписьЖурналаРегистрации( - ИмяСобытия(), - УровеньЖурналаРегистрации.Информация, - Метаданные.Справочники.ВариантыОтчетов, - , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Описания вариантов отчета %1 будут заполнены по умолчанию.'"), - "'"+ ИмяОтчетаБезПрефикса +"'" - ) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + Для Каждого КлючИЗначение Из Оформление Цикл + ЭлементУсловногоОформленияКД.Оформление.УстановитьЗначениеПараметра( + Новый ПараметрКомпоновкиДанных(КлючИЗначение.Ключ), + КлючИЗначение.Значение ); - КонецПопытки; + КонецЦикла; - Если НЕ НастройкиПолучены Тогда - ОтчетОбъект = ОтчетМенеджер.Создать(); - Если ОтчетОбъект.СхемаКомпоновкиДанных = Неопределено Тогда - УстановитьОписаниеВариантаВДопНастройках( - ДанныеДополнительныхНастроек, - "_СсылкаНаОтчет", - "" - ); - Иначе - ВариантыОтчета = ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек; - Для Каждого Вариант Из ВариантыОтчета Цикл - УстановитьОписаниеВариантаВДопНастройках( - ДанныеДополнительныхНастроек, - Вариант.Имя, - "" - ); - КонецЦикла; + Если ТипЗнч(Поля) = Тип("Строка") Тогда + Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Поля, ","); + КонецЕсли; + Для Каждого Поле Из Поля Цикл + ОформляемоеПолеКД = ЭлементУсловногоОформленияКД.Поля.Элементы.Добавить(); + ОформляемоеПолеКД.Использование = Истина; + ОформляемоеПолеКД.Поле = Новый ПолеКомпоновкиДанных(Поле); + КонецЦикла; + + Возврат Истина; +КонецФункции // ДобавитьЭлементУсловногоОформления + +// Формирует дерево подсистем по данным варианта-основания. +// +Функция ДеревоПодсистемСформировать(ЭтаФорма, ВариантОснование) Экспорт + ДеревоИсточник = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); + + ДеревоПриемник = ЭтаФорма.РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); + ДеревоПриемник.Строки.Очистить(); + + ДобавитьПодсистемыВДерево(ДеревоПриемник, ДеревоИсточник, ВариантОснование); + + Возврат ДеревоПриемник; +КонецФункции // ДеревоПодсистемСформировать + +// Добавляет строки дерева-источника в строки дерева-приемника. +// +Процедура ДобавитьПодсистемыВДерево(ПриемникРодитель, ИсточникРодитель, ВариантОснование) + Для Каждого Источник Из ИсточникРодитель.Строки Цикл + + Приемник = ПриемникРодитель.Строки.Добавить(); + ЗаполнитьЗначенияСвойств(Приемник, Источник); + + Найденные = ВариантОснование.Размещение.НайтиСтроки(Новый Структура("РазделИлиГруппа", Приемник.Ссылка)); + Если Найденные.Количество() > 0 Тогда + СтрокаТаблицы = Найденные[0]; + Если СтрокаТаблицы.Важный Тогда + Приемник.ВажностьПоУмолчанию = ВариантыОтчетовКлиентСервер.ПредставлениеВажный(); + ИначеЕсли СтрокаТаблицы.СмТакже Тогда + Приемник.ВажностьПоУмолчанию = ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже(); + Иначе + Приемник.ВажностьПоУмолчанию = ""; + КонецЕсли; + + Приемник.ИспользованиеПоУмолчанию = ?(СтрокаТаблицы.Использование, 1, 0); + КонецЕсли; + + Приемник.Важность = Приемник.ВажностьПоУмолчанию; + Приемник.Использование = Приемник.ИспользованиеПоУмолчанию; + + // Рекурсия + ДобавитьПодсистемыВДерево(Приемник, Источник, ВариантОснование); + КонецЦикла; +КонецПроцедуры + +// Сохраняет настройки размещения, измененные пользователем в табличную часть варианта отчета. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) +// ВариантОбъект (СправочникОбъект.ВариантыОтчетов, ДанныеФормыСтруктура) +// Кэш (Структура) Необязательный. +// +Процедура ДеревоПодсистемЗаписать(ЭтаФорма, ВариантОбъект, Кэш = Неопределено) Экспорт + Если Кэш <> Неопределено И Кэш.Свойство("ИзмененияПодсистем") Тогда + ИзмененияПодсистем = Кэш.ИзмененияПодсистем; + Иначе + ДеревоПриемник = ЭтаФорма.РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); + ИзмененияПодсистем = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("ИзмененПользователем", Истина), Истина); + Если Кэш <> Неопределено Тогда + Кэш.Вставить("ИзмененияПодсистем", ИзмененияПодсистем); КонецЕсли; КонецЕсли; - Для каждого ОписаниеВарианта из ДанныеДополнительныхНастроек.ОписаниеВариантов Цикл - ОписаниеВариантов.Вставить(ИмяОтчета + "\" + ОписаниеВарианта.Ключ, ОписаниеВарианта.Значение); - КонецЦикла; + Если ИзмененияПодсистем.Количество() = 0 Тогда + Возврат; + КонецЕсли; - Для каждого ВариантБезСКД из ДанныеДополнительныхНастроек.ПредопределенныеВариантыБезСКД Цикл - СписокДопВариантов.Добавить(ИмяОтчета + "\" + ВариантБезСКД.Значение, ВариантБезСКД.Представление); + Для Каждого Изменение Из ИзмененияПодсистем Цикл + СтрокаТабличнойЧасти = ВариантОбъект.Размещение.Найти(Изменение.Ссылка, "РазделИлиГруппа"); + Если СтрокаТабличнойЧасти = Неопределено Тогда + Если Изменение.Использование = 0 Тогда + Продолжить; + Иначе + СтрокаТабличнойЧасти = ВариантОбъект.Размещение.Добавить(); + СтрокаТабличнойЧасти.РазделИлиГруппа = Изменение.Ссылка; + КонецЕсли; + КонецЕсли; + + Если Изменение.Использование <> Изменение.ИспользованиеПоУмолчанию Тогда + Если Изменение.Использование = 0 Тогда + СтрокаТабличнойЧасти.Использование = Ложь; + ИначеЕсли Изменение.Использование = 1 Тогда + СтрокаТабличнойЧасти.Использование = Истина; + Иначе + // Оставить как есть + КонецЕсли; + КонецЕсли; + + Если Изменение.Важность <> Изменение.ВажностьПоУмолчанию ИЛИ Изменение.ВажностьПоУмолчанию = "" Тогда + Если Изменение.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеВажный() Тогда + СтрокаТабличнойЧасти.Важный = Истина; + СтрокаТабличнойЧасти.СмТакже = Ложь; + ИначеЕсли Изменение.Важность = ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже() Тогда + СтрокаТабличнойЧасти.Важный = Ложь; + СтрокаТабличнойЧасти.СмТакже = Истина; + Иначе + СтрокаТабличнойЧасти.Важный = Ложь; + СтрокаТабличнойЧасти.СмТакже = Ложь; + КонецЕсли; + КонецЕсли; КонецЦикла; - - Для каждого ЗначениеВариантаБезСКД из ДанныеДополнительныхНастроек.ЗначенияНастроекОтчетовБезСКД Цикл - ЗначениеНастроекДопВариантов.Вставить(ИмяОтчета + "\" + ВариантБезСКД.Ключ, ВариантБезСКД.Значение); - КонецЦикла; - - ДанныеДополнительныхНастроек = ВариантыОтчетовПереопределяемый.КомандныйИнтерфейс(); - Для каждого ДанныеОПодсистеме из ДанныеДополнительныхНастроек.СоответствиеПодсистемИВариантов Цикл - СтрокаПодсистемы = ДанныеОПодсистемахВариантов.СоответствиеПодсистемИВариантов.Добавить(); - СтрокаПодсистемы.Ключ = ДанныеОПодсистеме.Ключ; - СтрокаПодсистемы.ПутьКПодсистеме = ДанныеОПодсистеме.ПутьКПодсистеме; - КонецЦикла; - - Для каждого ДанныеОПодсистеме из ДанныеДополнительныхНастроек.НеИспользоватьПодсистемыОтчета Цикл - СтрокаПодсистемы = ДанныеОПодсистемахВариантов.НеИспользоватьПодсистемуОтчета.Добавить(); - СтрокаПодсистемы.Ключ = ДанныеОПодсистеме.Ключ; - СтрокаПодсистемы.ПутьКПодсистеме = ДанныеОПодсистеме.ПутьКПодсистеме; - КонецЦикла; - +КонецПроцедуры // ДеревоПодсистемЗаписать + +//////////////////////////////////////////////////////////////////////////////// +// Журнал регистрации + +// Запись ошибки в журнале регистрации по варианту отчета. +// +Процедура ОшибкаПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт + ЗаписьЖурналаРегистрации( + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.ВариантыОтчетов, + Вариант, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Сообщение, + Строка(Реквизит1), + Строка(Реквизит2), + Строка(Реквизит3) + ) + ); КонецПроцедуры -// Имя события для записи в журнал регистрации -// -// Возвращаемое значение: -// (Строка) Имя события для записи в журнал регистрации +// Запись информации в журнале регистрации по варианту отчета. // -Функция ИмяСобытия() - Возврат НСтр("ru = 'Варианты отчетов'"); -КонецФункции +Процедура ИнформацияПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт + ЗаписьЖурналаРегистрации( + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(), + УровеньЖурналаРегистрации.Информация, + Метаданные.Справочники.ВариантыОтчетов, + Вариант, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Сообщение, + Строка(Реквизит1), + Строка(Реквизит2), + Строка(Реквизит3) + ) + ); +КонецПроцедуры + +// Запись предупреждения в журнале регистрации по варианту отчета. +// +Процедура ПредупреждениеПоВарианту(Вариант, Сообщение, Реквизит1 = Неопределено, Реквизит2 = Неопределено, Реквизит3 = Неопределено) Экспорт + ЗаписьЖурналаРегистрации( + ВариантыОтчетовКлиентСервер.НаименованиеПодсистемы(), + УровеньЖурналаРегистрации.Предупреждение, + Метаданные.Справочники.ВариантыОтчетов, + Вариант, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + Сообщение, + Строка(Реквизит1), + Строка(Реквизит2), + Строка(Реквизит3) + ) + ); +КонецПроцедуры + +// Записывает в журнал регистрации событие запуска процедуры и открывает транзакцию. +// +Процедура ЗапускПроцедуры(ПредставлениеПроцедуры) + ИнформацияПоВарианту(Неопределено, НСтр("ru = 'Запуск процедуры ""%1"".'"), ПредставлениеПроцедуры); + НачатьТранзакцию(); +КонецПроцедуры + +// Записывает в журнал регистрации событие завершения процедуры и фиксирует транзакцию. +// +Процедура ЗавершениеПроцедуры(ПредставлениеПроцедуры) + ЗафиксироватьТранзакцию(); + ИнформацияПоВарианту(Неопределено, НСтр("ru = 'Завершение процедуры ""%1"".'"), ПредставлениеПроцедуры); +КонецПроцедуры diff --git a/SSL/src/CommonModules/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/CommonModules/ВариантыОтчетов/ВариантыОтчетов.mdo index cb059c0eb..e46d45dec 100644 --- a/SSL/src/CommonModules/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/CommonModules/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/Module.bsl deleted file mode 100644 index 2f853afa1..000000000 --- a/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/Module.bsl +++ /dev/null @@ -1,26 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Варианты отчетов" -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Получает список отчетов, доступных текущему пользователю -// -// Возвращаемое значение: -// СписокОтчетов (СписокЗначений) Список отчетов -// |- Значение (Строка) Имя отчета, как оно задано в метаданных -// -Функция ОтчетыТекущегоПользователя() Экспорт - СписокОтчетов = Новый СписокЗначений; - - Для Каждого ОтчетМД Из Метаданные.Отчеты Цикл - Если ПравоДоступа("Просмотр", ОтчетМД) Тогда - СписокОтчетов.Добавить("Отчет."+ ОтчетМД.Имя); - КонецЕсли; - КонецЦикла; - - Возврат СписокОтчетов; -КонецФункции - diff --git a/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/ВариантыОтчетовВызовСервераПовтИсп.mdo b/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/ВариантыОтчетовВызовСервераПовтИсп.mdo deleted file mode 100644 index e26c57dfa..000000000 --- a/SSL/src/CommonModules/ВариантыОтчетовВызовСервераПовтИсп/ВариантыОтчетовВызовСервераПовтИсп.mdo +++ /dev/null @@ -1,11 +0,0 @@ - - - ВариантыОтчетовВызовСервераПовтИсп - - ru - Варианты отчетов вызов сервера повт исп - - true - true - DuringSession - diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl index 9a2e02830..f7457bd12 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиент/Module.bsl @@ -1,111 +1,257 @@ //////////////////////////////////////////////////////////////////////////////// -// Подсистема "Варианты отчетов" +// Подсистема "Варианты отчетов" (клиент) // +// Выполняется на клиенте. //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС // Открывает панель отчетов. Используется в модуле общей команды. -// +// // Параметры: -// ИмяРаздела (Строка) Имя раздела командного интерфейса, из которого вызывается команда. -// ЗаголовокПанелиОтчетов (Строка) Заголовок, который будет установлен для панели отчетов. Локализуем. -// ПараметрыВыполненияКоманды (...) Передается "как есть" из параметров обработчика команды. -// КартинкаФормы (Картина) Необязательный. Картинка, которая будет установлена в панели отчетов. -// -Процедура ОткрытьПанельОтчетов(ИмяРаздела, ЗаголовокПанелиОтчетов, ПараметрыВыполненияКоманды, - КартинкаФормы = Неопределено) Экспорт - - ИмяФормы = "ОбщаяФорма.ПанельОтчетов"; - - Параметры = Новый Структура("Подсистемы, ИмяФормы, КартинкаФормы"); - Параметры.Подсистемы = ИмяРаздела; - Параметры.ИмяФормы = ЗаголовокПанелиОтчетов; - Параметры.КартинкаФормы = КартинкаФормы; - - Владелец = ПараметрыВыполненияКоманды.Источник; - - Уникальность = ПараметрыВыполненияКоманды.Уникальность; - Если ТипЗнч(Владелец) = Тип("ОкноКлиентскогоПриложения") И Владелец.Основное = Истина Тогда - Уникальность = ИмяРаздела +"."+ СтрЗаменить(ТРег(ЗаголовокПанелиОтчетов), " ", "") +"."+ Уникальность; +// ИмяРаздела (Строка) Имя раздела, для которого открывается панель отчетов. +// ПараметрыВыполненияКоманды (ПараметрыВыполненияКоманды) Передается "как есть" из параметров обработчика команды. +// Заголовок (Строка) Необязательный. Заголовок панели отчетов. +// +Процедура ПоказатьПанельОтчетов(ИмяРаздела, ПараметрыВыполненияКоманды, Заголовок = "") Экспорт + ФормаПараметры = Новый Структура("ИмяРаздела", ИмяРаздела); + Если ЗначениеЗаполнено(Заголовок) Тогда + ФормаПараметры.Вставить("Заголовок", Заголовок); КонецЕсли; - Окно = ПараметрыВыполненияКоманды.Окно; + ФормаВладелец = ПараметрыВыполненияКоманды.Источник; + ФормаУникальность = ИмяРаздела + "." + ПараметрыВыполненияКоманды.Уникальность; + ФормаОкно = ПараметрыВыполненияКоманды.Окно; - ОткрытьФорму(ИмяФормы, Параметры, Владелец, Уникальность, Окно); -КонецПроцедуры + ОткрытьФорму("ОбщаяФорма.ПанельОтчетов", ФормаПараметры, ФормаВладелец, ФормаУникальность, ФормаОкно); +КонецПроцедуры // ПоказатьПанельОтчетов + +// Устарела: следует использовать процедуру ПоказатьПанельОтчетов. +// +Процедура ОткрытьПанельОтчетов(ИмяРаздела, ЗаголовокПанелиОтчетов, ПараметрыВыполненияКоманды, + КартинкаФормы = Неопределено) Экспорт + ПоказатьПанельОтчетов(ИмяРаздела, ПараметрыВыполненияКоманды, ЗаголовокПанелиОтчетов); +КонецПроцедуры // ОткрытьПанельОтчетов + +// Открывает диалог настройки размещения нескольких вариантов в разделах. +// Проверки рекомендуется осуществлять до вызова. +// +// Параметры: +// МассивВариантов (Массив) из (СправочникСсылка.ВариантыОтчетов) +// ДополнительныеПараметры (*) Необязательный. +// +Процедура ОткрытьДиалогРамещенияВариантовВРазделах(МассивВариантов, ДополнительныеПараметры = Неопределено) Экспорт + + Если ТипЗнч(МассивВариантов) <> Тип("Массив") ИЛИ МассивВариантов.Количество() < 1 Тогда + Предупреждение(НСтр("ru = 'Выберите варианты отчетов, которые необходимо разместить в разделах.'")); + Возврат; + КонецЕсли; + + ПараметрыОткрытия = Новый Структура("МассивВариантов, ДополнительныеПараметры", МассивВариантов, ДополнительныеПараметры); + ОткрытьФорму("Справочник.ВариантыОтчетов.Форма.РазмещениеВРазделах", ПараметрыОткрытия); + +КонецПроцедуры // ОткрытьДиалогРамещенияВариантовВРазделах + +// Обновляет открытые панели отчетов. +// +// Параметры: +// см. справку к Оповестить (Глобальный контекст) +// +Процедура ОбновитьОткрытыеПанелиОтчетов(Параметр = Неопределено, Источник = Неопределено) Экспорт + + Оповестить(ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(), Параметр, Источник); + +КонецПроцедуры // ОбновитьОткрытыеПанелиОтчетов //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Восстанавливает из строки СтрокаДляЗамены запрещенные символы в именах элементов формы. -// -Функция ВосстановитьЗапрещенныеСимволы(Знач СтрокаДляЗамены) Экспорт - - СтрокаРезультат = СтрокаДляЗамены; - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Точка_", "."); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Зап_", ","); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Слэш_", "\"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Тирэ_", "-"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_П_", " "); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Воскл_", "!"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Соб_", "@"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Ном_", "№"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Проц_", "%"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Реш_", "#"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Дол_", "$"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Степ_", "^"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Анд_", "&"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ТЗап_", ";"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ДвТ_", ":"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Воп_", "?"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Звезд_", "*"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ОСк_", "("); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ЗСк_", ")"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Рав_", "="); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Вол_", "~"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Ап_", "`"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ОФС_", "{"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ЗФС_", "{"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ОКС_", "["); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ЗКС_", "["); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Кав_", """"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ОКав_", "'"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Пал_", "|"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ПСл_", "\"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_ОСл_", "/"); - - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Бол_", ">"); - СтрокаРезультат = СтрЗаменить(СтрокаРезультат, "_Мен_", "<"); - - Возврат СтрокаРезультат; - -КонецФункции - -// Возвращает параметры дополнительной команды. +// Открывает вариант отчета. // // Параметры: -// ЗначениеПараметровКоманд - таблица из формы "Панель отчетов" или "Все отчеты". -// МассивПараметровКомманд - ФиксированныйМассив -из формы "Все отчеты" или "Панель отчетов" -// Ключ - Строка - уникальный ключ команды +// ЭтаФорма (УправляемаяФорма) // -Функция ПолучитьПараметрыКоманды(ЗначениеПараметровКоманд, МассивПараметровКоманд, Ключ) Экспорт +Процедура ОткрытьВариантОтчета(ЭтаФорма) Экспорт + Если ЭтаФорма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаСписка" Тогда + Вариант = ЭтаФорма.Элементы.Список.ТекущиеДанные; + ИначеЕсли ЭтаФорма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаЭлемента" Тогда + Вариант = ЭтаФорма.Объект; + Иначе + Возврат; + КонецЕсли; - Для Каждого СтрокаПараметра из ЗначениеПараметровКоманд Цикл - Если СтрокаПараметра.Ключ = Ключ Тогда - Возврат МассивПараметровКоманд[СтрокаПараметра.ИндексПозицииЭлемента]; + Если Вариант = Неопределено ИЛИ Вариант.Ссылка.Пустая() Тогда + + Предупреждение(НСтр("ru = 'Выберите вариант отчета.'")); + + ИначеЕсли Вариант.ТипОтчета = ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Внешний") Тогда + + Предупреждение(НСтр("ru = 'Вариант внешнего отчета можно открыть только из формы отчета.'")); + + ИначеЕсли Вариант.ТипОтчета = ПредопределенноеЗначение("Перечисление.ТипыОтчетов.Дополнительный") Тогда + + ПараметрыОткрытия = Новый Структура("Ссылка, Отчет, КлючВарианта"); + ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, Вариант); + СтандартныеПодсистемыКлиентПереопределяемый.ОткрытьВариантДополнительногоОтчета(ПараметрыОткрытия); + + Иначе + + Если ЭтаФорма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаСписка" Тогда + ИмяОтчета = Вариант.ИмяОтчета; + Иначе + ИмяОтчета = ЭтаФорма.ИмяОтчета; КонецЕсли; - КонецЦикла; - Возврат Неопределено; - -КонецФункции + + ПараметрыОткрытия = Новый Структура("КлючВарианта", Вариант.КлючВарианта); + ОткрытьФорму("Отчет." + ИмяОтчета + ".Форма", ПараметрыОткрытия); + + КонецЕсли; +КонецПроцедуры // ОткрытьВариантОтчета +// Выводит пользователю результат выполнения какой-либо операции, при необходимости +// оповещает об изменении типа или ссылки. +// +Процедура ПоказатьРезультат(Результат) Экспорт + Если ТипЗнч(Результат) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Оповестить = ?(Результат.Свойство("Оповестить"), Результат.Оповестить, Истина); + Заголовок = ?(Результат.Свойство("Заголовок"), Результат.Заголовок, ""); + Текст = ?(Результат.Свойство("Текст"), Результат.Текст, ""); + Картинка = ?(Результат.Свойство("Картинка"), Результат.Картинка, Неопределено); + ТекстОшибок = ?(Результат.Свойство("ТекстОшибок"), Результат.ТекстОшибок, ""); + Ссылка = ?(Результат.Свойство("Ссылка"), Результат.Ссылка, ""); + + Если Оповестить = Истина Тогда + ПоказатьОповещениеПользователя(Заголовок, Ссылка, Текст, Картинка); + Иначе + Если ЗначениеЗаполнено(ТекстОшибок) Тогда + Кнопки = Новый СписокЗначений; + Кнопки.Добавить(1, НСтр("ru = 'Показать ошибки'")); + Кнопки.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(Текст, Кнопки, , 1, Заголовок); + + Если Ответ = 1 Тогда + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.УстановитьТекст(ТекстОшибок); + Если ЗначениеЗаполнено(Заголовок) Тогда + ТекстовыйДокумент.Показать(Заголовок); + Иначе + ТекстовыйДокумент.Показать(); + КонецЕсли; + КонецЕсли; + Иначе + Предупреждение(Текст); + КонецЕсли; + КонецЕсли; + + Если Результат.Свойство("ТипДляОбновления") Тогда + ОповеститьОбИзменении(Результат.ТипДляОбновления); + КонецЕсли; + +КонецПроцедуры + +// Процедура обслуживает событие реквизита ДеревоПодсистем в формах редактирования. +// +Процедура ДеревоПодсистемИспользованиеПриИзменении(ЭтаФорма, Элемент) Экспорт + СтрокаДерева = ЭтаФорма.Элементы.ДеревоПодсистем.ТекущиеДанные; + Если СтрокаДерева = Неопределено Тогда + Возврат; + КонецЕсли; + + // Пропуск корневой строки + Если СтрокаДерева.Приоритет = "" Тогда + СтрокаДерева.Использование = 0; + Возврат; + КонецЕсли; + + Если СтрокаДерева.Использование = 2 И СтрокаДерева.ИспользованиеПоУмолчанию <> 2 Тогда + СтрокаДерева.Использование = 0; + КонецЕсли; + + УстановитьИзмененПользователем(ЭтаФорма, СтрокаДерева); +КонецПроцедуры + +// Процедура обслуживает событие реквизита ДеревоПодсистем в формах редактирования. +// +Процедура ДеревоПодсистемВажностьПриИзменении(ЭтаФорма, Элемент) Экспорт + СтрокаДерева = ЭтаФорма.Элементы.ДеревоПодсистем.ТекущиеДанные; + Если СтрокаДерева = Неопределено Тогда + Возврат; + КонецЕсли; + + // Пропуск корневой строки + Если СтрокаДерева.Приоритет = "" Тогда + СтрокаДерева.Важность = ""; + Возврат; + КонецЕсли; + + Если СтрокаДерева.Важность <> СтрокаДерева.ВажностьПоУмолчанию Тогда + СтрокаДерева.Использование = 1; + КонецЕсли; + + УстановитьИзмененПользователем(ЭтаФорма, СтрокаДерева); +КонецПроцедуры + +// Вспомогательная процедура для обработки изменений ДеревоПодсистем. +// +Процедура УстановитьИзмененПользователем(ЭтаФорма, СтрокаДерева) + Если СтрокаДерева.Использование = СтрокаДерева.ИспользованиеПоУмолчанию + И СтрокаДерева.Важность = СтрокаДерева.ВажностьПоУмолчанию Тогда + СтрокаДерева.ИзмененПользователем = Ложь; + Иначе + СтрокаДерева.ИзмененПользователем = Истина; + Если ЭтаФорма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаЭлемента" Тогда + ЭтаФорма.Модифицированность = Истина; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +// Вызывает диалог сохранения редактируемых данных произвольной формы +// Вызывается из обработчиков "ПередЗакрытием" и "ПриЗакрытии". +// +// Параметры: +// Модифицированность (Булево) Флаг модифицированности формы. +// Если форма не модифицирована, то сохранять нечего и запрос не требуется +// Отказ (...) Флаг отказа от закрытия формы. +// |- (Булево) для обработчика "ПередЗакрытием", используется для толстого и тонкого клиента. +// |- (Неопределено) для обработчика "ПриЗакрытии", используется для веб клиента. +// +// Возвращаемое значение: +// (Булево) Необходимость процедуры сохрания данных формы +// +Функция СохранитьДанныеПроизвольнойФормы(Модифицированность, Отказ = Неопределено) Экспорт + // Изменение сохраняемых данных должно устанавливать модифицированность формы + Если Модифицированность <> Истина Тогда + Возврат Ложь; + КонецЕсли; + + // Определение клиента + #Если ВебКлиент Тогда + ЭтоВебКлиент = Истина; + #Иначе + ЭтоВебКлиент = Ложь; + #КонецЕсли + + // Предупреждение необходимо вызвать только один раз для одного клиента + Если ЭтоВебКлиент <> (Отказ = Неопределено) Тогда + Возврат Ложь; + КонецЕсли; + + ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Кнопки = ?(ЭтоВебКлиент, РежимДиалогаВопрос.ДаНет, РежимДиалогаВопрос.ДаНетОтмена); + Ответ = Вопрос(ТекстВопроса, Кнопки, 60, КодВозвратаДиалога.Нет); + + Если Ответ = КодВозвратаДиалога.Да Тогда + Возврат Истина; + КонецЕсли; + + Если НЕ ЭтоВебКлиент И Ответ = КодВозвратаДиалога.Отмена Тогда + Отказ = Истина; + КонецЕсли; + + Возврат Ложь; +КонецФункции diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/Module.bsl deleted file mode 100644 index 85a75a983..000000000 --- a/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/Module.bsl +++ /dev/null @@ -1,28 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Варианты отчетов" -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Вызывается перед нажатием на команду открытия варианта отчета. -// -// Параметры: -// Ключ (Строка) Имя отчета + "\" + Имя варианта отчета -// ПараметрыФормы (Структура) Параметры формы отчета -// СтандартнаяОбработка (Булево) Флаг открытия формы отчета средствами подсистемы -// -Процедура ПередОткрытиемФормыОтчета(Ключ, ПараметрыФормы, СтандартнаяОбработка) Экспорт - -КонецПроцедуры - -// Вызывается, когда требуется выполнить внешнюю команду для интеграции с другими подсистемами. -// -// Параметры: -// УникальныйИдентификатор (Строка) Ключ варианта отчета -// ПараметрКоманды (*) Параметры внешней команды -// -Процедура ВыполнитьВнешнююКоманду(УникальныйИдентификатор, ПараметрКоманды) Экспорт - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl new file mode 100644 index 000000000..3dc76ac11 --- /dev/null +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/Module.bsl @@ -0,0 +1,33 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Варианты отчетов" (клиент, сервер) +// +// Выполняется на клиенте и на сервере. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Представление наименования данной подсистемы, используется +// для записи в журнале регистрации и в других местах. +// +Функция НаименованиеПодсистемы() Экспорт + Возврат НСтр("ru = 'Варианты отчетов'"); +КонецФункции + +// Представление группы важности. +// +Функция ПредставлениеСмТакже() Экспорт + Возврат НСтр("ru = 'См. также'"); +КонецФункции + +// Представление группы важности. +// +Функция ПредставлениеВажный() Экспорт + Возврат НСтр("ru = 'Важный'"); +КонецФункции + +// Имя события оповещения для изменения варианта отчета. +// +Функция ИмяСобытияИзменениеВарианта() Экспорт + Возврат "СтандартныеПодсистемы.ВариантыОтчетов.ИзменениеВарианта"; +КонецФункции diff --git a/SSL/src/CommonModules/ОбменФайламиСобытия/ОбменФайламиСобытия.mdo b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/ВариантыОтчетовКлиентСервер.mdo similarity index 63% rename from SSL/src/CommonModules/ОбменФайламиСобытия/ОбменФайламиСобытия.mdo rename to SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/ВариантыОтчетовКлиентСервер.mdo index b92fad484..9dea80e4d 100644 --- a/SSL/src/CommonModules/ОбменФайламиСобытия/ОбменФайламиСобытия.mdo +++ b/SSL/src/CommonModules/ВариантыОтчетовКлиентСервер/ВариантыОтчетовКлиентСервер.mdo @@ -1,12 +1,12 @@ - - ОбменФайламиСобытия + + ВариантыОтчетовКлиентСервер ru - Обмен файлами события + Варианты отчетов клиент сервер + true true true true - true diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl index 6d82653eb..d5d7774b2 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/Module.bsl @@ -1,92 +1,133 @@ //////////////////////////////////////////////////////////////////////////////// -// Подсистема "Варианты отчетов" +// Подсистема "Варианты отчетов" (сервер, переопределяемый) // +// Выполняется на сервере, изменяется под специфику прикладной конфигурации, +// но предназначен для использования только данной подсистемой. //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Функция должна вернуть список значений с описанием виртуальных подсистем -// Пример кода: -// -// Функция ОписаниеВиртуальныхПодсистем() Экспорт -// СписокПодсистем = Новый СписокЗначений; -// СписокПодсистем.Добавить("Маркетинг\АнализКлиентов", НСтр("ru = 'Работа с клиентами'")) -// Возврат СписокПодсистем; -// КонецФункции -// -Функция ОписаниеВиртуальныхПодсистем() Экспорт - - СписокПодсистем = Новый СписокЗначений; - - - - Возврат СписокПодсистем; - -КонецФункции - -// Функция должна вернуть соответсвие с кодом сортировки для каждого варианта отчета -// Пример кода: -// -// Функция СортировкаПредопределенныхВариантов() Экспорт -// СоответствиеСортировкиИВариантов = Новый Соответствие; -// СоответствиеСортировкиИВариантов.Вставить("Отчет.БизнесПроцессыИЗадачи\Основной", "АА00001"); -// Возврат СоответствиеСортировкиИВариантов; -// КонецФункции -// -Функция СортировкаПредопределенныхВариантов() Экспорт - СоответствиеСортировкиИВариантов = Новый Соответствие; - Возврат СоответствиеСортировкиИВариантов; -КонецФункции - -// Функция должна вернуть список значений с ключами отчета, которые поддерживаются подсистемой -// -Функция СписокОтчетовПоддерживаемыхПодсистемой() Экспорт - - СписокОтчетов = Новый СписокЗначений; - - - - Возврат СписокОтчетов; - -КонецФункции - -// Функция возвращает структуру данных для переопределения командного интерфейса -// Пример кода: -// -// Функция КомандныйИнтерфейс() Экспорт -// ДанныеОПодсистемахВариантов = ВариантыОтчетов.НоваяСтруктураКомандногоИнтерфейса(); -// ВариантыОтчетов.ДобавитьПодсистемуВариантаВДопНастройках(ДанныеОПодсистемахВариантов, "Отчет.ДинамикаИзмененийФайлов\СводнаяДиаграммаИзменения", "Администрирование"); -// Возврат ДанныеОПодсистемахВариантов; -// КонецФункции -// -Функция КомандныйИнтерфейс() Экспорт - - ДанныеОПодсистемахВариантов = ВариантыОтчетов.НоваяСтруктураКомандногоИнтерфейса(); - - - - Возврат ДанныеОПодсистемахВариантов; - -КонецФункции - -// Процедура вызывается для стыковки с другими подсистемами -// Заполняет список дополнительных команд, которые должны располагаться на панели -// -Процедура СписокДополнительныхКоманд(ТаблицаДополнительныхКоманд, ПутиПодсистемы) Экспорт - -КонецПроцедуры - -// Процедура вызывается для стыковки с другими подсистемами. -// Стыкуемая подсистема должна хранить признак быстрого доступа. Эта процедура вызывается когда требуется запомнить -// состояние быстрого команды подсистемы. +// Определяет разделы, в которых доступна панель отчетов. // // Параметры: -// МассивИдентификаторов - массив - элемент массива - структуру со свойствами: -// УникальныйИдентификатор - уникальный идентификатор команды -// БыстрыйДоступ - признак видимости команды на панели для всех пользователей -// ПараметрКоманды - параметр команды +// Разделы (Массив) из (ОбъектМетаданных) // -Процедура УстановитьБыстрыйДоступВнешнихКоманд(МассивИдентификаторов) Экспорт +// Описание: +// В Разделы необходимо добавить метаданные подсистем тех разделов, +// в которых размещены команды вызова панелей отчетов. +// +// Например: +// Разделы.Добавить(Метаданные.Подсистемы.ИмяПодсистемы); +// +Процедура ОпределитьРазделыСВариантамиОтчетов(Разделы) Экспорт -КонецПроцедуры + + +КонецПроцедуры // ОпределитьРазделыСВариантамиОтчетов + +// Содержит настройки размещения вариантов отчетов в панели отчетов. +// +// Параметры: +// Настройки (ДеревоЗначений) Используется для описания настроек отчетов и вариантов +// см. описание к ВариантыОтчетов.ДеревоНастроекВариантовОтчетовКонфигурации() +// +// Описание: +// В данной процедуре необходимо указать каким именно образом предопределенные варианты отчетов +// будут регистрироваться в системе и показываться в панели отчетов. +// +// Вспомогательные функции: +// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.<ИмяОтчета>); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "<ИмяВарианта>"); +// +// Данные функции получают описание отчета или варианта отчета следующей структуры: +// |- Включен (Булево) Если Ложь, то вариант отчета не регистрируется в подсистеме +// |- Описание (Строка) Дополнительное описание варианта отчета +// |- Размещение (Соответствие) Настройки размещения варианта отчета в разделах +// |- Ключ (ОбъектМетаданных) Подсистема, в которой размещается отчет или вариант отчета +// |- Значение (Строка) Необязательный. Настройки размещения в подсистеме. +// |- "" - Выводить отчет в своей группе обычным шрифтом. +// |- "Важный" - Выводить отчет в своей группе жирным шрифтом. +// |- "СмТакже" - Выводить отчет в группе "См. также". +// +// Например: +// +// (1) Оставить в подсистеме только один из вариантов отчета +// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); +// Отчет.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); +// Отчет.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела); +// +// (2) Отключить вариант отчета +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Метаданные.Отчеты.ИмяОтчета, "ИмяВарианта1"); +// Вариант.Включен = Ложь; +// +// (3) Отключить все варианты отчета, кроме требуемого +// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); +// Отчет.Включен = Ложь; +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта"); +// Вариант.Включен = Истина; +// +// (4) Результат исполнения любого из двух фрагментов кода будет одинаковым: +// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); +// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); +// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); +// Вариант.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// +// Отчет = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ИмяОтчета); +// Отчет.Размещение.Удалить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта1"); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта2"); +// Вариант = ВариантыОтчетов.ОписаниеВарианта(Настройки, Отчет, "ИмяВарианта3"); +// Отчет.Размещение.Вставить(Метаданные.Подсистемы.ИмяРаздела.Подсистемы.ИмяПодсистемы); +// +// +// Важно: +// Начальная настройка размещения отчетов по разделам зачитывается из метаданных, +// ее дублирование в коде не требуется. +// +// Настройки варианта имеют приоритет над настройками отчета. +// +// Настройки варианта при получении формируются из настроек отчета +// и после получения не зависят от настроек отчета (становятся самостоятельными). +// (см. примеры 3 и 4) +// +Процедура НастроитьВариантыОтчетов(Настройки) Экспорт + + + +КонецПроцедуры // НастроитьВариантыОтчетов + +// Содержит описания изменений имен вариантов отчетов. Используется +// при обновлении информационной базы, в целях контроля ссылочной целостности +// и для сохранения настроек варианта, сделанных администратором. +// +// Параметры: +// Изменения (ТаблицаЗначений) Таблица изменений имен вариантов +// |- Отчет (ОбъектМетаданных) +// |- СтароеИмяВарианта (Строка) +// |- АктуальноеИмяВарианта (Строка) +// +// Описание: +// В Изменения необходимо добавить описания изменений имен вариантов +// отчетов, подключенных к подсистеме. +// +// Например: +// Изменение = Изменения.Добавить(); +// Изменение.Отчет = Метаданные.Отчеты.<ИмяОтчета>; +// Изменение.СтароеИмяВарианта = "<СтароеИмяВарианта>"; +// Изменение.АктуальноеИмяВарианта = "<АктуальноеИмяВарианта>"; +// +// Важно: +// Старое имя варианта резервируется и не может быть использовано в дальнейшем. +// Если изменений было несколько, то каждое изменение необходимо зарегистрировать, +// указывая в актульном имени варианта последнее (текущее) имя варианта отчета. +// Поскольку имена варинатов отчетов не выводятся в пользовательском интерфейсе, +// то рекоммендуется задавать их таким образом, что бы затем не менять. +// +Процедура ЗарегистрироватьИзмененияКлючейВариантовОтчетов(Изменения) Экспорт + +КонецПроцедуры // ЗарегистрироватьИзмененияКлючейВариантовОтчетов diff --git a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/ВариантыОтчетовПереопределяемый.mdo b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/ВариантыОтчетовПереопределяемый.mdo index a2506769d..0fbb30fda 100644 --- a/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/ВариантыОтчетовПереопределяемый.mdo +++ b/SSL/src/CommonModules/ВариантыОтчетовПереопределяемый/ВариантыОтчетовПереопределяемый.mdo @@ -6,5 +6,6 @@ Варианты отчетов переопределяемый true - true + true + true diff --git a/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl new file mode 100644 index 000000000..2269161ae --- /dev/null +++ b/SSL/src/CommonModules/ВариантыОтчетовПовтИсп/Module.bsl @@ -0,0 +1,61 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Варианты отчетов" (сервер, повт. исп.) +// +// Выполняется на сервере, возвращаемые значения кэшируются на время сеанса. +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Формирует список отчетов конфигурации, доступных текущему пользователю. +// +// Возвращаемое значение: +// Результат (Массив) из (*) см. тип реквизита Отчет справочника ВариантыОтчетов. +// Ссылки отчетов, доступных текущему пользователю. +// +// Описание: +// Данный массив следует использовать во всех запросах к таблице +// справочника "ВариантыОтчетов" как отбор по реквизиту "Отчет". +// +Функция ОтчетыКонфигурацииДоступныеТекущемуПользователю() Экспорт + Результат = Новый Массив; + + Для Каждого ОтчетМетаданные Из Метаданные.Отчеты Цикл + Если ПравоДоступа("Просмотр", ОтчетМетаданные) + И ВариантыОтчетов.ОбъектМетаданныхДоступенПоФункциональнымОпицям(ОтчетМетаданные) Тогда + Результат.Добавить(ОбщегоНазначения.ИдентификаторОбъектаМетаданных(ОтчетМетаданные)); + КонецЕсли; + КонецЦикла; + + Возврат Результат; +КонецФункции + +// Формирует дерево подсистем, доступных текущему пользователю. +// +// Возвращаемое значение: +// Результат (ДеревоЗначений) +// |- РазделСсылка (СправочникСсылка.ИдентификаторыОбъектовМетаданных) Ссылка раздела. +// |- Ссылка (СправочникСсылка.ИдентификаторыОбъектовМетаданных) Ссылка подсистемы. +// |- Имя (Строка) Имя подсистемы. +// |- ПолноеИмя (Строка) Полное имя подсистемы. +// |- Представление (Строка) Представление подсистемы. +// |- Приоритет (Строка) Приоритет подсистемы. +// +Функция ПодсистемыТекущегоПользователя() Экспорт + Результат = Новый ДеревоЗначений; + Результат.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + Результат.Колонки.Добавить("Имя", ВариантыОтчетов.ОписаниеТиповСтрока(150)); + Результат.Колонки.Добавить("ПолноеИмя", ВариантыОтчетов.ОписаниеТиповСтрока(510)); + Результат.Колонки.Добавить("Представление", ВариантыОтчетов.ОписаниеТиповСтрока(150)); + Результат.Колонки.Добавить("РазделСсылка", Новый ОписаниеТипов("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + Результат.Колонки.Добавить("Приоритет", ВариантыОтчетов.ОписаниеТиповСтрока(100)); + Результат.Колонки.Добавить("ПолноеПредставление", ВариантыОтчетов.ОписаниеТиповСтрока(300)); + + КорневаяСтрока = Результат.Строки.Добавить(); + КорневаяСтрока.Ссылка = Справочники.ИдентификаторыОбъектовМетаданных.Подсистемы; + КорневаяСтрока.Представление = НСтр("ru = 'Все разделы'"); + + ВариантыОтчетов.ДобавитьПодсистемыТекущегоПользователя(КорневаяСтрока, Неопределено, Неопределено); + + Возврат Результат; +КонецФункции 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 3175ec96e..f71144d0a 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 b1190fe4f..47718c7a7 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/Module.bsl @@ -77,10 +77,10 @@ // Процедура ЗаписатьНастройкуВерсионированияПоОбъекту(ИмяОбъектаМетаданных, ВариантВерсионирования) Экспорт - ВариантМВ = РегистрыСведений.НастройкиВерсионированияОбъектов.СоздатьМенеджерЗаписи(); - ВариантМВ.ТипОбъекта = ИмяОбъектаМетаданных; - ВариантМВ.Вариант = ВариантВерсионирования; - ВариантМВ.Записать(); + Настройка = РегистрыСведений.НастройкиВерсионированияОбъектов.СоздатьМенеджерЗаписи(); + Настройка.ТипОбъекта = ИмяОбъектаМетаданных; + Настройка.Вариант = ВариантВерсионирования; + Настройка.Записать(); КонецПроцедуры @@ -119,42 +119,15 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Записывает версию объекта в информационную базу. -// -// Параметры -// Ссылка - Ссылка - ссылка на объект ИБ; -// НомерПоследнейВерсии - Число - номер последней записанной версии объекта; -// ХранилищеДанных - ХранилищеЗначения - хранилище с объектом ИБ (сериализованным в Fast InfoSet); -// Комментарий - Строка - комментарий к записываемой версии. -// -Процедура ЗаписатьВерсиюОбъекта(знач Ссылка, - знач НомерПоследнейВерсии, - знач ХранилищеДанных, - знач Комментарий) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписиВерсииОбъектов = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); - МенеджерЗаписиВерсииОбъектов.Объект = Ссылка; - МенеджерЗаписиВерсииОбъектов.ДатаВерсии = ТекущаяДатаСеанса(); - МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта = ХранилищеДанных; - МенеджерЗаписиВерсииОбъектов.НомерВерсии = Число(НомерПоследнейВерсии) + 1; - МенеджерЗаписиВерсииОбъектов.АвторВерсии = Пользователи.АвторизованныйПользователь(); - МенеджерЗаписиВерсииОбъектов.Комментарий = Комментарий; - - МенеджерЗаписиВерсииОбъектов.Записать(); - -КонецПроцедуры - // Возвращает номер последней записанной версии объекта. // // Параметры: -// Ссылка - Ссылка - ссылка на объект информационной базы. +// Ссылка - ЛюбаяСсылка - ссылка на объект информационной базы. // // Возвращаемое значение: // Число - номер версии объекта. // -Функция ПолучитьНомерПоследнейВерсии(Ссылка) Экспорт +Функция НомерПоследнейВерсии(Ссылка) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -205,22 +178,22 @@ // Возвращает вариант версионирования для указанного объекта метаданных. // // Параметры -// ПолноеИмя - строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". +// ПолноеИмяОбъекта - Строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". // // Возвращаемое значение: // Перечисление.ВариантыВерсионированияОбъектов. // -Функция ПолучитьВариантВерсионирования(ПолноеИмя) Экспорт +Функция ВариантВерсионированияОбъекта(ПолноеИмяОбъекта) Экспорт Возврат ПолучитьФункциональнуюОпцию("ВариантыВерсионированияОбъектов", - Новый Структура("ТипВерсионируемогоОбъекта", ПолноеИмя)); + Новый Структура("ТипВерсионируемогоОбъекта", ПолноеИмяОбъекта)); КонецФункции // Возвращает настройку версионирования по умолчанию по полному имени к объекту метаданных. // // Параметры: -// ПолноеИмя - строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". +// ПолноеИмяОбъекта - Строка - полный путь к объекту метаданных. Например, "Справочник.Номенклатура". // // Возвращаемое значение: // Перечисление.ВариантыВерсионированияОбъектов - @@ -228,12 +201,12 @@ // Для документов, не разрешенных к проведению настройка проведения: ВерсионироватьПриЗаписи; // Для остальных объектов: НеВерсионировать. // -Функция ПолучитьНастройкуВерсионированияПоУмолчанию(ПолноеИмя) Экспорт +Функция НастройкаВерсионированияПоУмолчанию(ПолноеИмяОбъекта) Экспорт - РазложенныйПуть = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмя, "."); + РазложенныйПуть = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолноеИмяОбъекта, "."); Если РазложенныйПуть[0] = "Документ" Тогда - Если Метаданные.НайтиПоПолномуИмени(ПолноеИмя).Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда + Если Метаданные.НайтиПоПолномуИмени(ПолноеИмяОбъекта).Проведение = Метаданные.СвойстваОбъектов.Проведение.Разрешить Тогда Возврат Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриПроведении; Иначе Возврат Перечисления.ВариантыВерсионированияОбъектов.ВерсионироватьПриЗаписи; @@ -288,10 +261,9 @@ // Функция может вызвать исключение, если запись не содержит данных. // Функцию требуется вызвать в привелигированном режиме. // -Функция ПолучитьИнформациюПоВерсии(знач Ссылка, знач НомерВерсии) Экспорт +Функция СведенияОВерсииОбъекта(знач Ссылка, знач НомерВерсии) Экспорт Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ | ВерсияОбъекта КАК ВерсияОбъекта, | АвторВерсии КАК АвторВерсии, @@ -313,7 +285,7 @@ КонецЕсли; Если ВерсияОбъекта = Неопределено Тогда - ВызватьИсключение НСтр("ru = 'Не удалось получить версию объекта из информационной базы. Выполнение операции прервано.'"); + ВызватьИсключение НСтр("ru = 'Не удалось получить предыдущую версию объекта.'"); КонецЕсли; Возврат Новый Структура("ВерсияОбъекта, АвторВерсии, ДатаВерсии", @@ -712,10 +684,10 @@ ВыводимоеНаименование = НаименованиеРеквизита; ПредставлениеЗначения = Строка(ЗначениеРеквизита); - УстановитьСвойстваТекста(Секция.Область("R1C2"), ВыводимоеНаименование, ,WebЦвета.Белый, , Истина); + УстановитьСвойстваТекста(Секция.Область("R1C2"), ВыводимоеНаименование, , , , Истина); УстановитьСвойстваТекста(Секция.Область("R1C3"), ПредставлениеЗначения); Секция.Область("R1C2:R1C3").ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1, 0); - Секция.Область("R1C2:R1C3").ЦветРамки = Новый Цвет (200,200,200); + Секция.Область("R1C2:R1C3").ЦветРамки = ЦветаСтиля.НедоступныеДанныеЦвет; ТЧОтчета.Вывести(Секция); @@ -772,12 +744,12 @@ Секция = Новый ТабличныйДокумент; - УстановитьСвойстваТекста(Секция.Область("R1C1"),"N", ,WebЦвета.СветлоСерый, , Истина, Истина); + УстановитьСвойстваТекста(Секция.Область("R1C1"),"N", , ЦветаСтиля.НедоступныеДанныеЦвет, , Истина, Истина); НомерСтроки = 1; Для Каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл НомерСтроки = НомерСтроки + 1; - УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), Строка(НомерСтроки-1), ,WEBЦвета.Белый,,,Истина); + УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), Строка(НомерСтроки-1), , , , , Истина); КонецЦикла; ДобавляемаяТЧ.Присоединить(Секция); @@ -797,7 +769,7 @@ Иначе ВыводимоеНаименованиеПоля = ОписаниеПоля.Синоним; КонецЕсли; - ЦветЗаголовкаКолонки = ?(ОписаниеПоля = Неопределено, WebЦвета.КрасноФиолетовый, WebЦвета.СветлоСерый); + ЦветЗаголовкаКолонки = ?(ОписаниеПоля = Неопределено, ЦветаСтиля.ЗаголовокУдаленногоРеквизитаФон, ЦветаСтиля.НедоступныеДанныеЦвет); УстановитьСвойстваТекста(Секция.Область("R1C1"), ВыводимоеНаименованиеПоля, ,ЦветЗаголовкаКолонки, , Истина, Истина); СоответствиеРазмерностиКолонок.Вставить(НомерКолонки, СтрДлина(НаименованиеПоля) + 4); @@ -807,7 +779,7 @@ Значение = ?(СтрокаТабличнойЧасти[НаименованиеПоля] = Неопределено, "", СтрокаТабличнойЧасти[НаименованиеПоля]); ПредставлениеЗначения = Строка(Значение); - УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), ПредставлениеЗначения, ,WEBЦвета.Белый,,,Истина); + УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), ПредставлениеЗначения, , , , , Истина); Если СтрДлина(ПредставлениеЗначения) > (СоответствиеРазмерностиКолонок[НомерКолонки] - 4) Тогда СоответствиеРазмерностиКолонок[НомерКолонки] = СтрДлина(ПредставлениеЗначения) + 4; КонецЕсли; @@ -843,24 +815,24 @@ знач Размер = 9, знач Жирный = Ложь) - Если ЦветТекста = Неопределено Тогда - ЦветТекста = WEBЦвета.Черный; + ОбластьСекции = Секция.Область(Регион); + + Если ЦветТекста <> Неопределено Тогда + ОбластьСекции.ЦветТекста = ЦветТекста; КонецЕсли; - Если ЦветФона = Неопределено Тогда - ЦветФона = WEBЦвета.Белый; + Если ЦветФона <> Неопределено Тогда + ОбластьСекции.ЦветФона = ЦветФона; КонецЕсли; - Секция.Область(Регион).Текст = Текст; - Секция.Область(Регион).ЦветФона = ЦветФона; - Секция.Область(Регион).ЦветТекста = ЦветТекста; - Секция.Область(Регион).Шрифт = Новый Шрифт(, Размер, Жирный, , , ); - Секция.Область(Регион).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + ОбластьСекции.Текст = Текст; + ОбластьСекции.Шрифт = Новый Шрифт(, Размер, Жирный, , , ); + ОбластьСекции.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; - Секция.Область(Регион).ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); - Секция.Область(Регион).ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); - Секция.Область(Регион).ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); - Секция.Область(Регион).ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); Возврат ТЧОтчета.Вывести(Секция); @@ -878,12 +850,10 @@ ОбластьСекции.Текст = Текст; - Если ЦветТекста = Неопределено Тогда - ЦветТекста = WebЦвета.Черный; + Если ЦветТекста <> Неопределено Тогда + ОбластьСекции.ЦветТекста = ЦветТекста; КонецЕсли; - ОбластьСекции.ЦветТекста = ЦветТекста; - Если ЦветФона <> Неопределено Тогда ОбластьСекции.ЦветФона = ЦветФона; КонецЕсли; diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo b/SSL/src/CommonModules/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo index 4e728bd1a..6dd4aba86 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo +++ b/SSL/src/CommonModules/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo @@ -6,5 +6,6 @@ Версионирование объектов true - true + true + true diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl index a99308f83..7544e3f07 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/Module.bsl @@ -35,7 +35,17 @@ Комментарий = ""; КонецЕсли; - ВерсионированиеОбъектов.ЗаписатьВерсиюОбъекта(Источник.Ссылка, НомерПоследнейВерсии, ХранилищеДанных, Комментарий); + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписиВерсииОбъектов = РегистрыСведений.ВерсииОбъектов.СоздатьМенеджерЗаписи(); + МенеджерЗаписиВерсииОбъектов.Объект = Источник.Ссылка; + МенеджерЗаписиВерсииОбъектов.ДатаВерсии = ТекущаяДатаСеанса(); + МенеджерЗаписиВерсииОбъектов.ВерсияОбъекта = ХранилищеДанных; + МенеджерЗаписиВерсииОбъектов.НомерВерсии = Число(НомерПоследнейВерсии) + 1; + МенеджерЗаписиВерсииОбъектов.АвторВерсии = Пользователи.АвторизованныйПользователь(); + МенеджерЗаписиВерсииОбъектов.Комментарий = Комментарий; + + МенеджерЗаписиВерсииОбъектов.Записать(); КонецПроцедуры @@ -56,12 +66,12 @@ КонецЕсли; ПолноеИмяОбъектаМетаданных = Источник.Метаданные().ПолноеИмя(); - ВариантВерсионирования = ВерсионированиеОбъектов.ПолучитьВариантВерсионирования(ПолноеИмяОбъектаМетаданных); + ВариантВерсионирования = ВерсионированиеОбъектов.ВариантВерсионированияОбъекта(ПолноеИмяОбъектаМетаданных); Если ВариантВерсионирования = Ложь Тогда - ВариантВерсионирования = ВерсионированиеОбъектов.ПолучитьНастройкуВерсионированияПоУмолчанию(ПолноеИмяОбъектаМетаданных); + ВариантВерсионирования = ВерсионированиеОбъектов.НастройкаВерсионированияПоУмолчанию(ПолноеИмяОбъектаМетаданных); КонецЕсли; - НомерПоследнейВерсии = ВерсионированиеОбъектов.ПолучитьНомерПоследнейВерсии(Источник.Ссылка); + НомерПоследнейВерсии = ВерсионированиеОбъектов.НомерПоследнейВерсии(Источник.Ссылка); ВерсионироватьОбъект = Истина; Если ВариантВерсионирования = Перечисления.ВариантыВерсионированияОбъектов.НеВерсионировать Тогда ВерсионироватьОбъект = Ложь; diff --git a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/ВерсионированиеОбъектовСобытия.mdo b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/ВерсионированиеОбъектовСобытия.mdo index 8153b20b1..2cb891dbb 100644 --- a/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/ВерсионированиеОбъектовСобытия.mdo +++ b/SSL/src/CommonModules/ВерсионированиеОбъектовСобытия/ВерсионированиеОбъектовСобытия.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/Взаимодействия/Module.bsl b/SSL/src/CommonModules/Взаимодействия/Module.bsl index 41f00de02..9b3feeb29 100644 --- a/SSL/src/CommonModules/Взаимодействия/Module.bsl +++ b/SSL/src/CommonModules/Взаимодействия/Module.bsl @@ -83,7 +83,7 @@ // Получим список взаимодействий у которых нужно изменить предмет Если ЗначениеЗаполнено(СтарыйПредмет) И ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(СтарыйПредмет) Тогда - МассивЗаменить = ВзаимодействияВызовСервера.ПолучитьВзаимодействияИзЦепочки(СтарыйПредмет, Взаимодействие); + МассивЗаменить = ПолучитьВзаимодействияИзЦепочки(СтарыйПредмет, Взаимодействие); Иначе МассивЗаменить = Новый Массив; КонецЕсли; @@ -112,6 +112,21 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАМНЫЙ ИНТЕРФЕЙС + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + Параметры.Вставить("ИспользоватьПочтовыйКлиент", ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент")); + Параметры.Вставить("ИспользоватьПрочиеВзаимодействия", ПолучитьФункциональнуюОпцию("ИспользоватьПрочиеВзаимодействия")); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -134,7 +149,7 @@ ИнформацияОбАктуальностиИндексаППД = НСтр("ru = 'ППД не включен'"); Иначе ППДВключен = Истина; - Если ПолнотекстовыйПоиск.ИндексАктуален() Тогда + Если ПолнотекстовыйПоискСервер.ИндексПоискаАктуален() Тогда ИнформацияОбАктуальностиИндексаППД = НСтр("ru = 'Индекс актуален'"); ИндексАктуален = Истина; Иначе @@ -145,6 +160,55 @@ КонецПроцедуры +// Возвращает поля для получения наименования владельца, если такой имеется +// +//Параметры +// ИмяТаблицы - Строка - Имя основной таблицы, для которой формируется запрос. +// +//Возвращаемое значение: +// Строка - строка, которая будет вставлена в запрос. +// +Функция ПолучитьИмяПоляДляНаименованияВладельца(ИмяТаблицы) Экспорт + + МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); + + Для каждого ЭлементОписанияМассива Из МассивОписанияКонтактов Цикл + Если ЭлементОписанияМассива.Имя = ИмяТаблицы И ЭлементОписанияМассива.ЕстьВладелец Тогда + Возврат "Таблица.Владелец.Наименование"; + КонецЕсли; + КонецЦикла; + + Возврат """"""; + +КонецФункции + +//Получает взаимодействия из цепочки по предмету взаимодействия. +// +//Параметры +// Цепочка - Ссылка - предмет взаимодействия для которого получаются взаимодействия. +// Исключать - Ссылка - взаимодействие, которое не должно попасть в результирующий массив. +// +//Возвращаемое значение: +// Массив - найденные взаимодействия +// +Функция ПолучитьВзаимодействияИзЦепочки(Цепочка, Исключать) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | ПредметыВзаимодействий.Взаимодействие КАК Ссылка + |ИЗ + | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий + |ГДЕ + | ПредметыВзаимодействий.Предмет = &Предмет + | " + ?(Исключать = Неопределено,""," И ПредметыВзаимодействий.Взаимодействие <> &Исключать "); + + Запрос.УстановитьПараметр("Предмет", Цепочка); + Запрос.УстановитьПараметр("Исключать", Исключать); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции отвечающие за поиск контактов @@ -1316,11 +1380,9 @@ // СправочникОбъект, ДокументОбъект - предмет взаимодействия. // Функция ПолучитьЗначениеПредмета(Ссылка) Экспорт - - УстановитьПривилегированныйРежим(Истина); - + Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПредметыВзаимодействий.Предмет |ИЗ | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий @@ -1349,10 +1411,8 @@ // Функция ПолучитьПапкуЭлектронногоПисьма(Письмо) Экспорт - УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПредметыВзаимодействий.ПапкаЭлектронногоПисьма |ИЗ | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий @@ -1972,39 +2032,6 @@ КонецФункции -//Получает ответственного за обработку электронных писем по умолчанию -// -//Параметры -// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись, для которой определяется ответственный -// -// Возвращаемое значение: -// СправочникСсылка.Пользователи - ответственный за обработку электронных писем -// -Функция ПолучитьОтвественногоЗаОбработкуПисьмаПоУмолчанию(УчетнаяЗапись) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаОбработкуПисем - |ИЗ - | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты - |ГДЕ - | НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = &УчетнаяЗаписьЭлектроннойПочты"; - - Запрос.УстановитьПараметр("УчетнаяЗаписьЭлектроннойПочты", УчетнаяЗапись); - - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - Возврат Справочники.Пользователи.ПустаяСсылка(); - КонецЕсли; - Выборка = Результат.Выбрать(); - - Выборка.Следующий(); - Возврат Выборка.ОтветственныйЗаОбработкуПисем; - -КонецФункции - //Выполняет отправку электронного письма // //Параметры @@ -2923,8 +2950,6 @@ // Процедура УстановитьПредметПапкуВзаимодействия(Взаимодействие,Папка = Неопределено, Предмет = Неопределено) Экспорт - УстановитьПривилегированныйРежим(Истина); - Если Папка = Неопределено И Предмет = Неопределено Тогда Возврат; @@ -3945,6 +3970,7 @@ КонецПроцедуры + // Возвращает сохраненную настройку текущего пользователя Функция ПолучитьНастройку(КлючОбъекта, КлючНастроек = Неопределено, @@ -4030,10 +4056,8 @@ // Процедура УстановитьРодителяУПапки(Папка, НовыйРодитель, НеЗаписыватьПапку = Ложь) Экспорт - УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПапкиЭлектронныхПисем.Ссылка |ИЗ | Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем @@ -4043,7 +4067,7 @@ |; | |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ + |ВЫБРАТЬ РАЗРЕШЕННЫЕ | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПапкиЭлектронныхПисем.Ссылка) КАК Ссылка |ИЗ | Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем diff --git a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl index e89127d6a..61a2a300f 100644 --- a/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияВызовСервера/Module.bsl @@ -25,7 +25,7 @@ КонецЕсли; ИмяТаблицы = Контакт.Метаданные().Имя; - ИмяПоляДляНаименованияВладельца = ПолучитьИмяПоляДляНаименованияВладельца(ИмяТаблицы); + ИмяПоляДляНаименованияВладельца = Взаимодействия.ПолучитьИмяПоляДляНаименованияВладельца(ИмяТаблицы); Запрос = Новый Запрос; Запрос.Текст = @@ -62,28 +62,6 @@ КонецПроцедуры -// Возвращает поля для получения наименования владельца, если такой имеется -// -//Параметры -// ИмяТаблицы - Строка - Имя основной таблицы, для которой формируется запрос. -// -//Возвращаемое значение: -// Строка - строка, которая будет вставлена в запрос. -// -Функция ПолучитьИмяПоляДляНаименованияВладельца(ИмяТаблицы) - - МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов(); - - Для каждого ЭлементОписанияМассива Из МассивОписанияКонтактов Цикл - Если ЭлементОписанияМассива.Имя = ИмяТаблицы И ЭлементОписанияМассива.ЕстьВладелец Тогда - Возврат "Таблица.Владелец.Наименование"; - КонецЕсли; - КонецЦикла; - - Возврат """"""; - -КонецФункции - //Получает наименование и адреса электронной почты контакта // //Параметры @@ -221,6 +199,21 @@ КонецФункции +//Выполняет отправку писем пользователя и +// получение электронной почты по доступным для пользователя учетным записям. +// +//Параметры +// Получено - Число - в данный параметр будет возвращено количество полученных писем +// ДоступноУчетныхЗаписей - Число - в данный параметр будет возвращено количество доступных пользователю учетных записей +// масОшибок - Массив - в данных массив будут помещены ошибки, если таковые возникнут. +// +Процедура ОтправитьЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки) Экспорт + + УправлениеЭлектроннойПочтой.ОтправитьПочтуПользователя(); + УправлениеЭлектроннойПочтой.ЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки) + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Прочее @@ -235,7 +228,7 @@ УстановитьПривилегированныйРежим(Истина); - МассивВзаимодействий = ПолучитьВзаимодействияИзЦепочки(Цепочка, Исключать); + МассивВзаимодействий = Взаимодействия.ПолучитьВзаимодействияИзЦепочки(Цепочка, Исключать); УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий, Предмет); @@ -273,33 +266,6 @@ КонецПроцедуры -//Получает взаимодействия из цепочки по предмету взаимодействия. -// -//Параметры -// Цепочка - Ссылка - предмет взаимодействия для которого получаются взаимодействия. -// Исключать - Ссылка - взаимодействие, которое не должно попасть в результирующий массив. -// -//Возвращаемое значение: -// Массив - найденные взаимодействия -// -Функция ПолучитьВзаимодействияИзЦепочки(Цепочка, Исключать) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ПредметыВзаимодействий.Взаимодействие КАК Ссылка - |ИЗ - | РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий - |ГДЕ - | ПредметыВзаимодействий.Предмет = &Предмет - | " + ?(Исключать = Неопределено,""," И ПредметыВзаимодействий.Взаимодействие <> &Исключать "); - - Запрос.УстановитьПараметр("Предмет", Цепочка); - Запрос.УстановитьПараметр("Исключать", Исключать); - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - -КонецФункции - // Обновляет индекс полнотекстового поиска если это доступно. // // Параметры @@ -314,7 +280,7 @@ Возврат НСтр("ru = 'Использование индекса полнотекстового поиска данных запрещено!'"); КонецЕсли; - Если Не ПолнотекстовыйПоиск.ИндексАктуален() Тогда + Если Не ПолнотекстовыйПоискСервер.ИндексПоискаАктуален() Тогда ПолнотекстовыйПоиск.ОбновитьИндекс(); КонецЕсли; Взаимодействия.ОбновитьИнформациюОбАктуальностиИндексаППД(ИнформацияОбАктуальностиИндексаППД, ППДВключен, ИндексАктуален); diff --git a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl index c3fd6777b..78389f77d 100644 --- a/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ВзаимодействияКлиентСервер/Module.bsl @@ -104,10 +104,46 @@ КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Прочее +//Функция возвращает таблицу имен кодировок +// +//Параметры +// НЕТ +// +//Возвращаемое значение: +// Таблица значений +// +Функция ПолучитьСписокКодировок() Экспорт + + СписокКодировок = Новый СписокЗначений; + + СписокКодировок.Добавить("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)"); + + Возврат СписокКодировок; + +КонецФункции + // Получает расширение для переданного имени файла. // // Параметры @@ -421,7 +457,7 @@ "Входящий", Истина, ВидСравненияКомпоновкиДанных.Равно,, Истина); Иначе - + Отбор.Элементы.Удалить(ГруппаОтбора); КонецЕсли; diff --git a/SSL/src/CommonModules/ВнешниеЗадачиВызовСервера/Module.bsl b/SSL/src/CommonModules/ВнешниеЗадачиВызовСервера/Module.bsl index 638b1ffee..8cc6beb47 100644 --- a/SSL/src/CommonModules/ВнешниеЗадачиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеЗадачиВызовСервера/Module.bsl @@ -50,7 +50,9 @@ БизнесПроцесс = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЗадачаСсылка, "БизнесПроцесс"); Если ТипЗнч(БизнесПроцесс) = Тип("БизнесПроцессСсылка.Задание") Тогда + УстановитьПривилегированныйРежим(Истина); ВнешнееЗадание = ОбщегоНазначения.ПолучитьЗначениеРеквизита(БизнесПроцесс, "ВнешнееЗадание"); + УстановитьПривилегированныйРежим(Ложь); Если ВнешнееЗадание Тогда Возврат Истина; КонецЕсли; @@ -59,7 +61,6 @@ // Проверяем роль исполнителя Роль = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЗадачаСсылка, "РольИсполнителя"); - Если Роль <> Неопределено И Роль.ВнешняяРоль = Истина Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl index 59bb5fa78..f72dcadd9 100644 --- a/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl +++ b/SSL/src/CommonModules/ВнешниеПользователи/Module.bsl @@ -18,21 +18,10 @@ КонецФункции -// Возвращает текущего внешнего пользователя, -// соответствующего пользователю информационной базы, -// который авторизовался в 1С:Предприятии 8. -// -// Если авторизованному пользователю информационной базы -// соответствует обычный пользователь, тогда возвращается пустая ссылка. -// -// Возвращаемое значение: -// СправочникСсылка.ВнешниеПользователи -// +// См. ПользователиКлиентСервер.ТекущийВнешнийПользователь(). Функция ТекущийВнешнийПользователь() Экспорт - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.ТекущийВнешнийПользователь; + Возврат ПользователиКлиентСервер.ТекущийВнешнийПользователь(); КонецФункции @@ -41,17 +30,22 @@ // для связи с внешним пользователем, например, контрагент, физическое лицо и т.д. // // Параметры -// ВнешнийПользователь - СправочникСсылка.ВнешниеПользователи +// ВнешнийПользователь - Неопределено - используется текущий внешний пользователь. +// СправочникСсылка.ВнешниеПользователи. // // Возвращаемое значение: // Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектыАвторизации.Тип // -Функция ПолучитьОбъектАвторизацииВнешнегоПользователя(ВнешнийПользователь) Экспорт +Функция ПолучитьОбъектАвторизацииВнешнегоПользователя(ВнешнийПользователь = Неопределено) Экспорт + + Если ВнешнийПользователь = Неопределено Тогда + ВнешнийПользователь = ПользователиКлиентСервер.ТекущийВнешнийПользователь(); + КонецЕсли; ОбъектАвторизации = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ВнешнийПользователь, "ОбъектАвторизации").ОбъектАвторизации; Если ЗначениеЗаполнено(ОбъектАвторизации) Тогда - Если ОбъектАвторизацииИспользуется(ОбъектАвторизации, ВнешнийПользователь) Тогда + Если ПользователиСлужебный.ОбъектАвторизацииИспользуется(ОбъектАвторизации, ВнешнийПользователь) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка в базе данных: |Объект авторизации ""%1"" (%2) @@ -69,483 +63,3 @@ Возврат ОбъектАвторизации; КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Обновляет соответствие групп внешних пользователей и внешних пользователей -// с учетом иерархии групп внешних пользователей (группа-родитель включает -// пользователей порожденных групп). -// Данные используеются в форме списка и форме выбора внешних пользователей. -// Данные могут быть использованы в целях для повышения производительности, -// так как не требуется работать с иерархией на языке запросов. -// -// Параметры: -// ГруппаВнешнихПользователей - СправочникСсылка.ГруппыВнешнихПользователей -// -Процедура ОбновитьСоставГруппВнешнихПользователей(Знач ГруппаВнешнихПользователей, ИзмененныеВнешниеПользователи = Неопределено) Экспорт - - Если НЕ ЗначениеЗаполнено(ГруппаВнешнихПользователей) Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - // Подготовка групп родителей. - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ТаблицаГруппРодителей.Родитель, - | ТаблицаГруппРодителей.Ссылка - |ПОМЕСТИТЬ ТаблицаГруппРодителей - |ИЗ - | &ТаблицаГруппРодителей КАК ТаблицаГруппРодителей"); - Запрос.УстановитьПараметр("ТаблицаГруппРодителей", Пользователи.ТаблицаГруппРодителей("Справочник.ГруппыВнешнихПользователей")); - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.Выполнить(); - - ИзмененныеВнешниеПользователи = Новый ТаблицаЗначений; - ИзмененныеВнешниеПользователи.Колонки.Добавить("ВнешнийПользователь", Новый ОписаниеТипов("СправочникСсылка.ВнешниеПользователи")); - - // Выполнение для текущий группы и каждой группы-родителя. - Пока НЕ ГруппаВнешнихПользователей.Пустая() Цикл - - Запрос.УстановитьПараметр("ГруппаВнешнихПользователей", ГруппаВнешнихПользователей); - СвойстваГруппы = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ГруппаВнешнихПользователей, "ТипОбъектовАвторизации, ВсеОбъектыАвторизации"); - ТипОбъектовАвторизации = ?(СвойстваГруппы.ВсеОбъектыАвторизации, СвойстваГруппы.ТипОбъектовАвторизации, Неопределено); - - Если ГруппаВнешнихПользователей <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи И - ТипОбъектовАвторизации = Неопределено Тогда - - // Удаление связей для удаленных пользователей. - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | СоставыГруппПользователей.Пользователь КАК ВнешнийПользователь - |ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыВнешнихПользователей.Состав КАК ГруппыВнешнихПользователейСостав - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаГруппРодителей КАК ТаблицаГруппРодителей - | ПО (ТаблицаГруппРодителей.Ссылка = ГруппыВнешнихПользователейСостав.Ссылка) - | И (ТаблицаГруппРодителей.Родитель = &ГруппаВнешнихПользователей) - | ПО (СоставыГруппПользователей.ГруппаПользователей = &ГруппаВнешнихПользователей) - | И СоставыГруппПользователей.Пользователь = ГруппыВнешнихПользователейСостав.ВнешнийПользователь - |ГДЕ - | СоставыГруппПользователей.ГруппаПользователей = &ГруппаВнешнихПользователей - | И ГруппыВнешнихПользователейСостав.Ссылка ЕСТЬ NULL "; - ВнешниеПользователиУдаленныеИзГруппы = Запрос.Выполнить().Выбрать(); - МенеджерЗаписи = РегистрыСведений.СоставыГруппПользователей.СоздатьМенеджерЗаписи(); - Пока ВнешниеПользователиУдаленныеИзГруппы.Следующий() Цикл - МенеджерЗаписи.ГруппаПользователей = ГруппаВнешнихПользователей; - МенеджерЗаписи.Пользователь = ВнешниеПользователиУдаленныеИзГруппы.ВнешнийПользователь; - МенеджерЗаписи.Удалить(); - ИзмененныеВнешниеПользователи.Добавить().ВнешнийПользователь = ВнешниеПользователиУдаленныеИзГруппы.ВнешнийПользователь; - КонецЦикла; - КонецЕсли; - - // Добавление связей для добавленных внешних пользователей. - Если ГруппаВнешнихПользователей = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда - Запрос.Текст = - "ВЫБРАТЬ - | ЗНАЧЕНИЕ(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи) КАК ГруппаПользователей, - | ВнешниеПользователи.Ссылка КАК Пользователь - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ПО (СоставыГруппПользователей.ГруппаПользователей = ЗНАЧЕНИЕ(Справочник.ГруппыВнешнихПользователей.ВсеВнешниеПользователи)) - | И (СоставыГруппПользователей.Пользователь = ВнешниеПользователи.Ссылка) - |ГДЕ - | СоставыГруппПользователей.Пользователь ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ВнешниеПользователи.Ссылка, - | ВнешниеПользователи.Ссылка - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ПО (СоставыГруппПользователей.ГруппаПользователей = ВнешниеПользователи.Ссылка) - | И (СоставыГруппПользователей.Пользователь = ВнешниеПользователи.Ссылка) - |ГДЕ - | СоставыГруппПользователей.Пользователь ЕСТЬ NULL "; - - ИначеЕсли ТипОбъектовАвторизации <> Неопределено Тогда - Запрос.УстановитьПараметр("ТипОбъектовАвторизации", ТипЗнч(ТипОбъектовАвторизации)); - Запрос.Текст = - "ВЫБРАТЬ - | &ГруппаВнешнихПользователей КАК ГруппаПользователей, - | ВнешниеПользователи.Ссылка КАК Пользователь - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ПО (СоставыГруппПользователей.ГруппаПользователей = &ГруппаВнешнихПользователей) - | И (СоставыГруппПользователей.Пользователь = ВнешниеПользователи.Ссылка) - |ГДЕ - | СоставыГруппПользователей.Пользователь ЕСТЬ NULL - | И ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации) = &ТипОбъектовАвторизации"; - Иначе - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | &ГруппаВнешнихПользователей КАК ГруппаПользователей, - | ГруппыВнешнихПользователейСостав.ВнешнийПользователь КАК Пользователь - |ИЗ - | Справочник.ГруппыВнешнихПользователей.Состав КАК ГруппыВнешнихПользователейСостав - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаГруппРодителей КАК ТаблицаГруппРодителей - | ПО (ТаблицаГруппРодителей.Ссылка = ГруппыВнешнихПользователейСостав.Ссылка) - | И (ТаблицаГруппРодителей.Родитель = &ГруппаВнешнихПользователей) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ПО (СоставыГруппПользователей.ГруппаПользователей = &ГруппаВнешнихПользователей) - | И (СоставыГруппПользователей.Пользователь = ГруппыВнешнихПользователейСостав.ВнешнийПользователь) - |ГДЕ - | СоставыГруппПользователей.Пользователь ЕСТЬ NULL "; - КонецЕсли; - - ВнешниеПользователиДобавленныеВГруппу = Запрос.Выполнить().Выгрузить(); - - Если ВнешниеПользователиДобавленныеВГруппу.Количество() > 0 Тогда - - НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); - НаборЗаписей.Загрузить(ВнешниеПользователиДобавленныеВГруппу); - НаборЗаписей.Записать(Ложь); // Добавление недостающих записей связей. - - Для каждого ОписаниеВнешнегоПользователя Из ВнешниеПользователиДобавленныеВГруппу Цикл - ИзмененныеВнешниеПользователи.Добавить().ВнешнийПользователь = ОписаниеВнешнегоПользователя.Пользователь; - КонецЦикла; - КонецЕсли; - - ГруппаВнешнихПользователей = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ГруппаВнешнихПользователей, "Родитель"); - КонецЦикла; - - ИзмененныеВнешниеПользователи.Свернуть("ВнешнийПользователь"); - ИзмененныеВнешниеПользователи = ИзмененныеВнешниеПользователи.ВыгрузитьКолонку("ВнешнийПользователь"); - -КонецПроцедуры - -// Обновляет список ролей пользователей информационной базы, которые соответствуют -// внешним пользователям. Состав ролей вычисляется исходя из вхождения внешних -// пользователей в группы внешних пользователей, кроме тех внешних пользователей, -// для которых роли установлены непосредственно. -// Требуется только при разрешении редактирования ролей, например, если -// встроена подсистема Управление доступом, то эта процедура не требуется. -// -// Параметры: -// МассивВнешнихПользователей - Массив элементов СправочникСсылка.ВнешниеПользователи. -// -Процедура ОбновитьРолиВнешнихПользователей(Знач МассивВнешнихПользователей) Экспорт - - Если ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда - // Роли устанавливаются другим механизмом, например, механизмом подсистемы УправлениеДоступом. - Возврат; - КонецЕсли; - - Если МассивВнешнихПользователей.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Пользователи.НайтиНеоднозначныхПользователейИБ(); - - ИдентификаторыПользователейИБ = Новый Соответствие; - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ВнешниеПользователи.Ссылка КАК ВнешнийПользователь, - | ВнешниеПользователи.ИдентификаторПользователяИБ - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.Ссылка В(&ВнешниеПользователи) - | И (НЕ ВнешниеПользователи.УстановитьРолиНепосредственно)"); - Запрос.УстановитьПараметр("ВнешниеПользователи", МассивВнешнихПользователей); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ИдентификаторыПользователейИБ.Вставить(Выборка.ВнешнийПользователь, Выборка.ИдентификаторПользователяИБ); - КонецЦикла; - - // Подготовка таблицы старых ролей внешних пользователей. - СтарыеРолиВнешнихПользователей = Новый ТаблицаЗначений; - СтарыеРолиВнешнихПользователей.Колонки.Добавить("ВнешнийПользователь", Новый ОписаниеТипов("СправочникСсылка.ВнешниеПользователи")); - СтарыеРолиВнешнихПользователей.Колонки.Добавить("Роль", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200))); - - ТекущийНомер = МассивВнешнихПользователей.Количество() - 1; - Пока ТекущийНомер >= 0 Цикл - // Проверка необходимости обработки пользователя. - ПользовательИБ = Неопределено; - ИдентификаторПользователяИБ = ИдентификаторыПользователейИБ[МассивВнешнихПользователей[ТекущийНомер]]; - Если ИдентификаторПользователяИБ <> Неопределено Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); - КонецЕсли; - Если ПользовательИБ = Неопределено ИЛИ ПустаяСтрока(ПользовательИБ.Имя) Тогда - МассивВнешнихПользователей.Удалить(ТекущийНомер); - Иначе - Для каждого Роль Из ПользовательИБ.Роли Цикл - СтараяРольВнешнегоПользователя = СтарыеРолиВнешнихПользователей.Добавить(); - СтараяРольВнешнегоПользователя.ВнешнийПользователь = МассивВнешнихПользователей[ТекущийНомер]; - СтараяРольВнешнегоПользователя.Роль = Роль.Имя; - КонецЦикла; - КонецЕсли; - ТекущийНомер = ТекущийНомер - 1; - КонецЦикла; - - // Подготовка списка ролей отсутствующих в метаданных и которые нужно переустановить. - Запрос.Текст = - "ВЫБРАТЬ - | СтарыеРолиВнешнихПользователей.ВнешнийПользователь, - | СтарыеРолиВнешнихПользователей.Роль - |ПОМЕСТИТЬ СтарыеРолиВнешнихПользователей - |ИЗ - | &СтарыеРолиВнешнихПользователей КАК СтарыеРолиВнешнихПользователей - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВсеДоступныеРоли.Имя - |ПОМЕСТИТЬ ВсеДоступныеРоли - |ИЗ - | &ВсеДоступныеРоли КАК ВсеДоступныеРоли - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | СоставыГруппПользователей.ГруппаПользователей КАК ГруппаВнешнихПользователей, - | СоставыГруппПользователей.Пользователь КАК ВнешнийПользователь, - | Роли.Роль - |ПОМЕСТИТЬ ВсеНовыеРолиВнешнихПользователей - |ИЗ - | Справочник.ГруппыВнешнихПользователей.Роли КАК Роли - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ПО (СоставыГруппПользователей.Пользователь В (&ВнешниеПользователи)) - | И (СоставыГруппПользователей.ГруппаПользователей = Роли.Ссылка) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВсеНовыеРолиВнешнихПользователей.ВнешнийПользователь, - | ВсеНовыеРолиВнешнихПользователей.Роль - |ПОМЕСТИТЬ НовыеРолиВнешнихПользователей - |ИЗ - | ВсеНовыеРолиВнешнихПользователей КАК ВсеНовыеРолиВнешнихПользователей - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СтарыеРолиВнешнихПользователей.ВнешнийПользователь - |ПОМЕСТИТЬ ИзмененныеВнешниеПользователи - |ИЗ - | СтарыеРолиВнешнихПользователей КАК СтарыеРолиВнешнихПользователей - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеРолиВнешнихПользователей КАК НовыеРолиВнешнихПользователей - | ПО (НовыеРолиВнешнихПользователей.ВнешнийПользователь = СтарыеРолиВнешнихПользователей.ВнешнийПользователь) - | И (НовыеРолиВнешнихПользователей.Роль = СтарыеРолиВнешнихПользователей.Роль) - |ГДЕ - | НовыеРолиВнешнихПользователей.Роль ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | НовыеРолиВнешнихПользователей.ВнешнийПользователь - |ИЗ - | НовыеРолиВнешнихПользователей КАК НовыеРолиВнешнихПользователей - | ЛЕВОЕ СОЕДИНЕНИЕ СтарыеРолиВнешнихПользователей КАК СтарыеРолиВнешнихПользователей - | ПО НовыеРолиВнешнихПользователей.ВнешнийПользователь = СтарыеРолиВнешнихПользователей.ВнешнийПользователь - | И НовыеРолиВнешнихПользователей.Роль = СтарыеРолиВнешнихПользователей.Роль - |ГДЕ - | СтарыеРолиВнешнихПользователей.Роль ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ВсеНовыеРолиВнешнихПользователей.ГруппаВнешнихПользователей, - | ВсеНовыеРолиВнешнихПользователей.ВнешнийПользователь, - | ВсеНовыеРолиВнешнихПользователей.Роль - |ИЗ - | ВсеНовыеРолиВнешнихПользователей КАК ВсеНовыеРолиВнешнихПользователей - |ГДЕ - | (НЕ ИСТИНА В - | (ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - | ИЗ - | ВсеДоступныеРоли КАК ВсеДоступныеРоли - | ГДЕ - | ВсеДоступныеРоли.Имя = ВсеНовыеРолиВнешнихПользователей.Роль))"; - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.УстановитьПараметр("ВсеДоступныеРоли", ПользователиСерверПовтИсп.ВсеРоли()); - Запрос.УстановитьПараметр("СтарыеРолиВнешнихПользователей", СтарыеРолиВнешнихПользователей); - - // Регистрация ошибок имен ролей в профилях групп доступа. - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru= 'При обновлении ролей внешнего пользователя ""<%1>"" роль ""<%2>"" группы внешних пользователей ""<%3>"" не найдена в метаданных.'"), - СокрЛП(Выборка.ВнешнийПользователь.Наименование), - Выборка.Роль, - Строка(Выборка.ГруппаВнешнихПользователей)); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Внешние пользователи.Роль не найдена в метаданных'"), - УровеньЖурналаРегистрации.Ошибка,,, ТекстСообщения, РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - КонецЦикла; - - // Обновление ролей пользователей ИБ. - Запрос.Текст = - "ВЫБРАТЬ - | ИзмененныеВнешниеПользователиИРоли.ВнешнийПользователь, - | ИзмененныеВнешниеПользователиИРоли.Роль - |ИЗ - | (ВЫБРАТЬ - | НовыеРолиВнешнихПользователей.ВнешнийПользователь КАК ВнешнийПользователь, - | НовыеРолиВнешнихПользователей.Роль КАК Роль - | ИЗ - | НовыеРолиВнешнихПользователей КАК НовыеРолиВнешнихПользователей - | ГДЕ - | НовыеРолиВнешнихПользователей.ВнешнийПользователь В - | (ВЫБРАТЬ - | ИзмененныеВнешниеПользователи.ВнешнийПользователь - | ИЗ - | ИзмененныеВнешниеПользователи КАК ИзмененныеВнешниеПользователи) - | - | ОБЪЕДИНИТЬ - | - | ВЫБРАТЬ - | ВнешниеПользователи.Ссылка, - | """" - | ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - | ГДЕ - | ВнешниеПользователи.Ссылка В - | (ВЫБРАТЬ - | ИзмененныеВнешниеПользователи.ВнешнийПользователь - | ИЗ - | ИзмененныеВнешниеПользователи КАК ИзмененныеВнешниеПользователи)) КАК ИзмененныеВнешниеПользователиИРоли - | - |УПОРЯДОЧИТЬ ПО - | ИзмененныеВнешниеПользователиИРоли.ВнешнийПользователь, - | ИзмененныеВнешниеПользователиИРоли.Роль"; - Выборка = Запрос.Выполнить().Выбрать(); - - ПользовательИБ = Неопределено; - Пока Выборка.Следующий() Цикл - Если ЗначениеЗаполнено(Выборка.Роль) Тогда - ПользовательИБ.Роли.Добавить(Метаданные.Роли[Выборка.Роль]); - Продолжить; - КонецЕсли; - Если ПользовательИБ <> Неопределено Тогда - ПользовательИБ.Записать(); - КонецЕсли; - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторыПользователейИБ[Выборка.ВнешнийПользователь]); - ПользовательИБ.Роли.Очистить(); - КонецЦикла; - Если ПользовательИБ <> Неопределено Тогда - ПользовательИБ.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Проверяет, что объект информационной базы используется в качестве объекта авторизации -// какого-нибудь внешнего пользователя, кроме заданного внешнего пользователя (если задан). -// -Функция ОбъектАвторизацииИспользуется(Знач СсылкаНаОбъектАвторизации, - Знач СсылкаНаТекущегоВнешнегоПользователя = Неопределено, - НайденныйВнешнийПользователь = Неопределено, - ЕстьПравоДобавленияВнешнегоПользователя = Ложь) Экспорт - - ЕстьПравоДобавленияВнешнегоПользователя = ПравоДоступа("Добавление", Метаданные.Справочники.ВнешниеПользователи); - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ Первые 1 - | ВнешниеПользователи.Ссылка - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.ОбъектАвторизации = &СсылкаНаОбъектАвторизации - | И ВнешниеПользователи.Ссылка <> &СсылкаНаТекущегоВнешнегоПользователя"; - Запрос.УстановитьПараметр("СсылкаНаТекущегоВнешнегоПользователя", СсылкаНаТекущегоВнешнегоПользователя); - Запрос.УстановитьПараметр("СсылкаНаОбъектАвторизации", СсылкаНаОбъектАвторизации); - - Таблица = Запрос.Выполнить().Выгрузить(); - Если Таблица.Количество() > 0 Тогда - НайденныйВнешнийПользователь = Таблица[0].Ссылка; - КонецЕсли; - - Возврат Таблица.Количество() > 0; - -КонецФункции - -// Обновляет представление внешнего пользователя при изменении представления его объекта авторизации. -Процедура ОбновитьПредставлениеВнешнегоПользователя(СсылкаНаОбъектАвторизации) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ВнешниеПользователи.Ссылка - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.ОбъектАвторизации = &СсылкаНаОбъектАвторизации - | И ВнешниеПользователи.Наименование <> &НовоеПредставлениеОбъектаАвторизации"); - Запрос.УстановитьПараметр("СсылкаНаОбъектАвторизации", СсылкаНаОбъектАвторизации); - Запрос.УстановитьПараметр("НовоеПредставлениеОбъектаАвторизации", Строка(СсылкаНаОбъектАвторизации)); - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - - ВнешнийПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ВнешнийПользовательОбъект.Наименование = Строка(СсылкаНаОбъектАвторизации); - ВнешнийПользовательОбъект.Записать(); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы - -// Обработчик обновления при переходе на версию конфигурации 1.0.6.5 -// для обновления записей регистра сведений СоставыГруппПользователей. -// -Процедура ЗаполнитьСоставГруппВнешнихПользователей() Экспорт - - ОбновитьСоставГруппВнешнихПользователей(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); - -КонецПроцедуры - -// Обработчик обновления при переходе на версию конфигурации 1.0.6.5 -// создает пользователей ИБ из данных Справочник.ВнешниеПользователи -// -Процедура ДляВнешнихПользователейСоздатьПользователейИБ() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Выборка = Справочники.ВнешниеПользователи.Выбрать(); - - Пока Выборка.Следующий() Цикл - - Если НЕ ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ) И - ЗначениеЗаполнено(Выборка.ОбъектАвторизации) И - ЗначениеЗаполнено(Выборка.Код) Тогда - - ВнешнийПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); - Попытка - ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - ПользовательИБ.Имя = Выборка.Код; - ПользовательИБ.Пароль = Выборка.УдалитьПароль; - ПользовательИБ.ПолноеИмя = Строка(Выборка.ОбъектАвторизации); - ПользовательИБ.Записать(); - ВнешнийПользовательОбъект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; - ВнешнийПользовательОбъект.Записать(); - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Внешние пользователи.Ошибка при обновлении информационной базы'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru= 'При создании пользователя информационной базы с именем ""%1"" для внешнего пользователя ""%2"" произошла ошибка: - |%3'"), - Выборка.Код, - Выборка.Наименование, - ОписаниеОшибки()), - РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); - КонецПопытки; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - diff --git a/SSL/src/CommonModules/ВнешниеПользователи/ВнешниеПользователи.mdo b/SSL/src/CommonModules/ВнешниеПользователи/ВнешниеПользователи.mdo index 69ca57404..f5dcfb523 100644 --- a/SSL/src/CommonModules/ВнешниеПользователи/ВнешниеПользователи.mdo +++ b/SSL/src/CommonModules/ВнешниеПользователи/ВнешниеПользователи.mdo @@ -6,5 +6,6 @@ Внешние пользователи true - true + true + true diff --git a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl index 4f7254cb1..e7c5ed327 100644 --- a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl +++ b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанных/Module.bsl @@ -20,6 +20,11 @@ // Функция ВыгрузитьТекущуюОбластьВАрхив(Знач БезДеленияПоФайлам = Ложь, Знач СохранятьПаролиПользователей = Ложь) Экспорт + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение(НСтр("ru = 'Нарушение прав доступа'")); + КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + КаталогВыгрузки = ПолучитьИмяВременногоФайла(); СоздатьКаталог(КаталогВыгрузки); @@ -35,12 +40,12 @@ ЗаписатьДанныеОбластиВXML(Запись, Истина); Запись.Закрыть(); Иначе - ЗаписатьДанныеВXMLСУказаниемТипов(КаталогВыгрузки, ПолучитьМассивТиповПоставляемыхСправочников()); + ЗаписатьДанныеВXMLСУказаниемТипов(КаталогВыгрузки, ПолучитьМассивТиповТребующихПодменыСсылок()); КонецЕсли; ЗаписатьПользователейВXML(КаталогВыгрузки, СохранятьПаролиПользователей); - ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередЗавершениемВыгрузки(КаталогВыгрузки); + ПередЗавершениемВыгрузки(КаталогВыгрузки); ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); @@ -161,7 +166,7 @@ МенеджерЗначения = Константы[МетаданныеКонстанты.Имя].СоздатьМенеджерЗначения(); МенеджерЗначения.Прочитать(); Попытка - ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(МенеджерЗначения); + СтандартныеПодсистемыПереопределяемый.ПередВыгрузкойДанных(МенеджерЗначения); ЗаписатьXML(Запись, МенеджерЗначения); Исключение ВызватьИсключениеСУточняющимТекстом(Константы[МетаданныеКонстанты.Имя], ИнформацияОбОшибке()); @@ -192,7 +197,7 @@ НаборЗаписей = МенеджерТипа.СоздатьНаборЗаписей(); НаборЗаписей.Прочитать(); Попытка - ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(НаборЗаписей); + СтандартныеПодсистемыПереопределяемый.ПередВыгрузкойДанных(НаборЗаписей); ЗаписатьXML(Запись, НаборЗаписей); Исключение ВызватьИсключениеСУточняющимТекстом(МенеджерТипа, ИнформацияОбОшибке()); @@ -236,7 +241,7 @@ Пока Выборка.Следующий() Цикл Объект = Выборка.Ссылка.ПолучитьОбъект(); Попытка - ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(Объект); + СтандартныеПодсистемыПереопределяемый.ПередВыгрузкойДанных(Объект); ЗаписатьXML(Запись, Объект); Исключение ВызватьИсключениеСУточняющимТекстом(ПолноеИмяОбъектаМД, ИнформацияОбОшибке(), "Ссылка: " + Выборка.Ссылка); @@ -289,7 +294,7 @@ НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор); НаборЗаписей.Прочитать(); Попытка - ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(НаборЗаписей); + СтандартныеПодсистемыПереопределяемый.ПередВыгрузкойДанных(НаборЗаписей); ЗаписатьXML(Запись, НаборЗаписей); Исключение ВызватьИсключениеСУточняющимТекстом(МенеджерТипа, ИнформацияОбОшибке(), "Регистратор: " + Выборка.Регистратор); @@ -569,7 +574,7 @@ Иначе ИнформацияОВыгрузке.Type = "BoxToService"; КонецЕсли; - ИнформацияОВыгрузке.Created = ТекущаяДата(); + ИнформацияОВыгрузке.Created = ТекущаяДатаСеанса(); ИнформацияОКонфигурации = ФабрикаXDTO.Создать(ТипConfigurationInfo); ИнформацияОКонфигурации.Name = Метаданные.Имя; @@ -586,6 +591,16 @@ КонецПроцедуры +Функция ПолучитьМассивТиповТребующихПодменыСсылок() + + Типы = ПолучитьМассивТиповПоставляемыхСправочников(); + + Типы.Добавить(Тип("СправочникСсылка.ИдентификаторыОбъектовМетаданных")); + + Возврат Типы; + +КонецФункции + Функция ПолучитьМассивТиповПоставляемыхСправочников() Типы = Новый Массив; @@ -671,7 +686,7 @@ ПараметрыЗаписи.РазмерЧасти = ПараметрыЗаписи.РазмерЧасти + Размер; - ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередВыгрузкойДанных(Значение); + СтандартныеПодсистемыПереопределяемый.ПередВыгрузкойДанных(Значение); Сериализатор.ЗаписатьXML(ПараметрыЗаписи.Запись, Значение); КонецПроцедуры @@ -970,8 +985,8 @@ СтрокаСловаря.ОбратноеСоответствие.Вставить(ПустойУИД, ПустойУИД); Для каждого КлючИЗначение Из СтрокаСловаря.СоответствиеСсылок Цикл - ИсходнаяСсылкаXML = СериализаторXDTO.XMLСтрока(КлючИЗначение.Значение.УникальныйИдентификатор()); - НайденнаяСсылкаXML = СериализаторXDTO.XMLСтрока(КлючИЗначение.Ключ.УникальныйИдентификатор()); + ИсходнаяСсылкаXML = СериализаторXDTO.XMLСтрока(КлючИЗначение.Значение); + НайденнаяСсылкаXML = СериализаторXDTO.XMLСтрока(КлючИЗначение.Ключ); СтрокаСловаря.ОбратноеСоответствие.Вставить(ИсходнаяСсылкаXML, НайденнаяСсылкаXML); КонецЦикла; @@ -984,7 +999,7 @@ СловарьЗамен = ПодготовитьСловарьЗамен(); ФрагментСловаряЗамен = ПодготовитьФрагментСловаряЗамен(); - ВыгрузкаЗагрузкаДанныхПереопределяемый.ДополнитьСловарьЗаменПоКаталогуВыгрузки(ФрагментСловаряЗамен, КаталогВыгрузки); + ДополнитьСловарьЗаменПоКаталогуВыгрузки(ФрагментСловаряЗамен, КаталогВыгрузки); ДобавитьФрагментВСловарьЗамен(СловарьЗамен, ФрагментСловаряЗамен); ПустойУИД = СериализаторXDTO.XMLСтрока(Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); @@ -1376,7 +1391,7 @@ Если НЕ ЭтоПланОбмена Тогда Данные.ОбменДанными.Загрузка = Истина; КонецЕсли; - ВыгрузкаЗагрузкаДанныхПереопределяемый.ПередЗагрузкойДанных(Данные); + СтандартныеПодсистемыПереопределяемый.ПередЗагрузкойДанных(Данные); Данные.Записать(); КонецЦикла; КонецЦикла; @@ -1442,12 +1457,12 @@ Функция ЗаписатьПользователяВXDTO(Знач Пользователь, Знач СохранятьПароль = Ложь, Знач СохранятьРазделение = Ложь) ТипInfoBaseUser = ФабрикаXDTO.Тип("http://v8.1c.ru/misc/datadump", "InfoBaseUser"); - ТипUserRoles = ФабрикаXDTO.Тип("http://v8.1c.ru/misc/datadump", "UserRoles"); + ТипUserRoles = ФабрикаXDTO.Тип("http://v8.1c.ru/misc/datadump", "UserRoles"); ПользовательXDTO = ФабрикаXDTO.Создать(ТипInfoBaseUser); ПользовательXDTO.OSAuthentication = Пользователь.АутентификацияОС; ПользовательXDTO.StandardAuthentication = Пользователь.АутентификацияСтандартная; - ПользовательXDTO.CannotChangePassword = Пользователь.ЗапрещеноИзменятьПароль; + ПользовательXDTO.CannotChangePassword = Пользователь.ЗапрещеноИзменятьПароль; ПользовательXDTO.Name = Пользователь.Имя; Если Пользователь.ОсновнойИнтерфейс <> Неопределено Тогда ПользовательXDTO.DefaultInterface = Пользователь.ОсновнойИнтерфейс.Имя; @@ -1583,6 +1598,10 @@ Пользователь = ОбновитьПользователяИзXDTO(ПользовательXDTO); + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Пользователь.ПоказыватьВСпискеВыбора = Истина; + КонецЕсли; + ОбработатьРолиПользователяПриЗагрузкиИзДругойМодели(Пользователь); СтрокаПользователя = ТаблицаПользователей.Добавить(); @@ -1602,7 +1621,7 @@ Иначе Для каждого СтрокаПользователя Из ТаблицаПользователей Цикл - Пользователи.ЗаписатьПользователяИнформационнойБазы(СтрокаПользователя.Пользователь); + ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(СтрокаПользователя.Пользователь); СоответствиеИдентификаторов.Вставить(СтрокаПользователя.ПользовательXDTO.UUID, СтрокаПользователя.Пользователь.УникальныйИдентификатор); КонецЦикла; @@ -1616,16 +1635,17 @@ Процедура ОбработатьРолиПользователяПриЗагрузкиИзДругойМодели(Пользователь) Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - // Удалим недоступные роли - НедоступныеРоли = - ПользователиСерверПовтИсп.НедоступныеРолиПоТипуПользователя(Перечисления.ТипыПользователей.ПользовательОбластиДанных); + // Удаление недоступных ролей. + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРолиПоТипуПользователя( + Перечисления.ТипыПользователей.ПользовательОбластиДанных); + Для каждого Роль Из НедоступныеРоли Цикл Если Пользователь.Роли.Содержит(Роль) Тогда Пользователь.Роли.Удалить(Роль); КонецЕсли; КонецЦикла; Иначе - // Добавим АдминистраторСистемы к роли ПолныеПрава + // Добавление роли АдминистраторСистемы пользователю с ролью ПолныеПрава. Если Пользователь.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда Пользователь.Роли.Добавить(Метаданные.Роли.АдминистраторСистемы); КонецЕсли; @@ -1654,6 +1674,7 @@ Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ПользовательОбъект.ОбменДанными.Загрузка = Истина; ПользовательОбъект.ИдентификаторПользователяСервиса = Неопределено; ПользовательОбъект.ИдентификаторПользователяИБ = СоответствиеИдентификаторов.Получить(Выборка.ИдентификаторПользователяИБ); ПользовательОбъект.Записать(); @@ -1675,3 +1696,32 @@ ВызватьИсключение(ТекстОшибки); КонецПроцедуры + +// Обработчик, вызываемый перед завершением выгрузки данных области. +// +// Параметры: +// КаталогВыгрузки - Строка - каталог с подготовленными файлами выгрузки. +// При окончании выгрузки все файлы из этого каталога попадут в +// результирующий архив. +// +Процедура ПередЗавершениемВыгрузки(Знач КаталогВыгрузки) + + Справочники.ИдентификаторыОбъектовМетаданных.ВыгрузитьДанныеСправочника(КаталогВыгрузки); + +КонецПроцедуры + +// Обработчик, вызываемый перед стандартным формированием словаря замен +// +// Параметры +// СловарьЗамен - таблица значений, колонки: +// Тип - Тип - Тип значения заменяемой ссылки +// СоответствиеСсылок - Соответствие - соответствие новой ссылки исходной +// Ключ - Новая ссылка (на которую требуется заменить) +// Значение - Исходная ссылка (требующая замены) +// КаталогВыгрузки - Строка - имя каталога с файлами выгрузки +// +Процедура ДополнитьСловарьЗаменПоКаталогуВыгрузки(Знач СловарьЗамен, Знач КаталогВыгрузки) + + Справочники.ИдентификаторыОбъектовМетаданных.ДополнитьСловарьЗаменСсылокИдентификаторовТекущихИЗагружаемыхДанных(СловарьЗамен, КаталогВыгрузки); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/Module.bsl b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/Module.bsl index 96a001ebe..5d4c41924 100644 --- a/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ВыгрузкаЗагрузкаДанныхПереопределяемый/Module.bsl @@ -6,63 +6,6 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Обработчик, вызываемый для данных перед их записью в файл при выгрузке областей. -// -// Параметры: -// ЭлементДанных - КонстантаМенеджер.<Имя>; СправочникОбъект.<Имя>; Регистр<Вид>НаборЗаписей.<Имя>. -// -Процедура ПередВыгрузкойДанных(ЭлементДанных) Экспорт - - // СтандартныеПодсистемы.ФайловыеФункции - ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; - ОбменФайламиСобытия.ПриОтправкеДанныхФайла(ЭлементДанных, ОтправкаЭлемента, Ложь); - // Конец СтандартныеПодсистемы.ФайловыеФункции - -КонецПроцедуры - -// Обработчик, вызываемый для считанных из файла данных перед их записью в ИБ при загрузке областей. -// -// Параметры: -// ЭлементДанных - КонстантаМенеджер.<Имя>; СправочникОбъект.<Имя>; Регистр<Вид>НаборЗаписей.<Имя>. -// -Процедура ПередЗагрузкойДанных(ЭлементДанных) Экспорт - - // СтандартныеПодсистемы.ФайловыеФункции - ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; - ОбменФайламиСобытия.ПриПолученииДанныхФайла(ЭлементДанных, ПолучениеЭлемента); - // Конец СтандартныеПодсистемы.ФайловыеФункции - -КонецПроцедуры - -// Обработчик, вызываемый перед завершением выгрузки данных области. -// -// Параметры: -// КаталогВыгрузки - Строка - каталог с подготовленными файлами выгрузки. -// При окончании выгрузки все файлы из этого каталога попадут в -// результирующий архив. -// -Процедура ПередЗавершениемВыгрузки(Знач КаталогВыгрузки) Экспорт - - Справочники.ИдентификаторыОбъектовМетаданных.ВыгрузитьДанныеСправочника(КаталогВыгрузки); - -КонецПроцедуры - -// Обработчик, вызываемый перед стандартным формированием словаря замен -// -// Параметры -// СловарьЗамен - таблица значений, колонки: -// Тип - Тип - Тип значения заменяемой ссылки -// СоответствиеСсылок - Соответствие - соответствие новой ссылки исходной -// Ключ - Новая ссылка (на которую требуется заменить) -// Значение - Исходная ссылка (требующая замены) -// КаталогВыгрузки - Строка - имя каталога с файлами выгрузки -// -Процедура ДополнитьСловарьЗаменПоКаталогуВыгрузки(Знач СловарьЗамен, Знач КаталогВыгрузки) Экспорт - - Справочники.ИдентификаторыОбъектовМетаданных.ДополнитьСловарьЗаменСсылокИдентификаторовТекущихИЗагружаемыхДанных(СловарьЗамен, КаталогВыгрузки); - -КонецПроцедуры - // Обработчик, вызываемый при окончании стандартного формирования словаря замен // по очередному файлу общих данных. // diff --git a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl index 4fa8eb738..4e696ccd6 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзменения/Module.bsl @@ -9,18 +9,18 @@ // Проверяет наличие запрета изменения элемента данных. // Для работы функции требуется настройка процедуры // ДанныеДляПроверкиЗапретаИзменения() -// модуля ДатыЗапретаИзмененияПереопределяемый +// модуля ДатыЗапретаИзмененияПереопределяемый. // // Если Данные - полное имя объекта метаданных, // тогда данные для проверки будут получены -// из базы данных через ИдентификаторДанных +// из базы данных через ИдентификаторДанных. // Если Данные - объект, тогда данные для проверки // будут получены из экземпляра объекта или -// набора записей +// набора записей. // Если Данные - объект и задан ИдентификаторДанных, // тогда будут выполнены две проверки, причем // данные будут получены и из объекта/набора записей, -// и из базы данных через ИдентификаторДанных +// и из базы данных через ИдентификаторДанных. // // Параметры: // Данные - Строка (полное имя объекта метаданных), @@ -35,7 +35,7 @@ // РегистрСведенийНаборЗаписей.<Имя>, // РегистрНакопленияНаборЗаписей.<Имя>, // РегистрБухгалтерииНаборЗаписей.<Имя>, -// РегистрРасчетаНаборЗаписей.<Имя>, +// РегистрРасчетаНаборЗаписей.<Имя>. // // ИдентификаторДанных - СправочникСсылка.<Имя>, // ДокументСсылка.<Имя>, @@ -48,7 +48,7 @@ // РегистрСведенийНаборЗаписей.<Имя>.Отбор, // РегистрНакопленияНаборЗаписей.<Имя>.Отбор, // РегистрБухгалтерииНаборЗаписей.<Имя>.Отбор, -// РегистрРасчетаНаборЗаписей.<Имя>.Отбор, +// РегистрРасчетаНаборЗаписей.<Имя>.Отбор. // // СообщитьОЗапрете - Булево, если Истина, будет выведено сообщение пользователю // о запрете изменения данных. @@ -62,7 +62,12 @@ // Возвращаемое значение: // Булево. // -Функция ИзменениеЗапрещено(Знач Данные, Знач ИдентификаторДанных = Неопределено, Знач СообщитьОЗапрете = Истина, Знач СтандартнаяОбработка = Истина, Знач УзелПланаОбмена = Неопределено, НайденныеЗапреты = Неопределено) Экспорт +Функция ИзменениеЗапрещено(Знач Данные, + Знач ИдентификаторДанных = Неопределено, + Знач СообщитьОЗапрете = Истина, + Знач СтандартнаяОбработка = Истина, + Знач УзелПланаОбмена = Неопределено, + НайденныеЗапреты = Неопределено) Экспорт ДанныеДляПроверки = Новый Структура; ДанныеДляПроверки.Вставить("Таблица", Данные); @@ -75,7 +80,8 @@ КонецЕсли; НайденныеЗапреты = Неопределено; - ЗапретНайден = НайденЗапретИзмененияДанных(ДанныеДляПроверки, СообщитьОЗапрете, , СтандартнаяОбработка, УзелПланаОбмена, НайденныеЗапреты); + ЗапретНайден = НайденЗапретИзмененияДанных( + ДанныеДляПроверки, СообщитьОЗапрете, , СтандартнаяОбработка, УзелПланаОбмена, НайденныеЗапреты); Если ЗапретНайден И ТипЗнч(Данные) <> Тип("Строка") Тогда Для каждого КлючИЗначение Из НайденныеЗапреты Цикл @@ -106,7 +112,7 @@ // РегистрСведенийНаборЗаписей.Отбор, // РегистрНакопленияНаборЗаписей.Отбор, // РегистрБухгалтерииНаборЗаписей.Отбор, -// РегистрРасчетаНаборЗаписей.Отбор, +// РегистрРасчетаНаборЗаписей.Отбор. // Функция ОбъектПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт @@ -114,7 +120,7 @@ ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); Если ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда - // Приведение менеджера записи к набору записей с одной записью + // Приведение менеджера записи к набору записей с одной записью. МенеджерДанных = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ПолноеИмя); Источник = МенеджерДанных.СоздатьНаборЗаписей(); Для каждого ЭлементОтбора Из Источник.Отбор Цикл @@ -131,23 +137,31 @@ УзелПланаОбмена = Неопределено; СообщитьОЗапрете = Ложь; - Если ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда + Если ПропуститьПроверкуЗапретаИзменения( + Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда + Возврат Истина; КонецЕсли; - Если ИзменениеЗапрещено(ПолноеИмя, ИдентификаторДанных, СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Если ИзменениеЗапрещено( + ПолноеИмя, + ИдентификаторДанных, + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Форма.ТолькоПросмотр = Истина; КонецЕсли; КонецФункции -// Добавляет строку описание источников данных для проверки запрета изменения +// Добавляет строку описание источников данных для проверки запрета изменения. // // Параметры: -// Таблица - Строка -// ПолеДаты - Строка -// Раздел - Строка -// ПолеОбъекта - Строка +// Таблица - Строка. +// ПолеДаты - Строка. +// Раздел - Строка. +// ПолеОбъекта - Строка. // Процедура ДобавитьСтроку(Данные, Таблица, ПолеДаты, Раздел = "", ПолеОбъекта = "") Экспорт @@ -160,17 +174,17 @@ КонецПроцедуры // Выполняет поиск дат запрета по проверяемым данным -// для авторизованного пользователя и/или узла плана обмена +// для авторизованного пользователя и/или узла плана обмена. // // Параметры: // ДанныеДляПроверки - таблица, возвращаемая функцией -// ДатыЗапретаИзменения.ШаблонДанныхДляПроверки() +// ДатыЗапретаИзменения.ШаблонДанныхДляПроверки(). // // СообщитьОЗапрете - Булево, выводит сообщение о найденных запретах -// при проверке данных +// при проверке данных. // // ИдентификаторДанных - Ссылка на объект данных для получения представления, -// используемого в сообщении о запрете +// используемого в сообщении о запрете. // // СтандартнаяОбработка - Булево, если Ложь, проверка запрета изменения (для пользователей) // будет пропущена. @@ -180,12 +194,17 @@ // // НайденныеЗапреты - Структура. Если найден запрет изменения данных, значит есть // свойство НайденЗапретИзмененияДанных, если найден запрет -// загрузки данных, значит есть свойство НайденЗапретЗагрузкиДанных +// загрузки данных, значит есть свойство НайденЗапретЗагрузкиДанных. // // Возвращаемое значение: // Булево // -Функция НайденЗапретИзмененияДанных(Знач ДанныеДляПроверки, Знач СообщитьОЗапрете, Знач ИдентификаторДанных = Неопределено, Знач СтандартнаяОбработка = Истина, Знач УзелПланаОбмена = Неопределено, НайденныеЗапреты = Неопределено) Экспорт +Функция НайденЗапретИзмененияДанных(Знач ДанныеДляПроверки, + Знач СообщитьОЗапрете, + Знач ИдентификаторДанных = Неопределено, + Знач СтандартнаяОбработка = Истина, + Знач УзелПланаОбмена = Неопределено, + НайденныеЗапреты = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -201,16 +220,16 @@ КонецЕсли; КонецЕсли; - // Приведение пустых ссылок объектов к единому значению Неопределено + // Приведение пустых ссылок объектов к единому значению Неопределено. Для каждого Строка Из ДанныеДляПроверки Цикл Если НЕ ЗначениеЗаполнено(Строка.Объект) Тогда Строка.Объект = Неопределено; КонецЕсли; КонецЦикла; - // Свертка лишних строк, чтобы сократить число проверок и сообщений + // Свертка лишних строк, чтобы сократить число проверок и сообщений. ДанныеДляПроверки.Свернуть("Дата, Раздел, Объект"); - // Назначение ключей для отдельных проверок + // Назначение ключей для отдельных проверок. ДанныеДляПроверки.Колонки.Добавить("КлючСтроки", Новый ОписаниеТипов("Число")); ТекущийКлючСтроки = 0; Для каждого Строка Из ДанныеДляПроверки Цикл @@ -220,91 +239,123 @@ СвойстваВстраивания = ДатыЗапретаИзмененияПовтИсп.СвойстваРазделов(); - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ДанныеДляПроверки", ДанныеДляПроверки); - Запрос.УстановитьПараметр("БезРазделовИОбъектов", СвойстваВстраивания.БезРазделовИОбъектов); - Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", СвойстваВстраивания.ВсеРазделыБезОбъектов); - Запрос.УстановитьПараметр("ЕдинственныйРаздел", СвойстваВстраивания.ЕдинственныйРаздел); - Запрос.УстановитьПараметр("ПервыйРаздел", ?(СвойстваВстраивания.ЕдинственныйРаздел, - СвойстваВстраивания.ТипыОбъектовРазделов[0].Раздел, - Неопределено)); - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.Текст = - "ВЫБРАТЬ - | ДанныеДляПроверки.Раздел, - | ДанныеДляПроверки.Объект, - | ДанныеДляПроверки.Дата, - | ДанныеДляПроверки.КлючСтроки - |ПОМЕСТИТЬ НачальныеДанные - |ИЗ - | &ДанныеДляПроверки КАК ДанныеДляПроверки - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | Данные.Раздел, - | Данные.Объект, - | МИНИМУМ(Данные.Дата) КАК Дата, - | МИНИМУМ(Данные.КлючСтроки) КАК КлючСтроки - |ПОМЕСТИТЬ ДанныеДляПроверки - |ИЗ - | (ВЫБРАТЬ - | ВЫБОР - | КОГДА &БезРазделовИОбъектов - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | КОГДА &ЕдинственныйРаздел - | ТОГДА &ПервыйРаздел - | ИНАЧЕ НачальныеДанные.Раздел - | КОНЕЦ КАК Раздел, - | ВЫБОР - | КОГДА &БезРазделовИОбъектов - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | ИНАЧЕ ВЫБОР - | КОГДА &ВсеРазделыБезОбъектов - | ИЛИ НачальныеДанные.Объект = НЕОПРЕДЕЛЕНО - | ТОГДА ВЫБОР - | КОГДА &ЕдинственныйРаздел - | ТОГДА &ПервыйРаздел - | ИНАЧЕ НачальныеДанные.Раздел - | КОНЕЦ - | ИНАЧЕ НачальныеДанные.Объект - | КОНЕЦ - | КОНЕЦ КАК Объект, - | НачальныеДанные.Дата КАК Дата, - | НачальныеДанные.КлючСтроки КАК КлючСтроки - | ИЗ - | НачальныеДанные КАК НачальныеДанные) КАК Данные - | - |СГРУППИРОВАТЬ ПО - | Данные.Раздел, - | Данные.Объект - | - |ИМЕЮЩИЕ - | (НЕ(Данные.Объект <> Данные.Раздел - | И ТИПЗНАЧЕНИЯ(Данные.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения))) И - | (НЕ(Данные.Объект <> Данные.Раздел - | И Данные.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)))"; - Запрос.Выполнить(); - - НайденныеЗапреты = Новый Структура; - Запрос.УстановитьПараметр("ПустыеСсылкиУзловПлановОбмена", СвойстваВстраивания.ПустыеСсылкиУзловПлановОбмена); - Сообщение = ""; - - Если СтандартнаяОбработка Тогда - Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); - Запрос.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); - Если НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, СообщитьОЗапрете, ИдентификаторДанных, ТаблицаДанных, СвойстваВстраивания, Ложь, Сообщение) Тогда - НайденныеЗапреты.Вставить("НайденЗапретИзмененияДанных", Сообщение); + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ДанныеДляПроверки", ДанныеДляПроверки); + Запрос.УстановитьПараметр("БезРазделовИОбъектов", СвойстваВстраивания.БезРазделовИОбъектов); + Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", СвойстваВстраивания.ВсеРазделыБезОбъектов); + Запрос.УстановитьПараметр("ЕдинственныйРаздел", СвойстваВстраивания.ЕдинственныйРаздел); + Запрос.УстановитьПараметр("ПервыйРаздел", ?(СвойстваВстраивания.ЕдинственныйРаздел, + СвойстваВстраивания.ТипыОбъектовРазделов[0].Раздел, + Неопределено)); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.Текст = + "ВЫБРАТЬ + | ДанныеДляПроверки.Раздел, + | ДанныеДляПроверки.Объект, + | ДанныеДляПроверки.Дата, + | ДанныеДляПроверки.КлючСтроки + |ПОМЕСТИТЬ НачальныеДанные + |ИЗ + | &ДанныеДляПроверки КАК ДанныеДляПроверки + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Данные.Раздел, + | Данные.Объект, + | МИНИМУМ(Данные.Дата) КАК Дата, + | МИНИМУМ(Данные.КлючСтроки) КАК КлючСтроки + |ПОМЕСТИТЬ ДанныеДляПроверки + |ИЗ + | (ВЫБРАТЬ + | ВЫБОР + | КОГДА &БезРазделовИОбъектов + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | КОГДА &ЕдинственныйРаздел + | ТОГДА &ПервыйРаздел + | ИНАЧЕ НачальныеДанные.Раздел + | КОНЕЦ КАК Раздел, + | ВЫБОР + | КОГДА &БезРазделовИОбъектов + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | ИНАЧЕ ВЫБОР + | КОГДА &ВсеРазделыБезОбъектов + | ИЛИ НачальныеДанные.Объект = НЕОПРЕДЕЛЕНО + | ТОГДА ВЫБОР + | КОГДА &ЕдинственныйРаздел + | ТОГДА &ПервыйРаздел + | ИНАЧЕ НачальныеДанные.Раздел + | КОНЕЦ + | ИНАЧЕ НачальныеДанные.Объект + | КОНЕЦ + | КОНЕЦ КАК Объект, + | НачальныеДанные.Дата КАК Дата, + | НачальныеДанные.КлючСтроки КАК КлючСтроки + | ИЗ + | НачальныеДанные КАК НачальныеДанные) КАК Данные + | + |СГРУППИРОВАТЬ ПО + | Данные.Раздел, + | Данные.Объект + | + |ИМЕЮЩИЕ + | (НЕ(Данные.Объект <> Данные.Раздел + | И ТИПЗНАЧЕНИЯ(Данные.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения))) И + | (НЕ(Данные.Объект <> Данные.Раздел + | И Данные.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)))"; + Запрос.Выполнить(); + + НайденныеЗапреты = Новый Структура; + Запрос.УстановитьПараметр("ПустыеСсылкиУзловПлановОбмена", СвойстваВстраивания.ПустыеСсылкиУзловПлановОбмена); + Сообщение = ""; + + Если СтандартнаяОбработка Тогда + + Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", + Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей); + + Запрос.УстановитьПараметр("Пользователь", Пользователи.АвторизованныйПользователь()); + + Если НайденЗапретИзмененияИлиЗагрузкиДанных( + Запрос, + СообщитьОЗапрете, + ИдентификаторДанных, + ТаблицаДанных, + СвойстваВстраивания, + Ложь, + Сообщение) Тогда + + НайденныеЗапреты.Вставить("НайденЗапретИзмененияДанных", Сообщение); + КонецЕсли; КонецЕсли; - КонецЕсли; - - Если УзелПланаОбмена <> Неопределено Тогда - Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", Перечисления.ВидыНазначенияДатЗапрета.ДляВсехУзловПлановОбмена); - Запрос.УстановитьПараметр("Пользователь", УзелПланаОбмена); - Если НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, СообщитьОЗапрете, ИдентификаторДанных, ТаблицаДанных, СвойстваВстраивания, Истина, Сообщение) Тогда - НайденныеЗапреты.Вставить("НайденЗапретЗагрузкиДанных", Сообщение); + + Если УзелПланаОбмена <> Неопределено Тогда + + Запрос.УстановитьПараметр("ВидНазначенияДатЗапретаДляВсех", + Перечисления.ВидыНазначенияДатЗапрета.ДляВсехУзловПлановОбмена); + + Запрос.УстановитьПараметр("Пользователь", УзелПланаОбмена); + + Если НайденЗапретИзмененияИлиЗагрузкиДанных( + Запрос, + СообщитьОЗапрете, + ИдентификаторДанных, + ТаблицаДанных, + СвойстваВстраивания, + Истина, + Сообщение) Тогда + + НайденныеЗапреты.Вставить("НайденЗапретЗагрузкиДанных", Сообщение); + КонецЕсли; КонецЕсли; - КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Возврат НайденныеЗапреты.Количество() > 0; @@ -312,7 +363,7 @@ // Возвращает готовую пустую таблицу значений (с колонками Дата, Раздел, Объект) // для заполнения и последующей передачи в функцию -// ДатыЗапретаИзменения.НайденЗапретИзмененияДанных() +// ДатыЗапретаИзменения.НайденЗапретИзмененияДанных(). // Функция ШаблонДанныхДляПроверки() Экспорт @@ -324,53 +375,92 @@ // Обработчики подписок на события // Обработчик подписки на событие ПередЗаписью для типов: -// СправочникОбъект -// ПланВидовХарактеристикОбъект -// ПланСчетовОбъект -// ПланВидовРасчетаОбъект -// БизнесПроцессОбъект -// ЗадачаОбъект -// ПланОбменаОбъект +// СправочникОбъект, +// ПланВидовХарактеристикОбъект, +// ПланСчетовОбъект, +// ПланВидовРасчетаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект, +// ПланОбменаОбъект. // Процедура ПроверитьДатуЗапретаИзмененияПередЗаписью(Источник, Отказ) Экспорт СтандартнаяОбработка = Истина; УзелПланаОбмена = Неопределено; СообщитьОЗапрете = Истина; - // - Если ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда + + Если ПропуститьПроверкуЗапретаИзменения( + Источник, + СтандартнаяОбработка, + УзелПланаОбмена, + СообщитьОЗапрете) Тогда + Возврат; КонецЕсли; Если Источник.ЭтоНовый() Тогда - Если ИзменениеЗапрещено(Источник, , СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + + Если ИзменениеЗапрещено( + Источник, + , + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; Иначе - Если ИзменениеЗапрещено(Источник, Источник.Ссылка, СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Если ИзменениеЗапрещено( + Источник, + Источник.Ссылка, + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; КонецЕсли; КонецПроцедуры -// Обработчик подписки на событие ПередЗаписью для типа ДокументОбъект -Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт +// Обработчик подписки на событие ПередЗаписью для типа ДокументОбъект. +Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента( + Источник, + Отказ, + РежимЗаписи, + РежимПроведения) Экспорт СтандартнаяОбработка = Истина; УзелПланаОбмена = Неопределено; СообщитьОЗапрете = Истина; - // - Если ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда + + Если ПропуститьПроверкуЗапретаИзменения( + Источник, + СтандартнаяОбработка, + УзелПланаОбмена, + СообщитьОЗапрете) Тогда Возврат; КонецЕсли; Если Источник.ЭтоНовый() Тогда - Если ИзменениеЗапрещено(Источник, , СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + + Если ИзменениеЗапрещено( + Источник, + , + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; Иначе - Если ИзменениеЗапрещено(Источник, Источник.Ссылка, СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Если ИзменениеЗапрещено( + Источник, + Источник.Ссылка, + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; КонецЕсли; @@ -378,65 +468,115 @@ КонецПроцедуры // Обработчик подписки на событие ПередЗаписью для типов: -// РегистрСведенийНаборЗаписей -// РегистрНакопленияНаборЗаписей +// РегистрСведенийНаборЗаписей, +// РегистрНакопленияНаборЗаписей. // Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписей(Источник, Отказ, Замещение) Экспорт СтандартнаяОбработка = Истина; УзелПланаОбмена = Неопределено; СообщитьОЗапрете = Истина; - // - Если ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда + + Если ПропуститьПроверкуЗапретаИзменения( + Источник, + СтандартнаяОбработка, + УзелПланаОбмена, + СообщитьОЗапрете) Тогда + Возврат; КонецЕсли; Если Замещение Тогда - Если ИзменениеЗапрещено(Источник, Источник.Отбор, СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Если ИзменениеЗапрещено( + Источник, + Источник.Отбор, + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; Иначе - Если ИзменениеЗапрещено(Источник, , СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Если ИзменениеЗапрещено( + Источник, + , + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; КонецЕсли; КонецПроцедуры -// Обработчик подписки на событие ПередЗаписью для типа РегистрБухгалтерииНаборЗаписей -Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраБухгалтерии(Источник, Отказ, РежимЗаписи) Экспорт +// Обработчик подписки на событие ПередЗаписью для типа РегистрБухгалтерииНаборЗаписей. +Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраБухгалтерии( + Источник, + Отказ, + РежимЗаписи) Экспорт СтандартнаяОбработка = Истина; УзелПланаОбмена = Неопределено; СообщитьОЗапрете = Истина; - // - Если ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда + + Если ПропуститьПроверкуЗапретаИзменения( + Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда Возврат; КонецЕсли; - Если ИзменениеЗапрещено(Источник, Источник.Отбор, СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Если ИзменениеЗапрещено( + Источник, + Источник.Отбор, + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; КонецПроцедуры -// Обработчик подписки на событие ПередЗаписью для типа РегистрРасчетаНаборЗаписей -Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраРасчета(Источник, Отказ, Замещение, ТолькоЗапись, ЗаписьФактическогоПериодаДействия, ЗаписьПерерасчетов) Экспорт +// Обработчик подписки на событие ПередЗаписью для типа РегистрРасчетаНаборЗаписей. +Процедура ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраРасчета( + Источник, + Отказ, + Замещение, + ТолькоЗапись, + ЗаписьФактическогоПериодаДействия, + ЗаписьПерерасчетов) Экспорт СтандартнаяОбработка = Истина; УзелПланаОбмена = Неопределено; СообщитьОЗапрете = Истина; - // - Если ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда + + Если ПропуститьПроверкуЗапретаИзменения( + Источник, + СтандартнаяОбработка, + УзелПланаОбмена, + СообщитьОЗапрете) Тогда + Возврат; КонецЕсли; Если Замещение Тогда - Если ИзменениеЗапрещено(Источник, Источник.Отбор, СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Если ИзменениеЗапрещено( + Источник, + Источник.Отбор, + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; Иначе - Если ИзменениеЗапрещено(Источник, , СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Если ИзменениеЗапрещено( + Источник, + , + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; КонецЕсли; @@ -444,14 +584,14 @@ КонецПроцедуры // Обработчик подписки на событие ПередУдалением для типов: -// СправочникОбъект -// ДокументОбъект -// ПланВидовХарактеристикОбъект -// ПланСчетовОбъект -// ПланВидовРасчетаОбъект -// БизнесПроцессОбъект -// ЗадачаОбъект -// ПланОбменаОбъект +// СправочникОбъект, +// ДокументОбъект, +// ПланВидовХарактеристикОбъект, +// ПланСчетовОбъект, +// ПланВидовРасчетаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект, +// ПланОбменаОбъект. // Процедура ПроверитьДатуЗапретаИзмененияПередУдалением(Источник, Отказ) Экспорт @@ -462,12 +602,19 @@ СтандартнаяОбработка = Истина; УзелПланаОбмена = Неопределено; СообщитьОЗапрете = Истина; - // - Если ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда + + Если ПропуститьПроверкуЗапретаИзменения( + Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Тогда Возврат; КонецЕсли; - Если ИзменениеЗапрещено(Источник, , СообщитьОЗапрете, СтандартнаяОбработка, УзелПланаОбмена) Тогда + Если ИзменениеЗапрещено( + Источник, + , + СообщитьОЗапрете, + СтандартнаяОбработка, + УзелПланаОбмена) Тогда + Отказ = Истина; КонецЕсли; @@ -478,29 +625,32 @@ // // Параметры: // Источник – объект, для которого необходимо выполнить проверку. Может быть следующих типов: -// СправочникОбъект -// ПланВидовХарактеристикОбъект -// ПланСчетовОбъект -// ПланВидовРасчетаОбъект -// БизнесПроцессОбъект -// ЗадачаОбъект -// ПланОбменаОбъект -// ДокументОбъект -// РегистрСведенийНаборЗаписей -// РегистрНакопленияНаборЗаписей -// РегистрБухгалтерииНаборЗаписей -// РегистрРасчетаНаборЗаписей +// СправочникОбъект, +// ПланВидовХарактеристикОбъект, +// ПланСчетовОбъект, +// ПланВидовРасчетаОбъект, +// БизнесПроцессОбъект, +// ЗадачаОбъект, +// ПланОбменаОбъект, +// ДокументОбъект, +// РегистрСведенийНаборЗаписей, +// РегистрНакопленияНаборЗаписей, +// РегистрБухгалтерииНаборЗаписей, +// РегистрРасчетаНаборЗаписей. // -// Отказ – Булево – флаг отказа; Истина – объект не проходит проверки дат запрета изменения; Ложь – проходит. +// Отказ – Булево – флаг отказа. +// Истина – объект не проходит проверки дат запрета изменения. +// Ложь – проходит. // Процедура ВыполнитьПроверкуДатыЗапретаИзменения(Источник, Отказ) Экспорт ОбъектМетаданных = Источник.Метаданные(); - ИсточникиДанных = ДатыЗапретаИзмененияПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения().НайтиСтроки(Новый Структура("Таблица", ОбъектМетаданных.ПолноеИмя())); + ИсточникиДанных = ДатыЗапретаИзмененияПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения( + ).НайтиСтроки(Новый Структура("Таблица", ОбъектМетаданных.ПолноеИмя())); Если ИсточникиДанных.Количество() = 0 Тогда - Возврат; // для текущего типа объекта не определены запреты по датам + Возврат; // Для текущего типа объекта не определены запреты по датам. КонецЕсли; ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); @@ -517,7 +667,8 @@ ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаДокументы() Тогда - ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента(Источник, Отказ, Неопределено, Неопределено); + ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента( + Источник, Отказ, Неопределено, Неопределено); ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений() ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления() Тогда @@ -526,21 +677,25 @@ ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыБухгалтерии() Тогда - ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраБухгалтерии(Источник, Отказ, Неопределено); + ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраБухгалтерии( + Источник, Отказ, Неопределено); ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыРасчета() Тогда - ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраРасчета(Источник, Отказ, Истина, Неопределено, Неопределено, Неопределено); + ПроверитьДатуЗапретаИзмененияПередЗаписьюНабораЗаписейРегистраРасчета( + Источник, Отказ, Истина, Неопределено, Неопределено, Неопределено); КонецЕсли; КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -Функция ПропуститьПроверкуЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) +Функция ПропуститьПроверкуЗапретаИзменения(Источник, + СтандартнаяОбработка, + УзелПланаОбмена, + СообщитьОЗапрете) Если ЗапретИзмененияДанныхНеИспользуется() Тогда Возврат Истина; @@ -550,7 +705,11 @@ Возврат Истина; КонецЕсли; - ДатыЗапретаИзмененияПереопределяемый.ПередПроверкойЗапретаИзменения(Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете); + СтандартныеПодсистемыПереопределяемый.ПередПроверкойЗапретаИзменения( + Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете); + + ДатыЗапретаИзмененияПереопределяемый.ПередПроверкойЗапретаИзменения( + Источник, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете); Возврат НЕ СтандартнаяОбработка И УзелПланаОбмена = Неопределено; @@ -564,14 +723,23 @@ Возврат Истина; КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; + НеИспользуется = Запрос.Выполнить().Пустой(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; - Возврат Запрос.Выполнить().Пустой(); + Возврат НеИспользуется; КонецФункции @@ -583,12 +751,12 @@ ИсточникиДанных = ПолучитьИсточникиДанных(Отбор); Если ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда - // Заполнение значений полей из набора записей + // Заполнение значений полей из набора записей. ПоляРегистра = ПолучитьПоляРегистра(ИсточникиДанных, Отбор.Таблица); ЗначенияПолей = Данные.Выгрузить(, ПоляРегистра); ЗначенияПолей.Свернуть(ПоляРегистра); Иначе - // Заполнение значений полей из объекта + // Заполнение значений полей из объекта. ЗначенияПолей = ПолучитьСтруктуруПолейОбъекта(ОбъектМетаданных, ИсточникиДанных, Отбор.Таблица); Для каждого Поле Из ЗначенияПолей Цикл Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда @@ -608,9 +776,9 @@ Функция ПолучитьИсточникиДанных(Отбор) ИсточникиДанныхТаблиц = ДатыЗапретаИзмененияПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения(); - // + ИсточникиДанных = ИсточникиДанныхТаблиц.НайтиСтроки(Отбор); - // + Если ИсточникиДанных.Количество() = 0 Тогда ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для проверки запрета изменения не найдены @@ -628,7 +796,9 @@ Для каждого ИсточникДанных Из ИсточникиДанных Цикл - Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсточникДанных.ПолеДаты, "."); + Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + ИсточникДанных.ПолеДаты, "."); + Если Поля.Количество() = 0 Тогда ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для проверки запрета изменения @@ -648,7 +818,10 @@ КонецЕсли; Если ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта) Тогда - Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИсточникДанных.ПолеОбъекта, "."); + + Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок( + ИсточникДанных.ПолеОбъекта, "."); + Если НЕ ЗначениеЗаполнено(Поля[0]) Тогда ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для проверки запрета изменения @@ -672,11 +845,22 @@ СтруктураПолей = Новый Структура; Для каждого ИсточникДанных Из ИсточникиДанных Цикл - // - ДобавитьПоле(ОбъектМетаданных, ИсточникДанных, СтруктураПолей, ИсточникДанных.ПолеДаты, Таблица, НСтр("ru = 'поле даты'")); - // + + ДобавитьПоле(ОбъектМетаданных, + ИсточникДанных, + СтруктураПолей, + ИсточникДанных.ПолеДаты, + Таблица, + НСтр("ru = 'поле даты'")); + Если ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта) Тогда - ДобавитьПоле(ОбъектМетаданных, ИсточникДанных, СтруктураПолей, ИсточникДанных.ПолеОбъекта, Таблица, НСтр("ru = 'поле объекта'")); + + ДобавитьПоле(ОбъектМетаданных, + ИсточникДанных, + СтруктураПолей, + ИсточникДанных.ПолеОбъекта, + Таблица, + НСтр("ru = 'поле объекта'")); КонецЕсли; КонецЦикла; @@ -684,7 +868,12 @@ КонецФункции -Процедура ДобавитьПоле(ОбъектМетаданных, ИсточникДанных, СтруктураПолей, Поле, Таблица, ВидПоляДляСообщений) +Процедура ДобавитьПоле(ОбъектМетаданных, + ИсточникДанных, + СтруктураПолей, + Поле, + Таблица, + ВидПоляДляСообщений) Поля = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Поле, "."); Если Поля.Количество() = 0 Тогда @@ -694,7 +883,7 @@ |не задано %2.'"), Таблица, ВидПоляДляСообщений)); - // + ИначеЕсли НЕ ЗначениеЗаполнено(Поля[0]) Тогда ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для проверки запрета изменения @@ -743,10 +932,10 @@ ДанныеДляПроверки = ШаблонДанныхДляПроверки(); ИсточникиДанныхТаблиц = ДатыЗапретаИзмененияПовтИсп.ИсточникиДанныхДляПроверкиЗапретаИзменения(); - // + Отбор = Новый Структура("Таблица", ПредварительныеДанные.Таблица); ИсточникиДанных = ИсточникиДанныхТаблиц.НайтиСтроки(Отбор); - // + Если ИсточникиДанных.Количество() = 0 Тогда ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Для проверки запрета изменения не найдены @@ -761,74 +950,98 @@ ЗначенияПолей = Неопределено; - Если ПредварительныеДанные.ИдентификаторДанных <> Неопределено Тогда - Если ЭтоНаборЗаписей Тогда - // Заполнение значений полей из базы данных - Поля = ПолучитьПоляРегистра(ИсточникиДанных, Отбор.Таблица); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | &Поля - |ИЗ - | &Таблица КАК Таблица - |ГДЕ - | &УсловиеОтбора"; - ВставитьПараметрыИУсловиеОтбора(Запрос, ПредварительныеДанные.ИдентификаторДанных); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); - ЗначенияПолей = Запрос.Выполнить().Выгрузить(); - ЗначенияПолей.Свернуть(Поля); - // - ИначеЕсли ЗначениеЗаполнено(ПредварительныеДанные.ИдентификаторДанных) Тогда - // Заполнение значений полей из базы данных - ЗначенияПолей = ПолучитьСтруктуруПолейОбъекта(ОбъектМетаданных, ИсточникиДанных, Отбор.Таблица); - // Установка значений полей - Поля = ""; - Для каждого Поле Из ЗначенияПолей Цикл - Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда - Поля = Поля + Поле.Ключ + ".(" + Поле.Значение + "),"; - Иначе - Поля = Поля + Поле.Ключ + ","; - КонецЕсли; - КонецЦикла; - Поля = Лев(Поля, СтрДлина(Поля)-1); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | &Поля - |ИЗ - | &Таблица КАК Таблица - |ГДЕ - | Таблица.Ссылка = &Ссылка"; - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); - Запрос.УстановитьПараметр("Ссылка", ПредварительныеДанные.ИдентификаторДанных); - ДанныеИзБазы = Запрос.Выполнить().Выгрузить(); - Для каждого Поле Из ЗначенияПолей Цикл - Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда - Поля = Поле.Значение; - ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ].Скопировать(, Поля); - ЗначенияПолей[Поле.Ключ].Свернуть(Поля); - Иначе - ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ]; - КонецЕсли; - КонецЦикла; + НачатьТранзакцию(); + Попытка + Если ПредварительныеДанные.ИдентификаторДанных <> Неопределено Тогда + + Если ЭтоНаборЗаписей Тогда + // Заполнение значений полей из базы данных. + Поля = ПолучитьПоляРегистра(ИсточникиДанных, Отбор.Таблица); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | &Поля + |ИЗ + | &Таблица КАК Таблица + |ГДЕ + | &УсловиеОтбора"; + ВставитьПараметрыИУсловиеОтбора(Запрос, ПредварительныеДанные.ИдентификаторДанных); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); + ЗначенияПолей = Запрос.Выполнить().Выгрузить(); + ЗначенияПолей.Свернуть(Поля); + + ИначеЕсли ЗначениеЗаполнено(ПредварительныеДанные.ИдентификаторДанных) Тогда + // Заполнение значений полей из базы данных. + ЗначенияПолей = ПолучитьСтруктуруПолейОбъекта( + ОбъектМетаданных, ИсточникиДанных, Отбор.Таблица); + // Установка значений полей. + Поля = ""; + Для каждого Поле Из ЗначенияПолей Цикл + Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда + Поля = Поля + Поле.Ключ + ".(" + Поле.Значение + "),"; + Иначе + Поля = Поля + Поле.Ключ + ","; + КонецЕсли; + КонецЦикла; + Поля = Лев(Поля, СтрДлина(Поля)-1); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | &Поля + |ИЗ + | &Таблица КАК Таблица + |ГДЕ + | Таблица.Ссылка = &Ссылка"; + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Поля", Поля); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Отбор.Таблица); + Запрос.УстановитьПараметр("Ссылка", ПредварительныеДанные.ИдентификаторДанных); + ДанныеИзБазы = Запрос.Выполнить().Выгрузить(); + Для каждого Поле Из ЗначенияПолей Цикл + Если ОбъектМетаданных.ТабличныеЧасти.Найти(Поле.Ключ) <> Неопределено Тогда + Поля = Поле.Значение; + ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ].Скопировать(, Поля); + ЗначенияПолей[Поле.Ключ].Свернуть(Поля); + Иначе + ЗначенияПолей[Поле.Ключ] = ДанныеИзБазы[0][Поле.Ключ]; + КонецЕсли; + КонецЦикла; + КонецЕсли; КонецЕсли; - КонецЕсли; - - Если ПредварительныеДанные.ЗначенияПолейИзОбъекта <> Неопределено Тогда - ДобавитьДанныеДляПроверки(ДанныеДляПроверки, ИсточникиДанных, ПредварительныеДанные.ЗначенияПолейИзОбъекта, ЭтоНаборЗаписей, ОбъектМетаданных); - КонецЕсли; - - Если ЗначенияПолей <> Неопределено Тогда - ДобавитьДанныеДляПроверки(ДанныеДляПроверки, ИсточникиДанных, ЗначенияПолей, ЭтоНаборЗаписей, ОбъектМетаданных); - КонецЕсли; + + Если ПредварительныеДанные.ЗначенияПолейИзОбъекта <> Неопределено Тогда + ДобавитьДанныеДляПроверки( + ДанныеДляПроверки, + ИсточникиДанных, + ПредварительныеДанные.ЗначенияПолейИзОбъекта, + ЭтоНаборЗаписей, + ОбъектМетаданных); + КонецЕсли; + + Если ЗначенияПолей <> Неопределено Тогда + ДобавитьДанныеДляПроверки( + ДанныеДляПроверки, + ИсточникиДанных, + ЗначенияПолей, + ЭтоНаборЗаписей, + ОбъектМетаданных); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Возврат ДанныеДляПроверки; КонецФункции -Процедура ДобавитьДанныеДляПроверки(Знач ДанныеДляПроверки, Знач ИсточникиДанных, Знач ЗначенияПолей, Знач ЭтоНаборЗаписей, Знач ОбъектМетаданных) +Процедура ДобавитьДанныеДляПроверки(Знач ДанныеДляПроверки, + Знач ИсточникиДанных, + Знач ЗначенияПолей, + Знач ЭтоНаборЗаписей, + Знач ОбъектМетаданных) Для каждого ИсточникДанных Из ИсточникиДанных Цикл Если ЭтоНаборЗаписей Тогда @@ -857,7 +1070,8 @@ Если ОбъектМетаданных.ТабличныеЧасти.Найти(ТЧПоляОбъекта) = Неопределено Тогда ТЧПоляОбъекта = ""; Иначе - ДопИсточникДанных.ПолеОбъекта = Сред(ДопИсточникДанных.ПолеОбъекта, ПозицияТочки+1); + ДопИсточникДанных.ПолеОбъекта = Сред( + ДопИсточникДанных.ПолеОбъекта, ПозицияТочки + 1); КонецЕсли; КонецЕсли; КонецЕсли; @@ -869,13 +1083,15 @@ Иначе Для каждого СтрокаДаты Из ЗначенияПолей[ТЧПоляДаты] Цикл Для каждого СтрокаОбъекта Из ЗначенияПолей[ТЧПоляОбъекта] Цикл - ДобавитьСтрокуДанных(СтрокаДаты, СтрокаОбъекта, ДопИсточникДанных, ДанныеДляПроверки); + ДобавитьСтрокуДанных( + СтрокаДаты, СтрокаОбъекта, ДопИсточникДанных, ДанныеДляПроверки); КонецЦикла; КонецЦикла; КонецЕсли; ИначеЕсли ЗначениеЗаполнено(ТЧПоляДаты) Тогда Для каждого Строка Из ЗначенияПолей[ТЧПоляДаты] Цикл - ДобавитьСтрокуДанных(Строка, ЗначенияПолей, ДопИсточникДанных, ДанныеДляПроверки); + ДобавитьСтрокуДанных( + Строка, ЗначенияПолей, ДопИсточникДанных, ДанныеДляПроверки); КонецЦикла; ИначеЕсли ЗначениеЗаполнено(ТЧПоляОбъекта) Тогда Для каждого Строка Из ЗначенияПолей[ТЧПоляОбъекта] Цикл @@ -889,13 +1105,19 @@ КонецПроцедуры -Процедура ДобавитьСтрокуДанных(Знач СтрокаДаты, Знач СтрокаОбъекта, Знач ИсточникДанных, Знач ДанныеДляПроверки) +Процедура ДобавитьСтрокуДанных(Знач СтрокаДаты, + Знач СтрокаОбъекта, + Знач ИсточникДанных, + Знач ДанныеДляПроверки) НоваяСтрока = ДанныеДляПроверки.Добавить(); УстановитьЗначениеПоля(СтрокаДаты, НоваяСтрока.Дата, ИсточникДанных.ПолеДаты); + Если ЗначениеЗаполнено(ИсточникДанных.Раздел) Тогда - НоваяСтрока.Раздел = ПланыВидовХарактеристик.РазделыДатЗапретаИзменения[ИсточникДанных.Раздел]; + НоваяСтрока.Раздел = ПланыВидовХарактеристик.РазделыДатЗапретаИзменения[ + ИсточникДанных.Раздел]; КонецЕсли; + Если ЗначениеЗаполнено(ИсточникДанных.ПолеОбъекта) Тогда УстановитьЗначениеПоля(СтрокаОбъекта, НоваяСтрока.Объект, ИсточникДанных.ПолеОбъекта) КонецЕсли; @@ -915,7 +1137,13 @@ КонецПроцедуры -Функция НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, СообщитьОЗапрете, ИдентификаторДанных, ТаблицаДанных, СвойстваВстраивания, ПоискЗапретовЗагрузки, Текст) +Функция НайденЗапретИзмененияИлиЗагрузкиДанных(Запрос, + СообщитьОЗапрете, + ИдентификаторДанных, + ТаблицаДанных, + СвойстваВстраивания, + ПоискЗапретовЗагрузки, + Текст) Запрос.Текст = "ВЫБРАТЬ @@ -1026,17 +1254,23 @@ ЗапретыДанных = РезультатыЗапроса[2].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); Если ЗапретыДанных.Строки.Количество() > 0 Тогда - // + Проверки = РезультатыЗапроса[1].Выгрузить(); Текст = ПолучитьПредставлениеДанных(ИдентификаторДанных, ТаблицаДанных); Если ЗначениеЗаполнено(Текст) Тогда Если ПоискЗапретовЗагрузки Тогда - Текст = Текст + НСтр("ru = ' запрещено загружать в запрещенный период.'") + Символы.ПС + Символы.ПС; + Текст = Текст + + НСтр("ru = ' запрещено загружать в запрещенный период.'") + + Символы.ПС + + Символы.ПС; Иначе - Текст = Текст + НСтр("ru = ' запрещено изменять или перемещать в запрещенный период.'") + Символы.ПС + Символы.ПС; + Текст = Текст + + НСтр("ru = ' запрещено изменять или перемещать в запрещенный период.'") + + Символы.ПС + + Символы.ПС; КонецЕсли; КонецЕсли; - // + Для каждого ОписаниеЗапретов Из ЗапретыДанных.Строки Цикл Запреты = ОписаниеЗапретов.Строки; Проверка = Проверки.Найти(ОписаниеЗапретов.КлючСтроки, "КлючСтроки"); @@ -1061,18 +1295,18 @@ Текст = Текст + ?(Запреты.Количество() = 1, "", Символы.ПС + "- "); Если Запрет.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей Тогда Текст = Текст + НСтр("ru = 'для всех пользователей'"); - // + ИначеЕсли Запрет.Пользователь = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехУзловПлановОбмена Тогда Текст = Текст + НСтр("ru = 'для всех узлов планов обмена'"); - // + ИначеЕсли ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ГруппыПользователей") ИЛИ ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда Текст = Текст + НСтр("ru = 'для группы пользователей ""%4""'"); - // + ИначеЕсли ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.Пользователи") ИЛИ ТипЗнч(Запрет.Пользователь) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда Текст = Текст + НСтр("ru = 'для пользователя ""%4""'"); - // + ИначеЕсли ЗначениеЗаполнено(Запрет.Пользователь) Тогда Текст = Текст + НСтр("ru = 'для узла ""%4""'"); Иначе @@ -1093,14 +1327,13 @@ КонецЕсли; КонецЕсли; Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - Текст, - Формат(Проверка.Дата, "ДФ=dd.MM.yyyy"), - Проверка.Раздел, - Проверка.Объект, - Запрет.Пользователь, - Формат(Запрет.ДатаЗапрета, "ДФ=dd.MM.yyyy"), - Запрет.Пользователь.Метаданные().Представление()) - + Символы.ПС; + Текст, + Формат(Проверка.Дата, "ДФ=dd.MM.yyyy"), + Проверка.Раздел, + Проверка.Объект, + Запрет.Пользователь, + Формат(Запрет.ДатаЗапрета, "ДФ=dd.MM.yyyy"), + Запрет.Пользователь.Метаданные().Представление()) + Символы.ПС; КонецЦикла; Текст = Текст + Символы.ПС; КонецЦикла; @@ -1111,15 +1344,16 @@ Если ТранзакцияАктивна() Тогда // Если поиск запретов выполняется в транзакции, а не ПриЧтенииНаСервере, - // тогда выполняется запись в журнал регистрации - ЗаписьЖурналаРегистрации(?(ПоискЗапретовЗагрузки, - НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'"), - НСтр("ru = 'Даты запрета изменения.Найдены запрета изменения'")), - УровеньЖурналаРегистрации.Ошибка, - , - , - Текст, - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + // тогда выполняется запись в журнал регистрации. + ЗаписьЖурналаРегистрации( + ?(ПоискЗапретовЗагрузки, + НСтр("ru = 'Даты запрета изменения.Найдены запреты загрузки'"), + НСтр("ru = 'Даты запрета изменения.Найдены запрета изменения'")), + УровеньЖурналаРегистрации.Ошибка, + , + , + Текст, + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); КонецЕсли; КонецЕсли; @@ -1173,10 +1407,12 @@ КонецЦикла; Если КоличествоПолей = 1 Тогда - ПредставлениеДанных = ПредставлениеДанных + " " + НСтр("ru = 'с полем'") + " " + Строка(ИдентификаторДанных); + ПредставлениеДанных = ПредставлениеДанных + + " " + НСтр("ru = 'с полем'") + " " + Строка(ИдентификаторДанных); ИначеЕсли КоличествоПолей > 1 Тогда - ПредставлениеДанных = ПредставлениеДанных + " " + НСтр("ru = 'с полями'") + " " + Строка(ИдентификаторДанных); + ПредставлениеДанных = ПредставлениеДанных + + " " + НСтр("ru = 'с полями'") + " " + Строка(ИдентификаторДанных); КонецЕсли; Иначе Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда @@ -1211,28 +1447,35 @@ КонецЕсли; КонецЕсли; - ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ПредставлениеДанных, ОбъектМетаданных.Синоним); + ПредставлениеДанных = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ПредставлениеДанных, ОбъектМетаданных.Синоним); Возврат ПредставлениеДанных; КонецФункции -// Функция преобразует Отбор в условие на языке запросов и вставляет в запрос +// Функция преобразует Отбор в условие на языке запросов и вставляет в запрос. // // Параметры: -// Запрос - Запрос +// Запрос - Запрос. +// // Отбор - РегистрСведенийНаборЗаписей.Отбор, // РегистрНакопленияНаборЗаписей.Отбор, // РегистрБухгалтерииНаборЗаписей.Отбор, -// РегистрРасчетаНаборЗаписей.Отбор, +// РегистрРасчетаНаборЗаписей.Отбор. +// // ПсевдонимТаблицы - Строка - псевдоним регистра в запросе. +// // МестоУсловияОтбора - Строка - Идентификатор места условия в запросе, -// например, &УсловиеОтбора +// например, &УсловиеОтбора. // // Возвращаемое значение: -// Строка +// Строка. // -Процедура ВставитьПараметрыИУсловиеОтбора(Запрос, Отбор, ПсевдонимТаблицы = "Таблица", МестоУсловияОтбора = "&УсловиеОтбора") +Процедура ВставитьПараметрыИУсловиеОтбора(Запрос, + Отбор, + ПсевдонимТаблицы = "Таблица", + МестоУсловияОтбора = "&УсловиеОтбора") Условие = ""; Для каждого ЭлементОтбора Из Отбор Цикл @@ -1242,7 +1485,8 @@ Условие = Условие + Символы.ПС + "И "; КонецЕсли; Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение); - Условие = Условие + ПсевдонимТаблицы + "." + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя; + Условие = Условие + + ПсевдонимТаблицы + "." + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя; КонецЕсли; КонецЦикла; Условие = ?(ЗначениеЗаполнено(Условие), Условие, "Истина"); diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl index 7aec98f15..034061017 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПереопределяемый/Module.bsl @@ -76,10 +76,6 @@ // Процедура ПередПроверкойЗапретаИзменения(Объект, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Экспорт - // СтандартныеПодсистемы.ОбменДанными - ОбменДаннымиСобытия.ПередПроверкойЗапретаИзменения(Объект, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете); - // Конец СтандартныеПодсистемы.ОбменДанными - КонецПроцедуры diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl index 3a2572e84..fdb996885 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияПовтИсп/Module.bsl @@ -6,7 +6,7 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Возвращает свойства, характеризующие вариант встраивания +// Возвращает свойства, характеризующие вариант встраивания. Функция СвойстваРазделов() Экспорт Свойства = Новый Структура; @@ -16,11 +16,17 @@ Свойства.Вставить("ПустыеСсылкиУзловПлановОбмена", Новый Массив); Свойства.Вставить("ИспользоватьДатыЗапретаЗагрузкиДанных", Ложь); - Для каждого ТипАдресатаНастройки Из Метаданные.РегистрыСведений.ДатыЗапретаИзменения.Измерения.Пользователь.Тип.Типы() Цикл + + ТипыАдресатаНастройки = Метаданные.РегистрыСведений.ДатыЗапретаИзменения + .Измерения.Пользователь.Тип.Типы(); + + Для каждого ТипАдресатаНастройки Из ТипыАдресатаНастройки Цикл ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипАдресатаНастройки); Если Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных) Тогда Свойства.ИспользоватьДатыЗапретаЗагрузкиДанных = Истина; - Свойства.ПустыеСсылкиУзловПлановОбмена.Добавить(ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОбъектМетаданных.ПолноеИмя()).ПустаяСсылка()); + Свойства.ПустыеСсылкиУзловПлановОбмена.Добавить( + ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени( + ОбъектМетаданных.ПолноеИмя()).ПустаяСсылка()); КонецЕсли; КонецЦикла; @@ -30,8 +36,12 @@ Свойства.Вставить("ПоказыватьРазделы"); Свойства.Вставить("РазделыБезОбъектов", Новый СписокЗначений); Свойства.Вставить("ТипыОбъектовРазделов", Новый ТаблицаЗначений); - Свойства.ТипыОбъектовРазделов.Колонки.Добавить("Раздел", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); - Свойства.ТипыОбъектовРазделов.Колонки.Добавить("ТипыОбъекта", Новый ОписаниеТипов("СписокЗначений")); + + Свойства.ТипыОбъектовРазделов.Колонки.Добавить( + "Раздел", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); + + Свойства.ТипыОбъектовРазделов.Колонки.Добавить( + "ТипыОбъекта", Новый ОписаниеТипов("СписокЗначений")); Запрос = Новый Запрос( "ВЫБРАТЬ @@ -77,20 +87,26 @@ КонецФункции -// См. комментарий в вызывающей функции ДатыЗапретаИзменения.ШаблонДанныхДляПроверки() +// См. комментарий в вызывающей функции ДатыЗапретаИзменения.ШаблонДанныхДляПроверки(). Функция ШаблонДанныхДляПроверки() Экспорт ДанныеДляПроверки = Новый ТаблицаЗначений; - ДанныеДляПроверки.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); - ДанныеДляПроверки.Колонки.Добавить("Раздел", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); - ДанныеДляПроверки.Колонки.Добавить("Объект", Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.Тип); + + ДанныеДляПроверки.Колонки.Добавить( + "Дата", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); + + ДанныеДляПроверки.Колонки.Добавить( + "Раздел", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.РазделыДатЗапретаИзменения")); + + ДанныеДляПроверки.Колонки.Добавить( + "Объект", Метаданные.ПланыВидовХарактеристик.РазделыДатЗапретаИзменения.Тип); Возврат ДанныеДляПроверки; КонецФункции // Возвращает источники данных, заполненные в процедуре -// ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения() +// ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения(). // Функция ИсточникиДанныхДляПроверкиЗапретаИзменения() Экспорт @@ -100,7 +116,8 @@ ИсточникиДанных.Колонки.Добавить("Раздел", Новый ОписаниеТипов("Строка")); ИсточникиДанных.Колонки.Добавить("ПолеОбъекта", Новый ОписаниеТипов("Строка")); - ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения(ИсточникиДанных); + ДатыЗапретаИзмененияПереопределяемый.ЗаполнитьИсточникиДанныхДляПроверкиЗапретаИзменения( + ИсточникиДанных); Возврат ИсточникиДанных; diff --git a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl index a308a262a..30e57e8f2 100644 --- a/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl +++ b/SSL/src/CommonModules/ДатыЗапретаИзмененияСлужебный/Module.bsl @@ -39,51 +39,65 @@ УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Объект, - | ДатыЗапретаИзменения.Пользователь, - | ДатыЗапретаИзменения.ДатаЗапрета, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; - - Выборка = Запрос.Выполнить().Выбрать(); - - ТекущаяДатаНаСервере = НачалоДня(ТекущаяДатаСеанса()); - МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); - ПредставлениеОшибки = ""; - Отказ = Ложь; - ЕстьОбновленныеДаты = Ложь; - НетОтносительныхДат = Истина; - - Пока Выборка.Следующий() Цикл - РассчитаннаяДатаЗапрета = РассчитатьДатуЗапретаПоОписанию(ТекущаяДатаНаСервере, Выборка.ОписаниеДатыЗапрета); - // - Если ЗначениеЗаполнено(РассчитаннаяДатаЗапрета) Тогда - НетОтносительныхДат = Ложь; - Если Выборка.ДатаЗапрета <> РассчитаннаяДатаЗапрета Тогда - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка); - МенеджерЗаписи.Прочитать(); - Если МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.ДатаЗапрета = РассчитаннаяДатаЗапрета; - Попытка - МенеджерЗаписи.Записать(); - ЕстьОбновленныеДаты = Истина; - Исключение - Отказ = Истина; - ПредставлениеОшибки = ПредставлениеОшибки + Символы.ПС + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить(); + ЭлементБлокировки.Область = "РегистрСведений.ДатыЗапретаИзменения"; + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ДатыЗапретаИзменения.Раздел, + | ДатыЗапретаИзменения.Объект, + | ДатыЗапретаИзменения.Пользователь, + | ДатыЗапретаИзменения.ДатаЗапрета, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения"; + + Выборка = Запрос.Выполнить().Выбрать(); + + ТекущаяДатаНаСервере = НачалоДня(ТекущаяДатаСеанса()); + МенеджерЗаписи = РегистрыСведений.ДатыЗапретаИзменения.СоздатьМенеджерЗаписи(); + ПредставлениеОшибки = ""; + Отказ = Ложь; + ЕстьОбновленныеДаты = Ложь; + НетОтносительныхДат = Истина; + + Пока Выборка.Следующий() Цикл + РассчитаннаяДатаЗапрета = РассчитатьДатуЗапретаПоОписанию(ТекущаяДатаНаСервере, Выборка.ОписаниеДатыЗапрета); + + Если ЗначениеЗаполнено(РассчитаннаяДатаЗапрета) Тогда + НетОтносительныхДат = Ложь; + Если Выборка.ДатаЗапрета <> РассчитаннаяДатаЗапрета Тогда + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Выборка); + МенеджерЗаписи.Прочитать(); + Если МенеджерЗаписи.Выбран() Тогда + МенеджерЗаписи.ДатаЗапрета = РассчитаннаяДатаЗапрета; + Попытка + МенеджерЗаписи.Записать(); + ЕстьОбновленныеДаты = Истина; + Исключение + Отказ = Истина; + ПредставлениеОшибки = ПредставлениеОшибки + Символы.ПС + Символы.ПС + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки + КонецЕсли; КонецЕсли; КонецЕсли; - КонецЕсли; - КонецЦикла; + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Если НетОтносительныхДат Тогда ОписаниеРезультата = НСтр("ru = 'Относительные даты запрета не заданы.'"); - // + ИначеЕсли Отказ Тогда Если ЕстьОбновленныеДаты Тогда ОписаниеРезультата = НСтр("ru = 'Пересчитаны некоторые текущие значения относительных дат запрета. @@ -112,7 +126,7 @@ КонецПроцедуры -// Обработчик регламентного задания ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения +// Обработчик регламентного задания ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения. Процедура ПересчетТекущихЗначенийОтносительныхДатЗапретаИзменения() Экспорт Если ПустаяСтрока(ИмяПользователя()) Тогда @@ -182,7 +196,7 @@ // Обработчик обновления выполняет замену значения Неопределено // измерения Пользователь регистра сведений ДатыЗапретаИзменения -// на значение Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей +// на значение Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей. // Процедура ЗаменитьНеопределеноНаЗначениеПеречисления() Экспорт diff --git a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl index e65400c4a..f9e6bceb0 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперации/Module.bsl @@ -18,21 +18,27 @@ // выполнения процедуры ИмяЭкспортнойПроцедуры. // НаименованиеЗадания - Строка - наименование фонового задания. // Если не задано, то будет равно ИмяЭкспортнойПроцедуры. +// ИспользоватьДополнительноеВременноеХранилище – Булево – признак использования +// дополнительного временного хранилища для передачи данных +// в родительский сеанс из фонового задания. По умолчанию – Ложь. // // Возвращаемое значение: // Структура - Возвращает свойства: // - АдресХранилища - адрес временного хранилища, в которое будет // помещен результат работы задания; +// - АдресХранилищаДополнительный - адрес дополнительного временного хранилища, +// в которое будет помещен результат работы задания (доступно только если +// установлен параметр ИспользоватьДополнительноеВременноеХранилище); // - ИдентификаторЗадания - уникальный идентификатор запущенного // фонового задания; // - ЗаданиеВыполнено - Истина если задание было успешно выполнено // за время вызова функции. // Функция ЗапуститьВыполнениеВФоне(Знач ИдентификаторФормы, Знач ИмяЭкспортнойПроцедуры, - Знач Параметры, Знач НаименованиеЗадания = "") Экспорт + Знач Параметры, Знач НаименованиеЗадания = "", ИспользоватьДополнительноеВременноеХранилище = Ложь) Экспорт АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); - + Если Не ЗначениеЗаполнено(НаименованиеЗадания) Тогда НаименованиеЗадания = ИмяЭкспортнойПроцедуры; КонецЕсли; @@ -41,6 +47,11 @@ ПараметрыЭкспортнойПроцедуры.Добавить(Параметры); ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилища); + Если ИспользоватьДополнительноеВременноеХранилище Тогда + АдресХранилищаДополнительный = ПоместитьВоВременноеХранилище(Неопределено, ИдентификаторФормы); + ПараметрыЭкспортнойПроцедуры.Добавить(АдресХранилищаДополнительный); + КонецЕсли; + ПараметрыЗадания = Новый Массив; ПараметрыЗадания.Добавить(ИмяЭкспортнойПроцедуры); ПараметрыЗадания.Добавить(ПараметрыЭкспортнойПроцедуры); @@ -50,11 +61,17 @@ Иначе ВремяОжидания = 2; КонецЕсли; + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда - ПараметрыЗадания.Добавить(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + ПараметрыЗадания.Добавить(ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Иначе + ПараметрыЗадания.Добавить(Неопределено); + КонецЕсли; + ТекущееЗначение = ОбщегоНазначения.ИспользованиеРазделителяСеанса(); ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); Задание = ФоновыеЗадания.Выполнить("ОбщегоНазначения.ВыполнитьБезопасно", ПараметрыЗадания,, НаименованиеЗадания); @@ -64,7 +81,7 @@ // Специальная обработка не требуется, возможно исключение вызвано истечением времени ожидания. КонецПопытки; - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(ТекущееЗначение); Иначе ПараметрыЗадания.Добавить(Неопределено); Задание = ФоновыеЗадания.Выполнить("ОбщегоНазначения.ВыполнитьБезопасно", ПараметрыЗадания,, НаименованиеЗадания); @@ -75,11 +92,14 @@ КонецПопытки; КонецЕсли; - Результат = Новый Структура; - Результат.Вставить("АдресХранилища" , АдресХранилища); - Результат.Вставить("ЗаданиеВыполнено" , ЗаданиеВыполнено(Задание.УникальныйИдентификатор)); - Результат.Вставить("ИдентификаторЗадания", Задание.УникальныйИдентификатор); + Результат.Вставить("АдресХранилища", АдресХранилища); + Результат.Вставить("ЗаданиеВыполнено", ЗаданиеВыполнено(Задание.УникальныйИдентификатор)); + Результат.Вставить("ИдентификаторЗадания", Задание.УникальныйИдентификатор); + + Если ИспользоватьДополнительноеВременноеХранилище Тогда + Результат.Вставить("АдресХранилищаДополнительный", АдресХранилищаДополнительный); + КонецЕсли; Возврат Результат; @@ -177,9 +197,11 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + ТекущееЗначение = ОбщегоНазначения.ИспользованиеРазделителяСеанса(); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(ТекущееЗначение); Иначе Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ИдентификаторЗадания); КонецЕсли; diff --git a/SSL/src/CommonModules/ДлительныеОперации/ДлительныеОперации.mdo b/SSL/src/CommonModules/ДлительныеОперации/ДлительныеОперации.mdo index 43a3ffbe3..c9c5497be 100644 --- a/SSL/src/CommonModules/ДлительныеОперации/ДлительныеОперации.mdo +++ b/SSL/src/CommonModules/ДлительныеОперации/ДлительныеОперации.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl index e5b6ca283..20c30326b 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиент/Module.bsl @@ -35,20 +35,6 @@ КонецПроцедуры -// Отменяет выполнение фонового задания по переданному идентификатору. -// -// Параметры: -// ИдентификаторЗадания - УникальныйИдентификатор - идентификатор фонового задания. -// -Процедура ОтменитьВыполнениеЗадания(Знач ИдентификаторЗадания) Экспорт - - Если ЗначениеЗаполнено(ИдентификаторЗадания) Тогда - ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); - КонецЕсли; - -КонецПроцедуры - - //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с формой длительной операции // @@ -64,7 +50,7 @@ // Функция ОткрытьФормуДлительнойОперации(Знач ВладелецФормы, Знач ИдентификаторЗадания) Экспорт - ФормаДлительнойОперации = ДлительныеОперацииКлиентПовтИсп.ПолучитьФормуДлительнойОперации(); + ФормаДлительнойОперации = ДлительныеОперацииКлиентПовтИсп.ФормаДлительнойОперации(); Если ФормаДлительнойОперации.Открыта() Тогда ФормаДлительнойОперации = ОткрытьФорму( "ОбщаяФорма.ДлительнаяОперация", diff --git a/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl index 7c34f5884..0adbbab5f 100644 --- a/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ДлительныеОперацииКлиентПовтИсп/Module.bsl @@ -9,7 +9,7 @@ // Получить форму-индикатор выполнения длительной операции. // -Функция ПолучитьФормуДлительнойОперации() Экспорт +Функция ФормаДлительнойОперации() Экспорт Возврат ПолучитьФорму("ОбщаяФорма.ДлительнаяОперация"); diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl index 8ad27923f..2b27aff24 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/Module.bsl @@ -6,16 +6,16 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Подключает внешнюю обработку (отчет). -// После подключения обработка (отчет) регистрируется в системе под определенным именем. -// Используя это имя можно получать объект и открывать форму обработки. +// Подключает внешнюю обработку (отчет). После подключения +// обработка (отчет) регистрируется в программе под определенным именем, +// используя которое можно создавать объект или открывать формы обработки (отчета). // // Параметры: -// Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) Подключемая обработка -// +// Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) Подключемая обработка. +// // Возвращаемое значение: -// (Строка) Имя подключенной обработки, известное системе -// (Неопределено) Если передана некорректная ссылка +// (Строка) Имя подключенной обработки (отчета). +// (Неопределено) Если передана некорректная ссылка. // Функция ПодключитьВнешнююОбработку(Ссылка) Экспорт @@ -26,7 +26,6 @@ КонецЕсли; // Подключение - УстановитьПривилегированныйРежим(Истина); Если Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет ИЛИ Ссылка.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда Менеджер = ВнешниеОтчеты; @@ -35,19 +34,21 @@ КонецЕсли; АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Ссылка.ХранилищеОбработки.Получить()); - Возврат Менеджер.Подключить(АдресВоВременномХранилище, , Ссылка.БезопасныйРежим); + ИмяОбработки = Менеджер.Подключить(АдресВоВременномХранилище, , Ссылка.БезопасныйРежим); + + Возврат ИмяОбработки; КонецФункции -// Создает и возвращает экземпляр внешней обработки (отчета) -// +// Создает и возвращает объект внешней обработки (отчета). +// // Параметры: -// Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) Подключемая обработка -// +// Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) Подключаемая обработка. +// // Возвращаемое значение: -// (ВнешняяОбработкаОбъект.*) Объект подключенной обработки -// (ВнешнийОтчетОбъект.*) Объект подключенного отчета -// (Неопределено) Если передана некорректная ссылка +// (ВнешняяОбработкаОбъект.*) Объект подключенной обработки. +// (ВнешнийОтчетОбъект.*) Объект подключенного отчета. +// (Неопределено) Если передана некорректная ссылка. // Функция ПолучитьОбъектВнешнейОбработки(Ссылка) Экспорт @@ -150,6 +151,52 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Процедуры используемые при обмене данными + +// Переопределяет стандартное поведение при загрузке данных. +// Реквизит РегламентноеЗаданиеGUID табличной части Команды не переносится, +// т.к. связан с регламентным заданием текущей базы. +// +Процедура ПриПолученииДополнительнойОбработки(ЭлементДанных, ПолучениеЭлемента) Экспорт + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ДополнительныеОтчетыИОбработки") + И ЭлементДанных.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда + + // Таблица уникальных идентификаторов регламентных заданий + ТекстЗапроса = + "ВЫБРАТЬ + | Команды.Ссылка КАК Ссылка, + | Команды.Идентификатор КАК Идентификатор, + | Команды.РегламентноеЗаданиеGUID КАК РегламентноеЗаданиеGUID + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки.Команды КАК Команды + |ГДЕ + | Команды.Ссылка = &Ссылка"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.Параметры.Вставить("Ссылка", ЭлементДанных.Ссылка); + + ИдентификаторыРегламентныхЗаданий = Запрос.Выполнить().Выгрузить(); + + // Заполнение идентификаторов регламентных заданий в таблице команд из данных текущей БД + Для Каждого СтрокаКоманда Из ЭлементДанных.Команды Цикл + Найденные = ИдентификаторыРегламентныхЗаданий.НайтиСтроки(Новый Структура("Идентификатор", СтрокаКоманда.Идентификатор)); + Если Найденные.Количество() = 0 Тогда + СтрокаКоманда.РегламентноеЗаданиеGUID = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Иначе + СтрокаКоманда.РегламентноеЗаданиеGUID = Найденные[0].РегламентноеЗаданиеGUID; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -337,81 +384,29 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// Изменение регламентных заданий +// Регламентные задания -// Для внутреннего использования -// -Процедура ОбновитьСведенияПоРасписанию(ДополнительнаяОбработка, Команда, Расписание, Использование, Отказ) Экспорт - - // получаем регламентное задание по идентификатору, если объект не находим, то создаем новый - РегламентноеЗаданиеОбъект = ПолучитьРегламентноеЗадание(Команда.РегламентноеЗаданиеGUID); - - // обновляем свойства РЗ - УстановитьПараметрыРегламентногоЗадания(РегламентноеЗаданиеОбъект, Расписание, Использование, ДополнительнаяОбработка.Ссылка, Команда); - - // записываем измененное задание - ЗаписатьРегламентноеЗадание(Отказ, РегламентноеЗаданиеОбъект); - - //запоминаем GUID регл. задания в реквизите объекта - Команда.РегламентноеЗаданиеGUID = РегламентноеЗаданиеОбъект.УникальныйИдентификатор; - -КонецПроцедуры - -// Выполняет удаление регламентного задания по GUID -// Параметры -// РегламентноеЗаданиеGUID - УникальныйИдентификатор - уникальный идентификатор регламентного задания +// Получает регламентное задание по его уникальному идентификатору. // -Процедура УдалитьРегламентноеЗадание(РегламентноеЗаданиеGUID) Экспорт +Функция НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID, УстанавливатьПривилегированныйРежим = Ложь) Экспорт - РегламентноеЗаданиеОбъект = НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID); + Если НЕ ЗначениеЗаполнено(РегламентноеЗаданиеGUID) Тогда + Возврат Неопределено; + КонецЕсли; - Если РегламентноеЗаданиеОбъект <> Неопределено Тогда + // Установка привилегированного режима только для той роли, которой не хватает прав. + Если УстанавливатьПривилегированныйРежим + И РольДоступна(Метаданные.Роли.ДобавлениеИзменениеДополнительныхОтчетовИОбработок) + И НЕ ПравоДоступа("Администрирование", Метаданные) Тогда УстановитьПривилегированныйРежим(Истина); - РегламентноеЗаданиеОбъект.Удалить(); КонецЕсли; -КонецПроцедуры - -// Выполняет поиск регламентного задания по GUID -// Параметры -// РегламентноеЗаданиеGUID - УникальныйИдентификатор - уникальный идентификатор регламентного задания -// Возвращаемое значение -// РегламентноеЗадание - если найдено -// Неопределено - если не найдено -// -Функция НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID) Экспорт + Задание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗаданиеGUID); - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - // Регламентные задание необходимо получать в неразделенном режиме. - // Сохранение текущего состояния. - ТекущееСостояние = ОбщегоНазначения.ИспользованиеРазделителяСеанса(); - Если ТекущееСостояние Тогда - ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); - КонецЕсли; - КонецЕсли; - - Попытка - ТекущееРегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(РегламентноеЗаданиеGUID); - Исключение - ТекущееРегламентноеЗадание = Неопределено; - КонецПопытки; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - // Восставновление состояния параметра сеанса - Если ТекущееСостояние <> ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда - ОбщегоНазначения.УстановитьРазделениеСеанса(ТекущееСостояние); - КонецЕсли; - КонецЕсли; - - Возврат ТекущееРегламентноеЗадание; + Возврат Задание; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Выполнение регламентных заданий - // Обработчик экземпляра регламентного задания ЗапускОбработок. // Запускает обработчик глобальной обработки по регламентному заданию, // с указанным идентификатором команды. @@ -426,11 +421,22 @@ УстановитьПривилегированныйРежим(Истина); КонецЕсли; - НачалоВыполненияОбработки(ВнешняяОбработка, ИдентификаторКоманды); + // Запись журнала регистрации + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Запуск обработчика. Команда: %1.'"), + ИдентификаторКоманды + ); + ЗаписатьСобытиеВЖурналРегистрации(ВнешняяОбработка, ТекстСообщения); + // Запуск обработки ВыполнитьОбработкуНепосредственно(ВнешняяОбработка, ИдентификаторКоманды); - ОкончаниеРаботыОбработки(ВнешняяОбработка, ИдентификаторКоманды); + // Запись журнала регистрации + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Возврат из обработчика. Команда: %1.'"), + ИдентификаторКоманды + ); + ЗаписатьСобытиеВЖурналРегистрации(ВнешняяОбработка, ТекстСообщения); КонецПроцедуры @@ -458,7 +464,9 @@ // Функция ПолучитьДоступныеКоманды(ЭтоНазначаемыеОбработки, ПолноеИмяОбъектаМетаданных, ДляФормыОбъекта, Раздел, ВидОбработок) Экспорт - УстановитьПривилегированныйРежим(Истина); + Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда + Возврат Новый ТаблицаЗначений; + КонецЕсли; Запрос = Новый Запрос; @@ -545,7 +553,9 @@ Запрос.Параметры.Вставить("ВидОбработок", ВидОбработок); - Возврат Запрос.Выполнить().Выгрузить(); + Результат = Запрос.Выполнить().Выгрузить(); + + Возврат Результат; КонецФункции @@ -637,8 +647,8 @@ // Функция ПроверитьГлобальнаяОбработка(Вид) Экспорт - Возврат (Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка) - ИЛИ (Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет); + Возврат Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка + ИЛИ Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет; КонецФункции @@ -668,26 +678,26 @@ Процедура ВыполнитьОбработкуНепосредственно(ВнешняяОбработкаСсылка, ИдентификаторКоманды, ОбъектыНазначения = Неопределено, РезультатВыполнения = Неопределено) Экспорт - УстановитьПривилегированныйРежим(Истина); - ВнешняяОбработка = ПолучитьОбъектВнешнейОбработки(ВнешняяОбработкаСсылка); СведенияОВнешнейОбработке = ВнешняяОбработка.СведенияОВнешнейОбработке(); ВерсияБСП = Неопределено; ПередаватьПараметрыВыполненияКоманды = Ложь; - Если СведенияОВнешнейОбработке.Свойство("ВерсияБСП", ВерсияБСП) И - ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБСП, "1.2.1.4") >= 0 Тогда + Если СведенияОВнешнейОбработке.Свойство("ВерсияБСП", ВерсияБСП) + И ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияБСП, "1.2.1.4") >= 0 Тогда + ПередаватьПараметрыВыполненияКоманды = Истина; ПараметрыВыполненияКоманды = Новый Структура(); ПараметрыВыполненияКоманды.Вставить("ДополнительнаяОбработкаСсылка", ВнешняяОбработкаСсылка); + КонецЕсли; ТипОбработки = ВнешняяОбработкаСсылка.Вид; Если ТипОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка - ИЛИ ТипОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда - + ИЛИ ТипОбработки = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + Если ПередаватьПараметрыВыполненияКоманды Тогда ВнешняяОбработка.ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды); Иначе @@ -819,8 +829,6 @@ // Процедура ДобавитьКомандыВСписокСвоих(МассивКоманд) Экспорт - УстановитьПривилегированныйРежим(Истина); - Для Каждого ЭлементСтрока Из МассивКоманд Цикл Запись = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьМенеджерЗаписи(); @@ -832,16 +840,12 @@ Запись.Записать(Истина); КонецЦикла; - УстановитьПривилегированныйРежим(Ложь); - КонецПроцедуры // Функция для исключения команд дополнительных обработок из списока "своих" // Процедура УдалитьКомандыИзСпискаСвоих(МассивКоманд) Экспорт - УстановитьПривилегированныйРежим(Истина); - Для Каждого ЭлементСтрока Из МассивКоманд Цикл Запись = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьМенеджерЗаписи(); @@ -856,16 +860,12 @@ КонецЦикла; - УстановитьПривилегированныйРежим(Ложь); - КонецПроцедуры // Устанавливает доступность команды для указанных типа объекта метаданных и типа формы // Процедура УстановитьДоступностьКоманды(ПолноеИмяОбъектаМетаданных, ТипФормы, ИмяРесурса, Значение) Экспорт - УстановитьПривилегированныйРежим(Истина); - МенеджерЗаписи = РегистрыСведений.НазначениеДополнительныхОбработок.СоздатьМенеджерЗаписи(); МенеджерЗаписи.ТипОбъекта = ПолноеИмяОбъектаМетаданных; МенеджерЗаписи.ТипФормы = ТипФормы; @@ -881,8 +881,6 @@ // Процедура ЗаписатьНастройкиБыстрогоДоступа(Ссылка, ТаблицаКоманд) Экспорт - УстановитьПривилегированныйРежим(Истина); - Для Каждого ЭлементКоманда Из ТаблицаКоманд Цикл НаборЗаписей = РегистрыСведений.ПользовательскиеНастройкиДоступаКОбработкам.СоздатьНаборЗаписей(); @@ -903,117 +901,62 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции +// Проверяет интегрирована ли конфигурация с подсистемой хранилищем вариантов отчетов +// +Функция ИспользуетсяИнтеграцияСВариантамиОтчетов() Экспорт + Возврат Метаданные.ХранилищаНастроек.Найти("ХранилищеВариантовОтчетов") <> Неопределено; +КонецФункции -// Для внутреннего использования -// -Процедура УстановитьПараметрыРегламентногоЗадания(РегламентноеЗаданиеОбъект, Расписание, Использование, Ссылка, Команда) - - ПараметрыРЗ = Новый Массив; - ПараметрыРЗ.Добавить(Ссылка); - ПараметрыРЗ.Добавить(Команда.Идентификатор); - - НаименованиеРегламентногоЗадания = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Запуск обработок: %1'"), - СокрЛП(Команда.Представление) ); - - РегламентноеЗаданиеОбъект.Наименование = Лев(НаименованиеРегламентногоЗадания, 120); - РегламентноеЗаданиеОбъект.Использование = Использование; - РегламентноеЗаданиеОбъект.Параметры = ПараметрыРЗ; - - РегламентноеЗаданиеОбъект.Расписание = Расписание; - -КонецПроцедуры - -// Выполняет запись регламентного задания +// Заполняет список печатных форм из внешних источников. // // Параметры: -// Отказ - Булево - флаг отказа. Если в процессе выполнения процедуры были обнаружены ошибки, -// то флаг отказа устанавливается в значение Истина -// РегламентноеЗаданиеОбъект - объект регламентного задания, которое необходимо записать -// -Процедура ЗаписатьРегламентноеЗадание(Отказ, РегламентноеЗаданиеОбъект) +// ВнешниеПечатныеФормы - СписокЗначений: +// Значение - Строка - идентификатор печатной формы; +// Представление - Строка - название печатной формы. +// ПолноеИмяОбъектаМетаданных - Строка - полное имя объекта метаданных, для которого требуется получить список печатных форм. +// +Процедура ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных) Экспорт - УстановленноеИспользование = РегламентноеЗаданиеОбъект.Использование; + ТаблицаКоманд = ПолучитьДоступныеКоманды(Истина, ПолноеИмяОбъектаМетаданных, Истина, Неопределено, + Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма); + + Для Каждого Команда Из ТаблицаКоманд Цикл + Если Найти(Команда.Идентификатор, ",") = 0 Тогда // кроме "комплектов" + ВнешниеПечатныеФормы.Добавить(Команда.Идентификатор, Команда.Представление); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Возвращает ссылку на объект внешней печатной формы. +// +Процедура ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - // Если включено разделение, необходимо отключить использование - // разделенного регламентного задания - РегламентноеЗаданиеОбъект.Использование = Ложь; + ТаблицаКоманд = ПолучитьДоступныеКоманды(Истина, ПолноеИмяОбъектаМетаданных, Истина, Неопределено, + Перечисления.ВидыДополнительныхОтчетовИОбработок.ПечатнаяФорма); + Команда = ТаблицаКоманд.Найти(Идентификатор, "Идентификатор"); + Если Команда <> Неопределено Тогда + ВнешняяПечатнаяФормаСсылка = Команда.Ссылка; КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - - Попытка - - // записываем задание - РегламентноеЗаданиеОбъект.Записать(); - - Исключение - НСтрока = НСтр("ru = 'Произошла ошибка при сохранении регламентного задания - |Подробное описание ошибки: %1'"); - - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтрока, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения, , , , Отказ); - - Возврат; - - КонецПопытки; - - СтандартныеПодсистемыПереопределяемый.ПриЗаписиЗаданияДопОбработки(РегламентноеЗаданиеОбъект, УстановленноеИспользование); - КонецПроцедуры -// Для внутреннего использования -// -Функция ПолучитьРегламентноеЗадание(РегламентноеЗаданиеGUID) +// Проверяет наличие права добавления дополнительных отчетов и обработок. +// +Функция ПравоДобавления() Экспорт - УстановитьПривилегированныйРежим(Истина); - - РегламентноеЗаданиеОбъект = НайтиРегламентноеЗадание(РегламентноеЗаданиеGUID); - - // при необходимости создаем регл. задание - Если РегламентноеЗаданиеОбъект = Неопределено Тогда - - РегламентноеЗаданиеОбъект = РегламентныеЗадания.СоздатьРегламентноеЗадание("ЗапускДополнительныхОбработок"); - + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + Возврат РольДоступна(Метаданные.Роли.АдминистраторСистемы); + Иначе + Возврат Пользователи.РолиДоступны("ДобавлениеИзменениеДополнительныхОтчетовИОбработок"); КонецЕсли; - Возврат РегламентноеЗаданиеОбъект; - КонецФункции -// Для внутреннего использования -// -Процедура НачалоВыполненияОбработки(ДополнительнаяОбработкаСсылка, ИдентификаторКоманды) - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Запуск обработчика. Команда: %1.'"), - ИдентификаторКоманды - ); - - ЗаписатьСобытиеВЖурналРегистрации(ДополнительнаяОбработкаСсылка, ТекстСообщения); - -КонецПроцедуры - -// Для внутреннего использования -// -Процедура ОкончаниеРаботыОбработки(ДополнительнаяОбработкаСсылка, ИдентификаторКоманды) - - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Возврат из обработчика. Команда: %1.'"), - ИдентификаторКоманды - ); - - ЗаписатьСобытиеВЖурналРегистрации(ДополнительнаяОбработкаСсылка, ТекстСообщения); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции // Для внутреннего использования // @@ -1033,13 +976,14 @@ // Функция ПолучитьТаблицуЗаписей(ПользователиСДопОбработками) - ТекстЗапроса = "ВЫБРАТЬ - | ДополнительныеОтчетыИОбработки.Ссылка КАК Обработка, - | КомандыДополнительныхОтчетовИОбработок.Идентификатор КАК Идентификатор - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК КомандыДополнительныхОтчетовИОбработок - | ПО (КомандыДополнительныхОтчетовИОбработок.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка)"; + ТекстЗапроса = + "ВЫБРАТЬ + | ДополнительныеОтчетыИОбработки.Ссылка КАК Обработка, + | КомандыДополнительныхОтчетовИОбработок.Идентификатор КАК Идентификатор + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК КомандыДополнительныхОтчетовИОбработок + | ПО (КомандыДополнительныхОтчетовИОбработок.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка)"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; @@ -1061,34 +1005,33 @@ КонецЦикла; КонецЦикла; - ТекстЗапроса = "ВЫБРАТЬ - | ДополнительныеОтчетыИОбработки.Ссылка КАК Обработка, - | КомандыДополнительныхОтчетовИОбработок.Идентификатор КАК Идентификатор, - | Пользователи.Ссылка КАК Пользователь, - | ПользовательскиеНастройкиДоступаКОбработкам.Доступно КАК Доступно - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК КомандыДополнительныхОтчетовИОбработок - | ПО (КомандыДополнительныхОтчетовИОбработок.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка) - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК ПользовательскиеНастройкиДоступаКОбработкам - | ПО (ПользовательскиеНастройкиДоступаКОбработкам.ДополнительныйОтчетИлиОбработка = ДополнительныеОтчетыИОбработки.Ссылка) - | И (ПользовательскиеНастройкиДоступаКОбработкам.ИдентификаторКоманды = КомандыДополнительныхОтчетовИОбработок.Идентификатор) - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи - | ПО (Пользователи.Ссылка = ПользовательскиеНастройкиДоступаКОбработкам.Пользователь)"; + ТекстЗапроса = + "ВЫБРАТЬ + | ДополнительныеОтчетыИОбработки.Ссылка КАК Обработка, + | КомандыДополнительныхОтчетовИОбработок.Идентификатор КАК Идентификатор, + | Пользователи.Ссылка КАК Пользователь, + | ПользовательскиеНастройкиДоступаКОбработкам.Доступно КАК Доступно + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДополнительныеОтчетыИОбработки + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ДополнительныеОтчетыИОбработки.Команды КАК КомандыДополнительныхОтчетовИОбработок + | ПО (КомандыДополнительныхОтчетовИОбработок.Ссылка = ДополнительныеОтчетыИОбработки.Ссылка) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК ПользовательскиеНастройкиДоступаКОбработкам + | ПО (ПользовательскиеНастройкиДоступаКОбработкам.ДополнительныйОтчетИлиОбработка = ДополнительныеОтчетыИОбработки.Ссылка) + | И (ПользовательскиеНастройкиДоступаКОбработкам.ИдентификаторКоманды = КомандыДополнительныхОтчетовИОбработок.Идентификатор) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи + | ПО (Пользователи.Ссылка = ПользовательскиеНастройкиДоступаКОбработкам.Пользователь)"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; ИсключенияПерсональногоДоступа = Запрос.Выполнить().Выгрузить(); + ПоискСтрок = Новый Структура("Обработка, Идентификатор, Пользователь"); Для Каждого ИсключениеПерсональногоДоступа Из ИсключенияПерсональногоДоступа Цикл - - Строка = ТаблицаЗаписей.НайтиСтроки(Новый Структура("Обработка,Идентификатор,Пользователь", - ИсключениеПерсональногоДоступа.Обработка, - ИсключениеПерсональногоДоступа.Идентификатор, - ИсключениеПерсональногоДоступа.Пользователь))[0]; - - Строка.Доступно = НЕ ИсключениеПерсональногоДоступа.Доступно; // ранее это значение было исключением доступа, инвертируем его - + ЗаполнитьЗначенияСвойств(ПоискСтрок, ИсключениеПерсональногоДоступа); + Найденные = ТаблицаЗаписей.НайтиСтроки(ПоискСтрок); + Для Каждого СтрокаТаблицы Из Найденные Цикл + СтрокаТаблицы.Доступно = НЕ ИсключениеПерсональногоДоступа.Доступно; // инвертируем исключением доступа + КонецЦикла; КонецЦикла; Возврат ТаблицаЗаписей; @@ -1101,37 +1044,27 @@ Результат = Новый Массив; - ТекстЗапроса = "ВЫБРАТЬ Ссылка - |ИЗ - | Справочник.Пользователи"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; + ПроверяемыеРоли = "ИспользованиеДополнительныхОтчетовИОбработок, ДобавлениеИзменениеДополнительныхОтчетовИОбработок"; + Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Пользователи"); ВсеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - УстановитьПривилегированныйРежим(Истина); Для Каждого Пользователь Из ВсеПользователи Цикл - - Если Пользователи.РолиДоступны("ИспользованиеДополнительныхОтчетовИОбработок, - |ДобавлениеИзменениеДополнительныхОтчетовИОбработок", Пользователь) Тогда + Если Пользователи.РолиДоступны(ПроверяемыеРоли, Пользователь) Тогда Результат.Добавить(Пользователь); КонецЕсли; - КонецЦикла; - УстановитьПривилегированныйРежим(Ложь); - ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | Пользователь - |ИЗ - | РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам - |ГДЕ - | Пользователь НЕ В (&МассивПользователей)"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("МассивПользователей", Результат); + ТекстЗапроса = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | НастройкиДоступа.Пользователь + |ИЗ + | РегистрСведений.ПользовательскиеНастройкиДоступаКОбработкам КАК НастройкиДоступа + |ГДЕ + | НЕ НастройкиДоступа.Пользователь В (&УжеДобавленныеПользователи)"; + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.Параметры.Вставить("УжеДобавленныеПользователи", Результат); ПользователиВРегистре = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); Для Каждого Пользователь Из ПользователиВРегистре Цикл diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo index d051cfbaf..fce142190 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -6,5 +6,6 @@ Дополнительные отчеты и обработки true - true + true + true diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/Module.bsl new file mode 100644 index 000000000..894890ffd --- /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 60% rename from SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/ДополнительныеОтчетыИОбработкиСобытия.mdo rename to SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/ДополнительныеОтчетыИОбработкиВызовСервера.mdo index 13ad2b8d7..85934c5bc 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/ДополнительныеОтчетыИОбработкиСобытия.mdo +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиВызовСервера/ДополнительныеОтчетыИОбработкиВызовСервера.mdo @@ -1,12 +1,10 @@ - - ДополнительныеОтчетыИОбработкиСобытия + + ДополнительныеОтчетыИОбработкиВызовСервера ru - Дополнительные отчеты и обработки события + Дополнительные отчеты и обработки вызов сервера true - true - true true diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl index 095583656..f0c1a51a7 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиент/Module.bsl @@ -22,10 +22,11 @@ ОбъектыНазначения.ЗагрузитьЗначения(ПараметрКоманды); КонецЕсли; - Параметры = Новый Структура("ОбъектыНазначения, Вид, ИмяРаздела"); + Параметры = Новый Структура("ОбъектыНазначения, Вид, ИмяРаздела, РежимОткрытияОкна"); Параметры.ОбъектыНазначения = ОбъектыНазначения; Параметры.Вид = Вид; Параметры.ИмяРаздела = ИмяРаздела; + Параметры.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда // назначаемая обработка Параметры.Вставить("ИмяФормы", ПараметрыВыполненияКоманды.Источник.ИмяФормы); @@ -39,6 +40,21 @@ КонецПроцедуры +// Открывает форму дополнительного отчета с заданным вариантом. +// +// Параметры: +// Ссылка (СправочникСсылка.ДополнительныеОтчетыИОбработки) +// КлючВарианта (Строка) +// +Процедура ОткрытьВариантДополнительногоОтчета(Ссылка, КлючВарианта) Экспорт + + ИмяОтчета = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(Ссылка); + ПараметрыОткрытия = Новый Структура("КлючВарианта", КлючВарианта); + Уникальность = "ВнешнийОтчет." + ИмяОтчета + "/КлючВарианта." + КлючВарианта; + ОткрытьФорму("ВнешнийОтчет." + ИмяОтчета + ".Форма", ПараметрыОткрытия, Неопределено, Уникальность); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -55,7 +71,7 @@ // Возвращаемое значение: // (Булево) Необходимость процедуры сохрания данных формы // -Функция СохранитьДанныеПроизвольнойФормы(Отказ = Неопределено, Модифицированность) Экспорт +Функция СохранитьДанныеПроизвольнойФормы(Модифицированность, Отказ = Неопределено) Экспорт // Изменение сохраняемых данных должно устанавливать модифицированность формы Если Модифицированность <> Истина Тогда Возврат Ложь; @@ -73,20 +89,11 @@ Возврат Ложь; КонецЕсли; - ЗаголовокВопроса = НСтр("ru = '1С: Предприятие'"); - ТекстВопроса = НСтр("ru = 'Данные были изменены. Сохранить изменения?'"); + Кнопки = ?(ЭтоВебКлиент, РежимДиалогаВопрос.ДаНет, РежимДиалогаВопрос.ДаНетОтмена); + Ответ = Вопрос(ТекстВопроса, Кнопки, 60, КодВозвратаДиалога.Нет); - Кнопки = Новый СписокЗначений; - Кнопки.Добавить(1, НСтр("ru = 'Да'")); - Кнопки.Добавить(2, НСтр("ru = 'Нет'")); - Если НЕ ЭтоВебКлиент Тогда - Кнопки.Добавить(КодВозвратаДиалога.Отмена); - КонецЕсли; - - Ответ = Вопрос(ТекстВопроса, Кнопки, 60, 1, ЗаголовокВопроса); - - Если Ответ = 1 Тогда + Если Ответ = КодВозвратаДиалога.Да Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl index e0461e2b4..1d85ef0ea 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиКлиентСервер/Module.bsl @@ -58,7 +58,7 @@ // Функция ФильтрДиалоговВыбораИСохранения() Экспорт - Фильтр = НСтр("ru = 'Внешние отчеты (*.%1)|*.%1|Внешние обработки (*.%2)|*.%2'"); + Фильтр = НСтр("ru = 'Внешние отчеты и обработки (*.%1, *.%2)|*.%1;*.%2|Внешние отчеты (*.%1)|*.%1|Внешние обработки (*.%2)|*.%2'"); Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Фильтр, "erf", "epf"); Возврат Фильтр; diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl index 194ea8a61..a382d591d 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/Module.bsl @@ -41,4 +41,3 @@ КонецПроцедуры - diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/ДополнительныеОтчетыИОбработкиПереопределяемый.mdo b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/ДополнительныеОтчетыИОбработкиПереопределяемый.mdo index 08a33ef21..5961cde58 100644 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/ДополнительныеОтчетыИОбработкиПереопределяемый.mdo +++ b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиПереопределяемый/ДополнительныеОтчетыИОбработкиПереопределяемый.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/Module.bsl b/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/Module.bsl deleted file mode 100644 index 4bba44228..000000000 --- a/SSL/src/CommonModules/ДополнительныеОтчетыИОбработкиСобытия/Module.bsl +++ /dev/null @@ -1,59 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Дополнительные отчеты и обработки" -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Переопределяет стандартное поведение при загрузке данных. -// Реквизит РегламентноеЗаданиеGUID табличной части Команды не переносится, -// т.к. связан с регламентным заданием текущей базы. -// -Процедура ПриПолученииДанных(ЭлементДанных) Экспорт - // фильтр по типу объекта - Если ТипЗнч(ЭлементДанных) <> Тип("СправочникОбъект.ДополнительныеОтчетыИОбработки") Тогда - Возврат; - КонецЕсли; - - // фильтр по виду дополнительного отчета / обработки - Если ЭлементДанных.Вид <> Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительнаяОбработка Тогда - Возврат; - КонецЕсли; - - Таблица = ПолучитьУникальныеИдентификаторыРегламентныхЗаданий(ЭлементДанных.Ссылка); - - Для Каждого СтрокаКоманда Из ЭлементДанных.Команды Цикл - МассивНайденных = Таблица.НайтиСтроки(Новый Структура("Идентификатор", СтрокаКоманда.Идентификатор)); - Если МассивНайденных.Количество() = 0 Тогда - СтрокаКоманда.РегламентноеЗаданиеGUID = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); - Иначе - СтрокаКоманда.РегламентноеЗаданиеGUID = МассивНайденных[0].РегламентноеЗаданиеGUID; - КонецЕсли; - КонецЦикла; -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Для внутреннего использования -// -Функция ПолучитьУникальныеИдентификаторыРегламентныхЗаданий(ДополнительнаяОбработкаСсылка) - ТекстЗапроса = - "ВЫБРАТЬ - | Команды.Ссылка КАК Ссылка, - | Команды.Идентификатор КАК Идентификатор, - | Команды.РегламентноеЗаданиеGUID КАК РегламентноеЗаданиеGUID - |ИЗ - | Справочник.ДополнительныеОтчетыИОбработки.Команды КАК Команды - |ГДЕ - | Команды.Ссылка = &Ссылка"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("Ссылка", ДополнительнаяОбработкаСсылка); - - Таблица = Запрос.Выполнить().Выгрузить(); - - Возврат Таблица; -КонецФункции diff --git a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl index 13c778ecf..92fc3d6f5 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрации/Module.bsl @@ -50,6 +50,9 @@ ВыгрузитьЖурналРегистрации(СобытияЖурнала, Отбор, , , КоличествоСобытий); СобытияЖурнала.Колонки.Добавить("НомерРисунка", Новый ОписаниеТипов("Число")); СобытияЖурнала.Колонки.Добавить("АдресДанных", Новый ОписаниеТипов("Строка")); + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + СобытияЖурнала.Колонки.Добавить("ПредставлениеРазделенияДанныхСеанса", Новый ОписаниеТипов("Строка")); + КонецЕсли; ПравилаУстановкиРисунка = Неопределено; @@ -77,6 +80,15 @@ КонецЕсли; СобытиеЖурнала.ПредставлениеМетаданных = СписокПредставленийМетаданных; + // Преобразование массива "ПредставлениеРазделенияДанныхСеанса" в список значений + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПредставлениеРазделенияДанныхСеанса = СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса; + СписокРеквизитовРазделенияДанных = Новый СписокЗначений; + СписокРеквизитовРазделенияДанных.ЗагрузитьЗначения(ПредставлениеРазделенияДанныхСеанса); + СобытиеЖурнала.ПредставлениеРазделенияДанныхСеанса = СписокРеквизитовРазделенияДанных; + КонецЕсли; + // Обработка данных специальных событий Если СобытиеЖурнала.Событие = "_$Access$_.Access" Тогда СобытиеЖурнала.АдресДанных = ПоместитьВоВременноеХранилище(СобытиеЖурнала.Данные, УникальныйИдентификатор); @@ -309,30 +321,43 @@ КонецЕсли; КонецЕсли; - Для Каждого ЭлементСписка Из СписокОграничений Цикл - Если Не ПустаяСтрока(Ограничение) Тогда - Ограничение = Ограничение + ", "; + Если ИмяОграничения = "Событие" + И СписокОграничений.Количество() > 5 Тогда + ПредставлениеОтбора = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'События (%1)'"), СписокОграничений.Количество()); + Иначе + + Для Каждого ЭлементСписка Из СписокОграничений Цикл + + Если Не ПустаяСтрока(Ограничение) Тогда + Ограничение = Ограничение + ", "; + КонецЕсли; + + Если ВРег(ИмяОграничения) = ВРег("Сеанс") + ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень") + И ПустаяСтрока(Ограничение) Тогда + + Ограничение = НСтр("ru = '[ИмяОграничения]: [Значение]'"); + Ограничение = СтрЗаменить(Ограничение, "[Значение]", ЭлементСписка.Значение); + Ограничение = СтрЗаменить(Ограничение, "[ИмяОграничения]", ИмяОграничения); + + ИначеЕсли ВРег(ИмяОграничения) = ВРег("Сеанс") + ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")Тогда + Ограничение = Ограничение + ЭлементСписка.Значение; + Иначе + Ограничение = Ограничение + ЭлементСписка.Представление; + КонецЕсли; + + КонецЦикла; + + Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда + ПредставлениеОтбора = ПредставлениеОтбора + "; "; КонецЕсли; - Если ВРег(ИмяОграничения) = ВРег("Сеанс") - ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень") - И ПустаяСтрока(Ограничение) Тогда - Ограничение = НСтр("ru = '[ИмяОграничения]: [Значение]'"); - Ограничение = СтрЗаменить(Ограничение, "[Значение]", ЭлементСписка.Значение); - Ограничение = СтрЗаменить(Ограничение, "[ИмяОграничения]", ИмяОграничения); - ИначеЕсли ВРег(ИмяОграничения) = ВРег("Сеанс") - ИЛИ ВРег(ИмяОграничения) = ВРег("Уровень")Тогда - Ограничение = Ограничение + ЭлементСписка.Значение; - Иначе - Ограничение = Ограничение + ЭлементСписка.Представление; - КонецЕсли; - КонецЦикла; - - Если Не ПустаяСтрока(ПредставлениеОтбора) Тогда - ПредставлениеОтбора = ПредставлениеОтбора + "; "; + + ПредставлениеОтбора = ПредставлениеОтбора + Ограничение; + КонецЕсли; - ПредставлениеОтбора = ПредставлениеОтбора + Ограничение; - КонецЕсли; КонецПроцедуры // ДобавитьОграничениеВПредставлениеОтбора diff --git a/SSL/src/CommonModules/ЖурналРегистрации/ЖурналРегистрации.mdo b/SSL/src/CommonModules/ЖурналРегистрации/ЖурналРегистрации.mdo index cea256f56..586f17a07 100644 --- a/SSL/src/CommonModules/ЖурналРегистрации/ЖурналРегистрации.mdo +++ b/SSL/src/CommonModules/ЖурналРегистрации/ЖурналРегистрации.mdo @@ -7,5 +7,5 @@ true true - true + true diff --git a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl index aae1154ea..854c8964b 100644 --- a/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ЖурналРегистрацииКлиент/Module.bsl @@ -71,6 +71,10 @@ ПараметрыФормы.Вставить("ОсновнойIPПорт", Данные.ОсновнойIPПорт); ПараметрыФормы.Вставить("ВспомогательныйIPПорт", Данные.ВспомогательныйIPПорт); + Если Данные.Свойство("ПредставлениеРазделенияДанныхСеанса") Тогда + ПараметрыФормы.Вставить("ПредставлениеРазделенияДанныхСеанса", Данные.ПредставлениеРазделенияДанныхСеанса); + КонецЕсли; + Если ЗначениеЗаполнено(Данные.АдресДанных) Тогда ПараметрыФормы.Вставить("АдресДанных", Данные.АдресДанных); КонецЕсли; diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl new file mode 100644 index 000000000..2c0be2d81 --- /dev/null +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/Module.bsl @@ -0,0 +1,312 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Защита персональных данных" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Процедура выполняет подготовку формы настройки системы +// для управления областями персональных данных, +// а также считывает текущее состояние использования события "Доступ. Доступ" +// +// В форме должны быть созданы: +// - реквизит типа дерево значений, имя которого - "ОбластиПерсональныхДанных", +// - таблица формы, связанная с этим реквизитом, +// имя которой так же - "ОбластиПерсональныхДанных", +// +// Параметры: +// Форма - форма настройки системы +// +Процедура ПриСозданииФормыНастройкиРегистрацииСобытий(Форма) Экспорт + + Если Не ФормаНастройкиПодготовленаКорректно(Форма) Тогда + Возврат; + КонецЕсли; + + ИмяДереваОбластей = ИмяРеквизитаДеревоОбластей(); + + // Добавление колонок реквизита "ОбластиПерсональныхДанных" + ДобавляемыеРеквизиты = Новый Массив; + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Использование", Новый ОписаниеТипов("Булево"), ИмяДереваОбластей)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Имя", Новый ОписаниеТипов("Строка"), ИмяДереваОбластей)); + ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ИмяДереваОбластей)); + + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + // Добавляем поля формы + ГруппаПолей = Форма.Элементы.Добавить(ИмяДереваОбластей + "ГруппаИспользование", Тип("ГруппаФормы"), Форма.Элементы[ИмяДереваОбластей]); + ГруппаПолей.Группировка = ГруппировкаКолонок.ВЯчейке; + + ФлажокИспользование = Форма.Элементы.Добавить(ИмяДереваОбластей + "Использование", Тип("ПолеФормы"), ГруппаПолей); + ФлажокИспользование.ПутьКДанным = ИмяДереваОбластей + ".Использование"; + ФлажокИспользование.Вид = ВидПоляФормы.ПолеФлажка; + + ПолеПредставление = Форма.Элементы.Добавить(ИмяДереваОбластей + "Представление", Тип("ПолеФормы"), ГруппаПолей); + ПолеПредставление.ПутьКДанным = ИмяДереваОбластей + ".Представление"; + ПолеПредставление.Вид = ВидПоляФормы.ПолеНадписи; + + // Настройка элементов управления + Форма.Элементы[ИмяДереваОбластей].ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет; + Форма.Элементы[ИмяДереваОбластей].ИзменятьСоставСтрок = Ложь; + Форма.Элементы[ИмяДереваОбластей].ИзменятьПорядокСтрок = Ложь; + Форма.Элементы[ИмяДереваОбластей].Шапка = Ложь; + Форма.Элементы[ИмяДереваОбластей].НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; + Форма.Элементы[ИмяДереваОбластей].ГоризонтальныеЛинии = Ложь; + Форма.Элементы[ИмяДереваОбластей].ВертикальныеЛинии = Ложь; + Форма.Элементы[ИмяДереваОбластей].РежимВыделенияСтроки = РежимВыделенияСтрокиТаблицы.Строка; + + ЗначениеВДанныеФормы(ПолучитьИспользованиеСобытияДоступ(), Форма[ИмяДереваОбластей]); + +КонецПроцедуры + +// Процедура выполняет преобразование данных формы настройки системы +// и установку использования события доступ для отмеченных областей. +// +// В форме должны быть созданы: +// - реквизит типа дерево значений, имя которого - "ОбластиПерсональныхДанных", +// - таблица формы, связанная с этим реквизитом, +// имя которой так же - "ОбластиПерсональныхДанных", +// +// Параметры: +// Форма - форма настройки системы +// +Процедура ПриЗаписиФормыНастройкиРегистрацииСобытий(Форма) Экспорт + + Если Не ФормаНастройкиПодготовленаКорректно(Форма) Тогда + Возврат; + КонецЕсли; + + ДеревоОбластей = ДанныеФормыВЗначение(Форма[ИмяРеквизитаДеревоОбластей()], Тип("ДеревоЗначений")); + + ОбластиИспользования = Новый Массив; + + ОтмеченныеСтроки = ДеревоОбластей.Строки.НайтиСтроки(Новый Структура("Использование", Истина), Истина); + Для Каждого ОтмеченнаяСтрока Из ОтмеченныеСтроки Цикл + ОбластиИспользования.Добавить(ОтмеченнаяСтрока.Имя); + КонецЦикла; + + УстановитьИспользованиеСобытияДоступ(ОбластиИспользования.Количество() > 0, ОбластиИспользования); + +КонецПроцедуры + +// Процедура устанавливает режим использования события "Доступ. Доступ" +// журнала регистрации, контроль которого предусмотрен требованиями +// Федерального закона от 27.07.2006 N152-ФЗ "О персональных данных" +// и подзаконных актов. +// Использование события устанавливается для областей персональных данных, +// сведения о которых заполняются в потребителе. +// +// Параметры: +// Использование - булево, если Истина - события будут регистрироваться +// ОбластиИспользования - массив областей персональных данных, +// для которых производится установка использования (необязательный) +// +Процедура УстановитьИспользованиеСобытияДоступ(Использование, ОбластиИспользования = Неопределено) Экспорт + + // Таблица сведений о персональных данных + ТаблицаСведений = СведенияОПерсональныхДанных(); + + ИспользованиеОбластейДанных = Новый Соответствие; + + // Составление описания использования события + ОписанияИспользования = Новый Массив; + Для Каждого СтрокаСведений Из ТаблицаСведений Цикл + // Добавление области данных в набор + ИспользованиеОбластейДанных.Вставить(СтрокаСведений.ОбластьДанных); + Если ОбластиИспользования <> Неопределено + И ОбластиИспользования.Найти(СтрокаСведений.ОбластьДанных) = Неопределено Тогда + // Если указаны области данных, то устаналиваем использование только для них + Продолжить; + КонецЕсли; + ИспользованиеОбластейДанных[СтрокаСведений.ОбластьДанных] = Использование; + // Составление описания использования события + ПоляРегистрации = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСведений.ПоляРегистрации); + Для Индекс = 0 По ПоляРегистрации.ВГраница() Цикл + // Если требуется составить массив полей + Если Найти(ПоляРегистрации[Индекс], "|") > 0 Тогда + ПоляРегистрации[Индекс] = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПоляРегистрации[Индекс], "|"); + КонецЕсли; + КонецЦикла; + ОписаниеИспользованияСобытияДоступа = Новый ОписаниеИспользованияСобытияДоступЖурналаРегистрации(СтрокаСведений.Объект); + ОписаниеИспользованияСобытияДоступа.ПоляДоступа = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСведений.ПоляДоступа); + ОписаниеИспользованияСобытияДоступа.ПоляРегистрации = ПоляРегистрации; + ОписанияИспользования.Добавить(ОписаниеИспользованияСобытияДоступа); + КонецЦикла; + + // "Включение" ("Выключение") использования события "Доступ. Доступ" + // журнала регистрации по созданному описанию + ИспользованиеСобытияДоступ = Новый ИспользованиеСобытияЖурналаРегистрации; + ИспользованиеСобытияДоступ.Использование = Использование; + ИспользованиеСобытияДоступ.ОписаниеИспользования = ОписанияИспользования; + + // Сохранение использования областей данных + ОбластиДанныхНаборЗаписей = РегистрыСведений.ОбластиПерсональныхДанных.СоздатьНаборЗаписей(); + Для Каждого КлючИЗначение Из ИспользованиеОбластейДанных Цикл + СтрокаНабора = ОбластиДанныхНаборЗаписей.Добавить(); + СтрокаНабора.ИмяОбласти = КлючИЗначение.Ключ; + СтрокаНабора.ИспользованиеСобытийЖурналаРегистрации = КлючИЗначение.Значение; + КонецЦикла; + + НачатьТранзакцию(); + Попытка + УстановитьИспользованиеСобытияЖурналаРегистрации("_$Access$_.Access", ИспользованиеСобытияДоступ); + // Запись областей персональных данных + ОбластиДанныхНаборЗаписей.Записать(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Функция составляет дерево используемых областей персональных данных +// +// Параметры: +// нет +// +// Возвращаемое значение +// Дерево значений - дерево областей данных с колонками: +// Имя - строка, идентификатор области персональных данных +// Представление - строка, пользовательское представление области данных +// Использование - булево, признак того, что для области данных +// установлена регистрация события "Доступ. Доступ" +// +Функция ПолучитьИспользованиеСобытияДоступ() Экспорт + + // Создание дерева областей + ДеревоОбластейДанных = ДеревоОбластейПерсональныхДанных(); + + // Расстановка пометок использования по данным регистра + ОбластиДанныхНаборЗаписей = РегистрыСведений.ОбластиПерсональныхДанных.СоздатьНаборЗаписей(); + ОбластиДанныхНаборЗаписей.Прочитать(); + + Для Каждого СтрокаНабора Из ОбластиДанныхНаборЗаписей Цикл + СтрокаДерева = ДеревоОбластейДанных.Строки.Найти(СтрокаНабора.ИмяОбласти, "Имя", Истина); + Если СтрокаДерева <> Неопределено Тогда + СтрокаДерева.Использование = СтрокаНабора.ИспользованиеСобытийЖурналаРегистрации; + КонецЕсли; + КонецЦикла; + + Возврат ДеревоОбластейДанных; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция СведенияОПерсональныхДанных() + + // Таблица сведений о персональных данных + ТаблицаСведений = Новый ТаблицаЗначений; + ТаблицаСведений.Колонки.Добавить("Объект", Новый ОписаниеТипов("Строка")); + ТаблицаСведений.Колонки.Добавить("ПоляРегистрации", Новый ОписаниеТипов("Строка")); + ТаблицаСведений.Колонки.Добавить("ПоляДоступа", Новый ОписаниеТипов("Строка")); + ТаблицаСведений.Колонки.Добавить("ОбластьДанных", Новый ОписаниеТипов("Строка")); + + // Заполнение таблицы сведений потребителями + ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений); + + Возврат ТаблицаСведений; + +КонецФункции + +Функция ОбластиПерсональныхДанных() + + // Соответствие идентификаторов областей и их пользовательских представлений + ОбластиДанных = Новый ТаблицаЗначений; + ОбластиДанных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + ОбластиДанных.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + ОбластиДанных.Колонки.Добавить("Родитель", Новый ОписаниеТипов("Строка")); + + // Заполнение областей потребителями + ЗащитаПерсональныхДанныхПереопределяемый.ЗаполнитьОбластиПерсональныхДанных(ОбластиДанных); + + Возврат ОбластиДанных; + +КонецФункции + +Функция ФормаНастройкиПодготовленаКорректно(Форма) + + ИмяДереваОбластей = ИмяРеквизитаДеревоОбластей(); + + // Поиск реквизита формы + РеквизитФормыДеревоОбластей = Неопределено; + РеквизитыФормы = Форма.ПолучитьРеквизиты(); + Для Каждого РеквизитФормы Из РеквизитыФормы Цикл + Если РеквизитФормы.Имя = ИмяДереваОбластей Тогда + РеквизитФормыДеревоОбластей = РеквизитФормы; + Прервать; + КонецЕсли; + КонецЦикла; + + Если РеквизитФормыДеревоОбластей = Неопределено + Или Форма.Элементы.Найти(ИмяДереваОбластей) = Неопределено Тогда + // В форме не обнаружен реквизит для дерева областей + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с деревом областей персональных данных +// + +Функция ИмяРеквизитаДеревоОбластей() + Возврат "ОбластиПерсональныхДанных"; +КонецФункции + +Функция ДеревоОбластейПерсональныхДанных() + + ДеревоОбластейДанных = Новый ДеревоЗначений; + ДеревоОбластейДанных.Колонки.Добавить("Использование", Новый ОписаниеТипов("Булево")); + ДеревоОбластейДанных.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка")); + ДеревоОбластейДанных.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + + ОбластиДанных = ОбластиПерсональныхДанных(); + + // Заполнение дерева областей + Для Каждого ОбластьДанных Из ОбластиДанных Цикл + ДобавитьОбластьДанныхВДерево(ДеревоОбластейДанных, ОбластиДанных, ОбластьДанных); + КонецЦикла; + + // Если области данных не определены для всех сведений + // или для отдельных - добавляем область данных по умолчанию + ТаблицаСведений = СведенияОПерсональныхДанных(); + Если ОбластиДанных.Количество() = 0 + Или ТаблицаСведений.НайтиСтроки(Новый Структура("ОбластьДанных", "")).Количество() > 0 Тогда + ДобавитьОбластьДанныхВДерево(ДеревоОбластейДанных, ОбластиДанных, Новый Структура("Имя, Представление, Родитель", "", НСтр("ru = 'Персональные данные'"))); + КонецЕсли; + + Возврат ДеревоОбластейДанных; + +КонецФункции + +Функция ДобавитьОбластьДанныхВДерево(ДеревоОбластей, ОбластиДанных, ОбластьДанных) + + // Поиск области в дереве значений + НайденнаяОбласть = ДеревоОбластей.Строки.Найти(ОбластьДанных.Имя, "Имя", Истина); + Если НайденнаяОбласть <> Неопределено Тогда + Возврат НайденнаяОбласть; + КонецЕсли; + + // Добавление в "корень" дерева + Родитель = ДеревоОбластей; + Если ЗначениеЗаполнено(ОбластьДанных.Родитель) Тогда + ОбластьРодитель = ОбластиДанных.Найти(ОбластьДанных.Родитель, "Имя"); + Если ОбластьРодитель <> Неопределено Тогда + Родитель = ДобавитьОбластьДанныхВДерево(ДеревоОбластей, ОбластиДанных, ОбластьРодитель); + КонецЕсли; + КонецЕсли; + + // Добавление области + НоваяОбласть = Родитель.Строки.Добавить(); + НоваяОбласть.Имя = ОбластьДанных.Имя; + НоваяОбласть.Представление = ОбластьДанных.Представление; + + Возврат НоваяОбласть; + +КонецФункции diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo new file mode 100644 index 000000000..1adfd5daa --- /dev/null +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo @@ -0,0 +1,9 @@ + + + ЗащитаПерсональныхДанных + + ru + Защита персональных данных + + true + diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl index 04a842e26..dc7bc7034 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/Module.bsl @@ -7,6 +7,38 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Процедура обеспечивает сбор сведений о хранении данных, +// относящихся к персональным +// +// Параметры: +// ТаблицаСведений - таблица значений с полями: +// Объект - строка, содержащая полное имя объекта метаданных, +// ПоляРегистрации - строка, в которой перечислены имена полей регистрации, +// отдельные поля регистрации отделяются запятой, +// альтернативные - символом "|", +// ПоляДоступа - строка, в которой перечислены через запятую имена полей доступа +// ОбластьДанных - строка с идентификатором области данных, необязательно для заполнения +// +Процедура ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений) Экспорт + + + +КонецПроцедуры + +// Процедура обеспечивает составление коллекции областей персональных данных +// +// Параметры: +// ОбластиПерсональныхДанных - таблица значений с полями: +// Имя - идентификатор области данных +// Представление - пользовательское представление области данных +// Родитель - идентификатор родительской области данных +// +Процедура ЗаполнитьОбластиПерсональныхДанных(ОбластиПерсональныхДанных) Экспорт + + + +КонецПроцедуры + // Процедура вызывается при заполнении формы "Согласие на обработку персональных данных" // данными, переданных в качестве параметров, субъектов // @@ -32,4 +64,4 @@ -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/ЗащитаПерсональныхДанныхПереопределяемый.mdo b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/ЗащитаПерсональныхДанныхПереопределяемый.mdo index 90983a98c..f5bccfd65 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/ЗащитаПерсональныхДанныхПереопределяемый.mdo +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПереопределяемый/ЗащитаПерсональныхДанныхПереопределяемый.mdo @@ -7,5 +7,4 @@ true true - true diff --git a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/ЗащитаПерсональныхДанныхПовтИсп.mdo b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/ЗащитаПерсональныхДанныхПовтИсп.mdo index 99651f896..da63a43a0 100644 --- a/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/ЗащитаПерсональныхДанныхПовтИсп.mdo +++ b/SSL/src/CommonModules/ЗащитаПерсональныхДанныхПовтИсп/ЗащитаПерсональныхДанныхПовтИсп.mdo @@ -7,6 +7,6 @@ true true - true + true DuringSession diff --git a/SSL/src/CommonModules/ИнформационныйЦентрКлиент/Module.bsl b/SSL/src/CommonModules/ИнформационныйЦентрКлиент/Module.bsl new file mode 100644 index 000000000..df5df0fc2 --- /dev/null +++ b/SSL/src/CommonModules/ИнформационныйЦентрКлиент/Module.bsl @@ -0,0 +1,58 @@ + +// Открывает форму отображения отдельной новости. +// +// Параметры: +// ВнешняяСсылка - Строка - внешняя ссылка. +// Идентификатор - УникальныйИдентификатор - идентификатор новости. +// +Процедура ПоказатьНовость(ВнешняяСсылка, Идентификатор) Экспорт + + Если Не ПустаяСтрока(ВнешняяСсылка) Тогда + ПерейтиПоНавигационнойСсылке(ВнешняяСсылка); + Возврат; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ОткрытьНовость"); + ПараметрыФормы.Вставить("Идентификатор", Идентификатор); + ОткрытьФорму("ОбщаяФорма.ОтображениеНовостей", ПараметрыФормы); + +КонецПроцедуры + +// Открывает форму отображения всех новостей. +// +// +Процедура ПоказатьВсеНовости() Экспорт + + ПараметрыФормы = Новый Структура("ОткрытьВсеНовости"); + ОткрытьФорму("ОбщаяФорма.ОтображениеНовостей", ПараметрыФормы); + +КонецПроцедуры + +// Возвращает размер в менабайтах, размер вложения не больше 25 Мегабайта. +// +// Возвращаемое значение: +// Число - размер вложений в менабайтах. +// +Функция МаксимальныйРазмерВложенийДляОтправкиСообщенияВПоддержкуСервиса() Экспорт + + Возврат 20; + +КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Информационный центр". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Открывает форму по отправке сообщения получателю. +// +Процедура ОткрытьФормуОтправкиСообщенияВТехподдержку(ИспользоватьРазделениеПоОбластямДанных, ПараметрыСообщения = Неопределено) Экспорт + + Если ИспользоватьРазделениеПоОбластямДанных Тогда + ОткрытьФорму("ОбщаяФорма.ОтправкаСообщенияВТехподдержку", ПараметрыСообщения); + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/ВариантыОтчетовКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ИнформационныйЦентрКлиент/ИнформационныйЦентрКлиент.mdo similarity index 54% rename from SSL/src/CommonModules/ВариантыОтчетовКлиентПереопределяемый/ВариантыОтчетовКлиентПереопределяемый.mdo rename to SSL/src/CommonModules/ИнформационныйЦентрКлиент/ИнформационныйЦентрКлиент.mdo index 31b5492ff..4850a35af 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..bf5ed9d9e --- /dev/null +++ b/SSL/src/CommonModules/ИнформационныйЦентрСервер/Module.bsl @@ -0,0 +1,383 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Информационный центр". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Описывает структуру полезной ссылки. +// +// Возвращаемое значение: +// Структура - структура с полями, которые описывают полезную ссылку: +// Имя - Строка - наименование полезной ссылки. +// Адрес - Строка - адрес полезной ссылки. +// Пояснение - Строка - пояснение полезной ссылки. +// ДействиеПоНажатию - Строка - процедура-обработчик для полезной ссылки. +// +// Примечание: +// Поле "ДействиеПоНажатию" можно не устанавливать, если подразумевается переход по ссылке. +// +Функция НовоеОписаниеПолезнойСсылки() Экспорт + + Возврат Новый Структура("Имя, Адрес, Пояснение, ДействиеПоНажатию"); + +КонецФункции + +// Описывает структуру статьи. +// +// Возвращаемое значение: +// Структура - структура с полями, которые описывают статью. +// +Функция НовоеОписаниеСтатьи() Экспорт + + Возврат Новый Структура("Имя, Адрес"); + +КонецФункции + +// Описывает ссылку сайта для для публикации приложений через Интернет. +// +// Возвращаемое значение: +// Структура - структура с полями, которые описывают ссылку сайта. +// +Функция НовоеОписаниеСсылкиСайтаДляПубликацииПриложенийЧерезИнтернет() Экспорт + + Возврат Новый Структура("Имя, Адрес"); + +КонецФункции + +// Определяет список всех новостей. +// +// Возвращаемое значение: +// ТаблицаЗначений с полями: +// Наименование - Строка - заголовок новости. +// Идентификатор - УникальныйИдентификатор - идентификатор новости. +// Критичность - Число - критичность новости. +// ВнешняяСсылка - Строка - адрес внешней ссылки. +// +Функция СформироватьСписокВсехНовостей() Экспорт + + ЗапросВсехНовостей = Новый Запрос; + ЗапросВсехНовостей.УстановитьПараметр("ТипИнформацииНовость", ОпределитьСсылкуТипаИнформации("Новость")); + ЗапросВсехНовостей.УстановитьПараметр("ТипИнформацииНедоступность", ОпределитьСсылкуТипаИнформации("Недоступность")); + ЗапросВсехНовостей.УстановитьПараметр("ПометкаУдаления",Ложь); + + ЗапросВсехНовостей.Текст = "ВЫБРАТЬ + | ОбщиеДанныеИнформационногоЦентра.Наименование КАК Наименование, + | ОбщиеДанныеИнформационногоЦентра.Критичность КАК Критичность, + | ОбщиеДанныеИнформационногоЦентра.Идентификатор КАК Идентификатор, + | ОбщиеДанныеИнформационногоЦентра.ВнешняяСсылка КАК ВнешняяСсылка + |ИЗ + | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра + |ГДЕ + | (ОбщиеДанныеИнформационногоЦентра.ТипИнформации = &ТипИнформацииНовость + | ИЛИ ОбщиеДанныеИнформационногоЦентра.ТипИнформации = &ТипИнформацииНедоступность) + | И ОбщиеДанныеИнформационногоЦентра.ПометкаУдаления = &ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности УБЫВ"; + + Возврат ЗапросВсехНовостей.Выполнить().Выгрузить(); + +КонецФункции + +// Формирует список новостей. +// +// Параметры: +// ТаблицаНовостей - ТаблицаЗначений с колонками: +// Наименование - Строка - заголовок новости. +// Идентификатор - УникальныйИдентификатор - идентификатор новости. +// Критичность - Число - критичность новости. +// ВнешняяСсылка - Строка - адрес внешней ссылки. +// КоличествоВыводимыхНовостей - Число - Количество выводимых новостей на рабочем столе. +// +Процедура СформироватьСписокНовостейНаРабочийСтол(ТаблицаНовостей, Знач КоличествоВыводимыхНовостей = 3) Экспорт + + КритичныеНовости = СформироватьАктуальныеКритичныеНовости(); + + КоличествоКритичныхНовостей = ?(КритичныеНовости.Количество() >= КоличествоВыводимыхНовостей, КоличествоВыводимыхНовостей, КритичныеНовости.Количество()); + + // Добавление новостей в общую таблицу. + Если КоличествоКритичныхНовостей > 0 Тогда + Для Итерация = 0 по КоличествоКритичныхНовостей - 1 Цикл + Новость = ТаблицаНовостей.Добавить(); + ЗаполнитьЗначенияСвойств(Новость, КритичныеНовости.Получить(Итерация)); + КонецЦикла; + КонецЕсли; + + Если КоличествоКритичныхНовостей = КоличествоВыводимыхНовостей Тогда + Возврат; + КонецЕсли; + + НеКритичныеНовости = СформироватьАктуальныеНеКритичныеНовости(); + + КоличествоВыводимыхНеКритичныхНовостей = КоличествоВыводимыхНовостей - КоличествоКритичныхНовостей; + + КоличествоВыводимыхНеКритичныхНовостей = ?(НеКритичныеНовости.Количество() < КоличествоВыводимыхНеКритичныхНовостей, НеКритичныеНовости.Количество(), КоличествоВыводимыхНеКритичныхНовостей); + + Если НеКритичныеНовости.Количество() > 0 Тогда + Для Итерация = 0 по КоличествоВыводимыхНеКритичныхНовостей - 1 Цикл + Новость = ТаблицаНовостей.Добавить(); + ЗаполнитьЗначенияСвойств(Новость, НеКритичныеНовости.Получить(Итерация)); + КонецЦикла; + КонецЕсли; + + Возврат; + +КонецПроцедуры + +// Возвращает список актуальных критичных новостей (критичность > 5). +// +// Возвращаемое значение: +// ТаблицаЗначений с полями ТаблицыЗначений "ТаблицаНовостей" в процедуре СформироватьСписокНовостейНаРабочийСтол. +// +Функция СформироватьАктуальныеКритичныеНовости() + + ЗапросКритичныхНовостей = Новый Запрос; + + ЗапросКритичныхНовостей.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); + ЗапросКритичныхНовостей.УстановитьПараметр("КритичностьПять", 5); + ЗапросКритичныхНовостей.УстановитьПараметр("ТипИнформацииНовость", ОпределитьСсылкуТипаИнформации("Новость")); + ЗапросКритичныхНовостей.УстановитьПараметр("ТипИнформацииНедоступность", ОпределитьСсылкуТипаИнформации("Недоступность")); + ЗапросКритичныхНовостей.УстановитьПараметр("ПустаяДата", '00010101'); + ЗапросКритичныхНовостей.УстановитьПараметр("ПометкаУдаления", Ложь); + + ЗапросКритичныхНовостей.Текст = "ВЫБРАТЬ + | ОбщиеДанныеИнформационногоЦентра.Наименование КАК Наименование, + | ОбщиеДанныеИнформационногоЦентра.Критичность КАК Критичность, + | ОбщиеДанныеИнформационногоЦентра.Идентификатор КАК Идентификатор, + | ОбщиеДанныеИнформационногоЦентра.ВнешняяСсылка КАК ВнешняяСсылка + |ИЗ + | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра + |ГДЕ + | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности <= &ТекущаяДата + | И ОбщиеДанныеИнформационногоЦентра.Критичность > &КритичностьПять + | И (ОбщиеДанныеИнформационногоЦентра.ТипИнформации = &ТипИнформацииНовость + | ИЛИ ОбщиеДанныеИнформационногоЦентра.ТипИнформации = &ТипИнформацииНедоступность) + | И (ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности >= &ТекущаяДата + | ИЛИ ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности = &ПустаяДата) + | И ОбщиеДанныеИнформационногоЦентра.ПометкаУдаления = &ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | Критичность УБЫВ, + | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности УБЫВ"; + + Возврат ЗапросКритичныхНовостей.Выполнить().Выгрузить(); + +КонецФункции + +// Возвращает список актуальных некритичных новостей (критичность <= 5). +// +// Возвращаемое значение: +// ТаблицаЗначений с полями ТаблицыЗначений "ТаблицаНовостей" в процедуре СформироватьСписокНовостейНаРабочийСтол. +// +Функция СформироватьАктуальныеНеКритичныеНовости() + + ЗапросНеКритичныхНовостей = Новый Запрос; + + ЗапросНеКритичныхНовостей.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()); + ЗапросНеКритичныхНовостей.УстановитьПараметр("КритичностьПять", 5); + ЗапросНеКритичныхНовостей.УстановитьПараметр("ТипИнформацииНовость", ОпределитьСсылкуТипаИнформации("Новость")); + ЗапросНеКритичныхНовостей.УстановитьПараметр("ТипИнформацииНедоступность", ОпределитьСсылкуТипаИнформации("Недоступность")); + ЗапросНеКритичныхНовостей.УстановитьПараметр("ПустаяДата", '00010101'); + ЗапросНеКритичныхНовостей.УстановитьПараметр("ПометкаУдаления", Ложь); + + ЗапросНеКритичныхНовостей.Текст = "ВЫБРАТЬ + | ОбщиеДанныеИнформационногоЦентра.Наименование КАК Наименование, + | ОбщиеДанныеИнформационногоЦентра.Критичность КАК Критичность, + | ОбщиеДанныеИнформационногоЦентра.Идентификатор КАК Идентификатор, + | ОбщиеДанныеИнформационногоЦентра.ВнешняяСсылка КАК ВнешняяСсылка + |ИЗ + | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра + |ГДЕ + | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности <= &ТекущаяДата + | И ОбщиеДанныеИнформационногоЦентра.Критичность <= &КритичностьПять + | И (ОбщиеДанныеИнформационногоЦентра.ТипИнформации = &ТипИнформацииНовость + | ИЛИ ОбщиеДанныеИнформационногоЦентра.ТипИнформации = &ТипИнформацииНедоступность) + | И (ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности >= &ТекущаяДата + | ИЛИ ОбщиеДанныеИнформационногоЦентра.ДатаОкончанияАктуальности = &ПустаяДата) + | И ОбщиеДанныеИнформационногоЦентра.ПометкаУдаления = &ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | ОбщиеДанныеИнформационногоЦентра.ДатаНачалаАктуальности УБЫВ"; + + Возврат ЗапросНеКритичныхНовостей.Выполнить().Выгрузить(); + +КонецФункции + +// Возвращает ссылку на элемент справочника "ТипыИнформацииИнформационногоЦентра" по Наименованию +// +// Параметры: +// Наименование - Строка - наименования типа новости. +// +// Возвращаемое значение: +// СправочникСсылка.ТипыИнформацииИнформационногоЦентра - тип информации. +// +Функция ОпределитьСсылкуТипаИнформации(знач Наименование) Экспорт + + УстановитьПривилегированныйРежим(Истина); + Наименование = СокрЛП(Наименование); + + НайденнаяСсылка = Справочники.ТипыИнформацииИнформационногоЦентра.НайтиПоНаименованию(Наименование); + + Если НайденнаяСсылка.Пустая() Тогда + ТипИнформации = Справочники.ТипыИнформацииИнформационногоЦентра.СоздатьЭлемент(); + ТипИнформации.Наименование = Наименование; + ТипИнформации.Записать(); + + Возврат ТипИнформации.Ссылка; + Иначе + Возврат НайденнаяСсылка; + КонецЕсли; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Получение параметров для отправки сообщений пользователя + +// Возвращает адрес электронной почты текущего пользователя. +// +// Возвращаемое значение: +// Строка - адрес электронной почты текущего пользователя. +// +Функция ОпределитьАдресЭлектроннойПочтыПользователя() Экспорт + + ТекущийПользователь = Пользователи.ТекущийПользователь(); + + Для каждого СтрокаКонтактнойИнформации из ТекущийПользователь.КонтактнаяИнформация Цикл + Если Не ПустаяСтрока(СтрокаКонтактнойИнформации.АдресЭП) Тогда + Возврат СтрокаКонтактнойИнформации.АдресЭП; + КонецЕсли; + КонецЦикла; + + Возврат ""; + +КонецФункции + +// Возвращает шаблон текста в техподдержку. +// +// Возвращаемое значение: +// Строка - шаблон текста в техподдержку. +// +Функция СформироватьШаблонТекстаВТехПоддержку() Экспорт + + СисИнфо = Новый СистемнаяИнформация; + + Шаблон = НСтр("ru = 'Здравствуйте! + | + |ПозицияКурсора + | + |С уважением, %1.'"); + Шаблон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, + ПараметрыСеанса.ТекущийПользователь.ПолноеНаименование()); + + Возврат Шаблон; + +КонецФункции + +// Возвращает текст технических параметров. +// +// Возвращаемое значение: +// Соответствие: +// Ключ - строка - наименование вложения. +// Значение - ДвоичныеДанные - файл вложения. +// +Функция СформироватьXMLСТехническимиПараметрами() Экспорт + + МассивПараметров = ОпределитьМассивТехническихПараметров(); + + ФайлXML = ПолучитьИмяВременногоФайла("xml"); + + ТекстXML = Новый ЗаписьXML; + ТекстXML.ОткрытьФайл(ФайлXML); + ТекстXML.ЗаписатьОбъявлениеXML(); + ЗаписатьПараметрыВXML(ТекстXML, МассивПараметров); + ТекстXML.Закрыть(); + + ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ФайлXML); + + Попытка + УдалитьФайлы(ФайлXML); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Информационный центр. Отправка сообщения в техподдержку. Не удалось удалить временный файл технических параметров.'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Вложение = Новый СписокЗначений; + Вложение.Добавить(ДвоичныеДанныеФайла, ПолучитьИмяФайлаТехническихПараметровДляСообщенияВтехПоддержку(), Истина); + Возврат Вложение; + +КонецФункции + +// Возвращает массив технических параметров. +// +// Возвращаемое значение: +// Массив - массив структуры технических параметров с полями: +// Имя - Строка - имя параметра. +// Значение - Строка - значение параметра. +// +Функция ОпределитьМассивТехническихПараметров() + + СисИнфо = Новый СистемнаяИнформация; + + МассивПараметров = Новый Массив; + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ИмяКонфигурации", Метаданные.Имя)); + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ВерсияКонфигурации",Метаданные.Версия)); + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ВерсияПлатформы", СисИнфо.ВерсияПриложения)); + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "ОбластьДанных", Строка(Формат(ПараметрыСеанса.ОбластьДанныхЗначение, "ЧГ=0")))); + МассивПараметров.Добавить(Новый Структура("Имя, Значение", "Логин", ИмяПользователя())); + + Возврат МассивПараметров; + +КонецФункции + +// Записывает параметры в XML. +// +// Параметры: +// ТекстXML - ЗаписьXML - запись XML. +// МассивПараметров - массив параметров. +// +Процедура ЗаписатьПараметрыВXML(ТекстXML, МассивПараметров) + + ТекстXML.ЗаписатьНачалоЭлемента("parameters"); + Для Итерация = 0 по МассивПараметров.Количество() - 1 Цикл + ТекстXML.ЗаписатьНачалоЭлемента("parameter"); + Элемент = МассивПараметров.Получить(Итерация); + ТекстXML.ЗаписатьАтрибут(Элемент.Имя, Элемент.Значение); + ТекстXML.ЗаписатьКонецЭлемента(); + КонецЦикла; + ТекстXML.ЗаписатьКонецЭлемента(); + +КонецПроцедуры + +// Возвращает строку с в нешней ссылкой. +// +// Параметры: +// Идентификатор - УникальныйИдентификатор - уникальный идентификатор новости. +// +// Возвращаемое значение: +// Строка - адрес внешенго ресурса. +// +Функция ПолучитьВнешнююСсылкуПоИдентификаторуНовости(Идентификатор) Экспорт + + УстановитьПривилегированныйРежим(Истина); + СсылкаНаДанные = Справочники.ОбщиеДанныеИнформационногоЦентра.НайтиПоРеквизиту("Идентификатор", Идентификатор); + Если СсылкаНаДанные.Пустая() Тогда + Возврат ""; + КонецЕсли; + + Возврат СсылкаНаДанные.ВнешняяСсылка; + +КонецФункции + +// Возвращает имя файла, в котором находятся технические параметры +// для службы техподдержки. +// +// Возвращаемое значение: +// Строка - имя файла. +// +Функция ПолучитьИмяФайлаТехническихПараметровДляСообщенияВтехПоддержку() Экспорт + + Возврат "TechnicalParameters.xml"; + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ИнформационныйЦентрСервер/ИнформационныйЦентрСервер.mdo b/SSL/src/CommonModules/ИнформационныйЦентрСервер/ИнформационныйЦентрСервер.mdo new file mode 100644 index 000000000..76efa0544 --- /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..11234b391 --- /dev/null +++ b/SSL/src/CommonModules/ИнформационныйЦентрСерверПереопределяемый/Module.bsl @@ -0,0 +1,116 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Информационный центр". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Определяет массив полезных ссылок для вывода на форме информационного центра на рабочем столе. +// +// Параметры: +// МассивСсылок - массив - массив ссылок. +// +// Любая ссылка это структура с полями, которые указаны в функции +// НовоеОписаниеПолезнойСсылки() общего модуля ИнформационныйЦентрСервер. +// +// Пример для добавления ссылки: +// +// ОписаниеСсылки = ИнформационныйЦентрСервер.НовоеОписаниеСсылки(); +// ОписаниеСсылки.Имя = НСтр("ru = 'БУХ 1С'"); +// ОписаниеСсылки.Адрес = "http://v8.1c.ru/cnt.jsp/:tk_buh8:/http://buh.ru/"; +// ОписаниеСсылки.Пояснение = НСтр("ru = 'Новости бухучета и налогообложения'"); +// МассивСсылок.Добавить(ОписаниеСсылки); +// +// ОписаниеСсылки = ИнформационныйЦентрСервер.НовоеОписаниеСсылки(); +// ОписаниеСсылки.Имя = НСтр("ru = 'Законодательство'"); +// ОписаниеСсылки.Адрес = "http://v8.1c.ru/cnt.jsp/:tk_buh8:/http://v8.1c.ru/lawmonitor/"; +// ОписаниеСсылки.Пояснение = НСтр("ru = 'Изменение законодательства в 1С'"); +// МассивСсылок.Добавить(ОписаниеСсылки); +// +// Пример для удаления ссылки: +// +// МассивСсылок.Удалить(0); +// +Процедура ОпределитьМассивПолезныхСсылок(МассивСсылок) Экспорт + +КонецПроцедуры + +// Определяет массив полезных статей для вывода на форме информационного центра на рабочем столе. +// +// Параметры: +// МассивСтатей - массив - массив ссылок. +// +// Любая ссылка это Структура с полями: +// Имя - Строка - наименование ссылки. +// Адрес - Строка - адрес ресурса. +// +// Пример: +// +// ОписаниеСтатьи = ИнформационныйЦентрСервер.НовоеОписаниеСтатьи(); +// ОписаниеСтатьи.Имя = НСтр("ru = 'Ввод начальных остатков'"); +// ОписаниеСтатьи.Адрес = "http://its.1c.ru/bmk/bp20/enterprise_initial_data"; +// МассивСтатей.Добавить(ОписаниеСтатьи); +// +// ОписаниеСтатьи = ИнформационныйЦентрСервер.НовоеОписаниеСтатьи(); +// ОписаниеСтатьи.Имя = НСтр("ru = 'Закрытие месяца'"); +// ОписаниеСтатьи.Адрес = "http://its.1c.ru/bmk/bp20/enterprise_month_finishing"; +// МассивСтатей.Добавить(ОписаниеСтатьи); +// +Процедура ОпределитьМассивСтатей(МассивСтатей) Экспорт + + + +КонецПроцедуры + +// Определяет основную страницу сайта для публикации приложений через сеть Интернет. +// +// Параметры: +// СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет - Структура. +// Поля Структуры указаны в функции ИнформационныйЦентрСервер.НовоеОписаниеСсылкиСайтаДляПубликацииПриложенийЧерезИнтернет. +// +Процедура ОпределитьСсылкуДляПубликацииПриложенийЧерезИнтернет(СсылкаСайтаДляПубликацииПриложенийЧерезИнтернет) Экспорт + +КонецПроцедуры + +// Определяет ссылку для перехода к приложениям абонента. +// +// Параметры: +// СсылкаНаПриложения - Строка - адрес. +// +Процедура ОпределитьАдресСсылкиДляПереходаКПриложениямАбонента(СсылкаНаПриложения) Экспорт + +КонецПроцедуры + +// Определяет отображать или нет Новости в модели сервиса в форме "ИнформационныйЦентр". +// +// Параметры: +// ВидимостьНовостейВМоделиСервиса - Булево - Истина, если отображать, Ложь - иначе. +// +Процедура ОпределитьВидимостьНовостейВМоделиСервиса(ВидимостьНовостейВМоделиСервиса) Экспорт + +КонецПроцедуры + +// Определяет отображать или нет Поиск информации в форме "ИнформационныйЦентр". +// +// Параметры: +// ВидимостьПоискаИнформации - Булево - Истина, если отображать, Ложь - иначе. +// +Процедура ОпределитьВидимостьПоискаИнформации(ВидимостьПоискаИнформации) Экспорт + +КонецПроцедуры + +// Определяет ссылку поиска информации. +// Например сайт ИТС. +// +// Параметры: +// СсылкаПоискаИнформации - Строка - адрес. +// +// Примечание: +// Структура должна быть следующе: +// Если к адресу ссылки добавить строку посика, и перейти по данному адресу, то +// в результате мы должны перейти форму результатов поиска. +// +Процедура ОпределитьСсылкуПоискаИнформации(СсылкаПоискаИнформации) Экспорт + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиентПереопределяемый/ПолнотекстовыйПоискКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ИнформационныйЦентрСерверПереопределяемый/ИнформационныйЦентрСерверПереопределяемый.mdo similarity index 54% rename from SSL/src/CommonModules/ПолнотекстовыйПоискКлиентПереопределяемый/ПолнотекстовыйПоискКлиентПереопределяемый.mdo rename to SSL/src/CommonModules/ИнформационныйЦентрСерверПереопределяемый/ИнформационныйЦентрСерверПереопределяемый.mdo index 2ef8012f5..8275a8fc7 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 d791abed0..ee02889a3 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl +++ b/SSL/src/CommonModules/КалендарныеГрафики/Module.bsl @@ -436,11 +436,11 @@ Обработчик.Процедура = "КалендарныеГрафики.СоздатьКалендарьПятидневкаРоссийскойФедерации"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.0.1.10"; + Обработчик.Версия = "2.1.1.16"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьПроизводственныеКалендари"; Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.0.1.10"; + Обработчик.Версия = "2.1.1.16"; Обработчик.Процедура = "КалендарныеГрафики.ОбновитьДанныеПроизводственныхКалендарей"; КонецПроцедуры diff --git a/SSL/src/CommonModules/КалендарныеГрафики/КалендарныеГрафики.mdo b/SSL/src/CommonModules/КалендарныеГрафики/КалендарныеГрафики.mdo index f39e7c49b..c63049178 100644 --- a/SSL/src/CommonModules/КалендарныеГрафики/КалендарныеГрафики.mdo +++ b/SSL/src/CommonModules/КалендарныеГрафики/КалендарныеГрафики.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/КомандыРаботыСБизнесПроцессамиКлиент/Module.bsl b/SSL/src/CommonModules/КомандыРаботыСБизнесПроцессамиКлиент/Module.bsl index 3db3cd63e..2cf175f79 100644 --- a/SSL/src/CommonModules/КомандыРаботыСБизнесПроцессамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/КомандыРаботыСБизнесПроцессамиКлиент/Module.bsl @@ -17,25 +17,29 @@ Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда Если ПараметрКоманды.Количество() = 0 Тогда - Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс'")); + Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; Если ПараметрКоманды.Количество() = 1 И ТипЗнч(ПараметрКоманды[0]) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс'")); + Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; - ЧислоЗадач = БизнесПроцессыИЗадачиВызовСервера.ПолучитьЧислоНевыполненныхЗадачБизнесПроцессов(ПараметрКоманды); + ЧислоЗадач = БизнесПроцессыИЗадачиВызовСервера.КоличествоНевыполненныхЗадачБизнесПроцессов(ПараметрКоманды); Если ПараметрКоманды.Количество() = 1 Тогда - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' - |Будет выполнена остановка бизнес-процесса ""%1"" и всех его невыполненных задач (%2). Продолжить?'"), - Строка(ПараметрКоманды[0]), ЧислоЗадач); + Если ЧислоЗадач > 0 Тогда + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Будет выполнена остановка бизнес-процесса ""%1"" и всех его невыполненных задач (%2). Продолжить?'"), + Строка(ПараметрКоманды[0]), ЧислоЗадач); + Иначе + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Будет выполнена остановка бизнес-процесса ""%1"". Продолжить?'"), + Строка(ПараметрКоманды[0])); + КонецЕсли; Иначе ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' - |Будет выполнена остановка бизнес-процессов (%1) и всех их невыполненных задач (%2). Продолжить?'"), + НСтр("ru = 'Будет выполнена остановка бизнес-процессов (%1) и всех их невыполненных задач (%2). Продолжить?'"), ПараметрКоманды.Количество(), ЧислоЗадач); КонецЕсли; @@ -46,11 +50,16 @@ Возврат; КонецЕсли; - ЧислоЗадач = БизнесПроцессыИЗадачиВызовСервера.ПолучитьЧислоНевыполненныхЗадачБизнесПроцесса(ПараметрКоманды); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' - |Будет выполнена остановка бизнес-процесса ""%1"" и всех его невыполненных задач (%2). Продолжить?'"), - Строка(ПараметрКоманды), ЧислоЗадач); + ЧислоЗадач = БизнесПроцессыИЗадачиВызовСервера.КоличествоНевыполненныхЗадачБизнесПроцесса(ПараметрКоманды); + Если ЧислоЗадач > 0 Тогда + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Будет выполнена остановка бизнес-процесса ""%1"" и всех его невыполненных задач (%2). Продолжить?'"), + Строка(ПараметрКоманды), ЧислоЗадач); + Иначе + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Будет выполнена остановка бизнес-процесса ""%1"". Продолжить?'"), + Строка(ПараметрКоманды)); + КонецЕсли; КонецЕсли; @@ -67,14 +76,14 @@ БизнесПроцессыИЗадачиВызовСервера.ОстановитьБизнесПроцессы(ПараметрКоманды); Если ПараметрКоманды.Количество() = 1 Тогда - Состояние(НСтр("ru = 'Остановка бизнес-процесса успешно завершена.'")); + Состояние(НСтр("ru = 'Бизнес-процесс остановлен.'")); Иначе - Состояние(НСтр("ru = 'Остановка бизнес-процессов успешно завершена.'")); + Состояние(НСтр("ru = 'Бизнес-процессы остановлены.'")); КонецЕсли; Иначе Состояние(НСтр("ru = 'Идет остановка бизнес-процесса. Пожалуйста подождите...'")); БизнесПроцессыИЗадачиВызовСервера.ОстановитьБизнесПроцесс(ПараметрКоманды); - Состояние(НСтр("ru = 'Остановка бизнес-процесса успешно завершена.'")); + Состояние(НСтр("ru = 'Бизнес-процесс остановлен.'")); КонецЕсли; Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда @@ -100,6 +109,22 @@ КонецПроцедуры +// Отмечает указанный бизнес-процесс как остановленный. +// Предназначена для вызова из формы бизнес-процесса. +// +Процедура ОстановитьБизнесПроцессИзФормыОбъекта(Форма) Экспорт + + Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияБизнесПроцессов.Остановлен"); + Форма.Записать(); + ПоказатьОповещениеПользователя( + НСтр("ru = 'Бизнес-процесс остановлен'"), + ПолучитьНавигационнуюСсылку(Форма.Объект.Ссылка), + Строка(Форма.Объект.Ссылка), + БиблиотекаКартинок.Информация32); + ОповеститьОбИзменении(Форма.Объект.Ссылка); + +КонецПроцедуры + // Отмечает указанный бизнес-процесс как активный // Процедура СделатьАктивным(Знач ПараметрКоманды) Экспорт @@ -111,39 +136,36 @@ Если ТипЗнч(ПараметрКоманды) = Тип("Массив") Тогда Если ПараметрКоманды.Количество() = 0 Тогда - Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс'")); + Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; Если ПараметрКоманды.Количество() = 1 И ТипЗнч(ПараметрКоманды[0]) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс'")); + Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; - ЧислоЗадач = БизнесПроцессыИЗадачиВызовСервера.ПолучитьЧислоНевыполненныхЗадачБизнесПроцессов(ПараметрКоманды); + ЧислоЗадач = БизнесПроцессыИЗадачиВызовСервера.КоличествоНевыполненныхЗадачБизнесПроцессов(ПараметрКоманды); Если ПараметрКоманды.Количество() = 1 Тогда ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' - |Бизнес-процесс ""%1"" и все его задачи (%2) будут сделаны активными. Продолжить?'"), + НСтр("ru = 'Бизнес-процесс ""%1"" и все его задачи (%2) будут сделаны активными. Продолжить?'"), Строка(ПараметрКоманды[0]), ЧислоЗадач); Иначе ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' - |Бизнес-процессы (%1) и их задачи (%2) будут сделаны активными. Продолжить?'"), + НСтр("ru = 'Бизнес-процессы (%1) и их задачи (%2) будут сделаны активными. Продолжить?'"), ПараметрКоманды.Количество(), ЧислоЗадач); КонецЕсли; Иначе Если ТипЗнч(ПараметрКоманды) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда - Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс'")); + Предупреждение(НСтр("ru= 'Не выбран ни один бизнес-процесс.'")); Возврат; КонецЕсли; - ЧислоЗадач = БизнесПроцессыИЗадачиВызовСервера.ПолучитьЧислоНевыполненныхЗадачБизнесПроцесса(ПараметрКоманды); + ЧислоЗадач = БизнесПроцессыИЗадачиВызовСервера.КоличествоНевыполненныхЗадачБизнесПроцесса(ПараметрКоманды); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = ' - |Бизнес-процесс ""%1"" и все его задачи (%2) будут сделаны активными. Продолжить?'"), + НСтр("ru = 'Бизнес-процесс ""%1"" и все его задачи (%2) будут сделаны активными. Продолжить?'"), Строка(ПараметрКоманды), ЧислоЗадач); КонецЕсли; @@ -196,6 +218,22 @@ КонецПроцедуры +// Отмечает указанный бизнес-процесс как активный. +// Предназначена для вызова из формы бизнес-процесса. +// +Процедура ПродолжитьБизнесПроцессИзФормыОбъекта(Форма) Экспорт + + Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияБизнесПроцессов.Активен"); + Форма.Записать(); + ПоказатьОповещениеПользователя( + НСтр("ru = 'Бизнес-процесс сделан активным'"), + ПолучитьНавигационнуюСсылку(Форма.Объект.Ссылка), + Строка(Форма.Объект.Ссылка), + БиблиотекаКартинок.Информация32); + ОповеститьОбИзменении(Форма.Объект.Ссылка); + +КонецПроцедуры + // Отмечает указанные задачи как принятые к исполнению // Процедура ПринятьЗадачиКИсполнению(Знач МассивЗадач) Экспорт @@ -287,45 +325,6 @@ КонецПроцедуры -// Отмечает указанный бизнес-процесс как остановленный. -// Предназначена для вызова из формы бизнес-процесса. -// -Процедура ОстановитьБизнесПроцессИзФормыОбъекта(Форма) Экспорт - - Если Форма.Объект.Завершен Тогда - - Предупреждение(НСтр("ru = 'Нельзя остановить завершенный бизнес-процесс.'")); - Возврат; - - КонецЕсли; - - Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияБизнесПроцессов.Остановлен"); - Форма.Записать(); - ПоказатьОповещениеПользователя( - НСтр("ru = 'Бизнес-процесс остановлен'"), - ПолучитьНавигационнуюСсылку(Форма.Объект.Ссылка), - Строка(Форма.Объект.Ссылка), - БиблиотекаКартинок.Информация32); - ОповеститьОбИзменении(Форма.Объект.Ссылка); - -КонецПроцедуры - -// Отмечает указанный бизнес-процесс как активный. -// Предназначена для вызова из формы бизнес-процесса. -// -Процедура ПродолжитьБизнесПроцессИзФормыОбъекта(Форма) Экспорт - - Форма.Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияБизнесПроцессов.Активен"); - Форма.Записать(); - ПоказатьОповещениеПользователя( - НСтр("ru = 'Бизнес-процесс сделан активным'"), - ПолучитьНавигационнуюСсылку(Форма.Объект.Ссылка), - Строка(Форма.Объект.Ссылка), - БиблиотекаКартинок.Информация32); - ОповеститьОбИзменении(Форма.Объект.Ссылка); - -КонецПроцедуры - // Устанавливает доступность команд принятия к исполнению // Процедура ОбновитьДоступностьКомандПринятияКИсполнению(Форма) Экспорт diff --git a/SSL/src/CommonModules/КомандыРаботыСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/КомандыРаботыСФайламиКлиент/Module.bsl index 2b165e937..26d48ea86 100644 --- a/SSL/src/CommonModules/КомандыРаботыСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/КомандыРаботыСФайламиКлиент/Module.bsl @@ -1,3 +1,8 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// + // Сохраняет отредактированный файл в ИБ и снимает с него блокировку Процедура ЗакончитьРедактирование( ПараметрКоманды, @@ -213,12 +218,12 @@ Функция СформироватьПодписьФайла(ДанныеФайла, ДанныеПодписи) Экспорт Если НЕ ДанныеФайла.Редактирует.Пустая() Тогда - Предупреждение(ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла()); + Предупреждение(ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла()); Возврат Ложь; КонецЕсли; Если ДанныеФайла.Зашифрован Тогда - Предупреждение(ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла()); + Предупреждение(ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла()); Возврат Ложь; КонецЕсли; @@ -266,7 +271,7 @@ МассивСтруктурСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Ложь); - ОтпечатокЛичногоСертификатаДляШифрования = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ОтпечатокЛичногоСертификатаДляШифрования; + ОтпечатокЛичногоСертификатаДляШифрования = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ОтпечатокЛичногоСертификатаДляШифрования; // отпечаток сохраненный в ХранилищеНастроек мог устареть - сертификат могли уже удалить Если ОтпечатокЛичногоСертификатаДляШифрования <> Неопределено И НЕ ПустаяСтрока(ОтпечатокЛичногоСертификатаДляШифрования) Тогда diff --git a/SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/Module.bsl b/SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/Module.bsl deleted file mode 100644 index 8a2d66db9..000000000 --- a/SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/Module.bsl +++ /dev/null @@ -1,57 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Контроль журнала регистрации". -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Обработчик регламентного задания КонтрольОшибокВЖурналеРегистрации. -Процедура ОбработкаРегламентногоЗадания_КонтрольОшибокВЖурналеРегистрации() Экспорт - - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - - ИмяСобытия = НСтр("ru = 'Контроль журнала регистрации'"); - - ЗаписьЖурналаРегистрации( - ИмяСобытия, - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Запуск'") - ); - - Попытка - Обработки.КонтрольЖурналаРегистрации.СформироватьОтчетПоОшибкамИПослатьОтчет(); - ЗаписьЖурналаРегистрации( - ИмяСобытия, - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Успешное завершение'") - ); - Исключение - ЗаписьЖурналаРегистрации( - ИмяСобытия, - УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) - ); - КонецПопытки; - -КонецПроцедуры - -// Возвращает адресатов получения отчета по контролю журнала регистрации. -Функция ПолучитьАдресатовПолученияОтчетаПоЖурналуРегистрации() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат Константы.АдресатыПолученияОтчетаПоЖурналуРегистрации.Получить(); - -КонецФункции - -// Устанавливает адресатов получения отчета по контролю журнала регистрации. -Процедура УстановитьАдресатовПолученияОтчетаПоЖурналуРегистрации(Адресаты) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Константы.АдресатыПолученияОтчетаПоЖурналуРегистрации.Установить(Адресаты); - -КонецПроцедуры diff --git a/SSL/src/CommonModules/КурсыВалютВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/КурсыВалютВМоделиСервиса/Module.bsl new file mode 100644 index 000000000..ff1bc4a93 --- /dev/null +++ b/SSL/src/CommonModules/КурсыВалютВМоделиСервиса/Module.bsl @@ -0,0 +1,494 @@ +//////////////////////////////////////////////////////////////////////////////// +// Модуль получения курсов валют +// +//////////////////////////////////////////////////////////////////////////////// + + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Загрузить полный список курсов за все время +// +Процедура ЗагрузитьКурсы() Экспорт + + Дескрипторы = ПоставляемыеДанные.ДескрипторыПоставляемыхДанныхИзМенеджера("КурсыВалют"); + + Если Дескрипторы.Descriptor.Количество() < 1 Тогда + ВызватьИсключение(НСтр("ru = 'В менеджере сервиса отсутствуют данные вида ""КурсыВалют""'")); + КонецЕсли; + + Курсы = ПоставляемыеДанные.СсылкиПоставляемыхДанныхИзКэша("КурсыОднойВалюты"); + Для каждого Курс Из Курсы Цикл + ПоставляемыеДанные.УдалитьПоставляемыеДанныеИзКэша(Курс); + КонецЦикла; + + ПоставляемыеДанные.ЗагрузитьИОбработатьДанные(Дескрипторы.Descriptor[0]); + +КонецПроцедуры + + +// Вызывается после загрузки данных в область +// Обновляет курсы валют из поставляемых данных +// +Процедура ОбновитьКурсыВалют() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | Валюты.Код + |ИЗ + | Справочник.Валюты КАК Валюты + |ГДЕ + | Валюты.ЗагружаетсяИзИнтернета = ИСТИНА"; + Выборка = Запрос.Выполнить().Выбрать(); + + //Копируем курсы. Это необходимо делать синхронно, т.к. за вызовом ОбновитьКурсыВалют + //следует обновление ИБ, которое пытается заблокировать базу. Копирование курсов - + //длительный процесс, который в асинхронном режиме может начаться в произвольный момент + //и помешать блокировке. + Пока Выборка.Следующий() Цикл + КопироватьКурсыВалюты(Выборка.Код); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ ПОЛУЧЕНИЯ ПОСТАВЛЯЕМЫХ ДАННЫХ + +// Регистрирует обработчики поставляемых данных за день и за все время +// +Процедура ЗарегистрироватьОбработчикиПоставляемыхДанных(Знач Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.ВидДанных = "КурсыВалютЗаДень"; + Обработчик.КодОбработчика = "КурсыВалютЗаДень"; + Обработчик.Обработчик = КурсыВалютВМоделиСервиса; + + Обработчик = Обработчики.Добавить(); + Обработчик.ВидДанных = "КурсыВалют"; + Обработчик.КодОбработчика = "КурсыВалют"; + Обработчик.Обработчик = КурсыВалютВМоделиСервиса; + +КонецПроцедуры + +// Вызывается при получении уведомления о новых данных. +// В теле следует проверить, необходимы ли эти данные приложению, +// и если да - установить флажок Загружать +// +// Параметры: +// Дескриптор - ОбъектXDTO Descriptor. +// Загружать - булево, возвращаемое +// +Процедура ДоступныНовыеДанные(Знач Дескриптор, Загружать) Экспорт + + Если Дескриптор.DataType = "КурсыВалютЗаДень" Тогда + Загружать = Истина; + ИначеЕсли Дескриптор.DataType = "КурсыВалют" Тогда + Если ПоставляемыеДанные.СсылкиПоставляемыхДанныхИзКэша("КурсыОднойВалюты").Количество() = 0 Тогда + Загружать = Истина; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Вызывается после вызова ДоступныНовыеДанные, позволяет разобрать данные. +// +// Параметры: +// Дескриптор - ОбъектXDTO Дескриптор. +// ПутьКФайлу - строка. Полное имя извлеченного файла. Файл будет автоматически удален +// после завершения процедуры. +// +Процедура ОбработатьНовыеДанные(Знач Дескриптор, Знач ПутьКФайлу) Экспорт + + Если Дескриптор.DataType = "КурсыВалютЗаДень" Тогда + ОбработатьПоставляемыеКурсыЗаДень(Дескриптор, ПутьКФайлу); + ИначеЕсли Дескриптор.DataType = "КурсыВалют" Тогда + ОбработатьПоставляемыеКурсы(Дескриптор, ПутьКФайлу); + КонецЕсли; + +КонецПроцедуры + +// Вызывается при отмене обработки данных в случае сбоя +// +Процедура ОбработкаДанныхОтменена(Знач Дескриптор) Экспорт + + ПоставляемыеДанные.ОбластьОбработана(Дескриптор.FileGUID, "КурсыВалютЗаДень", Неопределено); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Знач Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.1.7"; + Обработчик.Процедура = "КурсыВалютВМоделиСервиса.ПреобразованиеСвязейВалют"; + Обработчик.Опциональный = Истина; + +КонецПроцедуры + +// Вызывается при обновлении с прошлых версий, где не выставлялся флажок ЗагружаетсяИзИнтернета +// +Процедура ПреобразованиеСвязейВалют() Экспорт + Перем Запрос, Выборка, НаборЗаписей, Запись; + Перем КлассификаторXML, КлассификаторТаблица, Валюта, НайденнаяСтрока; + + // Проставляем флаг "ЗагружаетсяИзИнтернета" + + КлассификаторXML = Справочники.Валюты.ПолучитьМакет("ОбщероссийскийКлассификаторВалют").ПолучитьТекст(); + КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные; + КлассификаторТаблица.Индексы.Добавить("Code"); + + Выборка = Справочники.Валюты.Выбрать(); + Пока Выборка.Следующий() Цикл + Валюта = Выборка.ПолучитьОбъект(); + НайденнаяСтрока = КлассификаторТаблица.Найти(Валюта.Код, "Code"); + Если НайденнаяСтрока <> Неопределено И НайденнаяСтрока.RBCLoading = "истина" Тогда + Валюта.ЗагружаетсяИзИнтернета = Истина; + Валюта.Записать(); + КонецЕсли; + КонецЦикла; + + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Сериализация/десеривализации файла курсов + +// Записывает файл в формате поставляемых данных +// +// Параметры: +// ТаблицаКурсов - ТаблицаЗначений с колонками Код, Дата, Кратность, Курс +// Файл - Строка или ЗаписьТекста +// +Процедура ЗаписатьТаблицуКурсов(Знач ТаблицаКурсов, Знач Файл) + + Если ТипЗнч(Файл) = Тип("Строка") Тогда + ЗаписьТекста = Новый ЗаписьТекста(Файл); + Иначе + ЗаписьТекста = Файл; + КонецЕсли; + + Для каждого СтрокаТаблицы Из ТаблицаКурсов Цикл + + КурсXML = СтрЗаменить( + СтрЗаменить( + СтрЗаменить( + СтрЗаменить("", + "%1", СтрокаТаблицы.Код), + "%2", Лев(СериализаторXDTO.XMLСтрока(СтрокаТаблицы.Дата), 10)), + "%3", СериализаторXDTO.XMLСтрока(СтрокаТаблицы.Кратность)), + "%4", СериализаторXDTO.XMLСтрока(СтрокаТаблицы.Курс)); + + ЗаписьТекста.ЗаписатьСтроку(КурсXML); + КонецЦикла; + + Если ТипЗнч(Файл) = Тип("Строка") Тогда + ЗаписьТекста.Закрыть(); + КонецЕсли; + +КонецПроцедуры + +// Читает файл в формате поставляемых данных +// +// Параметры: +// ПутьКФайлу - Строка, имя файла +// ИскатьДубликаты - Булево, сворачивает записи с одинаковой датой +// +// Возвращаемое значение +// ТаблицаЗначений с колонками Код, Дата, Кратность, Курс +// +Функция ПрочитатьТаблицуКурсов(Знач ПутьКФайлу, Знач ИскатьДубликаты = Ложь) + + Попытка + + ТипДанныхКурса = ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/SuppliedData/CurrencyRates", "Rate"); + ТаблицаКурсов = Новый ТаблицаЗначений(); + ТаблицаКурсов.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200))); + ТаблицаКурсов.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); + ТаблицаКурсов.Колонки.Добавить("Кратность", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(9, 0))); + ТаблицаКурсов.Колонки.Добавить("Курс", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(20, 4))); + + Чтение = Новый ЧтениеТекста(ПутьКФайлу); + ТекущаяСтрока = Чтение.ПрочитатьСтроку(); + Пока ТекущаяСтрока <> Неопределено Цикл + + ЧтениеXML = Новый ЧтениеXML(); + ЧтениеXML.УстановитьСтроку(ТекущаяСтрока); + Курс = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипДанныхКурса); + + Если ИскатьДубликаты Тогда + Для каждого Дубликат Из ТаблицаКурсов.НайтиСтроки(Новый Структура("Дата", Курс.Date)) Цикл + ТаблицаКурсов.Удалить(Дубликат); + КонецЦикла; + КонецЕсли; + + ЗаписьКурсовВалют = ТаблицаКурсов.Добавить(); + ЗаписьКурсовВалют.Код = Курс.Code; + ЗаписьКурсовВалют.Дата = Курс.Date; + ЗаписьКурсовВалют.Кратность = Курс.Factor; + ЗаписьКурсовВалют.Курс = Курс.Rate; + + ТекущаяСтрока = Чтение.ПрочитатьСтроку(); + КонецЦикла; + Чтение.Закрыть(); + + ТаблицаКурсов.Индексы.Добавить("Код"); + Возврат ТаблицаКурсов; + + Исключение + Чтение.Закрыть(); + ВызватьИсключение; + КонецПопытки; + +КонецФункции + +// Вызывается, когда получены данные вида "КурсыВалют" +// +// Параметры: +// Дескриптор - ОбъектXDTO Descriptor. +// ПутьКФайлу - строка. Полное имя извлеченного файла. +// +Процедура ОбработатьПоставляемыеКурсы(Знач Дескриптор, Знач ПутьКФайлу) + + ТаблицаКурсов = ПрочитатьТаблицуКурсов(ПутьКФайлу); + ТаблицаКурсов.Индексы.Добавить("Код"); + + // Разбиваем на файлы по валюте и записываем в базу + ТаблицаКодов = ТаблицаКурсов.Скопировать( , "Код"); + ТаблицаКодов.Свернуть("Код"); + Для каждого СтрокаКода Из ТаблицаКодов Цикл + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ЗаписатьТаблицуКурсов(ТаблицаКурсов.НайтиСтроки(Новый Структура("Код", СтрокаКода.Код)), ИмяВременногоФайла); + + Дескриптор = Новый Структура("ВидДанных, ДатаДобавления, ИдентификаторФайла, Характеристики", + "КурсыОднойВалюты", ТекущаяУниверсальнаяДата(), Новый УникальныйИдентификатор, Новый Массив); + Дескриптор.Характеристики.Добавить(Новый Структура("Код, Значение, Ключевая", "Валюта", СтрокаКода.Код, Истина)); + + ПоставляемыеДанные.СохранитьПоставляемыеДанныеВКэш(Дескриптор, ИмяВременногоФайла); + Попытка + УдалитьФайлы(ИмяВременногоФайла); + Исключение + КонецПопытки; + + КонецЦикла; + + ОбластиДляОбновления = ПоставляемыеДанные.ОбластиТребующиеОбработки( + Дескриптор.ИдентификаторФайла, "КурсыВалют"); + + РаспространитьКурсыПоОД(, ТаблицаКурсов, ОбластиДляОбновления, + Дескриптор.ИдентификаторФайла, "КурсыВалют"); + +КонецПроцедуры + +// Вызывается после получения новых данных вида КурсыВалютЗаДень +// +// Параметры: +// Дескриптор - ОбъектXDTO Descriptor. +// ПутьКФайлу - строка. Полное имя извлеченного файла. +// +Процедура ОбработатьПоставляемыеКурсыЗаДень(Знач Дескриптор, Знач ПутьКФайлу) + + ТаблицаКурсов = ПрочитатьТаблицуКурсов(ПутьКФайлу); + + ДатаКурсов = ""; + Для каждого Характеристика Из Дескриптор.Properties.Property Цикл + Если Характеристика.Code = "Дата" Тогда + ДатаКурсов = Дата(Характеристика.Value); + КонецЕсли; + КонецЦикла; + + Если ДатаКурсов = "" Тогда + ВызватьИсключение НСтр("ru = 'Данные вида ""КурсыВалютЗаДень"" не содержат характеристики ""Дата"". Обновление курсов невозможно.'"); + КонецЕсли; + + ОбластиДляОбновления = ПоставляемыеДанные.ОбластиТребующиеОбработки(Дескриптор.FileGUID, "КурсыВалютЗаДень"); + + ИндексОбщихКурсов = ОбластиДляОбновления.Найти(-1); + Если ИндексОбщихКурсов <> Неопределено Тогда + + КэшКурсов = ПоставляемыеДанные.ДескрипторыПоставляемыхДанныхИзКэша("КурсыОднойВалюты", , Ложь); + Если КэшКурсов.Количество() > 0 Тогда + Для каждого СтрокаКурсов Из ТаблицаКурсов Цикл + + КэшТекущей = Неопределено; + Для каждого ДескрипторКэша Из КэшКурсов Цикл + Если ДескрипторКэша.Характеристики.Количество() > 0 + И ДескрипторКэша.Характеристики[0].Код = "Валюта" + И ДескрипторКэша.Характеристики[0].Значение = СтрокаКурсов.Код Тогда + КэшТекущей = ДескрипторКэша; + Прервать; + КонецЕсли; + КонецЦикла; + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + Если КэшТекущей <> Неопределено Тогда + Данные = ПоставляемыеДанные.ПоставляемыеДанныеИзКэша(КэшТекущей.ИдентификаторФайла); + Данные.Записать(ИмяВременногоФайла); + Иначе + КэшТекущей = Новый Структура("ВидДанных, ДатаДобавления, ИдентификаторФайла, Характеристики", + "КурсыОднойВалюты", ТекущаяУниверсальнаяДата(), Новый УникальныйИдентификатор, Новый Массив); + КэшТекущей.Характеристики.Добавить(Новый Структура("Код, Значение, Ключевая", "Валюта", СтрокаКурсов.Код, Истина)); + КонецЕсли; + + ЗаписьТекста = Новый ЗаписьТекста(ИмяВременногоФайла, КодировкаТекста.UTF8, + Символы.ПС, Истина); + + ТаблицаДляЗаписи = Новый Массив; + ТаблицаДляЗаписи.Добавить(СтрокаКурсов); + ЗаписатьТаблицуКурсов(ТаблицаДляЗаписи, ЗаписьТекста); + ЗаписьТекста.Закрыть(); + + ПоставляемыеДанные.СохранитьПоставляемыеДанныеВКэш(КэшТекущей, ИмяВременногоФайла); + Попытка + УдалитьФайлы(ИмяВременногоФайла); + Исключение + КонецПопытки; + + КонецЦикла; + + КонецЕсли; + + ОбластиДляОбновления.Удалить(ИндексОбщихКурсов); + КонецЕсли; + + РаспространитьКурсыПоОД(ДатаКурсов, ТаблицаКурсов, ОбластиДляОбновления, + Дескриптор.FileGUID, "КурсыВалютЗаДень"); + +КонецПроцедуры + +// Копирует курсы во все ОД +// +// Параметры +// ДатаКурсов - Дата или Неопределено. Курсы добавляются за указанную дату либо за все время +// ТаблицаКурсов - ТаблицаЗначений с курсами +// ОбластиДляОбновления - Массив со списком кодов областей +// ИдентификаторФайла - УникальныйИдентификатор файла обрабатываемых курсов +// КодОбработчика - Строка, код обработчика +// +Процедура РаспространитьКурсыПоОД(Знач ДатаКурсов, Знач ТаблицаКурсов, + Знач ОбластиДляОбновления, Знач ИдентификаторФайла, Знач КодОбработчика) + + Для каждого ОбластьДанных Из ОбластиДляОбновления Цикл + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + УстановитьПривилегированныйРежим(Ложь); + + ЗапросВалюты = Новый Запрос; + ЗапросВалюты.Текст = "ВЫБРАТЬ + | Валюты.Ссылка, + | Валюты.Код + |ИЗ + | Справочник.Валюты КАК Валюты + |ГДЕ + | Валюты.ЗагружаетсяИзИнтернета = ИСТИНА"; + ВыборкаВалюты = ЗапросВалюты.Выполнить().Выбрать(); + НачатьТранзакцию(); + Пока ВыборкаВалюты.Следующий() Цикл + + Курсы = ТаблицаКурсов.НайтиСтроки(Новый Структура("Код", ВыборкаВалюты.Код)); + Если Курсы.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Валюта.Установить(ВыборкаВалюты.Ссылка); + Если ДатаКурсов <> Неопределено Тогда + НаборЗаписей.Отбор.Период.Установить(ДатаКурсов); + Иначе + //Блокируем неэффективное обновление связанных валют + НаборЗаписей.ОбменДанными.Загрузка = Истина; + КонецЕсли; + + Для каждого СтрокаКурсов Из Курсы Цикл + Запись = НаборЗаписей.Добавить(); + Запись.Валюта = ВыборкаВалюты.Ссылка; + Запись.Период = СтрокаКурсов.Дата; + Запись.Кратность = СтрокаКурсов.Кратность; + Запись.Курс = СтрокаКурсов.Курс; + КонецЦикла; + НаборЗаписей.Записать(); + + КонецЦикла; + ПоставляемыеДанные.ОбластьОбработана(ИдентификаторФайла, КодОбработчика, ОбластьДанных); + ЗафиксироватьТранзакцию(); + КонецЦикла; + +КонецПроцедуры + +// Вызывается при изменении реквизита ЗагружаетсяИзИнтернета +// +// Валюта - СправочникСсылка.Валюты +// +Процедура ЗапланироватьКопированиеКурсовВалюты(Знач Валюта) Экспорт + + Если Не Валюта.ЗагружаетсяИзИнтернета Тогда + Возврат; + КонецЕсли; + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(Валюта.Код); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода" , "КурсыВалютВМоделиСервиса.КопироватьКурсыВалюты"); + ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); + ПараметрыЗадания.Вставить("Использование", Истина); + + ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания); + +КонецПроцедуры + +// Вызывается после загрузки данных в область или при установке флажка ЗагружаетсяИзИнтернета +// Копирует курсы одной валюты за все даты из +// неразделенного xml файла в разделенный регистр +// +// Параметры +// КодВалюты - Строка +// +Процедура КопироватьКурсыВалюты(Знач КодВалюты) Экспорт + + ВалютаСсылка = Справочники.Валюты.НайтиПоКоду(КодВалюты); + Если ВалютаСсылка.Пустая() Тогда + Возврат; + КонецЕсли; + + ТипДанныхКурса = ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/SuppliedData/CurrencyRates", "Rate"); + + Фильтр = Новый Массив; + Фильтр.Добавить(Новый Структура("Код, Значение", "Валюта", КодВалюты)); + Курсы = ПоставляемыеДанные.СсылкиПоставляемыхДанныхИзКэша("КурсыОднойВалюты", Фильтр); + Если Курсы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + ПутьКФайлу = ПолучитьИмяВременногоФайла(); + ПоставляемыеДанные.ПоставляемыеДанныеИзКэша(Курсы[0]).Записать(ПутьКФайлу); + ТаблицаКурсов = ПрочитатьТаблицуКурсов(ПутьКФайлу, Истина); + Попытка + УдалитьФайлы(ПутьКФайлу); + Исключение + КонецПопытки; + + ТаблицаКурсов.Колонки.Дата.Имя = "Период"; + ТаблицаКурсов.Колонки.Добавить("Валюта"); + ТаблицаКурсов.ЗаполнитьЗначения(ВалютаСсылка, "Валюта"); + + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Валюта.Установить(ВалютаСсылка); + НаборЗаписей.Загрузить(ТаблицаКурсов); + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/КурсыВалютВМоделиСервиса/КурсыВалютВМоделиСервиса.mdo b/SSL/src/CommonModules/КурсыВалютВМоделиСервиса/КурсыВалютВМоделиСервиса.mdo new file mode 100644 index 000000000..a64d678e5 --- /dev/null +++ b/SSL/src/CommonModules/КурсыВалютВМоделиСервиса/КурсыВалютВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + КурсыВалютВМоделиСервиса + + ru + Курсы валют в модели сервиса + + true + true + true + diff --git a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl index ae7cb2758..a96d560ba 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяГлобальный/Module.bsl @@ -6,10 +6,20 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -// Открывает форму текущих оповещений пользователя +// Открывает форму текущих напоминаний пользователя при начале работы системы. +// +Процедура ПроверитьТекущиеНапоминанияПриЗапуске() Экспорт + + ПодключитьОбработчикОжидания("ПроверитьТекущиеНапоминания", 60, Истина); // через 60 секунд после запуска клиента + +КонецПроцедуры + +// Открывает форму текущих напоминаний пользователя. +// Процедура ПроверитьТекущиеНапоминания() Экспорт - ИнтервалПроверкиНапоминаний = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиНапоминаний.ИнтервалПроверкиНапоминаний; + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + ИнтервалПроверкиНапоминаний = ПараметрыРаботыКлиента.НастройкиНапоминаний.ИнтервалПроверкиНапоминаний; // открываем форму текущих оповещений ВремяБлижайшего = Неопределено; @@ -17,17 +27,15 @@ Если НапоминанияПользователяКлиент.ПолучитьТекущиеОповещения(ВремяБлижайшего).Количество() > 0 Тогда НапоминанияПользователяКлиент.ОткрытьФормуОповещения(); - Иначе - Если ЗначениеЗаполнено(ВремяБлижайшего) Тогда - ИнтервалСледующейПроверки = Мин(ВремяБлижайшего - ОбщегоНазначенияКлиент.ДатаСеанса(), ИнтервалСледующейПроверки); - КонецЕсли; + ИначеЕсли ЗначениеЗаполнено(ВремяБлижайшего) Тогда + ИнтервалСледующейПроверки = Мин(ВремяБлижайшего - ОбщегоНазначенияКлиент.ДатаСеанса(), ИнтервалСледующейПроверки); КонецЕсли; ПодключитьОбработчикОжидания("ПроверитьТекущиеНапоминания", ИнтервалСледующейПроверки, Истина); КонецПроцедуры -// Сбрасывает таймер проверки текущих напоминаний и выполняет проверку немедленно +// Сбрасывает таймер проверки текущих напоминаний и выполняет проверку немедленно. Процедура СброситьТаймерПроверкиТекущихОповещений() Экспорт ОтключитьОбработчикОжидания("ПроверитьТекущиеНапоминания"); ПроверитьТекущиеНапоминания(); diff --git a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl index f727ee6c7..f2bfa51ba 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяКлиент/Module.bsl @@ -19,12 +19,13 @@ // Активизирует обработчик ожидания, проверяющий текущие напоминания пользователя. Процедура ПриНачалеРаботыСистемы() Экспорт - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если НЕ ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда Возврат; КонецЕсли; - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиНапоминаний.ИспользоватьНапоминания Тогда - Включить(); + Если ПараметрыРаботыКлиента.НастройкиНапоминаний.ИспользоватьНапоминания Тогда + ПроверитьТекущиеНапоминанияПриЗапуске(); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/НапоминанияПользователяСервер/Module.bsl b/SSL/src/CommonModules/НапоминанияПользователяСервер/Module.bsl index bdb293cd7..57480ba36 100644 --- a/SSL/src/CommonModules/НапоминанияПользователяСервер/Module.bsl +++ b/SSL/src/CommonModules/НапоминанияПользователяСервер/Module.bsl @@ -3,6 +3,35 @@ // //////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// при запуске конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров запуска. +// +Процедура ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт + + Параметры.Вставить("НастройкиНапоминаний", + Новый ФиксированнаяСтруктура(НапоминанияПользователяСервер.ПолучитьНастройкиНапоминаний())); + +КонецПроцедуры + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + Параметры.Вставить("НастройкиНапоминаний", + Новый ФиксированнаяСтруктура(НапоминанияПользователяСервер.ПолучитьНастройкиНапоминаний())); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl index 9018e9de4..ba0c93f40 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервиса/Module.bsl @@ -18,6 +18,14 @@ // Процедура ПослеОпределенияПолучателей(Данные, Получатели, ИмяПланаОбмена) Экспорт + // Изменения неразделенных данных (общих данных) не выгружаем в Сервис + Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() + И Не ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(Данные.Метаданные()) Тогда + + ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Получатели, АвтономнаяРаботаСлужебный.ПриложениеВСервисе()); + Возврат; + КонецЕсли; + Если Данные.ОбменДанными.Загрузка Тогда Возврат; ИначеЕсли Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда @@ -30,13 +38,17 @@ Возврат; КонецЕсли; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + Если ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда УстановитьПризнакИзмененияДанных(); Иначе - ФоновыеЗадания.Выполнить("ОбменДаннымиВМоделиСервиса.УстановитьПризнакИзмененияДанных",, "1"); + Попытка + ФоновыеЗадания.Выполнить("ОбменДаннымиВМоделиСервиса.УстановитьПризнакИзмененияДанных",, "1"); + Исключение + // Дополнительная обработка исключения не требуется + // ожидаемое исключение - дублирвоание задание с таким же ключом + КонецПопытки; КонецЕсли; КонецПроцедуры @@ -76,10 +88,23 @@ // Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.ПроверитьУстановкуФункциональныхОпцийПриОбновленииИБ"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.УстановитьПризнакЭтотУзел"; + Обработчик = Обработчики.Добавить(); Обработчик.Версия = "2.0.1.2"; Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.УстановитьКодыПредопределенныхУзлов"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.1.20"; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "ОбменДаннымиВМоделиСервиса.УстановитьПризнакЭтотУзелДляВсехОбластейДанных"; + КонецПроцедуры // Для каждого из используемых в модели сервиса планов обмена @@ -96,7 +121,9 @@ Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл - Если ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда + Если Не ОбменДаннымиСервер.ЭтоРазделенныйПланОбменаБСП(ПланОбмена.Имя) Тогда + Продолжить; + ИначеЕсли ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда Продолжить; КонецЕсли; @@ -114,31 +141,10 @@ Если ПустаяСтрока(ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭтотУзел, "Код")) Тогда - Наименование = ""; - - Параметры = Новый Структура; - СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиента(Параметры); - - Наименование = Параметры.ЗаголовокПриложения; - - Если ПустаяСтрока(Наименование) Тогда - - Если Параметры.Свойство("ПредставлениеОбластиДанных") Тогда - - Наименование = Параметры.ПредставлениеОбластиДанных; - - КонецЕсли; - - КонецЕсли; - - Если Не ПустаяСтрока(Наименование) Тогда - - ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); - ЭтотУзелОбъект.Код = КодУзлаПланаОбменаВСервисе(РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); - ЭтотУзелОбъект.Наименование = СокрЛП(Наименование); - ЭтотУзелОбъект.Записать(); - - КонецЕсли; + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Код = КодУзлаПланаОбменаВСервисе(РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + ЭтотУзелОбъект.Наименование = СокрЛП(СформироватьНаименованиеПредопределенногоУзла()); + ЭтотУзелОбъект.Записать(); КонецЕсли; @@ -148,6 +154,144 @@ КонецПроцедуры +// Устанавливает значение констант ИспользоватьОбменДанными и ИспользоватьАвтономнуюРаботуВМоделиСервиса при необходимости +// +Процедура ПроверитьУстановкуФункциональныхОпцийПриОбновленииИБ() Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если АвтономнаяРаботаСлужебный.АвтономнаяРаботаПоддерживается() Тогда + + Константы.ИспользоватьОбменДанными.Установить(Истина); + Константы.ИспользоватьАвтономнуюРаботуВМоделиСервиса.Установить(Истина); + + Иначе + + Константы.ИспользоватьАвтономнуюРаботуВМоделиСервиса.Установить(Ложь); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Устанавливает признак "ЭтотУзел" для предопределенных узлов разделенных планов обмена БСП +// +// Параметры: +// Нет. +// +Процедура УстановитьПризнакЭтотУзел() Экспорт + + Для Каждого ИмяПланаОбмена Из ОбменДаннымиПовтИсп.РазделенныеПланыОбменаБСП() Цикл + + Попытка + ЭтотУзел = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().ПолучитьОбъект(); + + Если ЭтотУзел.ЭтотУзел <> Истина Тогда + ЭтотУзел.ЭтотУзел = Истина; + ЭтотУзел.Записать(); + КонецЕсли; + Исключение + // Для обеспечения обратной совместимости с БСП 2.1.1.19 + КонецПопытки; + + КонецЦикла; + +КонецПроцедуры + +// Устанавливает признак "ЭтотУзел" для предопределенных узлов разделенных планов обмена БСП +// для всех областей данных +// +// Параметры: +// Нет. +// +Процедура УстановитьПризнакЭтотУзелДляВсехОбластейДанных() Экспорт + + РазделенныеПланыОбменаБСП = ОбменДаннымиПовтИсп.РазделенныеПланыОбменаБСП(); + + ТекстЗапроса = + "ВЫБРАТЬ + | ОбластиДанных.ОбластьДанных КАК ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.Статус В (ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется), ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Удалена))"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Выборка.ОбластьДанных); + + Для Каждого ИмяПланаОбмена Из РазделенныеПланыОбменаБСП Цикл + + Попытка + ЭтотУзел = ПланыОбмена[ИмяПланаОбмена].ЭтотУзел().ПолучитьОбъект(); + + Если ЭтотУзел.ЭтотУзел <> Истина Тогда + ЭтотУзел.ЭтотУзел = Истина; + ЭтотУзел.Записать(); + КонецЕсли; + Исключение + // Для обеспечения обратной совместимости с БСП 2.1.1.19 + КонецПопытки; + + КонецЦикла; + + КонецЦикла; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + +КонецПроцедуры + +// Добавляет параметры работы клиентской логики при запуске системы для подсистемы обмена данными в модели сервиса +// +Процедура ДобавитьПараметрыРаботыКлиентскойЛогикиПриЗапуске(Параметры) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Параметры.Вставить("СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы", + АвтономнаяРаботаСлужебный.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы()); + Параметры.Вставить("СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы", + АвтономнаяРаботаСлужебный.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы()); + Параметры.Вставить("ОткрытьПомощникНастройкиАвтономногоРабочегоМеста", + АвтономнаяРаботаСлужебный.ОткрытьПомощникНастройкиАвтономногоРабочегоМеста()); + +КонецПроцедуры + +// Добавляет параметры работы клиентской логики для подсистемы обмена данными в модели сервиса +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + +КонецПроцедуры + +Процедура ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза, Получатель) Экспорт + + Если Получатель = Неопределено Тогда + + // + + ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить + ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли СозданиеНачальногоОбраза + И ОбщегоНазначенияПовтИсп.РазделениеВключено() + И АвтономнаяРаботаСлужебный.ЭтоУзелАвтономногоРабочегоМеста(Получатель.Ссылка) + И ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ЭлементДанных.Метаданные()) Тогда + + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + + ЗаписатьXML(Получатель.ДополнительныеСвойства.ВыгруженныеДанные, ЭлементДанных); + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -429,6 +573,12 @@ КонецФункции +Функция СформироватьНаименованиеПредопределенногоУзла() Экспорт + + Возврат НСтр("ru = 'Приложение в Интернете'"); + +КонецФункции + // Процедура ВыполнитьДействиеСценарияОбменаДаннымиВПервойИнформационнойБазеИзНеразделенногоСеанса( @@ -467,6 +617,22 @@ КонецПроцедуры +Функция ТребуемаяВерсияПлатформы() Экспорт + + ВерсияПлатформы = ОбменДаннымиВМоделиСервисаПереопределяемый.ТребуемаяВерсияПриложения(); + Если Не ПустаяСтрока(ВерсияПлатформы) Тогда + Возврат ВерсияПлатформы; + КонецЕсли; + + СистемнаяИнформация = Новый СистемнаяИнформация; + ВерсияПлатформы = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СистемнаяИнформация.ВерсияПриложения, "."); + + // Удаляем из номера версии дополнительный номер релиза (последний номер) + ВерсияПлатформы.Удалить(3); + Возврат СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(ВерсияПлатформы, "."); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции @@ -525,3 +691,51 @@ Возврат ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "УправляющееПриложениеОбменДанными"); КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события + +Процедура ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернетеПриЗаписи(Источник, Отказ, Замещение) Экспорт + + ОтключитьАвтоматическуюСинхронизацию = Ложь; + + Для Каждого СтрокаНабора Из Источник Цикл + + Если СтрокаНабора.ВидТранспортаСообщенийОбменаПоУмолчанию = Перечисления.ВидыТранспортаСообщенийОбмена.WS + И Не СтрокаНабора.WSЗапомнитьПароль Тогда + + ОтключитьАвтоматическуюСинхронизацию = Истина; + Прервать; + + КонецЕсли; + + КонецЦикла; + + Если ОтключитьАвтоматическуюСинхронизацию Тогда + + АвтономнаяРаботаСлужебный.ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете(); + + КонецЕсли; + +КонецПроцедуры + +Процедура ИгнорироватьОтправкуНеразделенныхДанныхВСервис(Источник, ЭлементДанных, ОтправкаЭлемента) Экспорт + + Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() + И Не ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ЭлементДанных.Метаданные()) Тогда + + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + + КонецЕсли; + +КонецПроцедуры + +Процедура ИгнорироватьПолучениеНеразделенныхДанныхВСервисе(Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ОбщегоНазначения.ЭтоРазделенныйОбъектМетаданных(ЭлементДанных.Метаданные()) Тогда + + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl new file mode 100644 index 000000000..c62edb8ed --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/Module.bsl @@ -0,0 +1,58 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен данными в модели сервиса". +// +//////////////////////////////////////////////////////////////////////////////// + +// Обработчик запуска клиентского сеанса приложения. +// Если запущен сеанс для автономного рабочего места, то выводит пользователю оповещение +// о необходимости выполнить синхронизацию данных с приложением в Интернете +// (если установлен соответствующий признак). +// +Процедура ПриНачалеРаботыСистемы() Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиента.РазделениеВключено ИЛИ Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + Возврат; + КонецЕсли; + + ПредлагатьСинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииСеанса = + ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботы; + + Если ПараметрыРаботыКлиента.ОткрытьПомощникНастройкиАвтономногоРабочегоМеста Тогда + + ОткрытьФорму("Обработка.ПомощникСозданияАвтономногоРабочегоМеста.Форма.НастройкаНаСторонеАвтономногоРабочегоМеста"); + + ИначеЕсли ПараметрыРаботыКлиента.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботы Тогда + + ПоказатьОповещениеПользователя(НСтр("ru = 'Автономная работа'"), "e1cib/app/Обработка.ВыполнениеОбменаДанными", + НСтр("ru = 'Рекомендуется синхронизировать данные с приложением в Интернете.'"), БиблиотекаКартинок.Информация32 + ); + + КонецЕсли; + +КонецПроцедуры + +// Вызывается при завершении работы системы, чтобы запросить список предупреждений, +// выводимых пользователю пользователю. +// +// Параметры: +// см. СтандартныеПодсистемыКлиентПереопределяемый.ПолучитьСписокПредупреждений. +// +Процедура ПриЗавершенииРаботыСистемы(Предупреждения) Экспорт + + Если ПредлагатьСинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииСеанса = Истина + И АвтономнаяРаботаВызовСервераСлужебный.СинхронизацияССервисомДавноНеВыполнялась() Тогда + + ТекстФлажка = НСтр("ru = 'Синхронизировать данные с приложением в Интернете'"); + ДействиеПриУстановленномФлажке = Новый Структура; + ДействиеПриУстановленномФлажке.Вставить("Форма", "Обработка.ВыполнениеОбменаДанными.Форма.Форма"); + ДействиеПриУстановленномФлажке.Вставить("ПараметрыФормы", АвтономнаяРаботаВызовСервераСлужебный.ПараметрыФормыВыполненияОбменаДанными()); + + ПараметрыПредупреждения = Новый Структура; + ПараметрыПредупреждения.Вставить("ТекстФлажка", ТекстФлажка); + ПараметрыПредупреждения.Вставить("ДействиеПриУстановленномФлажке", ДействиеПриУстановленномФлажке); + + Предупреждения.Добавить(ПараметрыПредупреждения); + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/РассылкаОтчетовКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/ОбменДаннымиВМоделиСервисаКлиент.mdo similarity index 54% rename from SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/РассылкаОтчетовКлиентПереопределяемый.mdo rename to SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаКлиент/ОбменДаннымиВМоделиСервисаКлиент.mdo index 414ce6d89..334d9afe3 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..fd12ef2df --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПереопределяемый/Module.bsl @@ -0,0 +1,35 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен данными в модели сервиса". +// +//////////////////////////////////////////////////////////////////////////////// + +// Версия приложения 1С:Предприятия, которая требуется для работы автономного рабочего места. +// Приложение этой версии должно быть установлено на локальном компьютере пользователя. +// Если возвращаемое значение функции не задано, то в качестве требуемой версии приложения +// будет использоваться значение по умолчанию: первые три цифры версии текущего приложения, +// расположенного в Интернете, например, "8.2.15". +// Используется в помощнике создания автономного рабочего места. +// +// Возвращаемое значение: +// Строка - Версия требуемого приложения 1С:Предприятия в формате +// <основная версия>.<младшая версия>.<релиз>.<дополнительный номер релиза>. +// Например, "8.2.15.310". +// +Функция ТребуемаяВерсияПриложения() Экспорт + + Возврат ""; + +КонецФункции + +// Возвращает адрес ресурса, предназначенного для восстановления пароля учетной записи на сервисе. +// Если адрес не указан, то будет использоваться адрес по умолчанию: https://1cfresh.com/recover +// Используется в помощнике создания автономного рабочего места. +// +// Возвращаемое значение: +// Строка – адрес ресурса. +// +Функция АдресДляВосстановленияПароляУчетнойЗаписи() Экспорт + + Возврат ""; + +КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПереопределяемый/ОбменДаннымиВМоделиСервисаПереопределяемый.mdo b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПереопределяемый/ОбменДаннымиВМоделиСервисаПереопределяемый.mdo new file mode 100644 index 000000000..49a8e6c9f --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПереопределяемый/ОбменДаннымиВМоделиСервисаПереопределяемый.mdo @@ -0,0 +1,11 @@ + + + ОбменДаннымиВМоделиСервисаПереопределяемый + + ru + Обмен данными в модели сервиса переопределяемый + + true + true + true + diff --git a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl index 40d2bede1..7acefe934 100644 --- a/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиВМоделиСервисаПовтИсп/Module.bsl @@ -23,6 +23,7 @@ СтруктураНастроек.Вставить("WSПароль", ПарольПользователя); СтруктураНастроек.Вставить("WSИмяСервиса", "ManageApplicationExchange"); СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SaaS/1.0/WS/ManageApplicationExchange"); + СтруктураНастроек.Вставить("WSТаймаут", 20); Результат = ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек); @@ -50,6 +51,7 @@ СтруктураНастроек.Вставить("WSПароль", ПарольПользователя); СтруктураНастроек.Вставить("WSИмяСервиса", "ManageApplicationExchange_1_0_6_5"); СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SaaS/1.0/WS/ManageApplicationExchange_1_0_6_5"); + СтруктураНастроек.Вставить("WSТаймаут", 20); Результат = ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек); @@ -74,6 +76,7 @@ СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(УзелИнформационнойБазы); СтруктураНастроек.Вставить("WSИмяСервиса", "RemoteAdministrationOfExchange"); СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SaaS/1.0/WS/RemoteAdministrationOfExchange"); + СтруктураНастроек.Вставить("WSТаймаут", 20); Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); @@ -93,6 +96,7 @@ СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(УзелИнформационнойБазы); СтруктураНастроек.Вставить("WSИмяСервиса", "RemoteAdministrationOfExchange_2_0_1_6"); СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SaaS/1.0/WS/RemoteAdministrationOfExchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSТаймаут", 20); Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); КонецФункции @@ -110,12 +114,14 @@ // Функция ПланОбменаИспользуетсяВМоделиСервиса(Знач ИмяПланаОбмена) Экспорт - Попытка + Результат = Ложь; + + Если ОбменДаннымиПовтИсп.ПланыОбменаБСП().Найти(ИмяПланаОбмена) <> Неопределено + И Не Метаданные.ПланыОбмена[ИмяПланаОбмена].РаспределеннаяИнформационнаяБаза Тогда + Результат = ПланыОбмена[ИмяПланаОбмена].ПланОбменаИспользуетсяВМоделиСервиса(); - Исключение - Результат = Ложь; - КонецПопытки; + + КонецЕсли; Возврат Результат; КонецФункции - diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl new file mode 100644 index 000000000..fbaa58940 --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/Module.bsl @@ -0,0 +1,809 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен данными" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Точка входа для выполнения итерации обмена данными – загрузки и выгрузки данных для узла плана обмена +// +// Параметры: +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении обмена +// УзелИнформационнойБазы – ПланОбменаСсылка – узел плана обмена, для которого выполняется итерация обмена данными +// ВыполнятьЗагрузку – Булево (необязательный) – флаг необходимости выполнять загрузку данных. Значение по умолчанию - Истина +// ВыполнятьВыгрузку – Булево (необязательный) – флаг необходимости выполнять выгрузку данных. Значение по умолчанию – Истина +// ВидТранспортаСообщенийОбмена (необязательный) - ПеречислениеСсылка.ВидыТранспортаСообщенийОбмена – вид транспорта, +// который будет использоваться в процессе обмена данными. +// Значение по умолчанию – значение из РС.НастройкиТранспортаОбмена.Ресурс.ВидТранспортаСообщенийОбменаПоУмолчанию; +// если в РС значение не задано, то значение по умолчанию - Перечисления.ВидыТранспортаСообщенийОбмена.FILE +// +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, + УзелИнформационнойБазы, + ВыполнятьЗагрузку = Истина, + ВыполнятьВыгрузку = Истина, + ВидТранспортаСообщенийОбмена = Неопределено, + ДлительнаяОперация = Ложь, + ИдентификаторОперации = "", + ИдентификаторФайла = "", + ДлительнаяОперацияРазрешена = Ложь, + Знач Пароль = "" + ) Экспорт + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, + УзелИнформационнойБазы, + ВыполнятьЗагрузку, + ВыполнятьВыгрузку, + ВидТранспортаСообщенийОбмена, + ДлительнаяОперация, + ИдентификаторОперации, + ИдентификаторФайла, + ДлительнаяОперацияРазрешена, + Пароль + ); + +КонецПроцедуры + +// Выполняет процесс обмена данными отдельно для каждой строки настройки обмена +// Процесс обмена данными состоит из двух стадий: +// - инициализация обмена - подготовка подсистемы обмена данными к процессу обмена +// - обмен данными - процесс зачитывания файла сообщения с последующей загрузкой этих данных в ИБ +// или выгрузки изменений в файл сообщения +// Стадия инициализации выполняется один раз за сеанс и сохраняется в кэше сеанса на сервере +// до перезапуска сеанса или сброса повторно-используемых значений подсистемы обмена данными. +// Сброс повторно-используемых значений происходит при изменении данных, влияющих на процесс обмена данными +// (настройки транспорта, настройка выполнения обмена, настройка отборов на узлах планов обмена) +// +// Обмен может быть выполнен полностью для всех строк сценария, +// а может быть выполнен для отдельной строки ТЧ сценария обмена +// +// Параметры: +// Отказ - Булево - флаг отказа; поднимается в случае возникновения ошибки при выполнении сценария +// НастройкаВыполненияОбмена - СправочникСсылка.СценарииОбменовДанными - элемент справочника, +// по значениям реквизитов которого будет выполнен обмен данными +// НомерСтроки - Число - Номер строки по которой будет выполнен обмен данными. +// Если не указан, то обмен данными будет выполнен для всех строк +// +Процедура ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки = Неопределено) Экспорт + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки); + +КонецПроцедуры + +// + +// Выполняет проверку актуальности КЭШа механизма регистрации объектов. +// Если кэш неактуальный, то выполняется инициализация КЭШа актуальными значениями. +// +// Параметры: +// Нет. +// +Процедура ПроверитьКэшМеханизмаРегистрацииОбъектов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + АктуальнаяДата = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО"); + + Если ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО <> АктуальнаяДата Тогда + + ОбновитьКэшМеханизмаРегистрацииОбъектов(); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Обновляет/устанавливает повторно-используемые значения и параметры сеанса для подсистемы обмена данными +// +// Устанавливаемые параметры сеанса: +// ОбменДаннымиВключен - Булево - флаг, который показывает следует или нет использовать обмен данными в конфигурации. +// Определяется косвенным образом по факту наличия обмена данными хотя бы с одним планом обмена. +// Наличие обмена с каким либо планом обмена определяется по наличию у этого плана обмена узлов +// кроме предопределенного. +// ИспользуемыеПланыОбмена - ФиксированныйМассив - массив с именами планов обмена для которых используется обмен. +// ПравилаРегистрацииОбъектов - ХранилищеЗначения - в бинарном виде содержит таблицу значений с правилами регистрации объектов. +// ПравилаВыборочнойРегистрацииОбъектов - +// ДатаОбновленияПовторноИспользуемыхЗначенийМРО - Дата (Дата и время) - содержит дату последнего актуального +// кэша для подсистемы обмена данными +// +// Параметры: +// Нет. +// +Процедура ОбновитьКэшМеханизмаРегистрацииОбъектов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Обновляем повторно используемые значения + ОбновитьПовторноИспользуемыеЗначения(); + + // получаем планы обмена конфигурации, которые используются при обмене + ИспользуемыеПланыОбмена = ОбменДаннымиСервер.ПолучитьИспользуемыеПланыОбмена(); + + // флаг включения механизма обмена данными + ОбменДаннымиВключен = (ИспользуемыеПланыОбмена.Количество() <> 0); + + // устанавливаем параметр сеанса ОбменДаннымиВключен + ПараметрыСеанса.ОбменДаннымиВключен = ОбменДаннымиВключен; + + // устанавливаем параметр сеанса ИспользуемыеПланыОбмена + ПараметрыСеанса.ИспользуемыеПланыОбмена = Новый ФиксированныйМассив(ИспользуемыеПланыОбмена); + + // получаем таблицу правил регистрации из ИБ + ПравилаРегистрацииОбъектов = ОбменДаннымиСервер.ПолучитьПравилаРегистрацииОбъектов(); + + // устанавливаем параметр сеанса ПравилаРегистрацииОбъектов + ПараметрыСеанса.ПравилаРегистрацииОбъектов = Новый ХранилищеЗначения(ПравилаРегистрацииОбъектов); + + // устанавливаем параметр сеанса ПравилаВыборочнойРегистрацииОбъектов + ПравилаВыборочнойРегистрацииОбъектов = ОбменДаннымиСервер.ПолучитьПравилаВыборочнойРегистрацииОбъектов(); + + ПараметрыСеанса.ПравилаВыборочнойРегистрацииОбъектов = Новый ХранилищеЗначения(ПравилаВыборочнойРегистрацииОбъектов); + + // КЛЮЧ ДЛЯ ПРОВЕРКИ АКТУАЛЬНОСТИ КЭША + + // устанавливаем актуальную дату обновления кеша МРО + АктуальнаяДата = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО"); + + ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО = АктуальнаяДата; + +КонецПроцедуры + +// Устанавливает значение константы ДатаОбновленияПовторноИспользуемыхЗначенийМРО +// В качестве устанавливаемого значения используется текущая дата компьютера (сервера) +// В момент изменения значения этой константы повторно-используемые значения +// для подсистемы обмена данными становятся неактуальными и требуют повторной инициализации. +// +// Параметры: +// Нет. +// +Процедура СброситьКэшМеханизмаРегистрацииОбъектов() Экспорт + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + УстановитьПривилегированныйРежим(Истина); + // записываем дату и время компьютера сервера - ТекущаяДата() + // метод ТекущаяДатаСеанса() использовать нельзя. + // Текущая дата сервера в данном случае используется в качестве ключа уникальности кэша механизма регистрации объектов. + Константы.ДатаОбновленияПовторноИспользуемыхЗначенийМРО.Установить(ТекущаяДата()); + + КонецЕсли; + +КонецПроцедуры + +// + +// Получает строку информации о правилах конвертации/регистрации из файла правил. +// +// Параметры: +// АдресВременногоХранилища – адрес временного хранилища, в котором находятся данные файла правил; +// СтрокаИнформацииОПравилах – в этот параметр процедура возвращает строку информации о правилах; +// +Процедура ЗагрузитьИнформациюОПравилах(Отказ, АдресВременногоХранилища, СтрокаИнформацииОПравилах) Экспорт + + РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьИнформациюОПравилах(Отказ, АдресВременногоХранилища, СтрокаИнформацииОПравилах); + +КонецПроцедуры + +// Выполняет загрузку данных сообщения обмена, расположенного в локальной файловой системе сервера. +// +Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Знач УзелИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт + + Попытка + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(УзелИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + Исключение + Отказ = Истина; + КонецПопытки; + +КонецПроцедуры + +// Фиксирует успешное выполнение обмена данными в системе. +// +Процедура ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Знач УзелИнформационнойБазы, Знач ДатаНачала) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; + + СтруктураНастроекОбмена = Новый Структура; + СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена", Перечисления.РезультатыВыполненияОбмена.Выполнено); + СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене", ДействиеПриОбмене); + СтруктураНастроекОбмена.Вставить("КоличествоОбъектовОбработано", 0); + СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации", ОбменДаннымиСервер.ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене)); + СтруктураНастроекОбмена.Вставить("ДатаНачала", ДатаНачала); + СтруктураНастроекОбмена.Вставить("ДатаОкончания", ТекущаяДатаСеанса()); + СтруктураНастроекОбмена.Вставить("ЭтоОбменВРИБ", ОбменДаннымиПовтИсп.ЭтоУзелРаспределеннойИнформационнойБазы(УзелИнформационнойБазы)); + + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + +КонецПроцедуры + +// Фиксирует аварийное завершение обмена данными. +// +Процедура ЗафиксироватьЗавершениеОбменаСОшибкой(Знач УзелИнформационнойБазы, + Знач ДействиеПриОбмене, + Знач ДатаНачала, + Знач СтрокаСообщенияОбОшибке + ) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, + ДействиеПриОбмене, + ДатаНачала, + СтрокаСообщенияОбОшибке + ); +КонецПроцедуры + +// Выполняет получение файла сообщения обмена из базы-корреспондента через веб-сервис. +// Выполняет загрузку полученного файла сообщения обмена в эту базу. +// +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + Отказ, + Знач УзелИнформационнойБазы, + Знач ИдентификаторФайла, + Знач ДатаНачалаОперации, + Знач Пароль = "" + ) Экспорт + + ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + ДатаНачалаОперации, + Пароль + ); +КонецПроцедуры + +// Выполняет попытку установки внешнего соединения по переданным параметрам подключения. +// Если установить внешнее соединение не удалось, то поднимается флаг Отказ. +// +Процедура ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, СтруктураНастроек, ОшибкаПодключенияКомпоненты = Ложь) Экспорт + + СтрокаСообщенияОбОшибке = ""; + + // выполняем попытку установки внешнего соединения + ВнешнееСоединение = ОбменДаннымиСервер.УстановитьВнешнееСоединение(СтруктураНастроек, СтрокаСообщенияОбОшибке, ОшибкаПодключенияКомпоненты); + + Если ВнешнееСоединение = Неопределено Тогда + + // Выводим сообщение об ошибке + Сообщение = НСтр("ru = 'Ошибка при установке подключения ко второй информационной базе: %1'"); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); + + КонецЕсли; + +КонецПроцедуры + +// Возвращает признак того, что набора записей регистра не содержит данных. +// +Функция НаборЗаписейРегистраПустой(СтруктураЗаписи, ИмяРегистра) Экспорт + + МетаданныеРегистра = Метаданные.РегистрыСведений[ИмяРегистра]; + + // создаем набор записей регистра + НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); + + // устанавливаем отбор по измерениям регистра + Для Каждого Измерение ИЗ МетаданныеРегистра.Измерения Цикл + + // если задано значение в структуре, то отбор устанавливаем + Если СтруктураЗаписи.Свойство(Измерение.Имя) Тогда + + НаборЗаписей.Отбор[Измерение.Имя].Установить(СтруктураЗаписи[Измерение.Имя]); + + КонецЕсли; + + КонецЦикла; + + НаборЗаписей.Прочитать(); + + Возврат НаборЗаписей.Количество() = 0; + +КонецФункции + +// Возвращает ключ сообщения журнала регистрации по строке действия +// +Функция ПолучитьКлючСообщенияЖурналаРегистрацииПоСтрокеДействия(УзелИнформационнойБазы, ДействиеПриОбменеСтрокой) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбменДаннымиСервер.ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене[ДействиеПриОбменеСтрокой]); + +КонецФункции + +// Возвращает структуру с данными отбора для журнала регистрации +// +Функция ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы, Знач ДействиеПриОбмене) Экспорт + + Если ТипЗнч(ДействиеПриОбмене) = Тип("Строка") Тогда + + ДействиеПриОбмене = Перечисления.ДействияПриОбмене[ДействиеПриОбмене]; + + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + СостоянияОбменовДанными = РегистрыСведений.СостоянияОбменовДанными.СостоянияОбменовДанными(УзелИнформационнойБазы, ДействиеПриОбмене); + + Отбор = Новый Структура; + Отбор.Вставить("СобытиеЖурналаРегистрации", ОбменДаннымиСервер.ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене)); + Отбор.Вставить("ДатаНачала", СостоянияОбменовДанными.ДатаНачала); + Отбор.Вставить("ДатаОкончания", СостоянияОбменовДанными.ДатаОкончания); + + Возврат Отбор; +КонецФункции + +// Получает код предопределенного узла плана обмена +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе +// +// Возвращаемое значение: +// Строка - код предопределенного узла плана обмена +// +Функция ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); +КонецФункции + +// Возвращает массив всех ссылочных типов, определенных в конфигурации +// +Функция ВсеСсылочныеТипыКонфигурации() Экспорт + + Возврат ОбменДаннымиПовтИсп.ВсеСсылочныеТипыКонфигурации(); + +КонецФункции + +// Получает состояние длительной операции (фонового задания), выполняемой в базе-корреспонденте. +// +Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, + Знач URLВебСервиса, + Знач ИмяПользователя, + Знач Пароль, + СтрокаСообщенияОбОшибке = "" + ) Экспорт + + ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); + ПараметрыПодключения.WSURLВебСервиса = URLВебСервиса; + ПараметрыПодключения.WSИмяПользователя = ИмяПользователя; + ПараметрыПодключения.WSПароль = Пароль; + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + Если WSПрокси = Неопределено Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + Возврат WSПрокси.GetContinuousOperationStatus(ИдентификаторОперации, СтрокаСообщенияОбОшибке); +КонецФункции + +// Получает сообщение обмена из базы-корреспондента через веб-сервис. +// Сохраняет полученное сообщение обмена во временный каталог. +// +Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + Пароль = "" + ) Экспорт + + Возврат ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + Пароль + ); +КонецФункции + +// Получает сообщение обмена из базы-корреспондента через веб-сервис. +// Сохраняет полученное сообщение обмена во временный каталог. +// Используется в том случае, если получение сообщения обмена выполнялось в контексте фонового задания в базе-корреспонденте. +// +Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + Знач Пароль = "" + ) Экспорт + + Возврат ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + Пароль + ); +КонецФункции + +// Возвращает признак изменения конфигурации для подчиненного узла распределенной ИБ. +// +Функция ТребуетсяУстановкаОбновления() Экспорт + + ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); + + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбменДаннымиСервер.ТребуетсяУстановкаОбновления(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обмен данными под полными правами + +// Устанавливает параметры сеанса подсистемы обмена данными +// +// Параметры: +// ИмяПараметра - Строка - имя параметра сеанса, значение которого необходимо установить +// УстановленныеПараметры - массив - в данный параметр помещается информация об установленных параметрах сеанса +// +Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт + + // процедура обновления повторно-используемых значений и параметров сеанса + ОбновитьКэшМеханизмаРегистрацииОбъектов(); + + // зарегистрируем имена параметров, которые установлены при + // выполнении ОбменДаннымиВызовСервера.ОбновитьКэшМеханизмаРегистрацииОбъектов + УстановленныеПараметры.Добавить("ОбменДаннымиВключен"); + УстановленныеПараметры.Добавить("ИспользуемыеПланыОбмена"); + УстановленныеПараметры.Добавить("ПравилаВыборочнойРегистрацииОбъектов"); + УстановленныеПараметры.Добавить("ПравилаРегистрацииОбъектов"); + УстановленныеПараметры.Добавить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО"); + +КонецПроцедуры + +Процедура ВыполнитьОбработчикВПривилегированномРежиме(Значение, Знач СтрокаОбработчика) Экспорт + + Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда + ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Выполнить(СтрокаОбработчика); + +КонецПроцедуры + +// Находит регламентное задание по GUID +// +// Параметры: +// УникальныйНомерЗадания - Строка - строка с GUID регламентного задания +// +// Возвращаемое значение: +// Неопределено - если поиск регламентного задания по GUID не дал результатов +// ТекущееРегламентноеЗадание - РегламентноеЗадание - найденное по GUID регламентное задание +// +Функция НайтиРегламентноеЗаданиеПоПараметру(УникальныйНомерЗадания) Экспорт + + // возвращаемое значение функции + РегламентноеЗадание = Неопределено; + + Если ПустаяСтрока(УникальныйНомерЗадания) Тогда + + Возврат Неопределено; + + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Попытка + + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(УникальныйНомерЗадания)); + + Исключение + + РегламентноеЗадание = Неопределено; + + КонецПопытки; + + Возврат РегламентноеЗадание; + +КонецФункции + +// Возвращает структуру со значениями свойств объекта, полученных запросом из ИБ. +// Ключ структуры – имя свойства; Значение – значение свойства объекта. +// +// Параметры: +// Ссылка – ссылка на объект ИБ, значения свойств которого требуется получить +// +// Возвращаемое значение: +// Тип: Структура. Структура со значениями свойств объекта. +// +Функция ПолучитьЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, Знач СвойстваОбъектаСтрокой, Знач ОбъектМетаданныхИмя) Экспорт + + ЗначенияСвойств = ОбменДаннымиСобытия.СкопироватьСтруктуру(СвойстваОбъекта); + + Если ЗначенияСвойств.Количество() = 0 Тогда + + Возврат ЗначенияСвойств; // возвращаем пустую структуру + + КонецЕсли; + + ТекстЗапроса = " + |ВЫБРАТЬ + | [СвойстваОбъектаСтрокой] + |ИЗ + | [ОбъектМетаданныхИмя] КАК Таблица + |ГДЕ + | Таблица.Ссылка = &Ссылка + |"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СвойстваОбъектаСтрокой]", СвойстваОбъектаСтрокой); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОбъектМетаданныхИмя]", ОбъектМетаданныхИмя); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("Ссылка", Ссылка); + + УстановитьПривилегированныйРежим(Истина); + + Попытка + + Выборка = Запрос.Выполнить().Выбрать(); + + Исключение + + // фиксируем ошибку в ЖР + СтрокаСообщения = НСтр("ru = 'Ошибка при получении свойств ссылки. Ошибка выполнения запроса: [ОписаниеОшибки]'"); + СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОписаниеОшибки]", ОписаниеОшибки()); + ОбменДаннымиСобытия.ЗаписьЖурналаРегистрацииПРО(СтрокаСообщения, Ссылка.Метаданные()); + + // устанавливаем все свойства в значение "Неопределено" + Для Каждого Элемент ИЗ ЗначенияСвойств Цикл + + ЗначенияСвойств[Элемент.Ключ] = Неопределено; + + КонецЦикла; + + Возврат ЗначенияСвойств; + КонецПопытки; + + Если Выборка.Следующий() Тогда + + Для Каждого Элемент ИЗ ЗначенияСвойств Цикл + + ЗначенияСвойств[Элемент.Ключ] = Выборка[Элемент.Ключ]; + + КонецЦикла; + + КонецЕсли; + + Возврат ЗначенияСвойств; + +КонецФункции + +// Возвращает массив узлов плана обмена по заданным параметрам запроса и тексту запроса к таблице плана обмена +// +// +Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, Знач ТекстЗапроса, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // возвращаемое значение функции + МассивУзловРезультат = Новый Массив; + + // подготавливаем запрос для получения узлов планов обмена + Запрос = Новый Запрос; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОбязательныеУсловия]", + "И ПланОбменаОсновнаяТаблица.Ссылка <> &" + ИмяПланаОбмена + "ЭтотУзел + |И НЕ ПланОбменаОсновнаяТаблица.ПометкаУдаления + |[УсловиеОтбораПоРеквизитуФлагу] + |"); + // + Если ПустаяСтрока(ИмяРеквизитаФлага) Тогда + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеОтбораПоРеквизитуФлагу]", ""); + + Иначе + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеОтбораПоРеквизитуФлагу]", + "И (ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПоУсловию) + |ИЛИ ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ПустаяСсылка))"); + // + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаФлага]", ИмяРеквизитаФлага); + + КонецЕсли; + + // текст запроса + Запрос.Текст = ТекстЗапроса; + + Запрос.УстановитьПараметр(ИмяПланаОбмена + "ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); + + // задаем значения параметров запроса из свойств объекта + Для Каждого Элемент ИЗ ЗначенияСвойств Цикл + + Запрос.УстановитьПараметр("СвойствоОбъекта_" + Элемент.Ключ, Элемент.Значение); + + КонецЦикла; + + Попытка + + МассивУзловРезультат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + Исключение + + // фиксируем ошибку в ЖР + + СтрокаСообщения = НСтр("ru = 'Ошибка при получении списка узлов получателей. Ошибка выполнения запроса: [ОписаниеОшибки]'"); + СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОписаниеОшибки]", ОписаниеОшибки()); + + ОбменДаннымиСобытия.ЗаписьЖурналаРегистрацииПРО(СтрокаСообщения); + + Возврат Новый Массив // возвращаем пустой массив + + КонецПопытки; + + // возвращаем результирующий массив узлов + Возврат МассивУзловРезультат; + +КонецФункции + +// Возвращает значение параметра сеанса ПравилаРегистрацииОбъектов, полученное в привилегированном режиме. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Тип: ХранилищеЗначения. Значение параметра сеанса ПравилаРегистрацииОбъектов. +// +Функция ПараметрыСеансаПравилаРегистрацииОбъектов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ПараметрыСеанса.ПравилаРегистрацииОбъектов; + +КонецФункции + +// Функция возвращает список всех узлов заданного плана обмена кроме предопределенного узла +// +// Параметры: +// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе, список узлов для которого необходимо получить +// +// Возвращаемое значение: +// Массив – список всех узлов заданного плана обмена. +// +Функция ВсеУзлыПланаОбмена(Знач ИмяПланаОбмена) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ОбменДаннымиПовтИсп.ПолучитьМассивУзловПланаОбмена(ИмяПланаОбмена); + +КонецФункции + +// Возвращает признак того, что для получателя зарегистрированы изменения данных +// +Функция ИзмененияЗарегистрированы(Знач Получатель) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 1 + |ИЗ + | [Таблица].Изменения КАК ТаблицаИзменений + |ГДЕ + | ТаблицаИзменений.Узел = &Узел"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Узел", Получатель); + + УстановитьПривилегированныйРежим(Истина); + + СоставПланаОбмена = Метаданные.ПланыОбмена[ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Получатель)].Состав; + + Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл + + Запрос.Текст = СтрЗаменить(ТекстЗапроса, "[Таблица]", ЭлементСостава.Метаданные.ПолноеИмя()); + + РезультатЗапроса = Запрос.Выполнить(); + + Если Не РезультатЗапроса.Пустой() Тогда + Возврат Истина; + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; +КонецФункции + +// Признак наличия настроенного обмена данными – определяется по наличию узлов в планах обмена. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Тип: Булево. Истина – в системе есть настроенный обмен данными; Ложь – обмена нет. +// +Функция ОбменДаннымиВключен() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Возврат ПараметрыСеанса.ОбменДаннымиВключен; + +КонецФункции + +// Получает массив узлов плана обмена, для которых установлен признак «Выгружать всегда» +// +// Параметры: +// ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, по которому определяются узлы +// ИмяРеквизитаФлага – Строка – имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов +// +// Возвращаемое значение: +// Тип: Массив. Массив узлов плана обмена, для которых установлен признак «Выгружать всегда» +// +Функция ПолучитьМассивУзловДляРегистрацииВыгружатьВсегда(Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт + + ТекстЗапроса = " + |ВЫБРАТЬ + | ШапкаПланаОбмена.Ссылка КАК Узел + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ШапкаПланаОбмена + |ГДЕ + | ШапкаПланаОбмена.Ссылка <> &ЭтотУзел + | И ШапкаПланаОбмена.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьВсегда) + | И Не ШапкаПланаОбмена.ПометкаУдаления + |"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаФлага]", ИмяРеквизитаФлага); + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); + Запрос.Текст = ТекстЗапроса; + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); + +КонецФункции + +// Получает массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости» +// +// Параметры: +// Ссылка – ссылка на объект ИБ, для которого необходимо получить массив узлов, в которые объект ранее выгружался +// ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, по которому определяются узлы +// ИмяРеквизитаФлага – Строка – имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов +// +// Возвращаемое значение: +// Тип: Массив. Массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости» +// +Функция ПолучитьМассивУзловДляРегистрацииВыгружатьПриНеобходимости(Ссылка, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт + + ТекстЗапроса = " + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ШапкаПланаОбмена.Ссылка КАК Узел + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ШапкаПланаОбмена + |ЛЕВОЕ СОЕДИНЕНИЕ + | РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз + |ПО + | ШапкаПланаОбмена.Ссылка = СоответствияОбъектовИнформационныхБаз.УзелИнформационнойБазы + | И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект + |ГДЕ + | ШапкаПланаОбмена.Ссылка <> &ЭтотУзел + | И ШапкаПланаОбмена.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости) + | И НЕ ШапкаПланаОбмена.ПометкаУдаления + | И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект + |"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаФлага]", ИмяРеквизитаФлага); + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); + Запрос.УстановитьПараметр("Объект", Ссылка); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); + +КонецФункции + diff --git a/SSL/src/CommonModules/ОбменДаннымиВызовСервера/ОбменДаннымиВызовСервера.mdo b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/ОбменДаннымиВызовСервера.mdo new file mode 100644 index 000000000..b2c87ba2c --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиВызовСервера/ОбменДаннымиВызовСервера.mdo @@ -0,0 +1,10 @@ + + + ОбменДаннымиВызовСервера + + ru + Обмен данными вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl new file mode 100644 index 000000000..e5d4efde0 --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиГлобальный/Module.bsl @@ -0,0 +1,40 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен данными" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Выполняет проверку необходимости обновления конфигурации базы данных в подчиненном узле. +// +Процедура ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла() Экспорт + + ТребуетсяОбновление = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ТребуетсяОбновлениеКонфигурацииУзлаРИБ; + ПроверитьНеобходимостьОбновления(ТребуетсяОбновление); + +КонецПроцедуры + +// Выполняет проверку необходимости обновления конфигурации базы данных в подчиненном узле при запуске. +// +Процедура ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзлаПриЗапуске() Экспорт + + ТребуетсяОбновление = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ТребуетсяОбновлениеКонфигурацииУзлаРИБ; + ПроверитьНеобходимостьОбновления(ТребуетсяОбновление); + +КонецПроцедуры + +Процедура ПроверитьНеобходимостьОбновления(ТребуетсяОбновлениеКонфигурацииУзлаРИБ) + + Если ТребуетсяОбновлениеКонфигурацииУзлаРИБ Тогда + Пояснение = НСтр("ru = 'Получено обновление программы из ""%1"". + |Необходимо установить обновление программы, после чего обмен данными будет продолжен.'"); + Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Пояснение, СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ГлавныйУзел); + ПоказатьОповещениеПользователя(НСтр("ru = 'Установить обновление'"), "e1cib/app/Обработка.ВыполнениеОбменаДанными", + Пояснение, БиблиотекаКартинок.Предупреждение32); + Оповестить("ВыполненОбменДанными"); + КонецЕсли; + + ПодключитьОбработчикОжидания("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла", 60 * 60, Истина); // раз в час + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиГлобальный/ОбменДаннымиГлобальный.mdo b/SSL/src/CommonModules/ОбменДаннымиГлобальный/ОбменДаннымиГлобальный.mdo new file mode 100644 index 000000000..507a22cd2 --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиГлобальный/ОбменДаннымиГлобальный.mdo @@ -0,0 +1,11 @@ + + + ОбменДаннымиГлобальный + + ru + Обмен данными глобальный + + true + true + true + diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl index cca850521..6b37ca031 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиент/Module.bsl @@ -389,10 +389,18 @@ // Открывает форму записи регистра сведений по заданному отбору // -Процедура ОткрытьФормуЗаписиРегистраСведенийПоОтбору(Отбор, ЗначенияЗаполнения, Знач ИмяРегистра, ФормаВладелец) Экспорт +Процедура ОткрытьФормуЗаписиРегистраСведенийПоОтбору( + Отбор, + ЗначенияЗаполнения, + Знач ИмяРегистра, + ФормаВладелец, + Знач ИмяФормы = "", + ПараметрыФормы = Неопределено + ) Экспорт + Перем КлючЗаписи; - НаборЗаписейПустой = ОбменДаннымиСервер.НаборЗаписейРегистраПустой(Отбор, ИмяРегистра); + НаборЗаписейПустой = ОбменДаннымиВызовСервера.НаборЗаписейРегистраПустой(Отбор, ИмяРегистра); Если Не НаборЗаписейПустой Тогда @@ -408,8 +416,31 @@ ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи); ПараметрыЗаписи.Вставить("ЗначенияЗаполнения", ЗначенияЗаполнения); + Если ПараметрыФормы <> Неопределено Тогда + + Для Каждого Элемент Из ПараметрыФормы Цикл + + ПараметрыЗаписи.Вставить(Элемент.Ключ, Элемент.Значение); + + КонецЦикла; + + КонецЕсли; + + Если ПустаяСтрока(ИмяФормы) Тогда + + ПолноеИмяФормы = "РегистрСведений.[ИмяРегистра].ФормаЗаписи"; + ПолноеИмяФормы = СтрЗаменить(ПолноеИмяФормы, "[ИмяРегистра]", ИмяРегистра); + + Иначе + + ПолноеИмяФормы = "РегистрСведений.[ИмяРегистра].Форма.[ИмяФормы]"; + ПолноеИмяФормы = СтрЗаменить(ПолноеИмяФормы, "[ИмяРегистра]", ИмяРегистра); + ПолноеИмяФормы = СтрЗаменить(ПолноеИмяФормы, "[ИмяФормы]", ИмяФормы); + + КонецЕсли; + // открываем форму записи РС - ОткрытьФормуМодально("РегистрСведений." + ИмяРегистра + ".ФормаЗаписи", ПараметрыЗаписи, ФормаВладелец); + ОткрытьФормуМодально(ПолноеИмяФормы, ПараметрыЗаписи, ФормаВладелец); КонецПроцедуры @@ -451,7 +482,7 @@ Состояние(НСтрока); // загрузка правил на сервере - ОбменДаннымиСервер.ЗагрузитьИнформациюОПравилах(Отказ, АдресВременногоХранилища, СтрокаИнформацииОПравилах); + ОбменДаннымиВызовСервера.ЗагрузитьИнформациюОПравилах(Отказ, АдресВременногоХранилища, СтрокаИнформацииОПравилах); Если Отказ Тогда @@ -473,7 +504,7 @@ // Процедура ПерейтиВЖурналРегистрацииСобытийДанных(УзелИнформационнойБазы, ПараметрыВыполненияКоманды, ДействиеПриОбменеСтрокой) Экспорт - СобытиеЖурналаРегистрации = ОбменДаннымиСервер.ПолучитьКлючСообщенияЖурналаРегистрацииПоСтрокеДействия(УзелИнформационнойБазы, ДействиеПриОбменеСтрокой); + СобытиеЖурналаРегистрации = ОбменДаннымиВызовСервера.ПолучитьКлючСообщенияЖурналаРегистрацииПоСтрокеДействия(УзелИнформационнойБазы, ДействиеПриОбменеСтрокой); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрации); @@ -487,7 +518,7 @@ Процедура ПерейтиВЖурналРегистрацииСобытийДанныхМодально(УзелИнформационнойБазы, Владелец, ДействиеПриОбмене) Экспорт // вызов сервера - ПараметрыФормы = ОбменДаннымиСервер.ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене); + ПараметрыФормы = ОбменДаннымиВызовСервера.ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене); ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", ПараметрыФормы, Владелец); @@ -499,20 +530,25 @@ // УзелИнформационнойБазы - ПланОбменаСсылка - узел плана обмена, для которого необходимо открыть форму; // Владелец – форма-владелец для открываемой формы; // -Процедура ВыполнитьОбменДаннымиОбработкаКоманды(УзелИнформационнойБазы, Владелец) Экспорт +Процедура ВыполнитьОбменДаннымиОбработкаКоманды(УзелИнформационнойБазы, Владелец, ЗадатьВопрос = Истина, АдресДляВосстановленияПароляУчетнойЗаписи = "") Экспорт - ТекстВопроса = НСтр("ru = 'Выполнить обмен данными с ""[УзелИнформационнойБазы]""?'"); - ТекстВопроса = СтрЗаменить(ТекстВопроса, "[УзелИнформационнойБазы]", Строка(УзелИнформационнойБазы)); - - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат; + Если ЗадатьВопрос Тогда + + ТекстВопроса = НСтр("ru = 'Выполнить обмен данными с ""[УзелИнформационнойБазы]""?'"); + ТекстВопроса = СтрЗаменить(ТекстВопроса, "[УзелИнформационнойБазы]", Строка(УзелИнформационнойБазы)); + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + КонецЕсли; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); + ПараметрыФормы.Вставить("АдресДляВосстановленияПароляУчетнойЗаписи", АдресДляВосстановленияПароляУчетнойЗаписи); - ОткрытьФорму("ОбщаяФорма.ВыполнениеОбменаДанными", ПараметрыФормы, Владелец, УзелИнформационнойБазы); + ОткрытьФорму("Обработка.ВыполнениеОбменаДанными.Форма.Форма", ПараметрыФормы, Владелец, УзелИнформационнойБазы); КонецПроцедуры @@ -552,66 +588,24 @@ // Процедура ПриНачалеРаботыСистемы() Экспорт - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - ИЛИ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если НЕ ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных ИЛИ ПараметрыРаботыКлиента.РазделениеВключено Тогда Возврат; КонецЕсли; - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - - // если выполняется первый запуск подчиненного узла РИБ - Если ПараметрыРаботыКлиента.ЭтоПодчиненныйУзелРИБ - И Не ПараметрыРаботыКлиента.НастройкаПодчиненногоУзлаРИБЗавершена Тогда + Если ПараметрыРаботыКлиента.ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла Тогда ПараметрыФормы = Новый Структура("ИмяПланаОбмена, ЭтоПродолжениеНастройкиВПодчиненномУзлеРИБ", ПараметрыРаботыКлиента.ИмяПланаОбменаРИБ); - ОткрытьФорму("Обработка.ПомощникСозданияОбменаДанными.Форма.Форма", ПараметрыФормы); + ИначеЕсли ПараметрыРаботыКлиента.ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла Тогда + + ПодключитьОбработчикОжидания("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзлаПриЗапуске", 1, Истина); + КонецЕсли; КонецПроцедуры -// Выполняется проверка дозагрузки сообщения обмена с изменениями конфигурации. -// Загрузка такого сообщения обмена в подчиненном узле выполняется в два этапа. -// Вначале выполняется загрузка изменения конфигурации, затем загрузка данных. -// Эта функция необходима для реализации сценария, когда загрузка данных -// сообщения выполняется перед выполнением обработчиков обновления ИБ. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Истина – либо загрузка сообщения не требуется, либо загрузка сообщения -// выполнена успешно или отменена; Ложь – загрузка сообщения выполнена с ошибками. -// -Функция ПроверитьЗагрузкуСообщенияОбменаСИзменениямиКонфигурацииДляПодчиненногоУзла() Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат Истина; - КонецЕсли; - - Результат = Истина; - - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - - Если ПараметрыРаботыКлиента.ЭтоПодчиненныйУзелРИБ - И ПараметрыРаботыКлиента.НеобходимоОбновлениеИнформационнойБазы - И ПараметрыРаботыКлиента.НастройкаПодчиненногоУзлаРИБЗавершена Тогда - - Результат = ОткрытьФормуМодально("ОбщаяФорма.ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации") = Истина; - - КонецЕсли; - - Если Не Результат Тогда - - ЗавершитьРаботуСистемы(Ложь); - - КонецЕсли; - - Возврат Результат; -КонецФункции - // Обработать параметры запуска // // Параметры @@ -624,6 +618,10 @@ // Функция ОбработатьПараметрыЗапуска(Знач ЗначениеПараметраЗапуска, Знач ПараметрыЗапуска) Экспорт + Если НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ДоступноИспользованиеРазделенныхДанных Тогда + Возврат Ложь; + КонецЕсли; + Если ЗначениеПараметраЗапуска = ВРег("ВыполнитьИнтерактивнуюЗагрузкуДанных") Тогда ПараметрыФормы = Новый Структура; @@ -653,7 +651,7 @@ #Иначе - КодНовогоУзлаВторойБазы = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); + КодНовогоУзлаВторойБазы = ОбменДаннымиВызовСервера.ПолучитьКодЭтогоУзлаДляПланаОбмена(ИмяПланаОбмена); ПутьКИсполняемомуФайлуПриложения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогПрограммы(), "1cv8.exe"); @@ -696,7 +694,7 @@ // Процедура ОбновитьВсеОткрытыеДинамическиеСписки() Экспорт - Типы = ОбменДаннымиСервер.ВсеСсылочныеТипыКонфигурации(); + Типы = ОбменДаннымиВызовСервера.ВсеСсылочныеТипыКонфигурации(); Для Каждого Тип Из Типы Цикл @@ -706,6 +704,21 @@ КонецПроцедуры +Процедура ВыполнитьОбновлениеИнформационнойБазы() Экспорт + СтандартнаяОбработка = Истина; + + ОбменДаннымиКлиентПереопределяемый.ВыполнитьОбновлениеИнформационнойБазы(СтандартнаяОбработка); + + Если СтандартнаяОбработка Тогда + СтандартныеПодсистемыКлиентПереопределяемый.ВыполнитьОбновлениеИнформационнойБазы(СтандартнаяОбработка); + КонецЕсли; + + Если СтандартнаяОбработка Тогда + ОткрытьФорму("ОбщаяФорма.ДополнительноеОписание", Новый Структура("Заголовок,ИмяМакета", + "Установка обновления", "ИнструкцияКакВыполнитьУстановкуОбновленияВручную")); + КонецЕсли; +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/Module.bsl index 4e6e0a44a..620d85d01 100644 --- a/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиКлиентПереопределяемый/Module.bsl @@ -30,3 +30,12 @@ // Конец СтандартныеПодсистемы.РегламентныеЗадания КонецПроцедуры + +// Обновляет конфигурацию базы данных. +// +// Параметры: +// СтандартнаяОбработка - Булево - если в процедуре установить данному параметру значение Ложь, то инструкция по +// "ручному" обновлению показана не будет. +Процедура ВыполнитьОбновлениеИнформационнойБазы(СтандартнаяОбработка) Экспорт + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl new file mode 100644 index 000000000..9537d9ffc --- /dev/null +++ b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/Module.bsl @@ -0,0 +1,42 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен данными" +// +//////////////////////////////////////////////////////////////////////////////// + +Процедура ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(Знач ИмяПользователя) Экспорт + + Если СтрокаСодержитСимвол(ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси()) Тогда + + СтрокаСообщения = НСтр("ru = 'В имени пользователя %1 содержатся недопустимые символы. + |Имя пользователя не должно содержать символы %2.'" + ); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, + ИмяПользователя, НедопустимыеСимволыВИмениПользователяWSПрокси() + ); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + +КонецПроцедуры + +Функция НедопустимыеСимволыВИмениПользователяWSПрокси() Экспорт + + Возврат "@/\[]#&*?:;="; + +КонецФункции + +Функция СтрокаСодержитСимвол(Знач Строка, Знач СтрокаСимволов) + + Для Индекс = 1 По СтрДлина(СтрокаСимволов) Цикл + + Символ = Сред(СтрокаСимволов, Индекс, 1); + + Если Найти(Строка, Символ) <> 0 Тогда + + Возврат Истина; + + КонецЕсли; + + КонецЦикла; + + Возврат Ложь; +КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/ОбменДаннымиКлиентСервер.mdo b/SSL/src/CommonModules/ОбменДаннымиКлиентСервер/ОбменДаннымиКлиентСервер.mdo new file mode 100644 index 000000000..fa0b831e0 --- /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 dc65cea96..03334a1af 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/Module.bsl @@ -49,8 +49,8 @@ КонецПроцедуры -// Обработчик перед отправкой данных. -// Используется для переопределения стандартной обработки отправки данных. +// Обработчик при выгрузке данных. +// Используется для переопределения стандартной обработки выгрузки данных. // В данном обработчике должна быть реализована логика выгрузки данных: // выборка данных для выгрузки, сериализация данных в файл сообщения или сериализация данных в поток. // После выполнения обработчика выгруженные данные будут отправлены получателю подсистемой обмена данными. @@ -91,7 +91,7 @@ // Счетчик отправленных объектов. Используется для определения количества отправленных объектов // для последующей фиксации в протоколе обмена. // -Процедура ПередОтправкойДанных(СтандартнаяОбработка, +Процедура ПриВыгрузкеДанных(СтандартнаяОбработка, Получатель, ИмяФайлаСообщения, ДанныеСообщения, @@ -100,21 +100,10 @@ КоличествоОтправленныхОбъектов ) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями - ОбменСообщениямиВнутренний.ПередОтправкойДанных(СтандартнаяОбработка, - Получатель, - ИмяФайлаСообщения, - ДанныеСообщения, - КоличествоЭлементовВТранзакции, - ИмяСобытияЖурналаРегистрации, - КоличествоОтправленныхОбъектов - ); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями - КонецПроцедуры -// Обработчик перед получением данных. -// Используется для переопределения стандартной обработки получения данных. +// Обработчик при загрузке данных. +// Используется для переопределения стандартной обработки загрузки данных. // В данном обработчике должна быть реализована логика загрузки данных: // необходимые проверки перед загрузкой данных, сериализация данных из файла сообщения или сериализация данных из потока. // Формат сообщения для загрузки может быть произвольным. @@ -154,7 +143,7 @@ // Счетчик полученных объектов. Используется для определения количества загруженных объектов // для последующей фиксации в протоколе обмена. // -Процедура ПередПолучениемДанных(СтандартнаяОбработка, +Процедура ПриЗагрузкеДанных(СтандартнаяОбработка, Отправитель, ИмяФайлаСообщения, ДанныеСообщения, @@ -163,17 +152,6 @@ КоличествоПолученныхОбъектов ) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями - ОбменСообщениямиВнутренний.ПередПолучениемДанных(СтандартнаяОбработка, - Отправитель, - ИмяФайлаСообщения, - ДанныеСообщения, - КоличествоЭлементовВТранзакции, - ИмяСобытияЖурналаРегистрации, - КоличествоПолученныхОбъектов - ); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями - КонецПроцедуры // Обработчик механизма регистрации объектов "После определения получателей". diff --git a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/ОбменДаннымиПереопределяемый.mdo b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/ОбменДаннымиПереопределяемый.mdo index aa680d287..6b5f019e8 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/ОбменДаннымиПереопределяемый.mdo +++ b/SSL/src/CommonModules/ОбменДаннымиПереопределяемый/ОбменДаннымиПереопределяемый.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl index 841d1c4d2..7da49bbf1 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/Module.bsl @@ -64,15 +64,6 @@ КонецФункции -// Получает объект WSПрокси по настройкам подключения -// (Только для внутреннего использования) -// -Функция ПолучитьWSПрокси(НастройкиПодключения, СтрокаСообщенияОбОшибке = "") Экспорт - - Возврат ОбменДаннымиСервер.ПолучитьWSПрокси(НастройкиПодключения, СтрокаСообщенияОбОшибке); - -КонецФункции - // Возвращает признак предопределенного узла этой информационной базы по переданному значению ссылки // // Параметры: @@ -93,6 +84,49 @@ // +Функция АвтономнаяРаботаПоддерживается() Экспорт + + Возврат ПланыОбменаАвтономнойРаботы().Количество() = 1; + +КонецФункции + +Функция ПланОбменаАвтономнойРаботы() Экспорт + + Результат = ПланыОбменаАвтономнойРаботы(); + + Если Результат.Количество() = 0 Тогда + + ВызватьИсключение НСтр("ru = 'Автономная работа в системе не предусмотрена.'"); + + ИначеЕсли Результат.Количество() > 1 Тогда + + ВызватьИсключение НСтр("ru = 'Создано более одного плана обмена для автономной работы.'"); + + КонецЕсли; + + Возврат Результат[0]; +КонецФункции + +Функция ЭтоАвтономноеРабочееМесто() Экспорт + + Возврат АвтономнаяРаботаПоддерживается() + И ПланыОбмена.ГлавныйУзел() <> Неопределено + И ПланыОбмена.ГлавныйУзел().Метаданные().Имя = ПланОбменаАвтономнойРаботы() + ; + +КонецФункции + +// Определяет, является ли переданный узел плана обмена автономным рабочим местом. +// +Функция ЭтоУзелАвтономногоРабочегоМеста(Знач УзелИнформационнойБазы) Экспорт + + Возврат АвтономнаяРаботаПоддерживается() + И УзелИнформационнойБазы.Метаданные().Имя = ПланОбменаАвтономнойРаботы() + ; +КонецФункции + +// + Функция НайтиУзелПланаОбменаПоКоду(ИмяПланаОбмена, КодУзла) Экспорт ТекстЗапроса = @@ -140,7 +174,7 @@ // Функция ПравилаРегистрацииОбъектовПланаОбмена(Знач ИмяПланаОбмена) Экспорт - ПравилаРегистрацииОбъектов = ОбменДаннымиСервер.ПараметрыСеансаПравилаРегистрацииОбъектов().Получить(); + ПравилаРегистрацииОбъектов = ОбменДаннымиВызовСервера.ПараметрыСеансаПравилаРегистрацииОбъектов().Получить(); Возврат ПравилаРегистрацииОбъектов.Скопировать(Новый Структура("ИмяПланаОбмена", ИмяПланаОбмена)); КонецФункции @@ -728,7 +762,7 @@ ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Ложь; ОбработкаОбменаДанными.ДописыватьДанныеВПротоколОбмена = Ложь; ОбработкаОбменаДанными.ВыгружатьТолькоРазрешенные = Ложь; - ОбработкаОбменаДанными.ФлагРежимОтладки = Ложь; + ОбработкаОбменаДанными.ПродолжитьПриОшибке = Ложь; ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = ""; @@ -739,6 +773,21 @@ ОбработкаОбменаДанными.КоличествоОбъектовНаТранзакцию = РегистрыСведений.НастройкиТранспортаОбмена.КоличествоЭлементовВТранзакцииЗагрузкиДанных(УзелИнформационнойБазы); + ИмяПланаОбмена = ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); + НастройкиОтладки = ОбменДаннымиСервер.НастройкиРежимаОтладки(ИмяПланаОбмена); + + Если НастройкиОтладки = Неопределено Или ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ОбработкаОбменаДанными.ОтладкаОбработчиковЗагрузки = Ложь; + ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки = ""; + + Иначе; + + ОбработкаОбменаДанными.ОтладкаОбработчиковЗагрузки = НастройкиОтладки.РежимОтладкиЗагрузки; + ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки = НастройкиОтладки.ИмяФайлаОбработкиДляОтладкиЗагрузки; + + КонецЕсли; + Возврат ОбработкаОбменаДанными; КонецФункции @@ -762,7 +811,7 @@ // Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага) Экспорт - Возврат ОбменДаннымиСервер.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага); + Возврат ОбменДаннымиВызовСервера.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ИмяРеквизитаФлага); КонецФункции @@ -779,7 +828,7 @@ Результат = ПланыОбмена[ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)].ИспользуемыеТранспортыСообщенийОбмена(); // Для базовых версий конфигураций обмен через COM-соединение и Веб-сервис не поддерживаем - Если СтандартныеПодсистемыПереопределяемый.ЭтоБазоваяВерсияКонфигурации() Тогда + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.COM); ОбщегоНазначенияКлиентСервер.УдалитьЗначениеИзМассива(Результат, Перечисления.ВидыТранспортаСообщенийОбмена.WS); @@ -823,29 +872,9 @@ КонецФункции -// Получает объект WSПрокси по настройкам подключения для версии 2.0.1.6 -// (Только для внутреннего использования) -// -Функция ПолучитьWSПрокси_2_0_1_6(НастройкиПодключения, СтрокаСообщенияОбОшибке = "") Экспорт +Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач Пароль = "") Экспорт - Возврат ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(НастройкиПодключения, СтрокаСообщенияОбОшибке); - -КонецФункции - -// Получает объект WSПрокси по настройкам подключения, заданным для узла плана обмена -// (Только для внутреннего использования) -// -Функция ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "") Экспорт - - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(УзелИнформационнойБазы); - - Возврат ОбменДаннымиСервер.ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке); - -КонецФункции - -Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы) Экспорт - - Возврат ОбменДаннымиСервер.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы); + Возврат ОбменДаннымиСервер.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, Пароль); КонецФункции @@ -879,6 +908,8 @@ Таблица = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Таблица.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); + ЗаполнитьЗначенияПолейДереваОбъектов(Таблица.Строки); + Таблица.Колонки.Удалить("Ссылка"); Таблица.Колонки.Удалить("ЭтоГруппа"); @@ -1057,6 +1088,41 @@ Возврат Результат; КонецФункции +Функция ПланыОбменаАвтономнойРаботы() + + // План обмена для организации автономной работы в модели сервиса должен: + // - быть разделенным + // - быть планом обмена распределенной ИБ + // - использоваться для обмена в модели сервиса (ПланОбменаИспользуетсяВМоделиСервиса = Истина) + + Результат = Новый Массив; + + Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл + + Если Не ОбменДаннымиСервер.ЭтоРазделенныйПланОбменаБСП(ПланОбмена.Имя) Тогда + Продолжить; + ИначеЕсли Не ПланОбмена.РаспределеннаяИнформационнаяБаза Тогда + Продолжить; + КонецЕсли; + + ПланОбменаИспользуетсяВМоделиСервиса = Ложь; + Попытка + ПланОбменаИспользуетсяВМоделиСервиса = ПланыОбмена[ПланОбмена.Имя].ПланОбменаИспользуетсяВМоделиСервиса(); + Исключение + ПланОбменаИспользуетсяВМоделиСервиса = Ложь; + КонецПопытки; + + Если ПланОбменаИспользуетсяВМоделиСервиса Тогда + + Результат.Добавить(ПланОбмена.Имя); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Инициализация структуры настроек обмена данными @@ -1141,46 +1207,3 @@ Возврат СписокПравил; КонецФункции - -Функция КаталогВременногоХранилищаФайлов() Экспорт - - // возвращаемое значение функции - Результат = ""; - - СистемнаяИнформация = Новый СистемнаяИнформация; - - Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда - - Результат = Константы.КаталогВременныхФайловСообщенийОбменаДляWindows.Получить(); - - ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 - ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда - - Результат = Константы.КаталогВременныхФайловСообщенийОбменаДляLinux.Получить(); - - Иначе - - Результат = Константы.КаталогВременныхФайловСообщенийОбменаДляWindows.Получить(); - - КонецЕсли; - - Если ПустаяСтрока(Результат) Тогда - Результат = СокрЛП(КаталогВременныхФайлов()); - Иначе - Результат = СокрЛП(Результат); - - // Проверка существования каталога - Каталог = Новый Файл(Результат); - - Если Не Каталог.Существует() Тогда - - СтрокаСообщения = НСтр("ru = 'Каталог временных файлов сообщений обмена не существует: ""%1""'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Результат); - ВызватьИсключение СтрокаСообщения; - КонецЕсли; - - КонецЕсли; - - Возврат Результат; -КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/ОбменДаннымиПовтИсп.mdo b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/ОбменДаннымиПовтИсп.mdo index ca75f111a..99abf7ac6 100644 --- a/SSL/src/CommonModules/ОбменДаннымиПовтИсп/ОбменДаннымиПовтИсп.mdo +++ b/SSL/src/CommonModules/ОбменДаннымиПовтИсп/ОбменДаннымиПовтИсп.mdo @@ -8,6 +8,5 @@ true true true - true DuringSession diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl index 10293ba27..a4fc9b761 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/Module.bsl @@ -15,17 +15,20 @@ // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Форма.Параметры.Свойство("АвтоТест") Тогда + + Возврат; + ИначеЕсли Форма.Параметры.Свойство("ПроверкаЗаполнения") Тогда + + ЗагрузитьКонтекстВФорму(Форма, Форма.Параметры.Настройки); + Возврат; + ИначеЕсли Форма.Параметры.Свойство("ПолучитьЗначенияПоУмолчанию") Тогда + + Форма.Контекст = ВыгрузитьКонтекстИзФормы(Форма); Возврат; КонецЕсли; ЗагрузитьКонтекстВФорму(Форма, Форма.Параметры.Настройки); - Если Форма.Параметры.Свойство("ПроверкаЗаполнения") Тогда - Возврат; - ИначеЕсли Форма.Параметры.Свойство("ПолучениеОписанияКонтекста") Тогда - Возврат; - КонецЕсли; - ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ); КонецПроцедуры @@ -207,9 +210,79 @@ КонецФункции +// Возвращает префикс этой информационной базы +// +Функция ПрефиксИнформационнойБазы() Экспорт + + Возврат ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + +КонецФункции + +// Устанавливает префикс этой информационной базы +// +Процедура УстановитьПрефиксИнформационнойБазы(Знач Префикс) Экспорт + + Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(Префикс); + + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Обработчик события "перед обновлением информационной базы". Выполняет загрузку данных из главного узла. +Процедура ПередОбновлениемИнформационнойБазы() Экспорт + + Попытка + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Истина Тогда + + УзелИнформационнойБазы = ПланыОбмена.ГлавныйУзел(); + + Если УзелИнформационнойБазы <> Неопределено Тогда + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, Истина, Ложь, ВидТранспорта); // только загрузка + + КонецЕсли; + + КонецЕсли; + + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + +КонецПроцедуры + +// Обработчик события "после обновления информационной базы". Выполняет выгрузку данных в главный узел. +Процедура ПослеОбновленияИнформационнойБазы() Экспорт + + Попытка + Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Истина Тогда + + УзелИнформационнойБазы = ПланыОбмена.ГлавныйУзел(); + + Если УзелИнформационнойБазы <> Неопределено Тогда + + ВидТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы); + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Ложь, УзелИнформационнойБазы, Ложь, Истина, ВидТранспорта); // только выгрузка + + КонецЕсли; + + КонецЕсли; + + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы @@ -248,6 +321,12 @@ Обработчик.Версия = "2.0.1.10"; Обработчик.Процедура = "ОбменДаннымиСервер.ПроверитьУстановкуФункциональныхОпцийПриОбновленииИБ"; + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.1.5"; + Обработчик.Приоритет = 1; + Обработчик.ОбщиеДанные = Истина; + Обработчик.Процедура = "ОбменДаннымиСервер.УстановитьПризнакСохраненияПароляДляОбменаЧерезИнтернет"; + КонецПроцедуры // Выполняет обновление правил конвертации/регистрации объектов. @@ -279,7 +358,7 @@ ВызватьИсключение НСтр("ru = 'При обновлении правил обмена данными возникли ошибки (см. Журнал регистрации).'"); КонецЕсли; - УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецПроцедуры @@ -413,6 +492,42 @@ КонецПроцедуры +// Устанавливает значение реквизита WSЗапомнитьПароль в РС.НастройкиТранспортаОбмена в значение Истина. +// +Процедура УстановитьПризнакСохраненияПароляДляОбменаЧерезИнтернет() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | НастройкиТранспортаОбмена.Узел КАК Узел + |ИЗ + | РегистрСведений.НастройкиТранспортаОбмена КАК НастройкиТранспортаОбмена + |ГДЕ + | НастройкиТранспортаОбмена.ВидТранспортаСообщенийОбменаПоУмолчанию = ЗНАЧЕНИЕ(Перечисление.ВидыТранспортаСообщенийОбмена.WS)"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + // обновляем запись в РС + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", Выборка.Узел); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); + РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + + КонецЦикла; + +КонецПроцедуры + +// + +Функция ЭтоРазделенныйПланОбменаБСП(Знач ИмяПланаОбмена) Экспорт + + Возврат ОбменДаннымиПовтИсп.РазделенныеПланыОбменаБСП().Найти(ИмяПланаОбмена) <> Неопределено; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -439,9 +554,12 @@ ДлительнаяОперация = Ложь, ИдентификаторОперации = "", ИдентификаторФайла = "", - ДлительнаяОперацияРазрешена = Ложь + ДлительнаяОперацияРазрешена = Ложь, + Знач Пароль = "" ) Экспорт + ПроверитьВозможностьВыполненияОбменов(); + ПроверитьИспользованиеОбменаДанными(); Если ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM Тогда // Обмен через внешнее соединение @@ -479,7 +597,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - ДлительнаяОперацияРазрешена + ДлительнаяОперацияРазрешена, + Пароль ); КонецЕсли; @@ -493,7 +612,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - ДлительнаяОперацияРазрешена + ДлительнаяОперацияРазрешена, + Пароль ); КонецЕсли; @@ -548,8 +668,12 @@ // Процедура ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Отказ, НастройкаВыполненияОбмена, НомерСтроки = Неопределено) Экспорт + ПроверитьВозможностьВыполненияОбменов(); + ПроверитьИспользованиеОбменаДанными(); + УстановитьПривилегированныйРежим(Истина); + ТекстЗапроса = " |ВЫБРАТЬ | НастройкиВыполненияОбменаНастройкиОбмена.Ссылка КАК НастройкаВыполненияОбмена, @@ -577,9 +701,6 @@ | НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки |"; - // устанавливаем привилегированный режим - УстановитьПривилегированныйРежим(Истина); - УсловиеПоНомеруСтроки = ?(НомерСтроки = Неопределено, "", "И НастройкиВыполненияОбменаНастройкиОбмена.НомерСтроки = &НомерСтроки"); ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеПоНомеруСтроки]", УсловиеПоНомеруСтроки); @@ -653,6 +774,8 @@ УстановитьПривилегированныйРежим(Истина); КонецЕсли; + ПроверитьВозможностьВыполненияОбменов(); + ПроверитьИспользованиеОбменаДанными(); Если Не ЗначениеЗаполнено(КодСценарияОбмена) Тогда @@ -676,12 +799,9 @@ Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда - // выполняем обмен по сценарию ВыполнитьОбменДаннымиПоСценариюОбменаДанными(Ложь, Выборка.Ссылка); - Иначе - СтрокаСообщения = НСтр("ru = 'Сценарий обмена данными с кодом %1 не найден.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, КодСценарияОбмена); ВызватьИсключение СтрокаСообщения; @@ -828,13 +948,20 @@ КонецФункции Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла, - ДлительнаяОперация, - ИдентификаторОперации + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + Пароль = "" ) Экспорт + ПроверитьВозможностьВыполненияОбменов(); + + ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); + // возвращаемое значение функции Результат = Новый Структура; Результат.Вставить("ИмяВременногоКаталогаСообщенийОбмена", ""); @@ -852,7 +979,7 @@ СтрокаСообщенияОбОшибке = ""; // получаем прокси веб-сервиса для узла информационной базы - Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, Пароль); Если Прокси = Неопределено Тогда @@ -869,12 +996,12 @@ Попытка Прокси.UploadData( - ИмяПланаОбмена, - КодТекущегоУзлаПланаОбмена, - ИдентификаторФайла, - ДлительнаяОперация, - ИдентификаторОперации, - Истина + ИмяПланаОбмена, + КодТекущегоУзлаПланаОбмена, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + Истина ); Исключение @@ -897,7 +1024,7 @@ КонецЕсли; Попытка - ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы); + ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, Пароль); Исключение Отказ = Истина; @@ -941,9 +1068,10 @@ КонецФункции Функция ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + Знач Пароль = "" ) Экспорт // возвращаемое значение функции @@ -960,7 +1088,7 @@ Попытка - ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы); + ИмяФайлаИзСервисаПередачиФайлов = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, Пароль); Исключение Отказ = Истина; @@ -1006,12 +1134,22 @@ Возврат Результат; КонецФункции -Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации(Отказ, Знач УзелИнформационнойБазы, - Знач ИдентификаторФайла, - Знач ДатаНачалаОперации) Экспорт +Процедура ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + Отказ, + Знач УзелИнформационнойБазы, + Знач ИдентификаторФайла, + Знач ДатаНачалаОперации, + Знач Пароль = "" + ) Экспорт + + ПроверитьВозможностьВыполненияОбменов(); + + ПроверитьИспользованиеОбменаДанными(); + + УстановитьПривилегированныйРежим(Истина); Попытка - ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы); + ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, Пароль); Исключение ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене.ЗагрузкаДанных, @@ -1027,7 +1165,7 @@ ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку( УзелИнформационнойБазы, ФайлСообщенияОбмена, - Перечисления.ДействияПриОбмене.ЗагрузкаДанных + Перечисления.ДействияПриОбмене.ЗагрузкаДанных,,,, ДатаНачалаОперации ); Исключение ЗафиксироватьЗавершениеОбменаСОшибкой(УзелИнформационнойБазы, @@ -1045,6 +1183,61 @@ КонецПроцедуры +// Выполняет удаление файлов сообщений обмена, которые не были удалены из-за сбоев в работе системы. +// Удалению подлежат файлы с датой размещения более суток от текущей универсальной даты. +// Анализируется РС.СообщенияОбменаДанными +// +// Параметры: +// Нет. +// +Процедура УдалитьНеактуальныеСообщенияОбмена() Экспорт + + ПроверитьВозможностьАдминистрированияОбменов(); + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапроса = + "ВЫБРАТЬ + | СообщенияОбменаДанными.ИдентификаторСообщения КАК ИдентификаторСообщения, + | СообщенияОбменаДанными.ИмяФайлаСообщения КАК ИмяФайла + |ИЗ + | РегистрСведений.СообщенияОбменаДанными КАК СообщенияОбменаДанными + |ГДЕ + | СообщенияОбменаДанными.ДатаЗакладкиСообщения < &ДатаАктуальности"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ДатаАктуальности", ТекущаяУниверсальнаяДата() - 60 * 60 * 24); + Запрос.Текст = ТекстЗапроса; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + + ПолноеИмяФайлаСообщения = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), Выборка.ИмяФайла); + + ФайлСообщения = Новый Файл(ПолноеИмяФайлаСообщения); + + Если ФайлСообщения.Существует() Тогда + + Попытка + УдалитьФайлы(ФайлСообщения.ПолноеИмя); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Продолжить; + КонецПопытки; + КонецЕсли; + + // Удаляем информацию о файле сообщения обмена из хранилища + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(Выборка.ИдентификаторСообщения)); + РегистрыСведений.СообщенияОбменаДанными.УдалитьЗапись(СтруктураЗаписи); + + КонецЦикла; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Для работы через внешнее соединение @@ -1106,16 +1299,6 @@ КонецПроцедуры -Процедура ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Знач УзелИнформационнойБазы, Знач ПолноеИмяФайлаСообщенияОбмена) Экспорт - - Попытка - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(УзелИнформационнойБазы, ПолноеИмяФайлаСообщенияОбмена, Перечисления.ДействияПриОбмене.ЗагрузкаДанных); - Исключение - Отказ = Истина; - КонецПопытки; - -КонецПроцедуры - Процедура ВыполнитьВыгрузкуДляУзлаИнформационнойБазыЧерезСтроку(Знач ИмяПланаОбмена, Знач КодУзлаИнформационнойБазы, СообщениеОбмена) Экспорт ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЧерезФайлИлиСтроку(Неопределено, @@ -1176,8 +1359,13 @@ ДействиеПриОбмене, ИмяПланаОбмена = "", КодУзлаИнформационнойБазы = "", - СообщениеОбмена = "" - ) + СообщениеОбмена = "", + ДатаНачалаОперации = Неопределено + ) Экспорт + + ПроверитьВозможностьВыполненияОбменов(); + + ПроверитьИспользованиеОбменаДанными(); УстановитьПривилегированныйРежим(Истина); @@ -1203,7 +1391,7 @@ КонецЕсли; СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено; - СтруктураНастроекОбмена.ДатаНачала = ТекущаяДатаСеанса(); + СтруктураНастроекОбмена.ДатаНачала = ?(ДатаНачалаОперации = Неопределено, ТекущаяДатаСеанса(), ДатаНачалаОперации); СтрокаСообщения = НСтр("ru = 'Начало процесса обмена данными для узла %1'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); @@ -1326,7 +1514,8 @@ ДлительнаяОперация = Ложь, ИдентификаторОперации = "", ИдентификаторФайла = "", - ДлительнаяОперацияРазрешена = Ложь + ДлительнаяОперацияРазрешена = Ложь, + Пароль = "" ) УстановитьПривилегированныйРежим(Истина); @@ -1348,50 +1537,61 @@ СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, СтруктураНастроекОбмена.УзелИнформационнойБазыНаименование); ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщения, СтруктураНастроекОбмена); - СтрокаСообщенияОбОшибке = ""; - - // получаем прокси веб-сервиса для узла информационной базы - Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); - - Если Прокси = Неопределено Тогда - - // добавляем запись в ЖР - ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); - - // если настройка содержит ошибки, то обмен не производим; статус "Отменено" - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - Отказ = Истина; - Возврат; - КонецЕсли; - Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда Если СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных Тогда + // {Обработчик: ПередЧтениемСообщенияОбмена} Начало ФайлСообщенияОбмена = ""; + СтандартнаяОбработка = Истина; - Попытка + ПередЧтениемСообщенияОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы, ФайлСообщенияОбмена, СтандартнаяОбработка); + // {Обработчик: ПередЧтениемСообщенияОбмена} Окончание + + Если СтандартнаяОбработка Тогда - Прокси.UploadData(СтруктураНастроекОбмена.ИмяПланаОбмена, - СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, - ИдентификаторФайла, - ДлительнаяОперация, - ИдентификаторОперации, - ДлительнаяОперацияРазрешена - ); + СтрокаСообщенияОбОшибке = ""; - Если ДлительнаяОперация Тогда - ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'"), СтруктураНастроекОбмена); + // получаем прокси веб-сервиса для узла информационной базы + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, Пароль); + + Если Прокси = Неопределено Тогда + + // добавляем запись в ЖР + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + // если настройка содержит ошибки, то обмен не производим; статус "Отменено" + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; Возврат; КонецЕсли; - ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы); - Исключение - ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); - СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; - Отказ = Истина; - КонецПопытки; + ФайлСообщенияОбмена = ""; + + Попытка + + Прокси.UploadData(СтруктураНастроекОбмена.ИмяПланаОбмена, + СтруктураНастроекОбмена.ТекущийУзелПланаОбменаКод, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + ДлительнаяОперацияРазрешена + ); + + Если ДлительнаяОперация Тогда + ЗаписьЖурналаРегистрацииОбменаДанными(НСтр("ru = 'Ожидание получения данных от базы-корреспондента...'"), СтруктураНастроекОбмена); + Возврат; + КонецЕсли; + + ФайлСообщенияОбмена = ПолучитьФайлИзХранилищаВСервисе(Новый УникальныйИдентификатор(ИдентификаторФайла), УзелИнформационнойБазы,, Пароль); + Исключение + ЗаписьЖурналаРегистрацииОбменаДанными(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), СтруктураНастроекОбмена, Истина); + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Ошибка; + Отказ = Истина; + КонецПопытки; + + КонецЕсли; Если Не Отказ Тогда @@ -1399,15 +1599,50 @@ КонецЕсли; - Попытка - Если Не ПустаяСтрока(ФайлСообщенияОбмена) Тогда - УдалитьФайлы(ФайлСообщенияОбмена); - КонецЕсли; - Исключение - КонецПопытки; + // {Обработчик: ПослеЧтенияСообщенияОбмена} Начало + СтандартнаяОбработка = Истина; + + ПослеЧтенияСообщенияОбмена( + СтруктураНастроекОбмена.УзелИнформационнойБазы, + ФайлСообщенияОбмена, + РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), + СтандартнаяОбработка + ); + // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание + + Если СтандартнаяОбработка Тогда + + Попытка + Если Не ПустаяСтрока(ФайлСообщенияОбмена) Тогда + УдалитьФайлы(ФайлСообщенияОбмена); + КонецЕсли; + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + + КонецЕсли; Иначе + СтрокаСообщенияОбОшибке = ""; + + // получаем прокси веб-сервиса для узла информационной базы + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, Пароль); + + Если Прокси = Неопределено Тогда + + // добавляем запись в ЖР + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + // если настройка содержит ошибки, то обмен не производим; статус "Отменено" + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + КонецЕсли; + ХранилищеСообщенияОбмена = Неопределено; Попытка @@ -1424,6 +1659,23 @@ ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда + СтрокаСообщенияОбОшибке = ""; + + // получаем прокси веб-сервиса для узла информационной базы + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке, Пароль); + + Если Прокси = Неопределено Тогда + + // добавляем запись в ЖР + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + // если настройка содержит ошибки, то обмен не производим; статус "Отменено" + СтруктураНастроекОбмена.РезультатВыполненияОбмена = Перечисления.РезультатыВыполненияОбмена.Отменено; + ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); + Отказ = Истина; + Возврат; + КонецЕсли; + Если СтруктураНастроекОбмена.ИспользоватьПередачуБольшогоОбъемаДанных Тогда ФайлСообщенияОбмена = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВременногоХранилищаФайлов(), УникальноеИмяФайлаСообщенияОбмена()); @@ -1435,7 +1687,7 @@ Попытка - ИдентификаторФайлаСтрокой = Строка(ПоместитьФайлВХранилищеВСервисе(ФайлСообщенияОбмена, УзелИнформационнойБазы)); + ИдентификаторФайлаСтрокой = Строка(ПоместитьФайлВХранилищеВСервисе(ФайлСообщенияОбмена, УзелИнформационнойБазы,, Пароль)); Попытка УдалитьФайлы(ФайлСообщенияОбмена); @@ -1546,7 +1798,7 @@ КонецЕсли; // ИНИЦИАЛИЗАЦИЯ ОБМЕНА ДАННЫМИ (ВНЕШНЕЕ СОЕДИНЕНИЕ) - Структура = Новый Структура("ИмяПланаОбмена, ТекущийУзелПланаОбменаКод, РежимОтладки, ИмяФайлаПротоколаОбмена, КоличествоЭлементовВТранзакции"); + Структура = Новый Структура("ИмяПланаОбмена, ТекущийУзелПланаОбменаКод, КоличествоЭлементовВТранзакции"); ЗаполнитьЗначенияСвойств(Структура, СтруктураНастроекОбмена); // Выполняем реверс значений перечисления @@ -1557,6 +1809,13 @@ Структура.Вставить("ДействиеПриОбменеСтрокой", ДействиеПриОбменеСтрокой); + ОбменСБСП20 = Ложь; + ВерсияБСППоВнешнемуСоединению = ВнешнееСоединение.СтандартныеПодсистемыСервер.ВерсияБиблиотеки(); + ОбменСБСП20 = ВнешнееСоединение.ОбщегоНазначенияКлиентСервер.СравнитьВерсии("2.1.1.10", ВерсияБСППоВнешнемуСоединению) > 0; + + Структура.Вставить("РежимОтладки", Ложь); + Структура.Вставить("ИмяФайлаПротоколаОбмена", ""); + Попытка СтруктураНастроекОбменаВнешнееСоединение = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.СтруктураНастроекОбмена(Структура); Исключение @@ -1613,7 +1872,7 @@ ОбработкаОбменаДаннымиВнешнееСоединение.ВнешнееСоединение = Неопределено; ОбработкаОбменаДаннымиВнешнееСоединение.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении = Ложь; - УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДаннымиВнешнееСоединение, СтруктураНастроекОбменаВнешнееСоединение); + УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДаннымиВнешнееСоединение, СтруктураНастроекОбменаВнешнееСоединение, ОбменСБСП20); // ВЫГРУЗКА (КОРРЕСПОНДЕНТ) - ЗАГРУЗКА (ЭТА БАЗА) ОбработкаОбменаДаннымиВнешнееСоединение.ВыполнитьВыгрузкуДанных(ОбработкаДляЗагрузкиДанных); @@ -1640,7 +1899,7 @@ ОбработкаДляЗагрузкиДанных.УзелОбменаЗагрузкаДанных = СтруктураНастроекОбменаВнешнееСоединение.УзелИнформационнойБазы; ОбработкаДляЗагрузкиДанных.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение = Истина; - УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаДляЗагрузкиДанных, СтруктураНастроекОбменаВнешнееСоединение); + УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаДляЗагрузкиДанных, СтруктураНастроекОбменаВнешнееСоединение, ОбменСБСП20); ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; ОбработкаДляЗагрузкиДанных.ИспользоватьТранзакции = (ОбработкаДляЗагрузкиДанных.КоличествоОбъектовНаТранзакцию <> 1); @@ -1684,25 +1943,61 @@ Процедура ВыполнитьОбменДаннымиЧерезФайловыйРесурс(СтруктураНастроекОбмена) - ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена); - Если СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда - Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда + // {Обработчик: ПередЧтениемСообщенияОбмена} Начало + СообщениеОбмена = ""; + СтандартнаяОбработка = Истина; + + ПередЧтениемСообщенияОбмена(СтруктураНастроекОбмена.УзелИнформационнойБазы, СообщениеОбмена, СтандартнаяОбработка); + // {Обработчик: ПередЧтениемСообщенияОбмена} Окончание + + Если СтандартнаяОбработка Тогда - ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена); + ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена); + + Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда + + ВыполнитьТранспортСообщенияОбменаПолучение(СтруктураНастроекОбмена); + + Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда + + СообщениеОбмена = СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ИмяФайлаСообщенияОбмена(); + + КонецЕсли; + + КонецЕсли; КонецЕсли; // загрузка данных только при успешном получении сообщения обмена Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда - ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СтруктураНастроекОбмена.ОбработкаТранспортаСообщенийОбмена.ИмяФайлаСообщенияОбмена()); + ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, СообщениеОбмена); + + КонецЕсли; + + // {Обработчик: ПослеЧтенияСообщенияОбмена} Начало + СтандартнаяОбработка = Истина; + + ПослеЧтенияСообщенияОбмена( + СтруктураНастроекОбмена.УзелИнформационнойБазы, + СообщениеОбмена, + РезультатВыполненияОбменаВыполнено(СтруктураНастроекОбмена.РезультатВыполненияОбмена), + СтандартнаяОбработка + ); + // {Обработчик: ПослеЧтенияСообщенияОбмена} Окончание + + Если СтандартнаяОбработка Тогда + + ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена); КонецЕсли; ИначеЕсли СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда + ВыполнитьТранспортСообщенияОбменаПередОбработкой(СтруктураНастроекОбмена); + // выгрузка данных Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда @@ -1717,9 +2012,61 @@ КонецЕсли; + ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена); + КонецЕсли; - ВыполнитьТранспортСообщенияОбменаПослеОбработки(СтруктураНастроекОбмена); +КонецПроцедуры + +Процедура ПередЧтениемСообщенияОбмена(Знач Получатель, СообщениеОбмена, СтандартнаяОбработка) + + Если ЭтоПодчиненныйУзелРИБ() + И ТипЗнч(ПланыОбмена.ГлавныйУзел()) = ТипЗнч(Получатель) Тогда + + СохраненноеСообщениеОбмена = Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Получить(); + + Если ТипЗнч(СохраненноеСообщениеОбмена) = Тип("ДвоичныеДанные") Тогда + + СтандартнаяОбработка = Ложь; + + СообщениеОбмена = ПолучитьИмяВременногоФайла("xml"); + + СохраненноеСообщениеОбмена.Получить().Записать(СообщениеОбмена); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +Процедура ПослеЧтенияСообщенияОбмена(Знач Получатель, Знач СообщениеОбмена, Знач СообщениеПрочитано, СтандартнаяОбработка) + + Если ЭтоПодчиненныйУзелРИБ() + И ТипЗнч(ПланыОбмена.ГлавныйУзел()) = ТипЗнч(Получатель) Тогда + + Если КонфигурацияИзменена() Тогда + + Если ТипЗнч(Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Получить()) <> Тип("ДвоичныеДанные") Тогда + + Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить( + Новый ХранилищеЗначения(Новый ДвоичныеДанные(СообщениеОбмена), Новый СжатиеДанных(9)) + ); + + КонецЕсли; + + Если Не СообщениеПрочитано Тогда + + ОбновлениеИнформационнойБазы.УстановитьПризнакНеобходимостиОбновленияКонфигурацииИнформационнойБазы(); + + КонецЕсли; + + Иначе + + Константы.СообщениеОбменаДаннымиИзГлавногоУзла.Установить(Новый ХранилищеЗначения(Неопределено)); + + КонецЕсли; + + КонецЕсли; КонецПроцедуры @@ -1730,12 +2077,12 @@ // Процедура ЗаписатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, Знач ИмяФайлаСообщенияОбмена = "", СообщениеОбмена = "") - // {Обработчик: ПередОтправкойДанных} Начало. Переопределение стандартной обработки выгрузки данных + // {Обработчик: ПриВыгрузкеДанных} Начало. Переопределение стандартной обработки выгрузки данных СтандартнаяОбработка = Истина; КоличествоОбъектовОбработано = 0; Попытка - ОбработчикПередОтправкойДанных(СтандартнаяОбработка, + ОбработчикПриВыгрузкеДанныхБСП(СтандартнаяОбработка, СтруктураНастроекОбмена.УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена, СообщениеОбмена, @@ -1744,6 +2091,21 @@ КоличествоОбъектовОбработано ); + Если СтандартнаяОбработка = Истина Тогда + + КоличествоОбъектовОбработано = 0; + + ОбработчикПриВыгрузкеДанных(СтандартнаяОбработка, + СтруктураНастроекОбмена.УзелИнформационнойБазы, + ИмяФайлаСообщенияОбмена, + СообщениеОбмена, + СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, + КоличествоОбъектовОбработано + ); + + КонецЕсли; + Исключение СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -1761,7 +2123,7 @@ СтруктураНастроекОбмена.КоличествоОбъектовОбработано = КоличествоОбъектовОбработано; Возврат; КонецЕсли; - // {Обработчик: ПередОтправкойДанных} Окончание + // {Обработчик: ПриВыгрузкеДанных} Окончание Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда // Обмен в РИБ @@ -1834,12 +2196,12 @@ // Процедура ПрочитатьСообщениеСИзменениямиДляУзла(СтруктураНастроекОбмена, Знач ИмяФайлаСообщенияОбмена = "", СообщениеОбмена = "") - // {Обработчик: ПередПолучениемДанных} Начало. Переопределение стандартной обработки загрузки данных + // {Обработчик: ПриЗагрузкеДанных} Начало. Переопределение стандартной обработки загрузки данных СтандартнаяОбработка = Истина; КоличествоОбъектовОбработано = 0; Попытка - ОбработчикПередПолучениемДанных(СтандартнаяОбработка, + ОбработчикПриЗагрузкеДанныхБСП(СтандартнаяОбработка, СтруктураНастроекОбмена.УзелИнформационнойБазы, ИмяФайлаСообщенияОбмена, СообщениеОбмена, @@ -1848,6 +2210,21 @@ КоличествоОбъектовОбработано ); + Если СтандартнаяОбработка = Истина Тогда + + КоличествоОбъектовОбработано = 0; + + ОбработчикПриЗагрузкеДанных(СтандартнаяОбработка, + СтруктураНастроекОбмена.УзелИнформационнойБазы, + ИмяФайлаСообщенияОбмена, + СообщениеОбмена, + СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции, + СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации, + КоличествоОбъектовОбработано + ); + + КонецЕсли; + Исключение СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); @@ -1864,7 +2241,7 @@ СтруктураНастроекОбмена.КоличествоОбъектовОбработано = КоличествоОбъектовОбработано; Возврат; КонецЕсли; - // {Обработчик: ПередПолучениемДанных} Окончание + // {Обработчик: ПриЗагрузкеДанных} Окончание Если СтруктураНастроекОбмена.ЭтоОбменВРИБ Тогда // Обмен в РИБ @@ -1977,13 +2354,13 @@ Попытка - ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); - - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(ЗаписьСообщения.Получатель); + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); // Получаем выборку изменённых данных ВыборкаИзменений = ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения); + ПолучательОбъект = ЗаписьСообщения.Получатель.ПолучитьОбъект(); + Пока ВыборкаИзменений.Следующий() Цикл Данные = ВыборкаИзменений.Получить(); @@ -1996,11 +2373,19 @@ // наборы выгружаем всегда, даже пустые (аналог удаления объекта) ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; - ОбменДаннымиСобытия.ПриОтправкеДанных(Данные, ОтправкаЭлемента, ЗаписьСообщения.Получатель, ИмяПланаОбмена, НачальнаяВыгрузкаДанных); + СтандартныеПодсистемыПереопределяемый.ПриОтправкеДанныхПодчиненному(ПолучательОбъект, Данные, ОтправкаЭлемента, НачальнаяВыгрузкаДанных); Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить Тогда - Данные = Новый УдалениеОбъекта(Данные.Ссылка); + Если ОбщегоНазначения.ЭтоРегистр(Данные.Метаданные()) Тогда + + // Удаление регистра отсылаем в виде пустого набора записей + + Иначе + + Данные = Новый УдалениеОбъекта(Данные.Ссылка); + + КонецЕсли; ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда @@ -2153,6 +2538,15 @@ // Читаем очередное значение Данные = ПрочитатьXML(ЧтениеXML); + ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; + ОтправкаНазад = Ложь; + + СтандартныеПодсистемыПереопределяемый.ПриПолученииДанныхОтПодчиненного(Неопределено, Данные, ПолучениеЭлемента, ОтправкаНазад); + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Продолжить; + КонецЕсли; + ЭтоУдалениеОбъекта = (ТипЗнч(Данные) = Тип("УдалениеОбъекта")); КоличествоОбъектовОбработано = КоличествоОбъектовОбработано + 1; @@ -2181,7 +2575,10 @@ КонецЕсли; - Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; + Если Не ОтправкаНазад Тогда + Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; + КонецЕсли; + Данные.ОбменДанными.Загрузка = Истина; // Переопределяем стандартное поведение системы при получении удаления объекта. @@ -2199,7 +2596,10 @@ КонецЕсли; - Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; + Если Не ОтправкаНазад Тогда + Данные.ОбменДанными.Отправитель = ЧтениеСообщения.Отправитель; + КонецЕсли; + Данные.ОбменДанными.Загрузка = Истина; Данные.ПометкаУдаления = Истина; @@ -2431,14 +2831,14 @@ // Возвращаемое значение: // Строка - путь к полученному файлу. // -Функция ПолучитьФайлИзХранилищаВСервисе(Знач ИдентификаторФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024) Экспорт +Функция ПолучитьФайлИзХранилищаВСервисе(Знач ИдентификаторФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024, Знач Пароль = "") Экспорт // возвращаемое значение функции ИмяФайлаРезультата = ""; - Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, Пароль); - ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы); + ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, Пароль); Если ОбменВыполняетсяВОднойСети Тогда @@ -2522,14 +2922,14 @@ // Возвращаемое значение: // УникальныйИдентификатор - идентификатор файла в сервисе передачи файлов. // -Функция ПоместитьФайлВХранилищеВСервисе(Знач ИмяФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024) Экспорт +Функция ПоместитьФайлВХранилищеВСервисе(Знач ИмяФайла, Знач УзелИнформационнойБазы, Знач РазмерЧасти = 1024, Знач Пароль = "") Экспорт // возвращаемое значение функции ИдентификаторФайла = Неопределено; - Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, Пароль); - ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы); + ОбменВыполняетсяВОднойСети = ОбменДаннымиПовтИсп.ОбменВыполняетсяВОднойЛокальнойСети(УзелИнформационнойБазы, Пароль); Если ОбменВыполняетсяВОднойСети Тогда @@ -2643,16 +3043,16 @@ СтруктураЗаписи = Новый Структура; СтруктураЗаписи.Вставить("ИдентификаторСообщения", Строка(ИдентификаторФайла)); СтруктураЗаписи.Вставить("ИмяФайлаСообщения", Файл.Имя); - СтруктураЗаписи.Вставить("ДатаЗакладкиСообщения", ТекущаяДата()); + СтруктураЗаписи.Вставить("ДатаЗакладкиСообщения", ТекущаяУниверсальнаяДата()); РегистрыСведений.СообщенияОбменаДанными.ДобавитьЗапись(СтруктураЗаписи); Возврат ИдентификаторФайла; КонецФункции -Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы) Экспорт +Функция ОбменВыполняетсяВОднойЛокальнойСети(Знач УзелИнформационнойБазы, Знач Пароль = "") Экспорт - Прокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы); + Прокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы,, Пароль); ИмяВременногоФайла = СтрЗаменить("test{GUID}.tmp", "GUID", Строка(Новый УникальныйИдентификатор)); @@ -3257,6 +3657,23 @@ Возврат Результат; КонецФункции +Функция ФильтрПлановОбменаПоПризнакуАвтономнойРаботы(ПланыОбменаМассив) + + Результат = Новый Массив; + + Для Каждого ИмяПланаОбмена Из ПланыОбменаМассив Цикл + + Если ИмяПланаОбмена <> ОбменДаннымиПовтИсп.ПланОбменаАвтономнойРаботы() Тогда + + Результат.Добавить(ИмяПланаОбмена); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + // Процедура удаляет неактуальные записи в регистре сведений. // Запись считается неактуальной, если план обмена, для которого была создана запись, // был переименован или удален. @@ -3297,6 +3714,13 @@ ПланыОбменаМетода = ФильтрПлановОбменаПоПризнакуРазделенияДанных(ПланыОбменаМассив); + Если ОбменДаннымиПовтИсп.АвтономнаяРаботаПоддерживается() Тогда + + // Для плана обмена автономной работы используется отдельный монитор + ПланыОбменаМетода = ФильтрПлановОбменаПоПризнакуАвтономнойРаботы(ПланыОбменаМетода); + + КонецЕсли; + ДополнительныеСвойстваПланаОбменаСтрокой = ?(ПустаяСтрока(ДополнительныеСвойстваПланаОбмена), "", ДополнительныеСвойстваПланаОбмена + ", "); Запрос = Новый Запрос; @@ -3405,6 +3829,8 @@ КонецПроцедуры +// + Процедура ПроверитьИспользованиеОбменаДанными() Экспорт Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") <> Истина Тогда @@ -3418,6 +3844,28 @@ КонецПроцедуры +Процедура ПроверитьВозможностьВыполненияОбменов() Экспорт + + Если Не Пользователи.РолиДоступны("ВыполнениеОбменовДанными, ДобавлениеИзменениеОбменовДанными") Тогда + + ВызватьИсключение НСтр("ru = 'Нет прав на выполнение обменов данными.'"); + + КонецЕсли; + +КонецПроцедуры + +Процедура ПроверитьВозможностьАдминистрированияОбменов() Экспорт + + Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными") Тогда + + ВызватьИсключение НСтр("ru = 'Нет прав на администрирование обменов данными.'"); + + КонецЕсли; + +КонецПроцедуры + +// + // Заполняет список значений доступными видами транспорта для узла плана обмена // Процедура ЗаполнитьСписокВыбораДоступнымиВидамиТранспорта(УзелИнформационнойБазы, ЭлементФормы, Отбор = Неопределено) Экспорт @@ -3453,7 +3901,7 @@ // Параметры: // СтруктураНастроекОбмена - Структура - структура со всеми необходимыми данными и объектами для выполнения обмена // -Процедура ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена) +Процедура ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена) Экспорт // статус "Неопределено" в конце обмена свидетельствует об успешном выполнении обмена Если СтруктураНастроекОбмена.РезультатВыполненияОбмена = Неопределено Тогда @@ -3534,18 +3982,6 @@ КонецПроцедуры -// Получает строку информации о правилах конвертации/регистрации из файла правил. -// -// Параметры: -// АдресВременногоХранилища – адрес временного хранилища, в котором находятся данные файла правил; -// СтрокаИнформацииОПравилах – в этот параметр процедура возвращает строку информации о правилах; -// -Процедура ЗагрузитьИнформациюОПравилах(Отказ, АдресВременногоХранилища, СтрокаИнформацииОПравилах) Экспорт - - РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьИнформациюОПравилах(Отказ, АдресВременногоХранилища, СтрокаИнформацииОПравилах); - -КонецПроцедуры - // Дополняет таблицу значений пустыми строками до заданного количества строк. // Процедура УстановитьКоличествоСтрокТаблицы(Таблица, КоличествоСтрок) Экспорт @@ -3570,11 +4006,13 @@ Процедура ФормаНастройкиУзлаОбработчикПриСозданииНаСервере(Форма, ИмяРеквизитаФормы) + РеквизитыФормы = ИменаРеквизитовФормы(Форма); + Для Каждого НастройкаОтбора ИЗ Форма[ИмяРеквизитаФормы] Цикл Ключ = НастройкаОтбора.Ключ; - Если Форма.Элементы.Найти(Ключ) = Неопределено Тогда + Если РеквизитыФормы.Найти(Ключ) = Неопределено Тогда Продолжить; КонецЕсли; @@ -3608,6 +4046,20 @@ КонецПроцедуры +Функция ИменаРеквизитовФормы(Форма) + + // возвращаемое значение функции + Результат = Новый Массив; + + Для Каждого РеквизитФормы Из Форма.ПолучитьРеквизиты() Цикл + + Результат.Добавить(РеквизитФормы.Имя); + + КонецЦикла; + + Возврат Результат; +КонецФункции + // Распаковывает файл архива ZIP в указанный каталог; Извлекает все файлы архива // // Параметры: @@ -3701,33 +4153,6 @@ КонецФункции -// Возвращает признак того, что набора записей регистра не содержит данных. -// -Функция НаборЗаписейРегистраПустой(СтруктураЗаписи, ИмяРегистра) Экспорт - - МетаданныеРегистра = Метаданные.РегистрыСведений[ИмяРегистра]; - - // создаем набор записей регистра - НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); - - // устанавливаем отбор по измерениям регистра - Для Каждого Измерение ИЗ МетаданныеРегистра.Измерения Цикл - - // если задано значение в структуре, то отбор устанавливаем - Если СтруктураЗаписи.Свойство(Измерение.Имя) Тогда - - НаборЗаписей.Отбор[Измерение.Имя].Установить(СтруктураЗаписи[Измерение.Имя]); - - КонецЕсли; - - КонецЦикла; - - НаборЗаписей.Прочитать(); - - Возврат НаборЗаписей.Количество() = 0; - -КонецФункции - // Возвращает количество записей в таблице базы данных // // Параметры: @@ -3805,34 +4230,6 @@ КонецФункции -// Возвращает ключ сообщения журнала регистрации по строке действия -// -Функция ПолучитьКлючСообщенияЖурналаРегистрацииПоСтрокеДействия(УзелИнформационнойБазы, ДействиеПриОбменеСтрокой) Экспорт - - Возврат ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, Перечисления.ДействияПриОбмене[ДействиеПриОбменеСтрокой]); - -КонецФункции - -// Возвращает структуру с данными отбора для журнала регистрации -// -Функция ПолучитьСтруктуруДанныхОтбораЖурналаРегистрации(УзелИнформационнойБазы, Знач ДействиеПриОбмене) Экспорт - - Если ТипЗнч(ДействиеПриОбмене) = Тип("Строка") Тогда - - ДействиеПриОбмене = Перечисления.ДействияПриОбмене[ДействиеПриОбмене]; - - КонецЕсли; - - СостоянияОбменовДанными = РегистрыСведений.СостоянияОбменовДанными.СостоянияОбменовДанными(УзелИнформационнойБазы, ДействиеПриОбмене); - - Отбор = Новый Структура; - Отбор.Вставить("СобытиеЖурналаРегистрации", ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене)); - Отбор.Вставить("ДатаНачала", СостоянияОбменовДанными.ДатаНачала); - Отбор.Вставить("ДатаОкончания", СостоянияОбменовДанными.ДатаОкончания); - - Возврат Отбор; -КонецФункции - // Возвращает имя файла сообщения обмена данными по данным узла-отправителя и узла-получателя // Функция ИмяФайлаСообщенияОбмена(КодУзлаОтправителя, КодУзлаПолучателя) Экспорт @@ -4032,8 +4429,7 @@ КонецФункции -// Только для внутреннего использования -Процедура ОбработчикПередОтправкойДанных(СтандартнаяОбработка, +Процедура ОбработчикПриВыгрузкеДанныхБСП(СтандартнаяОбработка, Знач Получатель, Знач ИмяФайлаСообщения, ДанныеСообщения, @@ -4042,7 +4438,7 @@ КоличествоОтправленныхОбъектов ) - ОбменДаннымиПереопределяемый.ПередОтправкойДанных(СтандартнаяОбработка, + СтандартныеПодсистемыПереопределяемый.ПриВыгрузкеДанных(СтандартнаяОбработка, Получатель, ИмяФайлаСообщения, ДанныеСообщения, @@ -4053,8 +4449,27 @@ КонецПроцедуры -// Только для внутреннего использования -Процедура ОбработчикПередПолучениемДанных(СтандартнаяОбработка, +Процедура ОбработчикПриВыгрузкеДанных(СтандартнаяОбработка, + Знач Получатель, + Знач ИмяФайлаСообщения, + ДанныеСообщения, + Знач КоличествоЭлементовВТранзакции, + Знач ИмяСобытияЖурналаРегистрации, + КоличествоОтправленныхОбъектов + ) + + ОбменДаннымиПереопределяемый.ПриВыгрузкеДанных(СтандартнаяОбработка, + Получатель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоОтправленныхОбъектов + ); + +КонецПроцедуры + +Процедура ОбработчикПриЗагрузкеДанныхБСП(СтандартнаяОбработка, Знач Отправитель, Знач ИмяФайлаСообщения, ДанныеСообщения, @@ -4063,7 +4478,27 @@ КоличествоПолученныхОбъектов ) - ОбменДаннымиПереопределяемый.ПередПолучениемДанных(СтандартнаяОбработка, + СтандартныеПодсистемыПереопределяемый.ПриЗагрузкеДанных(СтандартнаяОбработка, + Отправитель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоПолученныхОбъектов + ); + +КонецПроцедуры + +Процедура ОбработчикПриЗагрузкеДанных(СтандартнаяОбработка, + Знач Отправитель, + Знач ИмяФайлаСообщения, + ДанныеСообщения, + Знач КоличествоЭлементовВТранзакции, + Знач ИмяСобытияЖурналаРегистрации, + КоличествоПолученныхОбъектов + ) + + ОбменДаннымиПереопределяемый.ПриЗагрузкеДанных(СтандартнаяОбработка, Отправитель, ИмяФайлаСообщения, ДанныеСообщения, @@ -4103,25 +4538,6 @@ КонецПроцедуры -// Только для внутреннего использования -Процедура ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Знач УзелИнформационнойБазы, Знач ДатаНачала) Экспорт - - ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ВыгрузкаДанных; - - СтруктураНастроекОбмена = Новый Структура; - СтруктураНастроекОбмена.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); - СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена", Перечисления.РезультатыВыполненияОбмена.Выполнено); - СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене", ДействиеПриОбмене); - СтруктураНастроекОбмена.Вставить("КоличествоОбъектовОбработано", 0); - СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации", ПолучитьКлючСообщенияЖурналаРегистрации(УзелИнформационнойБазы, ДействиеПриОбмене)); - СтруктураНастроекОбмена.Вставить("ДатаНачала", ДатаНачала); - СтруктураНастроекОбмена.Вставить("ДатаОкончания", ТекущаяДатаСеанса()); - СтруктураНастроекОбмена.Вставить("ЭтоОбменВРИБ", Ложь); - - ЗафиксироватьЗавершениеОбмена(СтруктураНастроекОбмена); - -КонецПроцедуры - Процедура ВыполнитьСравнениеИОбъединениеТаблицФормы(Форма, Отказ) ИмяПланаОбмена = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Форма.ИмяФормы, ".")[1]; @@ -4136,13 +4552,7 @@ ТабличныеЧастиПланаОбмена = ОбменДаннымиПовтИсп.ТабличныеЧастиПланаОбмена(ИмяПланаОбмена); - РеквизитыФормы = Форма.ПолучитьРеквизиты(); - ИменаРеквизитовФормы = Новый Массив; - Для Каждого РеквизитФормы Из РеквизитыФормы Цикл - - ИменаРеквизитовФормы.Добавить(РеквизитФормы.Имя); - - КонецЦикла; + ИменаРеквизитовФормы = ИменаРеквизитовФормы(Форма); // Объединение таблиц Общих данных Для Каждого ИмяТабличнойЧасти Из ТабличныеЧастиПланаОбмена["ТаблицыОбщие"] Цикл @@ -4301,6 +4711,62 @@ КонецЕсли; + Форма.Реквизиты = ПолучитьРеквизитыФормы(Форма); + +КонецПроцедуры + +Функция ВыгрузитьКонтекстИзФормы(Форма) + + // возвращаемое значение функции + Контекст = Новый Структура; + + Реквизиты = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПолучитьРеквизитыФормы(Форма)); + + Для Каждого Реквизит Из Реквизиты Цикл + + Если Найти(Реквизит, ".") > 0 Тогда + + Колонки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Реквизит, "."); + + Если Колонки.Количество() > 0 Тогда + + ИмяТаблицы = Колонки[0]; + + Колонки.Удалить(0); + + КолонкиСтрокой = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(Колонки); + + Таблица = Новый Массив; + + Для Каждого Элемент Из Форма[ИмяТаблицы] Цикл + + СтрокаТаблицы = Новый Структура(КолонкиСтрокой); + + ЗаполнитьЗначенияСвойств(СтрокаТаблицы, Элемент); + + Таблица.Добавить(СтрокаТаблицы); + + КонецЦикла; + + Контекст.Вставить(ИмяТаблицы, Таблица) + + КонецЕсли; + + Иначе + + Контекст.Вставить(Реквизит, Форма[Реквизит]) + + КонецЕсли; + + КонецЦикла; + + Возврат Контекст; +КонецФункции + +Функция ПолучитьРеквизитыФормы(Форма) + + Реквизиты = Форма.ПолучитьРеквизиты(); + // Получаем описание структуры данных формы РеквизитыСтрокой = Новый Массив; @@ -4329,9 +4795,8 @@ КонецЦикла; - Форма.Реквизиты = СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(РеквизитыСтрокой); - -КонецПроцедуры + Возврат СтроковыеФункцииКлиентСервер.ПолучитьСтрокуИзМассиваПодстрок(РеквизитыСтрокой); +КонецФункции Процедура ВнешнееСоединениеОбновитьНастройкиОбменаДанными(Знач ИмяПланаОбмена, Знач КодУзла, Знач ЗначенияПоУмолчаниюНаУзле) Экспорт @@ -4414,8 +4879,8 @@ Возврат Неопределено; КонецЕсли; - // ============================ {Начало} - Если ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда + Если ПараметрыПодключения.ВерсияКорреспондента_2_1_1_7 + ИЛИ ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда Возврат ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбщиеДанныеУзлов_2_0_1_6(ИмяПланаОбмена)); @@ -4424,16 +4889,23 @@ Возврат ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьОбщиеДанныеУзлов(ИмяПланаОбмена)); КонецЕсли; - // ============================ {Окончание} ИначеЕсли ПараметрыПодключения.ТипСоединения = "ВебСервис" Тогда СтрокаСообщенияОбОшибке = ""; - Если ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда - WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + Если ПараметрыПодключения.ВерсияКорреспондента_2_1_1_7 Тогда + + WSПрокси = ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + ИначеЕсли ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда + + WSПрокси = ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + Иначе - WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + WSПрокси = ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + КонецЕсли; Если WSПрокси = Неопределено Тогда @@ -4441,7 +4913,8 @@ Возврат Неопределено; КонецЕсли; - Если ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда + Если ПараметрыПодключения.ВерсияКорреспондента_2_1_1_7 + ИЛИ ПараметрыПодключения.ВерсияКорреспондента_2_0_1_6 Тогда Возврат СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetCommonNodsData(ИмяПланаОбмена)); Иначе @@ -4731,13 +5204,33 @@ // Добавляет параметры работы клиентской логики для подсистемы обмена данными // -Процедура ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт +Процедура ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт УстановитьПривилегированныйРежим(Истина); - Параметры.Вставить("ЭтоПодчиненныйУзелРИБ", ЭтоПодчиненныйУзелРИБ()); - Параметры.Вставить("ИмяПланаОбменаРИБ", ?(Параметры.ЭтоПодчиненныйУзелРИБ, ПланыОбмена.ГлавныйУзел().Метаданные().Имя, "")); - Параметры.Вставить("НастройкаПодчиненногоУзлаРИБЗавершена", Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить()); + Параметры.Вставить("ИмяПланаОбменаРИБ", ?(ЭтоПодчиненныйУзелРИБ(), ПланыОбмена.ГлавныйУзел().Метаданные().Имя, "")); + Параметры.Вставить("ГлавныйУзел", ПланыОбмена.ГлавныйУзел()); + + Параметры.Вставить("ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла", + Не ОбменДаннымиПовтИсп.ЭтоАвтономноеРабочееМесто() + И ЭтоПодчиненныйУзелРИБ() + И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() + ); + + Параметры.Вставить("ПроверитьНеобходимостьОбновленияКонфигурацииПодчиненногоУзла", + Не Параметры.ОткрытьПомощникСозданияОбменаДаннымиДляНастройкиПодчиненногоУзла + И Пользователи.РолиДоступны("ВыполнениеОбменовДанными") + ); + +КонецПроцедуры + +// Добавляет параметры работы клиентской логики для подсистемы обмена данными +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Параметры.Вставить("ГлавныйУзел", ПланыОбмена.ГлавныйУзел()); КонецПроцедуры @@ -4829,24 +5322,6 @@ КонецПроцедуры -Процедура ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, СтруктураНастроек, ОшибкаПодключенияКомпоненты = Ложь) Экспорт - - СтрокаСообщенияОбОшибке = ""; - - // выполняем попытку установки внешнего соединения - ВнешнееСоединение = УстановитьВнешнееСоединение(СтруктураНастроек, СтрокаСообщенияОбОшибке, ОшибкаПодключенияКомпоненты); - - Если ВнешнееСоединение = Неопределено Тогда - - // Выводим сообщение об ошибке - Сообщение = НСтр("ru = 'Ошибка при установке подключения ко второй информационной базе: %1'"); - Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Сообщение, СтрокаСообщенияОбОшибке); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Сообщение,,,, Отказ); - - КонецЕсли; - -КонецПроцедуры - Функция УстановитьВнешнееСоединение(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", ОшибкаПодключенияКомпоненты = Ложь) Экспорт // выполняем попытку установки внешнего соединения @@ -4873,27 +5348,41 @@ КонецФункции -Функция ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт +// + +Функция ПолучитьWSПроксиПоПараметрамПодключения( + СтруктураНастроек, + СтрокаСообщенияОбОшибке = "", + СообщениеПользователю = "", + ДелатьКонтрольныйВызов = Ложь + ) Экспорт + + Попытка + ОбменДаннымиКлиентСервер.ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(СтруктураНастроек.WSИмяПользователя); + Исключение + СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + Возврат Неопределено; + КонецПопытки; МестоположениеWSDL = "[URLВебСервиса]/ws/[ИмяСервиса]?wsdl"; МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[URLВебСервиса]", СтруктураНастроек.WSURLВебСервиса); МестоположениеWSDL = СтрЗаменить(МестоположениеWSDL, "[ИмяСервиса]", СтруктураНастроек.WSИмяСервиса); Попытка - Определение = Новый WSОпределения( - МестоположениеWSDL, - СтруктураНастроек.WSИмяПользователя, - СтруктураНастроек.WSПароль); - - WSПрокси = Новый WSПрокси( - Определение, + WSПрокси = ОбщегоНазначения.WSПрокси( + МестоположениеWSDL, СтруктураНастроек.WSURLПространстваИменСервиса, СтруктураНастроек.WSИмяСервиса, - СтруктураНастроек.WSИмяСервиса + "Soap"); - - WSПрокси.Пользователь = СтруктураНастроек.WSИмяПользователя; - WSПрокси.Пароль = СтруктураНастроек.WSПароль; + , + СтруктураНастроек.WSИмяПользователя, + СтруктураНастроек.WSПароль, + СтруктураНастроек.WSТаймаут, + ДелатьКонтрольныйВызов + ); Исключение + СообщениеПользователю = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); СтрокаСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису(), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); Возврат Неопределено; @@ -4902,22 +5391,6 @@ Возврат WSПрокси; КонецФункции -Функция ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт - - СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange"); - СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange"); - - Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); -КонецФункции - -Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт - - СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange_2_0_1_6"); - СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange_2_0_1_6"); - - Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); -КонецФункции - Функция СтруктураПараметровWS() Экспорт СтруктураПараметров = Новый Структура; @@ -4928,6 +5401,131 @@ Возврат СтруктураПараметров; КонецФункции + +Функция ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "") Экспорт + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange"); + СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange"); + СтруктураНастроек.Вставить("WSТаймаут", 60); + + Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю); +КонецФункции + +Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "") Экспорт + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSТаймаут", 60); + + Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю); +КонецФункции + +Функция ПолучитьWSПрокси_2_1_1_7(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "", Таймаут = 60) Экспорт + + СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/Exchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSИмяСервиса", "Exchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSТаймаут", Таймаут); + + Возврат ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю, Истина); +КонецФункции + + +Функция ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке = "", Пароль = "") + + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(УзелИнформационнойБазы, Пароль); + + ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроек); + + ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); + ВерсияКорреспондента_2_1_1_7 = (ВерсииКорреспондента.Найти("2.1.1.7") <> Неопределено); + + Если ВерсияКорреспондента_2_1_1_7 Тогда + + WSПрокси = ПолучитьWSПрокси_2_1_1_7(СтруктураНастроек, СтрокаСообщенияОбОшибке); + + ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда + + WSПрокси = ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке); + + Иначе + + WSПрокси = ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке); + + КонецЕсли; + + Возврат WSПрокси; +КонецФункции + +Функция ПроверитьПодключениеWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", СообщениеПользователю = "") Экспорт + + ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроек); + + ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); + ВерсияКорреспондента_2_1_1_7 = (ВерсииКорреспондента.Найти("2.1.1.7") <> Неопределено); + + Если ВерсияКорреспондента_2_1_1_7 Тогда + + WSПрокси = ПолучитьWSПрокси_2_1_1_7(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю); + + ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда + + WSПрокси = ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю); + + Иначе + + WSПрокси = ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке, СообщениеПользователю); + + КонецЕсли; + + Возврат WSПрокси; +КонецФункции + +Функция ЕстьПодключениеККорреспонденту(Знач Корреспондент, Знач СтруктураНастроек, СообщениеПользователю = "") Экспорт + + ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(СтруктураНастроек); + + ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); + ВерсияКорреспондента_2_1_1_7 = (ВерсииКорреспондента.Найти("2.1.1.7") <> Неопределено); + + Если ВерсияКорреспондента_2_1_1_7 Тогда + + WSПрокси = ПолучитьWSПрокси_2_1_1_7(СтруктураНастроек,, СообщениеПользователю, 5); + + Если WSПрокси = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Попытка + + Возврат WSПрокси.TestConnection( + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Корреспондент), + ОбщегоНазначения.ПолучитьЗначениеРеквизита(ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбменаПоСсылке(Корреспондент), "Код"), + СообщениеПользователю + ); + + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными.Проверка подключения'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + СообщениеПользователю = КраткоеПредставлениеПервойОшибки(ИнформацияОбОшибке()); + Возврат Ложь; + КонецПопытки; + + ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда + + WSПрокси = ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек,, СообщениеПользователю); + + Иначе + + WSПрокси = ПолучитьWSПрокси(СтруктураНастроек,, СообщениеПользователю); + + КонецЕсли; + + Возврат WSПрокси <> Неопределено; +КонецФункции + +// + // Выводит сообщение об ошибке и выставляет параметр Отказ в "Истина". // // Параметры: @@ -5071,6 +5669,11 @@ Для Каждого ИмяПланаОбмена Из ПланыОбменаБСП Цикл + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Не ПланыОбмена[ИмяПланаОбмена].ПланОбменаИспользуетсяВМоделиСервиса() Тогда + Продолжить; + КонецЕсли; + Если ПравилаОбменаЗагруженныеИзФайла.Найти(ИмяПланаОбмена) = Неопределено И ОбменДаннымиПовтИсп.ЕстьМакетПланаОбмена(ИмяПланаОбмена, "ПравилаОбмена") Тогда @@ -5191,37 +5794,6 @@ КонецФункции -Функция ИзмененияЗарегистрированы(УзелИнформационнойБазы) Экспорт - - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 1 - |ИЗ - | [Таблица].Изменения КАК ТаблицаИзменений - |ГДЕ - | ТаблицаИзменений.Узел = &Узел"; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Узел", УзелИнформационнойБазы); - - УстановитьПривилегированныйРежим(Истина); - - СоставПланаОбмена = Метаданные.ПланыОбмена[ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы)].Состав; - - Для Каждого ЭлементСостава Из СоставПланаОбмена Цикл - - Запрос.Текст = СтрЗаменить(ТекстЗапроса, "[Таблица]", ЭлементСостава.Метаданные.ПолноеИмя()); - - РезультатЗапроса = Запрос.Выполнить(); - - Если Не РезультатЗапроса.Пустой() Тогда - Возврат Истина; - КонецЕсли; - - КонецЦикла; - - Возврат Ложь; -КонецФункции - Процедура ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, Данные = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -5257,25 +5829,36 @@ КонецПроцедуры -Функция СостояниеДлительнойОперации(Знач ИдентификаторОперации, - Знач URLВебСервиса, - Знач ИмяПользователя, - Знач Пароль, - СтрокаСообщенияОбОшибке = "" - ) Экспорт +Процедура ЗарегистрироватьДанныеДляНачальнойВыгрузкиФоновымЗаданием(УзелИнформационнойБазы, Данные) Экспорт - ПараметрыПодключения = СтруктураПараметровWS(); - ПараметрыПодключения.WSURLВебСервиса = URLВебСервиса; - ПараметрыПодключения.WSИмяПользователя = ИмяПользователя; - ПараметрыПодключения.WSПароль = Пароль; + ЗарегистрироватьДанныеДляНачальнойВыгрузки(УзелИнформационнойБазы, МассивОбъектовМетаданныхПоИдентификаторам(Данные)); - WSПрокси = ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); +КонецПроцедуры + +Функция МассивОбъектовМетаданныхПоИдентификаторам(Данные) - Если WSПрокси = Неопределено Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; + Результат = Новый Массив; - Возврат WSПрокси.GetContinuousOperationStatus(ИдентификаторОперации, СтрокаСообщенияОбОшибке); + Для Каждого Элемент Из Данные Цикл + + Результат.Добавить(Метаданные.НайтиПоПолномуИмени(Элемент)); + + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция МассивИдентификаторовОбъектовМетаданных(Данные) Экспорт + + Результат = Новый Массив; + + Для Каждого Элемент Из Данные Цикл + + Результат.Добавить(Элемент.ПолноеИмя()); + + КонецЦикла; + + Возврат Результат; КонецФункции Функция СостояниеДлительнойОперацииДляУзлаИнформационнойБазы(Знач УзелИнформационнойБазы, @@ -5283,7 +5866,7 @@ СтрокаСообщенияОбОшибке = "" ) Экспорт - WSПрокси = ОбменДаннымиПовтИсп.ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); + WSПрокси = ПолучитьWSПроксиДляУзлаИнформационнойБазы(УзелИнформационнойБазы, СтрокаСообщенияОбОшибке); Если WSПрокси = Неопределено Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; @@ -5294,7 +5877,7 @@ Функция КаталогВременногоХранилищаФайлов() - Возврат ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + Возврат ОбщегоНазначенияПовтИсп.КаталогВременногоХранилищаФайлов(); КонецФункции @@ -5326,10 +5909,15 @@ КонецФункции -Функция ВсеСсылочныеТипыКонфигурации() Экспорт +Функция КраткоеПредставлениеПервойОшибки(ИнформацияОбОшибке) - Возврат ОбменДаннымиПовтИсп.ВсеСсылочныеТипыКонфигурации(); + Если ИнформацияОбОшибке.Причина <> Неопределено Тогда + + Возврат КраткоеПредставлениеПервойОшибки(ИнформацияОбОшибке.Причина); + + КонецЕсли; + Возврат КраткоеПредставлениеОшибки(ИнформацияОбОшибке); КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -5573,6 +6161,8 @@ ВыполнитьИнициализациюСтруктурыНастроекОбменаДляУзлаИнформационнойБазы(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта); + УстановитьНастройкиРежимаОтладки(СтруктураНастроекОбмена); + // проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена, ИспользоватьНастройкиТранспорта); @@ -5618,8 +6208,6 @@ // СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаДляУзла(СтруктураНастроекОбмена.УзелИнформационнойБазы); - СтруктураНастроекОбмена.РежимОтладки = СтруктураНастроекОбмена.НастройкиТранспорта.ВыполнятьОбменВРежимеОтладки; - СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.НастройкиТранспорта.ИмяФайлаПротоколаОбмена; Если КоличествоЭлементовВТранзакции = Неопределено Тогда @@ -5646,6 +6234,8 @@ СтруктураНастроекОбмена.ВидТранспортаОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.COM; + УстановитьНастройкиРежимаОтладки(СтруктураНастроекОбмена); + // проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); @@ -5678,6 +6268,8 @@ Возврат СтруктураНастроекОбмена; КонецЕсли; + УстановитьНастройкиРежимаОтладки(СтруктураНастроекОбмена); + // проверяем структуру настроек на валидность значений для выполнения обмена. Ошибки фиксируем в ЖР ВыполнитьПроверкуСтруктурыОбменаНаВалидность(СтруктураНастроекОбмена); @@ -5792,8 +6384,6 @@ // СтруктураНастроекОбмена.НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаДляУзла(СтруктураНастроекОбмена.УзелИнформационнойБазы, СтруктураНастроекОбмена.ВидТранспортаОбмена); - СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.НастройкиТранспорта.ИмяФайлаПротоколаОбмена; - СтруктураНастроекОбмена.РежимОтладки = СтруктураНастроекОбмена.НастройкиТранспорта.ВыполнятьОбменВРежимеОтладки; КонецПроцедуры @@ -5831,9 +6421,6 @@ КонецЕсли; - СтруктураНастроекОбмена.РежимОтладки = СтруктураНастроекОбмена.НастройкиТранспорта.ВыполнятьОбменВРежимеОтладки; - СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.НастройкиТранспорта.ИмяФайлаПротоколаОбмена; - СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции = ?(СтруктураНастроекОбмена.ДействиеПриОбмене = Перечисления.ДействияПриОбмене.ЗагрузкаДанных, СтруктураНастроекОбмена.НастройкиТранспорта.КоличествоЭлементовВТранзакцииЗагрузкиДанных, СтруктураНастроекОбмена.НастройкиТранспорта.КоличествоЭлементовВТранзакцииВыгрузкиДанных @@ -5882,7 +6469,6 @@ СтруктураНастроекОбмена.Вставить("ВидТранспортаОбмена"); СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); СтруктураНастроекОбмена.Вставить("КоличествоЭлементовВТранзакции"); - СтруктураНастроекОбмена.Вставить("РежимОтладки"); СтруктураНастроекОбмена.Вставить("ПроизводитьЗагрузкуДанных"); СтруктураНастроекОбмена.Вставить("ПроизводитьВыгрузкуДанных"); СтруктураНастроекОбмена.Вставить("ИспользоватьПередачуБольшогоОбъемаДанных", Ложь); @@ -5906,11 +6492,15 @@ СтруктураНастроекОбмена.Вставить("КлючСообщенияЖурналаРегистрации"); СтруктураНастроекОбмена.Вставить("НастройкиТранспорта"); - СтруктураНастроекОбмена.Вставить("ИмяФайлаПротоколаОбмена"); СтруктураНастроекОбмена.Вставить("ПравилаКонвертацииОбъектов"); СтруктураНастроекОбмена.Вставить("ПравилаЗагружены"); + СтруктураНастроекОбмена.Вставить("РежимОтладкиВыгрузки ", Ложь); + СтруктураНастроекОбмена.Вставить("РежимОтладкиЗагрузки", Ложь); + СтруктураНастроекОбмена.Вставить("ИмяФайлаОбработкиДляОтладкиВыгрузки", ""); + СтруктураНастроекОбмена.Вставить("ИмяФайлаОбработкиДляОтладкиЗагрузки", ""); + // структура для регистрации событий в ЖР СтруктураНастроекОбмена.Вставить("РезультатВыполненияОбмена"); СтруктураНастроекОбмена.Вставить("ДействиеПриОбмене"); @@ -5999,6 +6589,32 @@ ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + ИначеЕсли СтруктураНастроекОбмена.РежимОтладкиВыгрузки Тогда + + ФайлОбработкиВыгрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаОбработкиДляОтладкиВыгрузки); + + Если Не ФайлОбработкиВыгрузки.Существует() Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки выгрузки не существует. Обмен отменен.'"); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + КонецЕсли; + + ИначеЕсли СтруктураНастроекОбмена.РежимОтладкиЗагрузки Тогда + + ФайлОбработкиЗагрузки = Новый Файл(СтруктураНастроекОбмена.ИмяФайлаОбработкиДляОтладкиЗагрузки); + + Если Не ФайлОбработкиЗагрузки.Существует() Тогда + + СтрокаСообщенияОбОшибке = НСтр("ru = 'Файл внешней обработки для отладки загрузки не существует. Обмен отменен.'"); + ЗаписьЖурналаРегистрацииОбменаДанными(СтрокаСообщенияОбОшибке, СтруктураНастроекОбмена, Истина); + + ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена); + + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -6075,6 +6691,9 @@ УстановитьПравилаОбменаВыгрузкиДанных(ОбработкаОбменаДанными, СтруктураНастроекОбмена); + ОбработкаОбменаДанными.ОтладкаОбработчиковВыгрузки = СтруктураНастроекОбмена.РежимОтладкиВыгрузки; + ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки = СтруктураНастроекОбмена.ИмяФайлаОбработкиДляОтладкиВыгрузки; + // задаем узлы обмена ОбработкаОбменаДанными.УзелДляОбмена = СтруктураНастроекОбмена.УзелИнформационнойБазы; ОбработкаОбменаДанными.УзелДляФоновогоОбмена = Неопределено; @@ -6095,29 +6714,31 @@ ОбработкаОбменаДанными.РежимОбмена = "Загрузка"; ОбработкаОбменаДанными.УзелОбменаЗагрузкаДанных = СтруктураНастроекОбмена.УзелИнформационнойБазы; + ОбработкаОбменаДанными.ОтладкаОбработчиковЗагрузки = СтруктураНастроекОбмена.РежимОтладкиЗагрузки; + ОбработкаОбменаДанными.ИмяФайлаВнешнейОбработкиОтладкиЗагрузки = СтруктураНастроекОбмена.ИмяФайлаОбработкиДляОтладкиЗагрузки; + УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена); Возврат ОбработкаОбменаДанными КонецФункции -Процедура УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена) - - ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Ложь; - ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений; +Процедура УстановитьОбщиеПараметрыДляОбработкиОбменаДанными(ОбработкаОбменаДанными, СтруктураНастроекОбмена, ОбменСБСП20 = Ложь) ОбработкаОбменаДанными.ДописыватьДанныеВПротоколОбмена = Ложь; ОбработкаОбменаДанными.ВыгружатьТолькоРазрешенные = Ложь; - ОбработкаОбменаДанными.ФлагРежимОтладки = СтруктураНастроекОбмена.РежимОтладки; - ОбработкаОбменаДанными.ИспользоватьТранзакции = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции <> 1; ОбработкаОбменаДанными.КоличествоОбъектовНаТранзакцию = СтруктураНастроекОбмена.КоличествоЭлементовВТранзакции; - ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = СтруктураНастроекОбмена.ИмяФайлаПротоколаОбмена; - ОбработкаОбменаДанными.КлючСообщенияЖурналаРегистрации = СтруктураНастроекОбмена.КлючСообщенияЖурналаРегистрации; + Если Не ОбменСБСП20 Тогда + + УстановитьОбщиеНастройкиРежимаОтладки(ОбработкаОбменаДанными, СтруктураНастроекОбмена.ИмяПланаОбмена); + + КонецЕсли; + КонецПроцедуры Процедура УстановитьПравилаОбменаВыгрузкиДанных(ОбработкаОбменаДаннымиXML, СтруктураНастроекОбмена) @@ -6141,6 +6762,158 @@ КонецПроцедуры +// Устанавливает общие настройки режима отладки. +// +Процедура УстановитьОбщиеНастройкиРежимаОтладки(ОбработкаОбменаДанными, ИмяПланаОбмена) + + ОбщиеНастройки = ОбщиеНастройкиРежимаОтладки(ИмяПланаОбмена); + + Если ОбщиеНастройки = Неопределено Тогда + + ОбработкаОбменаДанными.РежимПротоколированияОбменаДанными = Ложь; + ОбработкаОбменаДанными.ПродолжитьПриОшибке = Ложь; + ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Ложь; + ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений; + + Иначе + + ОбработкаОбменаДанными.РежимПротоколированияОбменаДанными = ОбщиеНастройки.РежимПротоколированияОбменаДанными; + ОбработкаОбменаДанными.ПродолжитьПриОшибке = ОбщиеНастройки.НеОстанавливатьПоОшибке; + + Если ОбработкаОбменаДанными.РежимПротоколированияОбменаДанными Тогда + + Если ОбщиеНастройки.ИмяФайлаПротоколаОбмена = "" Тогда + ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Истина; + ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Ложь; + Иначе + ОбработкаОбменаДанными.ВыводВОкноСообщенийИнформационныхСообщений = Ложь; + ОбработкаОбменаДанными.ВыводВПротоколИнформационныхСообщений = Истина; + ОбработкаОбменаДанными.ИмяФайлаПротоколаОбмена = ОбщиеНастройки.ИмяФайлаПротоколаОбмена; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Получает общие настройки режима отладки. +// +// Параметры: +// ИмяПланаОбмена - Строка - имя плана обмена как объекта метаданных +Функция ОбщиеНастройкиРежимаОтладки(Знач ИмяПланаОбмена) + + // возвращаемое значение функции + ОбщиеНастройки = Неопределено; + + ТекстЗапроса = "ВЫБРАТЬ + | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена Как ИмяФайлаПротоколаОбмена, + | ПравилаДляОбменаДанными.НеОстанавливатьПоОшибке Как НеОстанавливатьПоОшибке, + | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными Как РежимПротоколированияОбменаДанными + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена + | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) + | И ПравилаДляОбменаДанными.РежимОтладки"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); + + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + + ТаблицаНастроек = Результат.Выгрузить(); + ОбщиеНастройки = Новый Структура; + СтрокаТаблицы = ТаблицаНастроек[0]; + + Для Каждого Колонка Из ТаблицаНастроек.Колонки Цикл + + ОбщиеНастройки.Вставить(Колонка.Имя, СтрокаТаблицы[Колонка.Имя]); + + КонецЦикла; + + КонецЕсли; + + Возврат ОбщиеНастройки; + +КонецФункции + +// Устанавливает настройки отладки выгрузки и загрузки. +// +Процедура УстановитьНастройкиРежимаОтладки(СтруктураНастроекОбмена) + + НастройкиОтладки = НастройкиРежимаОтладки(СтруктураНастроекОбмена.ИмяПланаОбмена); + + Если НастройкиОтладки = Неопределено Или ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Возврат; + + Иначе + + Если СтруктураНастроекОбмена.ПроизводитьВыгрузкуДанных Тогда + + СтруктураНастроекОбмена.РежимОтладкиВыгрузки = НастройкиОтладки.РежимОтладкиВыгрузки; + СтруктураНастроекОбмена.ИмяФайлаОбработкиДляОтладкиВыгрузки = НастройкиОтладки.ИмяФайлаОбработкиДляОтладкиВыгрузки; + + ИначеЕсли СтруктураНастроекОбмена.ПроизводитьЗагрузкуДанных Тогда + + СтруктураНастроекОбмена.РежимОтладкиЗагрузки = НастройкиОтладки.РежимОтладкиЗагрузки; + СтруктураНастроекОбмена.ИмяФайлаОбработкиДляОтладкиЗагрузки = НастройкиОтладки.ИмяФайлаОбработкиДляОтладкиЗагрузки; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Получает настройки отладки выгрузки и загрузки. +// +Функция НастройкиРежимаОтладки(Знач ИмяПланаОбмена) Экспорт + + НастройкиОтладки = Неопределено; + + ТекстЗапроса = "ВЫБРАТЬ + | ПравилаДляОбменаДанными.РежимОтладкиВыгрузки Как РежимОтладкиВыгрузки, + | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиВыгрузки Как ИмяФайлаОбработкиДляОтладкиВыгрузки, + | ПравилаДляОбменаДанными.РежимОтладкиЗагрузки Как РежимОтладкиЗагрузки, + | ПравилаДляОбменаДанными.ИмяФайлаОбработкиДляОтладкиЗагрузки Как ИмяФайлаОбработкиДляОтладкиЗагрузки, + | ПравилаДляОбменаДанными.РежимПротоколированияОбменаДанными Как РежимПротоколированияОбменаДанными, + | ПравилаДляОбменаДанными.ИмяФайлаПротоколаОбмена Как ИмяФайлаПротоколаОбмена, + | ПравилаДляОбменаДанными.НеОстанавливатьПоОшибке Как НеОстанавливатьПоОшибке + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена + | И ПравилаДляОбменаДанными.ВидПравил = ЗНАЧЕНИЕ(Перечисление.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов) + | И ПравилаДляОбменаДанными.РежимОтладки"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.УстановитьПараметр("ИмяПланаОбмена", ИмяПланаОбмена); + + Результат = Запрос.Выполнить(); + + Если Не Результат.Пустой() Тогда + + ТаблицаНастроек = Результат.Выгрузить(); + НастройкиОтладки = Новый Структура; + СтрокаТаблицы = ТаблицаНастроек[0]; + + Для Каждого Колонка Из ТаблицаНастроек.Колонки Цикл + + НастройкиОтладки.Вставить(Колонка.Имя, СтрокаТаблицы[Колонка.Имя]); + + КонецЦикла; + + КонецЕсли; + + Возврат НастройкиОтладки; + +КонецФункции + Процедура ЗафиксироватьЗавершениеИнициализацииОбмена(СтруктураНастроекОбмена) СтруктураНастроекОбмена.Отказ = Истина; @@ -6158,445 +6931,6 @@ // КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обмен данными под полными правами - -// Обновляет/устанавливает повторно-используемые значения и параметры сеанса для подсистемы обмена данными -// -// Устанавливаемые параметры сеанса: -// ОбменДаннымиВключен - Булево - флаг, который показывает следует или нет использовать обмен данными в конфигурации. -// Определяется косвенным образом по факту наличия обмена данными хотя бы с одним планом обмена. -// Наличие обмена с каким либо планом обмена определяется по наличию у этого плана обмена узлов -// кроме предопределенного. -// ИспользуемыеПланыОбмена - ФиксированныйМассив - массив с именами планов обмена для которых используется обмен. -// ПравилаРегистрацииОбъектов - ХранилищеЗначения - в бинарном виде содержит таблицу значений с правилами регистрации объектов. -// ПравилаВыборочнойРегистрацииОбъектов - -// ДатаОбновленияПовторноИспользуемыхЗначенийМРО - Дата (Дата и время) - содержит дату последнего актуального -// кэша для подсистемы обмена данными -// -// Параметры: -// Нет. -// -Процедура ОбновитьПовторноИспользуемыеЗначенияМРО() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Обновляем повторно используемые значения - ОбновитьПовторноИспользуемыеЗначения(); - - // получаем планы обмена конфигурации, которые используются при обмене - ИспользуемыеПланыОбмена = ПолучитьИспользуемыеПланыОбмена(); - - // флаг включения механизма обмена данными - ОбменДаннымиВключен = (ИспользуемыеПланыОбмена.Количество() <> 0); - - // устанавливаем параметр сеанса ОбменДаннымиВключен - ПараметрыСеанса.ОбменДаннымиВключен = ОбменДаннымиВключен; - - // устанавливаем параметр сеанса ИспользуемыеПланыОбмена - ПараметрыСеанса.ИспользуемыеПланыОбмена = Новый ФиксированныйМассив(ИспользуемыеПланыОбмена); - - // получаем таблицу правил регистрации из ИБ - ПравилаРегистрацииОбъектов = ПолучитьПравилаРегистрацииОбъектов(); - - // устанавливаем параметр сеанса ПравилаРегистрацииОбъектов - ПараметрыСеанса.ПравилаРегистрацииОбъектов = Новый ХранилищеЗначения(ПравилаРегистрацииОбъектов); - - // устанавливаем параметр сеанса ПравилаВыборочнойРегистрацииОбъектов - ПравилаВыборочнойРегистрацииОбъектов = ПолучитьПравилаВыборочнойРегистрацииОбъектов(); - - ПараметрыСеанса.ПравилаВыборочнойРегистрацииОбъектов = Новый ХранилищеЗначения(ПравилаВыборочнойРегистрацииОбъектов); - - // КЛЮЧ ДЛЯ ПРОВЕРКИ АКТУАЛЬНОСТИ КЭША - - // устанавливаем актуальную дату обновления кеша МРО - АктуальнаяДата = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО"); - - ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО = АктуальнаяДата; - -КонецПроцедуры - -// Устанавливает значение константы ДатаОбновленияПовторноИспользуемыхЗначенийМРО -// В качестве устанавливаемого значения используется текущая дата компьютера (сервера) -// В момент изменения значения этой константы повторно-используемые значения -// для подсистемы обмена данными становятся неактуальными и требуют повторной инициализации. -// -// Параметры: -// Нет. -// -Процедура УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО() Экспорт - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - УстановитьПривилегированныйРежим(Истина); - // записываем дату и время компьютера сервера - ТекущаяДата() - // метод ТекущаяДатаСеанса() использовать нельзя. - // Текущая дата сервера в данном случае используется в качестве ключа уникальности кэша механизма регистрации объектов. - Константы.ДатаОбновленияПовторноИспользуемыхЗначенийМРО.Установить(ТекущаяДата()); - КонецЕсли; - -КонецПроцедуры - -// Устанавливает параметры сеанса подсистемы обмена данными -// -// Параметры: -// ИмяПараметра - Строка - имя параметра сеанса, значение которого необходимо установить -// УстановленныеПараметры - массив - в данный параметр помещается информация об установленных параметрах сеанса -// -Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - - // процедура обновления повторно-используемых значений и параметров сеанса - ОбновитьПовторноИспользуемыеЗначенияМРО(); - - // зарегистрируем имена параметров, которые установлены при - // выполнении ОбновитьПовторноИспользуемыеЗначенияМРО - УстановленныеПараметры.Добавить("ОбменДаннымиВключен"); - УстановленныеПараметры.Добавить("ИспользуемыеПланыОбмена"); - УстановленныеПараметры.Добавить("ПравилаВыборочнойРегистрацииОбъектов"); - УстановленныеПараметры.Добавить("ПравилаРегистрацииОбъектов"); - УстановленныеПараметры.Добавить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО"); - -КонецПроцедуры - -// Выполняет проверку актуальности КЭШа механизма регистрации объектов. -// Если кэш неактуальный, то выполняется инициализация КЭШа актуальными значениями. -// -// Параметры: -// Нет. -// -Процедура ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - АктуальнаяДата = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО"); - - Если ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО <> АктуальнаяДата Тогда - - ОбновитьПовторноИспользуемыеЗначенияМРО(); - - // рекурсивный вызов для проверки - ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Получает массив узлов плана обмена, для которых установлен признак «Выгружать всегда» -// -// Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, по которому определяются узлы -// ИмяРеквизитаФлага – Строка – имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов -// -// Возвращаемое значение: -// Тип: Массив. Массив узлов плана обмена, для которых установлен признак «Выгружать всегда» -// -Функция ПолучитьМассивУзловДляРегистрацииВыгружатьВсегда(Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ - | ШапкаПланаОбмена.Ссылка КАК Узел - |ИЗ - | ПланОбмена.[ИмяПланаОбмена] КАК ШапкаПланаОбмена - |ГДЕ - | ШапкаПланаОбмена.Ссылка <> &ЭтотУзел - | И ШапкаПланаОбмена.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьВсегда) - | И Не ШапкаПланаОбмена.ПометкаУдаления - |"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаФлага]", ИмяРеквизитаФлага); - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); - Запрос.Текст = ТекстЗапроса; - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); - -КонецФункции - -// Получает массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости» -// -// Параметры: -// Ссылка – ссылка на объект ИБ, для которого необходимо получить массив узлов, в которые объект ранее выгружался -// ИмяПланаОбмена – Строка – имя плана обмена, как объекта метаданных, по которому определяются узлы -// ИмяРеквизитаФлага – Строка – имя реквизита плана обмена, по которому устанавливается фильтр на выборку узлов -// -// Возвращаемое значение: -// Тип: Массив. Массив узлов плана обмена, для которых установлен признак «Выгружать при необходимости» -// -Функция ПолучитьМассивУзловДляРегистрацииВыгружатьПриНеобходимости(Ссылка, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт - - ТекстЗапроса = " - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ШапкаПланаОбмена.Ссылка КАК Узел - |ИЗ - | ПланОбмена.[ИмяПланаОбмена] КАК ШапкаПланаОбмена - |ЛЕВОЕ СОЕДИНЕНИЕ - | РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз - |ПО - | ШапкаПланаОбмена.Ссылка = СоответствияОбъектовИнформационныхБаз.УзелИнформационнойБазы - | И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект - |ГДЕ - | ШапкаПланаОбмена.Ссылка <> &ЭтотУзел - | И ШапкаПланаОбмена.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПриНеобходимости) - | И НЕ ШапкаПланаОбмена.ПометкаУдаления - | И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = &Объект - |"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаФлага]", ИмяРеквизитаФлага); - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); - Запрос.УстановитьПараметр("Объект", Ссылка); - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Узел"); - -КонецФункции - -// Находит регламентное задание по GUID -// -// Параметры: -// УникальныйНомерЗадания - Строка - строка с GUID регламентного задания -// -// Возвращаемое значение: -// Неопределено - если поиск регламентного задания по GUID не дал результатов -// ТекущееРегламентноеЗадание - РегламентноеЗадание - найденное по GUID регламентное задание -// -Функция НайтиРегламентноеЗаданиеПоПараметру(УникальныйНомерЗадания) Экспорт - - // возвращаемое значение функции - РегламентноеЗадание = Неопределено; - - Если ПустаяСтрока(УникальныйНомерЗадания) Тогда - - Возврат Неопределено; - - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Попытка - - РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(УникальныйНомерЗадания)); - - Исключение - - РегламентноеЗадание = Неопределено; - - КонецПопытки; - - Возврат РегламентноеЗадание; - -КонецФункции - -// Признак наличия настроенного обмена данными – определяется по наличию узлов в планах обмена. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Тип: Булево. Истина – в системе есть настроенный обмен данными; Ложь – обмена нет. -// -Функция ОбменДаннымиВключен() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.ОбменДаннымиВключен; - -КонецФункции - -// Функция возвращает список всех узлов заданного плана обмена кроме предопределенного узла -// -// Параметры: -// ИмяПланаОбмена – Строка – имя плана обмена, как оно задано в конфигураторе, список узлов для которого необходимо получить -// -// Возвращаемое значение: -// Массив – список всех узлов заданного плана обмена. -// -Функция ВсеУзлыПланаОбмена(ИмяПланаОбмена) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбменДаннымиПовтИсп.ПолучитьМассивУзловПланаОбмена(ИмяПланаОбмена); - -КонецФункции - -// Возвращает структуру со значениями свойств объекта, полученных запросом из ИБ. -// Ключ структуры – имя свойства; Значение – значение свойства объекта. -// -// Параметры: -// Ссылка – ссылка на объект ИБ, значения свойств которого требуется получить -// -// Возвращаемое значение: -// Тип: Структура. Структура со значениями свойств объекта. -// -Функция ПолучитьЗначенияСвойствДляСсылки(Ссылка, СвойстваОбъекта, Знач СвойстваОбъектаСтрокой, Знач ОбъектМетаданныхИмя) Экспорт - - ЗначенияСвойств = ОбменДаннымиСобытия.СкопироватьСтруктуру(СвойстваОбъекта); - - Если ЗначенияСвойств.Количество() = 0 Тогда - - Возврат ЗначенияСвойств; // возвращаем пустую структуру - - КонецЕсли; - - ТекстЗапроса = " - |ВЫБРАТЬ - | [СвойстваОбъектаСтрокой] - |ИЗ - | [ОбъектМетаданныхИмя] КАК Таблица - |ГДЕ - | Таблица.Ссылка = &Ссылка - |"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[СвойстваОбъектаСтрокой]", СвойстваОбъектаСтрокой); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОбъектМетаданныхИмя]", ОбъектМетаданныхИмя); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("Ссылка", Ссылка); - - УстановитьПривилегированныйРежим(Истина); - - Попытка - - Выборка = Запрос.Выполнить().Выбрать(); - - Исключение - - // фиксируем ошибку в ЖР - СтрокаСообщения = НСтр("ru = 'Ошибка при получении свойств ссылки. Ошибка выполнения запроса: [ОписаниеОшибки]'"); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОписаниеОшибки]", ОписаниеОшибки()); - ОбменДаннымиСобытия.ЗаписьЖурналаРегистрацииПРО(СтрокаСообщения, Ссылка.Метаданные()); - - // устанавливаем все свойства в значение "Неопределено" - Для Каждого Элемент ИЗ ЗначенияСвойств Цикл - - ЗначенияСвойств[Элемент.Ключ] = Неопределено; - - КонецЦикла; - - Возврат ЗначенияСвойств; - КонецПопытки; - - Если Выборка.Следующий() Тогда - - Для Каждого Элемент ИЗ ЗначенияСвойств Цикл - - ЗначенияСвойств[Элемент.Ключ] = Выборка[Элемент.Ключ]; - - КонецЦикла; - - КонецЕсли; - - Возврат ЗначенияСвойств; - -КонецФункции - -// Возвращает массив узлов плана обмена по заданным параметрам запроса и тексту запроса к таблице плана обмена -// -// -Функция МассивУзловПоЗначениямСвойств(ЗначенияСвойств, Знач ТекстЗапроса, Знач ИмяПланаОбмена, Знач ИмяРеквизитаФлага) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // возвращаемое значение функции - МассивУзловРезультат = Новый Массив; - - // подготавливаем запрос для получения узлов планов обмена - Запрос = Новый Запрос; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ОбязательныеУсловия]", - "И ПланОбменаОсновнаяТаблица.Ссылка <> &" + ИмяПланаОбмена + "ЭтотУзел - |И НЕ ПланОбменаОсновнаяТаблица.ПометкаУдаления - |[УсловиеОтбораПоРеквизитуФлагу] - |"); - // - Если ПустаяСтрока(ИмяРеквизитаФлага) Тогда - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеОтбораПоРеквизитуФлагу]", ""); - - Иначе - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[УсловиеОтбораПоРеквизитуФлагу]", - "И (ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ВыгружатьПоУсловию) - |ИЛИ ПланОбменаОсновнаяТаблица.[ИмяРеквизитаФлага] = ЗНАЧЕНИЕ(Перечисление.РежимыВыгрузкиОбъектовОбмена.ПустаяСсылка))"); - // - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаФлага]", ИмяРеквизитаФлага); - - КонецЕсли; - - // текст запроса - Запрос.Текст = ТекстЗапроса; - - Запрос.УстановитьПараметр(ИмяПланаОбмена + "ЭтотУзел", ОбменДаннымиПовтИсп.ПолучитьЭтотУзелПланаОбмена(ИмяПланаОбмена)); - - // задаем значения параметров запроса из свойств объекта - Для Каждого Элемент ИЗ ЗначенияСвойств Цикл - - Запрос.УстановитьПараметр("СвойствоОбъекта_" + Элемент.Ключ, Элемент.Значение); - - КонецЦикла; - - Попытка - - МассивУзловРезультат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - - Исключение - - // фиксируем ошибку в ЖР - - СтрокаСообщения = НСтр("ru = 'Ошибка при получении списка узлов получателей. Ошибка выполнения запроса: [ОписаниеОшибки]'"); - СтрокаСообщения = СтрЗаменить(СтрокаСообщения, "[ОписаниеОшибки]", ОписаниеОшибки()); - - ОбменДаннымиСобытия.ЗаписьЖурналаРегистрацииПРО(СтрокаСообщения); - - Возврат Новый Массив // возвращаем пустой массив - - КонецПопытки; - - // возвращаем результирующий массив узлов - Возврат МассивУзловРезультат; - -КонецФункции - -// Возвращает значение параметра сеанса ПравилаРегистрацииОбъектов, полученное в привилегированном режиме. -// -// Параметры: -// Нет. -// -// Возвращаемое значение: -// Тип: ХранилищеЗначения. Значение параметра сеанса ПравилаРегистрацииОбъектов. -// -Функция ПараметрыСеансаПравилаРегистрацииОбъектов() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.ПравилаРегистрацииОбъектов; - -КонецФункции - -Процедура ВыполнитьОбработчикВПривилегированномРежиме(Значение, Знач СтрокаОбработчика) Экспорт - - Если ТекущийРежимЗапуска() = РежимЗапускаКлиентскогоПриложения.УправляемоеПриложение Тогда - ВызватьИсключение НСтр("ru = 'Метод не поддерживается в режиме управляемого приложения.'"); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Выполнить(СтрокаОбработчика); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Константы @@ -6675,3 +7009,9 @@ Возврат НСтр("ru = 'Обмен данными.Создание обмена данными'"); КонецФункции + +Функция ТребуетсяУстановкаОбновления() Экспорт + + Возврат КонфигурацияИзменена() И ЭтоПодчиненныйУзелРИБ(); + +КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиСервер/ОбменДаннымиСервер.mdo b/SSL/src/CommonModules/ОбменДаннымиСервер/ОбменДаннымиСервер.mdo index f9fbd038f..6c2667b8c 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСервер/ОбменДаннымиСервер.mdo +++ b/SSL/src/CommonModules/ОбменДаннымиСервер/ОбменДаннымиСервер.mdo @@ -6,5 +6,6 @@ Обмен данными сервер true - true + true + true diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl index c4dd858a9..897625652 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/Module.bsl @@ -12,78 +12,28 @@ // Параметры: // ЭлементДанных, ОтправкаЭлемента - см. описание параметров в синтаксис помощнике // для методов ПриОтправкеДанныхГлавному() и ПриОтправкеДанныхПодчиненному() -// УзелИнформационнойБазы - ПланОбменаСсылка - текущий узел плана обмена для которого выполняется выгрузка данных -// ИмяПланаОбмена - Строка - имя плана обмена как оно задано в конфигураторе // -// Примечание: -// Перед вызовом процедуры желательно актуализировать кэш МРО. Для этого следует выполнить вызов -// ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); -// -Процедура ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента, УзелИнформационнойБазы, Знач ИмяПланаОбмена, Знач СозданиеНачальногоОбраза) Экспорт +Процедура ПриОтправкеДанныхКорреспонденту(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь, Получатель = Неопределено) Экспорт - Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда - Возврат; // удаление объекта отсылаем "как есть" - КонецЕсли; - - ОбъектМетаданных = ЭлементДанных.Метаданные(); - - Если Не ОбменДаннымиПовтИсп.РегистрироватьИзмененияПоПравиламРегистрацииОбъекта(ИмяПланаОбмена, ОбъектМетаданных.ПолноеИмя()) Тогда - Возврат; // фильтрацию не выполняем - КонецЕсли; - - ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); - - Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаСправочники() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаДокументы() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовХарактеристик() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыСчетов() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовРасчета() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаБизнесПроцессы() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаЗадачи() Тогда + Если Получатель = Неопределено Тогда - // определяем массив узлов для регистрации объекта - МассивУзловДляРегистрацииОбъекта = Новый Массив; - - ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловДляРегистрацииОбъекта, - ЭлементДанных, - ИмяПланаОбмена, - ОбъектМетаданных, - Ложь, - , - , - , - , - Истина); // - НомерВМассиве = МассивУзловДляРегистрацииОбъекта.Найти(УзелИнформационнойБазы); + ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить + ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда - // если в массиве нет текущего узла, то посылаем удаление объекта - Если НомерВМассиве = Неопределено Тогда - - ОтправкаЭлемента = ?(СозданиеНачальногоОбраза, ОтправкаЭлементаДанных.Игнорировать, ОтправкаЭлементаДанных.Удалить); - - КонецЕсли; + // Стандартную обработку не переопределяем - ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыБухгалтерии() - ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыРасчета() Тогда + ИначеЕсли ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Получатель.Ссылка) Тогда + + ПриОтправкеДанных( + ЭлементДанных, + ОтправкаЭлемента, + Получатель.Ссылка, + ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(Получатель.Ссылка), + СозданиеНачальногоОбраза + ); - ЭлементДанных.ДополнительныеСвойства.Вставить("УзелИнформационнойБазы", УзелИнформационнойБазы); - - ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(Новый Массив, - ЭлементДанных, - ИмяПланаОбмена, - ОбъектМетаданных, - , - Истина, - , - , - , - Истина); - // - КонецЕсли; КонецПроцедуры @@ -182,7 +132,7 @@ // Функция ВсеУзлыПланаОбмена(ИмяПланаОбмена) Экспорт - Возврат ОбменДаннымиСервер.ВсеУзлыПланаОбмена(ИмяПланаОбмена); + Возврат ОбменДаннымиВызовСервера.ВсеУзлыПланаОбмена(ИмяПланаОбмена); КонецФункции @@ -393,7 +343,7 @@ ВыполнитьРегистрациюОбъектовСсылочногоТипаПоСвойствамУзла(Источник, ТаблицаРеквизитовСсылочногоТипа); // Обновляем повторноиспользуемые значения механизма - ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецЕсли; @@ -406,7 +356,7 @@ Если Источник.ЭтоНовый() И ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(Источник.Ссылка) Тогда // кеш открытых сеансов для МРО стал неактуальным - ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецЕсли; @@ -419,7 +369,7 @@ Если ОбменДаннымиПовтИсп.ЭтоУзелРазделенногоОбменаДаннымиБСП(Источник.Ссылка) Тогда // кеш открытых сеансов для МРО стал неактуальным - ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); КонецЕсли; @@ -434,7 +384,7 @@ И Не ОбменДаннымиПовтИсп.ЭтоПредопределенныйУзелПланаОбмена(Источник.Ссылка) И ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) И ДанныеРазличаются(Источник, Источник.Ссылка.ПолучитьОбъект(),, "НомерОтправленного, НомерПринятого, ПометкаУдаления, Код, Наименование") - И ОбменДаннымиСервер.ИзмененияЗарегистрированы(Источник.Ссылка) + И ОбменДаннымиВызовСервера.ИзмененияЗарегистрированы(Источник.Ссылка) Тогда ПодробноеПредставлениеОшибки = НСтр("ru = 'Настройка обмена данными не может быть изменена. @@ -490,50 +440,6 @@ КонецПроцедуры -// Только для внутреннего использования -// -Процедура ПриОтправкеДанныхПодчиненному(Источник, ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза) Экспорт - - Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда - - Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьОбменДаннымиВЛокальномРежиме") Тогда - - ЭлементДанных.Значение = Истина; - - ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьОбменДаннымиВМоделиСервиса") Тогда - - ЭлементДанных.Значение = Ложь; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Только для внутреннего использования -// -Процедура ПриПолученииДанныхОтПодчиненного(Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт - - Если ОбменДаннымиПовтИсп.ЭтоУзелОбменаДаннымиБСП(Источник.Ссылка) Тогда - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьОбменДаннымиВЛокальномРежиме") Тогда - - ЭлементДанных.Значение = Ложь; - - ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьОбменДаннымиВМоделиСервиса") Тогда - - ЭлементДанных.Значение = Истина; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Механизм регистрации объектов (МРО) @@ -560,21 +466,100 @@ ЭтоКонстанта = Ложь ) - Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат; - КонецЕсли; - ОтключитьМеханизмРегистрацииОбъектов = Ложь; - Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов", ОтключитьМеханизмРегистрацииОбъектов) + Если Объект.ДополнительныеСвойства.Свойство("ОтключитьМеханизмРегистрацииОбъектов", ОтключитьМеханизмРегистрацииОбъектов) И ОтключитьМеханизмРегистрацииОбъектов = Истина Тогда - Возврат; // отказались от выполнения МРО; выходим + Возврат; // отказались от выполнения + КонецЕсли; + + ОбъектМетаданных = Объект.Метаданные(); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если Не РазделенныйПланОбмена(ИмяПланаОбмена) Тогда + + ВызватьИсключение НСтр("ru = 'Регистрация изменений для неразделенных планов обмена не поддерживается.'"); + + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Если Не РазделенныеДанные(ОбъектМетаданных) Тогда + + ВызватьИсключение НСтр("ru = 'Регистрация изменений неразделенных данных в разделенном режиме.'"); + + КонецЕсли; + + Иначе + + Если РазделенныеДанные(ОбъектМетаданных) Тогда + + ВызватьИсключение НСтр("ru = 'Регистрация изменений разделенных данных в неразделенном режиме.'"); + + Иначе + + // Для неразделенных данных в неразделенном режиме выполняем регистрацию изменений данных + // на всех узлах разделенных планов обмена. + // Использование механизма правил регистрации в этом режиме не поддерживается. + + ТекстЗапроса = + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Получатель + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + |ГДЕ + | НЕ ПланОбмена.ЭтотУзел + | И НЕ ПланОбмена.ПометкаУдаления"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Попытка + Получатели = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель"); + Исключение + + ТекстЗапроса = + "ВЫБРАТЬ + | ПланОбмена.Ссылка КАК Получатель + |ИЗ + | ПланОбмена.[ИмяПланаОбмена] КАК ПланОбмена + |ГДЕ + | НЕ ПланОбмена.ПометкаУдаления"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяПланаОбмена]", ИмяПланаОбмена); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + Получатели = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель"); + + КонецПопытки; + + Для Каждого Получатель Из Получатели Цикл + + Попытка + Объект.ОбменДанными.Получатели.Добавить(Получатель); + Исключение + // Обработка исключения не требуется. + // Ожидаемо наличие в параметре "Получатели" преопределенных узлов разделенных планов обмена. + КонецПопытки; + + КонецЦикла; + + КонецЕсли; + + Возврат; // Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() + КонецЕсли; + КонецЕсли; // проверяем актуальность кеша сеанса для МРО - ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); - Если НЕ ОбменДаннымиСервер.ОбменДаннымиВключен() Тогда + Если НЕ ОбменДаннымиВызовСервера.ОбменДаннымиВключен() Тогда Возврат; КонецЕсли; @@ -588,8 +573,6 @@ КонецЕсли; - ОбъектМетаданных = Объект.Метаданные(); - // при физическом удалении объекта ВРО не выполняем ЗарегистрироватьОбъектКВыгрузке = ЭтоРегистр ИЛИ ЭтоУдалениеОбъекта ИЛИ ЭтоКонстанта; @@ -912,7 +895,7 @@ // ОПРЕДЕЛЯЕМ ПОЛУЧАТЕЛЕЙ С РЕЖИМОМ ВЫГРУЗКИ "ВСЕГДА" - Получатели = ОбменДаннымиСервер.ПолучитьМассивУзловДляРегистрацииВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); + Получатели = ОбменДаннымиВызовСервера.ПолучитьМассивУзловДляРегистрацииВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, Получатели); @@ -935,7 +918,7 @@ // ОПРЕДЕЛЯЕМ ПОЛУЧАТЕЛЕЙ С РЕЖИМОМ ВЫГРУЗКИ "ВСЕГДА" - Получатели = ОбменДаннымиСервер.ПолучитьМассивУзловДляРегистрацииВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); + Получатели = ОбменДаннымиВызовСервера.ПолучитьМассивУзловДляРегистрацииВыгружатьВсегда(ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, Получатели); @@ -943,7 +926,7 @@ Если Не Объект.ЭтоНовый() Тогда - Получатели = ОбменДаннымиСервер.ПолучитьМассивУзловДляРегистрацииВыгружатьПриНеобходимости(Объект.Ссылка, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); + Получатели = ОбменДаннымиВызовСервера.ПолучитьМассивУзловДляРегистрацииВыгружатьПриНеобходимости(Объект.Ссылка, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, Получатели); @@ -959,6 +942,36 @@ КонецПроцедуры +Функция НаборЗаписейПоТипу(ОбъектМетаданных) + + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); + + Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений() Тогда + + Результат = РегистрыСведений[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); + + ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления() Тогда + + Результат = РегистрыНакопления[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); + + ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыБухгалтерии() Тогда + + Результат = РегистрыБухгалтерии[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); + + ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыРасчета() Тогда + + Результат = РегистрыРасчета[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); + + Иначе + + СтрокаСообщения = НСтр("ru = 'Для объекта метаданных %1 не предусмотрено набора записей.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ОбъектМетаданных.ПолноеИмя()); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + + Возврат Результат; +КонецФункции + Процедура ВыполнитьПравилоРегистрацииОбъектаДляНабораЗаписей(МассивУзловРезультат, ПРО, Объект, @@ -971,32 +984,9 @@ // определяем массив узлов-получателей по текущему набору записей ОпределитьМассивПолучателейПоНаборуЗаписей(МассивУзловРезультат, Объект, ПРО, ОбъектМетаданных, ИмяПланаОбмена, Ложь, Выгрузка); - Если Замещение Тогда + Если Замещение И Не Выгрузка Тогда - // определяем старый набор записей из глобального контекста - ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); - - Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений() Тогда - - СтарыйНаборЗаписей = РегистрыСведений[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); - - ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления() Тогда - - СтарыйНаборЗаписей = РегистрыНакопления[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); - - ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыБухгалтерии() Тогда - - СтарыйНаборЗаписей = РегистрыБухгалтерии[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); - - ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыРасчета() Тогда - - СтарыйНаборЗаписей = РегистрыРасчета[ОбъектМетаданных.Имя].СоздатьНаборЗаписей(); - - Иначе - - Возврат; // внутренняя ошибка (ошибка встраивания библиотеки) - - КонецЕсли; + СтарыйНаборЗаписей = НаборЗаписейПоТипу(ОбъектМетаданных); Для Каждого ЗначениеОтбора Из Объект.Отбор Цикл @@ -1013,7 +1003,7 @@ СтарыйНаборЗаписей.Прочитать(); // определяем массив узлов-получателей по старому набору записей - ОпределитьМассивПолучателейПоНаборуЗаписей(МассивУзловРезультат, СтарыйНаборЗаписей, ПРО, ОбъектМетаданных, ИмяПланаОбмена, Истина, Выгрузка); + ОпределитьМассивПолучателейПоНаборуЗаписей(МассивУзловРезультат, СтарыйНаборЗаписей, ПРО, ОбъектМетаданных, ИмяПланаОбмена, Истина, Ложь); КонецЕсли; @@ -1144,7 +1134,7 @@ Если ПроверятьСсылку Тогда // получаем структуру значений свойств для ссылки - ЗначенияСвойствСсылки = ОбменДаннымиСервер.ПолучитьЗначенияСвойствДляСсылки(Источник.Ссылка, ПРО.СвойстваОбъекта, ПРО.СвойстваОбъектаСтрокой, ПРО.ОбъектМетаданныхИмя); + ЗначенияСвойствСсылки = ОбменДаннымиВызовСервера.ПолучитьЗначенияСвойствДляСсылки(Источник.Ссылка, ПРО.СвойстваОбъекта, ПРО.СвойстваОбъектаСтрокой, ПРО.ОбъектМетаданныхИмя); // определяем массив узлов для регистрации ссылки МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойствСсылки, ПРО, ИмяПланаОбмена, Источник); @@ -1178,101 +1168,48 @@ КонецЕсли; - Если Выгрузка Тогда + Для Каждого СтрокаНабора ИЗ НаборЗаписей Цикл - УзелИнформационнойБазы = НаборЗаписей.ДополнительныеСвойства.УзелИнформационнойБазы; + ПРО_СтрокиНабора = СкопироватьСтруктуру(ПРО); - ОбратныйИндекс = НаборЗаписей.Количество() - 1; - - Пока ОбратныйИндекс >= 0 Цикл + Если ЕстьРегистратор И СтрокаНабора["Регистратор"] = Неопределено Тогда - ПРО_СтрокиНабора = СкопироватьСтруктуру(ПРО); - - СтрокаНабора = НаборЗаписей[ОбратныйИндекс]; - - Если ЕстьРегистратор И СтрокаНабора["Регистратор"] = Неопределено Тогда + Если Регистратор <> Неопределено Тогда - Если Регистратор <> Неопределено Тогда - - СтрокаНабора["Регистратор"] = Регистратор; - - КонецЕсли; + СтрокаНабора["Регистратор"] = Регистратор; КонецЕсли; - // ПРОБ - Если Не ОбъектПрошелФильтрПравилРегистрацииПоСвойствам(ПРО_СтрокиНабора, СтрокаНабора, Ложь) Тогда - - НаборЗаписей.Удалить(ОбратныйИндекс); - - Иначе // ПРОП - - ЗначенияСвойствОбъекта = ПолучитьЗначенияСвойствДляОбъекта(СтрокаНабора, ПРО_СтрокиНабора); - - // определяем массив узлов для регистрации объекта - МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора, Выгрузка); - - НомерВМассиве = МассивУзлов.Найти(УзелИнформационнойБазы); - - // если в массиве нет текущего узла, то удаляем строку из набора - Если НомерВМассиве = Неопределено Тогда - - НаборЗаписей.Удалить(ОбратныйИндекс); - - КонецЕсли; - - КонецЕсли; - - ОбратныйИндекс = ОбратныйИндекс - 1; - - КонецЦикла; + КонецЕсли; - Иначе + // ПРОБ + Если Не ОбъектПрошелФильтрПравилРегистрацииПоСвойствам(ПРО_СтрокиНабора, СтрокаНабора, Ложь) Тогда + + Продолжить; + + КонецЕсли; - Для Каждого СтрокаНабора ИЗ НаборЗаписей Цикл - - ПРО_СтрокиНабора = СкопироватьСтруктуру(ПРО); - - Если ЕстьРегистратор И СтрокаНабора["Регистратор"] = Неопределено Тогда - - Если Регистратор <> Неопределено Тогда - - СтрокаНабора["Регистратор"] = Регистратор; - - КонецЕсли; - - КонецЕсли; - - // ПРОБ - Если Не ОбъектПрошелФильтрПравилРегистрацииПоСвойствам(ПРО_СтрокиНабора, СтрокаНабора, Ложь) Тогда - - Продолжить; - - КонецЕсли; - - // ПРОП - - // получаем структуру значений свойств для объекта - ЗначенияСвойствОбъекта = ПолучитьЗначенияСвойствДляОбъекта(СтрокаНабора, ПРО_СтрокиНабора); - - Если ЭтоВерсияОбъектаДоИзменения Тогда - - // определяем массив узлов для регистрации объекта - МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора); - - Иначе - - // определяем массив узлов для регистрации объекта - МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора, Выгрузка); - - КонецЕсли; - - // добавляем узлы для регистрации - ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, МассивУзлов); - - КонецЦикла; + // ПРОП - КонецЕсли; + // получаем структуру значений свойств для объекта + ЗначенияСвойствОбъекта = ПолучитьЗначенияСвойствДляОбъекта(СтрокаНабора, ПРО_СтрокиНабора); + + Если ЭтоВерсияОбъектаДоИзменения Тогда + + // определяем массив узлов для регистрации объекта + МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойствДополнительный(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора); + + Иначе + + // определяем массив узлов для регистрации объекта + МассивУзлов = ОпределитьМассивУзловПоЗначениямСвойств(ЗначенияСвойствОбъекта, ПРО_СтрокиНабора, ИмяПланаОбмена, СтрокаНабора, Выгрузка); + + КонецЕсли; + + // добавляем узлы для регистрации + ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУзловРезультат, МассивУзлов); + + КонецЦикла; КонецПроцедуры @@ -1297,7 +1234,7 @@ Иначе - Возврат ОбменДаннымиСервер.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); + Возврат ОбменДаннымиВызовСервера.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); КонецЕсли; @@ -1324,7 +1261,7 @@ Иначе - Возврат ОбменДаннымиСервер.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); + Возврат ОбменДаннымиВызовСервера.МассивУзловПоЗначениямСвойств(ЗначенияСвойств, ТекстЗапроса, ИмяПланаОбмена, ПРО.ИмяРеквизитаФлага); КонецЕсли; @@ -1409,6 +1346,18 @@ Возврат Результат; КонецФункции +Функция РазделенныйПланОбмена(Знач ИмяПланаОбмена) + + Возврат ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных("ПланОбмена." + ИмяПланаОбмена); + +КонецФункции + +Функция РазделенныеДанные(ОбъектМетаданных) + + Возврат ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя()); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Правила регистрации по свойствам объектов @@ -1479,7 +1428,7 @@ #Если ВнешнееСоединение ИЛИ ТолстыйКлиентОбычноеПриложение Тогда - ОбменДаннымиСервер.ВыполнитьОбработчикВПривилегированномРежиме(Значение, СтрокаДерева.ЗначениеКонстанты); + ОбменДаннымиВызовСервера.ВыполнитьОбработчикВПривилегированномРежиме(Значение, СтрокаДерева.ЗначениеКонстанты); #Иначе @@ -1818,6 +1767,111 @@ //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции +Процедура ПриОтправкеДанных( + ЭлементДанных, + ОтправкаЭлемента, + УзелИнформационнойБазы, + Знач ИмяПланаОбмена, + Знач СозданиеНачальногоОбраза + ) + + Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда + Возврат; // удаление объекта отсылаем "как есть" + КонецЕсли; + + ОбъектМетаданных = ЭлементДанных.Метаданные(); + + Если Не ОбменДаннымиПовтИсп.РегистрироватьИзмененияПоПравиламРегистрацииОбъекта(ИмяПланаОбмена, ОбъектМетаданных.ПолноеИмя()) Тогда + Возврат; // фильтрацию не выполняем + КонецЕсли; + + ИмяБазовогоТипа = ОбщегоНазначения.ИмяБазовогоТипаПоОбъектуМетаданных(ОбъектМетаданных); + + Если ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаСправочники() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаДокументы() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовХарактеристик() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыСчетов() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаПланыВидовРасчета() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаБизнесПроцессы() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаЗадачи() Тогда + + // определяем массив узлов для регистрации объекта + МассивУзловДляРегистрацииОбъекта = Новый Массив; + + ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловДляРегистрацииОбъекта, + ЭлементДанных, + ИмяПланаОбмена, + ОбъектМетаданных, + Ложь, + , + , + , + , + Истина); + // + + // если в массиве нет текущего узла, то посылаем удаление объекта + Если МассивУзловДляРегистрацииОбъекта.Найти(УзелИнформационнойБазы) = Неопределено Тогда + + ОтправкаЭлемента = ?(СозданиеНачальногоОбраза, ОтправкаЭлементаДанных.Игнорировать, ОтправкаЭлементаДанных.Удалить); + + КонецЕсли; + + ИначеЕсли ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыСведений() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыБухгалтерии() + ИЛИ ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыРасчета() Тогда + + ИсключаяСвойства = ?(ИмяБазовогоТипа = ОбщегоНазначения.ИмяТипаРегистрыНакопления(), "ВидДвижения", ""); + + ДанныеДляПроверки = НаборЗаписейПоТипу(ОбъектМетаданных); + + Для Каждого ЭлементОтбораИсточник Из ЭлементДанных.Отбор Цикл + + ЭлементОтбораПриемник = ДанныеДляПроверки.Отбор.Найти(ЭлементОтбораИсточник.Имя); + + ЗаполнитьЗначенияСвойств(ЭлементОтбораПриемник, ЭлементОтбораИсточник); + + КонецЦикла; + + ДанныеДляПроверки.Добавить(); + + ОбратныйИндекс = ЭлементДанных.Количество() - 1; + + Пока ОбратныйИндекс >= 0 Цикл + + ЗаполнитьЗначенияСвойств(ДанныеДляПроверки[0], ЭлементДанных[ОбратныйИндекс],, ИсключаяСвойства); + + // определяем массив узлов для регистрации объекта + МассивУзловДляРегистрацииОбъекта = Новый Массив; + + ВыполнитьПравилаРегистрацииОбъектовДляПланаОбмена(МассивУзловДляРегистрацииОбъекта, + ДанныеДляПроверки, + ИмяПланаОбмена, + ОбъектМетаданных, + , + Истина, + , + , + , + Истина + ); + + // если в массиве нет текущего узла, то удаляем строку из набора + Если МассивУзловДляРегистрацииОбъекта.Найти(УзелИнформационнойБазы) = Неопределено Тогда + + ЭлементДанных.Удалить(ОбратныйИндекс); + + КонецЕсли; + + ОбратныйИндекс = ОбратныйИндекс - 1; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + // Заполняет значения реквизитов и табличных частей однотипных объектов информационной базы. // // Параметры: @@ -2242,3 +2296,127 @@ Возврат Результат; КонецФункции + +// + +// Только для внутреннего использования +// +Процедура УстановитьЗначенияОтборовНаУзле(УзелПланаОбмена, Настройки) Экспорт + + ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; + + НастройкаОтборов = ОбменДаннымиСервер.ЗначениеПоТипу(ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзле(), "Структура"); + + УстановитьЗначенияНаУзле(УзелПланаОбмена, Настройки, НастройкаОтборов); + +КонецПроцедуры + +// Только для внутреннего использования +// +Процедура УстановитьЗначенияПоУмолчаниюНаУзле(УзелПланаОбмена, Настройки) Экспорт + + ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; + + НастройкаОтборов = ОбменДаннымиСервер.ЗначениеПоТипу(ПланыОбмена[ИмяПланаОбмена].ЗначенияПоУмолчаниюНаУзле(), "Структура"); + + УстановитьЗначенияНаУзле(УзелПланаОбмена, Настройки, НастройкаОтборов); + +КонецПроцедуры + +Процедура УстановитьЗначенияНаУзле(УзелПланаОбмена, Настройки, НастройкаОтборов) + + ИмяПланаОбмена = УзелПланаОбмена.Метаданные().Имя; + + Для Каждого Элемент Из НастройкаОтборов Цикл + + Ключ = Элемент.Ключ; + Значение = Неопределено; + + Если Настройки.Свойство(Ключ, Значение) Тогда + + Если ТипЗнч(Значение) = Тип("Массив") Тогда + + ДанныеРеквизита = ПолучитьСсылочныйТипИзПервогоРеквизитаТабличнойЧастиПланаОбмена(ИмяПланаОбмена, Ключ); + + Если ДанныеРеквизита = Неопределено Тогда + Продолжить; + КонецЕсли; + + ТаблицаУзла = УзелПланаОбмена[Ключ]; + + ТаблицаУзла.Очистить(); + + Для Каждого СтрокаТаблицы Из Значение Цикл + + Если СтрокаТаблицы.Использовать Тогда + + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеРеквизита.Тип.ПривестиЗначение()); + + ЗначениеРеквизита = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаТаблицы.УникальныйИдентификаторСсылки)); + + ТаблицаУзла.Добавить()[ДанныеРеквизита.Имя] = ЗначениеРеквизита; + + КонецЕсли; + + КонецЦикла; + + ИначеЕсли ТипЗнч(Значение) = Тип("Структура") Тогда + + ЗаполнитьТаблицуУзлаПланаОбмена(УзелПланаОбмена, Значение, Ключ); + + Иначе // примитивные типы + + УзелПланаОбмена[Ключ] = Значение; + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ЗаполнитьТаблицуУзлаПланаОбмена(Узел, СтруктураТабличнойЧасти, ИмяТаблицы) + + ТаблицаУзла = Узел[ИмяТаблицы]; + + ТаблицаУзла.Очистить(); + + Для Каждого Элемент ИЗ СтруктураТабличнойЧасти Цикл + + УстановитьКоличествоСтрокТаблицы(ТаблицаУзла, Элемент.Значение.Количество()); + + ТаблицаУзла.ЗагрузитьКолонку(Элемент.Значение, Элемент.Ключ); + + КонецЦикла; + +КонецПроцедуры + +Процедура УстановитьКоличествоСтрокТаблицы(Таблица, КоличествоСтрок) + + Пока Таблица.Количество() < КоличествоСтрок Цикл + + Таблица.Добавить(); + + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьСсылочныйТипИзПервогоРеквизитаТабличнойЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяТабличнойЧасти) + + ТабличнаяЧасть = Метаданные.ПланыОбмена[ИмяПланаОбмена].ТабличныеЧасти[ИмяТабличнойЧасти]; + + Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл + + Тип = Реквизит.Тип.Типы()[0]; + + Если ОбщегоНазначения.ЭтоСсылка(Тип) Тогда + + Возврат Новый Структура("Имя, Тип", Реквизит.Имя, Реквизит.Тип); + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; +КонецФункции diff --git a/SSL/src/CommonModules/ОбменДаннымиСобытия/ОбменДаннымиСобытия.mdo b/SSL/src/CommonModules/ОбменДаннымиСобытия/ОбменДаннымиСобытия.mdo index 3505146e7..e3d162a57 100644 --- a/SSL/src/CommonModules/ОбменДаннымиСобытия/ОбменДаннымиСобытия.mdo +++ b/SSL/src/CommonModules/ОбменДаннымиСобытия/ОбменДаннымиСобытия.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl index 17600e409..626d16017 100644 --- a/SSL/src/CommonModules/ОбменСообщениями/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениями/Module.bsl @@ -472,7 +472,7 @@ ОбменСообщениямиВнутренний.СериализоватьДанныеВПоток(Сообщения, Поток); - ОбменСообщениямиПовтИсп.WSПроксиКонечнойТочки(КонечнаяТочка).DeliverMessages(ОбменСообщениямиВнутренний.КодЭтогоУзла(), Новый ХранилищеЗначения(Поток, Новый СжатиеДанных(9))); + ОбменСообщениямиПовтИсп.WSПроксиКонечнойТочки(КонечнаяТочка, 10).DeliverMessages(ОбменСообщениямиВнутренний.КодЭтогоУзла(), Новый ХранилищеЗначения(Поток, Новый СжатиеДанных(9))); КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменСообщениями/ОбменСообщениями.mdo b/SSL/src/CommonModules/ОбменСообщениями/ОбменСообщениями.mdo index 6e34d8659..38c1d8c10 100644 --- a/SSL/src/CommonModules/ОбменСообщениями/ОбменСообщениями.mdo +++ b/SSL/src/CommonModules/ОбменСообщениями/ОбменСообщениями.mdo @@ -6,5 +6,6 @@ Обмен сообщениями true - true + true + true diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl index 10b472484..99db6bee6 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/Module.bsl @@ -9,10 +9,10 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики событий подсистемы Обмена данными -// Обработчик события ПередОтправкойДанных подсистемы Обмена данными -// Описание обработчика см. ОбщийМодуль.ОбменДаннымиПереопределяемый.ПередОтправкойДанных() +// Обработчик события ПриВыгрузкеДанных подсистемы Обмена данными +// Описание обработчика см. ОбщийМодуль.ОбменДаннымиПереопределяемый.ПриВыгрузкеДанных() // -Процедура ПередОтправкойДанных(СтандартнаяОбработка, +Процедура ПриВыгрузкеДанных(СтандартнаяОбработка, Получатель, ИмяФайлаСообщения, ДанныеСообщения, @@ -76,7 +76,19 @@ Для Каждого СтрокаТаблицы Из ТаблицаВыборкиДанных Цикл Если ТипЗнч(СтрокаТаблицы.Данные) = Тип("СправочникОбъект.СообщенияСистемы") Тогда + СтрокаТаблицы.Данные.Код = 0; + + // {Обработчик события: ПриОтправкеСообщения} Начало + ТелоСообщения = СтрокаТаблицы.Данные.ТелоСообщения.Получить(); + + ПриОтправкеСообщенияБСП(СтрокаТаблицы.Данные.Наименование, ТелоСообщения); + + ПриОтправкеСообщения(СтрокаТаблицы.Данные.Наименование, ТелоСообщения); + + СтрокаТаблицы.Данные.ТелоСообщения = Новый ХранилищеЗначения(ТелоСообщения); + // {Обработчик события: ПриОтправкеСообщения} Окончание + КонецЕсли; // Записываем данные в сообщение @@ -120,10 +132,10 @@ КонецПроцедуры -// Обработчик события ПередПолучениемДанных подсистемы Обмена данными -// Описание обработчика см. ОбщийМодуль.ОбменДаннымиПереопределяемый.ПередПолучениемДанных() +// Обработчик события ПриЗагрузкеДанных подсистемы Обмена данными +// Описание обработчика см. ОбщийМодуль.ОбменДаннымиПереопределяемый.ПриЗагрузкеДанных() // -Процедура ПередПолучениемДанных(СтандартнаяОбработка, +Процедура ПриЗагрузкеДанных(СтандартнаяОбработка, Отправитель, ИмяФайлаСообщения, ДанныеСообщения, @@ -187,6 +199,16 @@ Данные.Получатель = ЭтотУзел(); Данные.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); + // {Обработчик: ПриПолученииСообщения} Начало + ТелоСообщения = Данные.ТелоСообщения.Получить(); + + ПриПолученииСообщенияБСП(Данные.Наименование, ТелоСообщения); + + ПриПолученииСообщения(Данные.Наименование, ТелоСообщения); + + Данные.ТелоСообщения = Новый ХранилищеЗначения(ТелоСообщения); + // {Обработчик: ПриПолученииСообщения} Окончание + ИначеЕсли ТипЗнч(Данные) = Тип("РегистрСведенийНаборЗаписей.ПодпискиПолучателей") Тогда Данные.Отбор["Получатель"].Значение = ЧтениеСообщения.Отправитель; @@ -451,9 +473,10 @@ СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); // добавляем запись в РС РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); @@ -539,9 +562,10 @@ СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 0); СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 0); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияПолучателя.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияПолучателя.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияПолучателя.WSПароль); + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияПолучателя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияПолучателя.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияПолучателя.WSПароль); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); // добавляем запись в РС РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); @@ -550,11 +574,9 @@ Константы.ИспользоватьОбменДанными.Установить(Истина); КонецЕсли; - // Устанавливаем признак использования регламентного задания - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); - Если Не РегламентноеЗадание.Использование Тогда - РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания(Строка(РегламентноеЗадание.УникальныйИдентификатор), Истина); - КонецЕсли; + // Устанавливаем признак использования регламентного задания. + РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы, Истина); ЗафиксироватьТранзакцию(); Исключение @@ -610,9 +632,10 @@ СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); // добавляем запись в РС РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); @@ -732,6 +755,16 @@ Данные = Ссылка.ПолучитьОбъект(); Данные.Код = 0; + // {Обработчик события: ПриОтправкеСообщения} Начало + ТелоСообщения = Данные.ТелоСообщения.Получить(); + + ПриОтправкеСообщенияБСП(Данные.Наименование, ТелоСообщения); + + ПриОтправкеСообщения(Данные.Наименование, ТелоСообщения); + + Данные.ТелоСообщения = Новый ХранилищеЗначения(ТелоСообщения); + // {Обработчик события: ПриОтправкеСообщения} Окончание + ЗаписатьXML(ЗаписьXML, Данные); КонецЦикла; @@ -772,6 +805,17 @@ Данные.Отправитель = Отправитель; Данные.Получатель = ЭтотУзел(); Данные.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); + + // {Обработчик: ПриПолученииСообщения} Начало + ТелоСообщения = Данные.ТелоСообщения.Получить(); + + ПриПолученииСообщенияБСП(Данные.Наименование, ТелоСообщения); + + ПриПолученииСообщения(Данные.Наименование, ТелоСообщения); + + Данные.ТелоСообщения = Новый ХранилищеЗначения(ТелоСообщения); + // {Обработчик: ПриПолученииСообщения} Окончание + КонецЕсли; Данные.Записать(); @@ -791,19 +835,21 @@ КонецПроцедуры // Только для внутреннего использования -Функция ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт +Функция ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", Таймаут = 60) Экспорт СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/MessageExchange"); СтруктураНастроек.Вставить("WSИмяСервиса", "MessageExchange"); + СтруктураНастроек.Вставить("WSТаймаут", Таймаут); Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); КонецФункции // Только для внутреннего использования -Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "") Экспорт +Функция ПолучитьWSПрокси_2_0_1_6(СтруктураНастроек, СтрокаСообщенияОбОшибке = "", Таймаут = 60) Экспорт СтруктураНастроек.Вставить("WSURLПространстваИменСервиса", "http://www.1c.ru/SSL/MessageExchange_2_0_1_6"); СтруктураНастроек.Вставить("WSИмяСервиса", "MessageExchange_2_0_1_6"); + СтруктураНастроек.Вставить("WSТаймаут", Таймаут); Возврат ОбменДаннымиСервер.ПолучитьWSПроксиПоПараметрамПодключения(СтруктураНастроек, СтрокаСообщенияОбОшибке); КонецФункции @@ -1050,9 +1096,10 @@ СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных", 0); СтруктураЗаписи.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных", 0); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключенияОтправителя.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключенияОтправителя.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключенияОтправителя.WSПароль); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); // добавляем запись в РС РегистрыСведений.НастройкиТранспортаОбмена.ДобавитьЗапись(СтруктураЗаписи); @@ -1070,11 +1117,9 @@ Константы.ИспользоватьОбменДанными.Установить(Истина); КонецЕсли; - // Устанавливаем признак использования регламентного задания - РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы); - Если Не РегламентноеЗадание.Использование Тогда - РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания(Строка(РегламентноеЗадание.УникальныйИдентификатор), Истина); - КонецЕсли; + // Устанавливаем признак использования регламентного задания. + РегламентныеЗаданияСервер.УстановитьИспользованиеРегламентногоЗадания( + Метаданные.РегламентныеЗадания.ОтправкаИПолучениеСообщенийСистемы, Истина); КонечнаяТочка = УзелКонечнойТочкиОбъект.Ссылка; @@ -1095,10 +1140,10 @@ Функция ОбработчикиСообщений() Результат = НоваяТаблицаОбработчиковСообщений(); - + СтандартныеПодсистемыПереопределяемый.ПолучитьОбработчикиКаналовСообщений(Результат); ОбменСообщениямиПереопределяемый.ПолучитьОбработчикиКаналовСообщений(Результат); - Возврат Результат; + КонецФункции // Только для внутреннего использования @@ -1110,3 +1155,30 @@ Возврат Обработчики; КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий отправки и получения сообщений + +Процедура ПриОтправкеСообщенияБСП(Знач КаналСообщений, ТелоСообщения) + + СтандартныеПодсистемыПереопределяемый.ПриОтправкеСообщения(КаналСообщений, ТелоСообщения); + +КонецПроцедуры + +Процедура ПриОтправкеСообщения(Знач КаналСообщений, ТелоСообщения) + + ОбменСообщениямиПереопределяемый.ПриОтправкеСообщения(КаналСообщений, ТелоСообщения); + +КонецПроцедуры + +Процедура ПриПолученииСообщенияБСП(Знач КаналСообщений, ТелоСообщения) + + СтандартныеПодсистемыПереопределяемый.ПриПолученииСообщения(КаналСообщений, ТелоСообщения); + +КонецПроцедуры + +Процедура ПриПолученииСообщения(Знач КаналСообщений, ТелоСообщения) + + ОбменСообщениямиПереопределяемый.ПриПолученииСообщения(КаналСообщений, ТелоСообщения); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/ОбменСообщениямиВнутренний.mdo b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/ОбменСообщениямиВнутренний.mdo index 6e7c24bcd..c5c1c7eca 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиВнутренний/ОбменСообщениямиВнутренний.mdo +++ b/SSL/src/CommonModules/ОбменСообщениямиВнутренний/ОбменСообщениямиВнутренний.mdo @@ -6,5 +6,6 @@ Обмен сообщениями внутренний true - true + true + true diff --git a/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl new file mode 100644 index 000000000..b260aa69f --- /dev/null +++ b/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/Module.bsl @@ -0,0 +1,20 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обмен сообщениями". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Выполняет отправку и получение сообщений системы +// +// Параметры: +// Отказ – Булево. Флаг отказа. Поднимается в случае возникновения ошибок в процессе выполнения операции. +// +Процедура ОтправитьИПолучитьСообщения(Отказ) Экспорт + + ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); + + ОбменСообщениямиВнутренний.ОтправитьИПолучитьСообщения(Отказ); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/ОбменСообщениямиВызовСервера.mdo b/SSL/src/CommonModules/ОбменСообщениямиВызовСервера/ОбменСообщениямиВызовСервера.mdo new file mode 100644 index 000000000..f9f7b0843 --- /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 21790a88d..089a10bd8 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиКлиент/Module.bsl @@ -16,7 +16,7 @@ Отказ = Ложь; - ОбменСообщениямиВнутренний.ОтправитьИПолучитьСообщения(Отказ); + ОбменСообщениямиВызовСервера.ОтправитьИПолучитьСообщения(Отказ); Если Отказ Тогда diff --git a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl index 91ee40423..21a6e78a2 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/Module.bsl @@ -14,14 +14,18 @@ // Процедура ПолучитьОбработчикиКаналовСообщений(Обработчики) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса - ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.ПолучитьОбработчикиКаналовСообщений(Обработчики); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + СообщенияВМоделиСервиса.ПолучитьОбработчикиКаналовСообщений(Обработчики, + РезервноеКопированиеОбластейДанныхПовтИсп.ПакетУправлениеРезервнымКопированиемОбластейДанных(), + ОбработчикСообщенийУправленияРезервнымКопированием); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных // СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование - ОбработчикКаналовСообщенийУдаленногоАдминистрирования.ПолучитьОбработчикиКаналовСообщений(Обработчики); + СообщенияВМоделиСервиса.ПолучитьОбработчикиКаналовСообщений(Обработчики, + РаботаВМоделиСервисаПовтИсп.ПакетУдаленноеАдминистрирование(), + ОбработчикСообщенийУдаленногоАдминистрирования); // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование КонецПроцедуры @@ -40,6 +44,35 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Обработчики событий отправки и получения сообщений + +// Обработчик события при отправке сообщения. +// Обработчик данного события вызывается перед помещением сообщения в XML-поток. +// Обработчик вызывается для каждого отправляемого сообщения. +// +// Параметры: +// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, в который отправляется сообщение. +// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело отправляемого сообщения. +// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// +Процедура ПриОтправкеСообщения(КаналСообщений, ТелоСообщения) Экспорт + +КонецПроцедуры + +// Обработчик события при получении сообщения. +// Обработчик данного события вызывается при получении сообщения из XML-потока. +// Обработчик вызывается для каждого получаемого сообщения. +// +// Параметры: +// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело полученного сообщения. +// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// +Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения) Экспорт + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/ОбменСообщениямиПереопределяемый.mdo b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/ОбменСообщениямиПереопределяемый.mdo index c5297214e..28a434adf 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/ОбменСообщениямиПереопределяемый.mdo +++ b/SSL/src/CommonModules/ОбменСообщениямиПереопределяемый/ОбменСообщениямиПереопределяемый.mdo @@ -6,4 +6,6 @@ Обмен сообщениями переопределяемый true + true + true diff --git a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl index 77201a2a8..d328f0926 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/Module.bsl @@ -11,13 +11,13 @@ // Параметры: // КонечнаяТочка - ПланОбменаСсылка. // -Функция WSПроксиКонечнойТочки(КонечнаяТочка) Экспорт +Функция WSПроксиКонечнойТочки(КонечнаяТочка, Таймаут) Экспорт СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(КонечнаяТочка); СтрокаСообщенияОбОшибке = ""; - Результат = ОбменСообщениямиВнутренний.ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке); + Результат = ОбменСообщениямиВнутренний.ПолучитьWSПрокси(СтруктураНастроек, СтрокаСообщенияОбОшибке, Таймаут); Если Результат = Неопределено Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; diff --git a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/ОбменСообщениямиПовтИсп.mdo b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/ОбменСообщениямиПовтИсп.mdo index 9647cefbd..b14aecba9 100644 --- a/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/ОбменСообщениямиПовтИсп.mdo +++ b/SSL/src/CommonModules/ОбменСообщениямиПовтИсп/ОбменСообщениямиПовтИсп.mdo @@ -6,5 +6,7 @@ Обмен сообщениями повт исп true + true + true DuringSession diff --git a/SSL/src/CommonModules/ОбменФайламиВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбменФайламиВызовСервера/Module.bsl index 00b218283..6f196c4e9 100644 --- a/SSL/src/CommonModules/ОбменФайламиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/ОбменФайламиВызовСервера/Module.bsl @@ -1,3 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// // Создать файловый начальный образ на сервере // @@ -8,8 +12,8 @@ ЕстьФайлыВТомах = Ложь; - Если ФайловыеФункции.ЕстьТомаХраненияФайлов() Тогда - ЕстьФайлыВТомах = ФайловыеФункции.ПолучитьКоличествоФайловВТомах() > 0; + Если ФайловыеФункцииСлужебный.ЕстьТомаХраненияФайлов() Тогда + ЕстьФайлыВТомах = ФайловыеФункцииСлужебныйКлиентСервер.ЕстьФайлыВТомах(); КонецЕсли; ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); @@ -19,7 +23,8 @@ ПутьКАрхивуСФайламиТомов = ПутьКАрхивуСФайламиТомовWindows; ПолноеИмяФайловойБазы = ПолноеИмяФайловойБазыWindows; - Если НЕ СтандартныеПодсистемыВызовСервераПереопределяемый.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда + ПараметрыРаботыКлиента = СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиента(); + Если НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда Если ЕстьФайлыВТомах Тогда Если Не ПустаяСтрока(ПутьКАрхивуСФайламиТомов) И (Лев(ПутьКАрхивуСФайламиТомов, 2) <> "\\" ИЛИ Найти(ПутьКАрхивуСФайламиТомов, ":") <> 0) Тогда ТекстОшибки = НСтр("ru = 'Путь к архиву с файлами томов должен быть в формате UNC (\\servername\resource)'"); @@ -29,7 +34,7 @@ КонецЕсли; КонецЕсли; - Если НЕ СтандартныеПодсистемыВызовСервераПереопределяемый.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда + Если НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда Если Не ПустаяСтрока(ПолноеИмяФайловойБазы) И (Лев(ПолноеИмяФайловойБазы, 2) <> "\\" ИЛИ Найти(ПолноеИмяФайловойБазы, ":") <> 0) Тогда ТекстОшибки = НСтр("ru = 'Путь к файловой базе должен быть в формате UNC (\\servername\resource)'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "ПолноеИмяФайловойБазыWindows"); @@ -146,8 +151,8 @@ ЕстьФайлыВТомах = Ложь; - Если ФайловыеФункции.ЕстьТомаХраненияФайлов() Тогда - ЕстьФайлыВТомах = ФайловыеФункции.ПолучитьКоличествоФайловВТомах() > 0; + Если ФайловыеФункцииСлужебный.ЕстьТомаХраненияФайлов() Тогда + ЕстьФайлыВТомах = ФайловыеФункцииСлужебныйКлиентСервер.ЕстьФайлыВТомах(); КонецЕсли; ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); @@ -264,11 +269,14 @@ СоответствиеПутейФайлов.Вставить(УникальныйИдентификатор, ПолныйПутьФайла); КонецЦикла; - ТипХраненияФайлов = ФайловыеФункции.ПолучитьТипХраненияФайлов(); + ТипХраненияФайлов = ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов(); ПрисоединяемыеФайлы = Новый Массив; НачатьТранзакцию(); Попытка - ФайловыеФункцииПереопределяемый.ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ТипХраненияФайлов, ПрисоединяемыеФайлы); + + СтандартныеПодсистемыПереопределяемый.ДобавитьФайлыВТомаПриРазмещении( + СоответствиеПутейФайлов, ТипХраненияФайлов, ПрисоединяемыеФайлы); + ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); @@ -284,9 +292,12 @@ Выборка = МенеджерПланаОбмена.Выбрать(); Пока Выборка.Следующий() Цикл + ПланОбменаОбъект = Выборка.ПолучитьОбъект(); Если ПланОбменаОбъект.Ссылка <> ЭтотУзел Тогда - ФайловыеФункцииПереопределяемый.УдалитьРегистрациюИзменений(ПланОбменаОбъект.Ссылка, ПрисоединяемыеФайлы); + + СтандартныеПодсистемыПереопределяемый.УдалитьРегистрациюИзменений( + ПланОбменаОбъект.Ссылка, ПрисоединяемыеФайлы); КонецЕсли; КонецЦикла; diff --git a/SSL/src/CommonModules/ОбменФайламиСобытия/Module.bsl b/SSL/src/CommonModules/ОбменФайламиСобытия/Module.bsl deleted file mode 100644 index 0d5fb0482..000000000 --- a/SSL/src/CommonModules/ОбменФайламиСобытия/Module.bsl +++ /dev/null @@ -1,157 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ЭКСПОРТНЫЕ ВНЕШНИЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// обработка одного элемента при обмене - отправка -// -Процедура ПриОтправкеДанныхФайла(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза = Ложь) Экспорт - - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить - ИЛИ ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда - Возврат; - КонецЕсли; - - ЭтоХранимыеФайлыВерсий = Ложь; - ФайловыеФункцииПереопределяемый.ЭтоЭлементХранимыеФайлыВерсий(ЭлементДанных, ЭтоХранимыеФайлыВерсий); - Если ЭтоХранимыеФайлыВерсий Тогда - - Если Не СозданиеНачальногоОбраза Тогда - ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; - КонецЕсли; - - КонецЕсли; - - ЭтоФайл = Ложь; - ФайловыеФункцииПереопределяемый.ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл); - Если НЕ ЭтоФайл Тогда - Возврат; - КонецЕсли; - - Если ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - - Если СозданиеНачальногоОбраза Тогда - - Если НЕ ЭлементДанных.Том.Пустая() Тогда - - // так сделано специально, для передачи пути каталога файлов из СоздатьФайловыйНачальныйОбразНаСервере - ИмяКаталогаФайлов = ХранилищеОбщихНастроекЗагрузитьВПривилегированномРежиме("ОбменФайлами", "ВременныйКаталог"); - - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ЭлементДанных.Том) + ЭлементДанных.ПутьКФайлу; - УникальныйИдентификатор = ЭлементДанных.Ссылка.УникальныйИдентификатор(); - - НовыйПутьФайла = ФайловыеФункции.ИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор); - - ФайловыеФункции.СкопироватьФайлПриСозданииНачальногоОбраза(ПолныйПуть, НовыйПутьФайла); - - КонецЕсли; - - Иначе // обычный обмен - СозданиеНачальногоОбраза = Ложь - - Если НЕ ЭлементДанных.Том.Пустая() Тогда - // если файл в томе - поместим его в ФайлХранилище, и поменяем ЭлементДанных.ТипХраненияФайла на ВИнформационнойБазе - - ЭлементДанных.ФайлХранилище = ФайловыеФункции.ПоместитьДвоичныеДанныеВХранилище(ЭлементДанных.Том, ЭлементДанных.ПутьКФайлу, ЭлементДанных.Ссылка.УникальныйИдентификатор()); - ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ЭлементДанных.ПутьКФайлу = ""; - ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - КонецЕсли; - - КонецЕсли; - - Иначе - Если НЕ СозданиеНачальногоОбраза Тогда - ФайловыеФункцииПереопределяемый.ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(ЭлементДанных); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// обработка одного элемента при обмене - прием -// -Процедура ПриПолученииДанныхФайла(ЭлементДанных, ПолучениеЭлемента) Экспорт - - Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда - Возврат; - КонецЕсли; - - ЗапрещенКЗагрузке = Ложь; - ФайловыеФункцииПереопределяемый.ЭлементЗапрещенКЗагрузке(ЭлементДанных, ПолучениеЭлемента, ЗапрещенКЗагрузке); - Если ЗапрещенКЗагрузке Тогда - Возврат; - КонецЕсли; - - ЭтоФайл = Ложь; - ФайловыеФункцииПереопределяемый.ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл); - Если НЕ ЭтоФайл Тогда - Возврат; - КонецЕсли; - - Если НЕ ЭлементДанных.ЭтоНовый() Тогда // изменен уже существующий элемент - - // файл был на томе - удалим его - т.к. при обмене придет новый - Если ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементДанных.Ссылка, "ТипХраненияФайла") = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - - Том = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементДанных.Ссылка, "Том"); - ПутьКФайлу = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементДанных.Ссылка, "ПутьКФайлу"); - - ПрежнийПутьНаТоме = ФайловыеФункции.ПолныйПутьТома(Том) + ПутьКФайлу; - ФайловыеФункции.УдалитьФайлыНаСервере(ЭлементДанных.Ссылка, ПрежнийПутьНаТоме); - КонецЕсли; - КонецЕсли; - - // при обмене сюда приходит только ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе - // если тип хранения базы-приемника такой же (в базе) - ничего не делаем - // а вот если в базе приемнике - тип хранения в томах - то разместим на диске - Если ФайловыеФункции.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - // тип отличается от типа по умолчанию для данной базы - поменяем - - // по обмену пришел элемент с хранением в базе - но в базе приемнике принято хранить в томах - // - из ФайлХранилище размещаем на томе и меняем ТипХраненияФайла на ВТомахНаДиске - - ДвоичныеДанные = ЭлементДанных.ФайлХранилище.Получить(); - - ВремяИзменения = ЭлементДанных.ДатаМодификацииУниверсальная; - РазмерФайла = ЭлементДанных.Размер; - ИмяБезРасширения = ЭлементДанных.Наименование; - Расширение = ЭлементДанных.Расширение; - Зашифрован = ЭлементДанных.Зашифрован; - - ПутьКФайлуНаТоме = ""; - СсылкаНаТом = Неопределено; - - // добавить в один из томов (где есть свободное место) - ФайловыеФункцииПереопределяемый.ДобавитьНаДискПриПолученииДанныхФайла( - ЭлементДанных, ДвоичныеДанные, - ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, - ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован); - - ЭлементДанных.ПутьКФайлу = ПутьКФайлуНаТоме; - ЭлементДанных.Том = СсылкаНаТом; - ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); - - Иначе - ФайловыеФункцииПереопределяемый.ВыполнитьДополнительнуюОбработкуПриПолученииДанных(ЭлементДанных); - КонецЕсли; - -КонецПроцедуры - -// Передает с клиента на сервер для записи и записывает в привилегированном режиме -Функция ХранилищеОбщихНастроекЗагрузитьВПривилегированномРежиме( - КлючОбъекта, - КлючНастроек = Неопределено, - ЗначениеПоУмолчанию = Неопределено, - ОписаниеНастроек = Неопределено, - ИмяПользователя = Неопределено) - - УстановитьПривилегированныйРежим(Истина); - - Результат = ХранилищеОбщихНастроек.Загрузить(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователя); - - Если (Результат = Неопределено) И (ЗначениеПоУмолчанию <> Неопределено) Тогда - Результат = ЗначениеПоУмолчанию; - КонецЕсли; - - Возврат Результат; - -КонецФункции diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl index eba53ac15..d669a8dfb 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/Module.bsl @@ -12,24 +12,69 @@ // Функция НеобходимоОбновлениеИнформационнойБазы() Экспорт - Возврат НеобходимоВыполнитьОбновление(Метаданные.Версия, ВерсияИБ(Метаданные.Имя)); + УстановитьПривилегированныйРежим(Истина); + + Возврат НеобходимоВыполнитьОбновление(Метаданные.Версия, ВерсияИБ(Метаданные.Имя)) + Или (Константы.ТребуетсяОбновлениеИнформационнойБазы.Получить() И Не ТребуетсяОбновлениеКонфигурацииУзлаРИБ()); КонецФункции -// Проверить права текущего пользователя на выполнение обновления информационной базы. +// Возвращает Истина при необходимости обновления конфигурации информационной базы подчиненного узла РИБ. +// В главном узле всегда - Ложь. // -Функция ЕстьПраваНаОбновлениеИнформационнойБазы() +Функция ТребуетсяОбновлениеКонфигурацииУзлаРИБ() Экспорт - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - Возврат ПравоДоступа("МонопольныйРежим", Метаданные) И Пользователи.ЭтоПолноправныйПользователь(, Истина); - Иначе - Возврат Истина; - КонецЕсли; + Возврат КонфигурацияИзменена() И ПланыОбмена.ГлавныйУзел() <> Неопределено; КонецФункции +// Возвращает Истина, если выполняется обновление ИБ +Функция ВыполняетсяОбновлениеИнформационнойБазы() Экспорт + + Возврат НеобходимоОбновлениеИнформационнойБазы() И ЕстьПраваНаОбновлениеИнформационнойБазы(); + +КонецФункции + +// Устанавливает необходимость принудительного обновления конфигурации информационной базы. +Функция УстановитьПризнакНеобходимостиОбновленияКонфигурацииИнформационнойБазы() Экспорт + Константы.ТребуетсяОбновлениеИнформационнойБазы.Установить(Истина); +КонецФункции + +// Снимает признак необходимости принудительного обновления конфигурации информационной базы. +Функция СнятьПризнакНеобходимостиОбновленияКонфигурацииИнформационнойБазы() Экспорт + Константы.ТребуетсяОбновлениеИнформационнойБазы.Установить(Ложь); +КонецФункции + +// Возвращает пустую таблицу обработчиков обновления и первоначального заполнения ИБ. +// +// Возвращаемое значение: +// ТаблицаЗначений – таблица с колонками: +// Версия - номер версии конфигурации, при переходе на которую должна +// быть выполнена процедура-обработчик обновления +// Процедура - полное имя процедуры-обработчика обновления. +// Должна быть обязательно экспортной. +// Опциональный - если Истина, то обработчик не должен срабатывать +// при первом запуске на "пустой" базе. +// Приоритет - Число. Для внутреннего использования. +// ОбщиеДанные - если Истина, то обработчик должен срабатывать до +// выполнения любых обработчиков, использующих разделенные +// данные. +// +Функция НоваяТаблицаОбработчиковОбновления() Экспорт + + Обработчики = Новый ТаблицаЗначений; + Обработчики.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); + Обработчики.Колонки.Добавить("Процедура", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); + Обработчики.Колонки.Добавить("Опциональный"); + Обработчики.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2))); + Обработчики.Колонки.Добавить("ОбщиеДанные", Новый ОписаниеТипов("Булево")); + Возврат Обработчики; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Возвращает Истина, если требуется обновление ИБ и у текущего пользователя // для этого недостаточно прав. // @@ -56,30 +101,27 @@ |Обратитесь к администратору за подробностями.'"); ИначеЕсли НеобходимоОбновлениеИнформационнойБазы() И НЕ ЕстьПраваНаОбновлениеИнформационнойБазы() Тогда УстановитьПривилегированныйРежим(Истина); - Если ЗначениеЗаполнено(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) Тогда + ПустойСписокПользователей = Не ЗначениеЗаполнено(ПользователиИнформационнойБазы.ТекущийПользователь().Имя); + УстановитьПривилегированныйРежим(Ложь); + Если ПустойСписокПользователей Тогда Сообщение = НСтр("ru = 'Для завершения обновления конфигурации требуются административные права. - |Необходимо добавить в список пользователей информационной базы учетную запись администратора с двумя ролями АдминистраторСистемы и ПолныеПрава, + |Необходимо добавить в список пользователей информационной базы учетную запись администратора с двумя ролями ""Администратор системы"" и ""Полные права"", |и повторить запуск программы от его имени. | |Для перехода к списку пользователей информационной базы необходимо открыть Конфигуратор и воспользоваться пунктом меню ""Администрирование - Пользователи"".'"); + ИначеЕсли ПравоДоступа("Администрирование", Метаданные) Тогда + Сообщение = НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением версии конфигурации. + |Для завершения обновления конфигурации требуются административные права (роль ""Администратор системы"").'"); Иначе Сообщение = НСтр("ru = 'Вход в программу временно невозможен в связи с обновлением версии конфигурации. |Обратитесь к администратору за подробностями.'"); КонецЕсли; - УстановитьПривилегированныйРежим(Ложь); КонецЕсли; Возврат Сообщение; КонецФункции -// Возвращает Истина, если выполняется обновление ИБ -Функция ВыполняетсяОбновлениеИнформационнойБазы() Экспорт - - Возврат НеобходимоОбновлениеИнформационнойБазы() И ЕстьПраваНаОбновлениеИнформационнойБазы(); - -КонецФункции - // Выполнить неинтерактивное обновление данных ИБ. // // Принудительно - Булево - если Истина, то обновление ИБ будет выполнено @@ -90,11 +132,12 @@ // Строка - адрес временного хранилища со списком выполненных обработчиков обновления // Функция ВыполнитьОбновлениеИнформационнойБазы(Знач Принудительно = Ложь) Экспорт - + ВерсияМетаданных = Метаданные.Версия; Если ПустаяСтрока(ВерсияМетаданных) Тогда ВерсияМетаданных = "0.0.0.0"; КонецЕсли; + ВерсияДанных = ВерсияИБ(Метаданные.Имя); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -108,11 +151,13 @@ КонецЕсли; КонецЕсли; - ВерсияДанных = ВерсияИБ(Метаданные.Имя); - Если НЕ Принудительно И НЕ НеобходимоВыполнитьОбновление(ВерсияМетаданных, ВерсияДанных) Тогда + Если НЕ Принудительно И НЕ НеобходимоОбновлениеИнформационнойБазы() Тогда Возврат Неопределено; КонецЕсли; + СтандартныеПодсистемыПереопределяемый.ПередОбновлениемИнформационнойБазы(); + ОбновлениеИнформационнойБазыПереопределяемый.ПередОбновлениемИнформационнойБазы(); + Сообщение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Изменился номер версии конфигурации: с ""%1"" на ""%2"". Будет выполнено обновление информационной базы.'"), ВерсияДанных, ВерсияМетаданных); @@ -224,9 +269,13 @@ ЗаписатьИнформацию(Сообщение); ВыводитьОписаниеОбновлений = ВерсияДанных <> "0.0.0.0"; - ОбновлениеИнформационнойБазыПереопределяемый.ПослеОбновления(ВерсияДанных, ВерсияМетаданных, + СтандартныеПодсистемыПереопределяемый.ПослеОбновленияИнформационнойБазы(ВерсияДанных, ВерсияМетаданных, ВыполненныеОбработчики, ВыводитьОписаниеОбновлений); - + ОбновлениеИнформационнойБазыПереопределяемый.ПослеОбновленияИнформационнойБазы(ВерсияДанных, ВерсияМетаданных, + ВыполненныеОбработчики, ВыводитьОписаниеОбновлений); + + СнятьПризнакНеобходимостиОбновленияКонфигурацииИнформационнойБазы(); + Адрес = ""; Если ВыводитьОписаниеОбновлений Тогда Если ОбщегоНазначенияПовтИсп.РазделениеВключено() @@ -323,33 +372,6 @@ КонецФункции -// Возвращает пустую таблицу обработчиков обновления и первоначального заполнения ИБ. -// -// Возвращаемое значение: -// ТаблицаЗначений – таблица с колонками: -// Версия - номер версии конфигурации, при переходе на которую должна -// быть выполнена процедура-обработчик обновления -// Процедура - полное имя процедуры-обработчика обновления. -// Должна быть обязательно экспортной. -// Опциональный - если Истина, то обработчик не должен срабатывать -// при первом запуске на "пустой" базе. -// Приоритет - Число. Для внутреннего использования. -// ОбщиеДанные - если Истина, то обработчик должен срабатывать до -// выполнения любых обработчиков, использующих разделенные -// данные. -// -Функция НоваяТаблицаОбработчиковОбновления() Экспорт - - Обработчики = Новый ТаблицаЗначений; - Обработчики.Колонки.Добавить("Версия", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); - Обработчики.Колонки.Добавить("Процедура", Новый ОписаниеТипов("Строка", Новый КвалификаторыСтроки(0))); - Обработчики.Колонки.Добавить("Опциональный"); - Обработчики.Колонки.Добавить("Приоритет", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(2))); - Обработчики.Колонки.Добавить("ОбщиеДанные", Новый ОписаниеТипов("Булево")); - Возврат Обработчики; - -КонецФункции - // Получить версию конфигурации или родительской конфигурации (библиотеки), // которая хранится в информационной базе. // @@ -393,22 +415,7 @@ КонецФункции -// Возвращает Истина, если запуск информационной базы -// выполняется первый раз, иначе возвращает Ложь -// -Функция ПервыйЗапуск() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда - Возврат ПервыйЗапускИнформационнойБазы(); - Иначе - Возврат ПервыйВходВОбластьДанных(); - КонецЕсли; - -КонецФункции - -// Возвращает Истина, если вход в программу (область данных) +// Возвращает Истина если вход в программу (область данных) // выполняется первый раз, иначе возвращает Ложь. // Функция ПервыйВходВОбластьДанных() Экспорт @@ -425,38 +432,37 @@ КонецФункции -// Возвращает Истина, если запуск информационной базы +// Возвращает Истина если запуск информационной базы // выполняется первый раз, иначе возвращает Ложь. // -Функция ПервыйЗапускИнформационнойБазы() +Функция ПервыйЗапускИнформационнойБазы() Экспорт УстановитьПривилегированныйРежим(Истина); Возврат НЕ Константы.ИспользоватьРазделениеПоОбластямДанных.Получить() - И НЕ Константы.НеИспользоватьРазделениеПоОбластямДанных.Получить(); + И НЕ Константы.НеИспользоватьРазделениеПоОбластямДанных.Получить() + И НЕ Константы.ЭтоАвтономноеРабочееМесто.Получить(); КонецФункции -// Возвращает Истина если у пользователя не отключен показ описания изменений -// системы после обновления и есть непоказанные изменения. +// Добавляет параметры работы клиентской логики при запуске системы для подсистемы обмена данными в модели сервиса // -Функция ПоказатьОписаниеИзмененийСистемы() Экспорт +Процедура ДобавитьПараметрыРаботыКлиентскойЛогикиПриЗапуске(Параметры) Экспорт - НеПоказывать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", - "НеПоказыватьОписаниеИзмененийСистемы"); - Если НеПоказывать = Истина Тогда - Возврат Ложь; - КонецЕсли; + Параметры.Вставить("ПервыйВходВОбластьДанных", ПервыйВходВОбластьДанных()); + Параметры.Вставить("ПоказатьОписаниеИзмененийСистемы", ПоказатьОписаниеИзмененийСистемы()); + +КонецПроцедуры + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - ВыполненныеОбработчики = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", - "ВыполненныеОбработчики"); - Если ВыполненныеОбработчики = Неопределено Тогда - Возврат Ложь; - Иначе - Возврат Истина; - КонецЕсли; - -КонецФункции +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -464,12 +470,18 @@ //////////////////////////////////////////////////////////////////////////////// // Общего назначения +// Проверить права текущего пользователя на выполнение обновления информационной базы. +// +Функция ЕстьПраваНаОбновлениеИнформационнойБазы() + + Возврат Пользователи.ЭтоПолноправныйПользователь(, Истина); + +КонецФункции + // Для внутреннего использования. // Функция НеобходимоВыполнитьОбновление(Знач ВерсияМетаданных, Знач ВерсияДанных) Экспорт - Возврат НЕ ПустаяСтрока(ВерсияМетаданных) И ВерсияДанных <> ВерсияМетаданных; - КонецФункции Процедура УстановитьВерсиюИБ(Знач ИдентификаторБиблиотеки, Знач НомерВерсии) @@ -541,10 +553,9 @@ Если СтрокаВерсии = Неопределено Тогда СтрокаВерсии = ВыполняемыеОбработчики.Строки.Добавить(); СтрокаВерсии.Версия = ВыборкаИтоги.Версия; - СтрокаВерсии.Приоритет = Выборка.Приоритет; КонецЕсли; Обработчик = СтрокаВерсии.Строки.Добавить(); - ЗаполнитьЗначенияСвойств(Обработчик, Выборка, "Версия,Процедура"); + ЗаполнитьЗначенияСвойств(Обработчик, Выборка, "Версия,Процедура,Приоритет"); КонецЦикла; КонецЦикла; @@ -566,18 +577,13 @@ Версия1 = ДеревоОбработчиков.Строки[Инд2].Версия; Версия2 = ДеревоОбработчиков.Строки[Инд2+1].Версия; - Если Версия1 = "*" И Версия2 = "*" Тогда - Результат = ДеревоОбработчиков.Строки[Инд2].Приоритет - ДеревоОбработчиков.Строки[Инд2 + 1].Приоритет; - ИначеЕсли Версия1 = "*" Тогда + Если Версия1 = "*" Тогда Результат = -1; ИначеЕсли Версия2 = "*" Тогда Результат = 1; Иначе Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(Версия1, Версия2); - Если Результат = 0 Тогда - Результат = ДеревоОбработчиков.Строки[Инд2].Приоритет - ДеревоОбработчиков.Строки[Инд2 + 1].Приоритет; - КонецЕсли; - КонецЕсли; + КонецЕсли; Если Результат > 0 Тогда ДеревоОбработчиков.Строки.Сдвинуть(Инд2, 1); @@ -586,6 +592,31 @@ КонецЦикла; КонецЦикла; + // упорядочить "*"-обработчики по приоритетам + Для Каждого Версия Из ДеревоОбработчиков.Строки Цикл + + Если Версия.Версия <> "*" Тогда + Продолжить; + КонецЕсли; + + КоличествоСтрок = Версия.Строки.Количество(); + Для Инд1 = 2 По КоличествоСтрок Цикл + Для Инд2 = 0 По КоличествоСтрок - Инд1 Цикл + + Приоритет1 = Версия.Строки[Инд2].Приоритет; + Приоритет2 = Версия.Строки[Инд2+1].Приоритет; + Приоритет1 = ?(Приоритет1 <> Неопределено, Приоритет1, 0); + Приоритет2 = ?(Приоритет2 <> Неопределено, Приоритет2, 0); + + Результат = Приоритет2 - Приоритет1; + Если Результат > 0 Тогда + Версия.Строки.Сдвинуть(Инд2, 1); + КонецЕсли; + + КонецЦикла; + КонецЦикла; + КонецЦикла; + КонецПроцедуры Процедура СохранитьИнформациюОбОбновленииДляПользователей(Знач ВыполненныеОбработчики) @@ -593,13 +624,19 @@ СтруктураКолонок = ПолучитьСтруктуруКолонок(ВыполненныеОбработчики); Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл + + // Пропустить служебных пользователей, у которых длина имени может превышать + // максимально разрешенную величину: 64. + Если СтрДлина(ПользовательИБ.Имя) > 64 Тогда + Продолжить; + КонецЕсли; + ВыполненныеРанееОбработчики = ХранилищеОбщихНастроек.Загрузить("ОбновлениеИБ", "ВыполненныеОбработчики", , ПользовательИБ.Имя); - Если ВыполненныеРанееОбработчики = Неопределено Тогда - ДеревоОбработчиков = ВыполненныеОбработчики; - Иначе - ДеревоОбработчиков = ВыполненныеРанееОбработчики; + ДеревоОбработчиков = ВыполненныеОбработчики; + + Если ВыполненныеРанееОбработчики <> Неопределено Тогда СкопироватьСтрокиВДерево(ДеревоОбработчиков.Строки, ВыполненныеРанееОбработчики.Строки, СтруктураКолонок); УпорядочитьДеревоОбработчиковОбновления(ДеревоОбработчиков); КонецЕсли; @@ -724,3 +761,23 @@ КонецПроцедуры +// Возвращает Истина, если у пользователя не отключен показ описания изменений +// системы после обновления и есть непоказанные изменения. +// +Функция ПоказатьОписаниеИзмененийСистемы() + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Ложь; + КонецЕсли; + + НеПоказывать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", + "НеПоказыватьОписаниеИзмененийСистемы"); + Если НеПоказывать = Истина Тогда + Возврат Ложь; + КонецЕсли; + + ВыполненныеОбработчики = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбновлениеИБ", + "ВыполненныеОбработчики"); + Возврат ВыполненныеОбработчики <> Неопределено; + +КонецФункции diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo index 5ec48ec41..e210a01b0 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазы/ОбновлениеИнформационнойБазы.mdo @@ -7,5 +7,6 @@ Всегда на сервере true - true + true + true diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/Module.bsl index 45e0dc3a3..592950fef 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/Module.bsl @@ -87,7 +87,7 @@ Запрос.УстановитьПараметр("ИмяПодсистемы", Метаданные.Имя); Запрос.УстановитьПараметр("Версия", ВерсияМетаданных); Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда + Если Результат.Пустой() Тогда // Предварительное чтение, возможно с проявление грязного чтения Возврат; КонецЕсли; @@ -123,12 +123,17 @@ Запрос.УстановитьПараметр("ОбластьДанных", Выборка.ОбластьДанных); НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ВерсииПодсистем"); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанных", Выборка.ОбластьДанных); + ЭлементБлокировки.УстановитьЗначение("ИмяПодсистемы", Метаданные.Имя); + Блокировка.Заблокировать(); + Результат = Запрос.Выполнить(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Планирование обновления области данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + РазблокироватьДанныеДляРедактирования(КлючЗаписи); ВызватьИсключение; КонецПопытки; Если Результат.Пустой() Тогда @@ -167,6 +172,7 @@ // Процедура ОбновлениеОбластейДанных() Экспорт + // Если выполняется в регламентонм задании, то переходим безусловно в привилегированный режим. Если ПустаяСтрока(ИмяПользователя()) Тогда УстановитьПривилегированныйРежим(Истина); КонецЕсли; @@ -178,41 +184,6 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики обновления информационной базы. -// Заменяет статусы областей данных УдалитьГотова на Используется в регистре ОбластиДанных -// -Процедура ЗаменитьСтатусОбластейГотова() Экспорт - - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - Блокировка.Добавить("РегистрСведений.ОбластиДанных"); - Блокировка.Заблокировать(); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ОбластиДанных.ОбластьДанных КАК ОбластьДанных - |ИЗ - | РегистрСведений.ОбластиДанных КАК ОбластиДанных - |ГДЕ - | ОбластиДанных.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.УдалитьГотова)"; - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбластьДанных = Выборка.ОбластьДанных; - МенеджерЗаписи.Прочитать(); - МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется; - МенеджерЗаписи.Записать(); - КонецЦикла; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - // Добавляет в список Обработчики процедуры-обработчики обновления, // необходимые данной подсистеме. // @@ -227,11 +198,6 @@ Обработчик.Версия = "*"; Обработчик.Процедура = "ОбновлениеИнформационнойБазыВМоделиСервиса.ЗапланироватьОбновлениеОбластейДанных"; Обработчик.ОбщиеДанные = Истина; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.0.1.6"; - Обработчик.Процедура = "ОбновлениеИнформационнойБазыВМоделиСервиса.ЗаменитьСтатусОбластейГотова"; - Обработчик.ОбщиеДанные = Истина; КонецЕсли; КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/ОбновлениеИнформационнойБазыВМоделиСервиса.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/ОбновлениеИнформационнойБазыВМоделиСервиса.mdo index 1e8d90add..01c6947fa 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/ОбновлениеИнформационнойБазыВМоделиСервиса.mdo +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВМоделиСервиса/ОбновлениеИнформационнойБазыВМоделиСервиса.mdo @@ -6,5 +6,6 @@ Обновление информационной базы в модели сервиса true - true + true + true diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl new file mode 100644 index 000000000..05ed0b186 --- /dev/null +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/Module.bsl @@ -0,0 +1,25 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление версии ИБ" +// Серверные процедуры и функции обновления информационной базы +// при смене версии конфигурации. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Выполнить неинтерактивное обновление данных ИБ. +// +// Принудительно - Булево - если Истина, то обновление ИБ будет выполнено +// даже если версия конфигурации не менялась. +// +// Результат: +// Неопределено - обновление не выполнялось (не требуется) +// Строка - адрес временного хранилища со списком выполненных обработчиков обновления +// +Функция ВыполнитьОбновлениеИнформационнойБазы(Знач Принудительно = Ложь) Экспорт + + Возврат ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(Принудительно); + +КонецФункции + diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/ОбновлениеИнформационнойБазыВызовСервера.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыВызовСервера/ОбновлениеИнформационнойБазыВызовСервера.mdo new file mode 100644 index 000000000..0b7620d5b --- /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 eb76c8721..2468298d2 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыКлиент/Module.bsl @@ -1,11 +1,11 @@ //////////////////////////////////////////////////////////////////////////////// // Подсистема "Обновление версии ИБ" -// Клиентские процедуры и функции интерактивного обновления информационной базы. +// Клиентские процедуры и функции для интерактивного обновления информационной базы. // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Проверить, есть ли необходимость выполнять обновление информационной базы, и // если необходимо - выполняется обновление. @@ -13,11 +13,13 @@ // Процедура ВыполнитьОбновлениеИнформационнойБазы() Экспорт - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если НЕ ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда Возврат; КонецЕсли; - Если НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НеобходимоОбновлениеИнформационнойБазы Тогда + Если НЕ ПараметрыРаботыКлиента.НеобходимоОбновлениеИнформационнойБазы Тогда + ПоказатьОписаниеИзмененийСистемы(); Возврат; КонецЕсли; @@ -25,7 +27,7 @@ ДокументОписаниеОбновлений = Неопределено; Попытка - ВыполненныеОбработчикиОбновления = ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + ВыполненныеОбработчикиОбновления = ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(); Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр( "ru = 'При обновлении информационной базы возникла ошибка: @@ -51,36 +53,32 @@ КонецПроцедуры -// Открыть форму ОписаниеИзмененийСистемы, -// если есть непоказанные описания изменения, и пользователь не отключил себе просмотр. +// Если есть непоказанные описания изменения и у пользователя не отключен +// показ - открыть форму ОписаниеИзмененийСистемы. // -Процедура ПоказатьОписаниеИзмененийСистемы() Экспорт +Процедура ПоказатьОписаниеИзмененийСистемы() - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - Возврат; + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиента.ПоказатьОписаниеИзмененийСистемы Тогда + ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы"); КонецЕсли; - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - Если НЕ ПараметрыРаботыКлиента.Свойство("ПоказатьОписаниеИзмененийСистемы") - ИЛИ НЕ ПараметрыРаботыКлиента.ПоказатьОписаниеИзмененийСистемы Тогда - - Возврат; - КонецЕсли; - - ОткрытьФорму("ОбщаяФорма.ОписаниеИзмененийСистемы"); - КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Проверить, возможно ли выполнять обновление информационной базы. // -Функция ВозможноВыполнитьОбновлениеИнформационнойБазы() Экспорт +// Параметр +// Отказ - Булево - Истина, если обновление невозможно +// +Процедура ПередНачаломРаботыСистемы(Отказ) Экспорт - Сообщение = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаЗаблокированаДляОбновления; - Результат = ПустаяСтрока(Сообщение); - Если Не Результат Тогда + Сообщение = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ИнформационнаяБазаЗаблокированаДляОбновления; + Отказ = Не ПустаяСтрока(Сообщение); + Если Отказ Тогда Предупреждение(Сообщение); КонецЕсли; - Возврат Результат; - -КонецФункции +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl index e597e9f0d..f35c7a2b3 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/Module.bsl @@ -20,11 +20,17 @@ Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); // Подключаются процедуры-обработчики обновления конфигурации - + // Возврат Обработчики; КонецФункции +// Вызывается перед обработчиками обновления данных ИБ. +// +Процедура ПередОбновлениемИнформационнойБазы() Экспорт + +КонецПроцедуры + // Вызывается после завершении обновления данных ИБ. // // Параметры: @@ -50,7 +56,7 @@ // ВыводитьОписаниеОбновлений - Булево - если Истина, то выводить форму с описанием // обновлений. // -Процедура ПослеОбновления(Знач ПредыдущаяВерсияИБ, Знач ТекущаяВерсияИБ, +Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсияИБ, Знач ТекущаяВерсияИБ, Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений) Экспорт КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/ОбновлениеИнформационнойБазыПереопределяемый.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/ОбновлениеИнформационнойБазыПереопределяемый.mdo index af773c5c3..708e8d86d 100644 --- a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/ОбновлениеИнформационнойБазыПереопределяемый.mdo +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыПереопределяемый/ОбновлениеИнформационнойБазыПереопределяемый.mdo @@ -7,4 +7,6 @@ Всегда на сервере true + true + true diff --git a/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/Module.bsl b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/Module.bsl new file mode 100644 index 000000000..caa38d8a7 --- /dev/null +++ b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/Module.bsl @@ -0,0 +1,58 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление версии ИБ". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры используемые при обмене данными + +Процедура ПриОтправкеВерсийПодсистем(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь) Экспорт + + Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить + ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ВерсииПодсистем") Тогда + + Если СозданиеНачальногоОбраза Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Для Каждого СтрокаНабора Из ЭлементДанных Цикл + + Если СтрокаНабора.ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса() Тогда + + СтрокаНабора.ОбластьДанных = 0; + + Иначе + + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + + КонецЕсли; + + КонецЦикла; + + Иначе + + // При создании начального образа с отключенным разделением + // выгрузку регистра выполняем без дополнительной обработки. + + КонецЕсли; + + Иначе + + // Выгрузку регистра выполняем только при создании начального образа + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + + + diff --git a/SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/КонтрольЖурналаРегистрацииСлужебный.mdo b/SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/ОбновлениеИнформационнойБазыСобытия.mdo similarity index 56% rename from SSL/src/CommonModules/КонтрольЖурналаРегистрацииСлужебный/КонтрольЖурналаРегистрацииСлужебный.mdo rename to SSL/src/CommonModules/ОбновлениеИнформационнойБазыСобытия/ОбновлениеИнформационнойБазыСобытия.mdo index 58a0426d4..2136688c7 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 7c94afba6..2aa7e7ee6 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/Module.bsl @@ -3,6 +3,37 @@ // //////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// при запуске конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт + + Параметры.Вставить("НастройкиОбновления", Новый ФиксированнаяСтруктура(ПолучитьНастройкиОбновления())); + +КонецПроцедуры + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Параметры.Вставить("НастройкиОбновления", Новый ФиксированнаяСтруктура(ПолучитьНастройкиОбновления())); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -22,7 +53,7 @@ УстановитьПривилегированныйРежим(Истина); - Если НЕ ЗначениеЗаполнено(Пользователи.ТекущийПользователь()) Тогда + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда ТекстИсключения = ТекстСообщения; @@ -39,6 +70,7 @@ // Получить глобальные настройки обновления на сеанс 1С:Предприятия // Функция ПолучитьНастройкиОбновления() Экспорт + Настройки = Новый Структура; Настройки.Вставить("КороткоеИмяКонфигурации", КороткоеИмяКонфигурации()); Настройки.Вставить("АдресСервераДляПроверкиНаличияОбновления", АдресСервераДляПроверкиНаличияОбновления()); @@ -46,10 +78,13 @@ Настройки.Вставить("АдресРесурсаДляПроверкиНаличияОбновления", АдресРесурсаДляПроверкиНаличияОбновления()); Настройки.Вставить("КонфигурацияИзменена", КонфигурацияИзменена()); Настройки.Вставить("ПроверитьПрошлыеОбновленияБазы", ОбновлениеКонфигурацииУспешно() <> Неопределено); - Настройки.Вставить("НастройкиОбновленияКонфигурации", ПолучитьСтруктуруНастроекПомощника()); Настройки.Вставить("ЕстьДоступДляОбновления", ПроверитьДоступДляОбновления()); Настройки.Вставить("ЕстьДоступДляПроверкиОбновления", ПроверитьДоступДляПроверкиОбновления()); + + Настройки.Вставить("НастройкиОбновленияКонфигурации", ПолучитьСтруктуруНастроекПомощника()); + Возврат Настройки; + КонецФункции // Вызывается при завершении обновления конфигурации через COM-соединение. @@ -82,6 +117,12 @@ КонецПопытки; КонецЕсли; + Если РезультатОбновления = Ложь Тогда + ОбновлениеИнформационнойБазы.СнятьПризнакНеобходимостиОбновленияКонфигурацииИнформационнойБазы(); + КонецЕсли; + + СтандартныеПодсистемыПереопределяемый.ПослеЗавершенияОбновления(); + КонецПроцедуры // Получить короткое имя (идентификатор) конфигурации. @@ -306,16 +347,18 @@ ); КонецПроцедуры - + // Проверка доступа к подсистеме ОбновлениеКонфигурации Функция ПроверитьДоступДляОбновления() - Возврат Пользователи.ЭтоПолноправныйПользователь(,Истина); + Возврат Пользователи.ЭтоПолноправныйПользователь(, Истина); КонецФункции // Возвращает признак доступности проведения обновления текущим пользователем. Функция ПроверитьДоступДляПроверкиОбновления() Экспорт + Возврат Пользователи.РолиДоступны("ПроверкаДоступныхОбновленийКонфигурации") - И ЗначениеЗаполнено(Пользователи.ТекущийПользователь()); + И ТипЗнч(Пользователи.АвторизованныйПользователь()) = Тип("СправочникСсылка.Пользователи"); + КонецФункции Процедура ОтправитьУведомлениеОбОбновлении(Знач ИмяПользователя, Знач АдресНазначения, Знач УспешноеОбновление) @@ -347,6 +390,18 @@ Возврат НСтр("ru = 'Обновление конфигурации'"); КонецФункции +Функция ИмяИсполняемогоФайлаКлиента() Экспорт + + Для Каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл + Если Сеанс.НомерСеанса = НомерСеансаИнформационнойБазы() Тогда + Возврат НРег(Сеанс.ИмяПриложения) + ".exe"; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo b/SSL/src/CommonModules/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo index 6effa0ca3..abe8cd4f2 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo +++ b/SSL/src/CommonModules/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl new file mode 100644 index 000000000..79c52d86f --- /dev/null +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/Module.bsl @@ -0,0 +1,37 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Обновление конфигурации" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Получает настройки помощника обновления из хранилища общих настроек. +// +// Подробнее - см. описание ОбновлениеКонфигурации.ПолучитьСтруктуруНастроекПомощника(). +// +Функция ПолучитьСтруктуруНастроекПомощника() Экспорт + + Возврат ОбновлениеКонфигурации.ПолучитьСтруктуруНастроекПомощника(); + +КонецФункции + +// Записывает настройки помощника обновления в хранилище общих настроек. +// +// Подробнее - см. описание ОбновлениеКонфигурации.ЗаписатьСтруктуруНастроекПомощника(). +// +Процедура ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации, СообщенияДляЖурналаРегистрации = Неопределено) Экспорт + + ОбновлениеКонфигурации.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации, СообщенияДляЖурналаРегистрации); + +КонецПроцедуры + +// Формирует имя исполняемого файла клиента. +// +// Подробнее - см. описание ОбновлениеКонфигурации.ИмяИсполняемогоФайлаКлиента(). +// +Функция ИмяИсполняемогоФайлаКлиента() Экспорт + + Возврат ОбновлениеКонфигурации.ИмяИсполняемогоФайлаКлиента(); + +КонецФункции diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/ОбновлениеКонфигурацииВызовСервера.mdo b/SSL/src/CommonModules/ОбновлениеКонфигурацииВызовСервера/ОбновлениеКонфигурацииВызовСервера.mdo new file mode 100644 index 000000000..0f7463ff6 --- /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 26df85dea..d1b7df257 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииКлиент/Module.bsl @@ -10,19 +10,26 @@ // Процедура ПроверитьОбновлениеКонфигурации() Экспорт - #Если НЕ ВебКлиент Тогда - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - +#Если НЕ ВебКлиент Тогда + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботыКлиента.РазделениеВключено Или Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда Возврат; КонецЕсли; - + ДоступноеОбновлениеКонфигурации = Неопределено; - НастройкиОбновления = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().НастройкиОбновления; + НастройкиОбновления = ПараметрыРаботыКлиента.НастройкиОбновления; НаличиеОбновления = НастройкиОбновления.ПроверитьПрошлыеОбновленияБазы; + + Если НаличиеОбновления Тогда + // Надо завершить предыдущее обновление. + ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.Форма"); + Возврат; + КонецЕсли; + Если НЕ НаличиеОбновления И НастройкиОбновления.ЕстьДоступДляОбновления Тогда НаличиеОбновления = НастройкиОбновления.КонфигурацияИзменена; КонецЕсли; + НаименованиеСтраницыДоступногоОбновления = "ДоступноеОбновление"; НаименованиеСтраницыФайлОбновления = "ФайлОбновления"; ЕстьДоступноеОбновлениеВИнтернете = Ложь; @@ -60,7 +67,7 @@ Настройки = ОбновлениеКонфигурацииКлиентСервер.ПолучитьОбновленныеНастройкиОбновленияКонфигурации(НастройкиОбновленияКонфигурации); Настройки.ИсточникОбновления = 2; // локальный или сетевой каталог Настройки.НуженФайлОбновления = Ложь; - ОбновлениеКонфигурации.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации); + ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации); Параметры = ПолучитьДоступноеОбновлениеКонфигурации(); Параметры.ИсточникОбновления = НастройкиОбновленияКонфигурации.ИсточникОбновления; @@ -76,7 +83,7 @@ Если ЕстьДоступноеОбновлениеВИнтернете И НастройкиОбновления.ЕстьДоступДляПроверкиОбновления Тогда Настройки = ОбновлениеКонфигурацииКлиентСервер.ПолучитьОбновленныеНастройкиОбновленияКонфигурации(НастройкиОбновленияКонфигурации); Настройки.ИсточникОбновления = 0; // интернет - ОбновлениеКонфигурации.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации); + ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации); Параметры = ПолучитьДоступноеОбновлениеКонфигурации(); Параметры.ИсточникОбновления = НастройкиОбновленияКонфигурации.ИсточникОбновления; @@ -89,11 +96,7 @@ Возврат; КонецЕсли; - Если НаличиеОбновления Тогда - // Надо завершить предыдущее обновление. - ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.Форма"); - КонецЕсли; - #КонецЕсли +#КонецЕсли КонецПроцедуры @@ -115,7 +118,8 @@ СтруктураПараметров.Вставить("ИмяФайлаПорядкаОбновления" , "update.htm"); // Имена служебных файлов - СтруктураПараметров.Вставить("ИмяФайлаПрограммы" , "1cv8.exe"); + СтруктураПараметров.Вставить("ИмяИсполняемогоФайлаКонфигуратора", "1cv8.exe"); + СтруктураПараметров.Вставить("ИмяИсполняемогоФайлаКлиента", ОбновлениеКонфигурацииВызовСервера.ИмяИсполняемогоФайлаКлиента()); // Реклама СтруктураПараметров.Вставить("ФайлАрхиваРекламы" , "INDEX.ZIP"); @@ -330,7 +334,7 @@ НастройкиОбновленияКонфигурации.ИсточникОбновления = 0; НастройкиОбновленияКонфигурации.РасписаниеПроверкиНаличияОбновления = РасписаниеПроверкиНаличияОбновления; - ОбновлениеКонфигурации.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации, СообщенияДляЖурналаРегистрации); + ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации, СообщенияДляЖурналаРегистрации); Параметры.ИсточникОбновления = НастройкиОбновленияКонфигурации.ИсточникОбновления; Параметры.НуженФайлОбновления = НастройкиОбновленияКонфигурации.НуженФайлОбновления; @@ -343,7 +347,7 @@ ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(),, НСтр("ru = 'Доступных обновлений не обнаружено.'")); КонецЕсли; - ОбновлениеКонфигурации.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации, СообщенияДляЖурналаРегистрации); + ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации, СообщенияДляЖурналаРегистрации); КонецПроцедуры @@ -647,4 +651,28 @@ Возврат НСтр("ru = 'Обновление конфигурации'"); КонецФункции - +// Вызывается при завершении работы системы, чтобы запросить список предупреждений, +// выводимых пользователю пользователю. +// +// Параметры: +// см. СтандартныеПодсистемыКлиентПереопределяемый.ПолучитьСписокПредупреждений. +// +// Примечание: +// Процедура очищает список ранее добавленных предупреждений. +Процедура ПриЗавершенииРаботыСистемы(Предупреждения) Экспорт + + Если ПредлагатьОбновлениеИнформационнойБазыПриЗавершенииСеанса = Истина Тогда + Предупреждения.Очистить(); + ТекстФлажка = НСтр("ru = 'Установить обновление конфигурации'"); + ДействиеПриУстановленномФлажке = Новый Структура; + ДействиеПриУстановленномФлажке.Вставить("Форма", "Обработка.ОбновлениеКонфигурации.Форма.Форма"); + ДействиеПриУстановленномФлажке.Вставить("ПараметрыФормы", Новый Структура("ЗавершениеРаботыСистемы, ВыполнитьОбновление", Истина, Истина)); + + ПараметрыПредупреждения = Новый Структура; + ПараметрыПредупреждения.Вставить("ТекстФлажка", ТекстФлажка); + ПараметрыПредупреждения.Вставить("ДействиеПриУстановленномФлажке", ДействиеПриУстановленномФлажке); + + Предупреждения.Добавить(ПараметрыПредупреждения); + КонецЕсли; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/ОбновлениеКонфигурацииПереопределяемый.mdo b/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/ОбновлениеКонфигурацииПереопределяемый.mdo index 07c8eddcb..1145196f1 100644 --- a/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/ОбновлениеКонфигурацииПереопределяемый.mdo +++ b/SSL/src/CommonModules/ОбновлениеКонфигурацииПереопределяемый/ОбновлениеКонфигурацииПереопределяемый.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийИнформационногоЦентра/Module.bsl b/SSL/src/CommonModules/ОбработчикКаналовСообщенийИнформационногоЦентра/Module.bsl new file mode 100644 index 000000000..ac97cf316 --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийИнформационногоЦентра/Module.bsl @@ -0,0 +1,304 @@ +//////////////////////////////////////////////////////////////////////////////// +// Обработка сообщений информационного центра +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Получает список обработчиков сообщений, которые обрабатывает данная подсистема. +// +// Параметры: +// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений +// +Процедура ПолучитьОбработчикиКаналовСообщений(Знач Обработчики) Экспорт + + ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Недоступность\Добавление", ОбработчикКаналовСообщенийИнформационногоЦентра, Обработчики); + ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Недоступность\Удаление", ОбработчикКаналовСообщенийИнформационногоЦентра, Обработчики); + ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Новость\Добавление", ОбработчикКаналовСообщенийИнформационногоЦентра, Обработчики); + ДобавитьОбработчикКаналаСообщений("ИнформационныйЦентр\Новость\Удаление", ОбработчикКаналовСообщенийИнформационногоЦентра, Обработчики); + +КонецПроцедуры + +// Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений +// +// Параметры: +// <КаналСообщений> (обязательный). Тип:Строка. Идентификатор канала сообщений, из которого получено сообщение. +// <ТелоСообщения> (обязательный). Тип: Произвольный. Тело сообщения, полученное из канала, которое подлежит обработке. +// <Отправитель> (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Конечная точка, которая является отправителем сообщения. +// +Процедура ОбработатьСообщение(Знач КаналСообщений, Знач ТелоСообщения, Знач Отправитель) Экспорт + + Если КаналСообщений = "ИнформационныйЦентр\Недоступность\Добавление" Тогда + ОбработатьНедоступность(ТелоСообщения); + ИначеЕсли КаналСообщений = "ИнформационныйЦентр\Недоступность\Удаление" Тогда + Если ТелоСообщения.Свойство("Идентификатор") Тогда + УдалитьДанныеИнфорамционногоЦентра(ТелоСообщения.Идентификатор); + КонецЕсли; + ИначеЕсли КаналСообщений = "ИнформационныйЦентр\Новость\Добавление" Тогда + ОбработатьНовость(ТелоСообщения); + ИначеЕсли КаналСообщений = "ИнформационныйЦентр\Новость\Удаление" Тогда + Если ТелоСообщения.Свойство("Идентификатор") Тогда + УдалитьДанныеИнфорамционногоЦентра(ТелоСообщения.Идентификатор); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Добавляет обработчик канала. +// +Процедура ДобавитьОбработчикКаналаСообщений(Канал, ОбработчикКанала, Обработчики) + + Обработчик = Обработчики.Добавить(); + Обработчик.Канал = Канал; + Обработчик.Обработчик = ОбработчикКанала; + +КонецПроцедуры + +// Обрабатывает недоступность. +// +// Параметры: +// ТелоСообщения - Структура - тело сообщения. +// +Процедура ОбработатьНедоступность(ТелоСообщения) + + Объект = ПолучитьДанныеПоИдентификатору(ТелоСообщения.Идентификатор); + Если Объект = Неопределено Тогда + СоздатьНедоступность(ТелоСообщения); + Иначе + ОбновитьНедоступность(Объект, ТелоСообщения); + КонецЕсли; + +КонецПроцедуры + +// Создает недоступность в справочнике общих данных информационного центра. +// +// Параметры: +// ТелоСообщения - Структура - тело сообщения. +// +Процедура СоздатьНедоступность(ТелоСообщения) + + Недоступность = Справочники.ОбщиеДанныеИнформационногоЦентра.СоздатьЭлемент(); + Недоступность.УстановитьНовыйКод(); + + Недоступность.Идентификатор = ТелоСообщения.Идентификатор; + Недоступность.Наименование = СформироватьЗаголовокНедоступности(ТелоСообщения.Наименование, ТелоСообщения.ДатаНачалаАктуальности, ТелоСообщения.ДатаОкончанияАктуальности); + Недоступность.Дата = ТелоСообщения.Дата; + Недоступность.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности - (60 * 60 * 24); + Недоступность.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; + Недоступность.Критичность = ТелоСообщения.Критичность; + Если ТелоСообщения.Свойство("ТекстHTML") Тогда + Недоступность.ТекстHTML = ТелоСообщения.ТекстHTML; + КонецЕсли; + Если ТелоСообщения.Свойство("Вложения") Тогда + Недоступность.Вложения = Новый ХранилищеЗначения(ТелоСообщения.Вложения); + КонецЕсли; + Если ТелоСообщения.Свойство("ВнешняяСсылка") Тогда + Недоступность.ВнешняяСсылка = ТелоСообщения.ВнешняяСсылка; + КонецЕсли; + Если ТелоСообщения.Свойство("ТипИнформации") Тогда + Недоступность.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации(ТелоСообщения.ТипИнформации); + Иначе + Недоступность.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации("Недоступность"); + КонецЕсли; + + Недоступность.Записать(); + +КонецПроцедуры + +// Обновляет недоступность. +// +// Параметры: +// Недоступность - СправочникСсылка.ОбщиеДанныеИнформационногоЦентра - ссылка на недоступность. +// ТелоСообщения - Структура - тело сообщения. +// +Процедура ОбновитьНедоступность(Недоступность, ТелоСообщения) + + Недоступность.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации("Недоступность"); + Недоступность.Идентификатор = ТелоСообщения.Идентификатор; + Недоступность.Наименование = СформироватьЗаголовокНедоступности(ТелоСообщения.Наименование, ТелоСообщения.ДатаНачалаАктуальности, ТелоСообщения.ДатаОкончанияАктуальности); + Недоступность.Дата = ТелоСообщения.Дата; + Недоступность.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности - (60 * 60 * 24); + Недоступность.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; + Недоступность.Критичность = ТелоСообщения.Критичность; + Недоступность.ПометкаУдаления = Ложь; + Если ТелоСообщения.Свойство("ТекстHTML") Тогда + Недоступность.ТекстHTML = ТелоСообщения.ТекстHTML; + КонецЕсли; + Если ТелоСообщения.Свойство("Вложения") Тогда + Недоступность.Вложения = Новый ХранилищеЗначения(ТелоСообщения.Вложения); + КонецЕсли; + Если ТелоСообщения.Свойство("ВнешняяСсылка") Тогда + Недоступность.ВнешняяСсылка = ТелоСообщения.ВнешняяСсылка; + КонецЕсли; + Недоступность.Записать(); + +КонецПроцедуры + +// Обрабатывает новость. +// +// Параметры: +// ТелоСообщения - Структура - тело сообщения. +// +Процедура ОбработатьНовость(ТелоСообщения) + + Объект = ПолучитьДанныеПоИдентификатору(ТелоСообщения.Идентификатор); + Если Объект = Неопределено Тогда + СоздатьНовость(ТелоСообщения); + Иначе + ОбновитьНовость(Объект, ТелоСообщения); + КонецЕсли; + +КонецПроцедуры + +// Создает новость в справочнике общих данных информационного центра. +// +// Параметры: +// ТелоСообщения - Структура - тело сообщения. +// +Процедура СоздатьНовость(ТелоСообщения) + + Новость = Справочники.ОбщиеДанныеИнформационногоЦентра.СоздатьЭлемент(); + Новость.УстановитьНовыйКод(); + + Новость.Идентификатор = ТелоСообщения.Идентификатор; + Новость.Наименование = СокрЛП(ТелоСообщения.Наименование); + Новость.Дата = ТелоСообщения.Дата; + Новость.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности; + Новость.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; + Новость.Критичность = ТелоСообщения.Критичность; + Если ТелоСообщения.Свойство("ТекстHTML") Тогда + Новость.ТекстHTML = ТелоСообщения.ТекстHTML; + КонецЕсли; + Если ТелоСообщения.Свойство("Вложения") Тогда + Новость.Вложения = Новый ХранилищеЗначения(ТелоСообщения.Вложения); + КонецЕсли; + Если ТелоСообщения.Свойство("ВнешняяСсылка") Тогда + Новость.ВнешняяСсылка = ТелоСообщения.ВнешняяСсылка; + КонецЕсли; + Если ТелоСообщения.Свойство("ТипИнформации") Тогда + Новость.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации(ТелоСообщения.ТипИнформации); + Иначе + Новость.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации("Новость"); + КонецЕсли; + + Новость.Записать(); + +КонецПроцедуры + +// Обновляет новость. +// +// Параметры: +// Новость - СправочникСсылка.ОбщиеДанныеИнформационногоЦентра - ссылка на новость. +// ТелоСообщения - Структура - тело сообщения. +// +Процедура ОбновитьНовость(Новость, ТелоСообщения) + + Новость.ТипИнформации = ИнформационныйЦентрСервер.ОпределитьСсылкуТипаИнформации("Новость"); + Новость.Идентификатор = ТелоСообщения.Идентификатор; + Новость.Наименование = СокрЛП(ТелоСообщения.Наименование); + Новость.Дата = ТелоСообщения.Дата; + Новость.ДатаНачалаАктуальности = ТелоСообщения.ДатаНачалаАктуальности; + Новость.ДатаОкончанияАктуальности = ТелоСообщения.ДатаОкончанияАктуальности; + Новость.Критичность = ТелоСообщения.Критичность; + Новость.ПометкаУдаления = Ложь; + Если ТелоСообщения.Свойство("ТекстHTML") Тогда + Новость.ТекстHTML = ТелоСообщения.ТекстHTML; + КонецЕсли; + Если ТелоСообщения.Свойство("Вложения") Тогда + Новость.Вложения = Новый ХранилищеЗначения(ТелоСообщения.Вложения); + КонецЕсли; + Если ТелоСообщения.Свойство("ВнешняяСсылка") Тогда + Новость.ВнешняяСсылка = ТелоСообщения.ВнешняяСсылка; + КонецЕсли; + Новость.Записать(); + +КонецПроцедуры + +// Удаляет данное информационного центра по идентификатору. +// +// Параметры: +// ТелоСообщения - УникальныйИдентификатор - уникальный идентификатор новости. +// +Процедура УдалитьДанныеИнфорамционногоЦентра(Идентификатор) + + УстановитьПривилегированныйРежим(Истина); + Объект = ПолучитьДанныеПоИдентификатору(Идентификатор); + Если Объект = Неопределено Тогда + Возврат; + КонецЕсли; + + Объект.УстановитьПометкуУдаления(Истина); + +КонецПроцедуры + +// Возвращает объект Справочника ОбщиеДанныеИнформационногоЦентра по идентификатору. +// +// Параметры: +// Идентификатор - УникальныйИдентификатор - уникальный идентификатор данного. +// +// Возвращаемое значение: +// СправочникОбъект.ОбщиеДанныеИнформационногоЦентра, Неопределено. +// +Функция ПолучитьДанныеПоИдентификатору(Идентификатор) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Запрос.Текст = "ВЫБРАТЬ + | ОбщиеДанныеИнформационногоЦентра.Ссылка КАК Ссылка + |ИЗ + | Справочник.ОбщиеДанныеИнформационногоЦентра КАК ОбщиеДанныеИнформационногоЦентра + |ГДЕ + | ОбщиеДанныеИнформационногоЦентра.Идентификатор = &Идентификатор"; + РезультатЗапроса = Запрос.Выполнить(); + Если РезультатЗапроса.Пустой() Тогда + Возврат Неопределено; + КонецЕсли; + + Выборка = РезультатЗапроса.Выбрать(); + Пока Выборка.Следующий() Цикл + Возврат Выборка.Ссылка.ПолучитьОбъект(); + КонецЦикла; + +КонецФункции + +// Возвращает заголовок недоступности. +// +// Параметры: +// Заголовок - Строка - заголовок сообщения. +// ДатаНачала - Дата - дата начала недоступности. +// ДатаОкончания - Дата - дата окончания недоступности. +// +// Возвращаемое значение: +// Строка - заголовок недоступности. +// +Функция СформироватьЗаголовокНедоступности(Заголовок, ДатаНачала, ДатаОкончания) + + ДатаНачалаНедоступности = Формат(ДатаНачала, "ДФ='dd.MM.yyyy ЧЧ:мм'"); + ДлительностьОбновления = РазностьДатВМинутах(ДатаНачала, ДатаОкончания); + Шаблон = НСтр("ru = '%1 %2 (%3 мин.)'"); + Шаблон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, Строка(ДатаНачалаНедоступности), СокрЛП(Заголовок), ДлительностьОбновления); + Возврат Шаблон; + +КонецФункции + +// Возвращает разность дат в минутах. +// +// Параметры: +// ДатаНачала - Дата - дата начала. +// ДатаОкончания - Дата - дата окончания. +// +// Возвращаемое значение: +// Число - количество минут. +// +Функция РазностьДатВМинутах(ДатаНачала, ДатаОкончания) + + КоличествоВСекундах = ДатаОкончания - ДатаНачала; + + Возврат Окр(КоличествоВСекундах / 60); + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийИнформационногоЦентра/ОбработчикКаналовСообщенийИнформационногоЦентра.mdo b/SSL/src/CommonModules/ОбработчикКаналовСообщенийИнформационногоЦентра/ОбработчикКаналовСообщенийИнформационногоЦентра.mdo new file mode 100644 index 000000000..6997f5088 --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийИнформационногоЦентра/ОбработчикКаналовСообщенийИнформационногоЦентра.mdo @@ -0,0 +1,11 @@ + + + ОбработчикКаналовСообщенийИнформационногоЦентра + + ru + Обработчик каналов сообщений информационного центра + + true + true + true + diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/Module.bsl b/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/Module.bsl index 0215ead7e..084235c79 100644 --- a/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/Module.bsl +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/Module.bsl @@ -93,6 +93,7 @@ Настройки.Вставить("FILEСжиматьФайлИсходящегоСообщения", Ложь); Настройки.Вставить("ПрефиксИнформационнойБазыИсточникаУстановлен", ЗначениеЗаполнено(ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"))); Настройки.Вставить("ЭтоНастройкаРаспределеннойИнформационнойБазы", Ложь); + Настройки.Вставить("WSЗапомнитьПароль", Истина); ПомощникСозданияОбменаДанными = Обработки.ПомощникСозданияОбменаДанными.Создать(); diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.mdo b/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.mdo index 625325cd5..ab96eddb2 100644 --- a/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.mdo +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса/ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.mdo @@ -6,4 +6,6 @@ Обработчик каналов сообщений обмена данными в режиме сервиса true + true + true diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийПоставляемыхДанных/Module.bsl b/SSL/src/CommonModules/ОбработчикКаналовСообщенийПоставляемыхДанных/Module.bsl new file mode 100644 index 000000000..fde2025b2 --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийПоставляемыхДанных/Module.bsl @@ -0,0 +1,322 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подписка на уведомления о поступлении новых поставляемых данных +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + + +// Получает список обработчиков сообщений, которые обрабатывает данная подсистема. +// +// Параметры: +// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений +// +Процедура ПолучитьОбработчикиКаналовСообщений(Знач Обработчики) Экспорт + + ДобавитьОбработчикКаналаСообщений("ПоставляемыеДанные\Обновление", ОбработчикКаналовСообщенийПоставляемыхДанных, Обработчики); + +КонецПроцедуры + +// Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений +// +// Параметры: +// <КаналСообщений> (обязательный). Тип:Строка. Идентификатор канала сообщений, из которого получено сообщение. +// <ТелоСообщения> (обязательный). Тип: Произвольный. Тело сообщения, полученное из канала, которое подлежит обработке. +// <Отправитель> (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Конечная точка, которая является отправителем сообщения. +// +Процедура ОбработатьСообщение(Знач КаналСообщений, Знач ТелоСообщения, Знач Отправитель) Экспорт + + Попытка + Дескриптор = ДесериализовтьXDTO(ТелоСообщения); + + Если КаналСообщений = "ПоставляемыеДанные\Обновление" Тогда + + ОбработатьНовыйДескриптор(Дескриптор); + + КонецЕсли; + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки сообщения'"), + УровеньЖурналаРегистрации.Ошибка, , + , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + +КонецПроцедуры + +// Обрабатывает новые данные. Вызывается из ОбработатьСообщение и из ПоставляемыеДанные.ЗагрузитьИОбработатьДанные +// +// Параметры +// Дескриптор - ОбъектXDTO Descriptor +Процедура ОбработатьНовыйДескриптор(Знач Дескриптор) Экспорт + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Доступны новые данные'"), + УровеньЖурналаРегистрации.Информация, , + , ПолучитьОписаниеДанных(Дескриптор)); + + Загружать = Ложь; + НаборЗаписей = РегистрыСведений.ПоставляемыеДанныеТребующиеОбработки.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИдентификаторФайла.Установить(Дескриптор.FileGUID); + + Для каждого Обработчик Из ПолучитьОбработчики(Дескриптор.DataType) Цикл + + ОбработчикЗагружать = Ложь; + + Обработчик.Обработчик.ДоступныНовыеДанные(Дескриптор, ОбработчикЗагружать); + + Если ОбработчикЗагружать Тогда + НеобработанныеДанные = НаборЗаписей.Добавить(); + НеобработанныеДанные.ИдентификаторФайла = Дескриптор.FileGUID; + НеобработанныеДанные.КодОбработчика = Обработчик.КодОбработчика; + Загружать = Истина; + КонецЕсли; + + КонецЦикла; + + Если Загружать Тогда + УстановитьПривилегированныйРежим(Истина); + НаборЗаписей.Записать(); + УстановитьПривилегированныйРежим(Ложь); + + ЗапланироватьЗагрузкуДанных(Дескриптор); + КонецЕсли; + +КонецПроцедуры + +// Запланировать загрузку данных, соответствующих дескриптору +// +// Параметры +// Дескриптор - ОбъектXDTO Descriptor. +// +Процедура ЗапланироватьЗагрузкуДанных(Знач Дескриптор) Экспорт + Перем ДескрипторXML, ПараметрыМетода; + + Если Дескриптор.RecommendedUpdateDate = Неопределено Тогда + Дескриптор.RecommendedUpdateDate = ТекущаяУниверсальнаяДата(); + КонецЕсли; + + ДескрипторXML = СериализовтьXDTO(Дескриптор); + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(ДескрипторXML); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода" , "ОбработчикКаналовСообщенийПоставляемыхДанных.ЗагрузитьДанные"); + ПараметрыЗадания.Вставить("Параметры" , ПараметрыМетода); + ПараметрыЗадания.Вставить("Использование", Истина); + ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", МестноеВремя(Дескриптор.RecommendedUpdateDate)); + + ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания, -1); + +КонецПроцедуры + +Процедура ЗагрузитьДанные(Знач ДескрипторXML) Экспорт + Перем Дескриптор; + + Попытка + Дескриптор = ДесериализовтьXDTO(ДескрипторXML); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка работы с XML'"), + УровеньЖурналаРегистрации.Ошибка, , + , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + + ДескрипторXML); + Возврат; + КонецПопытки; + + ИмяФайлаВыгрузки = ПолучитьФайлИзХранилища(Дескриптор); + + Если ИмяФайлаВыгрузки = Неопределено Тогда + Возврат; + КонецЕсли; + + НаборНеобработанныхДанных = РегистрыСведений.ПоставляемыеДанныеТребующиеОбработки.СоздатьНаборЗаписей(); + НаборНеобработанныхДанных.Отбор.ИдентификаторФайла.Установить(Дескриптор.FileGUID); + НаборНеобработанныхДанных.Прочитать(); + БылиОшибки = Ложь; + + Для каждого Обработчик Из ПолучитьОбработчики(Дескриптор.DataType) Цикл + ЗаписьНайдена = Ложь; + Для каждого ЗаписьНеобработанныхДанных Из НаборНеобработанныхДанных Цикл + Если ЗаписьНеобработанныхДанных.КодОбработчика = Обработчик.КодОбработчика Тогда + ЗаписьНайдена = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ЗаписьНайдена Тогда + Продолжить; + КонецЕсли; + + Попытка + Обработчик.Обработчик.ОбработатьНовыеДанные(Дескриптор, ИмяФайлаВыгрузки); + НаборНеобработанныхДанных.Удалить(ЗаписьНеобработанныхДанных); + НаборНеобработанныхДанных.Записать(); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки'"), + УровеньЖурналаРегистрации.Ошибка, , + , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + + Символы.ПС + ПолучитьОписаниеДанных(Дескриптор) + + Символы.ПС + НСтр("ru = 'Код обработчика: '") + Обработчик.КодОбработчика); + + ЗаписьНеобработанныхДанных.КоличествоПопыток = ЗаписьНеобработанныхДанных.КоличествоПопыток + 1; + Если ЗаписьНеобработанныхДанных.КоличествоПопыток > 3 Тогда + УведомитьОбОтменеОбработки(Обработчик, Дескриптор); + НаборНеобработанныхДанных.Удалить(ЗаписьНеобработанныхДанных); + Иначе + БылиОшибки = Истина; + КонецЕсли; + НаборНеобработанныхДанных.Записать(); + + КонецПопытки; + КонецЦикла; + + Попытка + УдалитьФайлы(ИмяФайлаВыгрузки); + Исключение + КонецПопытки; + + Если БылиОшибки Тогда + //Откладываем загрузку на 5 минут + Дескриптор.RecommendedUpdateDate = ТекущаяУниверсальнаяДата() + 5 * 60; + ЗапланироватьЗагрузкуДанных(Дескриптор); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка обработки'"), + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Обработка данных будет запущена повторно из-за ошибки обработчика.'") + + Символы.ПС + ПолучитьОписаниеДанных(Дескриптор) + ); + Иначе + НаборНеобработанныхДанных.Очистить(); + НаборНеобработанныхДанных.Записать(); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Новые данные обработаны'"), + УровеньЖурналаРегистрации.Информация, , + , ПолучитьОписаниеДанных(Дескриптор)); + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьСведенияОНеобработанныхДанных(Знач Дескриптор) + + НаборНеобработанныхДанных = РегистрыСведений.ПоставляемыеДанныеТребующиеОбработки.СоздатьНаборЗаписей(); + НаборНеобработанныхДанных.Отбор.ИдентификаторФайла.Установить(Дескриптор.FileGUID); + НаборНеобработанныхДанных.Прочитать(); + + Для каждого Обработчик Из ПолучитьОбработчики(Дескриптор.DataType) Цикл + ЗаписьНайдена = Ложь; + + Для каждого ЗаписьНеобработанныхДанных Из НаборНеобработанныхДанных Цикл + Если ЗаписьНеобработанныхДанных.КодОбработчика = Обработчик.КодОбработчика Тогда + ЗаписьНайдена = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если Не ЗаписьНайдена Тогда + Продолжить; + КонецЕсли; + + УведомитьОбОтменеОбработки(Обработчик, Дескриптор); + + КонецЦикла; + НаборНеобработанныхДанных.Очистить(); + НаборНеобработанныхДанных.Записать(); + +КонецПроцедуры + +Процедура УведомитьОбОтменеОбработки(Знач Обработчик, Знач Дескриптор) + + Попытка + Обработчик.Обработчик.ОбработкаДанныхОтменена(Дескриптор); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка отмены обработки'"), + УровеньЖурналаРегистрации.Ошибка, , + , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + + Символы.ПС + ПолучитьОписаниеДанных(Дескриптор) + + Символы.ПС + НСтр("ru = 'Код обработчика: '") + Обработчик.КодОбработчика); + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьФайлИзХранилища(Знач Дескриптор) + + Попытка + ИмяФайлаВыгрузки = РаботаВМоделиСервиса.ПолучитьФайлИзХранилищаМенеджераСервиса(Дескриптор.FileGUID); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Поставляемые данные.Ошибка хранилища'"), + УровеньЖурналаРегистрации.Ошибка, , + , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + + Символы.ПС + ПолучитьОписаниеДанных(Дескриптор)); + + //Откладываем загрузку на час + Дескриптор.RecommendedUpdateDate = Дескриптор.RecommendedUpdateDate + 60 * 60; + ЗапланироватьЗагрузкуДанных(Дескриптор); + Возврат Неопределено; + КонецПопытки; + + // Если файл был заменен или удален между перезапусками функции - + // удалим старый план обновления + Если ИмяФайлаВыгрузки = Неопределено Тогда + УдалитьСведенияОНеобработанныхДанных(Дескриптор); + КонецЕсли; + + Возврат ИмяФайлаВыгрузки; + +КонецФункции + +Функция ПолучитьОбработчики(Знач ВидДанных) + + Обработчики = Новый ТаблицаЗначений; + Обработчики.Колонки.Добавить("ВидДанных"); + Обработчики.Колонки.Добавить("Обработчик"); + Обработчики.Колонки.Добавить("КодОбработчика"); + + СтандартныеПодсистемыПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных(Обработчики); + ПоставляемыеДанныеПереопределяемый.ПолучитьОбработчикиПоставляемыхДанных(Обработчики); + + Возврат Обработчики.Скопировать(Новый Структура("ВидДанных", ВидДанных), "Обработчик, КодОбработчика"); + +КонецФункции + +Функция СериализовтьXDTO(Знач XDTOОбъект) + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + ФабрикаXDTO.ЗаписатьXML(Запись, XDTOОбъект, , , , НазначениеТипаXML.Явное); + Возврат Запись.Закрыть(); +КонецФункции + +Функция ДесериализовтьXDTO(Знач СтрокаXML) + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(СтрокаXML); + XDTOОбъект = ФабрикаXDTO.ПрочитатьXML(Чтение); + Чтение.Закрыть(); + Возврат XDTOОбъект; +КонецФункции + + +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ДобавитьОбработчикКаналаСообщений(Знач Канал, Знач ОбработчикКанала, Знач Обработчики) + + Обработчик = Обработчики.Добавить(); + Обработчик.Канал = Канал; + Обработчик.Обработчик = ОбработчикКанала; + +КонецПроцедуры + +Функция ПолучитьОписаниеДанных(Знач Дескриптор) + Перем Описание, Характеристика; + + Описание = Дескриптор.DataType; + Для каждого Характеристика Из Дескриптор.Properties.Property Цикл + Описание = Описание + + ", " + Характеристика.Code + ": " + Характеристика.Value; + КонецЦикла; + Описание = Описание + + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = ', добавлен: %1 GMT, будет загружен: %2 GMT'"), + Дескриптор.CreationDate, Дескриптор.RecommendedUpdateDate); + + Возврат Описание; +КонецФункции + diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийПоставляемыхДанных/ОбработчикКаналовСообщенийПоставляемыхДанных.mdo b/SSL/src/CommonModules/ОбработчикКаналовСообщенийПоставляемыхДанных/ОбработчикКаналовСообщенийПоставляемыхДанных.mdo new file mode 100644 index 000000000..7bc22c4ed --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийПоставляемыхДанных/ОбработчикКаналовСообщенийПоставляемыхДанных.mdo @@ -0,0 +1,11 @@ + + + ОбработчикКаналовСообщенийПоставляемыхДанных + + ru + Обработчик каналов сообщений поставляемых данных + + true + true + true + diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/Module.bsl b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/Module.bsl index d8069b89e..41c276c32 100644 --- a/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/Module.bsl +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/Module.bsl @@ -1,722 +1,4 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОбработчикКаналовСообщенийУдаленногоАдминистрирования. -// -//////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Получает список обработчиков сообщений, которые обрабатывает данная подсистема. -// -// Параметры: -// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений -// Процедура ПолучитьОбработчикиКаналовСообщений(Знач Обработчики) Экспорт - ИменаКаналов = СообщенияУдаленногоАдминистрированияПовтИсп.ПолучитьКаналыПакета( - СообщенияУдаленногоАдминистрированияПовтИсп.ПакетУдаленноеАдминистрирование()); - - Для каждого ИмяКанала Из ИменаКаналов Цикл - Обработчик = Обработчики.Добавить(); - Обработчик.Канал = ИмяКанала; - Обработчик.Обработчик = ОбработчикКаналовСообщенийУдаленногоАдминистрирования; - КонецЦикла; - -КонецПроцедуры - -// Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений -// -// Параметры: -// <КаналСообщений> (обязательный). Тип:Строка. Идентификатор канала сообщений, из которого получено сообщение. -// <ТелоСообщения> (обязательный). Тип: Произвольный. Тело сообщения, полученное из канала, которое подлежит обработке. -// <Отправитель> (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Конечная точка, которая является отправителем сообщения. -// -Процедура ОбработатьСообщение(Знач КаналСообщений, Знач ТелоСообщения, Знач Отправитель) Экспорт - - ТипСообщения = СообщенияУдаленногоАдминистрирования.ТипСообщенияПоИмениКанала(КаналСообщений); - - Содержимое = СообщенияУдаленногоАдминистрирования.ПолучитьСодержимоеСообщения(ТелоСообщения); - - Словарь = СообщенияУдаленногоАдминистрированияПовтИсп; - - Если ТипСообщения = Словарь.СообщениеОбновитьПользователя() Тогда - ОбновитьПользователя(Содержимое, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеПодготовитьОбластьДанных() Тогда - ПодготовитьОбластьДанных(Содержимое, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеУдалитьОбластьДанных() Тогда - УдалитьОбластьДанных(Содержимое, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьДоступКОбластиДанных() Тогда - УстановитьДоступКОбластиДанных(Содержимое, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьКонечнуюТочкуМенеджераСервиса() Тогда - УстановитьКонечнуюТочкуМенеджераСервиса(Содержимое, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПараметрыИБ() Тогда - УстановитьПараметрыИБ(Содержимое, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПараметрыОбластиДанных() Тогда - УстановитьПараметрыОбластиДанных(Содержимое, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПолныеПраваОбластиДанных() Тогда - УстановитьПолныеПраваОбластиДанных(Содержимое, Отправитель); - ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПраваПользователяПоУмолчанию() Тогда - УстановитьПраваПользователяПоУмолчанию(Содержимое, Отправитель); - Иначе - - СообщенияУдаленногоАдминистрирования.ОшибкаНеизвестноеИмяКанала(КаналСообщений); - - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -/////////////////////////////////////////////////////////////////////////////////// -// Управление пользователями - -// Структура содержимого сообщения -// Имя -// ПолноеИмя -// СохраняемоеЗначениеПароля -// Язык -// Почта -// ОбластьДанных -// ИдентификаторПользователяСервиса -// ИдентификаторПользователяОбластиДанных -// -Процедура ОбновитьПользователя(Содержимое, Отправитель) - - ОписаниеПользователя = Содержимое; - - УстановитьПривилегированныйРежим(Истина); - - ЯзыкПользователя = ПолучитьЯзыкПоКоду(ОписаниеПользователя.Язык); - - Если ОписаниеПользователя.Установлено("Почта") Тогда - Почта = ОписаниеПользователя.Почта; - Иначе - Почта = ""; - КонецЕсли; - - СтруктураАдресаЭП = ПолучитьСтруктуруАдресаЭлектроннойПочты(Почта); - - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОписаниеПользователя.ОбластьДанных); - - НачатьТранзакцию(); - Попытка - Если ОписаниеПользователя.Установлено("ИдентификаторПользователяОбластиДанных") - И ЗначениеЗаполнено(ОписаниеПользователя.ИдентификаторПользователяОбластиДанных) Тогда - - ПользовательОбластиДанных = Справочники.Пользователи.ПолучитьСсылку(ОписаниеПользователя.ИдентификаторПользователяОбластиДанных); - - Блокировка = Новый БлокировкаДанных; - - ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); - - ЭлементБлокировки.УстановитьЗначение("Ссылка", ПользовательОбластиДанных); - - Блокировка.Заблокировать(); - - ИдентификаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "ИдентификаторПользователяИБ"); - Иначе - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Пользователи.Ссылка КАК Ссылка, - | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.ИдентификаторПользователяСервиса = &ИдентификаторПользователяСервиса"; - Запрос.УстановитьПараметр("ИдентификаторПользователяСервиса", ОписаниеПользователя.ИдентификаторПользователяСервиса); - Результат = Запрос.Выполнить(); - Если Результат.Пустой() Тогда - ИдентификаторПользователяИБ = Неопределено; - ПользовательОбластиДанных = Неопределено; - Иначе - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - ИдентификаторПользователяИБ = Выборка.ИдентификаторПользователяИБ; - ПользовательОбластиДанных = Выборка.Ссылка; - КонецЕсли; - КонецЕсли; - - Если НЕ ЗначениеЗаполнено(ПользовательОбластиДанных) Тогда - ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент(); - ПользовательОбъект.ИдентификаторПользователяСервиса = ОписаниеПользователя.ИдентификаторПользователяСервиса; - Иначе - ПользовательОбъект = ПользовательОбластиДанных.ПолучитьОбъект(); - КонецЕсли; - - ПользовательОбъект.Наименование = ОписаниеПользователя.ПолноеИмя; - - ОбновитьАдресЭлектроннойПочты(ПользовательОбъект, Почта, СтруктураАдресаЭП); - - СтруктураПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); - Если ЗначениеЗаполнено(ИдентификаторПользователяИБ) - И Пользователи.ПользовательПоИдентификаторуСуществует(ИдентификаторПользователяИБ) Тогда - СтруктураПользователяИБ.ПользовательИнфБазыУникальныйИдентификатор = ИдентификаторПользователяИБ; - КонецЕсли; - - СтруктураПользователяИБ.ПользовательИнфБазыИмя = ОписаниеПользователя.Имя; - - СтруктураПользователяИБ.ПользовательИнфБазыПолноеИмя = ОписаниеПользователя.ПолноеИмя; - - СтруктураПользователяИБ.ПользовательИнфБазыАутентификацияСтандартная = Истина; - СтруктураПользователяИБ.ПользовательИнфБазыАутентификацияOpenID = Истина; - СтруктураПользователяИБ.ПользовательИнфБазыПоказыватьВСпискеВыбора = Ложь; - - СтруктураПользователяИБ.ПользовательИнфБазыСохраняемоеЗначениеПароля = ОписаниеПользователя.СохраняемоеЗначениеПароля; - - СтруктураПользователяИБ.ПользовательИнфБазыЯзык = ЯзыкПользователя; - - ПользовательОбъект.ДополнительныеСвойства.Вставить("ДоступКИнформационнойБазеРазрешен", Истина); - ПользовательОбъект.ДополнительныеСвойства.Вставить("СтруктураОписанияПользователяИБ", СтруктураПользователяИБ); - - ПользовательОбъект.Записать(); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление пользователя'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -Функция ПолучитьСтруктуруАдресаЭлектроннойПочты(Знач АдресЭлектроннойПочты) - - Если ЗначениеЗаполнено(АдресЭлектроннойПочты) Тогда - - Попытка - СтруктураАдресаЭП = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресЭлектроннойПочты); - Исключение - ШаблонСообщения = НСтр("ru = 'Указан некорректный адрес электронной почты: %1 - |Ошибка: %2'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, - АдресЭлектроннойПочты, ИнформацияОбОшибке().Описание); - ВызватьИсключение(ТекстСообщения); - КонецПопытки; - - Возврат СтруктураАдресаЭП; - Иначе - Возврат Неопределено; - КонецЕсли; - -КонецФункции - -Процедура ОбновитьАдресЭлектроннойПочты(Знач ПользовательОбъект, Знач Адрес, Знач СтруктураАдресаЭП) - - ВидКИ = Справочники.ВидыКонтактнойИнформации.EmailПользователя; - - СтрокаТабличнойЧасти = ПользовательОбъект.КонтактнаяИнформация.Найти(ВидКИ, "Вид"); - Если СтруктураАдресаЭП = Неопределено Тогда - Если СтрокаТабличнойЧасти <> Неопределено Тогда - ПользовательОбъект.КонтактнаяИнформация.Удалить(СтрокаТабличнойЧасти); - КонецЕсли; - Иначе - Если СтрокаТабличнойЧасти = Неопределено Тогда - СтрокаТабличнойЧасти = ПользовательОбъект.КонтактнаяИнформация.Добавить(); - СтрокаТабличнойЧасти.Вид = ВидКИ; - КонецЕсли; - СтрокаТабличнойЧасти.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; - СтрокаТабличнойЧасти.Представление = Адрес; - - Если СтруктураАдресаЭП.Количество() > 0 Тогда - СтрокаТабличнойЧасти.АдресЭП = СтруктураАдресаЭП[0].Адрес; - - Поз = Найти(СтрокаТабличнойЧасти.АдресЭП, "@"); - Если Поз <> 0 Тогда - СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Поз + 1); - КонецЕсли; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Структура содержимого сообщения -// ИдентификаторПользователяСервиса -// ОбластьДанных -// Значение -// -Процедура УстановитьПолныеПраваОбластиДанных(Содержимое, Отправитель) - - УстановитьПривилегированныйРежим(Истина); - - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Содержимое.ОбластьДанных); - - НачатьТранзакцию(); - Попытка - ПользовательОбластиДанных = ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Содержимое.ИдентификаторПользователяСервиса); - - Если ПользователиПереопределяемый.ЗапретРедактированияРолей() - И Метаданные.ОбщиеМодули.Найти("УправлениеДоступом") <> Неопределено Тогда - // Используется управление доступом - - ИмяСправочникка = "ГруппыДоступа"; - - ГруппаОбъект = Справочники.ГруппыДоступа.Администраторы.Ссылка.ПолучитьОбъект(); - - СтрокаПользователь = ГруппаОбъект.Пользователи.Найти(ПользовательОбластиДанных, "Пользователь"); - Если Содержимое.Значение Тогда - Если СтрокаПользователь = Неопределено Тогда - СтрокаПользователь = ГруппаОбъект.Пользователи.Добавить(); - СтрокаПользователь.Пользователь = ПользовательОбластиДанных; - КонецЕсли; - Иначе - Если СтрокаПользователь <> Неопределено Тогда - ГруппаОбъект.Пользователи.Удалить(СтрокаПользователь); - КонецЕсли; - КонецЕсли; - ГруппаОбъект.Записать(); - - Иначе - - ПользовательИБ = ПолучитьПользователяИБПоПользователюОбластиДанных(ПользовательОбластиДанных); - - РольПолныеПрава = Метаданные.Роли.ПолныеПрава; - Если Содержимое.Значение Тогда - Если НЕ ПользовательИБ.Роли.Содержит(РольПолныеПрава) Тогда - ПользовательИБ.Роли.Добавить(РольПолныеПрава); - КонецЕсли; - Иначе - Если ПользовательИБ.Роли.Содержит(РольПолныеПрава) Тогда - ПользовательИБ.Роли.Удалить(РольПолныеПрава); - КонецЕсли; - КонецЕсли; - - Пользователи.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); - - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка полных прав области данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -Функция ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Знач ИдентификаторПользователяСервиса) - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Пользователи.Ссылка КАК Ссылка - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.ИдентификаторПользователяСервиса = &ИдентификаторПользователяСервиса"; - Запрос.УстановитьПараметр("ИдентификаторПользователяСервиса", ИдентификаторПользователяСервиса); - - НачатьТранзакцию(); - Попытка - Результат = Запрос.Выполнить(); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение пользователя области данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - - Если Результат.Пустой() Тогда - ШаблонСообщения = НСтр("ru = 'Не найден пользователь с идентификатором пользователя сервиса %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИдентификаторПользователяСервиса); - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - - Возврат Результат.Выгрузить()[0].Ссылка; - -КонецФункции - -Функция ПолучитьПользователяИБПоПользователюОбластиДанных(Знач ПользовательОбластиДанных) - - ИдентфиикаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "ИдентификаторПользователяИБ"); - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентфиикаторПользователяИБ); - Если ПользовательИБ = Неопределено Тогда - ШаблонСообщения = НСтр("ru = 'Для пользователя области данных с идентификатором %1 не существует пользователя информационной базы'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ПользовательОбластиДанных.УникальныйИдентификатор()); - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - - Возврат ПользовательИБ; - -КонецФункции - -Функция ПолучитьЯзыкПоКоду(Знач КодЯзыка) - - Если ЗначениеЗаполнено(КодЯзыка) Тогда - - Для каждого Язык Из Метаданные.Языки Цикл - Если Язык.КодЯзыка = КодЯзыка Тогда - Возврат Язык.Имя; - КонецЕсли; - КонецЦикла; - - ШаблонСообщения = НСтр("ru = 'Неподдерживаемый код языка: %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Язык); - ВызватьИсключение(ТекстСообщения); - - Иначе - - Возврат Неопределено; - - КонецЕсли; - -КонецФункции - -// Структура содержимого сообщения -// ИдентификаторПользователяСервиса -// Имя* -// СохраняемоеЗначениеПароля* -// Язык* -// ОбластьДанных -// Значение -// -Процедура УстановитьДоступКОбластиДанных(Содержимое, Отправитель) - - УстановитьПривилегированныйРежим(Истина); - - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Содержимое.ОбластьДанных); - - НачатьТранзакцию(); - Попытка - ПользовательОбластиДанных = ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Содержимое.ИдентификаторПользователяСервиса); - - ИдентфиикаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "ИдентификаторПользователяИБ"); - - Если Содержимое.Значение Тогда - Если НЕ ЗначениеЗаполнено(ИдентфиикаторПользователяИБ) - ИЛИ ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентфиикаторПользователяИБ) = Неопределено Тогда - - ЯзыкПользователяИБ = ПолучитьЯзыкПоКоду(Содержимое.Язык); - - ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - ПользовательИБ.Имя = Содержимое.Имя; - ПользовательИБ.Язык = ЯзыкПользователяИБ; - ПользовательИБ.СохраняемоеЗначениеПароля = Содержимое.СохраняемоеЗначениеПароля; - ПользовательИБ.ПолноеИмя = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "Наименование"); - ПользовательИБ.Записать(); - - ПользовательОбъект = ПользовательОбластиДанных.ПолучитьОбъект(); - ПользовательОбъект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; - ПользовательОбъект.Записать(); - - КонецЕсли; - - Иначе - - Если ЗначениеЗаполнено(ИдентфиикаторПользователяИБ) Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентфиикаторПользователяИБ); - Если ПользовательИБ <> Неопределено Тогда - ПользовательИБ.Удалить(); - КонецЕсли; - - ПользовательОбъект = ПользовательОбластиДанных.ПолучитьОбъект(); - ПользовательОбъект.ИдентификаторПользователяИБ = Неопределено; - ПользовательОбъект.Записать(); - - КонецЕсли; - КонецЕсли; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка доступа к области данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -Процедура УстановитьПраваПользователяПоУмолчанию(Содержимое, Отправитель) - - УстановитьПривилегированныйРежим(Истина); - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Содержимое.ОбластьДанных); - - НачатьТранзакцию(); - Попытка - ПользовательОбластиДанных = ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Содержимое.ИдентификаторПользователяСервиса); - ПользователиПереопределяемый.УстановитьПраваПоУмолчанию(ПользовательОбластиДанных); - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка прав пользователя'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////////// -// Управление областями данных - -// Структура содержимого сообщения -// ОбластьДанных -// ИдентификаторФайлаДанных -// -Процедура ПодготовитьОбластьДанных(Содержимое, Отправитель) - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - Если НЕ ЗначениеЗаполнено(Константы.РежимИспользованияИнформационнойБазы.Получить()) Тогда - ТекстСообщения = НСтр("ru = 'Не установлен режим работы конфигурации'"); - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - - Блокировка = Новый БлокировкаДанных; - Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); - Элемент.УстановитьЗначение("ОбластьДанных", Содержимое.ОбластьДанных); - Блокировка.Заблокировать(); - - МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; - МенеджерЗаписи.Прочитать(); - Если МенеджерЗаписи.Выбран() Тогда - Если МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена Тогда - ШаблонСообщения = НСтр("ru = 'Область данных %1 удалена'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); - ВызватьИсключение(ТекстСообщения); - ИначеЕсли МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению Тогда - ШаблонСообщения = НСтр("ru = 'Область данных %1 в процессе удаления'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); - ВызватьИсключение(ТекстСообщения); - ИначеЕсли МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Новая Тогда - ШаблонСообщения = НСтр("ru = 'Область данных %1 в процессе подготовки к использованию'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); - ВызватьИсключение(ТекстСообщения); - ИначеЕсли МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется Тогда - ШаблонСообщения = НСтр("ru = 'Область данных %1 используется.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - КонецЕсли; - - МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; - МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Новая; - Если ЗначениеЗаполнено(Содержимое.ИдентификаторФайлаДанных) Тогда - МенеджерЗаписи.ИдентификаторВыгрузки = Содержимое.ИдентификаторФайлаДанных; - КонецЕсли; - МенеджерЗаписи.Повтор = 0; - - МенеджерЗаписи.Записать(); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(Содержимое.ОбластьДанных); - - Если ЗначениеЗаполнено(МенеджерЗаписи.ИдентификаторВыгрузки) Тогда - ПараметрыМетода.Добавить(МенеджерЗаписи.ИдентификаторВыгрузки); - КонецЕсли; - - ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( - "РаботаВМоделиСервиса.ПодготовитьОбластьДанныхКИспользованию", ПараметрыМетода, "1",, Содержимое.ОбластьДанных); - -КонецПроцедуры - -// Структура содержимого сообщения -// ОбластьДанных -// -Процедура УдалитьОбластьДанных(Содержимое, Отправитель) - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); - Элемент.УстановитьЗначение("ОбластьДанных", Содержимое.ОбластьДанных); - Блокировка.Заблокировать(); - - МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; - МенеджерЗаписи.Прочитать(); - Если НЕ МенеджерЗаписи.Выбран() Тогда - ШаблонСообщения = НСтр("ru = 'Область данных %1 не существует.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - - МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; - МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению; - МенеджерЗаписи.Повтор = 0; - - МенеджерЗаписи.Записать(); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление области данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - - ПараметрыМетода = Новый Массив; - ПараметрыМетода.Добавить(Содержимое.ОбластьДанных); - - ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( - "РаботаВМоделиСервиса.ОчиститьОбластьДанных", ПараметрыМетода, "1",, Содержимое.ОбластьДанных); - -КонецПроцедуры - -// Структура содержимого сообщения -// ОбластьДанных -// ЧасовойПояс -// Наименование -Процедура УстановитьПараметрыОбластиДанных(Содержимое, Отправитель) - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - Попытка - Блокировка = Новый БлокировкаДанных; - Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); - Элемент.УстановитьЗначение("ОбластьДанных", Содержимое.ОбластьДанных); - Блокировка.Заблокировать(); - - МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбластьДанных = Содержимое.ОбластьДанных; - МенеджерЗаписи.Прочитать(); - Если НЕ МенеджерЗаписи.Выбран() Тогда - ШаблонСообщения = НСтр("ru = 'Область данных %1 не существует.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Содержимое.ОбластьДанных); - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - - МенеджерЗаписи.Представление = Содержимое.Наименование; - - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Содержимое.ОбластьДанных); - - Если ЗначениеЗаполнено(Содержимое.ЧасовойПояс) Тогда - УстановитьЧасовойПоясИнформационнойБазы(Содержимое.ЧасовойПояс); - Иначе - УстановитьЧасовойПоясИнформационнойБазы(); - КонецЕсли; - - МенеджерЗаписи.ЧасовойПояс = Содержимое.ЧасовойПояс; - МенеджерЗаписи.Записать(); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка параметров области данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - - Если Не ПустаяСтрока(Содержимое.Наименование) Тогда - - ОбновитьСвойстваПредопределенныхУзлов(Содержимое.Наименование); - - КонецЕсли; - -КонецПроцедуры - -Процедура ОбновитьСвойстваПредопределенныхУзлов(Знач Наименование) - - Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл - - ПланОбменаИспользуетсяВМоделиСервиса = Ложь; - - Попытка - ПланОбменаИспользуетсяВМоделиСервиса = ПланыОбмена[ПланОбмена.Имя].ПланОбменаИспользуетсяВМоделиСервиса(); - Исключение - ПланОбменаИспользуетсяВМоделиСервиса = Ложь; - КонецПопытки; - - Если ПланОбменаИспользуетсяВМоделиСервиса Тогда - - ЭтотУзел = ПланыОбмена[ПланОбмена.Имя].ЭтотУзел(); - - СвойстваУзла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ЭтотУзел, "Код, Наименование"); - - Если ПустаяСтрока(СвойстваУзла.Код) Тогда - - ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); - ЭтотУзелОбъект.Код = ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); - ЭтотУзелОбъект.Наименование = Наименование; - ЭтотУзелОбъект.Записать(); - - ИначеЕсли СвойстваУзла.Наименование <> Наименование Тогда - - ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); - ЭтотУзелОбъект.Наименование = Наименование; - ЭтотУзелОбъект.Записать(); - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -/////////////////////////////////////////////////////////////////////////////////// -// Управление информационной базой - -// Структура содержимого сообщения -// Параметры -Процедура УстановитьПараметрыИБ(Содержимое, Отправитель) - - Параметры = СериализаторXDTO.ПрочитатьXDTO(Содержимое.Параметры); - - НачатьТранзакцию(); - Попытка - ТаблицаПараметров = РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ(); - - ИзменяемыеПараметры = Новый Структура; - - // Проверка корректности списка параметров - Для каждого КлючИЗначение Из Параметры Цикл - - СтрокаПараметра = ТаблицаПараметров.Найти(КлючИЗначение.Ключ, "Имя"); - Если СтрокаПараметра = Неопределено Тогда - ШаблонСообщения = НСтр("ru = 'Не известное имя параметра %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ); - ЗаписьЖурналаРегистрации("УдаленноеАдминистрирование.УстановитьПараметрыИБ", - УровеньЖурналаРегистрации.Предупреждение, , , ТекстСообщения); - Продолжить; - ИначеЕсли СтрокаПараметра.ЗапретЗаписи Тогда - ШаблонСообщения = НСтр("ru = 'Параметр %1 может использоваться только для чтения'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ); - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - - ИзменяемыеПараметры.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); - - КонецЦикла; - - СтандартныеПодсистемыПереопределяемый.ПриУстановкеЗначенийПараметровИБ(ИзменяемыеПараметры); - РаботаВМоделиСервисаПереопределяемый.ПриУстановкеЗначенийПараметровИБ(ИзменяемыеПараметры); - - Для каждого КлючИЗначение Из ИзменяемыеПараметры Цикл - - Константы[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение); - - КонецЦикла; - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка параметров ИБ'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -Процедура УстановитьКонечнуюТочкуМенеджераСервиса(Содержимое, Отправитель) - - Константы.КонечнаяТочкаМенеджераСервиса.Установить(Отправитель); - КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/ОбработчикКаналовСообщенийУдаленногоАдминистрирования.mdo b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/ОбработчикКаналовСообщенийУдаленногоАдминистрирования.mdo index 309a6055f..1fc79247d 100644 --- a/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/ОбработчикКаналовСообщенийУдаленногоАдминистрирования.mdo +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУдаленногоАдминистрирования/ОбработчикКаналовСообщенийУдаленногоАдминистрирования.mdo @@ -6,4 +6,6 @@ Обработчик каналов сообщений удаленного администрирования true + true + true diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийУправлениеРезервнымКопированием/Module.bsl b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУправлениеРезервнымКопированием/Module.bsl new file mode 100644 index 000000000..41c276c32 --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУправлениеРезервнымКопированием/Module.bsl @@ -0,0 +1,4 @@ + +Процедура ПолучитьОбработчикиКаналовСообщений(Знач Обработчики) Экспорт + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбработчикКаналовСообщенийУправлениеРезервнымКопированием/ОбработчикКаналовСообщенийУправлениеРезервнымКопированием.mdo b/SSL/src/CommonModules/ОбработчикКаналовСообщенийУправлениеРезервнымКопированием/ОбработчикКаналовСообщенийУправлениеРезервнымКопированием.mdo new file mode 100644 index 000000000..5d2978b2b --- /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..6cbc647e4 --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикСообщенийУдаленногоАдминистрирования/Module.bsl @@ -0,0 +1,698 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОбработчикКаналовСообщенийУдаленногоАдминистрирования. +// +//////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений +// +// Параметры: +// <КаналСообщений> (обязательный). Тип:Строка. Идентификатор канала сообщений, из которого получено сообщение. +// <ТелоСообщения> (обязательный). Тип: Произвольный. Тело сообщения, полученное из канала, которое подлежит обработке. +// <Отправитель> (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Конечная точка, которая является отправителем сообщения. +// +Процедура ОбработатьСообщение(Знач КаналСообщений, Знач ТелоСообщения, Знач Отправитель) Экспорт + + ТипСообщения = СообщенияВМоделиСервиса.ТипСообщенияПоИмениКанала(КаналСообщений); + + Сообщение = СообщенияВМоделиСервиса.ПрочитатьСообщениеИзНетипизированногоТела(ТелоСообщения); + + Словарь = РаботаВМоделиСервисаПовтИсп; + + СообщенияВМоделиСервиса.ЗаписатьСобытиеНачалоОбработки(Сообщение); + + Если ТипСообщения = Словарь.СообщениеОбновитьПользователя() Тогда + ОбновитьПользователя(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеПодготовитьОбластьДанных() Тогда + ПодготовитьОбластьДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУдалитьОбластьДанных() Тогда + УдалитьОбластьДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьДоступКОбластиДанных() Тогда + УстановитьДоступКОбластиДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьКонечнуюТочкуМенеджераСервиса() Тогда + УстановитьКонечнуюТочкуМенеджераСервиса(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПараметрыИБ() Тогда + УстановитьПараметрыИБ(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПараметрыОбластиДанных() Тогда + УстановитьПараметрыОбластиДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПолныеПраваОбластиДанных() Тогда + УстановитьПолныеПраваОбластиДанных(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеУстановитьПраваПользователяПоУмолчанию() Тогда + УстановитьПраваПользователяПоУмолчанию(Сообщение, Отправитель); + Иначе + + СообщенияВМоделиСервиса.ОшибкаНеизвестноеИмяКанала(КаналСообщений); + + КонецЕсли; + + СообщенияВМоделиСервиса.ЗаписатьСобытиеОкончаниеОбработки(Сообщение); + + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +/////////////////////////////////////////////////////////////////////////////////// +// Управление пользователями + +// Обработчик тела {http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1}UpdateUser +// +Процедура ОбновитьПользователя(Сообщение, Отправитель) + + ОписаниеПользователя = Сообщение.Body; + + УстановитьПривилегированныйРежим(Истина); + + ЯзыкПользователя = ПолучитьЯзыкПоКоду(ОписаниеПользователя.Language); + + Если ОписаниеПользователя.Установлено("EMail") Тогда + Почта = ОписаниеПользователя.EMail; + Иначе + Почта = ""; + КонецЕсли; + + СтруктураАдресаЭП = ПолучитьСтруктуруАдресаЭлектроннойПочты(Почта); + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОписаниеПользователя.Zone); + + НачатьТранзакцию(); + Попытка + Если ОписаниеПользователя.Установлено("UserApplicationID") + И ЗначениеЗаполнено(ОписаниеПользователя.UserApplicationID) Тогда + + ПользовательОбластиДанных = Справочники.Пользователи.ПолучитьСсылку(ОписаниеПользователя.UserApplicationID); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ПользовательОбластиДанных); + Блокировка.Заблокировать(); + Иначе + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяСервиса = &ИдентификаторПользователяСервиса"; + Запрос.УстановитьПараметр("ИдентификаторПользователяСервиса", ОписаниеПользователя.UserServiceID); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); + Блокировка.Заблокировать(); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + ПользовательОбластиДанных = Неопределено; + Иначе + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + ПользовательОбластиДанных = Выборка.Ссылка; + КонецЕсли; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ПользовательОбластиДанных) Тогда + ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент(); + ПользовательОбъект.ИдентификаторПользователяСервиса = ОписаниеПользователя.UserServiceID; + Иначе + ПользовательОбъект = ПользовательОбластиДанных.ПолучитьОбъект(); + КонецЕсли; + + ПользовательОбъект.Наименование = ОписаниеПользователя.FullName; + + ОбновитьАдресЭлектроннойПочты(ПользовательОбъект, Почта, СтруктураАдресаЭП); + + ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); + + ОписаниеПользователяИБ.Имя = ОписаниеПользователя.Name; + + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; + ОписаниеПользователяИБ.АутентификацияOpenID = Истина; + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; + + ОписаниеПользователяИБ.СохраняемоеЗначениеПароля = ОписаниеПользователя.StoredPasswordValue; + + ОписаниеПользователяИБ.Язык = ЯзыкПользователя; + + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ПользовательОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + + ПользовательОбъект.ДополнительныеСвойства.Вставить("ОбработкаСообщенияКаналаУдаленногоАдминистрирования"); + ПользовательОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьСтруктуруАдресаЭлектроннойПочты(Знач АдресЭлектроннойПочты) + + Если ЗначениеЗаполнено(АдресЭлектроннойПочты) Тогда + + Попытка + СтруктураАдресаЭП = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(АдресЭлектроннойПочты); + Исключение + ШаблонСообщения = НСтр("ru = 'Указан некорректный адрес электронной почты: %1 + |Ошибка: %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, + АдресЭлектроннойПочты, ИнформацияОбОшибке().Описание); + ВызватьИсключение(ТекстСообщения); + КонецПопытки; + + Возврат СтруктураАдресаЭП; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Процедура ОбновитьАдресЭлектроннойПочты(Знач ПользовательОбъект, Знач Адрес, Знач СтруктураАдресаЭП) + + ВидКИ = Справочники.ВидыКонтактнойИнформации.EmailПользователя; + + СтрокаТабличнойЧасти = ПользовательОбъект.КонтактнаяИнформация.Найти(ВидКИ, "Вид"); + Если СтруктураАдресаЭП = Неопределено Тогда + Если СтрокаТабличнойЧасти <> Неопределено Тогда + ПользовательОбъект.КонтактнаяИнформация.Удалить(СтрокаТабличнойЧасти); + КонецЕсли; + Иначе + Если СтрокаТабличнойЧасти = Неопределено Тогда + СтрокаТабличнойЧасти = ПользовательОбъект.КонтактнаяИнформация.Добавить(); + СтрокаТабличнойЧасти.Вид = ВидКИ; + КонецЕсли; + СтрокаТабличнойЧасти.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты; + СтрокаТабличнойЧасти.Представление = Адрес; + + Если СтруктураАдресаЭП.Количество() > 0 Тогда + СтрокаТабличнойЧасти.АдресЭП = СтруктураАдресаЭП[0].Адрес; + + Поз = Найти(СтрокаТабличнойЧасти.АдресЭП, "@"); + Если Поз <> 0 Тогда + СтрокаТабличнойЧасти.ДоменноеИмяСервера = Сред(СтрокаТабличнойЧасти.АдресЭП, Поз + 1); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обработчик тела {http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1}SetFullControl +// +Процедура УстановитьПолныеПраваОбластиДанных(Сообщение, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + Тело = Сообщение.Body; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Тело.Zone); + + НачатьТранзакцию(); + Попытка + ПользовательОбластиДанных = ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Тело.UserServiceID); + + Если ПользователиПереопределяемый.ЗапретРедактированияРолей() + И Метаданные.ОбщиеМодули.Найти("УправлениеДоступом") <> Неопределено Тогда + // Используется управление доступом + + ИмяСправочника = "ГруппыДоступа"; + + ГруппаАдминистраторы = Справочники[ИмяСправочника].Администраторы; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа"); + ЭлементБлокировки.УстановитьЗначение("Ссылка", ГруппаАдминистраторы); + Блокировка.Заблокировать(); + + ГруппаОбъект = ГруппаАдминистраторы.ПолучитьОбъект(); + + СтрокаПользователь = ГруппаОбъект.Пользователи.Найти(ПользовательОбластиДанных, "Пользователь"); + Если Тело.Value Тогда + Если СтрокаПользователь = Неопределено Тогда + СтрокаПользователь = ГруппаОбъект.Пользователи.Добавить(); + СтрокаПользователь.Пользователь = ПользовательОбластиДанных; + КонецЕсли; + Иначе + Если СтрокаПользователь <> Неопределено Тогда + ГруппаОбъект.Пользователи.Удалить(СтрокаПользователь); + КонецЕсли; + КонецЕсли; + ГруппаОбъект.Записать(); + + Иначе + + ПользовательИБ = ПолучитьПользователяИБПоПользователюОбластиДанных(ПользовательОбластиДанных); + + РольПолныеПрава = Метаданные.Роли.ПолныеПрава; + Если Тело.Value Тогда + Если НЕ ПользовательИБ.Роли.Содержит(РольПолныеПрава) Тогда + ПользовательИБ.Роли.Добавить(РольПолныеПрава); + КонецЕсли; + Иначе + Если ПользовательИБ.Роли.Содержит(РольПолныеПрава) Тогда + ПользовательИБ.Роли.Удалить(РольПолныеПрава); + КонецЕсли; + КонецЕсли; + + ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); + + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Знач ИдентификаторПользователяСервиса) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяСервиса = &ИдентификаторПользователяСервиса"; + Запрос.УстановитьПараметр("ИдентификаторПользователяСервиса", ИдентификаторПользователяСервиса); + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Справочник.Пользователи"); + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + Результат = Запрос.Выполнить(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Результат.Пустой() Тогда + ШаблонСообщения = НСтр("ru = 'Не найден пользователь с идентификатором пользователя сервиса %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ИдентификаторПользователяСервиса); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Возврат Результат.Выгрузить()[0].Ссылка; + +КонецФункции + +Функция ПолучитьПользователяИБПоПользователюОбластиДанных(Знач ПользовательОбластиДанных) + + ИдентфиикаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "ИдентификаторПользователяИБ"); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентфиикаторПользователяИБ); + Если ПользовательИБ = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Для пользователя области данных с идентификатором %1 не существует пользователя информационной базы'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ПользовательОбластиДанных.УникальныйИдентификатор()); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Возврат ПользовательИБ; + +КонецФункции + +Функция ПолучитьЯзыкПоКоду(Знач КодЯзыка) + + Если ЗначениеЗаполнено(КодЯзыка) Тогда + + Для каждого Язык Из Метаданные.Языки Цикл + Если Язык.КодЯзыка = КодЯзыка Тогда + Возврат Язык.Имя; + КонецЕсли; + КонецЦикла; + + ШаблонСообщения = НСтр("ru = 'Неподдерживаемый код языка: %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Язык); + ВызватьИсключение(ТекстСообщения); + + Иначе + + Возврат Неопределено; + + КонецЕсли; + +КонецФункции + +// Обработчик тела {http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1}SetApplicationAccess +// +Процедура УстановитьДоступКОбластиДанных(Сообщение, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + Тело = Сообщение.Body; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Тело.Zone); + + НачатьТранзакцию(); + Попытка + ПользовательОбластиДанных = ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Тело.UserServiceID); + + ИдентфиикаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательОбластиДанных, "ИдентификаторПользователяИБ"); + + Если Тело.Value Тогда + Если НЕ ЗначениеЗаполнено(ИдентфиикаторПользователяИБ) + ИЛИ ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентфиикаторПользователяИБ) = Неопределено Тогда + + ЯзыкПользователяИБ = ПолучитьЯзыкПоКоду(Тело.Language); + + ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ(); + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Имя = Тело.Name; + ОписаниеПользователяИБ.Язык = ЯзыкПользователяИБ; + ОписаниеПользователяИБ.СохраняемоеЗначениеПароля = Тело.StoredPasswordValue; + ОписаниеПользователяИБ.АутентификацияСтандартная = Истина; + ОписаниеПользователяИБ.АутентификацияOpenID = Истина; + ОписаниеПользователяИБ.ПоказыватьВСпискеВыбора = Ложь; + + ПользовательОбъект = ПользовательОбластиДанных.ПолучитьОбъект(); + ПользовательОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + ПользовательОбъект.ДополнительныеСвойства.Вставить("ОбработкаСообщенияКаналаУдаленногоАдминистрирования"); + ПользовательОбъект.Записать(); + + КонецЕсли; + + Иначе + + Если ЗначениеЗаполнено(ИдентфиикаторПользователяИБ) Тогда + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Удалить"); + + ПользовательОбъект = ПользовательОбластиДанных.ПолучитьОбъект(); + ПользовательОбъект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + ПользовательОбъект.ДополнительныеСвойства.Вставить("ОбработкаСообщенияКаналаУдаленногоАдминистрирования"); + ПользовательОбъект.Записать(); + КонецЕсли; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Обработчик тела {http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1}SetDefaultUserRights +// +Процедура УстановитьПраваПользователяПоУмолчанию(Сообщение, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + Тело = Сообщение.Body; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Тело.Zone); + + НачатьТранзакцию(); + Попытка + ПользовательОбластиДанных = ПолучитьПользователяОбластиПоИдентификаторуПользователяСервиса(Тело.UserServiceID); + РаботаВМоделиСервисаПереопределяемый.УстановитьПраваПоУмолчанию(ПользовательОбластиДанных); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////////// +// Управление областями данных + +// Обработчик тела {http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1}PrepareApplication +// +Процедура ПодготовитьОбластьДанных(Сообщение, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + Тело = Сообщение.Body; + + НачатьТранзакцию(); + Попытка + Если НЕ ЗначениеЗаполнено(Константы.РежимИспользованияИнформационнойБазы.Получить()) Тогда + ТекстСообщения = НСтр("ru = 'Не установлен режим работы информационной базы'"); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Элемент.УстановитьЗначение("ОбластьДанных", Тело.Zone); + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = Тело.Zone; + МенеджерЗаписи.Прочитать(); + Если МенеджерЗаписи.Выбран() Тогда + Если МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 удалена'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тело.Zone); + ВызватьИсключение(ТекстСообщения); + ИначеЕсли МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 в процессе удаления'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тело.Zone); + ВызватьИсключение(ТекстСообщения); + ИначеЕсли МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Новая Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 в процессе подготовки к использованию'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тело.Zone); + ВызватьИсключение(ТекстСообщения); + ИначеЕсли МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 используется.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тело.Zone); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + КонецЕсли; + + МенеджерЗаписи.ОбластьДанных = Тело.Zone; + МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Новая; + Если ЗначениеЗаполнено(Тело.DataFileId) Тогда + МенеджерЗаписи.ИдентификаторВыгрузки = Тело.DataFileId; + КонецЕсли; + МенеджерЗаписи.Повтор = 0; + + МенеджерЗаписи.Записать(); + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(Тело.Zone); + + Если ЗначениеЗаполнено(МенеджерЗаписи.ИдентификаторВыгрузки) Тогда + ПараметрыМетода.Добавить(МенеджерЗаписи.ИдентификаторВыгрузки); + КонецЕсли; + + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "РаботаВМоделиСервиса.ПодготовитьОбластьДанныхКИспользованию", ПараметрыМетода, "1",, Тело.Zone); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Обработчик тела {http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1}DeleteApplication +// +Процедура УдалитьОбластьДанных(Сообщение, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + Тело = Сообщение.Body; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Элемент.УстановитьЗначение("ОбластьДанных", Тело.Zone); + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = Тело.Zone; + МенеджерЗаписи.Прочитать(); + Если НЕ МенеджерЗаписи.Выбран() Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 не существует.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тело.Zone); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + МенеджерЗаписи.ОбластьДанных = Тело.Zone; + МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.КУдалению; + МенеджерЗаписи.Повтор = 0; + + МенеджерЗаписи.Записать(); + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(Тело.Zone); + + ОчередьЗаданий.ЗапланироватьВыполнениеЗадания( + "РаботаВМоделиСервиса.ОчиститьОбластьДанных", ПараметрыМетода, "1",, Тело.Zone); + + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Обработчик тела {http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1}SetApplicationParams +// +Процедура УстановитьПараметрыОбластиДанных(Сообщение, Отправитель) + + УстановитьПривилегированныйРежим(Истина); + + Тело = Сообщение.Body; + + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); + Элемент.УстановитьЗначение("ОбластьДанных", Тело.Zone); + Блокировка.Заблокировать(); + + МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = Тело.Zone; + МенеджерЗаписи.Прочитать(); + Если НЕ МенеджерЗаписи.Выбран() Тогда + ШаблонСообщения = НСтр("ru = 'Область данных %1 не существует.'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Тело.Zone); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + МенеджерЗаписи.Представление = Тело.Presentation; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Тело.Zone); + + Если ЗначениеЗаполнено(Тело.TimeZone) Тогда + УстановитьЧасовойПоясИнформационнойБазы(Тело.TimeZone); + Иначе + УстановитьЧасовойПоясИнформационнойБазы(); + КонецЕсли; + + МенеджерЗаписи.ЧасовойПояс = Тело.TimeZone; + МенеджерЗаписи.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Не ПустаяСтрока(Тело.Presentation) Тогда + + ОбновитьСвойстваПредопределенныхУзлов(Тело.Presentation); + + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьСвойстваПредопределенныхУзлов(Знач Наименование) + + Для Каждого ПланОбмена Из Метаданные.ПланыОбмена Цикл + + ПланОбменаИспользуетсяВМоделиСервиса = Ложь; + + Попытка + ПланОбменаИспользуетсяВМоделиСервиса = ПланыОбмена[ПланОбмена.Имя].ПланОбменаИспользуетсяВМоделиСервиса(); + Исключение + ПланОбменаИспользуетсяВМоделиСервиса = Ложь; + КонецПопытки; + + Если ПланОбменаИспользуетсяВМоделиСервиса Тогда + + ЭтотУзел = ПланыОбмена[ПланОбмена.Имя].ЭтотУзел(); + + СвойстваУзла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ЭтотУзел, "Код, Наименование"); + + Если ПустаяСтрока(СвойстваУзла.Код) Тогда + + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Код = ОбменДаннымиВМоделиСервиса.КодУзлаПланаОбменаВСервисе(РаботаВМоделиСервиса.ЗначениеРазделителяСеанса()); + ЭтотУзелОбъект.Наименование = Наименование; + ЭтотУзелОбъект.Записать(); + + ИначеЕсли СвойстваУзла.Наименование <> Наименование Тогда + + ЭтотУзелОбъект = ЭтотУзел.ПолучитьОбъект(); + ЭтотУзелОбъект.Наименование = Наименование; + ЭтотУзелОбъект.Записать(); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////////// +// Управление информационной базой + +// Обработчик тела {http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1}SetIBParams +// +Процедура УстановитьПараметрыИБ(Сообщение, Отправитель) + + Тело = Сообщение.Body; + + Параметры = СериализаторXDTO.ПрочитатьXDTO(Тело.Params); + + НачатьТранзакцию(); + Попытка + ТаблицаПараметров = РаботаВМоделиСервиса.ПолучитьТаблицуПараметровИБ(); + + ИзменяемыеПараметры = Новый Структура; + + // Проверка корректности списка параметров + Для каждого КлючИЗначение Из Параметры Цикл + + СтрокаПараметра = ТаблицаПараметров.Найти(КлючИЗначение.Ключ, "Имя"); + Если СтрокаПараметра = Неопределено Тогда + ШаблонСообщения = НСтр("ru = 'Не известное имя параметра %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ); + ЗаписьЖурналаРегистрации("УдаленноеАдминистрирование.УстановитьПараметрыИБ", + УровеньЖурналаРегистрации.Предупреждение, , , ТекстСообщения); + Продолжить; + ИначеЕсли СтрокаПараметра.ЗапретЗаписи Тогда + ШаблонСообщения = НСтр("ru = 'Параметр %1 может использоваться только для чтения'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КлючИЗначение.Ключ); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + ИзменяемыеПараметры.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); + + КонецЦикла; + + СтандартныеПодсистемыПереопределяемый.ПриУстановкеЗначенийПараметровИБ(ИзменяемыеПараметры); + РаботаВМоделиСервисаПереопределяемый.ПриУстановкеЗначенийПараметровИБ(ИзменяемыеПараметры); + + Для каждого КлючИЗначение Из ИзменяемыеПараметры Цикл + + Константы[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение); + + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Установка параметров ИБ'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Обработчик тела {http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1}SetServiceManagerEndPoint +// +Процедура УстановитьКонечнуюТочкуМенеджераСервиса(Сообщение, Отправитель) + + Константы.КонечнаяТочкаМенеджераСервиса.Установить(Отправитель); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбработчикСообщенийУдаленногоАдминистрирования/ОбработчикСообщенийУдаленногоАдминистрирования.mdo b/SSL/src/CommonModules/ОбработчикСообщенийУдаленногоАдминистрирования/ОбработчикСообщенийУдаленногоАдминистрирования.mdo new file mode 100644 index 000000000..b57205808 --- /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..b6bc357e8 --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикСообщенийУправленияРезервнымКопированием/Module.bsl @@ -0,0 +1,79 @@ +//////////////////////////////////////////////////////////////////////////////// +// Обработка сообщений удаленного администрирования +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Выполняет обработку тела сообщения из канала в соответствии с алгоритмом текущего канала сообщений +// +// Параметры: +// <КаналСообщений> (обязательный). Тип:Строка. Идентификатор канала сообщений, из которого получено сообщение. +// <ТелоСообщения> (обязательный). Тип: Произвольный. Тело сообщения, полученное из канала, которое подлежит обработке. +// <Отправитель> (обязательный). Тип: ПланОбменаСсылка.ОбменСообщениями. Конечная точка, которая является отправителем сообщения. +// +Процедура ОбработатьСообщение(Знач КаналСообщений, Знач ТелоСообщения, Знач Отправитель) Экспорт + + ТипСообщения = СообщенияВМоделиСервиса.ТипСообщенияПоИмениКанала(КаналСообщений); + + Сообщение = СообщенияВМоделиСервиса.ПрочитатьСообщениеИзНетипизированногоТела(ТелоСообщения); + + Словарь = РезервноеКопированиеОбластейДанныхПовтИсп; + + СообщенияВМоделиСервиса.ЗаписатьСобытиеНачалоОбработки(Сообщение); + + Если ТипСообщения = Словарь.СообщениеПланироватьАрхивациюОбласти() Тогда + ПланироватьСозданиеРезервнойКопииОбласти(Сообщение, Отправитель); + ИначеЕсли ТипСообщения = Словарь.СообщениеОтменитьАрхивациюОбласти() Тогда + ОтменитьСозданиеРезервнойКопииОбласти(Сообщение, Отправитель); + Иначе + СообщенияВМоделиСервиса.ОшибкаНеизвестноеИмяКанала(КаналСообщений); + КонецЕсли; + + СообщенияВМоделиСервиса.ЗаписатьСобытиеОкончаниеОбработки(Сообщение); + + Если ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Структура содержимого сообщения +// Zone +// BackupId +// Date - Дата - момент запуска архивирования области +// Forced - Булево - необходимость создавать копию вне зависимости от активности пользователей. +// +Процедура ПланироватьСозданиеРезервнойКопииОбласти(Сообщение, Отправитель) + + // При получении первого сообщения от МС взвести флаг поддержки. + Если Не ПолучитьФункциональнуюОпцию("ПоддержкаРезервногоКопирования") Тогда + РезервноеКопированиеОбластейДанных.УстановитьСтатусРезервногоКопирования(); + КонецЕсли; + + Тело = Сообщение.Body; + + ПараметрыВыгрузки = РезервноеКопированиеОбластейДанных.СоздатьПустыеПараметрыВыгрузки(); + ПараметрыВыгрузки.ОбластьДанных = Тело.Zone; + ПараметрыВыгрузки.ИДКопии = Тело.BackupId; + ПараметрыВыгрузки.МоментЗапуска = МестноеВремя(Тело.Date, // !Перевести универсальное в местное - + РезервноеКопированиеОбластейДанных.ПолучитьЧасовойПоясОбластиДанных(Тело.Zone)); // в очередях на вход должно поступать местное. + ПараметрыВыгрузки.Принудительно = Тело.Forced; + ПараметрыВыгрузки.ПоТребованию = Ложь; + + РезервноеКопированиеОбластейДанных.ЗапланироватьАрхивациюВОчереди(ПараметрыВыгрузки); + +КонецПроцедуры + +Процедура ОтменитьСозданиеРезервнойКопииОбласти(Сообщение, Отправитель) + + Тело = Сообщение.Body; + + ПараметрыОтмены = Новый Структура("ОбластьДанных, ИДКопии", Тело.Zone, Тело.BackupId); + РезервноеКопированиеОбластейДанных.ОтменитьСозданиеРезервнойКопииОбласти(ПараметрыОтмены); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбработчикСообщенийУправленияРезервнымКопированием/ОбработчикСообщенийУправленияРезервнымКопированием.mdo b/SSL/src/CommonModules/ОбработчикСообщенийУправленияРезервнымКопированием/ОбработчикСообщенийУправленияРезервнымКопированием.mdo new file mode 100644 index 000000000..b95e155fa --- /dev/null +++ b/SSL/src/CommonModules/ОбработчикСообщенийУправленияРезервнымКопированием/ОбработчикСообщенийУправленияРезервнымКопированием.mdo @@ -0,0 +1,11 @@ + + + ОбработчикСообщенийУправленияРезервнымКопированием + + ru + Обработчик сообщений управления резервным копированием + + true + true + true + diff --git a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl index dc15db104..771f3213b 100644 --- a/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначения/Module.bsl @@ -137,7 +137,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | Ссылка, " + ИменаРеквизитов + " + | Ссылка КАК Ссылка, " + ИменаРеквизитов + " |ИЗ | " + МассивСсылок[0].Метаданные().ПолноеИмя() + " КАК Таблица |ГДЕ @@ -455,21 +455,6 @@ КонецФункции -Функция ПолучитьКлючиСтруктурыСтрокой(Структура, Разделитель = ",") Экспорт - - Результат = ""; - - Для Каждого Элемент Из Структура Цикл - - СимволРазделителя = ?(ПустаяСтрока(Результат), "", Разделитель); - - Результат = Результат + СимволРазделителя + Элемент.Ключ; - - КонецЦикла; - - Возврат Результат; -КонецФункции - // Получает строку, содержащую ключи структуры, разделенные символом разделителя. // // Параметры: @@ -1082,6 +1067,8 @@ ИмяМетода = ЧастиИмени[ЧастиИмени.ВГраница()]; ВременнаяСтруктура = Новый Структура; Попытка + // Проверка на то, что ИмяМетода является допустимым идентификатором. + // Например: МояПроцедура ВременнаяСтруктура.Вставить(ИмяМетода); Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Безопасное выполнение метода'"), УровеньЖурналаРегистрации.Ошибка, , , @@ -1333,6 +1320,66 @@ КонецФункции +// Функция возвращает объект WSПрокси созданный с переданными параметрами. +// +// Параметры: +// АдресWSDL - Строка - местораположение wsdl +// URIПространстваИмен - Строка - URI пространства имен web-сервиса +// ИмяСервиса - Строка - имя сервиса +// ИмяТочкиПодключения - Строка - если не задано, образуется как <ИмяСервиса>Soap +// ИмяПользователя - Строка - имя пользователя для входа на сервер +// Пароль - Строка - пароль пользователя +// Таймаут - Число - таймаут на операции выполняемые через полученное прокси +// +// Возвращаемое значение: +// WSПрокси +// +Функция WSПрокси( + Знач АдресWSDL, + Знач URIПространстваИмен, + Знач ИмяСервиса, + Знач ИмяТочкиПодключения = "", + Знач ИмяПользователя, + Знач Пароль, + Знач Таймаут = Неопределено, + Знач ДелатьКонтрольныйВызов = Ложь + ) Экспорт + + Если ДелатьКонтрольныйВызов И Таймаут <> Неопределено И Таймаут > 20 Тогда + + WSПроксиPing = ОбщегоНазначенияПовтИсп.WSПрокси( + АдресWSDL, + URIПространстваИмен, + ИмяСервиса, + ИмяТочкиПодключения, + ИмяПользователя, + Пароль, + 3 + ); + + Попытка + WSПроксиPing.Ping(); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'WSПрокси'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение; + КонецПопытки; + + КонецЕсли; + + Возврат ОбщегоНазначенияПовтИсп.WSПрокси( + АдресWSDL, + URIПространстваИмен, + ИмяСервиса, + ИмяТочкиПодключения, + ИмяПользователя, + Пароль, + Таймаут + ); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для работы с формами @@ -1438,38 +1485,27 @@ Для Каждого СтрокаКоллекции Из КоллекцииОбъектовМетаданных Цикл СтрокаДерева = ДеревоМетаданных.Строки.Добавить(); - ЗаполнитьЗначенияСвойств(СтрокаДерева, СтрокаКоллекции); - Для Каждого ОбъектМетаданных Из Метаданные[СтрокаКоллекции.Имя] Цикл - // ============================ {Фильтр} Если ИспользоватьОтбор Тогда ОбъектПрошелФильтр = Истина; - Для Каждого ЭлементОтбора Из Отбор Цикл Значение = ?(ВРег(ЭлементОтбора.Ключ) = ВРег("ПолноеИмя"), ОбъектМетаданных.ПолноеИмя(), ОбъектМетаданных[ЭлементОтбора.Ключ]); - Если ЭлементОтбора.Значение.Найти(Значение) = Неопределено Тогда - ОбъектПрошелФильтр = Ложь; - Прервать; - КонецЕсли; КонецЦикла; Если Не ОбъектПрошелФильтр Тогда - Продолжить; - КонецЕсли; КонецЕсли; - // ============================ {Фильтр} СтрокаДереваОМ = СтрокаДерева.Строки.Добавить(); СтрокаДереваОМ.Имя = ОбъектМетаданных.Имя; @@ -1490,13 +1526,9 @@ Для ОбратныйИндекс = 1 По КолвоЭлементовКоллекции Цикл ТекущийИндекс = КолвоЭлементовКоллекции - ОбратныйИндекс; - СтрокаДерева = ДеревоМетаданных.Строки[ТекущийИндекс]; - Если СтрокаДерева.Строки.Количество() = 0 Тогда - ДеревоМетаданных.Строки.Удалить(ТекущийИндекс); - КонецЕсли; КонецЦикла; @@ -1507,23 +1539,10 @@ КонецФункции -// Возвращает подробную информацию о конфигурации (свойство метаданных -// конфигурации) -// -// Возвращаемое значение: -// Строка. -// Строка содержащая подробную информацию о конфигурации. -// -Функция ПолучитьПодробнуюИнформациюКонфигурации() Экспорт - - Возврат Метаданные.ПодробнаяИнформация; - -КонецФункции - -// Получить представление информационной базы для отображения пользователю. +// Получить представление физического места размещения информационной базы для отображения администратору. // // Возвращаемое значение: -// Строка - Представление информационной базы +// Строка - представление информационной базы // // Пример возвращаемого результата: // - для ИБ в файлом режиме: \\FileServer\1c_ib\ @@ -1534,40 +1553,35 @@ СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы(); Если ИнформационнаяБазаФайловая(СтрокаСоединенияСБД) Тогда - ПутьКБД = Сред(СтрокаСоединенияСБД, 6, СтрДлина(СтрокаСоединенияСБД) - 6); - Иначе - // надо к имени сервера прибавить имя пути информационной базы - ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "SRVR="); - - Если ПозицияПоиска <> 1 Тогда - Возврат Неопределено; - КонецЕсли; - - ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); - НачальнаяПозицияКопирования = 6 + 1; - КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; - - ИмяСервера = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); - - СтрокаСоединенияСБД = Сред(СтрокаСоединенияСБД, ПозицияТочкиСЗапятой + 1); - - // позиция имени сервера - ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "REF="); - - Если ПозицияПоиска <> 1 Тогда - Возврат Неопределено; - КонецЕсли; - - НачальнаяПозицияКопирования = 6; - ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); - КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; - - ИмяИБНаСервере = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); - - ПутьКБД = ИмяСервера + "/ " + ИмяИБНаСервере; + Возврат Сред(СтрокаСоединенияСБД, 6, СтрДлина(СтрокаСоединенияСБД) - 6); + КонецЕсли; + // Прибавить к имени сервера имя пути информационной базы + ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "SRVR="); + Если ПозицияПоиска <> 1 Тогда + Возврат Неопределено; КонецЕсли; + ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); + НачальнаяПозицияКопирования = 6 + 1; + КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; + + ИмяСервера = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); + + СтрокаСоединенияСБД = Сред(СтрокаСоединенияСБД, ПозицияТочкиСЗапятой + 1); + + // Позиция имени сервера + ПозицияПоиска = Найти(Врег(СтрокаСоединенияСБД), "REF="); + Если ПозицияПоиска <> 1 Тогда + Возврат Неопределено; + КонецЕсли; + + НачальнаяПозицияКопирования = 6; + ПозицияТочкиСЗапятой = Найти(СтрокаСоединенияСБД, ";"); + КонечнаяПозицияКопирования = ПозицияТочкиСЗапятой - 2; + + ИмяИБНаСервере = Сред(СтрокаСоединенияСБД, НачальнаяПозицияКопирования, КонечнаяПозицияКопирования - НачальнаяПозицияКопирования + 1); + ПутьКБД = ИмяСервера + "/ " + ИмяИБНаСервере; Возврат ПутьКБД; КонецФункции @@ -1790,7 +1804,7 @@ ТекстЗапроса = " |ВЫБРАТЬ - | Ссылка + | Ссылка КАК Ссылка |ИЗ | [ИмяТаблицы] |ГДЕ @@ -1965,26 +1979,42 @@ КонецФункции -// Является ли объект группой -// В качестве параметра может принимать только справочник или ПВХ +// Проверяет является ли объект группой элементов. +// +// Параметры: +// Объект - Объект, Ссылка, ДанныеФормыСтруктура по типу Объект. +// +// Возвращаемое значение: +// Булево. // Функция ОбъектЯвляетсяГруппой(Объект) Экспорт - МетаданныеОбъекта = Объект.Метаданные(); - - Если ЭтоСправочник(МетаданныеОбъекта) - И НЕ (МетаданныеОбъекта.Иерархический И МетаданныеОбъекта.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов) Тогда - Возврат Ложь; - КонецЕсли; - Если ЗначениеСсылочногоТипа(Объект) Тогда - Возврат Объект.ЭтоГруппа; + Ссылка = Объект; + Иначе + Ссылка = Объект.Ссылка; КонецЕсли; - Ссылка = Объект.Ссылка; + МетаданныеОбъекта = Ссылка.Метаданные(); - Если Не ЗначениеЗаполнено(Ссылка) Тогда + Если ЭтоСправочник(МетаданныеОбъекта) Тогда + + Если НЕ МетаданныеОбъекта.Иерархический + ИЛИ МетаданныеОбъекта.ВидИерархии + <> Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов Тогда + + Возврат Ложь; + КонецЕсли; + + ИначеЕсли НЕ ЭтоПланВидовХарактеристик(МетаданныеОбъекта) Тогда Возврат Ложь; + + ИначеЕсли НЕ МетаданныеОбъекта.Иерархический Тогда + Возврат Ложь; + КонецЕсли; + + Если Ссылка <> Объект Тогда + Возврат Объект.ЭтоГруппа; КонецЕсли; Возврат ПолучитьЗначениеРеквизита(Ссылка, "ЭтоГруппа"); @@ -1999,8 +2029,8 @@ // Идентификатор = ОбщегоНазначения.ИнденификаторОбъектаМетаданных("Справочник.Организации"); // // Поддерживаемые объекты метаданных: -// - Подсистемы (вручную через предопределенные элементы) -// - Роли +// - Подсистемы (требуется программировать переименование) +// - Роли (требуется программировать переименование) // - ПланыОбмена // - Справочники // - Документы @@ -2059,14 +2089,14 @@ Запрос.УстановитьПараметр("ПолноеИмя", Таблица); Запрос.Текст = "ВЫБРАТЬ - | Идентификаторы.Ссылка, + | Идентификаторы.Ссылка КАК Ссылка, | Идентификаторы.КлючОбъектаМетаданных, | Идентификаторы.ПолноеИмя |ИЗ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы |ГДЕ | Идентификаторы.ПолноеИмя = &ПолноеИмя - | И Идентификаторы.Используется"; + | И НЕ Идентификаторы.ПометкаУдаления"; Выгрузка = Запрос.Выполнить().Выгрузить(); Если Выгрузка.Количество() = 0 Тогда @@ -2090,10 +2120,7 @@ |Если справочник не был обновлен при обновлении информационной базы, |следует выполнить обновление вручную: |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"". - | - |Некоторые объекты метаданных могут быть добавлены в справочник только в виде - |предопределенных элементов, например, подсистемы.'"), + |команда формы списка ""Обновить данные справочника"".'"), Таблица); ИначеЕсли Выгрузка.Количество() > 1 Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( @@ -2163,10 +2190,10 @@ Запрос.УстановитьПараметр("Ссылка", Идентификатор); Запрос.Текст = "ВЫБРАТЬ - | Идентификаторы.Ссылка, + | Идентификаторы.Ссылка КАК Ссылка, | Идентификаторы.КлючОбъектаМетаданных, | Идентификаторы.ПолноеИмя, - | Идентификаторы.Используется + | Идентификаторы.ПометкаУдаления |ИЗ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы |ГДЕ @@ -2184,10 +2211,7 @@ |Если справочник не был обновлен при обновлении информационной базы, |следует выполнить обновление вручную: |""Все функции"" -> ""Справочник. Идентификаторы объектов метаданных"" -> - |команда формы списка ""Обновить данные справочника"". - | - |Некоторые объекты метаданных могут быть добавлены в справочник только в виде - |предопределенных элементов, например, подсистемы.'"), + |команда формы списка ""Обновить данные справочника"".'"), Строка(Идентификатор)); КонецЕсли; @@ -2242,13 +2266,13 @@ КонецЕсли; КонецЕсли; - Если НЕ Выгрузка[0].Используется Тогда + Если Выгрузка[0].ПометкаУдаления Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ошибка при выполнении функции ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(). | |Идентификатор ""%1"" |найден в справочнике ""Идентификаторы объектов метаданных"", - |но значение реквизита ""Используется"" установлено Ложь. + |но значение реквизита ""Пометка удаления"" установлено Истина. | |Если справочник не был обновлен при обновлении информационной базы, |следует выполнить обновление вручную: @@ -2262,69 +2286,129 @@ КонецФункции // Только для использования в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- -// ПредустановленныеИдентификаторыОбъектовМетаданных() для описания предустановленых идентификаторов +// ТаблицуПереименованияОбъектовМетаданных() для описания переименований объектов метаданных. // // Параметры: -// Идентификаторы - передается в процедуру подсистемой БазоваяФункциональность -// ИдентификаторВСтроке - Строка - уникальный идентификатор, назначаемый объекту метаданных -// ОбъектМетаданных - ОбъектМетаданных, для которого предустанавливается идентификатор +// Итог - передается в процедуру подсистемой БазоваяФункциональность. +// ВерсияИБ - Строка - версия при переходе на которую нужно выполнить переименование. +// СтароеПолноеИмя - Строка - старое полное имя объекта метаданных, которое нужно переименовать. +// НовоеПолноеИмя - Строка - новое полное имя объекта метаданных, на которое нужно переименовать. +// ИдентификаторБиблиотеки - Строка - внутренний идентификатор библиотеки, к которой относится ВерсияИБ, +// для основной конфигурации не требуется. // -Процедура ДобавитьИдентификатор(Идентификаторы, ИдентификаторВСтроке, ОбъектМетаданных) Экспорт +Процедура ДобавитьПереименование(Итог, ВерсияИБ, СтароеПолноеИмя, НовоеПолноеИмя, ИдентификаторБиблиотеки = "") Экспорт + + СтароеИмяКоллекции = ВРег(ИмяКоллекции(СтароеПолноеИмя)); + НовоеИмяКоллекции = ВРег(ИмяКоллекции(НовоеПолноеИмя)); + + Если СтароеИмяКоллекции <> НовоеИмяКоллекции Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- + |ТаблицуПереименованияОбъектовМетаданных(). + | + |Не совпадают имена типов старого объекта метаданных: + |""%1"" + |и нового объекта метаданных: + |""%2"".'"), + СтароеПолноеИмя, + НовоеПолноеИмя); + КонецЕсли; + + Если Итог.КоллекцииБезКлюча[СтароеИмяКоллекции] = Неопределено Тогда + + СписокДопустимыхТипов = ""; + Для каждого КлючИЗначение Из Итог.КоллекцииБезКлюча Цикл + СписокДопустимыхТипов = СписокДопустимыхТипов + КлючИЗначение.Значение + "," + Символы.ПС; + КонецЦикла; + СписокДопустимыхТипов = СокрП(СписокДопустимыхТипов); + СписокДопустимыхТипов = ?(ЗначениеЗаполнено(СписокДопустимыхТипов), + Лев(СписокДопустимыхТипов, СтрДлина(СписокДопустимыхТипов) - 1), ""); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- + |ТаблицуПереименованияОбъектовМетаданных(). + | + |Объект метаданных ""%1"" и остальные + |объекты метаданных этого типа обновляются автоматически. + | + |Переименование требуется только для следующих типов: + |%2.'"), + СтароеПолноеИмя, + НовоеПолноеИмя, + СписокДопустимыхТипов); + КонецЕсли; + + Если ЗначениеЗаполнено(ИдентификаторБиблиотеки) Тогда + Библиотека = ВРег(ИдентификаторБиблиотеки) <> ВРег(Метаданные.Имя); + Иначе + ИдентификаторБиблиотеки = Метаданные.Имя; + Библиотека = Ложь; + КонецЕсли; + + ПорядокБиблиотеки = Итог.ПорядокБиблиотек[ИдентификаторБиблиотеки]; + Если ПорядокБиблиотеки = Неопределено Тогда + ПорядокБиблиотеки = Итог.ПорядокБиблиотек.Количество(); + Итог.ПорядокБиблиотек.Вставить(ИдентификаторБиблиотеки, ПорядокБиблиотеки); + КонецЕсли; + + ВерсияБиблиотеки = Итог.ВерсииБиблиотек[ИдентификаторБиблиотеки]; + Если ВерсияБиблиотеки = Неопределено Тогда + ВерсияБиблиотеки = ОбновлениеИнформационнойБазы.ВерсияИБ(ИдентификаторБиблиотеки); + Итог.ВерсииБиблиотек.Вставить(ИдентификаторБиблиотеки, ВерсияБиблиотеки); + КонецЕсли; + + Если ВерсияБиблиотеки = "0.0.0.0" Тогда + // При начальном заполнении переименования не требуются. + Возврат; + КонецЕсли; Попытка - Идентификатор = Справочники.ИдентификаторыОбъектовМетаданных.ПолучитьСсылку(Новый УникальныйИдентификатор(ИдентификаторВСтроке)); + Результат = ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияИБ, ВерсияБиблиотеки); Исключение - Идентификатор = Неопределено; + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если Библиотека Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- + |ТаблицуПереименованияОбъектовМетаданных(). + | + |При сравнении укзанной версии ""%1"" + |с текущей версией ""%2"" + |указанной библиотеки ""%3"" + |произошла ошибка: + |""%4"".'"), + ВерсияИБ, + ВерсияБиблиотеки, + ИдентификаторБиблиотеки, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- + |ТаблицуПереименованияОбъектовМетаданных(). + | + |При сравнении укзанной версии ""%1"" + |с текущей версией конфигурации ""%2"" + |произошла ошибка: + |""%3"".'"), + ВерсияИБ, + ВерсияБиблиотеки, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + КонецЕсли; КонецПопытки; - Если ТипЗнч(ОбъектМетаданных) <> Тип("ОбъектМетаданных") Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- - |ПредустановленныеИдентификаторыОбъектовМетаданных() - | - |Для идентификатора ""%1"" не заполнен объект метаданных.'"), - ИдентификаторВСтроке); + Если Результат > 0 Тогда + ЧастиВерсии = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ВерсияИБ, "."); + + ОписаниеПереименования = Итог.Таблица.Добавить(); + ОписаниеПереименования.ПорядокБиблиотеки = ПорядокБиблиотеки; + ОписаниеПереименования.ВерсияЧасть1 = Число(ЧастиВерсии[0]); + ОписаниеПереименования.ВерсияЧасть2 = Число(ЧастиВерсии[1]); + ОписаниеПереименования.ВерсияЧасть3 = Число(ЧастиВерсии[2]); + ОписаниеПереименования.ВерсияЧасть4 = Число(ЧастиВерсии[3]); + ОписаниеПереименования.СтароеПолноеИмя = СтароеПолноеИмя; + ОписаниеПереименования.НовоеПолноеИмя = НовоеПолноеИмя; + ОписаниеПереименования.ПорядокДобавления = Итог.Таблица.Индекс(ОписаниеПереименования); КонецЕсли; - ПолноеИмя = ОбъектМетаданных.ПолноеИмя(); - - Если НЕ ЗначениеЗаполнено(Идентификатор) Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- - |ПредустановленныеИдентификаторыОбъектовМетаданных() - | - |Ошбика в строке идентификатора ""%1"", - |заданного для объекта метаданных - |""%2"".'"), - ИдентификаторВСтроке, - ПолноеИмя); - КонецЕсли; - - Если Идентификаторы.Найти(ПолноеИмя, "ПолноеИмя") <> Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- - |ПредустановленныеИдентификаторыОбъектовМетаданных() - | - |Для объекта метаданных ""%1"" - |идентификатор уже задан.'"), - ПолноеИмя); - КонецЕсли; - - Если Идентификаторы.Найти(Идентификатор, "Идентификатор") <> Неопределено Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка в процедуре ОбщегоНазначенияПереопределяемый.Заполнить- - |ПредустановленныеИдентификаторыОбъектовМетаданных() - | - |Идентификатор ""%1"" уже задан - |для объекта метаданных ""%2"".'"), - ИдентификаторВСтроке, - ПолноеИмя); - КонецЕсли; - - ОписаниеИдентификатора = Идентификаторы.Добавить(); - ОписаниеИдентификатора.ПолноеИмя = ПолноеИмя; - ОписаниеИдентификатора.Идентификатор = Идентификатор; - КонецПроцедуры // Возвращает строковое представление типа. @@ -2494,15 +2578,10 @@ Функция ЭтоСтандартныйРеквизит(СтандартныеРеквизиты, ИмяРеквизита) Экспорт Для Каждого Реквизит ИЗ СтандартныеРеквизиты Цикл - Если Реквизит.Имя = ИмяРеквизита Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; КонецФункции @@ -2528,23 +2607,17 @@ // добавляем в таблицу поля согласно именам переданных свойств Для Каждого ИмяСвойства ИЗ МассивСвойств Цикл - ТаблицаОписанияСвойствОбъекта.Колонки.Добавить(СокрЛП(ИмяСвойства)); - КонецЦикла; // заполняем строку таблицы свойствами реквизитов объекта метаданных Для Каждого Реквизит ИЗ ОбъектМетаданных.Реквизиты Цикл - ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); - КонецЦикла; // заполняем строку таблицы свойствами стандартных реквизитов объекта метаданных Для Каждого Реквизит ИЗ ОбъектМетаданных.СтандартныеРеквизиты Цикл - ЗаполнитьЗначенияСвойств(ТаблицаОписанияСвойствОбъекта.Добавить(), Реквизит); - КонецЦикла; Возврат ТаблицаОписанияСвойствОбъекта; @@ -3400,55 +3473,64 @@ КонецПроцедуры -// Процедура ведения в журнале регистрации событий +// Включить запись уровней событий СписокУровней в журнале регистрации. +// +// Параметры: УровниСобытий - СписокЗначений - наименования уровней регистрации событий, +// которые необходимо включить // -// Параметры: СписокУровней - список значений, -// Наименования уровней регистрации событий, которые необходимо включить Процедура ВключитьИспользованиеЖурналаРегистрации(СписокУровней = Неопределено) Экспорт - УстановитьПривилегированныйРежим(Истина); + + МассивУровней = Новый Массив(); + Если СписокУровней = Неопределено Тогда + МассивУровней.Добавить(УровеньЖурналаРегистрации.Информация); + МассивУровней.Добавить(УровеньЖурналаРегистрации.Ошибка); + МассивУровней.Добавить(УровеньЖурналаРегистрации.Предупреждение); + МассивУровней.Добавить(УровеньЖурналаРегистрации.Примечание); + Иначе + МассивУровней = УровниСобытияЖурналаРегистрацииПоСтроке(СписокУровней); + КонецЕсли; + + МонопольныйРежимУстановленРанее = МонопольныйРежим(); + УстановитьМонопольныйРежим(Истина); + Попытка - УстановитьМонопольныйРежим(Истина); - МассивУровней = Новый Массив(); - - Если СписокУровней = Неопределено Тогда - МассивУровней.Добавить(УровеньЖурналаРегистрации.Информация); - МассивУровней.Добавить(УровеньЖурналаРегистрации.Ошибка); - МассивУровней.Добавить(УровеньЖурналаРегистрации.Предупреждение); - МассивУровней.Добавить(УровеньЖурналаРегистрации.Примечание); - Иначе - МассивУровней = УровниСобытияЖурналаРегистрацииПоСтроке(СписокУровней); - КонецЕсли; - - УстановитьИспользованиеЖурналаРегистрации(МассивУровней); - УстановитьМонопольныйРежим(Ложь); + УстановитьИспользованиеЖурналаРегистрации(МассивУровней); Исключение - УстановитьПривилегированныйРежим(Ложь); - ВызватьИсключение + Если Не МонопольныйРежимУстановленРанее Тогда + УстановитьМонопольныйРежим(Ложь); + КонецЕсли; + ВызватьИсключение; КонецПопытки; - УстановитьПривилегированныйРежим(Ложь); + КонецПроцедуры -// Проверяет, включена ли регистрация событий в журнале регистрации +// Проверяет, включена ли регистрация событий УровниСобытий в журнале регистрации. // // Параметры: -// СписокПроверок - СписокЗначений, список строк-представлений режимов использования журнала регистрации, которые надо проверить на включение. -// Если Неопределено - тогда проверяются все режимы. +// УровниСобытий - СписокЗначений - список строк с уровнями регистрации событий журнала регистрации, +// для которых необходимо проверить, что они включены. +// Если Неопределено, то проверяются все уровни событий. // -// Возвращаемое значение: Истина, когда заданные режимы включены. Иначе - ложь. -Функция ПроверитьВключениеЖурналаРегистрации(СписокПроверок = Неопределено) Экспорт - МассивРежимов = ПолучитьИспользованиеЖурналаРегистрации(); - Если СписокПроверок = Неопределено Тогда - Возврат МассивРежимов.Количество() = 4 ; - Иначе - МассивНазванийРежимов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СписокПроверок); - Для Каждого Название Из МассивНазванийРежимов Цикл - ТекущийПроверяемыйРежим = УровеньСобытияПоПредставлению(Название); - Если МассивРежимов.Найти(ТекущийПроверяемыйРежим) = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; +// Возвращаемое значение: +// Булево - Истина, когда заданные режимы включены. Иначе - Ложь. +// +Функция ПроверитьВключениеЖурналаРегистрации(УровниСобытий = Неопределено) Экспорт + + УстановленныеУровниСобытий = ПолучитьИспользованиеЖурналаРегистрации(); + Если УровниСобытий = Неопределено Тогда + Возврат УстановленныеУровниСобытий.Количество() = 4; // включены все уровни событий? КонецЕсли; + + ИменаУровнейСобытий = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(УровниСобытий); + Для Каждого Название Из ИменаУровнейСобытий Цикл + УровеньСобытия = УровеньСобытияПоПредставлению(Название); + Если УстановленныеУровниСобытий.Найти(УровеньСобытия) = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + Возврат Истина; + КонецФункции //////////////////////////////////////////////////////////////////////////////// @@ -3462,7 +3544,13 @@ // // В других случаях (например, в локальном режиме работы) устанавливает монопольный режим. // -Процедура ЗаблокироватьИБ() Экспорт +// Параметры: +// ПроверитьОтсутствиеДругихСеансов - Булево - проверить отсутствие других +// пользовательских сеансов со значением разделителя равным текущему. +// В случае обнаружения других сеансов будет выдано исключение. +// Параметр используется только при работе в модели сервиса. +// +Процедура ЗаблокироватьИБ(Знач ПроверитьОтсутствиеДругихСеансов = Истина) Экспорт Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() ИЛИ НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда @@ -3471,7 +3559,7 @@ УстановитьМонопольныйРежим(Истина); КонецЕсли; Иначе - СтандартныеПодсистемыПереопределяемый.ЗаблокироватьТекущуюОбластьДанных(); + СтандартныеПодсистемыПереопределяемый.ЗаблокироватьТекущуюОбластьДанных(ПроверитьОтсутствиеДругихСеансов); КонецЕсли; КонецПроцедуры @@ -3499,6 +3587,12 @@ КонецПроцедуры +// Устанавливает разделение сеанса. +// +// Параметры: +// Использование - Булево - Использование разделителя ОбластьДанных в сеансе +// ОбластьДанных - Число - Значение разделителя ОбластьДанных +// Процедура УстановитьРазделениеСеанса(Знач Использование, Знач ОбластьДанных = Неопределено) Экспорт СтандартныеПодсистемыПереопределяемый.УстановитьРазделениеСеанса(Использование, ОбластьДанных); @@ -3522,6 +3616,11 @@ КонецФункции +// Возвращает флаг использования разделителя ОбластьДанных для текущего сеанса. +// +// Возвращаемое значение: +// Булево - Истина разделение используется, иначе нет. +// Функция ИспользованиеРазделителяСеанса() Экспорт Возврат СтандартныеПодсистемыПереопределяемый.ИспользованиеРазделителяСеанса(); @@ -3537,7 +3636,11 @@ Процедура УстановитьПараметрыРазделенияИнформационныйБазы(Знач ВключитьРазделение = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); - Константы.ИспользоватьРазделениеПоОбластямДанных.Установить(ВключитьРазделение); + Если ВключитьРазделение Тогда + Константы.ИспользоватьРазделениеПоОбластямДанных.Установить(Истина); + Иначе + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина); + КонецЕсли; КонецПроцедуры @@ -3570,16 +3673,22 @@ ///////////////////////////////////////////////////////////////////////////////// // Версионирование программных интерфейсов -// // Возвращает массив номеров версий, поддерживаемых интерфейсом удаленной системы. // // Параметры: -// ПараметрыПодключения - Структура: +// ПараметрыПодключения - Структура: // - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. // - UserName - Строка - Имя пользователя сервиса. // - Password - Строка - Пароль пользователя сервиса. -// ИмяИнтерфейса - Строка. +// ИмяИнтерфейса - Строка. +// +// Параметры: +// Адрес - Строка - адрес web-сервиса версионирования интерфейсовв +// Пользователь - Строка - имя пользователя +// Пароль - Строка - пароль пользователя +// Интерфейс - Строка - имя интерфейса +// // // Возвращаемое значение: // ФиксированныйМассив - Массив строк: @@ -3591,12 +3700,23 @@ // ПараметрыПодключения.Вставить("UserName", "ivanov"); // МассивВерсий = ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "СервисПередачиФайлов"); // -// Примечание: при получении версий используется кэш, время обновления которого составляется -// составляется одни сутки. Если для целей отладки требуется обновить -// значения в кэше, раньше этого времени, следует удалить из регистра сведений -// КэшПрограммныхИнтерфейсов соответствующие записи. +// Примечание: при получении версий используется кэш, время обновления которого составляет +// одни сутки. Если для целей отладки требуется обновить значения в кэше, раньше этого +// времени, следует удалить из регистра сведений КэшПрограммныхИнтерфейсов соответствующие +// записи. // -Функция ПолучитьВерсииИнтерфейса(Знач ПараметрыПодключения, Знач ИмяИнтерфейса) Экспорт +Функция ПолучитьВерсииИнтерфейса(Знач Адрес, Знач Пользователь, Знач Пароль = Неопределено, Знач Интерфейс = Неопределено) Экспорт + + Если ТипЗнч(Адрес) = Тип("Структура") Тогда + ПараметрыПодключения = Адрес; + ИмяИнтерфейса = Пользователь; + Иначе + ПараметрыПодключения = Новый Структура; + ПараметрыПодключения.Вставить("URL", Адрес); + ПараметрыПодключения.Вставить("UserName", Пользователь); + ПараметрыПодключения.Вставить("Password", Пароль); + ИмяИнтерфейса = Интерфейс; + КонецЕсли; Если Не ПараметрыПодключения.Свойство("URL") Или Не ЗначениеЗаполнено(ПараметрыПодключения.URL) Тогда @@ -3661,30 +3781,35 @@ НачатьТранзакцию(); - Блокировка = Новый БлокировкаДанных; - Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов"); - Блокировка.Заблокировать(); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | КэшПрограммныхИнтерфейсов.Идентификатор КАК Идентификатор, - | КэшПрограммныхИнтерфейсов.ТипДанных КАК ТипДанных - |ИЗ - | РегистрСведений.КэшПрограммныхИнтерфейсов КАК КэшПрограммныхИнтерфейсов - |ГДЕ - | КэшПрограммныхИнтерфейсов.Идентификатор ПОДОБНО ""%" + СформироватьСтрокуДляПоискаВЗапросе(ПодстрокаПоискаИдентификаторов) + "%"" - | СПЕЦСИМВОЛ ""~"""; - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - Запись = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьМенеджерЗаписи(); - Запись.Идентификатор = Выборка.Идентификатор; - Запись.ТипДанных = Выборка.ТипДанных; - Запись.Удалить(); - КонецЦикла; - - ЗафиксироватьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов"); + Блокировка.Заблокировать(); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КэшПрограммныхИнтерфейсов.Идентификатор КАК Идентификатор, + | КэшПрограммныхИнтерфейсов.ТипДанных КАК ТипДанных + |ИЗ + | РегистрСведений.КэшПрограммныхИнтерфейсов КАК КэшПрограммныхИнтерфейсов + |ГДЕ + | КэшПрограммныхИнтерфейсов.Идентификатор ПОДОБНО ""%" + СформироватьСтрокуДляПоискаВЗапросе(ПодстрокаПоискаИдентификаторов) + "%"" + | СПЕЦСИМВОЛ ""~"""; + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + Запись = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьМенеджерЗаписи(); + Запись.Идентификатор = Выборка.Идентификатор; + Запись.ТипДанных = Выборка.ТипДанных; + Запись.Удалить(); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -3743,43 +3868,49 @@ НачатьТранзакцию(); - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов"); - ЭлементБлокировки.УстановитьЗначение("Идентификатор", Идентификатор); - ЭлементБлокировки.УстановитьЗначение("ТипДанных", ТипДанных); - Блокировка.Заблокировать(); + Попытка - Результат = Запрос.Выполнить(); - - // Убедимся что данные требуют обновления - Если НЕ Результат.Пустой() Тогда - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Если НЕ ЗаписьКэшаВерсийУстарела(Выборка) Тогда - // Данные актуальны - ОтменитьТранзакцию(); - Возврат; + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.КэшПрограммныхИнтерфейсов"); + ЭлементБлокировки.УстановитьЗначение("Идентификатор", Идентификатор); + ЭлементБлокировки.УстановитьЗначение("ТипДанных", ТипДанных); + Блокировка.Заблокировать(); + + Результат = Запрос.Выполнить(); + + // Убедимся что данные требуют обновления + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Если НЕ ЗаписьКэшаВерсийУстарела(Выборка) Тогда + // Данные актуальны + ОтменитьТранзакцию(); + Возврат; + КонецЕсли; КонецЕсли; - КонецЕсли; - - Если ТипДанных = Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ВерсииИнтерфейса Тогда - Данные = ПолучитьВерсииИнтерфейсаВКэш(ПараметрыПолучения[0], ПараметрыПолучения[1]); - ИначеЕсли ТипДанных = Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ОписаниеWebСервиса Тогда - Данные = ПолучитьWSDL(ПараметрыПолучения[0], ПараметрыПолучения[1], ПараметрыПолучения[2]); - Иначе - ШаблонТекста = НСтр("ru = 'Не известный тип данных кэша версий: %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, ТипДанных); - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - - МенеджерЗаписи = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.Идентификатор = Идентификатор; - МенеджерЗаписи.ТипДанных = ТипДанных; - МенеджерЗаписи.ДатаОбновления = ТекущаяУниверсальнаяДата(); - МенеджерЗаписи.Данные = Новый ХранилищеЗначения(Данные); - МенеджерЗаписи.Записать(); - - ЗафиксироватьТранзакцию(); + + Если ТипДанных = Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ВерсииИнтерфейса Тогда + Данные = ПолучитьВерсииИнтерфейсаВКэш(ПараметрыПолучения[0], ПараметрыПолучения[1]); + ИначеЕсли ТипДанных = Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ОписаниеWebСервиса Тогда + Данные = ПолучитьWSDL(ПараметрыПолучения[0], ПараметрыПолучения[1], ПараметрыПолучения[2]); + Иначе + ШаблонТекста = НСтр("ru = 'Не известный тип данных кэша версий: %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста, ТипДанных); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений.КэшПрограммныхИнтерфейсов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.Идентификатор = Идентификатор; + МенеджерЗаписи.ТипДанных = ТипДанных; + МенеджерЗаписи.ДатаОбновления = ТекущаяУниверсальнаяДата(); + МенеджерЗаписи.Данные = Новый ХранилищеЗначения(Данные); + МенеджерЗаписи.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; КонецПроцедуры @@ -3801,8 +3932,6 @@ Функция ПолучитьВерсииИнтерфейсаВКэш(Знач ПараметрыПодключения, Знач ИмяИнтерфейса) - СтандартныеПодсистемыПереопределяемый.ПреобразоватьПараметрыПодключенияКСервису(ПараметрыПодключения, ИмяИнтерфейса); - Если Не ПараметрыПодключения.Свойство("URL") Или Не ЗначениеЗаполнено(ПараметрыПодключения.URL) Тогда @@ -3827,8 +3956,8 @@ АдресСервиса = ПараметрыПодключения.URL + "/ws/InterfaceVersion?wsdl"; - ПроксиВерсионирования = ОбщегоНазначенияПовтИсп.ПолучитьWSПрокси(АдресСервиса, "http://www.1c.ru/SaaS/1.0/WS", - "InterfaceVersion", , ИмяПользователя, ПарольПользователя); + ПроксиВерсионирования = WSПрокси(АдресСервиса, "http://www.1c.ru/SaaS/1.0/WS", + "InterfaceVersion", , ИмяПользователя, ПарольПользователя, 3); МассивXDTO = ПроксиВерсионирования.GetVersions(ИмяИнтерфейса); Если МассивXDTO = Неопределено Тогда @@ -3847,6 +3976,7 @@ ПараметрыПолучения.Вставить("Пользователь", ИмяПользователя); ПараметрыПолучения.Вставить("Пароль", Пароль); КонецЕсли; + ПараметрыПолучения.Вставить("Таймаут", 15); ОписаниеФайла = Неопределено; СтандартныеПодсистемыПереопределяемый.СкачатьФайлНаСервере(Адрес, ПараметрыПолучения, ОписаниеФайла); @@ -3873,10 +4003,130 @@ Попытка УдалитьФайлы(ОписаниеФайла.Путь); Исключение - ЗаписьЖурналаРегистрации("УдалениеВременныхФайлов", УровеньЖурналаРегистрации.Ошибка, , , + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение WSDL'"), УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат ДанныеФайла; КонецФункции + +Функция ПлатформаПоддерживаетТаймаутыСети() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, "8.2.16.0") >= 0; + +КонецФункции + +// Функция возвращает объект WSОпределения созданный с переданными параметрами. +// +// Параметры: +// АдресWSDL - Строка - местораположение wsdl +// ИмяПользователя - Строка - имя пользователя для входа на сервер +// Пароль - Строка - пароль пользователя +// +// Примечание: при получении определения используется кэш, обновление которого осуществляется +// при смене версии конфигурации. Если для целей отладки требуется обновить +// значения в кэше, раньше этого времени, следует удалить из регистра сведений +// КэшПрограммныхИнтерфейсов соответствующие записи. +// +Функция WSОпределения(Знач АдресWSDL, Знач ИмяПользователя, Знач Пароль) Экспорт + + ДоступноПолучениеФайловИзИнтернета = Неопределено; + СтандартныеПодсистемыПереопределяемый.ДоступноПолучениеФайловИзИнтернета(ДоступноПолучениеФайловИзИнтернета); + Если ДоступноПолучениеФайловИзИнтернета = Истина Тогда + + ПараметрыПолучения = Новый Массив; + ПараметрыПолучения.Добавить(АдресWSDL); + ПараметрыПолучения.Добавить(ИмяПользователя); + ПараметрыПолучения.Добавить(Пароль); + + ДанныеWSDL = ОбщегоНазначенияПовтИсп.ПолучитьДанныеКэшаВерсий( + АдресWSDL, + Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ОписаниеWebСервиса, + ЗначениеВСтрокуXML(ПараметрыПолучения), + Ложь); + + ИмяФайлаWSDL = ПолучитьИмяВременногоФайла("wsdl"); + + ДанныеWSDL.Записать(ИмяФайлаWSDL); + + Определения = Новый WSОпределения(ИмяФайлаWSDL); + + Попытка + УдалитьФайлы(ИмяФайлаWSDL); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение WSDL'"), УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Возврат Определения; + + Иначе + + Параметры = Новый Массив; + Параметры.Добавить(АдресWSDL); + Параметры.Добавить(ИмяПользователя); + Параметры.Добавить(Пароль); + + Если ПлатформаПоддерживаетТаймаутыСети() Тогда + Параметры.Добавить(15); + КонецЕсли; + + Возврат Новый(Тип("WSОпределения"), Параметры); + + КонецЕсли; + +КонецФункции + +// Функция возвращает объект WSПрокси созданный с переданными параметрами. +// +// Параметры: +// АдресWSDL - Строка - местораположение wsdl +// URIПространстваИмен - Строка - URI пространства имен web-сервиса +// ИмяСервиса - Строка - имя сервиса +// ИмяТочкиПодключения - Строка - если не задано, образуется как <ИмяСервиса>Soap +// ИмяПользователя - Строка - имя пользователя для входа на сервер +// Пароль - Строка - пароль пользователя +// Таймаут - Число - таймаут на операции выполняемые через полученное прокси +// +// Возвращаемое значение: +// WSПрокси +// +Функция ВнутренняяWSПрокси(Знач АдресWSDL, Знач URIПространстваИмен, Знач ИмяСервиса, + Знач ИмяТочкиПодключения = "", Знач ИмяПользователя, Знач Пароль, + Знач Таймаут = Неопределено) Экспорт + + WSОпределения = ОбщегоНазначенияПовтИсп.WSОпределения(АдресWSDL, ИмяПользователя, Пароль); + + Если ПустаяСтрока(ИмяТочкиПодключения) Тогда + ИмяТочкиПодключения = ИмяСервиса + "Soap"; + КонецЕсли; + + Параметры = Новый Массив; + Параметры.Добавить(WSОпределения); + Параметры.Добавить(URIПространстваИмен); + Параметры.Добавить(ИмяСервиса); + Параметры.Добавить(ИмяТочкиПодключения); + Если ПлатформаПоддерживаетТаймаутыСети() Тогда + Параметры.Добавить(Таймаут); + КонецЕсли; + + Прокси = Новый(Тип("WSПрокси"), Параметры); + Прокси.Пользователь = ИмяПользователя; + Прокси.Пароль = Пароль; + + Возврат Прокси; +КонецФункции + +Функция ИмяКоллекции(ПолноеИмя) + + ПозицияТочки = Найти(ПолноеИмя, "."); + + Если ПозицияТочки > 0 Тогда + Возврат Лев(ПолноеИмя, ПозицияТочки - 1); + КонецЕсли; + + Возврат ""; + +КонецФункции diff --git a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервераПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервераПереопределяемый/Module.bsl new file mode 100644 index 000000000..f274c7206 --- /dev/null +++ b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервераПереопределяемый/Module.bsl @@ -0,0 +1,63 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Базовая функциональность". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает структуру параметров, необходимых для работы клиентского кода +// при запуске конфигурации, т.е. в обработчиках событий +// - ПередНачаломРаботыСистемы, +// - ПриНачалеРаботыСистемы +// +// Важно: при запуске недопустимо использовать команды сброса кэша +// повторно используемых модулей, иначе запуск может привести +// к непредсказуемым ошибкам и лишним серверным вызовам +// +// Пример реализации: +// Для установки параметров работы клиента можно использовать шаблон: +// +// Параметры.Вставить(<ИмяПараметра>, <код получения значения параметра>); +// +// Возвращаемое значение: +// Структура - структура параметров работы клиента при запуске. +// +Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт + + Параметры = Новый Структура(); + + Возврат Параметры; + +КонецФункции + +// Возвращает структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Пример реализации: +// Для установки параметров работы клиента можно использовать шаблон: +// +// Параметры.Вставить(<ИмяПараметра>, <код получения значения параметра>); +// +// Возвращаемое значение: +// Структура - структура параметров работы клиента. +// +Функция ПараметрыРаботыКлиента() Экспорт + + Параметры = Новый Структура(); + + Возврат Параметры; + +КонецФункции + +// Вызывается при необходимости переопределить минимально необходимую версию платформы для запуска. +// +// Параметры: +// ПараметрыПроверки - ФиксированнаяСтруктура - +// МинимальноНеобходимаяВерсияПлатформы - Строка - номер версии платформы для запуска программы +// РаботаВПрограммеЗапрещена - Булево - по умолчанию Ложь +// +Процедура ПолучитьМинимальноНеобходимуюВерсиюПлатформы(ПараметрыПроверки) Экспорт + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/ОбщегоНазначенияВызовСервераПереопределяемый/ОбщегоНазначенияВызовСервераПереопределяемый.mdo b/SSL/src/CommonModules/ОбщегоНазначенияВызовСервераПереопределяемый/ОбщегоНазначенияВызовСервераПереопределяемый.mdo new file mode 100644 index 000000000..a81da4734 --- /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 5e8a803c7..728cd1640 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиент/Module.bsl @@ -198,68 +198,36 @@ // // далее идет код, использующий менеджер COM-соединений (V82.COMConnector) // // ... // -Процедура ЗарегистрироватьCOMСоединитель() Экспорт +Процедура ЗарегистрироватьCOMСоединитель(ВыполнитьПерезагрузкуСеанса = Ложь) Экспорт + #Если НЕ ВебКлиент Тогда - ТекстКоманды = ""; - Попытка - ИмяБатФайла = ПолучитьИмяВременногоФайла("bat"); - ИмяФайлаЛога = ПолучитьИмяВременногоФайла("log"); - БатФайл = Новый ЗаписьТекста(ИмяБатФайла); - ТекстКоманды = "echo off - |""regsvr32.exe"" /n /i:user /s ""%1comcntr.dll"" - | echo %2 >>""%3"""; - ТекстКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстКоманды,КаталогПрограммы(),"%errorlevel%",ИмяФайлаЛога); - БатФайл.ЗаписатьСтроку(ТекстКоманды); - БатФайл.Закрыть(); - Shell = Новый COMОбъект("WScript.Shell"); - Shell.Run(ИмяБатФайла, 0, Истина); // запуск бат-файла со спрятанным окном (0) и с ожиданием завершения (Истина) - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС; - ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Регистрация компоненты comcntr'"), "Ошибка", - ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Предупреждение(ТекстСообщения + НСтр("ru = 'Подробности см. в Журнале регистрации.'")); - Возврат; - КонецПопытки; - - Стр = ""; - Попытка - УдалитьФайлы(ИмяБатФайла); - ФайлЛога = Новый ЧтениеТекста(ИмяФайлаЛога); - Стр = ФайлЛога.ПрочитатьСтроку(); - ФайлЛога.Закрыть(); - УдалитьФайлы(ИмяФайлаЛога); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС; - ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Регистрация компоненты comcntr'"), "Ошибка", - ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Предупреждение(ТекстСообщения + НСтр("ru = 'Подробности см. в Журнале регистрации.'")); - Возврат; - КонецПопытки; + + ТекстКоманды = "regsvr32.exe /n /i:user /s comcntr.dll"; - Если СокрЛП(Стр) <> "0" Тогда - ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС; - ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Регистрация компоненты comcntr'"), "Ошибка",ТекстСообщения + - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Код ошибки regsvr32: %1. - | (Код ошибки 5 означает, что недостаточно прав доступа. Выполните команду от имени пользователя с правами администратора на локальной машине.) - | - |Текст команды: - |%2'"), Стр, ТекстКоманды)); - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Предупреждение(ТекстСообщения + НСтр("ru = ' - |Подробности см. в Журнале регистрации.'")); - Возврат; - КонецЕсли; - - Ответ = Вопрос(НСтр("ru = 'Для завершения перерегистрации компоненты comcntr необходимо перезапустить сеанс 1С:Предприятия. - |Перезапустить сейчас?'"), РежимДиалогаВопрос.ДаНет); - Если Ответ = КодВозвратаДиалога.Да Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Истина, Истина); - КонецЕсли; + КодВозврата = Неопределено; + ЗапуститьПриложение(ТекстКоманды, КаталогПрограммы(), Истина, КодВозврата); + + Если КодВозврата = Неопределено Или Кодвозврата > 0 Тогда + + ТекстСообщения = НСтр("ru = 'Ошибка при регистрации компоненты comcntr.'") + Символы.ПС + + НСтр("ru = 'Код ошибки regsvr32:'") + " " + КодВозврата; + + Если КодВозврата = 5 Тогда + ТекстСообщения = ТекстСообщения + " " + НСтр("ru = 'Недостаточно прав доступа.'"); + КонецЕсли; + + ДобавитьСообщениеДляЖурналаРегистрации(НСтр("ru = 'Регистрация компоненты comcntr'"), "Ошибка", ТекстСообщения); + ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); + Предупреждение(ТекстСообщения + Символы.ПС + НСтр("ru = 'Подробности см. в Журнале регистрации.'")); + ИначеЕсли ВыполнитьПерезагрузкуСеанса Тогда + Ответ = Вопрос(НСтр("ru = 'Для завершения перерегистрации компоненты comcntr необходимо перезапустить сеанс 1С:Предприятия. + |Перезапустить сейчас?'"), РежимДиалогаВопрос.ДаНет); + Если Ответ = КодВозвратаДиалога.Да Тогда + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + ЗавершитьРаботуСистемы(Истина, Истина); + КонецЕсли; + КонецЕсли; + #КонецЕсли КонецПроцедуры diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl index 9027acd41..3440c27a5 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентПереопределяемый/Module.bsl @@ -33,6 +33,24 @@ КонецПроцедуры +// Обработать параметры запуска программы. +// Реализация функции может быть расширена для обработки новых параметров. +// +// Параметры +// ЗначениеПараметраЗапуска - Строка - первое значение параметра запуска, +// до первого символа ";" +// ПараметрыЗапуска – Строка – параметр запуска, переданный в конфигурацию +// с помощью ключа командной строки /C. +// +// Возвращаемое значение: +// Булево – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. +// +Функция ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска) Экспорт + + Возврат Ложь; + +КонецФункции + // Соответствует обработчику ПередЗавершениемРаботыСистемы. // Процедура ПередЗавершениемРаботыСистемы(Отказ) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl index b4895ba02..fb1175445 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияКлиентСервер/Module.bsl @@ -738,44 +738,6 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Функции для поддержки формирования печатных форм -// - -// Возвращает заголовок документа в том виде, в котором его формирует платформа для представления ссылки на документ. -// -// Параметры -// Шапка - Структура с ключами -// Номер - строка или число - номер документа -// Дата - дата - дата документа -// НазваниеДокумента - Строка - название документа (например, синоним объекта метаданных) -// -// Возвращаемое значение -// Строка - заголовок документа -// -Функция СформироватьЗаголовокДокумента(Шапка, знач НазваниеДокумента = "") Экспорт - - // Если название документа не передано, получим название по представлению документа - Если НазваниеДокумента = "" И Шапка.Свойство("Представление") И ЗначениеЗаполнено(Шапка.Представление) Тогда - ПоложениеНомера = Найти(Шапка.Представление, Шапка.Номер); - Если ПоложениеНомера > 0 Тогда - НазваниеДокумента = СокрЛП(Лев(Шапка.Представление, ПоложениеНомера - 1)); - КонецЕсли; - КонецЕсли; - - НомерНаПечать = Шапка.Номер; - СтандартнаяОбработка = Истина; - СтандартныеПодсистемыКлиентСерверПереопределяемый.ПолучитьНомерНаПечать(НомерНаПечать, СтандартнаяОбработка); - Если СтандартнаяОбработка Тогда - НомерНаПечать = Шапка.Номер; - КонецЕсли; - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 № %2 от %3'"), - НазваниеДокумента, НомерНаПечать, Формат(Шапка.Дата, "ДФ='дд ММММ гггг'")); - -КонецФункции - //////////////////////////////////////////////////////////////////////////////// // Функции для работы с файлами // @@ -838,24 +800,6 @@ КонецФункции -// добавляет в конце "\" или "/" -Процедура ДобавитьСлешЕслиНужно(НовыйПуть, ТипПлатформыТекущий) Экспорт - - Если СтрДлина(НовыйПуть) = 0 Тогда - Возврат; - КонецЕсли; - - Если Прав(НовыйПуть, 1) <> "\" И Прав(НовыйПуть,1) <> "/" Тогда - - Если ТипПлатформыТекущий = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыТекущий = ТипПлатформы.Windows_x86_64 Тогда - НовыйПуть = НовыйПуть + "\"; - Иначе - НовыйПуть = НовыйПуть + "/"; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - // Составляет полное имя файла из имени каталога и имени файла. // // Параметры @@ -1007,17 +951,38 @@ // Возвращаемое значение: // Строка - имя файла в котором недопустимые символы заменены. // -Функция ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла, НаЧтоМенять = " ") Экспорт +Функция ЗаменитьНедопустимыеСимволыВИмениФайла(Знач ИмяФайла, НаЧтоМенять = " ") Экспорт - МассивНайденныхНедопустимыхСимволов = НайтиНедопустимыеСимволыВИмениФайла(ИмяФайла); + Результат = ИмяФайла; + МассивНайденныхНедопустимыхСимволов = НайтиНедопустимыеСимволыВИмениФайла(Результат); Для Каждого НедопустимыйСимвол Из МассивНайденныхНедопустимыхСимволов Цикл - ИмяФайла = СтрЗаменить(ИмяФайла,НедопустимыйСимвол,НаЧтоМенять); + Результат = СтрЗаменить(Результат, НедопустимыйСимвол, НаЧтоМенять); КонецЦикла; - Возврат ИмяФайла; + Возврат Результат; КонецФункции +// Преобразует расширение файла в нижний регистр без точки. +// +// Параметры: +// Расширение - Строка. Расширение для преобразования. +// +// Возвращаемое значение: +// Строка. +// +Функция РасширениеБезТочки(Знач Расширение) Экспорт + + Расширение = НРег(СокрЛП(Расширение)); + + Если Сред(Расширение, 1, 1) = "." Тогда + Расширение = Сред(Расширение, 2); + КонецЕсли; + + Возврат Расширение; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Функции для работы с почтовыми адресами // @@ -1369,7 +1334,11 @@ // ТипГруппы - ТипГруппыЭлементовОтбораКомпоновкиДанных - тип группы // Представление строка - представление группы // -Функция СоздатьГруппуЭлементовОтбора(КоллекцияЭлементов, Представление, ТипГруппы) Экспорт +Функция СоздатьГруппуЭлементовОтбора(Знач КоллекцияЭлементов, Представление, ТипГруппы) Экспорт + + Если ТипЗнч(КоллекцияЭлементов) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда + КоллекцияЭлементов = КоллекцияЭлементов.Элементы; + КонецЕсли; ГруппаЭлементовОтбора = НайтиЭлементОтбораПоПредставлению(КоллекцияЭлементов, Представление); Если ГруппаЭлементовОтбора = Неопределено Тогда @@ -1678,6 +1647,26 @@ Возврат Результат; КонецФункции +// Для файлового режима работы возвращает полное имя каталога, в котором расположена информационная база. +// Если режим работы клиент-серверный, то возвращается пустая строка. +// +// Параметры: +// Нет. +// +// Возвращаемое значение: +// Тип: Строка. Полное имя каталога, в котором расположена файловая информационная база. +// +Функция КаталогФайловойИнформационнойБазы() Экспорт + + ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединенияИнформационнойБазы()); + + Если ПараметрыСоединения.Свойство("File") Тогда + Возврат ПараметрыСоединения.File; + КонецЕсли; + + Возврат ""; +КонецФункции + // Получает идентификатор (метод ПолучитьИдентификатор()) строки дерева значений для заданного значения поля строки дерева. // Используется для позиционирования курсора в иерархических списках. // diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl index d378fa9e2..5b5a2f161 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/Module.bsl @@ -6,53 +6,6 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Возвращает список имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, -// но при этом эти ссылки не должны учитываться в бизнес-логике приложения. -// -// Пример: -// Для документ "Реализация товаров и услуг" настроена подсистема версионирования объектов, -// и подсистема свойств. При этом на экземпляр документа может быть множество ссылок -// в информационной базе (из других документов, регистров). Часть ссылок имеют значение для бизнес-логики -// (например движения по регистрам). Другая часть ссылок - "техногенные" ссылки на объект из объектов ИБ, -// которые относятся к подсистеме версионирования объектов и подсистеме свойств. Такие "техногенные" -// ссылки должны быть отфильтрованы, например, в обработке удаления помеченных и при поиске ссылок на объект -// в подсистеме запрета редактирования ключевых реквизитов. -// Список таких "техногенных" объектов нужно перечислить в этой функции. -// -// Возвращаемое значение: -// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". -// -Функция ПолучитьИсключенияПоискаСсылок() Экспорт - - Массив = Новый Массив; - - Возврат Массив; - -КонецФункции - -// Обработчик события, возникающего при обновлении -// данных справочника ИдентификаторыОбъектовМетаданных -// -// Параметры: -// ВидСобытия - Строка - "Добавление", "Изменение", "Удаление" -// Свойства - Структура: -// Старые - Структура - основные поля и значения старого элемента справочника -// Новые - Структура - основные поля и значения нового элемента справочника -// СтандартнаяЗаменаСсылок -// - Булево - если свойство задано Истина, -// тогда в информационной базе будет произведена замена -// "Свойства.Старые.Ссылка" на "Свойства.Новые.Ссылка". Можно -// установить значение Ложь, тогда замена произведена не будет. -// Замена происходит, когда вместо обычного элемента был -// добавлен предопределенный элемент или при замене одного -// объекта метаданных на другой для безошибочной реструктуризации. -// -Процедура ПриИзмененииИдентификатораОбъектаМетаданных(ВидСобытия, Свойства) Экспорт - - - -КонецПроцедуры - // Возвращает соответствие имен параметров сеанса и обработчиков для их инициализации. // Функция ОбработчикиИнициализацииПараметровСеанса() Экспорт @@ -71,6 +24,34 @@ КонецФункции +// Возвращает список имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, +// но при этом эти ссылки не должны учитываться в бизнес-логике приложения. +// +// Пример: +// Для документ "Реализация товаров и услуг" настроена подсистема версионирования объектов, +// и подсистема свойств. При этом на экземпляр документа может быть множество ссылок +// в информационной базе (из других документов, регистров). Часть ссылок имеют значение для бизнес-логики +// (например движения по регистрам). Другая часть ссылок - "техногенные" ссылки на объект из объектов ИБ, +// которые относятся к подсистеме версионирования объектов и подсистеме свойств. Такие "техногенные" +// ссылки должны быть отфильтрованы, например, в обработке удаления помеченных и при поиске ссылок на объект +// в подсистеме запрета редактирования ключевых реквизитов. +// Список таких "техногенных" объектов нужно перечислить в этой функции. +// +// При этом необходимо позаботиться об удалении "техногенных" данных или очистке ссылок на удаленные объекты. +// Это может быть реализовано с помощью подписки на событие ПередУдалением, +// или с помощью установки признака Ведущее для измерений регистров сведений. +// +// Возвращаемое значение: +// Массив - массив строк, например, "РегистрСведений.ВерсииОбъектов". +// +Функция ПолучитьИсключенияПоискаСсылок() Экспорт + + Массив = Новый Массив; + + Возврат Массив; + +КонецФункции + // Устанавливает текстовое описание предмета // // Параметры @@ -80,12 +61,39 @@ КонецПроцедуры -// Заполняет идентификакторы тех объектов метаданных, которые невозможно -// автоматически найти по типу, но которые требуется сохранять в базе данных (например, подсистемы). +// Заполняет переименования тех объектов метаданных, которые невозможно +// автоматически найти по типу, но ссылки на которые требуется сохранять +// в базе данных (например: подсистемы, роли). // -// Подробнее: см. ОбщегоНазначения.ДобавитьИдентификатор -// -Процедура ЗаполнитьПредустановленныеИдентификаторыОбъектовМетаданных(Идентификаторы) Экспорт +// Подробнее: см. ОбщегоНазначения.ДобавитьПереименование(). +// +Процедура ЗаполнитьТаблицуПереименованияОбъектовМетаданных(Итог) Экспорт + + + +КонецПроцедуры + +// Обработчик события, возникающего при обновлении +// данных справочника ИдентификаторыОбъектовМетаданных +// +// Параметры: +// ВидСобытия - Строка - "Добавление", "Изменение", "Удаление" +// Свойства - Структура: +// Старые - Структура - основные поля и значения старого элемента справочника +// Новые - Структура - основные поля и значения нового элемента справочника +// +Процедура ПриИзмененииИдентификатораОбъектаМетаданных(ВидСобытия, Свойства) Экспорт + + + +КонецПроцедуры + +// Устанавливает имя формы персональных настроек +// +// Параметры +// ИмяФормы - Строка - пустая +// +Процедура ИмяФормыПерсональныхНастроек(ИмяФормы) Экспорт diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/ОбщегоНазначенияПереопределяемый.mdo b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/ОбщегоНазначенияПереопределяемый.mdo index 13aef793f..a11ee6f25 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/ОбщегоНазначенияПереопределяемый.mdo +++ b/SSL/src/CommonModules/ОбщегоНазначенияПереопределяемый/ОбщегоНазначенияПереопределяемый.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl index 4e84f7403..873d3ebb8 100644 --- a/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ОбщегоНазначенияПовтИсп/Module.bsl @@ -128,7 +128,7 @@ // Функция РазделениеВключено() Экспорт - Если НЕ ЭтоРазделеннаяКонфигурация() Тогда + Если НЕ ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда Возврат Ложь; Иначе Возврат ПолучитьФункциональнуюОпцию("ИспользоватьРазделениеПоОбластямДанных"); @@ -144,7 +144,7 @@ // Функция ДоступноИспользованиеРазделенныхДанных() Экспорт - Если НЕ РазделениеВключено() Тогда + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда Возврат Истина; Иначе @@ -156,77 +156,6 @@ КонецФункции -// Функция возвращает объект WSОпределения созданный с переданными параметрами. -// -// Параметры соответствуют конструктору объекта. -// -// -// Примечание: при получении определения используется кэш, обновление которого осуществляется -// при смене версии конфигурации. Если для целей отладки требуется обновить -// значения в кэше, раньше этого времени, следует удалить из регистра сведений -// КэшПрограммныхИнтерфейсов соответствующие записи. -// -Функция ПолучитьWSОпределения(Знач АдресWSDL, Знач ИмяПользователя, Знач Пароль) Экспорт - - ДоступноПолучениеФайловИзИнтернета = Неопределено; - СтандартныеПодсистемыПереопределяемый.ДоступноПолучениеФайловИзИнтернета(ДоступноПолучениеФайловИзИнтернета); - Если ДоступноПолучениеФайловИзИнтернета = Истина Тогда - - ПараметрыПолучения = Новый Массив; - ПараметрыПолучения.Добавить(АдресWSDL); - ПараметрыПолучения.Добавить(ИмяПользователя); - ПараметрыПолучения.Добавить(Пароль); - - ДанныеWSDL = ОбщегоНазначенияПовтИсп.ПолучитьДанныеКэшаВерсий( - АдресWSDL, - Перечисления.ТипыДанныхКэшаПрограммныхИнтерфейсов.ОписаниеWebСервиса, - ОбщегоНазначения.ЗначениеВСтрокуXML(ПараметрыПолучения), - Ложь); - - ИмяФайлаWSDL = ПолучитьИмяВременногоФайла("wsdl"); - - ДанныеWSDL.Записать(ИмяФайлаWSDL); - - Определения = Новый WSОпределения(ИмяФайлаWSDL); - - Попытка - УдалитьФайлы(ИмяФайлаWSDL); - Исключение - ЗаписьЖурналаРегистрации("УдалениеВременныхФайлов", УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; - - Возврат Определения; - - Иначе - - Возврат Новый WSОпределения(АдресWSDL, ИмяПользователя, Пароль); - - КонецЕсли; - -КонецФункции - -// Функция возвращает объект WSПрокси созданный с переданными параметрами. -// -// Параметры соответствуют конструктору объекта. См. синтакс-помощник. -// -Функция ПолучитьWSПрокси(Знач АдресWSDL, Знач URIПространстваИмен, Знач ИмяСервиса, - Знач ИмяТочкиПодключения = "", Знач ИмяПользователя, Знач Пароль) Экспорт - - WSОпределения = ОбщегоНазначенияПовтИсп.ПолучитьWSОпределения(АдресWSDL, ИмяПользователя, Пароль); - - Если ПустаяСтрока(ИмяТочкиПодключения) Тогда - ИмяТочкиПодключения = ИмяСервиса + "Soap"; - КонецЕсли; - - Прокси = Новый WSПрокси(WSОпределения, URIПространстваИмен, ИмяСервиса, ИмяТочкиПодключения); - Прокси.Пользователь = ИмяПользователя; - Прокси.Пароль = Пароль; - - Возврат Прокси; - -КонецФункции - // Возвращает объект ПреобразованиеXSL созданный из общего макета с переданным // именем. // @@ -249,7 +178,8 @@ Попытка УдалитьФайлы(ИмяФайлаПреобразования); Исключение - + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение XSL'"), УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); КонецПопытки; Возврат Преобразование; @@ -310,6 +240,68 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Функция возвращает имя каталога временных файлов. +// +// Возвращаемое значение: +// Строка - путь к каталогу временных файлов. +// +Функция КаталогВременногоХранилищаФайлов() Экспорт + + // Если файловая база, то возвращается КаталогВременныхФайлов. + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат СокрЛП(КаталогВременныхФайлов()); + КонецЕсли; + + ОбщийТипПлатформы = "Windows"; + + СистемнаяИнформация = Новый СистемнаяИнформация; + + Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда + + Результат = Константы.КаталогВременныхФайловДляWindows.Получить(); + + ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 + ИЛИ СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86_64 Тогда + + Результат = Константы.КаталогВременныхФайловДляLinux.Получить(); + ОбщийТипПлатформы = "Linux"; + + Иначе + + Результат = Константы.КаталогВременныхФайловДляWindows.Получить(); + + КонецЕсли; + + ЗначениеПараметра = ?(ОбщийТипПлатформы = "Linux", "Каталог временных файлов для Linux", "Каталог временных файлов для Windows"); + + Если ПустаяСтрока(Результат) Тогда + + Результат = СокрЛП(КаталогВременныхФайлов()); + + Иначе + + Результат = СокрЛП(Результат); + + // Проверка существования каталога + Каталог = Новый Файл(Результат); + + Если Не Каталог.Существует() Тогда + + ШаблонСообщения = НСтр("ru = 'Каталог временных файлов не существует. + |Необходимо убедиться, что в форме настройки программы задано правильное значение константы + |""%1"".'"); + ШаблонСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ЗначениеПараметра); + ВызватьИсключение ШаблонСообщения; + + КонецЕсли; + + КонецЕсли; + + Возврат Результат; + +КонецФункции + // Функция получает данные кеша версий из ресурса типа ХранилищеЗначения регистра КэшПрограммныхИнтерфейсов. // // Параметры: @@ -346,95 +338,51 @@ КонецЕсли; - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | КэшПрограммныхИнтерфейсов.ДатаОбновления КАК ДатаОбновления, - | КэшПрограммныхИнтерфейсов.Данные КАК Данные, - | КэшПрограммныхИнтерфейсов.ТипДанных КАК ТипДанных - |ИЗ - | РегистрСведений.КэшПрограммныхИнтерфейсов КАК КэшПрограммныхИнтерфейсов - |ГДЕ - | КэшПрограммныхИнтерфейсов.Идентификатор = &Идентификатор - | И КэшПрограммныхИнтерфейсов.ТипДанных = &ТипДанных"; - Запрос.УстановитьПараметр("Идентификатор", Идентификатор); - Запрос.УстановитьПараметр("ТипДанных", ТипДанных); + Попытка - НачатьТранзакцию(); - // Не устанавливаем управляемую блокировку что бы другие сеансы могли изменять значение пока эта транзакция активна - Результат = Запрос.Выполнить(); - ЗафиксироватьТранзакцию(); - - ИмяМетодаЗадания = "ОбщегоНазначения.ОбновитьДанныеКэшаВерсий"; - КлючЗадания = Идентификатор + "|" + XMLСтрока(ТипДанных); - ПараметрыЗадания = Новый Массив; - ПараметрыЗадания.Добавить(Идентификатор); - ПараметрыЗадания.Добавить(ТипДанных); - ПараметрыЗадания.Добавить(ПараметрыПолучения); - - ОтборЗаданий = Новый Структура; - ОтборЗаданий.Вставить("ИмяМетода", ИмяМетодаЗадания); - ОтборЗаданий.Вставить("Ключ", КлючЗадания); - ОтборЗаданий.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); - - Выборка = Неопределено; - - Если Результат.Пустой() Тогда - - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ОбщегоНазначения.ОбновитьДанныеКэшаВерсий(Идентификатор, ТипДанных, ПараметрыПолучения); - Иначе - Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий); - Если Задания.Количество() = 0 Тогда - // Запустим новое - Задание = ФоновыеЗадания.Выполнить(ИмяМетодаЗадания, ПараметрыЗадания, КлючЗадания); - Иначе - Задание = Задания[0]; - КонецЕсли; - - Попытка - // Дождемся завершения - Задание.ОжидатьЗавершения(); - Исключение - Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задание.УникальныйИдентификатор); - Если Задание.ИнформацияОбОшибке <> Неопределено Тогда - ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); - ВызватьИсключение(КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); - Иначе - ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецЕсли; - КонецПопытки; - КонецЕсли; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | КэшПрограммныхИнтерфейсов.ДатаОбновления КАК ДатаОбновления, + | КэшПрограммныхИнтерфейсов.Данные КАК Данные, + | КэшПрограммныхИнтерфейсов.ТипДанных КАК ТипДанных + |ИЗ + | РегистрСведений.КэшПрограммныхИнтерфейсов КАК КэшПрограммныхИнтерфейсов + |ГДЕ + | КэшПрограммныхИнтерфейсов.Идентификатор = &Идентификатор + | И КэшПрограммныхИнтерфейсов.ТипДанных = &ТипДанных"; + Запрос.УстановитьПараметр("Идентификатор", Идентификатор); + Запрос.УстановитьПараметр("ТипДанных", ТипДанных); НачатьТранзакцию(); - Результат = Запрос.Выполнить(); - ЗафиксироватьТранзакцию(); + Попытка + // Не устанавливаем управляемую блокировку что бы другие сеансы могли изменять значение пока эта транзакция активна + Результат = Запрос.Выполнить(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + ИмяМетодаЗадания = "ОбщегоНазначения.ОбновитьДанныеКэшаВерсий"; + КлючЗадания = Идентификатор + "|" + XMLСтрока(ТипДанных); + ПараметрыЗадания = Новый Массив; + ПараметрыЗадания.Добавить(Идентификатор); + ПараметрыЗадания.Добавить(ТипДанных); + ПараметрыЗадания.Добавить(ПараметрыПолучения); + + ОтборЗаданий = Новый Структура; + ОтборЗаданий.Вставить("ИмяМетода", ИмяМетодаЗадания); + ОтборЗаданий.Вставить("Ключ", КлючЗадания); + ОтборЗаданий.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + Выборка = Неопределено; Если Результат.Пустой() Тогда - ШаблонСообщения = НСтр("ru = 'Ошибка при обновлении данных кэша версий. - |Идентификатор записи: %1 - |ТипДанных информации: %2'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ШаблонСообщения, Идентификатор, ТипДанных); - - Если ВосстановитьРазделение Тогда - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); - КонецЕсли; - ВызватьИсключение(ТекстСообщения); - КонецЕсли; - Иначе - - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Если ОбщегоНазначения.ЗаписьКэшаВерсийУстарела(Выборка) Тогда + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда ОбщегоНазначения.ОбновитьДанныеКэшаВерсий(Идентификатор, ТипДанных, ПараметрыПолучения); - Выборка = Неопределено; Иначе - // Данные устарели Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий); Если Задания.Количество() = 0 Тогда // Запустим новое @@ -443,32 +391,92 @@ Задание = Задания[0]; КонецЕсли; - Если НЕ ИспользоватьУстаревшиеДанные Тогда - Попытка - // Дождемся завершения - Задание.ОжидатьЗавершения(); - Исключение - Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задание.УникальныйИдентификатор); - Если Задание.ИнформацияОбОшибке <> Неопределено Тогда - ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); - ВызватьИсключение(КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); - Иначе - ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецЕсли; - КонецПопытки; + Попытка + // Дождемся завершения + Задание.ОжидатьЗавершения(); + Исключение + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задание.УникальныйИдентификатор); + Если Задание.ИнформацияОбОшибке <> Неопределено Тогда + ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + ВызватьИсключение(КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + Иначе + ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Результат = Запрос.Выполнить(); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если Результат.Пустой() Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при обновлении данных кэша версий. + |Идентификатор записи: %1 + |ТипДанных информации: %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, Идентификатор, ТипДанных); + + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + Иначе + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Если ОбщегоНазначения.ЗаписьКэшаВерсийУстарела(Выборка) Тогда + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ОбщегоНазначения.ОбновитьДанныеКэшаВерсий(Идентификатор, ТипДанных, ПараметрыПолучения); + Выборка = Неопределено; + Иначе + // Данные устарели + Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий); + Если Задания.Количество() = 0 Тогда + // Запустим новое + Задание = ФоновыеЗадания.Выполнить(ИмяМетодаЗадания, ПараметрыЗадания, КлючЗадания); + Иначе + Задание = Задания[0]; + КонецЕсли; + + Если НЕ ИспользоватьУстаревшиеДанные Тогда + Попытка + // Дождемся завершения + Задание.ОжидатьЗавершения(); + Исключение + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задание.УникальныйИдентификатор); + Если Задание.ИнформацияОбОшибке <> Неопределено Тогда + ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + ВызватьИсключение(КраткоеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + Иначе + ЗаписьЖурналаРегистрации("ОбновлениеКэшаВерсий", УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецЕсли; + КонецПопытки; + КонецЕсли; КонецЕсли; КонецЕсли; + КонецЕсли; - КонецЕсли; - - Если Выборка = Неопределено Тогда - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - КонецЕсли; + Если Выборка = Неопределено Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + КонецЕсли; + + Исключение + Если ВосстановитьРазделение Тогда + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); + КонецЕсли; + ВызватьИсключение; + КонецПопытки; Если ВосстановитьРазделение Тогда ОбщегоНазначения.УстановитьРазделениеСеанса(Истина); @@ -477,3 +485,34 @@ Возврат Выборка.Данные.Получить(); КонецФункции + +// Функция возвращает объект WSОпределения созданный с переданными параметрами. +// +// Параметры +// АдресWSDL - Строка - местораположение wsdl +// ИмяПользователя - Строка - имя пользователя для входа на сервер +// Пароль - Строка - пароль пользователя +// +// Примечание: при получении определения используется кэш, обновление которого осуществляется +// при смене версии конфигурации. Если для целей отладки требуется обновить +// значения в кэше, раньше этого времени, следует удалить из регистра сведений +// КэшПрограммныхИнтерфейсов соответствующие записи. +// +Функция WSОпределения(Знач АдресWSDL, Знач ИмяПользователя, Знач Пароль) Экспорт + + Возврат ОбщегоНазначения.WSОпределения(АдресWSDL, ИмяПользователя, Пароль); + +КонецФункции + +// Функция возвращает объект WSПрокси созданный с переданными параметрами. +// +// Параметры соответствуют конструктору объекта. См. синтакс-помощник. +// +Функция WSПрокси(Знач АдресWSDL, Знач URIПространстваИмен, Знач ИмяСервиса, + Знач ИмяТочкиПодключения = "", Знач ИмяПользователя, Знач Пароль, Знач Таймаут = Неопределено) Экспорт + + Возврат ОбщегоНазначения.ВнутренняяWSПрокси(АдресWSDL, URIПространстваИмен, ИмяСервиса, + ИмяТочкиПодключения, ИмяПользователя, Пароль, Таймаут); + +КонецФункции + diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl index e1874eca8..370c934ef 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиВызовСервераПолныеПрава/Module.bsl @@ -27,7 +27,7 @@ // Число - время окончания замера // 0 - если ни один замер не начат // -Функция ЗафиксироватьВремяОкончания(КлючеваяОперация, ВремяНачалаКлючевойОперации, ВызовИзОбработчикаОжидания = Ложь) Экспорт +Функция ЗафиксироватьВремяОкончания(КлючеваяОперация, ВремяНачалаКлючевойОперации, ВызовИзОбработчикаОжидания = Ложь, ВремяНачалаКлючевойОперацииПроверка = 0) Экспорт ВремяОкончания = ТочноеВремя(); @@ -37,8 +37,14 @@ Запись.УникальныйИдентификатор = Строка(Новый УникальныйИдентификатор); Запись.ВремяВыполнения = (ВремяОкончания - ВремяНачалаКлючевойОперации - ?(ВызовИзОбработчикаОжидания, 100, 0)) / 1000; Запись.ИмяПользователя = ИмяПользователя(); + + Запись.ВремяНачала = ВремяНачалаКлючевойОперации; + Запись.ВремяКонца = ВремяОкончания; + Запись.ВремяНачалаПроверка = ВремяНачалаКлючевойОперацииПроверка; + Запись.ВремяКонцаПроверка = ВремяСервер(); Запись.Записать(Ложь); + Возврат ВремяОкончания; КонецФункции @@ -55,6 +61,10 @@ КонецФункции +Функция ВремяСервер() Экспорт + Возврат ТекущаяДата(); +КонецФункции + // Функция получает предопределенное занчение справочника ОбщаяПроизводительностьСистемы // // Возвращаемое значение: @@ -201,21 +211,18 @@ // КаталогЭкспорта - Строка, каталог сохранения данных // Процедура ЭкспортОценкиПроизводительности(КаталогЭкспорта) Экспорт - - Если ПустаяСтрока(ИмяПользователя()) Тогда - УстановитьПривилегированныйРежим(Истина); - КонецЕсли; - // Если система отключена, то выгрузку данных делать не будем. Если не ОценкаПроизводительностиПовтИсп.ВыполнятьЗамерыПроизводительности() Тогда Возврат; КонецЕсли; - + ДатаЗамера = ТекущаяДатаСеанса(); + + //ВыгрузитьСырыеДанные(КаталогЭкспорта, ДатаЗамера, ВыборкаСырыхДанных()); + Запрос = Новый Запрос; Запрос.УстановитьПараметр("ДатаЗамера", ДатаЗамера); - СформироватьЗапросРассчетаAPDEX(Запрос); - + СформироватьЗапросРассчетаAPDEX(Запрос); Выборка = Запрос.Выполнить().Выбрать(); ВыгрузитьРезультаты(КаталогЭкспорта, ДатаЗамера, Выборка); @@ -242,6 +249,8 @@ | ГДЕ | Замеры.ДатаЗамера < &ДатаЗамера | И Замеры.КлючеваяОперация = &КлючеваяОперация%НомерКО% + | И Замеры.ВремяВыполнения > 0 + | И Замеры.ВремяВыполнения < &КлючеваяОперация%НомерКО%_МаксВремя | | УПОРЯДОЧИТЬ ПО | Замеры.ДатаЗамера УБЫВ) КАК Замеры"; @@ -297,7 +306,7 @@ КонецЕсли; Запрос.УстановитьПараметр("КлючеваяОперация" + НомерКО, Выборка.Ссылка); - + Запрос.УстановитьПараметр("КлючеваяОперация" + НомерКО + "_МаксВремя", 1000*Выборка.Ссылка.ЦелевоеВремя); Врем = СтрЗаменить(ПолучениеЗамеров, "%НомерКО%", Строка(НомерКО)); Врем = СтрЗаменить(Врем, "%ИмяВременнойТаблицы%", ?(НомерКО = 1, "ПОМЕСТИТЬ ВТ_Замеры", "")); ТекстЗапроса = ТекстЗапроса + Врем + ОбъединитьВсе; @@ -305,7 +314,7 @@ НомерКО = НомерКО + 1; нет_ключевых_операций = Ложь; КонецЦикла; - // Если нет ключевых операций, то и не будем заморачиваться, вернём пустую выборку. + // Если нет ключевых операций, то и не будем заморачиваться, вернем пустую выборку. Если нет_ключевых_операций Тогда Запрос.Текст = "Выбрать 1 ГДЕ 1 < 0;"; Возврат; @@ -318,7 +327,7 @@ | ВТ_КлючевыеОперации.КлючеваяОперация КАК КлючеваяОперация, | ВЫБОР | КОГДА СУММА(ЕСТЬNULL(ВТ_Замеры.ВремяВыполнения, 0)) = 0 - | ТОГДА 0 + | ТОГДА -1 | ИНАЧЕ ВЫРАЗИТЬ((СУММА(ВЫБОР | КОГДА ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя | ТОГДА 1 @@ -328,7 +337,7 @@ | И ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя * 4 | ТОГДА 1 | ИНАЧЕ 0 - | КОНЕЦ) / 2) / СУММА(1) + 0.001 КАК ЧИСЛО(6, 3)) + | КОНЕЦ) / 2) / СУММА(1) КАК ЧИСЛО(6, 3)) | КОНЕЦ КАК ТекущийAPDEX, | ВЫБОР | КОГДА ВТ_КлючевыеОперации.ДопустимыйУровень = ЗНАЧЕНИЕ(Перечисление.УровниПроизводительности.Идеально) @@ -365,7 +374,7 @@ |ИМЕЮЩИЕ | ВЫБОР | КОГДА СУММА(ЕСТЬNULL(ВТ_Замеры.ВремяВыполнения, 0)) = 0 - | ТОГДА 0 + | ТОГДА -1 | ИНАЧЕ ВЫРАЗИТЬ((СУММА(ВЫБОР | КОГДА ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя | ТОГДА 1 @@ -375,8 +384,8 @@ | И ВТ_Замеры.ВремяВыполнения <= ВТ_КлючевыеОперации.ЦелевоеВремя * 4 | ТОГДА 1 | ИНАЧЕ 0 - | КОНЕЦ) / 2) / СУММА(1) + 0.001 КАК ЧИСЛО(6, 3)) - | КОНЕЦ > 0"; + | КОНЕЦ) / 2) / СУММА(1) КАК ЧИСЛО(6, 3)) + | КОНЕЦ >= 0"; Запрос.Текст = ТекстЗапроса; @@ -395,7 +404,7 @@ СоздатьКаталог(КаталогЭкспорта); ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.ОткрытьФайл(ПолучитьПолноеИмяФайлаЭкспорта(КаталогЭкспорта, ДатаЗамера), "UTF-8"); + ЗаписьXML.ОткрытьФайл(ПолучитьПолноеИмяФайлаЭкспорта(КаталогЭкспорта, ДатаЗамера, ".xml"), "UTF-8"); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("Performance", ПространствоИмен); ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("prf", ПространствоИмен); @@ -419,7 +428,7 @@ ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.Закрыть(); - + КонецПроцедуры // Генерирует имя файла для экспорта @@ -431,7 +440,7 @@ // Возвращаемое значение: // Строка - полный путь к файлу экспорта // -Функция ПолучитьПолноеИмяФайлаЭкспорта(КаталогЭкспорта, ДатаЗамера) +Функция ПолучитьПолноеИмяФайлаЭкспорта(КаталогЭкспорта, ДатаЗамера, РасширениеСТочкой) ПоследнийСимвол = Прав(КаталогЭкспорта, 1); ЕстьРазделитель = Ложь; @@ -439,91 +448,11 @@ ЕстьРазделитель = Истина; КонецЕсли; - Возврат КаталогЭкспорта + ?(ЕстьРазделитель, "", "/") + Формат(ДатаЗамера, "ДФ=""гггг-ММ-дд ЧЧ-мм-сс""") + ".xml"; + Возврат КаталогЭкспорта + ?(ЕстьРазделитель, "", "/") + Формат(ДатаЗамера, "ДФ=""гггг-ММ-дд ЧЧ-мм-сс""") + РасширениеСТочкой; КонецФункции -/////////////////////////////////////////////////////////////////////////////// -// Блокировки объектов при изменении - -// Устанавливает исключительную управляемую блокировку на ссылку -// -Процедура ЗаблокироватьСсылку(Ссылка) - - БлокировкаДанных = Новый БлокировкаДанных; - ЭлементБлокировки = БлокировкаДанных.Добавить(Ссылка.Метаданные().ПолноеИмя()); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; - ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); - БлокировкаДанных.Заблокировать(); - -КонецПроцедуры - -// Начинает транзакцию и устанавливает исключительную -// управляемую блокировку по значению ссылки -// -// Параметры: -// Ссылка - ЛюбаяСсылка, ссылка, которую надо заблокировать -// -// Возвращаемое значение: -// Объект - объект полученный из ссылки -// -Функция НачатьИзменениеОбъекта(Ссылка) Экспорт - - НачатьТранзакцию(); - - ЗаблокироватьСсылку(Ссылка); - - Объект = Ссылка.ПолучитьОбъект(); - - Возврат Объект; - -КонецФункции - -// Фиксирует транзакцию и записывает объект -// -// Параметры: -// Объект - ЛюбойОбъект, объект, изменения которого следует зафиксировать -// Записывать - Булево, необходимость записи объекта перед фиксацией транзакции -// -Процедура ЗафиксироватьИзменениеОбъекта(Объект, Записывать = Истина) Экспорт - - Если Записывать Тогда - Объект.Записать(); - КонецЕсли; - - ЗафиксироватьТранзакцию(); - -КонецПроцедуры - -// Отменяет транзакцию, изменения объекта не фиксируются -// -Процедура ОтменитьИзменениеОбъекта() Экспорт - - ОтменитьТранзакцию(); - -КонецПроцедуры - - -/////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции - -// Процедура записывает данные в журнал регистрации -// -// Параметры: -// ИмяСобытия - Строка -// Уровень - УровеньЖурналаРегистрации -// ТекстСообщения - Строка -// -Процедура ЗаписатьВЖурналРегистрации(ИмяСобытия, Уровень, ТекстСообщения) Экспорт - - ЗаписьЖурналаРегистрации(ИмяСобытия, - Уровень, - , - "Оценка производительности", - ТекстСообщения); - -КонецПроцедуры // Получает имя дополнительного свойства не проверять приоритеты при записи ключевой операции // diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl index fa3000a7f..375b2b052 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиент/Module.bsl @@ -166,7 +166,8 @@ ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьВремяОкончания( ОценкаПроизводительностиЗамерВремени.Получить("КлючеваяОперация"), ОценкаПроизводительностиЗамерВремени.Получить("ВремяНачала"), - Истина + Истина, + ОценкаПроизводительностиЗамерВремени.Получить("ВремяНачалаПроверка") ); КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl index 888d6a176..cbf630cdb 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ОценкаПроизводительностиКлиентСервер/Module.bsl @@ -26,6 +26,10 @@ ОценкаПроизводительностиЗамерВремени = Новый Соответствие; ОценкаПроизводительностиЗамерВремени.Вставить("КлючеваяОперация", КлючеваяОперация); ОценкаПроизводительностиЗамерВремени.Вставить("ВремяНачала", ВремяНачала); + + ВремяСервер = ОценкаПроизводительностиВызовСервераПолныеПрава.ВремяСервер(); + ОценкаПроизводительностиЗамерВремени.Вставить("ВремяНачалаПроверка", ВремяСервер); + ПодключитьОбработчикОжидания("ЗакончитьЗамерВремениАвто", 0.1, Истина); #КонецЕсли КонецЕсли; @@ -54,4 +58,22 @@ Возврат ВремяОкончания; КонецФункции + +// Процедура записывает данные в журнал регистрации +// +// Параметры: +// ИмяСобытия - Строка +// Уровень - УровеньЖурналаРегистрации +// ТекстСообщения - Строка +// +Процедура ЗаписатьВЖурналРегистрации(ИмяСобытия, Уровень, ТекстСообщения) Экспорт + + ЗаписьЖурналаРегистрации(ИмяСобытия, + Уровень, + , + "Оценка производительности", + ТекстСообщения); + +КонецПроцедуры #КонецЕсли + diff --git a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/ОценкаПроизводительностиПовтИсп.mdo b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/ОценкаПроизводительностиПовтИсп.mdo index 7b30e7762..4e908dc7d 100644 --- a/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/ОценкаПроизводительностиПовтИсп.mdo +++ b/SSL/src/CommonModules/ОценкаПроизводительностиПовтИсп/ОценкаПроизводительностиПовтИсп.mdo @@ -7,7 +7,6 @@ true true - true true DuringSession diff --git a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl index 5e01189a8..b766db91d 100644 --- a/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданий/Module.bsl @@ -35,7 +35,7 @@ | ОбластиДанных.ЧасовойПояс |ИЗ | РегистрСведений.ОчередьЗаданий КАК ОчередьЗаданий - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОбластиДанных КАК ОбластиДанных + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОбластиДанных КАК ОбластиДанных | ПО ОчередьЗаданий.ОбластьДанных = ОбластиДанных.ОбластьДанных |ГДЕ | ОчередьЗаданий.СостояниеЗадания В (ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.Выполняется), ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.Завершено), ЗНАЧЕНИЕ(Перечисление.СостоянияЗаданий.НеЗапланировано))"; @@ -204,7 +204,7 @@ | |УПОРЯДОЧИТЬ ПО | ЭксклюзивноеВыполнение УБЫВ, - | ЗапланированныйМоментЗапуска УБЫВ, + | ЗапланированныйМоментЗапуска, | Задание"; Запрос.УстановитьПараметр("ТекущаяУниверсальнаяДата", ТекущаяУниверсальнаяДата()); @@ -306,11 +306,14 @@ ВызватьИсключение; КонецПопытки; - УстановитьПривилегированныйРежим(Истина); - - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + //-1 - признак того, что задание исполняется без разделителя + Если ОбластьДанных <> -1 Тогда + УстановитьПривилегированныйРежим(Истина); - УстановитьПривилегированныйРежим(Ложь); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); + + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; // Выполнение задания Попытка @@ -334,8 +337,25 @@ ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); УстановитьПривилегированныйРежим(Ложь); - НаборЗаписей[0].СостояниеЗадания = Перечисления.СостоянияЗаданий.Завершено; - НаборЗаписей.Записать(); + НачатьТранзакцию(); + Попытка + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ОчередьЗаданий"); + ЭлементБлокировки.УстановитьЗначение("ОбластьДанных", ОбластьДанных); + ЭлементБлокировки.УстановитьЗначение("Задание" , Задание); + Блокировка.Заблокировать(); + + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() > 0 Тогда // иначе - задание могло быть удалено внутри обработчика + НаборЗаписей[0].СостояниеЗадания = Перечисления.СостоянияЗаданий.Завершено; + НаборЗаписей.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; РазблокироватьДанныеДляРедактирования(КлючЗаписи); @@ -581,22 +601,28 @@ КонецПроцедуры -// Получает задание по заданному отбору. +// Получает задания для области данных по отбору. // // Параметры: -// Отбор - Структура - Структура, задающая отбор. +// Отбор - Структура - Задает отбор. // Значениями структуры могут быть: // ИмяМетода, Задание, СостояниеЗадания, РегламентноеЗадание, Ключ // ОбластьДанных - Число - задает область данных, // для которой необходимо добавить новое задание. +// ОтборКроме - Структура; Неопределено - Реализует исключение по заданным значениям полей. +// ИмяМетода - Строка; +// РегламентноеЗадание - УникальныйИдентификатор; +// СостояниеЗадания - ПеречислениеСсылка.СостоянияЗаданий; +// Ключ - Строка; +// Задание - Строка. // // Возвращаемое значение: -// Массив, Строка, Неопределено. -// Строка - Идентификатор задания если задание найдено, -// Массив - заданий несколько -// Неопределено - задание не найдено. +// Строка; Массив; Неопределено. +// Строка - Идентификатор задания, если найдено ровно одно задание. +// Массив - заданий несколько. +// Неопределено - задание не найдено. // -Функция ПолучитьЗадание(Отбор, ОбластьДанных = Неопределено) Экспорт +Функция ПолучитьЗадание(Отбор, ОбластьДанных = Неопределено, ОтборКроме = Неопределено) Экспорт Если ТипЗнч(Отбор) <> Тип("Структура") Тогда ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''1'')'"); @@ -623,10 +649,13 @@ КонецЕсли; КонецЕсли; Если Отбор.Свойство("Задание") Тогда - Если ТипЗнч(Отбор.Наименование) <> Тип("Строка") Тогда + Если ТипЗнч(Отбор.Задание) <> Тип("Строка") Тогда ВызватьИсключение НСтр("ru = 'Недопустимый тип параметра (параметр номер ''1'', свойство ''Задание'')'"); КонецЕсли; КонецЕсли; + Если ОтборКроме <> Неопределено И ТипЗнч(ОтборКроме) <> Тип("Структура") Тогда + ВызватьИсключение НСтр("ru = 'Недопустимое значение параметра (параметр номер ''3'')'"); + КонецЕсли; Если ОбластьДанных = Неопределено Тогда ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); @@ -648,18 +677,20 @@ | ОчередьЗаданий.ОбластьДанных = &ОбластьДанных"; Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + // Сравнение на совпадение. + Если Отбор.Свойство("ИмяМетода") И ЗначениеЗаполнено(Отбор.ИмяМетода) Тогда Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.ИмяМетода = &ИмяМетода "; Запрос.УстановитьПараметр("ИмяМетода", Отбор.ИмяМетода); КонецЕсли; - Если Отбор.Свойство("СостояниеЗадания") И ЗначениеЗаполнено(Отбор.СостояниеЗадания) Тогда - Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.СостояниеЗадания = &СостояниеЗадания "; - Запрос.УстановитьПараметр("СостояниеЗадания", Отбор.СостояниеЗадания); - КонецЕсли; Если Отбор.Свойство("РегламентноеЗадание") И ЗначениеЗаполнено(Отбор.РегламентноеЗадание) Тогда Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.РегламентноеЗадание = &РегламентноеЗадание "; Запрос.УстановитьПараметр("РегламентноеЗадание", Отбор.РегламентноеЗадание); КонецЕсли; + Если Отбор.Свойство("СостояниеЗадания") И ЗначениеЗаполнено(Отбор.СостояниеЗадания) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.СостояниеЗадания = &СостояниеЗадания "; + Запрос.УстановитьПараметр("СостояниеЗадания", Отбор.СостояниеЗадания); + КонецЕсли; Если Отбор.Свойство("Ключ") И ЗначениеЗаполнено(Отбор.Ключ) Тогда Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.Ключ = &Ключ "; Запрос.УстановитьПараметр("Ключ", Отбор.Ключ); @@ -669,6 +700,31 @@ Запрос.УстановитьПараметр("Задание", Отбор.Задание); КонецЕсли; + // Сравнение на несовпадение. + + Если ОтборКроме <> Неопределено Тогда + Если ОтборКроме.Свойство("ИмяМетода") И ЗначениеЗаполнено(ОтборКроме.ИмяМетода) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.ИмяМетода <> &ИмяМетодаКИсключению "; + Запрос.УстановитьПараметр("ИмяМетодаКИсключению", ОтборКроме.ИмяМетода); + КонецЕсли; + Если ОтборКроме.Свойство("РегламентноеЗадание") И ЗначениеЗаполнено(ОтборКроме.РегламентноеЗадание) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.РегламентноеЗадание <> &РегламентноеЗаданиеКИсключению "; + Запрос.УстановитьПараметр("РегламентноеЗаданиеКИсключению", ОтборКроме.РегламентноеЗадание); + КонецЕсли; + Если ОтборКроме.Свойство("СостояниеЗадания") И ЗначениеЗаполнено(ОтборКроме.СостояниеЗадания) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.СостояниеЗадания <> &СостояниеЗаданияКИсключению "; + Запрос.УстановитьПараметр("СостояниеЗаданияКИсключению", ОтборКроме.СостояниеЗадания); + КонецЕсли; + Если ОтборКроме.Свойство("Ключ") И ЗначениеЗаполнено(ОтборКроме.Ключ) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.Ключ <> &КлючКИсключению "; + Запрос.УстановитьПараметр("КлючКИсключению", ОтборКроме.Ключ); + КонецЕсли; + Если ОтборКроме.Свойство("Задание") И ЗначениеЗаполнено(ОтборКроме.Задание) Тогда + Запрос.Текст = Запрос.Текст + " И ОчередьЗаданий.Задание <> &ЗаданиеКИсключению "; + Запрос.УстановитьПараметр("ЗаданиеКИсключению", ОтборКроме.Задание); + КонецЕсли; + КонецЕсли; + РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда СписокЗаданий = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Задание"); @@ -747,7 +803,8 @@ КонецЕсли; Если ПараметрыЗадания.Свойство("Ключ") И ЗначениеЗаполнено(ПараметрыЗадания.Ключ) Тогда - Если ПолучитьЗадание(ПараметрыЗадания, ОбластьДанных) <> Неопределено Тогда + ОтборКроме = Новый Структура("СостояниеЗадания", Перечисления.СостоянияЗаданий.Завершено); + Если ПолучитьЗадание(ПараметрыЗадания, ОбластьДанных, ОтборКроме) <> Неопределено Тогда // Не учитывать завершенные. ВызватьИсключение ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом(); КонецЕсли; КонецЕсли; @@ -850,8 +907,9 @@ КонецЕсли; Если ПараметрыЗадания.Свойство("Ключ") И ЗначениеЗаполнено(ПараметрыЗадания.Ключ) Тогда - Если ПолучитьЗадание(ПараметрыЗадания, ОбластьДанных) <> Неопределено Тогда - ВызватьИсключение "Дублирование заданий с одинаковым значения поля 'Ключ' не допустимо"; + ОтборКроме = Новый Структура("Задание", Задание); + Если ПолучитьЗадание(ПараметрыЗадания, ОбластьДанных, ОтборКроме) <> Неопределено Тогда // Не учитывать само изменяемое. + ВызватьИсключение ПолучитьТекстИсключенияДублированиеЗаданийСОдинаковымКлючом(); КонецЕсли; КонецЕсли; @@ -861,12 +919,29 @@ ЗаблокироватьДанныеДляРедактирования(КлючЗаписи); МенеджерЗаписи = РегистрыСведений.ОчередьЗаданий.СоздатьМенеджерЗаписи(); - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ПараметрыЗадания); МенеджерЗаписи.ОбластьДанных = ОбластьДанных; МенеджерЗаписи.Задание = Задание; МенеджерЗаписи.Прочитать(); + + Если Не МенеджерЗаписи.Выбран() Тогда + ШаблонСообщения = НСтр("ru = 'Задание %1 к изменению не найдено. Область: %2'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Задание, ОбластьДанных); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ПараметрыЗадания); + Если ПараметрыЗадания.Свойство("Параметры") И ТипЗнч(ПараметрыЗадания.Параметры) = Тип("Массив") Тогда + МенеджерЗаписи.Параметры = Новый ХранилищеЗначения(ПараметрыЗадания.Параметры); + КонецЕсли; + + Если ПараметрыЗадания.Свойство("ЗапланированныйМоментЗапуска") + И ЗначениеЗаполнено(ПараметрыЗадания.ЗапланированныйМоментЗапуска) Тогда + + ЧасовойПояс = ПолучитьЧасовойПоясОбластиДанных(ОбластьДанных); + МенеджерЗаписи.ЗапланированныйМоментЗапуска = УниверсальноеВремя(МенеджерЗаписи.ЗапланированныйМоментЗапуска, ЧасовойПояс); + КонецЕсли; + Если ЗначениеЗаполнено(МенеджерЗаписи.ЗапланированныйМоментЗапуска) Тогда МенеджерЗаписи.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано; Иначе @@ -1008,7 +1083,7 @@ // Возвращаемое значение: // Массив. // -Функция ПолучитьРегламентныеЗадания(Отбор) Экспорт +Функция ПолучитьРегламентныеЗадания(Отбор, ОбластьДанных = Неопределено) Экспорт Если Отбор <> Неопределено Тогда Если ТипЗнч(Отбор) <> Тип("Структура") Тогда @@ -1043,7 +1118,14 @@ НайденныеРегламентныеЗадания = Новый Массив; Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Если ОбластьДанных = Неопределено Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Иначе + Если Не ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() + И ОбластьДанных <> ОбщегоНазначения.ЗначениеРазделителяСеанса() Тогда + ВызватьИсключение(НСтр("ru = 'В данном сеансе недопустимо обращение к данным из другой области данных!'")); + КонецЕсли; + КонецЕсли; РазделенныеРегламентныеЗадания = Новый Массив; Запрос = Новый Запрос; @@ -1098,6 +1180,7 @@ РегламентноеЗадание.Вставить("УникальныйИдентфикатор", Выборка.РегламентноеЗадание); РегламентноеЗадание.Вставить("ИмяМетода" , Выборка.ИмяМетода); РегламентноеЗадание.Вставить("Ключ" , Выборка.Ключ); + РегламентноеЗадание.Вставить("ДатаНачалаПоследнегоЗапуска", Выборка.ДатаНачалаПоследнегоЗапуска); Если ТипЗнч(Выборка.Параметры) = Тип("ХранилищеЗначения") Тогда РегламентноеЗадание.Вставить("Параметры", Выборка.Параметры.Получить()); Иначе @@ -1246,15 +1329,24 @@ КонецФункции +// Формирует и возвращает таблицу имен регламентных заданий с признаком использования. +// +// Возвращаемое значение: +// ТаблицаЗначений - таблица, которую необходимо заполнить +// регламентными заданиями и признаком использования. +// Функция ПолучитьТаблицуИспользованияРегламентныхЗаданий() ТаблицаИспользования = Новый ТаблицаЗначений; - ТаблицаИспользования.Колонки.Добавить("РегламентноеЗадание", Новый ОписаниеТипов("Строка")); ТаблицаИспользования.Колонки.Добавить("Использование", Новый ОписаниеТипов("Булево")); + // Обязательно для этой подсистемы. + НоваяСтрока = ТаблицаИспользования.Добавить(); + НоваяСтрока.РегламентноеЗадание = "ПланированиеОбработкиЗаданий"; + НоваяСтрока.Использование = Истина; + СтандартныеПодсистемыПереопределяемый.ЗаполнитьТаблицуИспользованияРегламентныхЗаданий(ТаблицаИспользования); - ОчередьЗаданийПереопределяемый.ЗаполнитьТаблицуИспользованияРегламентныхЗаданий(ТаблицаИспользования); Возврат ТаблицаИспользования; diff --git a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl index 664d6b713..48617e871 100644 --- a/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ОчередьЗаданийПереопределяемый/Module.bsl @@ -19,23 +19,6 @@ -КонецПроцедуры - -// Процедура формирует таблицу регламентных заданий -// с признаком использования -// -// Параметры: -// ТаблицаИспользования - ТаблицаЗначений - таблица, которую необходимо -// заполнить регламентными заданиями и признаком использования -// -Процедура ЗаполнитьТаблицуИспользованияРегламентныхЗаданий(ТаблицаИспользования) Экспорт - - // СтандартныеПодсистемы.РегламентныеЗадания - НоваяСтрока = ТаблицаИспользования.Добавить(); - НоваяСтрока.РегламентноеЗадание = "ПланированиеОбработкиЗаданий"; - НоваяСтрока.Использование = Истина; - // Конец СтандартныеПодсистемы.РегламентныеЗадания - КонецПроцедуры // Формирует список методов разрешенных к вызову через механизм очереди заданий diff --git a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl new file mode 100644 index 000000000..c0be95de5 --- /dev/null +++ b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/Module.bsl @@ -0,0 +1,1471 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Префиксация объектов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Устанавливает новый префикс информационной базы и изменяет коды и номера объектов +// в соответствии с новым префиксом и форматом кода/номера. +// Обработке подлежат только объекты, созданные в текущей информационной базе. +// Место создания объекта определяется по префиксу его номера или кода. +// +// Параметры: +// НовыйПрефиксИБ (обязательный) Тип: Строка, 2, перем. Новый префикс информационной базы, который требуется установить. +// +// НачалоПериодаПерепрефиксации (необязательный) Тип: Дата. Дата, начиная с которой будет установлен новый префикс ИБ у документов, бизнес-процессов и задач. +// +// ПредыдущийПрефиксИБ (необязательный) Тип: Строка. Префикс информационной базы, который был установлен раньше. +// Задавать значение переменной имеет смысл только в том случае, если произошла утеря значения префикса ИБ, +// например, при переходе из локального режима работы в модель сервиса. +// А также, если номера и коды объектов имеют нестандартный формат, отличный от формата БСП. +// +// ОбъектовОбработано (необязательный) Тип: Число. В этот параметр возвращается количество объектов, для которых был изменен номер или код. +// +Процедура УстановитьПрефиксИБИПерепрефиксоватьОбъектыСозданныеВЭтойИБ( + Знач НовыйПрефиксИБ, + Знач НачалоПериодаПерепрефиксации = Неопределено, + Знач ПредыдущийПрефиксИБ = Неопределено, + ОбъектовОбработано = 0 + ) Экспорт + + СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьОбъектыСозданныеВЭтойИБ(НовыйПрефиксИБ, НачалоПериодаПерепрефиксации, ПредыдущийПрефиксИБ, ОбъектовОбработано); + +КонецПроцедуры + +// Устанавливает новый префикс информационной базы и изменяет коды и номера объектов +// в соответствии с новым префиксом и форматом кода/номера. +// Обработке подлежат все объекты, вне зависимости от того, в какой информационной базе был создан объект. +// Место создания объекта определяется по префиксу его номера или кода. +// +// Параметры: +// НовыйПрефиксИБ (обязательный) Тип: Строка, 2, перем. Новый префикс информационной базы, который требуется установить. +// +// НачалоПериодаПерепрефиксации (необязательный) Тип: Дата. Дата, начиная с которой будет установлен новый префикс ИБ у документов, бизнес-процессов и задач. +// +// ПредыдущийПрефиксИБ (необязательный) Тип: Строка. Префикс информационной базы, который был установлен раньше. +// Задавать значение переменной имеет смысл только в том случае, если произошла утеря значения префикса ИБ, +// например, при переходе из локального режима работы в модель сервиса. +// А также, если номера и коды объектов имеют нестандартный формат, отличный от формата БСП. +// +// ОбъектовОбработано (необязательный) Тип: Число. В этот параметр возвращается количество объектов, для которых был изменен номер или код. +// +Процедура УстановитьПрефиксИБИПерепрефиксоватьВсеОбъекты( + Знач НовыйПрефиксИБ, + Знач НачалоПериодаПерепрефиксации = Неопределено, + Знач ПредыдущийПрефиксИБ = Неопределено, + ОбъектовОбработано = 0 + ) Экспорт + + СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьВсеОбъекты(НовыйПрефиксИБ, НачалоПериодаПерепрефиксации, ПредыдущийПрефиксИБ, ОбъектовОбработано); + +КонецПроцедуры + +// Устанавливает новый префикс информационной базы и создает новые объекты +// по одному на каждый тип данных с новым префиксом информационной базы и форматом номера/кода БСП. +// Обработке подлежат только объекты, созданные в текущей информационной базе. +// Место создания объекта определяется по префиксу его номера или кода. +// +// Параметры: +// НовыйПрефиксИБ (обязательный) Тип: Строка, 2, перем. Новый префикс информационной базы, который требуется установить. +// +// НачалоПериодаПерепрефиксации (необязательный) Тип: Дата. Дата, начиная с которой будет выполнен анализ данных. +// +// ПредыдущийПрефиксИБ (необязательный) Тип: Строка. Префикс информационной базы, который был установлен раньше. +// Задавать значение переменной имеет смысл только в том случае, если произошла утеря значения префикса ИБ, +// например, при переходе из локального режима работы в модель сервиса. +// А также, если номера и коды объектов имеют нестандартный формат, отличный от формата БСП. +// +// ОбъектовОбработано (необязательный) Тип: Число. В этот параметр возвращается количество созданных объектов. +// +Процедура УстановитьПрефиксИБИСоздатьОбъекты( + Знач НовыйПрефиксИБ, + Знач НачалоПериодаПерепрефиксации = Неопределено, + Знач ПредыдущийПрефиксИБ = Неопределено, + ОбъектовОбработано = 0 + ) Экспорт + + СлужебнаяУстановитьПрефиксИБИСоздатьОбъекты(НовыйПрефиксИБ, НачалоПериодаПерепрефиксации, ПредыдущийПрефиксИБ, ОбъектовОбработано); + +КонецПроцедуры + +// Устанавливает новый префикс информационной базы и изменяет код или номер +// последнего актуального объекта для каждого типа данных. +// Обработке подлежат только объекты, созданные в текущей информационной базе. +// Место создания объекта определяется по префиксу его номера или кода. +// +// Параметры: +// НовыйПрефиксИБ (обязательный) Тип: Строка, 2, перем. Новый префикс информационной базы, который требуется установить. +// +// НачалоПериодаПерепрефиксации (необязательный) Тип: Дата. Дата, начиная с которой будет выполнен анализ данных. +// +// ПредыдущийПрефиксИБ (необязательный) Тип: Строка. Префикс информационной базы, который был установлен раньше. +// Задавать значение переменной имеет смысл только в том случае, если произошла утеря значения префикса ИБ, +// например, при переходе из локального режима работы в модель сервиса. +// А также, если номера и коды объектов имеют нестандартный формат, отличный от формата БСП. +// +// ОбъектовОбработано (необязательный) Тип: Число. В этот параметр возвращается количество измененных объектов. +// +Процедура УстановитьПрефиксИБИПерепрефиксоватьПоследниеОбъекты( + Знач НовыйПрефиксИБ, + Знач НачалоПериодаПерепрефиксации = Неопределено, + Знач ПредыдущийПрефиксИБ = Неопределено, + ОбъектовОбработано = 0 + ) Экспорт + + СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьПоследниеОбъекты(НовыйПрефиксИБ, НачалоПериодаПерепрефиксации, ПредыдущийПрефиксИБ, ОбъектовОбработано); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьОбъектыСозданныеВЭтойИБ( + Знач НовыйПрефикс, + Знач СДаты = Неопределено, + Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, + СчетчикОбработанныхОбъектов = 0 + ) + + Если ТранзакцияАктивна() Тогда + + ВызватьИсключение НСтр("ru = 'Изменение префикса информационной базы не может выполняться в транзакции.'"); + + ИначеЕсли Не Пользователи.РолиДоступны("ПолныеПрава") Тогда + + ВызватьИсключение НСтр("ru = 'Нет прав на изменение префикса информационной базы.'"); + + КонецЕсли; + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + СДаты = ?(СДаты = Дата('00010101'), Неопределено, СДаты); + + СтандартныйПрефикс = (ПредыдущийПрефиксИнформационнойБазы = Неопределено); + + СчетчикОбработанныхОбъектов = 0; + + Если СтандартныйПрефикс Тогда + + УстановитьНовыйПрефиксИВыполнитьОбработкуДанныхСоСтандартнымФорматомКода(НовыйПрефикс, СДаты, ПредыдущийПрефиксИнформационнойБазы,, СчетчикОбработанныхОбъектов); + + Иначе + + УстановитьНовыйПрефиксИВыполнитьОбработкуДанныхСНестандартнымФорматомКода(НовыйПрефикс, СДаты, ПредыдущийПрефиксИнформационнойБазы,, СчетчикОбработанныхОбъектов); + + КонецЕсли; + +КонецПроцедуры + +Процедура СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьВсеОбъекты( + Знач НовыйПрефикс, + Знач СДаты = Неопределено, + Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, + СчетчикОбработанныхОбъектов = 0 + ) + + Если ТранзакцияАктивна() Тогда + + ВызватьИсключение НСтр("ru = 'Изменение префикса информационной базы не может выполняться в транзакции.'"); + + ИначеЕсли Не Пользователи.РолиДоступны("ПолныеПрава") Тогда + + ВызватьИсключение НСтр("ru = 'Нет прав на изменение префикса информационной базы.'"); + + КонецЕсли; + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + СДаты = ?(СДаты = Дата('00010101'), Неопределено, СДаты); + + СтандартныйПрефикс = (ПредыдущийПрефиксИнформационнойБазы = Неопределено); + + СчетчикОбработанныхОбъектов = 0; + + Если СтандартныйПрефикс Тогда + + УстановитьНовыйПрефиксИВыполнитьОбработкуДанныхСоСтандартнымФорматомКода(НовыйПрефикс, СДаты,, Истина, СчетчикОбработанныхОбъектов); + + Иначе + + УстановитьНовыйПрефиксИВыполнитьОбработкуДанныхСНестандартнымФорматомКода(НовыйПрефикс, СДаты,, Истина, СчетчикОбработанныхОбъектов); + + КонецЕсли; + +КонецПроцедуры + +Процедура СлужебнаяУстановитьПрефиксИБИСоздатьОбъекты( + Знач НовыйПрефикс, + Знач СДаты = Неопределено, + Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, + СчетчикОбработанныхОбъектов = 0 + ) + + СчетчикОбработанныхОбъектов = 0; + + УстановитьПрефиксИБИСоздатьИзменитьОбъекты(НовыйПрефикс, СДаты, ПредыдущийПрефиксИнформационнойБазы, Ложь, СчетчикОбработанныхОбъектов); + +КонецПроцедуры + +Процедура СлужебнаяУстановитьПрефиксИБИПерепрефиксоватьПоследниеОбъекты( + Знач НовыйПрефикс, + Знач СДаты = Неопределено, + Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, + СчетчикОбработанныхОбъектов = 0 + ) + + СчетчикОбработанныхОбъектов = 0; + + УстановитьПрефиксИБИСоздатьИзменитьОбъекты(НовыйПрефикс, СДаты, ПредыдущийПрефиксИнформационнойБазы, Истина, СчетчикОбработанныхОбъектов); + +КонецПроцедуры + +// + +Процедура УстановитьНовыйПрефиксИВыполнитьОбработкуДанныхСНестандартнымФорматомКода( + Знач НовыйПрефикс, + Знач СДаты = Неопределено, + Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, + Знач ОбрабатыватьВсеДанные = Ложь, + СчетчикОбработанныхОбъектов + ) + + ПроверитьВозможностьУстановкиПрефикса(); + + СтандартныйПрефикс = Ложь; + + Если ПредыдущийПрефиксИнформационнойБазы = Неопределено Тогда + + ПредыдущийПрефиксИнформационнойБазы = ПрефиксацияОбъектовПереопределяемый.ПрефиксИнформационнойБазы(); + + ДополнитьСтрокуНулямиСлева(ПредыдущийПрефиксИнформационнойБазы, 2); + + КонецЕсли; + + Попытка + + ПрефиксацияОбъектовПереопределяемый.УстановитьПрефиксИнформационнойБазы(НовыйПрефикс); + + ОбщегоНазначения.ЗаблокироватьИБ(Ложь); + + Для Каждого ОписаниеОбъекта Из МетаданныеИспользующиеПрефиксИнформационнойБазы() Цикл + + Выборка = ВыборкаДанных( + ОписаниеОбъекта.ИмяОбъекта, + СДаты, + ОписаниеОбъекта.ЭтоДокумент, + СтандартныйПрефикс, + ПредыдущийПрефиксИнформационнойБазы, + ОбрабатыватьВсеДанные + ); + + Если Выборка.Пустой() Тогда + Продолжить; + КонецЕсли; + + Выборка = Выборка.Выбрать(); + + Пока Выборка.Следующий() Цикл + + // {Фильтр: По месту создания объекта} + Если Не ОбрабатыватьВсеДанные Тогда + + ПолныйПрефиксОбъекта = ПолныйПрефикс(Выборка.Код); + + Если Не ПустаяСтрока(ПолныйПрефиксОбъекта) + И Найти(ПолныйПрефиксОбъекта, ПредыдущийПрефиксИнформационнойБазы) = 0 Тогда + Продолжить; // Обрабатываем объекты, созданные только в текущей информационной базе + КонецЕсли; + + КонецЕсли; + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + Если ОписаниеОбъекта.ЭтоДокумент Тогда + + Объект.УстановитьНовыйНомер(); + + ФорматКода = Объект.Номер; + + Иначе + + Объект.УстановитьНовыйКод(); + + ФорматКода = Объект.Код; + + КонецЕсли; + + // {Обработчик: ПриИзмененииНомера} Начало + СтандартнаяОбработка = Истина; + БазовыйКод = ""; + + Если ОписаниеОбъекта.ЭтоДокумент Тогда + + ПрефиксацияОбъектовПереопределяемый.ПриИзмененииНомера(Объект, Выборка.Код, БазовыйКод, СтандартнаяОбработка); + + Иначе + + ПрефиксацияОбъектовПереопределяемый.ПриИзмененииКода(Объект, Выборка.Код, БазовыйКод, СтандартнаяОбработка); + + КонецЕсли; + + Если СтандартнаяОбработка = Истина Тогда + + КодНовый = НовыйКодОбъекта(ФорматКода, Выборка.Код, ОписаниеОбъекта.ЭтоДокумент, Объект); + + Иначе + + КодНовый = НовыйКодОбъектаПоБазовомуКоду(ФорматКода, БазовыйКод, ОписаниеОбъекта.ЭтоДокумент, Объект); + + КонецЕсли; + // {Обработчик: ПриИзмененииНомера} Окончание + + ОбъектМодифицирован = (Выборка.Код <> КодНовый); + + Если ОбъектМодифицирован Тогда + + Объект[?(ОписаниеОбъекта.ЭтоДокумент, "Номер", "Код")] = КодНовый; + + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + + УвеличитьСчетчикОбработанныхОбъектов(СчетчикОбработанныхОбъектов); + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + ОбщегоНазначения.РазблокироватьИБ(); + + Исключение + + ОбщегоНазначения.РазблокироватьИБ(); + + ПрефиксацияОбъектовПереопределяемый.УстановитьПрефиксИнформационнойБазы(ПредыдущийПрефиксИнформационнойБазы); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Префиксация объектов.Изменение префикса информационной базы'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура УстановитьНовыйПрефиксИВыполнитьОбработкуДанныхСоСтандартнымФорматомКода( + Знач НовыйПрефикс, + Знач СДаты = Неопределено, + Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, + Знач ОбрабатыватьВсеДанные = Ложь, + СчетчикОбработанныхОбъектов + ) + + ПроверитьВозможностьУстановкиПрефикса(); + + НовыйПрефиксПолный = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(НовыйПрефикс, 2); + + СтандартныйПрефикс = Истина; + + Если ПредыдущийПрефиксИнформационнойБазы = Неопределено Тогда + + ПредыдущийПрефиксИнформационнойБазы = ПрефиксацияОбъектовПереопределяемый.ПрефиксИнформационнойБазы(); + + ДополнитьСтрокуНулямиСлева(ПредыдущийПрефиксИнформационнойБазы, 2); + + КонецЕсли; + + Попытка + + ПрефиксацияОбъектовПереопределяемый.УстановитьПрефиксИнформационнойБазы(НовыйПрефикс); + + ОбщегоНазначения.ЗаблокироватьИБ(Ложь); + + // Префиксация по префиксу информационной базы + Для Каждого ОписаниеОбъекта Из МетаданныеИспользующиеТолькоПрефиксИнформационнойБазы() Цикл + + УстановитьНовыйПрефикс( + 2, + ОписаниеОбъекта.ИмяОбъекта, + СДаты, + ОписаниеОбъекта.ЭтоДокумент, + ПредыдущийПрефиксИнформационнойБазы, + ОбрабатыватьВсеДанные, + НовыйПрефиксПолный, + СчетчикОбработанныхОбъектов + ); + + КонецЦикла; + + // Префиксация по префиксу информационной базы и организации + Для Каждого ОписаниеОбъекта Из МетаданныеИспользующиеПрефиксИнформационнойБазыИОрганизации() Цикл + + УстановитьНовыйПрефикс( + 4, + ОписаниеОбъекта.ИмяОбъекта, + СДаты, + ОписаниеОбъекта.ЭтоДокумент, + ПредыдущийПрефиксИнформационнойБазы, + ОбрабатыватьВсеДанные, + НовыйПрефиксПолный, + СчетчикОбработанныхОбъектов + ); + + КонецЦикла; + + ОбщегоНазначения.РазблокироватьИБ(); + + Исключение + + ОбщегоНазначения.РазблокироватьИБ(); + + ПрефиксацияОбъектовПереопределяемый.УстановитьПрефиксИнформационнойБазы(ПредыдущийПрефиксИнформационнойБазы); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Префиксация объектов.Изменение префикса информационной базы'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Процедура УстановитьПрефиксИБИСоздатьИзменитьОбъекты( + Знач НовыйПрефикс, + Знач СДаты = Неопределено, + Знач ПредыдущийПрефиксИнформационнойБазы = Неопределено, + Знач ОбрабатыватьПоследниеОбъекты = Ложь, + СчетчикОбработанныхОбъектов + ) Экспорт + + ПроверитьВозможностьУстановкиПрефикса(); + + СДаты = ?(СДаты = Дата('00010101'), Неопределено, СДаты); + + СтандартныйПрефикс = (ПредыдущийПрефиксИнформационнойБазы = Неопределено); + + ОбрабатыватьВсеДанные = Ложь; + + Если ТранзакцияАктивна() Тогда + + ВызватьИсключение НСтр("ru = 'Изменение префикса информационной базы не может выполняться в транзакции.'"); + + ИначеЕсли Не Пользователи.РолиДоступны("ПолныеПрава") Тогда + + ВызватьИсключение НСтр("ru = 'Нет прав на изменение префикса информационной базы.'"); + + КонецЕсли; + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + УстановитьПривилегированныйРежим(Истина); + КонецЕсли; + + Если ПредыдущийПрефиксИнформационнойБазы = Неопределено Тогда + + ПредыдущийПрефиксИнформационнойБазы = ПрефиксацияОбъектовПереопределяемый.ПрефиксИнформационнойБазы(); + + ДополнитьСтрокуНулямиСлева(ПредыдущийПрефиксИнформационнойБазы, 2); + + КонецЕсли; + + Попытка + + ПрефиксацияОбъектовПереопределяемый.УстановитьПрефиксИнформационнойБазы(НовыйПрефикс); + + ОбщегоНазначения.ЗаблокироватьИБ(Ложь); + + // Префиксация по префиксу информационной базы + Для Каждого ОписаниеОбъекта Из МетаданныеИспользующиеТолькоПрефиксИнформационнойБазы() Цикл + + Выборка = ВыборкаДанных( + ОписаниеОбъекта.ИмяОбъекта, + СДаты, + ОписаниеОбъекта.ЭтоДокумент, + СтандартныйПрефикс, + ПредыдущийПрефиксИнформационнойБазы, + ОбрабатыватьВсеДанные + ); + + Если Выборка.Пустой() Тогда + Продолжить; + КонецЕсли; + + Объекты = Новый ТаблицаЗначений; + Объекты.Колонки.Добавить("Код"); + Объекты.Колонки.Добавить("Дата"); + Объекты.Колонки.Добавить("Период"); + Объекты.Колонки.Добавить("Объект"); + + Выборка = Выборка.Выбрать(); + + Пока Выборка.Следующий() Цикл + + // {Фильтр: По месту создания объекта для нестандартного префикса} + Если Не ОбрабатыватьВсеДанные + И Не СтандартныйПрефикс Тогда + + ПолныйПрефиксОбъекта = ПолныйПрефикс(Выборка.Код); + + Если Не ПустаяСтрока(ПолныйПрефиксОбъекта) + И Найти(ПолныйПрефиксОбъекта, ПредыдущийПрефиксИнформационнойБазы) = 0 Тогда + Продолжить; // Обрабатываем объекты, созданные только в текущей информационной базе + КонецЕсли; + + КонецЕсли; + + СтрокаТаблицы = Объекты.Добавить(); + СтрокаТаблицы.Код = ЧисловойКодОбъекта(Выборка.Код); + СтрокаТаблицы.Дата = Выборка.Дата; + СтрокаТаблицы.Период = ДатаПериода(Выборка.Дата, ОписаниеОбъекта.ПериодичностьНомера); + СтрокаТаблицы.Объект = Выборка.Ссылка; + + КонецЦикла; + + Если Объекты.Количество() > 0 Тогда + + Если ОбрабатыватьПоследниеОбъекты Тогда + + Объекты.Сортировать("Период Убыв, Код Убыв"); + + Объект = Объекты[0]["Объект"].ПолучитьОбъект(); + + КодПредыдущий = Объект[?(ОписаниеОбъекта.ЭтоДокумент, "Номер", "Код")]; + + Если ОписаниеОбъекта.ЭтоДокумент Тогда + + Объект.УстановитьНовыйНомер(); + + ФорматКода = Объект.Номер; + + Иначе + + Объект.УстановитьНовыйКод(); + + ФорматКода = Объект.Код; + + КонецЕсли; + + Если СтандартныйПрефикс Тогда + + КодНовый = НовыйКодОбъекта(ФорматКода, КодПредыдущий, ОписаниеОбъекта.ЭтоДокумент, Объект); + + Иначе + + // {Обработчик: ПриИзмененииНомера} Начало + СтандартнаяОбработка = Истина; + БазовыйКод = ""; + + Если ОписаниеОбъекта.ЭтоДокумент Тогда + + ПрефиксацияОбъектовПереопределяемый.ПриИзмененииНомера(Объект, КодПредыдущий, БазовыйКод, СтандартнаяОбработка); + + Иначе + + ПрефиксацияОбъектовПереопределяемый.ПриИзмененииКода(Объект, КодПредыдущий, БазовыйКод, СтандартнаяОбработка); + + КонецЕсли; + + Если СтандартнаяОбработка = Истина Тогда + + КодНовый = НовыйКодОбъекта(ФорматКода, КодПредыдущий, ОписаниеОбъекта.ЭтоДокумент, Объект); + + Иначе + + КодНовый = НовыйКодОбъектаПоБазовомуКоду(ФорматКода, БазовыйКод, ОписаниеОбъекта.ЭтоДокумент, Объект); + + КонецЕсли; + // {Обработчик: ПриИзмененииНомера} Окончание + + КонецЕсли; + + ОбъектМодифицирован = (КодПредыдущий <> КодНовый); + + Если ОбъектМодифицирован Тогда + + Объект[?(ОписаниеОбъекта.ЭтоДокумент, "Номер", "Код")] = КодНовый; + + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + + УвеличитьСчетчикОбработанныхОбъектов(СчетчикОбработанныхОбъектов); + + КонецЕсли; + + Иначе // Создаем новые объекты + + Объекты.Сортировать("Период Убыв, Код Убыв"); + + МаксимальныйКод = Объекты[0]["Код"]; + + Объекты.Сортировать("Дата Убыв"); + + МаксимальнаяДата = Объекты[0]["Дата"]; + + Объект = СоздатьОбъект(ОписаниеОбъекта); + + Если ОписаниеОбъекта.ЭтоДокумент Тогда + + Объект.Дата = МаксимальнаяДата + 1; + Объект.УстановитьНовыйНомер(); + + ФорматКода = Объект.Номер; + + Иначе + + Объект.УстановитьНовыйКод(); + + ФорматКода = Объект.Код; + + КонецЕсли; + + КодНовый = НовыйКодОбъекта(ФорматКода, МаксимальныйКод + 1, ОписаниеОбъекта.ЭтоДокумент, Объект); + + Объект[?(ОписаниеОбъекта.ЭтоДокумент, "Номер", "Код")] = КодНовый; + + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + + УвеличитьСчетчикОбработанныхОбъектов(СчетчикОбработанныхОбъектов); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + // Префиксация по префиксу информационной базы и организации + Для Каждого ОписаниеОбъекта Из МетаданныеИспользующиеПрефиксИнформационнойБазыИОрганизации() Цикл + + Выборка = ВыборкаДанных( + ОписаниеОбъекта.ИмяОбъекта, + СДаты, + ОписаниеОбъекта.ЭтоДокумент, + СтандартныйПрефикс, + ПредыдущийПрефиксИнформационнойБазы, + ОбрабатыватьВсеДанные, + Истина + ); + + Если Выборка.Пустой() Тогда + Продолжить; + КонецЕсли; + + ОрганизацияБезПрефикса = "{ОрганизацияБезПрефикса}"; + + Объекты = Новый ТаблицаЗначений; + Объекты.Колонки.Добавить("Код"); + Объекты.Колонки.Добавить("Дата"); + Объекты.Колонки.Добавить("Период"); + Объекты.Колонки.Добавить("Объект"); + + Группировка = Новый Соответствие; + Группировка.Вставить(ОрганизацияБезПрефикса, Объекты); + + Выборка = Выборка.Выбрать(); + + Пока Выборка.Следующий() Цикл + + // {Фильтр: По месту создания объекта для нестандартного префикса} + Если Не ОбрабатыватьВсеДанные + И Не СтандартныйПрефикс Тогда + + ПолныйПрефиксОбъекта = ПолныйПрефикс(Выборка.Код); + + Если Не ПустаяСтрока(ПолныйПрефиксОбъекта) + И Найти(ПолныйПрефиксОбъекта, ПредыдущийПрефиксИнформационнойБазы) = 0 Тогда + Продолжить; // Обрабатываем объекты, созданные только в текущей информационной базе + КонецЕсли; + + КонецЕсли; + + Если Выборка.ПрефиксОрганизацииЗадан Тогда + + Если Группировка[Выборка.Организация] = Неопределено Тогда + + Объекты = Новый ТаблицаЗначений; + Объекты.Колонки.Добавить("Код"); + Объекты.Колонки.Добавить("Дата"); + Объекты.Колонки.Добавить("Период"); + Объекты.Колонки.Добавить("Объект"); + + СтрокаТаблицы = Объекты.Добавить(); + СтрокаТаблицы.Код = ЧисловойКодОбъекта(Выборка.Код); + СтрокаТаблицы.Дата = Выборка.Дата; + СтрокаТаблицы.Период = ДатаПериода(Выборка.Дата, ОписаниеОбъекта.ПериодичностьНомера); + СтрокаТаблицы.Объект = Выборка.Ссылка; + + Группировка.Вставить(Выборка.Организация, Объекты); + + Иначе + + СтрокаТаблицы = Группировка[Выборка.Организация].Добавить(); + СтрокаТаблицы.Код = ЧисловойКодОбъекта(Выборка.Код); + СтрокаТаблицы.Дата = Выборка.Дата; + СтрокаТаблицы.Период = ДатаПериода(Выборка.Дата, ОписаниеОбъекта.ПериодичностьНомера); + СтрокаТаблицы.Объект = Выборка.Ссылка; + + КонецЕсли; + + Иначе + + СтрокаТаблицы = Группировка[ОрганизацияБезПрефикса].Добавить(); + СтрокаТаблицы.Код = ЧисловойКодОбъекта(Выборка.Код); + СтрокаТаблицы.Дата = Выборка.Дата; + СтрокаТаблицы.Период = ДатаПериода(Выборка.Дата, ОписаниеОбъекта.ПериодичностьНомера); + СтрокаТаблицы.Объект = Выборка.Ссылка; + + КонецЕсли; + + КонецЦикла; + + Для Каждого ЭлементГруппировки Из Группировка Цикл + + Объекты = ЭлементГруппировки.Значение; + Организация = ЭлементГруппировки.Ключ; + + Если Объекты.Количество() > 0 Тогда + + Если ОбрабатыватьПоследниеОбъекты Тогда + + Объекты.Сортировать("Период Убыв, Код Убыв"); + + Объект = Объекты[0]["Объект"].ПолучитьОбъект(); + + КодПредыдущий = Объект[?(ОписаниеОбъекта.ЭтоДокумент, "Номер", "Код")]; + + Если ОписаниеОбъекта.ЭтоДокумент Тогда + + Объект.УстановитьНовыйНомер(); + + ФорматКода = Объект.Номер; + + Иначе + + Объект.УстановитьНовыйКод(); + + ФорматКода = Объект.Код; + + КонецЕсли; + + Если СтандартныйПрефикс Тогда + + КодНовый = НовыйКодОбъекта(ФорматКода, КодПредыдущий, ОписаниеОбъекта.ЭтоДокумент, Объект); + + Иначе + + // {Обработчик: ПриИзмененииНомера} Начало + СтандартнаяОбработка = Истина; + БазовыйКод = ""; + + Если ОписаниеОбъекта.ЭтоДокумент Тогда + + ПрефиксацияОбъектовПереопределяемый.ПриИзмененииНомера(Объект, КодПредыдущий, БазовыйКод, СтандартнаяОбработка); + + Иначе + + ПрефиксацияОбъектовПереопределяемый.ПриИзмененииКода(Объект, КодПредыдущий, БазовыйКод, СтандартнаяОбработка); + + КонецЕсли; + + Если СтандартнаяОбработка = Истина Тогда + + КодНовый = НовыйКодОбъекта(ФорматКода, КодПредыдущий, ОписаниеОбъекта.ЭтоДокумент, Объект); + + Иначе + + КодНовый = НовыйКодОбъектаПоБазовомуКоду(ФорматКода, БазовыйКод, ОписаниеОбъекта.ЭтоДокумент, Объект); + + КонецЕсли; + // {Обработчик: ПриИзмененииНомера} Окончание + + КонецЕсли; + + ОбъектМодифицирован = (КодПредыдущий <> КодНовый); + + Если ОбъектМодифицирован Тогда + + Объект[?(ОписаниеОбъекта.ЭтоДокумент, "Номер", "Код")] = КодНовый; + + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + + УвеличитьСчетчикОбработанныхОбъектов(СчетчикОбработанныхОбъектов); + + КонецЕсли; + + Иначе + + Объекты.Сортировать("Период Убыв, Код Убыв"); + + МаксимальныйКод = Объекты[0]["Код"]; + + Объекты.Сортировать("Дата Убыв"); + + МаксимальнаяДата = Объекты[0]["Дата"]; + + Объект = СоздатьОбъект(ОписаниеОбъекта); + + Объект.Организация = ?(Организация = ОрганизацияБезПрефикса, Неопределено, Организация); + + Если ОписаниеОбъекта.ЭтоДокумент Тогда + + Объект.Дата = МаксимальнаяДата + 1; + + Объект.УстановитьНовыйНомер(); + + ФорматКода = Объект.Номер; + + Иначе + + Объект.УстановитьНовыйКод(); + + ФорматКода = Объект.Код; + + КонецЕсли; + + КодНовый = НовыйКодОбъекта(ФорматКода, МаксимальныйКод + 1, ОписаниеОбъекта.ЭтоДокумент, Объект); + + Объект[?(ОписаниеОбъекта.ЭтоДокумент, "Номер", "Код")] = КодНовый; + + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + + УвеличитьСчетчикОбработанныхОбъектов(СчетчикОбработанныхОбъектов); + + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + ОбщегоНазначения.РазблокироватьИБ(); + + Исключение + + ОбщегоНазначения.РазблокироватьИБ(); + + ПрефиксацияОбъектовПереопределяемый.УстановитьПрефиксИнформационнойБазы(ПредыдущийПрефиксИнформационнойБазы); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Префиксация объектов.Изменение префикса информационной базы'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +Функция ВыборкаДанных( + Знач ИмяОбъекта, + Знач СДаты, + Знач ЭтоДокумент, + Знач СтандартныйПрефикс, + Знач ПредыдущийПрефикс, + Знач ОбрабатыватьВсеДанные, + Знач ВыбиратьОрганизацию = Ложь + ) + + Запрос = Новый Запрос; + + Если ОбрабатыватьВсеДанные Тогда + + Если ЭтоДокумент И СДаты <> Неопределено Тогда + + ТекстЗапроса = + "ВЫБРАТЬ + | [ВыборкаОрганизации] + | [ПрефиксОрганизацииЗадан] + | [ВыборкаДаты] + | Таблица.[Код] КАК Код, + | Таблица.Ссылка КАК Ссылка + |ИЗ + | [ИмяОбъекта] КАК Таблица + |ГДЕ + | Таблица.Дата >= &Дата + | + |УПОРЯДОЧИТЬ ПО + | Таблица.Дата"; + + Запрос.УстановитьПараметр("Дата", НачалоДня(СДаты)); + + Иначе + + ТекстЗапроса = + "ВЫБРАТЬ + | [ВыборкаОрганизации] + | [ПрефиксОрганизацииЗадан] + | [ВыборкаДаты] + | Таблица.[Код] КАК Код, + | Таблица.Ссылка КАК Ссылка + |ИЗ + | [ИмяОбъекта] КАК Таблица"; + + КонецЕсли; + + Иначе + + Если СтандартныйПрефикс Тогда + + Если ЭтоДокумент И СДаты <> Неопределено Тогда + + ТекстЗапроса = + "ВЫБРАТЬ + | [ВыборкаОрганизации] + | [ПрефиксОрганизацииЗадан] + | [ВыборкаДаты] + | Таблица.[Код] КАК Код, + | Таблица.Ссылка КАК Ссылка + |ИЗ + | [ИмяОбъекта] КАК Таблица + |ГДЕ + | Таблица.Дата >= &Дата + | И Таблица.[Код] ПОДОБНО &Префикс + | + |УПОРЯДОЧИТЬ ПО + | Таблица.Дата"; + + Запрос.УстановитьПараметр("Дата", НачалоДня(СДаты)); + + Иначе + + ТекстЗапроса = + "ВЫБРАТЬ + | [ВыборкаОрганизации] + | [ПрефиксОрганизацииЗадан] + | [ВыборкаДаты] + | Таблица.[Код] КАК Код, + | Таблица.Ссылка КАК Ссылка + |ИЗ + | [ИмяОбъекта] КАК Таблица + |ГДЕ + | Таблица.[Код] ПОДОБНО &Префикс"; + + КонецЕсли; + + // Обрабатываем объекты, созданные только в текущей информационной базе + Префикс = "%[Префикс]-%"; + Префикс = СтрЗаменить(Префикс, "[Префикс]", ПредыдущийПрефикс); + Запрос.УстановитьПараметр("Префикс", Префикс); + + Иначе + + Если ЭтоДокумент И СДаты <> Неопределено Тогда + + ТекстЗапроса = + "ВЫБРАТЬ + | [ВыборкаОрганизации] + | [ПрефиксОрганизацииЗадан] + | [ВыборкаДаты] + | Таблица.[Код] КАК Код, + | Таблица.Ссылка КАК Ссылка + |ИЗ + | [ИмяОбъекта] КАК Таблица + |ГДЕ + | Таблица.Дата >= &Дата + | + |УПОРЯДОЧИТЬ ПО + | Таблица.Дата"; + + Запрос.УстановитьПараметр("Дата", НачалоДня(СДаты)); + + Иначе + + ТекстЗапроса = + "ВЫБРАТЬ + | [ВыборкаОрганизации] + | [ПрефиксОрганизацииЗадан] + | [ВыборкаДаты] + | Таблица.[Код] КАК Код, + | Таблица.Ссылка КАК Ссылка + |ИЗ + | [ИмяОбъекта] КАК Таблица"; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяОбъекта]", ИмяОбъекта); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[Код]", ?(ЭтоДокумент, "Номер", "Код")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ВыборкаОрганизации]", ?(ВыбиратьОрганизацию, "Таблица.Организация КАК Организация,", "")); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ПрефиксОрганизацииЗадан]", + ?(ВыбиратьОрганизацию, + "ВЫБОР КОГДА Таблица.Организация.Префикс = """" ТОГДА Ложь ИНАЧЕ Истина КОНЕЦ КАК ПрефиксОрганизацииЗадан,", + "Ложь КАК ПрефиксОрганизацииЗадан,") + ); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ВыборкаДаты]", ?(ЭтоДокумент, "Таблица.Дата КАК Дата,", "Неопределено КАК Дата,")); + + Запрос.Текст = ТекстЗапроса; + + Возврат Запрос.Выполнить(); +КонецФункции + +Функция НовыйКодОбъекта(Знач ФорматНовогоКода, Знач Код, Знач ЭтоДокумент, Объект) + + Если ТипЗнч(Код) = Тип("Строка") Тогда + + КодЧислом = ЧисловойКодОбъекта(Код); + + ИначеЕсли ТипЗнч(Код) = Тип("Число") Тогда + + КодЧислом = Код; + + КонецЕсли; + + НовыйПолныйПрефикс = ПолныйПрефикс(ФорматНовогоКода); + + ДлинаКода = СтрДлина(ФорматНовогоКода); + + КодСтрокой = Формат(КодЧислом, "ЧН=0; ЧГ=0"); + + КоличествоЛидирующихНулей = ДлинаКода - СтрДлина(НовыйПолныйПрефикс) - СтрДлина(КодСтрокой); + + Если КоличествоЛидирующихНулей < 0 Тогда + + СтрокаСообщения = НСтр("ru = 'Преобразование %1 объекта %2 не может быть выполнено. + |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'" + ); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, + ?(ЭтоДокумент, НСтр("ru = 'номера'"), НСтр("ru = 'кода'")), + Строка(Объект), + Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(КодСтрокой)) + ); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + + ДлинаКодаСЛидирующимиНулями = ДлинаКода - СтрДлина(НовыйПолныйПрефикс); + + Если КодЧислом = 0 Тогда + + КодСЛидирующимиНулями = Лев("00000000000000000000000000000000000000000000000000", ДлинаКодаСЛидирующимиНулями); + + Иначе + + ФорматнаяСтрока = "ЧЦ=%1; ЧВН=; ЧГ=0"; + ФорматнаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ФорматнаяСтрока, Строка(ДлинаКодаСЛидирующимиНулями)); + КодСЛидирующимиНулями = Формат(КодЧислом, ФорматнаяСтрока); + + КонецЕсли; + + Возврат НовыйПолныйПрефикс + КодСЛидирующимиНулями; +КонецФункции + +Функция НовыйКодОбъектаПоБазовомуКоду(Знач ФорматНовогоКода, Знач БазовыйКод, Знач ЭтоДокумент, Объект) + + НовыйПолныйПрефикс = ПолныйПрефикс(ФорматНовогоКода); + + ДлинаКода = СтрДлина(ФорматНовогоКода); + + БазовыйКод = УдалитьЛидирующиеНули(БазовыйКод); + + КоличествоЛидирующихНулей = ДлинаКода - СтрДлина(НовыйПолныйПрефикс) - СтрДлина(БазовыйКод); + + Если КоличествоЛидирующихНулей < 0 Тогда + + СтрокаСообщения = НСтр("ru = 'Преобразование %1 объекта %2 не может быть выполнено. + |Недостаточная длина %1. Минимальная длина %1 объекта должна составлять %3 символов.'" + ); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, + ?(ЭтоДокумент, НСтр("ru = 'номера'"), НСтр("ru = 'кода'")), + Строка(Объект), + Строка(СтрДлина(НовыйПолныйПрефикс) + СтрДлина(БазовыйКод)) + ); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + + СтрокаНулей = Лев("00000000000000000000000000000000000000000000000000", КоличествоЛидирующихНулей); + + Возврат НовыйПолныйПрефикс + СтрокаНулей + БазовыйКод; +КонецФункции + +Функция ЧисловойКодОбъекта(Знач Код) + + Результат = ""; + + Пока СтрДлина(Код) > 0 Цикл + + Символ = Прав(Код, 1); + + Если Найти("0123456789", Символ) > 0 Тогда + Результат = Символ + Результат; + Иначе + Прервать; + КонецЕсли; + + Код = Лев(Код, СтрДлина(Код) - 1); + + КонецЦикла; + + Возврат ?(ПустаяСтрока(Результат), 0, Число(Результат)); +КонецФункции + +Функция ПолныйПрефикс(Знач Код) + + Пока СтрДлина(Код) > 0 Цикл + + Символ = Прав(Код, 1); + + Если Найти("0123456789", Символ) = 0 Тогда + Прервать; + КонецЕсли; + + Код = Лев(Код, СтрДлина(Код) - 1); + + КонецЦикла; + + Возврат Код; +КонецФункции + +Функция ПодпискиНаСобытияПоИмениОбработчика(Знач ИмяОбработчика) + + Результат = Новый Массив; + + ВРегИмяОбработчика = ВРег(ИмяОбработчика); + + Для Каждого ОбъектМетаданных Из Метаданные.ПодпискиНаСобытия Цикл + + Если ВРег(ОбъектМетаданных.Обработчик) = ВРегИмяОбработчика Тогда + + Результат.Добавить(ОбъектМетаданных); + + КонецЕсли; + + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция УдалитьЛидирующиеНули(Знач Код) + + Пока СтрДлина(Код) > 0 Цикл + + Если Лев(Код, 1) <> "0" Тогда + Прервать; + КонецЕсли; + + Код = Прав(Код, СтрДлина(Код) - 1); + + КонецЦикла; + + Возврат ?(ПустаяСтрока(Код), "0", Код); +КонецФункции + +Процедура ДополнитьТаблицуМетаданных(Результат, Знач ИмяОбработчика) + + РазделениеВключено = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + + Для Каждого Подписка Из ПодпискиНаСобытияПоИмениОбработчика(ИмяОбработчика) Цикл + + Для Каждого ТипИсточника Из Подписка.Источник.Типы() Цикл + + МетаданныеИсточника = Метаданные.НайтиПоТипу(ТипИсточника); + + ИмяОбъекта = МетаданныеИсточника.ПолноеИмя(); + + Если Результат.Найти(ИмяОбъекта, "ИмяОбъекта") <> Неопределено Тогда + + Продолжить; + + ИначеЕсли РазделениеВключено И Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ИмяОбъекта) Тогда + + Продолжить; + + КонецЕсли; + + Справочник = Ложь; + ПланВидовХарактеристик = Ложь; + Документ = Ложь; + БизнесПроцесс = Ложь; + Задача = Ложь; + + Если ОбщегоНазначения.ЭтоСправочник(МетаданныеИсточника) Тогда + + Справочник = Истина; + + ИначеЕсли ОбщегоНазначения.ЭтоДокумент(МетаданныеИсточника) Тогда + + Документ = Истина; + + ИначеЕсли ОбщегоНазначения.ЭтоПланВидовХарактеристик(МетаданныеИсточника) Тогда + + ПланВидовХарактеристик = Истина; + + ИначеЕсли ОбщегоНазначения.ЭтоБизнесПроцесс(МетаданныеИсточника) Тогда + + БизнесПроцесс = Истина; + + ИначеЕсли ОбщегоНазначения.ЭтоЗадача(МетаданныеИсточника) Тогда + + Задача = Истина; + + Иначе + Продолжить; + КонецЕсли; + + ЭтоСправочник = Справочник ИЛИ ПланВидовХарактеристик; + ЭтоДокумент = Документ ИЛИ БизнесПроцесс ИЛИ Задача; + + ОписаниеОбъекта = Результат.Добавить(); + ОписаниеОбъекта.Имя = МетаданныеИсточника.Имя; + ОписаниеОбъекта.ИмяОбъекта = ИмяОбъекта; + + ОписаниеОбъекта.Справочник = Справочник; + ОписаниеОбъекта.ПланВидовХарактеристик = ПланВидовХарактеристик; + ОписаниеОбъекта.Документ = Документ; + ОписаниеОбъекта.БизнесПроцесс = БизнесПроцесс; + ОписаниеОбъекта.Задача = Задача; + + ОписаниеОбъекта.ЭтоСправочник = ЭтоСправочник; + ОписаниеОбъекта.ЭтоДокумент = ЭтоДокумент; + + ОписаниеОбъекта.ПериодичностьНомера = ПериодичностьНомераОбъекта(МетаданныеИсточника, Документ, БизнесПроцесс); + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +Процедура УвеличитьСчетчикОбработанныхОбъектов(СчетчикОбработанныхОбъектов) + + СчетчикОбработанныхОбъектов = СчетчикОбработанныхОбъектов + 1; + +КонецПроцедуры + +Процедура ДополнитьСтрокуНулямиСлева(Строка, ДлинаСтроки) + + Строка = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Строка, ДлинаСтроки, "0", "Слева"); + +КонецПроцедуры + +// + +Функция МетаданныеИспользующиеПрефиксИнформационнойБазы() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Имя"); + Результат.Колонки.Добавить("ИмяОбъекта"); + Результат.Колонки.Добавить("ЭтоСправочник"); + Результат.Колонки.Добавить("ЭтоДокумент"); + Результат.Колонки.Добавить("Справочник"); + Результат.Колонки.Добавить("ПланВидовХарактеристик"); + Результат.Колонки.Добавить("Документ"); + Результат.Колонки.Добавить("БизнесПроцесс"); + Результат.Колонки.Добавить("Задача"); + Результат.Колонки.Добавить("ПериодичностьНомера"); + + ДополнитьТаблицуМетаданных(Результат, "ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазы"); + ДополнитьТаблицуМетаданных(Результат, "ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации"); + + Возврат Результат; +КонецФункции + +Функция МетаданныеИспользующиеПрефиксИнформационнойБазыИОрганизации() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Имя"); + Результат.Колонки.Добавить("ИмяОбъекта"); + Результат.Колонки.Добавить("ЭтоСправочник"); + Результат.Колонки.Добавить("ЭтоДокумент"); + Результат.Колонки.Добавить("Справочник"); + Результат.Колонки.Добавить("ПланВидовХарактеристик"); + Результат.Колонки.Добавить("Документ"); + Результат.Колонки.Добавить("БизнесПроцесс"); + Результат.Колонки.Добавить("Задача"); + Результат.Колонки.Добавить("ПериодичностьНомера"); + + ДополнитьТаблицуМетаданных(Результат, "ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазыИОрганизации"); + + Возврат Результат; +КонецФункции + +Функция МетаданныеИспользующиеТолькоПрефиксИнформационнойБазы() + + Результат = Новый ТаблицаЗначений; + Результат.Колонки.Добавить("Имя"); + Результат.Колонки.Добавить("ИмяОбъекта"); + Результат.Колонки.Добавить("ЭтоСправочник"); + Результат.Колонки.Добавить("ЭтоДокумент"); + Результат.Колонки.Добавить("Справочник"); + Результат.Колонки.Добавить("ПланВидовХарактеристик"); + Результат.Колонки.Добавить("Документ"); + Результат.Колонки.Добавить("БизнесПроцесс"); + Результат.Колонки.Добавить("Задача"); + Результат.Колонки.Добавить("ПериодичностьНомера"); + + ДополнитьТаблицуМетаданных(Результат, "ПрефиксацияОбъектовСобытия.УстановитьПрефиксИнформационнойБазы"); + + Возврат Результат; +КонецФункции + +Функция СоздатьОбъект(ОписаниеОбъекта) + + Если ОписаниеОбъекта.Справочник Тогда + + Возврат Справочники[ОписаниеОбъекта.Имя].СоздатьЭлемент(); + + ИначеЕсли ОписаниеОбъекта.Документ Тогда + + Возврат Документы[ОписаниеОбъекта.Имя].СоздатьДокумент(); + + ИначеЕсли ОписаниеОбъекта.ПланВидовХарактеристик Тогда + + Возврат ПланыВидовХарактеристик[ОписаниеОбъекта.Имя].СоздатьЭлемент(); + + ИначеЕсли ОписаниеОбъекта.БизнесПроцесс Тогда + + Возврат БизнесПроцессы[ОписаниеОбъекта.Имя].СоздатьБизнесПроцесс(); + + ИначеЕсли ОписаниеОбъекта.Задача Тогда + + Возврат Задачи[ОписаниеОбъекта.Имя].СоздатьЗадачу(); + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +Функция ПериодичностьНомераОбъекта(Объект, Знач Документ, Знач БизнесПроцесс) + + Результат = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Непериодический; + + Если Документ Тогда + + Результат = Объект.ПериодичностьНомера; + + ИначеЕсли БизнесПроцесс Тогда + + Если Объект.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераБизнесПроцесса.Год Тогда + + Результат = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Год; + + ИначеЕсли Объект.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераБизнесПроцесса.День Тогда + + Результат = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.День; + + ИначеЕсли Объект.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераБизнесПроцесса.Квартал Тогда + + Результат = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Квартал; + + ИначеЕсли Объект.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераБизнесПроцесса.Месяц Тогда + + Результат = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Месяц; + + ИначеЕсли Объект.ПериодичностьНомера = Метаданные.СвойстваОбъектов.ПериодичностьНомераБизнесПроцесса.Непериодический Тогда + + Результат = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Непериодический; + + КонецЕсли; + + КонецЕсли; + + Возврат Результат; +КонецФункции + +Функция ДатаПериода(Знач Дата, Знач Периодичность) + + Если Периодичность = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Год Тогда + + Возврат НачалоГода(Дата); + + ИначеЕсли Периодичность = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Квартал Тогда + + Возврат НачалоКвартала(Дата); + + ИначеЕсли Периодичность = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Месяц Тогда + + Возврат НачалоМесяца(Дата); + + ИначеЕсли Периодичность = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.День Тогда + + Возврат НачалоДня(Дата); + + ИначеЕсли Периодичность = Метаданные.СвойстваОбъектов.ПериодичностьНомераДокумента.Непериодический Тогда + + Возврат Дата('00010101'); + + КонецЕсли; + + Возврат Дата('00010101'); +КонецФункции + +Процедура УстановитьНовыйПрефикс( + Знач ДлинаПрефикса, + Знач ИмяОбъекта, + Знач СДаты, + Знач ЭтоДокумент, + Знач ПредыдущийПрефиксИнформационнойБазы, + Знач ОбрабатыватьВсеДанные, + Знач НовыйПрефиксПолный, + СчетчикОбработанныхОбъектов + ) + + Выборка = ВыборкаДанных( + ИмяОбъекта, + СДаты, + ЭтоДокумент, + Истина, + ПредыдущийПрефиксИнформационнойБазы, + ОбрабатыватьВсеДанные + ); + + Если Выборка.Пустой() Тогда + Возврат; + КонецЕсли; + + Выборка = Выборка.Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если ДлинаПрефикса = 2 Тогда + + Если Сред(Выборка.Код, 3, 1) <> "-" Тогда + Продолжить; // Нестандартный формат кода + КонецЕсли; + + КодНовый = НовыйПрефиксПолный + Сред(Выборка.Код, 3); + + Иначе // ДлинаПрефикса = 4 + + Если Сред(Выборка.Код, 5, 1) <> "-" Тогда + Продолжить; // Нестандартный формат кода + КонецЕсли; + + КодНовый = Лев(Выборка.Код, 2) + НовыйПрефиксПолный + Сред(Выборка.Код, 5); + + КонецЕсли; + + ОбъектМодифицирован = (Выборка.Код <> КодНовый); + + Если ОбъектМодифицирован Тогда + + Объект = Выборка.Ссылка.ПолучитьОбъект(); + + Объект[?(ЭтоДокумент, "Номер", "Код")] = КодНовый; + + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + + УвеличитьСчетчикОбработанныхОбъектов(СчетчикОбработанныхОбъектов); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПроверитьВозможностьУстановкиПрефикса() + + Если Не ПрефиксацияОбъектовПовтИсп.ЕстьФункциональнаяОпцияПрефиксИнформационнойБазы() Тогда + + ВызватьИсключение НСтр("ru='Перепрефиксация объектов недоступна.'"); + + КонецЕсли; + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/ПерепрефиксацияОбъектов/ПерепрефиксацияОбъектов.mdo b/SSL/src/CommonModules/ПерепрефиксацияОбъектов/ПерепрефиксацияОбъектов.mdo new file mode 100644 index 000000000..4fa5af48d --- /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 deleted file mode 100644 index 1bf81619d..000000000 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискКлиентПереопределяемый/Module.bsl +++ /dev/null @@ -1,32 +0,0 @@ - -// Вызывается при открытии объекта из полнотекстового поиска -// Функция ПриОткрытииОбъекта позволяет настроить -// поведение при открытии результата из списка найденного в полнотекстовом поиске -// Например, это необходимо при использовании подсистемы "Бизнес-процессы и задачи". -// -// Параметры -// Значение - объект, найденный в полнотекстовом поиске, например СправочникСсылка -// СтандартнаяОбработка - Булево - по умолчанию Истина. -// Если поведение изменено (по собственной механике делается открытие формы для Значение), -// то СтандартнаяОбработка надо установить в Ложь -// -// При использовании подсистемы "Бизнес-процессы и задачи" нужно -// вписать следующий код: -// -//Если ТипЗнч(Значение) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда -// Если БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Значение) Тогда -// СтандартнаяОбработка = Ложь; -// КонецЕсли; -//КонецЕсли; -// -Процедура ПриОткрытииОбъекта(Значение, СтандартнаяОбработка) Экспорт - - // СтандартныеПодсистемы.БизнесПроцессыИЗадачи - Если ТипЗнч(Значение) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - Если БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Значение) Тогда - СтандартнаяОбработка = Ложь; - КонецЕсли; - КонецЕсли; - // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl index f85e9155d..10081da93 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/Module.bsl @@ -1,7 +1,13 @@ //////////////////////////////////////////////////////////////////////////////// -// МОДУЛЬ УПРАВЛЕНИЯ ИНДЕКСОМ ПОЛНОТЕКСТОВОГО ПОИСКА +// Подсистема "Полнотекстовый поиск". +// +//////////////////////////////////////////////////////////////////////////////// -// Обновляет индекс полнотекстового поиска +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обновляет индекс полнотекстового поиска. +// Процедура ОбновлениеИндексаППД() Экспорт Если ПустаяСтрока(ИмяПользователя()) Тогда @@ -14,27 +20,28 @@ КонецЕсли; Попытка - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Начато регламентное индексирование порции'")); ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Закончено регламентное индексирование порции'")); Исключение ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время регламентного обновления индекса произошла неизвестная ошибка. |%1'"), ОписаниеОшибки()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); КонецПопытки; КонецПроцедуры -// Выполняет слияние индексов полнотекстового поиска +// Выполняет слияние индексов полнотекстового поиска. +// Процедура СлияниеИндексаППД() Экспорт Если ПустаяСтрока(ИмяПользователя()) Тогда @@ -47,13 +54,13 @@ КонецЕсли; Попытка - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Начато регламентное слияние индексов'")); ПолнотекстовыйПоиск.ОбновитьИндекс(Истина); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Закончено регламентное слияние индексов'")); Исключение @@ -61,14 +68,35 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Во время регламентного слияния индекса произошла неизвестная ошибка. |%1'"), ОписаниеОшибки()); - ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + ЗаписьЖурналаРегистрации(ИмяСобытияЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка, , , ТекстСообщенияОбОшибке); КонецПопытки; КонецПроцедуры -Функция СобытиеЖурналаРегистрации() +// Возвращает, актуален ли индекс полнотекстового поиска. +// Если индекс обновлялся менее 5 минут назад, считаем что он актуален +// Проверка функциональной опции, например "ИспользоватьПолнотекстовыйПоиск" - выполняется в вызывающем коде +Функция ИндексПоискаАктуален() Экспорт + + Если ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда + + // Если индекс обновлялся менее 5 минут назад, считаем что он актуален + Возврат ПолнотекстовыйПоиск.ИндексАктуален() ИЛИ ТекущаяДата() - ПолнотекстовыйПоиск.ДатаАктуальности() < 300; + + КонецЕсли; + + Возврат Истина; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает имя, которое используется для записи событий в журнал регистрации. +// +Функция ИмяСобытияЖурналаРегистрации() Возврат НСтр("ru = 'Полнотекстовое индексирование'"); КонецФункции @@ -99,30 +127,3 @@ КонецПроцедуры -// Возвращает, актуален ли индекс полнотекстового поиска. -// Если индекс обновлялся менее 5 минут назад, считаем что он актуален -// Проверка функциональной опции, например "ИспользоватьПолнотекстовыйПоиск" - выполняется в вызывающем коде -Функция ИндексПоискаАктуален() Экспорт - - ИспользоватьПолнотекстовыйПоиск = - (ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить); - - Если ИспользоватьПолнотекстовыйПоиск Тогда - - ИндексПолнотекстовогоПоискаАктуален = ПолнотекстовыйПоиск.ИндексАктуален(); - Если Не ИндексПолнотекстовогоПоискаАктуален Тогда - - // Если индекс обновлялся менее 5 минут назад, считаем что он актуален - Если ТекущаяДата() - ПолнотекстовыйПоиск.ДатаАктуальности() < 300 Тогда - ИндексПолнотекстовогоПоискаАктуален = Истина; - КонецЕсли; - - КонецЕсли; - - Возврат ИндексПолнотекстовогоПоискаАктуален; - - КонецЕсли; - - Возврат Истина; - -КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/ПолнотекстовыйПоискСервер.mdo b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/ПолнотекстовыйПоискСервер.mdo index 2eff77193..1ad0c6142 100644 --- a/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/ПолнотекстовыйПоискСервер.mdo +++ b/SSL/src/CommonModules/ПолнотекстовыйПоискСервер/ПолнотекстовыйПоискСервер.mdo @@ -6,5 +6,6 @@ Полнотекстовый поиск сервер true - true + true + true diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl index 8c38895fd..b664e2f9e 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернета/Module.bsl @@ -16,6 +16,7 @@ // Пользователь - Строка - пользователь от имени которого установлено соединение // Пароль - Строка - пароль пользователя от которого установлено соединение // Порт - Число - порт сервера с которым установлено соединение +// Таймаут - Число - таймаут на получение файла, в секундах // ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, // что соединение должно производиться через https // ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, @@ -35,7 +36,7 @@ // Объявление переменных перед первым использованием в качестве // параметра метода Свойство, при анализе параметров получения файлов // из ПараметрыПолучения. Содержат значения переданных параметров получения файла - Перем ПутьДляСохранения, Пользователь, Пароль, Порт, + Перем ПутьДляСохранения, Пользователь, Пароль, Порт, Таймаут, ЗащищенноеСоединение, ПассивноеСоединение; // Инициализируем параметры скачивания файла @@ -59,6 +60,10 @@ Порт = Неопределено; КонецЕсли; + Если Не ПараметрыПолучения.Свойство("Таймаут", Таймаут) Тогда + Таймаут = Неопределено; + КонецЕсли; + Если Не ПараметрыПолучения.Свойство("ЗащищенноеСоединение", ЗащищенноеСоединение) Тогда ЗащищенноеСоединение = Неопределено; КонецЕсли; @@ -76,6 +81,7 @@ Пользователь, Пароль, Порт, + Таймаут, ЗащищенноеСоединение, ПассивноеСоединение, НастройкаСохранения); @@ -93,6 +99,7 @@ // Пользователь - Строка - пользователь от имени которого установлено соединение // Пароль - Строка - пароль пользователя от которого установлено соединение // Порт - Число - порт сервера с которым установлено соединение +// Таймаут - Число - таймаут на получение файла, в секундах // ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, // что соединение должно производиться через https // ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, @@ -112,7 +119,7 @@ // Объявление переменных перед первым использованием в качестве // параметра метода Свойство, при анализе параметров получения файлов // из ПараметрыПолучения. Содержат значения переданных параметров получения файла - Перем ПутьДляСохранения, Пользователь, Пароль, Порт, + Перем ПутьДляСохранения, Пользователь, Пароль, Порт, Таймаут, ЗащищенноеСоединение, ПассивноеСоединение; // Получаем параметры получения файла @@ -136,6 +143,10 @@ Порт = Неопределено; КонецЕсли; + Если Не ПараметрыПолучения.Свойство("Таймаут", Таймаут) Тогда + Таймаут = Неопределено; + КонецЕсли; + Если Не ПараметрыПолучения.Свойство("ЗащищенноеСоединение", ЗащищенноеСоединение) Тогда ЗащищенноеСоединение = Неопределено; КонецЕсли; @@ -152,6 +163,7 @@ Пользователь, Пароль, Порт, + Таймаут, ЗащищенноеСоединение, ПассивноеСоединение, НастройкаСохранения); @@ -214,6 +226,21 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + Параметры.Вставить("НастройкиПроксиСервера", ПолучитьНастройкуПроксиСервера()); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl index a94e6636d..6f207162a 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиент/Module.bsl @@ -17,6 +17,7 @@ // Пользователь - строка - пользователь от имени которого установлено соединение // Пароль - строка - пароль пользователя от которого установлено соединение // Порт - число - порт сервера с которым установлено соединение +// Таймаут - Число - таймаут на получение файла, в секундах // ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, // что соединение должно производиться через https // ПассивноеСоединение - - Булево - для случая ftp загрузки флаг указывает, @@ -38,7 +39,7 @@ // Объявление переменных перед первым использованием в качестве // параметра метода Свойство, при анализе параметров получения файлов // из ПараметрыПолучения. Содержат значения переданных параметров получения файла - Перем ПутьДляСохранения, Пользователь, Пароль, Порт, ЗащищенноеСоединение, ПассивноеСоединение; + Перем ПутьДляСохранения, Пользователь, Пароль, Порт, Таймаут, ЗащищенноеСоединение, ПассивноеСоединение; // Получаем параметры получения файла @@ -50,6 +51,7 @@ ПараметрыПолучения.Свойство("Пользователь", Пользователь); ПараметрыПолучения.Свойство("Пароль", Пароль); ПараметрыПолучения.Свойство("Порт", Порт); + ПараметрыПолучения.Свойство("Таймаут", Таймаут); ПараметрыПолучения.Свойство("ЗащищенноеСоединение", ЗащищенноеСоединение); ПараметрыПолучения.Свойство("ПассивноеСоединение", ПассивноеСоединение); @@ -62,6 +64,7 @@ Пользователь, Пароль, Порт, + Таймаут, ЗащищенноеСоединение, ПассивноеСоединение, НастройкаСохранения diff --git a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl index 74bba2735..1ca8e92a5 100644 --- a/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ПолучениеФайловИзИнтернетаКлиентСервер/Module.bsl @@ -37,13 +37,14 @@ // в случае неуспеха сообщение об ошибке // Функция ПодготовитьПолучениеФайла(знач URL, знач Пользователь = Неопределено, знач Пароль = Неопределено, - знач Порт = Неопределено, знач ЗащищенноеСоединение = Ложь, знач ПассивноеСоединение = Ложь, + знач Порт = Неопределено, знач Таймаут, знач ЗащищенноеСоединение = Ложь, знач ПассивноеСоединение = Ложь, знач НастройкаСохранения) Экспорт НастройкаСоединения = Новый Соответствие; НастройкаСоединения.Вставить("Пользователь", Пользователь); НастройкаСоединения.Вставить("Пароль", Пароль); НастройкаСоединения.Вставить("Порт", Порт); + НастройкаСоединения.Вставить("Таймаут", Таймаут); Протокол = РазделитьURL(URL).Протокол; @@ -124,13 +125,16 @@ ИмяСервера = URLРазделенный.ИмяСервера; ПутьКФайлуНаСервере = URLРазделенный.ПутьКФайлуНаСервере; Протокол = URLРазделенный.Протокол; - - ЗащищенноеСоединение = НастройкаСоединения.Получить("ЗащищенноеСоединение"); - ПассивноеСоединение = НастройкаСоединения.Получить("ПассивноеСоединение"); - ИмяПользователя = НастройкаСоединения.Получить("Пользователь"); ПарольПользователя = НастройкаСоединения.Получить("Пароль"); Порт = НастройкаСоединения.Получить("Порт"); + Таймаут = НастройкаСоединения.Получить("Таймаут"); + ПассивноеСоединение = НастройкаСоединения.Получить("ПассивноеСоединение"); + + ЗащищенноеСоединение = НастройкаСоединения.Получить("ЗащищенноеСоединение"); + Если Протокол = "https" Тогда + ЗащищенноеСоединение = Истина; + КонецЕсли; Если Порт = Неопределено Тогда ПолнаяСтруктураURL = СтруктураURI(URL); @@ -144,9 +148,22 @@ НастройкиПрокси = ?(НастройкиПрокси = Неопределено, ПолучитьПустыеНастройкиПроксиСервера(), НастройкиПрокси); Прокси = СформироватьПрокси(НастройкиПрокси, Протокол); + ПараметрыСоединения = Новый Массив; + ПараметрыСоединения.Добавить(ИмяСервера); + ПараметрыСоединения.Добавить(Порт); + ПараметрыСоединения.Добавить(ИмяПользователя); + ПараметрыСоединения.Добавить(ПарольПользователя); + ПараметрыСоединения.Добавить(Прокси); + Если Протокол = "ftp" Тогда + + ПараметрыСоединения.Добавить(ПассивноеСоединение); + Если ОбщегоНазначения.ПлатформаПоддерживаетТаймаутыСети() Тогда + ПараметрыСоединения.Добавить(Таймаут); + КонецЕсли; + Попытка - Соединение = Новый FTPСоединение(ИмяСервера, Порт, ИмяПользователя, ПарольПользователя, Прокси, ПассивноеСоединение); + Соединение = Новый(Тип("FTPСоединение"), ПараметрыСоединения); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = НСтр("ru = 'Ошибка при создании FTP-соединения с сервером %1:'") + Символы.ПС + "%2"; @@ -158,8 +175,21 @@ Возврат СформироватьРезультат(Ложь, СообщениеОбОшибке); КонецПопытки; Иначе + + Если ОбщегоНазначения.ПлатформаПоддерживаетТаймаутыСети() Тогда + ПараметрыСоединения.Добавить(Таймаут); + + Если ЗащищенноеСоединение = Истина Тогда + ИмяТип = "ЗащищенноеСоединениеOpenSSL"; + ЗащищенноеСоединение = Новый(Тип(ИмяТип)); + Иначе + ЗащищенноеСоединение = Неопределено; + КонецЕсли; + КонецЕсли; + ПараметрыСоединения.Добавить(ЗащищенноеСоединение); + Попытка - Соединение = Новый HTTPСоединение(ИмяСервера, Порт, ИмяПользователя, ПарольПользователя, Прокси, ЗащищенноеСоединение); + Соединение = Новый(Тип("HTTPСоединение"), ПараметрыСоединения); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); СообщениеОбОшибке = НСтр("ru = 'Ошибка при создании HTTP-соединения с сервером %1:'") + Символы.ПС + "%2"; diff --git a/SSL/src/CommonModules/Пользователи/Module.bsl b/SSL/src/CommonModules/Пользователи/Module.bsl index 9d020808a..34defb734 100644 --- a/SSL/src/CommonModules/Пользователи/Module.bsl +++ b/SSL/src/CommonModules/Пользователи/Module.bsl @@ -6,36 +6,17 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Возвращает текущего пользователя или текущего внешнего пользователя, -// соответствующего пользователю информационной базы, -// который авторизовался в 1С:Предприятии 8. -// -// Возвращаемое значение: -// СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи. -// +// См. ПользователиКлиентСервер.АвторизованныйПользователь(). Функция АвторизованныйПользователь() Экспорт - УстановитьПривилегированныйРежим(Истина); - - Возврат ?(ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь), ПараметрыСеанса.ТекущийПользователь, ПараметрыСеанса.ТекущийВнешнийПользователь); + Возврат ПользователиКлиентСервер.АвторизованныйПользователь(); КонецФункции -// Возвращает текущего обычного пользователя, -// соответствующего пользователю информационной базы, -// который авторизовался в 1С:Предприятии 8. -// -// Если авторизованному пользователю информационной базы -// соответствует внешний пользователь, тогда возвращается пустая ссылка. -// -// Возвращаемое значение: -// СправочникСсылка.Пользователи -// +// См. ПользователиКлиентСервер.ТекущийПользователь(). Функция ТекущийПользователь() Экспорт - УстановитьПривилегированныйРежим(Истина); - - Возврат ПараметрыСеанса.ТекущийПользователь; + Возврат ПользователиКлиентСервер.ТекущийПользователь(); КонецФункции @@ -87,7 +68,7 @@ ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); Иначе - // Задан не текущий пользователь + // Задан не текущий пользователь. ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( ОбщегоНазначения.ПолучитьЗначениеРеквизита(Пользователь, "ИдентификаторПользователяИБ")); @@ -128,8 +109,54 @@ КонецФункции +// Проверяет является ли пользователь неразделенным. +// +// Параметры: +// Идентификатор - Неопределено - проверяется текущий пользователь ИБ; +// УникальныйИдентификатор - идентификатор пользователя ИБ; +// ПользовательИнформационнойБазы - проверяется указанный +// пользователь ИБ. +// СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи - осуществляется поиск +// пользователя ИБ по уникальному идентификатору, +// заданному в реквизите ИдентификаторПользователяИБ. +// Уточнение: если пользователь ИБ не найден, возвращается Ложь. +// +// Возвращаемое значение: +// Булево. Если указан внешний пользователь, возвращается Ложь. +// +Функция ЭтоНеразделенныйПользователь(Идентификатор = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(Идентификатор) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + Возврат Ложь; + КонецЕсли; + + Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда + ИдентификаторПользовательИБ = Идентификатор; + + ИначеЕсли ТипЗнч(Идентификатор) = Тип("ПользовательИнформационнойБазы") Тогда + ИдентификаторПользовательИБ = Идентификатор.УникальныйИдентификатор; + + ИначеЕсли Идентификатор = Неопределено + ИЛИ Идентификатор = АвторизованныйПользователь() Тогда + + ИдентификаторПользовательИБ = + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; + Иначе + // Задан не текущий пользователь. + ИдентификаторПользовательИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита( + Идентификатор, "ИдентификаторПользователяИБ"); + КонецЕсли; + + Возврат СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ( + ИдентификаторПользовательИБ); + +КонецФункции + // Возвращает доступность хотя бы одной из указанных ролей или полноправность -// пользователя (текущего или указанного). +// пользователя (текущего или указанного) без учета привилегированного режима. // // Параметры: // ИменаРолей - Строка - имена ролей, разделенные запятыми, доступность которых проверяется. @@ -149,7 +176,7 @@ // Функция РолиДоступны(Знач ИменаРолей, Пользователь = Неопределено) Экспорт - Если ЭтоПолноправныйПользователь(Пользователь) Тогда + Если ЭтоПолноправныйПользователь(Пользователь, , Ложь) Тогда Возврат Истина; КонецЕсли; @@ -191,152 +218,11 @@ КонецФункции -// Используется при обновлении и начальном заполнении информационной базы. -// 1) Создает первого администратора и связывает его с новым или существующим -// пользователем в справочнике Пользователи. -// 2) Связывает администратора, указанного в параметре УчетнаяЗапись с новым или -// существующим пользователем в справочнике Пользователи. -// -// Параметры: -// УчетнаяЗапись - ПользовательИнформационнойБазы - используется, когда нужно связать -// существующего администратора с новым или существующим пользователем -// в справочнике Пользователи. -// -// Возвращаемое значение: -// Неопределено - пользователь, связанный с пользователем ИБ с административными -// правами уже существует. -// СправочникСсылка.Пользователи - пользователь, который был связан с первым администратором или -// администратором, указанным в параметре УчетнаяЗапись. -// -Функция СоздатьПервогоАдминистратора(УчетнаяЗапись = Неопределено) Экспорт - - // Добавление администратора (администратор системы - полные права). - Если УчетнаяЗапись = Неопределено Тогда - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат Неопределено; - КонецЕсли; - - // Если существует пользователь с правом администрирование, - // тогда первый администратор уже создан и его не требуется создавать. - УчетнаяЗапись = Неопределено; - - УстановитьПривилегированныйРежим(Истина); - ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); - УстановитьПривилегированныйРежим(Ложь); - Для каждого ПользовательИБ Из ПользователиИБ Цикл - Если ЭтоПолноправныйПользователь(ПользовательИБ) Тогда - Возврат Неопределено; - КонецЕсли; - КонецЦикла; - Если УчетнаяЗапись = Неопределено Тогда - УстановитьПривилегированныйРежим(Истина); - УчетнаяЗапись = ПользователиИнформационнойБазы.СоздатьПользователя(); - УчетнаяЗапись.Имя = "Администратор"; - УчетнаяЗапись.ПолноеИмя = УчетнаяЗапись.Имя; - УчетнаяЗапись.Роли.Очистить(); - УчетнаяЗапись.Роли.Добавить(Метаданные.Роли.ПолныеПрава); - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - РольАдминистратораСистемы = РольАдминистратораСистемы(); - Если НЕ УчетнаяЗапись.Роли.Содержит(РольАдминистратораСистемы) Тогда - УчетнаяЗапись.Роли.Добавить(РольАдминистратораСистемы); - КонецЕсли; - КонецЕсли; - УчетнаяЗапись.Записать(); - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - Иначе - НайтиНеоднозначныхПользователейИБ(, УчетнаяЗапись.УникальныйИдентификатор); - КонецЕсли; - - Если ПользовательПоИдентификаторуСуществует(УчетнаяЗапись.УникальныйИдентификатор) Тогда - Пользователь = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", УчетнаяЗапись.УникальныйИдентификатор); - // Если администратор связан с внешним пользователем - это ошибка, требуется очистить связь - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда - ВнешнийПользователь = Справочники.ВнешниеПользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", УчетнаяЗапись.УникальныйИдентификатор); - ВнешнийПользовательОбъект = ВнешнийПользователь.ПолучитьОбъект(); - ВнешнийПользовательОбъект.ОбменДанными.Загрузка = Истина; - ВнешнийПользовательОбъект.Записать(); - КонецЕсли; - КонецЕсли; - - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда - Пользователь = Справочники.Пользователи.НайтиПоНаименованию(УчетнаяЗапись.ПолноеИмя); - Если ЗначениеЗаполнено(Пользователь) - И ЗначениеЗаполнено(Пользователь.ИдентификаторПользователяИБ) - И Пользователь.ИдентификаторПользователяИБ <> УчетнаяЗапись.УникальныйИдентификатор - И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда - Пользователь = Неопределено; - КонецЕсли; - КонецЕсли; - - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда - Пользователь = Справочники.Пользователи.СоздатьЭлемент(); - ПользовательСоздан = Истина; - Иначе - Пользователь = Пользователь.ПолучитьОбъект(); - ПользовательСоздан = Ложь; - КонецЕсли; - Пользователь.ИдентификаторПользователяИБ = УчетнаяЗапись.УникальныйИдентификатор; - Пользователь.Наименование = УчетнаяЗапись.ПолноеИмя; - Пользователь.ОбменДанными.Загрузка = Истина; - Пользователь.Записать(); - Если ПользовательСоздан Тогда - ОбновитьСоставыГруппПользователей(Справочники.ГруппыПользователей.ВсеПользователи); - КонецЕсли; - - ПользователиПереопределяемый.ПриЗаписиПервогоАдминистратора(Пользователь.Ссылка); - - Возврат Пользователь.Ссылка; - -КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, используемые в работе элементов управляемых форм -// Возвращает роль, предоставляющую права администрирования системы. -// -// Возвращаемое значение: -// ОбъектМетаданных: Роль. -// -Функция РольАдминистратораСистемы() Экспорт - - РольАдминистратораСистемы = Метаданные.Роли.АдминистраторСистемы; - - Если СтандартныеПодсистемыПереопределяемый.ЭтоБазоваяВерсияКонфигурации() Тогда - РольАдминистратораСистемы = Метаданные.Роли.ПолныеПрава; - КонецЕсли; - - ПользователиПереопределяемый.ИзменитьРольАдминистратораСистемы(РольАдминистратораСистемы); - - Возврат РольАдминистратораСистемы; - -КонецФункции - -// Возвращает пользователя справочника Пользователи, соответствующего пользователю ИБ с указанным именем. -// Для поиска любого пользователя требуются административные права. -// Если административных прав нет, допустимо искать только пользователя для текущего пользователя ИБ. -// -// Параметры: -// ИмяПользователя - Строка - имя пользователя информационной базы -// -// Возвращаемое значение: -// СправочникСсылка.Пользователи - если пользователь найден. -// Справочники.Пользователи.ПустаяСсылка() - если пользователь ИБ найден. -// Неопределено - если пользователь ИБ не найден. -// -Функция НайтиПоИмени(знач ИмяПользователяИБ) Экспорт - - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователяИБ); - - Если ПользовательИБ = Неопределено Тогда - Возврат Неопределено; - Иначе - НайтиНеоднозначныхПользователейИБ(, ПользовательИБ.УникальныйИдентификатор); - Возврат Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); - КонецЕсли; - -КонецФункции - -// Возвращает список пользователей, групп пользователей, внешних пользователей и групп внешних пользователей -// не помеченных на удаление. +// Возвращает список пользователей, групп пользователей, внешних пользователей и +// групп внешних пользователей не помеченных на удаление. // Используется в обработчиках событий ОкончаниеВводаТекста и АвтоПодбор. // // Параметры: @@ -348,9 +234,13 @@ // ВключаяВнешнихПользователей - Неопределено, Булево, когда Неопределено, используется значение, // возвращаемое функцией ВнешниеПользователи.ИспользоватьВнешнихПользователей(). // -// БезПользователей - Булево, если Истина, то элементы справочника Пользователи исключаются из результата. +// БезПользователей - Булево, если Истина, то элементы справочника Пользователи +// исключаются из результата. // -Функция СформироватьДанныеВыбораПользователя(Знач Текст, Знач ВключаяГруппы = Истина, Знач ВключаяВнешнихПользователей = Неопределено, БезПользователей = Ложь) Экспорт +Функция СформироватьДанныеВыбораПользователя(Знач Текст, + Знач ВключаяГруппы = Истина, + Знач ВключаяВнешнихПользователей = Неопределено, + Знач БезПользователей = Ложь) Экспорт ВключаяГруппы = ВключаяГруппы И ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"); @@ -379,9 +269,10 @@ |ИЗ | Справочник.Пользователи КАК Пользователи |ГДЕ - | (НЕ Пользователи.ПометкаУдаления) + | НЕ Пользователи.ПометкаУдаления | И Пользователи.Наименование ПОДОБНО &Текст | И Пользователи.Недействителен = ЛОЖЬ + | И Пользователи.Служебный = ЛОЖЬ | |ОБЪЕДИНИТЬ ВСЕ | @@ -393,14 +284,15 @@ | Справочник.ГруппыПользователей КАК ГруппыПользователей |ГДЕ | &ВключаяГруппы - | И (НЕ ГруппыПользователей.ПометкаУдаления) + | И НЕ ГруппыПользователей.ПометкаУдаления | И ГруппыПользователей.Наименование ПОДОБНО &Текст"; КонецЕсли; Если ТипЗнч(ВключаяВнешнихПользователей) <> Тип("Булево") Тогда ВключаяВнешнихПользователей = ВнешниеПользователи.ИспользоватьВнешнихПользователей(); КонецЕсли; - ВключаяВнешнихПользователей = ВключаяВнешнихПользователей И ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеПользователи); + ВключаяВнешнихПользователей = ВключаяВнешнихПользователей + И ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеПользователи); Если ВключаяВнешнихПользователей Тогда Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ " + @@ -456,7 +348,11 @@ // ИдентификаторСтроки - Неопределено, Число, идентификатор строки (не порядковый номер), // когда Неопределено, заполнить картинки для всех строк таблицы. // -Процедура ЗаполнитьНомераКартинокПользователей(Знач Таблица, Знач ИмяПоляПользователь, Знач ИмяПоляНомераКартинки, Знач ИдентификаторСтроки = Неопределено, Знач ОбработатьИерархиюВторогоИТретьегоУровней = Ложь) Экспорт +Процедура ЗаполнитьНомераКартинокПользователей(Знач Таблица, + Знач ИмяПоляПользователь, + Знач ИмяПоляНомераКартинки, + Знач ИдентификаторСтроки = Неопределено, + Знач ОбработатьИерархиюВторогоИТретьегоУровней = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -570,6 +466,130 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, используемые при обновлении информационной базы + +// Используется при обновлении и начальном заполнении информационной базы. +// 1) Создает первого администратора и связывает его с новым или существующим +// пользователем в справочнике Пользователи. +// 2) Связывает администратора, указанного в параметре УчетнаяЗапись с новым или +// существующим пользователем в справочнике Пользователи. +// +// Параметры: +// УчетнаяЗапись - ПользовательИнформационнойБазы - используется, когда нужно связать +// существующего администратора с новым или существующим пользователем +// в справочнике Пользователи. +// +// Возвращаемое значение: +// Неопределено - пользователь, связанный с пользователем ИБ с административными +// правами уже существует. +// СправочникСсылка.Пользователи - пользователь, который был связан с первым администратором или +// администратором, указанным в параметре УчетнаяЗапись. +// +Функция СоздатьАдминистратора(УчетнаяЗапись = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Добавление администратора (администратор системы - полные права). + Если УчетнаяЗапись = Неопределено Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат Неопределено; + КонецЕсли; + + // Если существует пользователь с правом администрирование, + // тогда первый администратор уже создан и его не требуется создавать. + УчетнаяЗапись = Неопределено; + + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + Для каждого ПользовательИБ Из ПользователиИБ Цикл + Если ЭтоПолноправныйПользователь(ПользовательИБ,, Ложь) Тогда + Возврат Неопределено; + КонецЕсли; + КонецЦикла; + + Если УчетнаяЗапись = Неопределено Тогда + УчетнаяЗапись = ПользователиИнформационнойБазы.СоздатьПользователя(); + УчетнаяЗапись.Имя = "Администратор"; + УчетнаяЗапись.ПолноеИмя = УчетнаяЗапись.Имя; + УчетнаяЗапись.Роли.Очистить(); + УчетнаяЗапись.Роли.Добавить(Метаданные.Роли.ПолныеПрава); + + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + РольАдминистратораСистемы = РольАдминистратораСистемы(); + + Если НЕ УчетнаяЗапись.Роли.Содержит(РольАдминистратораСистемы) Тогда + УчетнаяЗапись.Роли.Добавить(РольАдминистратораСистемы); + КонецЕсли; + КонецЕсли; + УчетнаяЗапись.Записать(); + КонецЕсли; + Иначе + Если НЕ УчетнаяЗапись.Роли.Содержит(Метаданные.Роли.ПолныеПрава) + ИЛИ НЕ УчетнаяЗапись.Роли.Содержит(Пользователи.РольАдминистратораСистемы()) Тогда + + Возврат Неопределено; + КонецЕсли; + + НайтиНеоднозначныхПользователейИБ(, УчетнаяЗапись.УникальныйИдентификатор); + КонецЕсли; + + Если ПользователиСлужебный.ПользовательПоИдентификаторуСуществует( + УчетнаяЗапись.УникальныйИдентификатор) Тогда + + Пользователь = Справочники.Пользователи.НайтиПоРеквизиту( + "ИдентификаторПользователяИБ", УчетнаяЗапись.УникальныйИдентификатор); + + // Если администратор связан с внешним пользователем - это ошибка, требуется очистить связь. + Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + + ВнешнийПользователь = Справочники.ВнешниеПользователи.НайтиПоРеквизиту( + "ИдентификаторПользователяИБ", УчетнаяЗапись.УникальныйИдентификатор); + + ВнешнийПользовательОбъект = ВнешнийПользователь.ПолучитьОбъект(); + ВнешнийПользовательОбъект.ИдентификаторПользователяИБ = Неопределено; + ВнешнийПользовательОбъект.ОбменДанными.Загрузка = Истина; + ВнешнийПользовательОбъект.Записать(); + КонецЕсли; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + Пользователь = Справочники.Пользователи.НайтиПоНаименованию(УчетнаяЗапись.ПолноеИмя); + + Если ЗначениеЗаполнено(Пользователь) + И ЗначениеЗаполнено(Пользователь.ИдентификаторПользователяИБ) + И Пользователь.ИдентификаторПользователяИБ <> УчетнаяЗапись.УникальныйИдентификатор + И ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + Пользователь.ИдентификаторПользователяИБ) <> Неопределено Тогда + + Пользователь = Неопределено; + КонецЕсли; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Пользователь) Тогда + Пользователь = Справочники.Пользователи.СоздатьЭлемент(); + ПользовательСоздан = Истина; + Иначе + Пользователь = Пользователь.ПолучитьОбъект(); + ПользовательСоздан = Ложь; + КонецЕсли; + + Пользователь.Наименование = УчетнаяЗапись.ПолноеИмя; + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить( + "УникальныйИдентификатор", УчетнаяЗапись.УникальныйИдентификатор); + + Пользователь.ДополнительныеСвойства.Вставить( + "ОписаниеПользователяИБ", ОписаниеПользователяИБ); + + Пользователь.Записать(); + + Возврат Пользователь.Ссылка; + +КонецФункции + // Устанавливает константу ИспользоватьГруппыПользователей в Истина, // если существует хотя бы одна группа пользователей в справочнике. // @@ -602,91 +622,694 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с пользователями информационной базы + +// Возвращает полное имя не указанного пользователя для отображения в интерфейсах. +Функция ПолноеИмяНеуказанногоПользователя() Экспорт + + Возврат НСтр("ru = '<Не указан>'"); + +КонецФункции + +// Проверяет связан ли пользовательИБ с элементом справочника Пользователи или +// элементом справочника ВнешниеПользователи. +// +// Параметры: +// ПользовательИБ - Строка - имя пользователя ИБ. +// УникальныйИдентификатор - уникальный идентификатор пользователя ИБ. +// ПользовательИнформационнойБазы. +// +// УчетнаяЗапись - ПользовательИнформационнойБазы (возвращаемое значение). +// +// Возвращаемое значение: +// Булево. Истина, если пользователь ИБ существует и его идентификатор +// используется либо в справочнике Пользователи, либо в справочнике ВнешниеПользователи. +// +Функция ПользовательИБЗанят(ПользовательИБ, УчетнаяЗапись = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(ПользовательИБ) = Тип("Строка") Тогда + УчетнаяЗапись = ПользователиИнформационнойБазы.НайтиПоИмени(ПользовательИБ); + + ИначеЕсли ТипЗнч(ПользовательИБ) = Тип("УникальныйИдентификатор") Тогда + УчетнаяЗапись = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользовательИБ); + Иначе + УчетнаяЗапись = ПользовательИБ; + КонецЕсли; + + Если УчетнаяЗапись = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ПользователиСлужебный.ПользовательПоИдентификаторуСуществует( + УчетнаяЗапись.УникальныйИдентификатор); + +КонецФункции + // Возвращает пустую структуру описания пользователя ИБ. // // Возвращаемое значение: // Структура. -// ПользовательИнфБазыУникальныйИдентификатор - УникальныйИдентификатор -// ПользовательИнфБазыИмя - Строка -// ПользовательИнфБазыПолноеИмя - Строка +// УникальныйИдентификатор - УникальныйИдентификатор. +// Имя - Строка. +// ПолноеИмя - Строка. // -// ПользовательИнфБазыАутентификацияOpenID - Булево +// АутентификацияOpenID - Булево. // -// ПользовательИнфБазыАутентификацияСтандартная - Булево -// ПользовательИнфБазыПоказыватьВСпискеВыбора - Булево -// ПользовательИнфБазыПароль - Неопределено -// ПользовательИнфБазыСохраняемоеЗначениеПароля - Неопределено -// ПользовательИнфБазыПарольУстановлен - Булево -// ПользовательИнфБазыЗапрещеноИзменятьПароль - Булево +// АутентификацияСтандартная - Булево. +// ПоказыватьВСпискеВыбора - Булево. +// Пароль - Неопределено. +// СохраняемоеЗначениеПароля - Неопределено. +// ПарольУстановлен - Булево. +// ЗапрещеноИзменятьПароль - Булево. // -// ПользовательИнфБазыАутентификацияОС - Булево -// ПользовательИнфБазыПользовательОС - Строка +// АутентификацияОС - Булево. +// ПользовательОС - Строка. // -// ПользовательИнфБазыОсновнойИнтерфейс - Строка (имя интерфейса из коллекции Метаданные.Интерфейсы) -// ПользовательИнфБазыРежимЗапуска - Строка (значения: "Авто", "ОбычноеПриложение", "УправляемоеПриложение") -// ПользовательИнфБазыЯзык - Строка (имя языка из коллекции Метаданные.Языки) +// ОсновнойИнтерфейс - Неопределено, +// Строка (имя интерфейса из коллекции +// Метаданные.Интерфейсы). +// +// РежимЗапуска - Неопределено, +// Строка (значения: "Авто", +// "ОбычноеПриложение", +// "УправляемоеПриложение"). +// Язык - Неопределено, +// Строка (имя языка из коллекции +// Метаданные.Языки). +// +// Роли - Неопределено, +// Массив значений типа Строка (имена ролей +// из коллекции Метаданные.Роли). // Функция НовоеОписаниеПользователяИБ() Экспорт // Подготовка структур возвращаемых данных Свойства = Новый Структура; - Свойства.Вставить("ПользовательИнфБазыУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - Свойства.Вставить("ПользовательИнфБазыИмя", ""); - Свойства.Вставить("ПользовательИнфБазыПолноеИмя", ""); - Свойства.Вставить("ПользовательИнфБазыАутентификацияOpenID", Ложь); - Свойства.Вставить("ПользовательИнфБазыАутентификацияСтандартная", Ложь); - Свойства.Вставить("ПользовательИнфБазыПоказыватьВСпискеВыбора", Ложь); - Свойства.Вставить("ПользовательИнфБазыПароль", Неопределено); - Свойства.Вставить("ПользовательИнфБазыСохраняемоеЗначениеПароля", Неопределено); - Свойства.Вставить("ПользовательИнфБазыПарольУстановлен", Ложь); - Свойства.Вставить("ПользовательИнфБазыЗапрещеноИзменятьПароль", Ложь); - Свойства.Вставить("ПользовательИнфБазыАутентификацияОС", Ложь); - Свойства.Вставить("ПользовательИнфБазыПользовательОС", ""); - Свойства.Вставить("ПользовательИнфБазыОсновнойИнтерфейс", ?(Метаданные.ОсновнойИнтерфейс = Неопределено, "", Метаданные.ОсновнойИнтерфейс.Имя)); - Свойства.Вставить("ПользовательИнфБазыРежимЗапуска", "Авто"); - Свойства.Вставить("ПользовательИнфБазыЯзык", ?(Метаданные.ОсновнойЯзык = Неопределено, "", Метаданные.ОсновнойЯзык.Имя)); + + Свойства.Вставить("УникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + + Свойства.Вставить("Имя", ""); + Свойства.Вставить("ПолноеИмя", ""); + Свойства.Вставить("АутентификацияOpenID", Ложь); + Свойства.Вставить("АутентификацияСтандартная", Ложь); + Свойства.Вставить("ПоказыватьВСпискеВыбора", Ложь); + Свойства.Вставить("СтарыйПароль", Неопределено); + Свойства.Вставить("Пароль", Неопределено); + Свойства.Вставить("СохраняемоеЗначениеПароля", Неопределено); + Свойства.Вставить("ПарольУстановлен", Ложь); + Свойства.Вставить("ЗапрещеноИзменятьПароль", Ложь); + Свойства.Вставить("АутентификацияОС", Ложь); + Свойства.Вставить("ПользовательОС", ""); + + Свойства.Вставить("ОсновнойИнтерфейс", + ?(Метаданные.ОсновнойИнтерфейс = Неопределено, "", Метаданные.ОсновнойИнтерфейс.Имя)); + + Свойства.Вставить("РежимЗапуска", "Авто"); + + Свойства.Вставить("Язык", + ?(Метаданные.ОсновнойЯзык = Неопределено, "", Метаданные.ОсновнойЯзык.Имя)); + + Свойства.Вставить("Роли", Неопределено); Возврат Свойства; КонецФункции +// Считывает свойства пользователя информационной базы по +// строковому или уникальному идентификатору. +// +// Параметры: +// Идентификатор - Неопределено, Строка, УникальныйИдентификатор (идентификатор пользователя). +// Свойства - Структура со свойствами, как в фукнции НовоеОписаниеПользователяИБ(). +// ОписаниеОшибки - Строка, содержит описание ошибки, если чтение не удалось. +// +// Возвращаемое значение: +// Булево, +// если Истина - успех, иначе отказ, см. ОписаниеОшибки. +// +Функция ПрочитатьПользователяИБ(Знач Идентификатор, + Свойства = Неопределено, + ОписаниеОшибки = "", + ПользовательИБ = Неопределено) Экспорт + + Свойства = НовоеОписаниеПользователяИБ(); + + Свойства.Роли = Новый Массив; + + Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); + + ИначеЕсли ТипЗнч(Идентификатор) = Тип("Строка") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Идентификатор); + Иначе + ПользовательИБ = Неопределено; + КонецЕсли; + + Если ПользовательИБ = Неопределено Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пользователь информационной базы ""%1""' не найден."), Идентификатор); + Возврат Ложь; + КонецЕсли; + + СкопироватьСвойстваПользователяИБ(Свойства, ПользовательИБ); + + Возврат Истина; + +КонецФункции + +// Перезаписывает свойства пользователя ИБ, найденного по строковому или +// уникальному идентификатору, либо создает нового пользователя ИБ +// (если задано создать существующего пользователя - будет ошибка). +// +// Параметры: +// Идентификатор - Строка, УникальныйИдентификатор (идентификатор пользователя). +// +// ОбновляемыеСвойства - Структура со свойствами, как в фукнции НовоеОписаниеПользователяИБ(). +// Свойство может быть не задано, тогда используется прочитанное или +// начальное значение. Следующие свойства используются нестандартно: +// +// УникальныйИдентификатор - Неопределено (возвращаемое значение, устанавливается +// после записи пользователя ИБ). +// СтарыйПароль - Неопределено, +// Строка - если заданный пароль не совпадет +// с существующим будет ошибка. +// +// СоздатьНового - Ложь - никаких дополнительных действий. +// Неопределено, +// Истина - создается новый пользователь ИБ, когда ПользовательИБ +// не найден по указанному идентификатору. +// При значении Истина, если Пользователь ИБ найден +// по указанному идентификатору - будет ошибка. +// +// ОписаниеОшибки - Строка, содержит описание ошибки, если чтение не удалось. +// +// Возвращаемое значение: +// Булево, если Истина - успех, иначе отказ, см. ОписаниеОшибки. +// +Функция ЗаписатьПользователяИБ(Знач Идентификатор, + Знач ОбновляемыеСвойства, + Знач СоздатьНового = Ложь, + ОписаниеОшибки = "", + ПользовательИБ = Неопределено) Экспорт + + ПользовательИБ = Неопределено; + СтарыеСвойства = Неопределено; + + ПредварительноеЧтение = ПрочитатьПользователяИБ( + Идентификатор, СтарыеСвойства, ОписаниеОшибки, ПользовательИБ); + + Если НЕ ПредварительноеЧтение Тогда + + Если СоздатьНового = Неопределено ИЛИ СоздатьНового = Истина Тогда + ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + Иначе + Возврат Ложь; + КонецЕсли; + ИначеЕсли СоздатьНового = Истина Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Невозможно создать пользователя информационной базы + |""%1"" (%2), + |так как он уже существует.'"), + СтарыеСвойства.Имя, + СтарыеСвойства.УникальныйИдентификатор); + Возврат Ложь; + Иначе + Если ОбновляемыеСвойства.Свойство("СтарыйПароль") + И ТипЗнч(ОбновляемыеСвойства.СтарыйПароль) = Тип("Строка") Тогда + + СтарыйПарольСовпадает = Ложь; + + ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля( + ОбновляемыеСвойства.СтарыйПароль, + СтарыеСвойства.УникальныйИдентификатор, + СтарыйПарольСовпадает); + + Если НЕ СтарыйПарольСовпадает Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи пользователя информационной базы + |""%1"" (%2), + |старый пароль указан не верно.'"), + СтарыеСвойства.Имя, + СтарыеСвойства.УникальныйИдентификатор); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Пользователи'"), УровеньЖурналаРегистрации.Информация, , , + ОписаниеОшибки); + + Возврат Ложь; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Подготовка новых значений свойств. + НовыеСвойства = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтарыеСвойства); + + Для каждого КлючИЗначение Из НовыеСвойства Цикл + + Если ОбновляемыеСвойства.Свойство(КлючИЗначение.Ключ) + И ОбновляемыеСвойства[КлючИЗначение.Ключ] <> Неопределено Тогда + + НовыеСвойства[КлючИЗначение.Ключ] = ОбновляемыеСвойства[КлючИЗначение.Ключ]; + КонецЕсли; + КонецЦикла; + + СкопироватьСвойстваПользователяИБ(ПользовательИБ, НовыеСвойства); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь; + КонецЕсли; + + // Попытка записи нового или измененного пользователяИБ. + Попытка + ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + Если ИнформацияОбОшибке.Причина = Неопределено Тогда + ОписаниеОшибки = ИнформацияОбОшибке.Описание; + Иначе + ОписаниеОшибки = ИнформацияОбОшибке.Причина.Описание; + КонецЕсли; + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При записи пользователя информационной базы + |""%1"" (%2) произошла ошибка: + | + |""%3"".'"), + ПользовательИБ.Имя, + ?(ПредварительноеЧтение, + СтарыеСвойства.УникальныйИдентификатор, + НСтр("ru = 'новый'")), + ОписаниеОшибки); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Пользователи'"), УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); + + Возврат Ложь; + КонецПопытки; + + Если ЗначениеЗаполнено(СтарыеСвойства.Имя) + И СтарыеСвойства.Имя <> НовыеСвойства.Имя Тогда + // Перемещение настроек. + ПользователиСлужебный.СкопироватьНастройкиПользователя( + СтарыеСвойства.Имя, НовыеСвойства.Имя, Истина); + КонецЕсли; + + ПользователиПереопределяемый.ПриЗаписиПользователяИнформационнойБазы(СтарыеСвойства, НовыеСвойства); + + ОбновляемыеСвойства.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор); + Возврат Истина; + +КонецФункции + +// Удаляет указанного пользователя информационной базы. +// +// Параметры: +// Идентификатор - Строка - имя пользователя ИБ, +// УникальныйИдентификатор - идентификатор пользователя ИБ. +// +// ОписаниеОшибки - Строка, содержит описание ошибки, если удаление не удалось. +// +// Возвращаемое значение: +// Булево, если Истина - успех, иначе отказ, см. ОписаниеОшибки. +// +Функция УдалитьПользователяИБ(Знач Идентификатор, + ОписаниеОшибки = "", + ПользовательИБ = Неопределено) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ЭтоНеразделенныйПользователь(Идентификатор) Тогда + + ВызватьИсключение(НСтр("ru = 'Удаление неразделенных пользователей + |при включенном использовании разделителей запрещено.'")); + КонецЕсли; + + ПользовательИБ = Неопределено; + Свойства = Неопределено; + + Если НЕ ПрочитатьПользователяИБ(Идентификатор, Свойства, ОписаниеОшибки, ПользовательИБ) Тогда + Возврат Ложь; + Иначе + Попытка + ПользовательИБ.Удалить(); + Исключение + ОписаниеОшибки = НСтр("ru = 'Ошибка при удалении пользователя информационной базы:'") + Символы.ПС + ИнформацияОбОшибке().Причина.Описание; + Возврат Ложь; + КонецПопытки; + КонецЕсли; + + ПользователиПереопределяемый.ПослеУдаленияПользователяИнформационнойБазы(Свойства); + + Возврат Истина; + +КонецФункции + +// Копирует значения свойств пользователя ИБ с преобразованием +// в/из строковых идентификаторов для основного интерфейса, +// языка, режима запуска и ролей. +// +// Несуществующие свойства в источнике или приемнике не копируются. +// +// Свойства Пароль и СохраняемоеЗначениеПароля не копируются, если +// значения в Источнике равно Неопределено. +// +// Свойства АутентификацияОС, АутентификацияСтандартная, +// АутентификацияOpenID и ПользовательОС не переустанавливается, +// если совпадают, когда Приемник типа ПользовательИнформационнойБазы. +// +// Свойства УникальныйИдентификатор, ПарольУстановлен, СтарыйПароль +// не копируются, если Приемник типа ПользовательИнформационнойБазы. +// +// Преобразование выполняется только для типа Источника или Приемника +// ПользовательИнформационнойБазы. +// +// Параметры: +// Приемник - Структура - подмножество свойств из НовоеОписаниеПользователяИБ(). +// ИЛИ НЕ Структура, например: +// ПользовательИнформационнойБазы, +// ДанныеФормыКоллекция. +// +// Источник - как и приемник, но типы обратные, т.е. когда в Приемнике +// тип Структура, тогда в источнике НЕ Структура. +// +// СписокСвойств - Строка - список свойств через запятую, +// которые нужно скопировать (без префикса). +// +// ИсключаемыеСвойства - Строка - список свойств через запятую, +// которые не нужно копировать (без префикса). +// +// ПрефиксСвойств - Строка - начальное имя для Источника или Приемника типа НЕ Структура. +// +Процедура СкопироватьСвойстваПользователяИБ(Приемник, + Источник, + КопируемыеСвойства = "", + ИсключаемыеСвойства = "", + ПрефиксСвойств = "") Экспорт + + ВсеСвойства = НовоеОписаниеПользователяИБ(); + + Если ЗначениеЗаполнено(КопируемыеСвойства) Тогда + СтруктураКопируемыхСвойств = Новый Структура(КопируемыеСвойства); + Иначе + СтруктураКопируемыхСвойств = ВсеСвойства; + КонецЕсли; + + Если ЗначениеЗаполнено(ИсключаемыеСвойства) Тогда + СтруктураИсключаемыхСвойств = Новый Структура(ИсключаемыеСвойства); + Иначе + СтруктураИсключаемыхСвойств = Новый Структура; + КонецЕсли; + + ПарольУстановлен = Ложь; + + Для каждого КлючИЗначение Из ВсеСвойства Цикл + Свойство = КлючИЗначение.Ключ; + + Если НЕ СтруктураКопируемыхСвойств.Свойство(Свойство) + ИЛИ СтруктураИсключаемыхСвойств.Свойство(Свойство) Тогда + + Продолжить; + КонецЕсли; + + Если ТипЗнч(Источник) = Тип("ПользовательИнформационнойБазы") Тогда + + Если Свойство = "Пароль" + ИЛИ Свойство = "СтарыйПароль" Тогда + + ЗначениеСвойства = Неопределено; + + ИначеЕсли Свойство = "ОсновнойИнтерфейс" Тогда + ЗначениеСвойства = ?(Источник.ОсновнойИнтерфейс = Неопределено, + "", + Источник.ОсновнойИнтерфейс.Имя); + + ИначеЕсли Свойство = "РежимЗапуска" Тогда + ПолноеИмяЗначения = ПолучитьПолноеИмяПредопределенногоЗначения(Источник.РежимЗапуска); + ЗначениеСвойства = Сред(ПолноеИмяЗначения, Найти(ПолноеИмяЗначения, ".") + 1); + + ИначеЕсли Свойство = "Язык" Тогда + ЗначениеСвойства = ?(Источник.Язык = Неопределено, + "", + Источник.Язык.Имя); + + ИначеЕсли Свойство = "Роли" Тогда + + ВременнаяСтруктура = Новый Структура("Роли", Новый ТаблицаЗначений); + ЗаполнитьЗначенияСвойств(ВременнаяСтруктура, Приемник); + Если ТипЗнч(ВременнаяСтруктура.Роли) = Тип("ТаблицаЗначений") Тогда + Продолжить; + ИначеЕсли ВременнаяСтруктура.Роли = Неопределено Тогда + Приемник.Роли = Новый Массив; + Иначе + Приемник.Роли.Очистить(); + КонецЕсли; + + Для каждого Роль Из Источник.Роли Цикл + Приемник.Роли.Добавить(Роль.Имя); + КонецЦикла; + + Продолжить; + Иначе + Если Свойство <> "АутентификацияOpenID" + ИЛИ ПользователиСлужебныйПовтИсп.АутентификацияOpenIDНастраивается() Тогда + + ЗначениеСвойства = Источник[Свойство]; + Иначе + ЗначениеСвойства = Ложь; + КонецЕсли; + КонецЕсли; + + ПолноеИмяСвойства = ПрефиксСвойств + Свойство; + ВременнаяСтруктура = Новый Структура(ПолноеИмяСвойства, ЗначениеСвойства); + ЗаполнитьЗначенияСвойств(Приемник, ВременнаяСтруктура); + Иначе + Если ТипЗнч(Источник) = Тип("Структура") Тогда + Если Источник.Свойство(Свойство) Тогда + ЗначениеСвойства = Источник[Свойство]; + Иначе + Продолжить; + КонецЕсли; + Иначе + ПолноеИмяСвойства = ПрефиксСвойств + Свойство; + ВременнаяСтруктура = Новый Структура(ПолноеИмяСвойства, Новый ТаблицаЗначений); + ЗаполнитьЗначенияСвойств(ВременнаяСтруктура, Источник); + ЗначениеСвойства = ВременнаяСтруктура[ПолноеИмяСвойства]; + Если ТипЗнч(ЗначениеСвойства) = Тип("ТаблицаЗначений") Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(Приемник) = Тип("ПользовательИнформационнойБазы") Тогда + + Если Свойство = "УникальныйИдентификатор" + ИЛИ Свойство = "СтарыйПароль" + ИЛИ Свойство = "ПарольУстановлен" Тогда + + Продолжить; + + ИначеЕсли Свойство = "АутентификацияOpenID" + ИЛИ Свойство = "АутентификацияСтандартная" + ИЛИ Свойство = "АутентификацияОС" + ИЛИ Свойство = "ПользовательОС" Тогда + + Если Свойство <> "АутентификацияOpenID" + ИЛИ ПользователиСлужебныйПовтИсп.АутентификацияOpenIDНастраивается() Тогда + + Если Приемник[Свойство] <> ЗначениеСвойства Тогда + Приемник[Свойство] = ЗначениеСвойства; + КонецЕсли; + КонецЕсли; + + ИначеЕсли Свойство = "Пароль" Тогда + Если ЗначениеСвойства <> Неопределено Тогда + Приемник.Пароль = ЗначениеСвойства; + ПарольУстановлен = Истина; + КонецЕсли; + + ИначеЕсли Свойство = "СохраняемоеЗначениеПароля" Тогда + Если ЗначениеСвойства <> Неопределено + И НЕ ПарольУстановлен Тогда + Приемник.СохраняемоеЗначениеПароля = ЗначениеСвойства; + КонецЕсли; + + ИначеЕсли Свойство = "ОсновнойИнтерфейс" Тогда + Если ТипЗнч(ЗначениеСвойства) = Тип("Строка") Тогда + Приемник.ОсновнойИнтерфейс = Метаданные.Интерфейсы.Найти(ЗначениеСвойства); + Иначе + Приемник.ОсновнойИнтерфейс = Неопределено; + КонецЕсли; + + ИначеЕсли Свойство = "РежимЗапуска" Тогда + Если ЗначениеСвойства = "Авто" + ИЛИ ЗначениеСвойства = "ОбычноеПриложение" + ИЛИ ЗначениеСвойства = "УправляемоеПриложение" Тогда + + Приемник.РежимЗапуска = РежимЗапускаКлиентскогоПриложения[ЗначениеСвойства]; + Иначе + Приемник.РежимЗапуска = РежимЗапускаКлиентскогоПриложения.Авто; + КонецЕсли; + + ИначеЕсли Свойство = "Язык" Тогда + Если ТипЗнч(ЗначениеСвойства) = Тип("Строка") Тогда + Приемник.Язык = Метаданные.Языки.Найти(ЗначениеСвойства); + Иначе + Приемник.Язык = Неопределено; + КонецЕсли; + + ИначеЕсли Свойство = "Роли" Тогда + Приемник.Роли.Очистить(); + Если ЗначениеСвойства <> Неопределено Тогда + Для каждого ИмяРоли Из ЗначениеСвойства Цикл + Роль = Метаданные.Роли.Найти(ИмяРоли); + Если Роль <> Неопределено Тогда + Приемник.Роли.Добавить(Роль); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + Если Свойство = "Имя" + И Приемник[Свойство] <> ЗначениеСвойства + И СтрДлина(ЗначениеСвойства) > 64 Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка записи пользователя информационной базы + |Имя (для входа): ""%1"" + |превышает длину 64 символа.'"), + ЗначениеСвойства); + КонецЕсли; + Приемник[Свойство] = ЗначениеСвойства; + КонецЕсли; + Иначе + Если Свойство = "Роли" Тогда + + ВременнаяСтруктура = Новый Структура("Роли", Новый ТаблицаЗначений); + ЗаполнитьЗначенияСвойств(ВременнаяСтруктура, Приемник); + Если ТипЗнч(ВременнаяСтруктура.Роли) = Тип("ТаблицаЗначений") Тогда + Продолжить; + ИначеЕсли ВременнаяСтруктура.Роли = Неопределено Тогда + Приемник.Роли = Новый Массив; + Иначе + Приемник.Роли.Очистить(); + КонецЕсли; + + Если Источник.Роли <> Неопределено Тогда + Для каждого Роль Из Источник.Роли Цикл + Приемник.Роли.Добавить(Роль.Имя); + КонецЦикла; + КонецЕсли; + Продолжить; + + ИначеЕсли ТипЗнч(Источник) = Тип("Структура") Тогда + ПолноеИмяСвойства = ПрефиксСвойств + Свойство; + Иначе + ПолноеИмяСвойства = Свойство; + КонецЕсли; + ВременнаяСтруктура = Новый Структура(ПолноеИмяСвойства, ЗначениеСвойства); + ЗаполнитьЗначенияСвойств(Приемник, ВременнаяСтруктура); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Возвращает пользователя справочника Пользователи, соответствующего +// пользователю ИБ с указанным именем. +// Для поиска требуются административные права. Если административных прав нет, +// допустимо искать только пользователя для текущего пользователя ИБ. +// +// Параметры: +// ИмяПользователя - Строка - имя пользователя информационной базы +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи - если пользователь найден. +// Справочники.Пользователи.ПустаяСсылка() - если пользователь ИБ найден. +// Неопределено - если пользователь ИБ не найден. +// +Функция НайтиПоИмени(Знач ИмяПользователяИБ) Экспорт + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователяИБ); + + Если ПользовательИБ = Неопределено Тогда + Возврат Неопределено; + Иначе + НайтиНеоднозначныхПользователейИБ(, ПользовательИБ.УникальныйИдентификатор); + + Возврат Справочники.Пользователи.НайтиПоРеквизиту( + "ИдентификаторПользователяИБ", + ПользовательИБ.УникальныйИдентификатор); + КонецЕсли; + +КонецФункции + +// Возвращает роль, предоставляющую права администрирования системы. +// +// Возвращаемое значение: +// ОбъектМетаданных: Роль. +// +Функция РольАдминистратораСистемы() Экспорт + + РольАдминистратораСистемы = Метаданные.Роли.АдминистраторСистемы; + + Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда + РольАдминистратораСистемы = Метаданные.Роли.ПолныеПрава; + КонецЕсли; + + ПользователиПереопределяемый.ИзменитьРольАдминистратораСистемы(РольАдминистратораСистемы); + + Возврат РольАдминистратораСистемы; + +КонецФункции + // Выполняет поиск идентификаторов пользователей ИБ используемых более одного раза и -// либо вызывает исключение, либо возвращает найденных для произвольной обработки +// либо вызывает исключение, либо возвращает найденных пользователей ИБ для дальнейшей +// обработки. // // Параметры: // Пользователь - Неопределено - проверка для всех пользователей и внешних пользователей. // СправочникСсылка.Пользователи или // СправочникСсылка.ВнешниеПользователи - проверка только для указанной ссылки. // -// ИдентификаторПользователяИБ +// УникальныйИдентификатор // - Неопределено - проверка всех заданных идентификаторов пользователей ИБ. // - УникальныйИдентификатор - проверка только для заданного идентификатора. // -// НайденныеИдентификаторы - Неопределено - при нахождении ошибок вызвается исключение. -// Соответствие - при нахождении ошибок исключение не вызвается, -// а вместо этого заполняется переданное соответствие: -// Ключ - неоднозначный идентификатор пользователя ИБ. -// Значение - массив пользователей и внешних пользователей. +// НайденныеИдентификаторы +// - Неопределено - при нахождении ошибок вызвается исключение. +// Соответствие - при нахождении ошибок исключение не вызвается, +// а вместо этого заполняется переданное соответствие: +// Ключ - неоднозначный идентификатор пользователя ИБ. +// Значение - массив пользователей и внешних пользователей. // -Процедура НайтиНеоднозначныхПользователейИБ(Знач Пользователь = Неопределено, Знач ИдентификаторПользователяИБ = Неопределено, Знач НайденныеИдентификаторы = Неопределено) Экспорт +// ИдентификаторПользователяСервиса - Булево. +// Ложь - проверять ИдентификаторПользователяИБ. +// Истина - проверять ИдентификаторПользователяСервиса. +// +Процедура НайтиНеоднозначныхПользователейИБ(Знач Пользователь = Неопределено, + Знач УникальныйИдентификатор = Неопределено, + Знач НайденныеИдентификаторы = Неопределено, + Знач ИдентификаторПользователяСервиса = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); - Если ТипЗнч(ИдентификаторПользователяИБ) <> Тип("УникальныйИдентификатор") Тогда - ИдентификаторПользователяИБ = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + Если ТипЗнч(УникальныйИдентификатор) <> Тип("УникальныйИдентификатор") Тогда + УникальныйИдентификатор = + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Пользователь", Пользователь); - Запрос.УстановитьПараметр("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ); - Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.УстановитьПараметр("УникальныйИдентификатор", УникальныйИдентификатор); + + Запрос.УстановитьПараметр("ПустойУникальныйИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Запрос.Текст = "ВЫБРАТЬ - | ИдентификаторыПользователей.ИдентификаторПользователяИБ, + | ИдентификаторыПользователей.ИдентификаторПользователяИБ КАК НеоднозначныйИдентификатор, | ИдентификаторыПользователей.Пользователь |ИЗ | (ВЫБРАТЬ - | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ, + | Пользователи.ИдентификаторПользователяИБ, | Пользователи.Ссылка КАК Пользователь | ИЗ | Справочник.Пользователи КАК Пользователи @@ -704,7 +1327,7 @@ | ИдентификаторыПользователей.ИдентификаторПользователяИБ | ИЗ | (ВЫБРАТЬ - | Пользователи.ИдентификаторПользователяИБ КАК ИдентификаторПользователяИБ, + | Пользователи.ИдентификаторПользователяИБ, | Пользователи.Ссылка КАК Пользователь | ИЗ | Справочник.Пользователи КАК Пользователи @@ -712,8 +1335,8 @@ | Пользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор | И НЕ(&Пользователь <> НЕОПРЕДЕЛЕНО | И Пользователи.Ссылка <> &Пользователь) - | И НЕ(&ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор - | И Пользователи.ИдентификаторПользователяИБ <> &ИдентификаторПользователяИБ) + | И НЕ(&УникальныйИдентификатор <> &ПустойУникальныйИдентификатор + | И Пользователи.ИдентификаторПользователяИБ <> &УникальныйИдентификатор) | | ОБЪЕДИНИТЬ ВСЕ | @@ -726,8 +1349,8 @@ | ВнешниеПользователи.ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор | И НЕ(&Пользователь <> НЕОПРЕДЕЛЕНО | И ВнешниеПользователи.Ссылка <> &Пользователь) - | И НЕ(&ИдентификаторПользователяИБ <> &ПустойУникальныйИдентификатор - | И ВнешниеПользователи.ИдентификаторПользователяИБ <> &ИдентификаторПользователяИБ) + | И НЕ(&УникальныйИдентификатор <> &ПустойУникальныйИдентификатор + | И ВнешниеПользователи.ИдентификаторПользователяИБ <> &УникальныйИдентификатор) | ) КАК ИдентификаторыПользователей | СГРУППИРОВАТЬ ПО | ИдентификаторыПользователей.ИдентификаторПользователяИБ @@ -737,6 +1360,12 @@ |УПОРЯДОЧИТЬ ПО | ИдентификаторыПользователей.ИдентификаторПользователяИБ"; + Если ИдентификаторПользователяСервиса Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, + "ИдентификаторПользователяИБ", + "ИдентификаторПользователяСервиса"); + КонецЕсли; + Выгрузка = Запрос.Выполнить().Выгрузить(); Если Выгрузка.Количество() = 0 Тогда @@ -747,32 +1376,41 @@ ТекущийНеоднозначныйИдентификатор = Неопределено; Для каждого Строка Из Выгрузка Цикл - НовыйИдентификаторПользователяИБ = Ложь; - Если Строка.ИдентификаторПользователяИБ <> ТекущийНеоднозначныйИдентификатор Тогда - НовыйИдентификаторПользователяИБ = Истина; - ТекущийНеоднозначныйИдентификатор = Строка.ИдентификаторПользователяИБ; + + НовыйУникальныйИдентификатор = Ложь; + Если Строка.НеоднозначныйИдентификатор <> ТекущийНеоднозначныйИдентификатор Тогда + НовыйУникальныйИдентификатор = Истина; + ТекущийНеоднозначныйИдентификатор = Строка.НеоднозначныйИдентификатор; Если ТипЗнч(НайденныеИдентификаторы) = Тип("Соответствие") Тогда ТекущиеПользователи = Новый Массив; НайденныеИдентификаторы.Вставить(ТекущийНеоднозначныйИдентификатор, ТекущиеПользователи); Иначе - ТекущийПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ТекущийНеоднозначныйИдентификатор); + ТекущийПользовательИБ = + ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ТекущийНеоднозначныйИдентификатор); + Если ТекущийПользовательИБ = Неопределено Тогда ИмяПользователяИБ = НСтр("ru = '<не найден>'"); Иначе ИмяПользователяИБ = ТекущийПользовательИБ.Имя; КонецЕсли; + ОписаниеОшибки = ОписаниеОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Пользователю ИБ ""%1"" с идентификатором %2 + ?(ИдентификаторПользователяСервиса, + НСтр("ru = 'Пользователю сервиса с идентификатором ""%2"" |соответствует более одного пользователя базы данных:'"), + НСтр("ru = 'Пользователю ИБ ""%1"" с идентификатором ""%2"" + |соответствует более одного пользователя базы данных:'") ), ИмяПользователяИБ, ТекущийНеоднозначныйИдентификатор); КонецЕсли; КонецЕсли; + Если ТипЗнч(НайденныеИдентификаторы) = Тип("Соответствие") Тогда ТекущиеПользователи.Добавить(Строка.Пользователь); Иначе - Если НЕ НовыйИдентификаторПользователяИБ Тогда + Если НЕ НовыйУникальныйИдентификатор Тогда ОписаниеОшибки = ОписаниеОшибки + ","; КонецЕсли; ОписаниеОшибки = ОписаниеОшибки @@ -791,1248 +1429,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Заполняет параметр сеанса ТекущийПользователь или ТекущийВнешнийПользователь -// значением пользователя, найденному по пользователю информационной базы -// под которым запущен сеанс. -// Если пользователь не найден, то при наличии административных прав -// создается новый пользователь в справочнике, иначе вызывается исключение. -// -Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПользовательНеНайден = Ложь; - СоздатьПользователя = Ложь; - СсылкаНового = Неопределено; - - ТекущийПользователь = Неопределено; - ТекущийВнешнийПользователь = Неопределено; - - Если ПустаяСтрока(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) Тогда - - ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка(); - - СвойстваНеуказанногоПользователя = СвойстваНеуказанногоПользователя(); - - ИмяПользователя = СвойстваНеуказанногоПользователя.ПолноеИмя; - ПолноеИмяПользователя = СвойстваНеуказанногоПользователя.ПолноеИмя; - СсылкаНового = СвойстваНеуказанногоПользователя.СтандартнаяСсылка; - - Если СвойстваНеуказанногоПользователя.Ссылка = Неопределено Тогда - ПользовательНеНайден = Истина; - СоздатьПользователя = Истина; - ИдентификаторПользователяИБ = ""; - Иначе - ТекущийПользователь = СвойстваНеуказанногоПользователя.Ссылка; - КонецЕсли; - Иначе - ИдентификаторПользователяИБ = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; - - НайтиНеоднозначныхПользователейИБ(, ИдентификаторПользователяИБ); - - Запрос = Новый Запрос; - Запрос.Параметры.Вставить("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ); - - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Пользователи.Ссылка КАК Ссылка - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ"; - РезультатПользователи = Запрос.Выполнить(); - - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ВнешниеПользователи.Ссылка КАК Ссылка - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ"; - РезультатВнешниеПользователи = Запрос.Выполнить(); - - Если НЕ РезультатВнешниеПользователи.Пустой() Тогда - - Выборка = РезультатВнешниеПользователи.Выбрать(); - Выборка.Следующий(); - ТекущийПользователь = Справочники.Пользователи.ПустаяСсылка(); - ТекущийВнешнийПользователь = Выборка.Ссылка; - - Если НЕ ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда - - ТекстСообщенияОбОшибке = НСтр("ru = 'Внешние пользователи отключены.'"); - ВызватьИсключение ТекстСообщенияОбОшибке; - КонецЕсли; - Иначе - ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка(); - - Если РезультатПользователи.Пустой() Тогда - Если ЭтоПолноправныйПользователь(,,Ложь) Тогда - - ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); - ИмяПользователя = ТекущийПользователь.Имя; - ПолноеИмяПользователя = ТекущийПользователь.ПолноеИмя; - ИдентификаторПользователяИБ = ТекущийПользователь.УникальныйИдентификатор; - ПользовательПоНаименованию = СсылкаПользователяПоПолномуНаименованию(ПолноеИмяПользователя); - - Если ПользовательПоНаименованию = Неопределено Тогда - ПользовательНеНайден = Истина; - СоздатьПользователя = Истина; - Иначе - ТекущийПользователь = ПользовательПоНаименованию; - КонецЕсли; - Иначе - ПользовательНеНайден = Истина; - КонецЕсли; - Иначе - Выборка = РезультатПользователи.Выбрать(); - Выборка.Следующий(); - ТекущийПользователь = Выборка.Ссылка; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Если СоздатьПользователя Тогда - - НачатьТранзакцию(); - - СтандартныеПодсистемыПереопределяемый.ЗарегистрироватьНеразделенногоПользователя(); - - Если СсылкаНового = Неопределено Тогда - СсылкаНового = Справочники.Пользователи.ПолучитьСсылку(); - КонецЕсли; - ТекущийПользователь = СсылкаНового; - - НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент(); - НовыйПользователь.ИдентификаторПользователяИБ = ИдентификаторПользователяИБ; - НовыйПользователь.Наименование = ПолноеИмяПользователя; - НовыйПользователь.УстановитьСсылкуНового(СсылкаНового); - - Попытка - НовыйПользователь.Записать(); - Исключение - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Авторизация не выполнена. - |Пользователь: %1 не найден в справочнике ""Пользователи"". - | - |Обратитесь к администратору. - |Возникла ошибка при добавлении пользователя в справочник. - |%2'"), - ИмяПользователя, - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); - ВызватьИсключение ТекстСообщенияОбОшибке; - КонецПопытки; - - ЗафиксироватьТранзакцию(); - - ИначеЕсли ПользовательНеНайден Тогда - ВызватьИсключение ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя); - КонецЕсли; - - Если ТекущийПользователь = Неопределено - ИЛИ ТекущийВнешнийПользователь = Неопределено Тогда - - ТекстСообщенияОбОшибке = ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) + - НСтр("ru = ' - |Возникла внутренняя ошибка при поиске пользователя.'"); - ВызватьИсключение ТекстСообщенияОбОшибке; - КонецЕсли; - - ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь; - ПараметрыСеанса.ТекущийВнешнийПользователь = ТекущийВнешнийПользователь; - - УстановленныеПараметры.Добавить(ИмяПараметра); - -КонецПроцедуры - -// Вызывается при начале работы системы, чтобы проверить возможность выполнения авторизации и -// вызвать заполнение значений параметров сеанса ТекущийПользователь и ТекущийВнешнийПользователь. +// Возвращает сохраняемое значение пароля для указанного пароля. +// +// Параметры: +// Пароль - Строка - пароль для которого нужно получить сохраняемое значение. // // Возвращаемое значение: -// Строка - если не пустая строка, значит ошибка авторизации, -// следует завершить работу 1С:Предприятия. +// Строка - сохраняемое значение пароля. // -Функция АвторизоватьТекущегоПользователя() Экспорт +Функция СохраняемоеЗначениеСтрокиПароля(Знач Пароль) Экспорт - УстановитьПривилегированныйРежим(Истина); - - ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); - ПроверитьПраваПользователя(ТекущийПользователь); - - СтандартныеПодсистемыПереопределяемый.ЗарегистрироватьНеразделенногоПользователя(); - - Если ПустаяСтрока(ТекущийПользователь.Имя) - ИЛИ ПользовательПоИдентификаторуСуществует(ТекущийПользователь.УникальныйИдентификатор) Тогда - // Авторизуется пользователь по умолчанию - // или пользовательИБ найден в справочнике. - Возврат ""; - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ТекущийПользователь.РазделениеДанных.Количество() = 0 Тогда - - - НачатьТранзакцию(); - - // Это неразделенный пользователь, требуется создать элемент в текущей области. - ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент(); - ПользовательОбъект.Наименование = ТекущийПользователь.Имя; - ПользовательОбъект.ИдентификаторПользователяИБ = ТекущийПользователь.УникальныйИдентификатор; - ПользовательОбъект.Записать(); - - ЗафиксироватьТранзакцию(); - УстановитьПривилегированныйРежим(Ложь); - - Возврат ""; - КонецЕсли; - - // Требуется либо создать администратора, либо сообщить об отказе авторизации. - ТекстСообщенияОбОшибке = ""; - ТребуетсяСоздатьАдминистратора = Ложь; - - ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); - - Если ПользователиИБ.Количество() = 1 Или ЭтоПолноправныйПользователь(, Истина, Ложь) Тогда - // Авторизуется администратор, созданный в конфигураторе. - ТребуетсяСоздатьАдминистратора = Истина; - Иначе - // Авторизуется обычный пользователь, созданный в конфигураторе. - ТекстСообщенияОбОшибке = ТекстСообщенияПользовательНеНайденВСправочнике(ТекущийПользователь.Имя); - КонецЕсли; - - Если ТребуетсяСоздатьАдминистратора Тогда - // - Если РольДоступна(Метаданные.Роли.ПолныеПрава) - И РольДоступна(РольАдминистратораСистемы()) Тогда - // - Пользователь = СоздатьПервогоАдминистратора(ТекущийПользователь); - // - Комментарий = НСтр("ru = 'Выполняется запуск от имени пользователя с ролью ""Полные права"", - |который не зарегистрирован в списке пользователей. - |Выполнена автоматическая регистрация в списке пользователей. - | - |Для ведения списка и настройки прав пользователей предназначен список Пользователи, - |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); - ПользователиПереопределяемый.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'"), - УровеньЖурналаРегистрации.Предупреждение, - Метаданные.Справочники.Пользователи, - Пользователь, - Комментарий); - Иначе - ТекстСообщенияОбОшибке = НСтр("ru = 'Запуск от имени пользователя с правом Администрирование невозможен, - |так как он не зарегистрирован в списке пользователей. - | - |Для ведения списка и настройки прав пользователей предназначен список Пользователи, - |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); - КонецЕсли; - КонецЕсли; - - Возврат ТекстСообщенияОбОшибке; + Возврат ПользователиСлужебный.СохраняемоеЗначениеСтрокиПароля(Пароль); КонецФункции - -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.5.2"; - Обработчик.Процедура = "Пользователи.ЗаполнитьИдентификаторыПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.5.15"; - Обработчик.Процедура = "Пользователи.ЗаполнениеРегистраСоставыГруппПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.6.5"; - Обработчик.Процедура = "ВнешниеПользователи.ЗаполнитьСоставГруппВнешнихПользователей"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.6.5"; - Обработчик.Процедура = "ВнешниеПользователи.ДляВнешнихПользователейСоздатьПользователейИБ"; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -Функция ТребуетсяСоздатьПервогоАдминистратора(Знач СтруктураОписанияПользователяИБ, ТекстВопроса = Неопределено) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - Возврат Ложь; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда - - Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыРоли") Тогда - Роли = СтруктураОписанияПользователяИБ.ПользовательИнфБазыРоли; - Иначе - Роли = Новый Массив; - КонецЕсли; - - Если ПользователиПереопределяемый.ЗапретРедактированияРолей() - ИЛИ Роли.Найти("ПолныеПрава") = Неопределено - ИЛИ Роли.Найти(РольАдминистратораСистемы().Имя) = Неопределено Тогда - - // Подготовка текста вопроса при записи первого администратора - ТекстВопроса = НСтр("ru = 'В список пользователей программы добавляется первый пользователь, - |поэтому ему автоматически будет назначена роль ""Полные права"". - |Продолжить?'"); - ПользователиПереопределяемый.ТекстВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса); - Возврат Истина; - КонецЕсли; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Возвращет текущий уровень доступа на изменение свойств пользователя. -// -// Возвращаемое значение: -// Строка. -// Возможные значения: -// "ПолныйДоступ" - любое изменение свойств пользователя -// "УправлениеСписком" - управление списком пользователей, без возможности -// изменения прав -// "ИзменениеТекущего" - изменение свойств текущего пользователя "Имя", -// "Пароль" и "Язык" -// "НетДоступа" - права на изменение пользователей отсутствуют -// -Функция ПолучитьУровеньДоступаНаИзменениеСвойствПользователяИБ() Экспорт - - Если ЭтоПолноправныйПользователь() Тогда - Возврат "ПолныйДоступ"; - - ИначеЕсли РольДоступна(Метаданные.Роли.ДобавлениеИзменениеПользователей) Тогда - Возврат "УправлениеСписком"; - - ИначеЕсли РольДоступна(Метаданные.Роли.ИзменениеТекущегоПользователя) Тогда - Возврат "ИзменениеТекущего"; - Иначе - Возврат "НетДоступа"; - КонецЕсли; - -КонецФункции - -// Только для внутреннего использования -Функция ПолноеИмяНеуказанногоПользователя() Экспорт - - Возврат НСтр("ru = '<Не указан>'"); - -КонецФункции - -// Только для внутреннего использования -Функция СвойстваНеуказанногоПользователя() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Свойства = Новый Структура; - - // Ссылка на найденный элемент справочника - // соответствующий неуказанному пользователю - Свойства.Вставить("Ссылка", Неопределено); - - // Ссылка, используемая для поиска и создания - // неуказанного пользователя в справочнике Пользователи - Свойства.Вставить("СтандартнаяСсылка", Справочники.Пользователи.ПолучитьСсылку( - Новый УникальныйИдентификатор("aa00559e-ad84-4494-88fd-f0826edc46f0"))); - - // Полное имя, которое устанавливается в элемент справочника Пользователи - // при создании несуществующего неуказанного пользователя - Свойства.Вставить("ПолноеИмя", ПолноеИмяНеуказанногоПользователя()); - - // Полное имя, которое используется для поиска неуказанного пользователя - // старым способом, необходимым для поддержки старых версий - // неуказанного пользователя. Это имя не требуется изменять. - Свойства.Вставить("ПолноеИмяДляПоиска", НСтр("ru = '<Не указан>'")); - - // Поиск по уникальному идентификатору - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Ссылка", Свойства.СтандартнаяСсылка); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.Ссылка = &Ссылка"; - - Если Запрос.Выполнить().Пустой() Тогда - Запрос.УстановитьПараметр("ПолноеИмя", Свойства.ПолноеИмяДляПоиска); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Пользователи.Ссылка - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.Наименование = &ПолноеИмя"; - Результат = Запрос.Выполнить(); - - Если НЕ Результат.Пустой() Тогда - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Свойства.Ссылка = Выборка.Ссылка; - КонецЕсли; - Иначе - Свойства.Ссылка = Свойства.СтандартнаяСсылка; - КонецЕсли; - - Возврат Свойства; - -КонецФункции - -// Функция ПрочитатьПользователяИБ считывает свойства пользователя -// информационной базы по строковому или уникальному идентификатору. -// -// Параметры: -// Идентификатор - Неопределено, Строка, УникальныйИдентификатор (идентификатор пользователя). -// Свойства - Структура: -// ПользовательИнфБазыУникальныйИдентификатор - УникальныйИдентификатор -// ПользовательИнфБазыИмя - Строка -// ПользовательИнфБазыПолноеИмя - Строка -// -// ПользовательИнфБазыАутентификацияOpenID - Булево -// -// ПользовательИнфБазыАутентификацияСтандартная - Булево -// ПользовательИнфБазыПоказыватьВСпискеВыбора - Булево -// ПользовательИнфБазыПароль - Неопределено -// ПользовательИнфБазыСохраняемоеЗначениеПароля - Строка -// ПользовательИнфБазыПарольУстановлен - Булево -// ПользовательИнфБазыЗапрещеноИзменятьПароль - Булево -// -// ПользовательИнфБазыАутентификацияОС - Булево -// ПользовательИнфБазыПользовательОС - Строка -// -// ПользовательИнфБазыОсновнойИнтерфейс - Строка (имя интерфейса из коллекции Метаданные.Интерфейсы) -// ПользовательИнфБазыРежимЗапуска - Строка (значения: "Авто", "ОбычноеПриложение", "УправляемоеПриложение") -// ПользовательИнфБазыЯзык - Строка (имя языка из коллекции Метаданные.Языки) -// -// Роли - Массив значений типа Строка (имена ролей из коллекции Метаданные.Роли) -// -// ОписаниеОшибки - Строка, содержит описание ошибки, если чтение не удалось. -// -// Возвращаемое значение: -// Булево, -// если Истина - успех, иначе отказ, см. ОписаниеОшибки. -// -Функция ПрочитатьПользователяИБ(Знач Идентификатор, Свойства = Неопределено, Роли = Неопределено, ОписаниеОшибки = "", ПользовательИБ = Неопределено) Экспорт - - Свойства = НовоеОписаниеПользователяИБ(); - - Роли = Новый Массив; - - Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); - ИначеЕсли ТипЗнч(Идентификатор) = Тип("Строка") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Идентификатор); - Иначе - ПользовательИБ = Неопределено; - КонецЕсли; - - Если ПользовательИБ = Неопределено Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Пользователь информационной базы ""%1""' не найден."), Идентификатор); - Возврат Ложь; - КонецЕсли; - - Свойства.ПользовательИнфБазыУникальныйИдентификатор = ПользовательИБ.УникальныйИдентификатор; - Свойства.ПользовательИнфБазыИмя = ПользовательИБ.Имя; - Свойства.ПользовательИнфБазыПолноеИмя = ПользовательИБ.ПолноеИмя; - Если ПользователиСерверПовтИсп.АутентификацияOpenIDНастраивается() Тогда - Свойства.ПользовательИнфБазыАутентификацияOpenID = ПользовательИБ.АутентификацияOpenID; - КонецЕсли; - Свойства.ПользовательИнфБазыАутентификацияСтандартная = ПользовательИБ.АутентификацияСтандартная; - Свойства.ПользовательИнфБазыПоказыватьВСпискеВыбора = ПользовательИБ.ПоказыватьВСпискеВыбора; - Свойства.ПользовательИнфБазыСохраняемоеЗначениеПароля = ПользовательИБ.СохраняемоеЗначениеПароля; - Свойства.ПользовательИнфБазыПарольУстановлен = ПользовательИБ.ПарольУстановлен; - Свойства.ПользовательИнфБазыЗапрещеноИзменятьПароль = ПользовательИБ.ЗапрещеноИзменятьПароль; - Свойства.ПользовательИнфБазыАутентификацияОС = ПользовательИБ.АутентификацияОС; - Свойства.ПользовательИнфБазыПользовательОС = ПользовательИБ.ПользовательОС; - Свойства.ПользовательИнфБазыОсновнойИнтерфейс = ?(ПользовательИБ.ОсновнойИнтерфейс = Неопределено, "", ПользовательИБ.ОсновнойИнтерфейс.Имя); - ПолноеИмяЗначенияРежимЗапуска = ПолучитьПолноеИмяПредопределенногоЗначения(ПользовательИБ.РежимЗапуска); - Свойства.ПользовательИнфБазыРежимЗапуска = Сред(ПолноеИмяЗначенияРежимЗапуска, Найти(ПолноеИмяЗначенияРежимЗапуска, ".") + 1); - Свойства.ПользовательИнфБазыЯзык = ?(ПользовательИБ.Язык = Неопределено, "", ПользовательИБ.Язык.Имя); - - Для каждого Роль Из ПользовательИБ.Роли Цикл - Роли.Добавить(Роль.Имя); - КонецЦикла; - - Возврат Истина; - -КонецФункции - -// Проверяет корректность заполнения структуры описания пользователя ИБ. -// В случае нахождения ошибок устанавливает параметр Отказ в Истина и -// отправляет сообщения об ошибках. -// -// Параметры: -// СтруктураОписанияПользователяИБ - Структура - описание пользователя ИБ -// заполнение которого требуется проверить. -// -// Отказ - Булево - флаг отказа от выполнения операции. -// Устанавливается в случае ошибки. -// -// Возвращаемое значение: -// Булево - если Истина, ошибок не найдено. -// -Функция ПроверитьЗаполнениеСтруктурыОписанияПользователяИБ(Знач СтруктураОписанияПользователяИБ, Отказ) Экспорт - - Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыИмя") Тогда - - Если ПустаяСтрока(СтруктураОписанияПользователяИБ.ПользовательИнфБазыИмя) Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не заполнено имя пользователя информационной базы.'"), - , - "ПользовательИнфБазыИмя", - , - Отказ); - КонецЕсли; - - КонецЕсли; - - Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыПароль") Тогда - - Если СтруктураОписанияПользователяИБ.ПользовательИнфБазыПароль <> Неопределено - И СтруктураОписанияПользователяИБ.ПользовательИнфБазыПароль <> СтруктураОписанияПользователяИБ.ПодтверждениеПароля Тогда - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"), - , - "Пароль", - , - Отказ); - КонецЕсли; - - КонецЕсли; - - Если СтруктураОписанияПользователяИБ.Свойство("ПользовательИнфБазыПользовательОС") Тогда - - Если НЕ ПустаяСтрока(СтруктураОписанияПользователяИБ.ПользовательИнфБазыПользовательОС) Тогда - - УстановитьПривилегированныйРежим(Истина); - Попытка - ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - ПользовательИБ.ПользовательОС = СтруктураОписанияПользователяИБ.ПользовательИнфБазыПользовательОС; - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Пользователь ОС должен быть в формате - |""\\ИмяДомена\ИмяПользователя"".'"), - , - "ПользовательИнфБазыПользовательОС", - , - Отказ); - КонецПопытки; - УстановитьПривилегированныйРежим(Ложь); - КонецЕсли; - - КонецЕсли; - - Возврат НЕ Отказ; - -КонецФункции - -// Перезаписывает свойства пользователя ИБ, найденного по строковому или уникальному идентификатору, -// либо создает нового пользователя ИБ (если задано создать существующего пользователя - будет ошибка). -// -// Параметры: -// Идентификатор - Строка, УникальныйИдентификатор (идентификатор пользователя). -// ИзмененныеСвойства - Структура (свойство может быть не задано, -// тогда используется прочитанное или начальное значение): -// -// ПользовательИнфБазыУникальныйИдентификатор - Неопределено (возвращаемое значение, устанавливается после записи пользователя ИБ) -// ПользовательИнфБазыИмя - Неопределено, Строка -// ПользовательИнфБазыПолноеИмя - Неопределено, Строка -// -// ПользовательИнфБазыАутентификацияOpenID - Неопределено, Булево -// -// ПользовательИнфБазыАутентификацияСтандартная - Неопределено, Булево -// ПользовательИнфБазыПоказыватьВСпискеВыбора - Неопределено, Булево -// ПользовательИнфБазыПароль - Неопределено, Строка -// ПользовательИнфБазыСохраняемоеЗначениеПароля - Неопределено, Строка -// ПользовательИнфБазыПарольУстановлен - Неопределено, Булево -// ПользовательИнфБазыЗапрещеноИзменятьПароль - Неопределено, Булево -// -// ПользовательИнфБазыАутентификацияОС - Неопределено, Булево -// ПользовательИнфБазыПользовательОС - Неопределено, Строка -// -// ПользовательИнфБазыОсновнойИнтерфейс - Неопределено, Строка (имя интерфейса из коллекции Метаданные.Интерфейсы) -// ПользовательИнфБазыРежимЗапуска - Неопределено, Строка (значения: "Авто", "ОбычноеПриложение", "УправляемоеПриложение") -// ПользовательИнфБазыЯзык - Неопределено, Строка (имя языка из коллекции Метаданные.Языки) -// -// НовыеРоли - Неопределено, Массив значений типа Строка (имена ролей из коллекции Метаданные.Роли) -// -// ОписаниеОшибки - Строка, содержит описание ошибки, если чтение не удалось. -// -// Возвращаемое значение: -// Булево, если Истина - успех, иначе отказ, см. ОписаниеОшибки. -// -Функция ЗаписатьПользователяИБ(Знач Идентификатор, Знач ИзмененныеСвойства, Знач НовыеРоли, Знач СоздатьНового = Ложь, ОписаниеОшибки = "") Экспорт - - ПользовательИБ = Неопределено; - СтарыеСвойства = Неопределено; - - ПредварительноеЧтение = ПрочитатьПользователяИБ(Идентификатор, СтарыеСвойства, , ОписаниеОшибки, ПользовательИБ); - - Если НЕ ПредварительноеЧтение Тогда - - Если СоздатьНового = Неопределено ИЛИ СоздатьНового = Истина Тогда - ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - Иначе - Возврат Ложь; - КонецЕсли; - ИначеЕсли СоздатьНового = Истина Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Невозможно создать пользователя информационной базы ""%1"", - |так как он уже существует.'"), - Идентификатор); - Возврат Ложь; - КонецЕсли; - - // Подготовка новых значений свойств - НовыеСвойства = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтарыеСвойства); - - Для каждого КлючИЗначение Из НовыеСвойства Цикл - Если ИзмененныеСвойства.Свойство(КлючИЗначение.Ключ) И ИзмененныеСвойства[КлючИЗначение.Ключ] <> Неопределено Тогда - НовыеСвойства[КлючИЗначение.Ключ] = ИзмененныеСвойства[КлючИЗначение.Ключ]; - КонецЕсли; - КонецЦикла; - - Если НовыеРоли <> Неопределено Тогда - Роли = НовыеРоли; - КонецЕсли; - - // Установка новых значений свойств - ПользовательИБ.Имя = НовыеСвойства.ПользовательИнфБазыИмя; - ПользовательИБ.ПолноеИмя = НовыеСвойства.ПользовательИнфБазыПолноеИмя; - - Если ПользователиСерверПовтИсп.АутентификацияOpenIDНастраивается() Тогда - ПользовательИБ.АутентификацияOpenID = НовыеСвойства.ПользовательИнфБазыАутентификацияOpenID; - КонецЕсли; - ПользовательИБ.АутентификацияСтандартная = НовыеСвойства.ПользовательИнфБазыАутентификацияСтандартная; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - ПользовательИБ.ПоказыватьВСпискеВыбора = Ложь; - Иначе - ПользовательИБ.ПоказыватьВСпискеВыбора = НовыеСвойства.ПользовательИнфБазыПоказыватьВСпискеВыбора; - КонецЕсли; - - Если НовыеСвойства.ПользовательИнфБазыПароль <> Неопределено Тогда - ПользовательИБ.Пароль = НовыеСвойства.ПользовательИнфБазыПароль; - ИначеЕсли НовыеСвойства.ПользовательИнфБазыСохраняемоеЗначениеПароля <> Неопределено Тогда - ПользовательИБ.СохраняемоеЗначениеПароля = НовыеСвойства.ПользовательИнфБазыСохраняемоеЗначениеПароля - КонецЕсли; - - ПользовательИБ.ЗапрещеноИзменятьПароль = НовыеСвойства.ПользовательИнфБазыЗапрещеноИзменятьПароль; - - ПользовательИБ.АутентификацияОС = НовыеСвойства.ПользовательИнфБазыАутентификацияОС; - ПользовательИБ.ПользовательОС = НовыеСвойства.ПользовательИнфБазыПользовательОС; - - Если ЗначениеЗаполнено(НовыеСвойства.ПользовательИнфБазыОсновнойИнтерфейс) Тогда - ПользовательИБ.ОсновнойИнтерфейс = Метаданные.Интерфейсы[НовыеСвойства.ПользовательИнфБазыОсновнойИнтерфейс]; - Иначе - ПользовательИБ.ОсновнойИнтерфейс = Неопределено; - КонецЕсли; - - Если ЗначениеЗаполнено(НовыеСвойства.ПользовательИнфБазыРежимЗапуска) Тогда - ПользовательИБ.РежимЗапуска = РежимЗапускаКлиентскогоПриложения[НовыеСвойства.ПользовательИнфБазыРежимЗапуска]; - КонецЕсли; - - Если ЗначениеЗаполнено(НовыеСвойства.ПользовательИнфБазыЯзык) Тогда - ПользовательИБ.Язык = Метаданные.Языки[НовыеСвойства.ПользовательИнфБазыЯзык]; - Иначе - ПользовательИБ.Язык = Неопределено; - КонецЕсли; - - Если НовыеРоли <> Неопределено Тогда - ПользовательИБ.Роли.Очистить(); - Для каждого Роль Из НовыеРоли Цикл - ПользовательИБ.Роли.Добавить(Метаданные.Роли[Роль]); - КонецЦикла; - КонецЕсли; - - // Добавление роли ПолныеПрава, при попытке создать первого пользователя с пустым списком ролей - Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() - И ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда - - Если НЕ ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда - - ПользовательИБ.Роли.Добавить(Метаданные.Роли.ПолныеПрава); - КонецЕсли; - - Если НЕ ПользовательИБ.Роли.Содержит(РольАдминистратораСистемы()) Тогда - - ПользовательИБ.Роли.Добавить(РольАдминистратораСистемы()); - КонецЕсли; - КонецЕсли; - - // Попытка записи нового или измененного пользователяИБ - Попытка - ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - Если ИнформацияОбОшибке.Причина = Неопределено Тогда - ОписаниеОшибки = ИнформацияОбОшибке.Описание; - Иначе - ОписаниеОшибки = ИнформацияОбОшибке.Причина.Описание; - КонецЕсли; - ОписаниеОшибки = НСтр("ru = 'Ошибка при записи пользователя информационной базы:'") + Символы.ПС + ОписаниеОшибки; - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Пользователи'"), УровеньЖурналаРегистрации.Ошибка, , , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке)); - - Возврат Ложь; - КонецПопытки; - - ПользователиПереопределяемый.ПриЗаписиПользователяИнформационнойБазы(СтарыеСвойства, НовыеСвойства); - - ИзмененныеСвойства.Вставить("ПользовательИнфБазыУникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор); - Возврат Истина; - -КонецФункции - -// Записывает указанного Пользователя ИБ с учетом режима разделения данных. -// Если режим разделения данных включен, тогда перед записью проверяются -// права записываемого пользователя. -// -// Параметры: -// ПользовательИБ - ПользовательИнформационнойБазы - объект, который требуется записать. -// -Процедура ЗаписатьПользователяИнформационнойБазы(ПользовательИБ) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(ПользовательИБ.УникальныйИдентификатор) Тогда - ВызватьИсключение(НСтр("ru = 'Запись неразделенных пользователей - |при включенном использовании разделителей запрещена.'")) - КонецЕсли; - - КонецЕсли; - - ПроверитьПраваПользователя(ПользовательИБ); - - ПользовательИБ.Записать(); - -КонецПроцедуры - -// Проверяет права указанного Пользователя ИБ в режиме разделения данных. -// -// Параметры: -// ПользовательИБ - ПользовательИнформационнойБазы. -// -Процедура ПроверитьПраваПользователя(ПользовательИБ) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Если ПользовательИБ.РазделениеДанных.Количество() > 0 Тогда - - НедоступныеПрава = ПользователиСерверПовтИсп.НедоступныеПраваПоТипуПользователя( - Перечисления.ТипыПользователей.ПользовательОбластиДанных); - - НедоступнаяРоль = Неопределено; - - Для каждого Роль Из ПользовательИБ.Роли Цикл - - ДоступныеДляИзмененияОбщиеДанные = ПользователиСерверПовтИсп.ОбщиеДанныеДоступныеДляИзменения(Роль.Имя); - - Если ДоступныеДляИзмененияОбщиеДанные.Количество() > 0 Тогда - НедоступнаяРоль = Роль; - - Запись = Новый ЗаписьXML; - Запись.УстановитьСтроку(); - СериализаторXDTO.ЗаписатьXML(Запись, ДоступныеДляИзмененияОбщиеДанные); - ТаблицаСтрокой = Запись.Закрыть(); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Запись'"), - УровеньЖурналаРегистрации.Ошибка, - , - ПользовательИБ, - НСтр("ru = 'Разделенному пользователю назначена роль, - |предоставляющая права на изменение общих данных: - |'") + ТаблицаСтрокой); - КонецЕсли; - - Для каждого Право Из НедоступныеПрава Цикл - - Если ПравоДоступа(Право, Метаданные, Роль) Тогда - НедоступнаяРоль = Роль; - - ШаблонСообщения = НСтр("ru = 'Разделенному пользователю назначена роль, - |предоставляющая право %1.'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Право); - - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Пользователи.Запись'"), - УровеньЖурналаРегистрации.Ошибка, - , - ПользовательИБ, - ТекстСообщения); - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Если НедоступнаяРоль <> Неопределено Тогда - ШаблонСообщения = НСтр("ru = 'Разделенным пользователям не может быть назначена - |роль %1.'"); - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, НедоступнаяРоль.Представление()); - КонецЕсли; - - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Удаляет указанного пользователя информационной базы. -// -// Параметры: -// Идентификатор - Строка - имя пользователя ИБ, -// УникальныйИдентификатор - идентификатор пользователя ИБ. -// -// ОписаниеОшибки - Строка, содержит описание ошибки, если удаление не удалось. -// -// Возвращаемое значение: -// Булево, если Истина - успех, иначе отказ, см. ОписаниеОшибки. -// -Функция УдалитьПользователяИБ(Знач Идентификатор, ОписаниеОшибки = "") Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() - И СтандартныеПодсистемыПереопределяемый.ЭтоНеразделенныйПользовательИБ(Идентификатор) Тогда - - ВызватьИсключение(НСтр("ru = 'Удаление неразделенных пользователей - |при включенном использовании разделителей запрещено.'")); - КонецЕсли; - - ПользовательИБ = Неопределено; - Свойства = Неопределено; - Роли = Неопределено; - - Если НЕ ПрочитатьПользователяИБ(Идентификатор, Свойства, Роли, ОписаниеОшибки, ПользовательИБ) Тогда - Возврат Ложь; - Иначе - Попытка - ПользовательИБ.Удалить(); - Исключение - ОписаниеОшибки = НСтр("ru = 'Ошибка при удалении пользователя информационной базы:'") + Символы.ПС + ИнформацияОбОшибке().Причина.Описание; - Возврат Ложь; - КонецПопытки; - КонецЕсли; - - ПользователиПереопределяемый.ПослеУдаленияПользователяИнформационнойБазы(Свойства); - - Возврат Истина; - -КонецФункции - -// Проверяет существование пользователя информационной базы. -// -// Параметры: -// Идентификатор - Строка - имя пользователя ИБ, -// УникальныйИдентификатор - идентификатор пользователя ИБ. -// -// Возвращаемое значение: -// Булево. -// -Функция ПользовательИБСуществует(Знач Идентификатор) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); - Иначе - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Идентификатор); - КонецЕсли; - - Если ПользовательИБ = Неопределено Тогда - Возврат Ложь; - Иначе - Возврат Истина; - КонецЕсли; - -КонецФункции - -// Определяет наличие элемента в справочнике Пользователи -// или справочнике ВнешниеПользователи по уникальному идентификатору -// пользователя информационной. -// Функция используется для проверки наличия связи пользователяИБ только -// с одним элементом справочников Пользователи, ВнешниеПользователи. -// -// Параметры: -// УникальныйИдентификатор - идентификатор пользователя ИБ. -// -// СсылкаНаТекущего - СправочникСсылка.Пользователи, -// СправочникСсылка.ВнешниеПользователи - исключить -// указанную ссылку из поиска. -// Неопределено - искать среди всех элементов справочников. -// -// Возвращаемое значение: -// Булево. -// -Функция ПользовательПоИдентификаторуСуществует(УникальныйИдентификатор, СсылкаНаТекущего = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор - | И Пользователи.Ссылка <> &СсылкаНаТекущего - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | ИСТИНА - |ИЗ - | Справочник.ВнешниеПользователи КАК ВнешниеПользователи - |ГДЕ - | ВнешниеПользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор - | И ВнешниеПользователи.Ссылка <> &СсылкаНаТекущего"; - Запрос.УстановитьПараметр("СсылкаНаТекущего", СсылкаНаТекущего); - Запрос.УстановитьПараметр("УникальныйИдентификатор", УникальныйИдентификатор); - - Если НЕ Запрос.Выполнить().Пустой() Тогда - НайтиНеоднозначныхПользователейИБ(, УникальныйИдентификатор); - Возврат Истина; - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Проверяет связан ли пользовательИБ с элементом справочника Пользователи или -// элементом справочника ВнешниеПользователи. -// -// Параметры: -// ИмяПользователя - Строка - имя пользователя ИБ. -// -// Возвращаемое значение: -// Булево. -// -Функция ПользовательИБНеЗанят(Знач ИмяПользователя) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя); - - Если ПользовательИБ = Неопределено Тогда - Возврат Истина; - КонецЕсли; - - Если ПользовательПоИдентификаторуСуществует(ПользовательИБ.УникальныйИдентификатор) Тогда - Возврат Ложь; - Иначе - Возврат Истина; - КонецЕсли - -КонецФункции - -// Используется в процедурах ОбновитьСоставыГруппПользователей, -// ОбновитьСоставГруппВнешнихПользователей. -// -// Параметры: -// Таблица - полное имя объекта метаданных. -// -// Возвращаемое значение: -// ТаблицаЗначений (Ссылка, Родитель) -// -Функция ТаблицаГруппРодителей(Таблица) Экспорт - - // Подготовка состава групп родителей. - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ГруппыТаблицы.Ссылка, - | ГруппыТаблицы.Родитель - |ИЗ - | " + Таблица + " КАК ГруппыТаблицы"); - ТаблицаЭлементов = Запрос.Выполнить().Выгрузить(); - ТаблицаЭлементов.Индексы.Добавить("Родитель"); - ТаблицаГруппРодителей = ТаблицаЭлементов.Скопировать(Новый Массив); - - Для каждого ОписаниеЭлемента Из ТаблицаЭлементов Цикл - ОписаниеГруппыРодителя = ТаблицаГруппРодителей.Добавить(); - ОписаниеГруппыРодителя.Родитель = ОписаниеЭлемента.Ссылка; - ОписаниеГруппыРодителя.Ссылка = ОписаниеЭлемента.Ссылка; - ЗаполнитьГруппыРодителя(ОписаниеЭлемента.Ссылка, ОписаниеЭлемента.Ссылка, ТаблицаЭлементов, ТаблицаГруппРодителей); - КонецЦикла; - - Возврат ТаблицаГруппРодителей; - -КонецФункции - -// Обновляет состав пользователей группы пользователей с учетом иерархии -// в регистре сведений "Состав групп пользователей". -// Данные регистра используются в форме списка и формы выбора пользователей. -// Данные регистра могут быть использованы для повышения производительности запросов, -// т.к. не требуется работать с иерархией. -// -// Параметры: -// ГруппаПользователей - СправочникСсылка.ГруппыПользователей. -// -Процедура ОбновитьСоставыГруппПользователей(Знач ГруппаПользователей) Экспорт - - Если НЕ ЗначениеЗаполнено(ГруппаПользователей) Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - // Подготовка групп родителей. - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ТаблицаГруппРодителей.Родитель, - | ТаблицаГруппРодителей.Ссылка - |ПОМЕСТИТЬ ТаблицаГруппРодителей - |ИЗ - | &ТаблицаГруппРодителей КАК ТаблицаГруппРодителей"); - Запрос.УстановитьПараметр("ТаблицаГруппРодителей", ТаблицаГруппРодителей("Справочник.ГруппыПользователей")); - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.Выполнить(); - - // Выполнение для текущий группы и каждой группы-родителя. - Пока НЕ ГруппаПользователей.Пустая() Цикл - - Запрос.УстановитьПараметр("ГруппаПользователей", ГруппаПользователей); - - Если ГруппаПользователей <> Справочники.ГруппыПользователей.ВсеПользователи Тогда - // Удаление связей для удаленных пользователей. - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | СоставыГруппПользователей.Пользователь - |ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаГруппРодителей КАК ТаблицаГруппРодителей - | ПО (ТаблицаГруппРодителей.Ссылка = ГруппыПользователейСостав.Ссылка) - | И (ТаблицаГруппРодителей.Родитель = &ГруппаПользователей) - | ПО (СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей) - | И СоставыГруппПользователей.Пользователь = ГруппыПользователейСостав.Пользователь - |ГДЕ - | СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей - | И ГруппыПользователейСостав.Ссылка ЕСТЬ NULL "; - ПользователиУдаленныеИзГруппы = Запрос.Выполнить().Выбрать(); - МенеджерЗаписи = РегистрыСведений.СоставыГруппПользователей.СоздатьМенеджерЗаписи(); - Пока ПользователиУдаленныеИзГруппы.Следующий() Цикл - МенеджерЗаписи.ГруппаПользователей = ГруппаПользователей; - МенеджерЗаписи.Пользователь = ПользователиУдаленныеИзГруппы.Пользователь; - МенеджерЗаписи.Удалить(); - КонецЦикла; - КонецЕсли; - - // Добавление связей для добавленных пользователей. - Если ГруппаПользователей = Справочники.ГруппыПользователей.ВсеПользователи Тогда - Запрос.Текст = - "ВЫБРАТЬ - | ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи) КАК ГруппаПользователей, - | Пользователи.Ссылка КАК Пользователь - |ИЗ - | Справочник.Пользователи КАК Пользователи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ПО (СоставыГруппПользователей.ГруппаПользователей = ЗНАЧЕНИЕ(Справочник.ГруппыПользователей.ВсеПользователи)) - | И (СоставыГруппПользователей.Пользователь = Пользователи.Ссылка) - |ГДЕ - | СоставыГруппПользователей.Пользователь ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | Пользователи.Ссылка, - | Пользователи.Ссылка - |ИЗ - | Справочник.Пользователи КАК Пользователи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ПО (СоставыГруппПользователей.ГруппаПользователей = Пользователи.Ссылка) - | И (СоставыГруппПользователей.Пользователь = Пользователи.Ссылка) - |ГДЕ - | СоставыГруппПользователей.Пользователь ЕСТЬ NULL "; - Иначе - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | &ГруппаПользователей КАК ГруппаПользователей, - | ГруппыПользователейСостав.Пользователь - |ИЗ - | Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаГруппРодителей КАК ТаблицаГруппРодителей - | ПО (ТаблицаГруппРодителей.Ссылка = ГруппыПользователейСостав.Ссылка) - | И (ТаблицаГруппРодителей.Родитель = &ГруппаПользователей) - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - | ПО (СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей) - | И (СоставыГруппПользователей.Пользователь = ГруппыПользователейСостав.Пользователь) - |ГДЕ - | СоставыГруппПользователей.Пользователь ЕСТЬ NULL "; - КонецЕсли; - ПользователиДобавленныеВГруппу = Запрос.Выполнить().Выгрузить(); - Если ПользователиДобавленныеВГруппу.Количество() > 0 Тогда - НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); - НаборЗаписей.Загрузить(ПользователиДобавленныеВГруппу); - НаборЗаписей.Записать(Ложь); // Добавление недостающих записей связей. - КонецЕсли; - - ГруппаПользователей = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ГруппаПользователей, "Родитель"); - КонецЦикла; - -КонецПроцедуры - -// Только для внутреннего использования -Функция ПолучитьСохраняемоеЗначениеПароляПоПаролю(Знач Пароль) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НачатьТранзакцию(); - ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); - ВременныйПользовательИБ.АутентификацияСтандартная = Истина; - ВременныйПользовательИБ.Имя = Новый УникальныйИдентификатор; - ВременныйПользовательИБ.Пароль = Пароль; - ВременныйПользовательИБ.Записать(); - - ВременныйПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ВременныйПользовательИБ.УникальныйИдентификатор); - - СохраняемоеЗначениеПароля = ВременныйПользовательИБ.СохраняемоеЗначениеПароля; - ОтменитьТранзакцию(); - - Возврат СохраняемоеЗначениеПароля; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции - -Функция ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) - - Если ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда - ТекстСообщенияОбОшибке = НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. - | - |Пользователь ""%1"" не найден в справочниках - |""Пользователи"" и ""Внешние пользователи"". - | - |Обратитесь к администратору.'"); - Иначе - ТекстСообщенияОбОшибке = НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. - | - |Пользователь ""%1"" не найден в справочнике ""Пользователи"". - | - |Обратитесь к администратору.'"); - КонецЕсли; - - ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, ИмяПользователя); - - Возврат ТекстСообщенияОбОшибке; - -КонецФункции - -Процедура ЗаполнитьГруппыРодителя(Знач Родитель, Знач ТекущийРодитель, Знач ТаблицаЭлементов, Знач ТаблицаРодителей) - - ОписанияГруппРодителя = ТаблицаЭлементов.НайтиСтроки(Новый Структура("Родитель", ТекущийРодитель)); - Для каждого ОписаниеГруппы Из ОписанияГруппРодителя Цикл - ОписаниеГруппыРодителя = ТаблицаРодителей.Добавить(); - ОписаниеГруппыРодителя.Родитель = Родитель; - ОписаниеГруппыРодителя.Ссылка = ОписаниеГруппы.Ссылка; - ЗаполнитьГруппыРодителя(Родитель, ОписаниеГруппы.Ссылка, ТаблицаЭлементов, ТаблицаРодителей); - КонецЦикла; - -КонецПроцедуры - -Функция СсылкаПользователяПоПолномуНаименованию(ПолноеИмя) - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ Ссылка КАК Ссылка - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | Пользователи.Наименование = &ПолноеИмя"; - Запрос.УстановитьПараметр("ПолноеИмя", ПолноеИмя); - - РезультатЗапроса = Запрос.Выполнить(); - - Если РезультатЗапроса.Пустой() Тогда - Возврат Неопределено; - КонецЕсли; - - Выборка = РезультатЗапроса.Выбрать(); - Выборка.Следующий(); - - Пользователь = Выборка.Ссылка; - - Если ПользовательИБНеЗанят(Пользователь.ИдентификаторПользователяИБ) Тогда - Возврат Пользователь; - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы - -// Процедура вызывается при обновлении конфигурации на версию 1.0.5.2 -// Выполняет попытку сопоставления / заполнения реквизита "ИдентификаторПользователяИБ" -// для каждого элемента справочника Пользователи. -// -Процедура ЗаполнитьИдентификаторыПользователей() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НайтиНеоднозначныхПользователейИБ(); - - СписокПользователей = Справочники.Пользователи.Выбрать(); - - ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); - СвойстваНеуказанногоПользователя = СвойстваНеуказанногоПользователя(); - - Пока СписокПользователей.Следующий() Цикл - Пользователь = СписокПользователей.Ссылка; - - Если НЕ ЗначениеЗаполнено(Пользователь.ИдентификаторПользователяИБ) - И Пользователь <> СвойстваНеуказанногоПользователя.Ссылка Тогда - - ПолноеИмяПользователя = СокрЛП(Пользователь.Наименование); - Для Каждого ПользовательИБ Из ПользователиИБ Цикл - Если ПолноеИмяПользователя = СокрЛП(Лев(ПользовательИБ.ПолноеИмя, Метаданные.Справочники.Пользователи.ДлинаНаименования)) - И Не ПользовательПоИдентификаторуСуществует(ПользовательИБ.УникальныйИдентификатор) Тогда - ОбъектПользователь = Пользователь.ПолучитьОбъект(); - ОбъектПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; - ОбъектПользователь.Записать(); - Продолжить; - КонецЕсли; - КонецЦикла; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Процедура вызывается при обновлении конфигурации на версию 1.0.5.15 -// Выполняется перезапись всех пользователей. -// Возможен вызов с любой версии начиная с 1.0.5.15. -// -Процедура ЗаполнениеРегистраСоставыГруппПользователей() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Выборка = Справочники.Пользователи.Выбрать(); - Пока Выборка.Следующий() Цикл - - Объект = Выборка.ПолучитьОбъект(); - Объект.Записать(); - - КонецЦикла; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/Пользователи/Пользователи.mdo b/SSL/src/CommonModules/Пользователи/Пользователи.mdo index a788af6c8..99480943c 100644 --- a/SSL/src/CommonModules/Пользователи/Пользователи.mdo +++ b/SSL/src/CommonModules/Пользователи/Пользователи.mdo @@ -6,5 +6,6 @@ Пользователи true - true + true + true diff --git a/SSL/src/CommonModules/ПользователиВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/ПользователиВМоделиСервиса/Module.bsl index 608222771..67d9a26a1 100644 --- a/SSL/src/CommonModules/ПользователиВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/ПользователиВМоделиСервиса/Module.bsl @@ -86,21 +86,6 @@ КонецФункции -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.0.1.14"; - Обработчик.Процедура = "ПользователиВМоделиСервиса.ЗаменитьУдалитьПолныеПраваОбластиДанныхНаПолныеПрава"; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -129,10 +114,20 @@ // Только для внутреннего использования Процедура ПриЗаписиПользователя(ПользовательОбъект, ОписаниеПользователя, ПользовательСуществует, ДоступРазрешен, СоздатьПользователяСервиса) Экспорт + Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.Пользователи") + И ПользовательОбъект.Служебный Тогда + + Возврат; + КонецЕсли; + Имя = ОписаниеПользователя.Имя; ПолноеИмя = ОписаниеПользователя.ПолноеИмя; Язык = ОписаниеПользователя.Язык; + УстановитьПривилегированныйРежим(Истина); + КлючОбласти = Константы.КлючОбластиДанных.Получить(); + УстановитьПривилегированныйРежим(Ложь); + Если СоздатьПользователяСервиса Тогда УстановитьПривилегированныйРежим(Истина); @@ -158,7 +153,7 @@ ИнформацияОПользователе.Language = ПолучитьКодЯзыкаПоИмени(Язык); ИнформацияОПользователе.UserID = ПользовательОбъект.ИдентификаторПользователяСервиса; - Результат = Прокси.CreateUser(ТекущаяОбластьДанных, ИнформацияОПользователе, СообщениеОбОшибке); + Результат = Прокси.CreateUser(ТекущаяОбластьДанных, КлючОбласти, ИнформацияОПользователе, СообщениеОбОшибке); Если Результат <> Истина Тогда ШаблонСообщения = НСтр("ru = 'Ошибка при создании пользователя сервиса: |%1'"); @@ -180,7 +175,7 @@ СообщениеОбОшибке = ""; СписокПользователей = Неопределено; - Результат = Прокси.GetUserList(ТекущаяОбластьДанных, СписокПользователей, СообщениеОбОшибке); + Результат = Прокси.GetUserList(ТекущаяОбластьДанных, КлючОбласти, СписокПользователей, СообщениеОбОшибке); Если НЕ Результат Тогда ШаблонСообщения = НСтр("ru = 'Ошибка при попытке получения списка пользователей сервиса: @@ -211,8 +206,8 @@ Если ИнформацияОТекущемПользователе.HasAccess <> ДоступРазрешен Тогда Если ДоступРазрешен Тогда СообщениеОбОшибке = ""; - Результат = Прокси.GrantUserAccess(ПользовательОбъект.ИдентификаторПользователяСервиса, - ТекущаяОбластьДанных, "User", СообщениеОбОшибке); + Результат = Прокси.GrantUserAccess(ТекущаяОбластьДанных, КлючОбласти, + ПользовательОбъект.ИдентификаторПользователяСервиса, "User", СообщениеОбОшибке); Если НЕ Результат Тогда ШаблонСообщения = НСтр("ru = 'Ошибка при попытке предоставления доступа пользователю в сервис: @@ -221,8 +216,8 @@ КонецЕсли; Иначе СообщениеОбОшибке = ""; - Результат = Прокси.DeleteUserAccess(ПользовательОбъект.ИдентификаторПользователяСервиса, - ТекущаяОбластьДанных, СообщениеОбОшибке); + Результат = Прокси.DeleteUserAccess(ТекущаяОбластьДанных, КлючОбласти, + ПользовательОбъект.ИдентификаторПользователяСервиса, СообщениеОбОшибке); Если НЕ Результат Тогда ШаблонСообщения = НСтр("ru = 'Ошибка при попытке снятия доступа пользователю в сервис: @@ -250,7 +245,8 @@ ОписаниеПользователя.Language = ПолучитьКодЯзыкаПоИмени(Язык); СообщениеОбОшибке = ""; - Результат = Прокси.SetUserInfo(ПользовательОбъект.ИдентификаторПользователяСервиса, ОписаниеПользователя, СообщениеОбОшибке); + Результат = Прокси.SetUserInfo(ОбщегоНазначения.ЗначениеРазделителяСеанса(), КлючОбласти, + ПользовательОбъект.ИдентификаторПользователяСервиса, ОписаниеПользователя, СообщениеОбОшибке); Если НЕ Результат Тогда ШаблонСообщения = НСтр("ru = 'Ошибка при попытке синхронизации информации о пользователя с менеджером сервиса: @@ -293,32 +289,3 @@ КонецЕсли; КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы - -// Процедура вызывается при обновлении конфигурации на версию 2.0.1.14 -// Добавляет всем пользователям с ролью УдалитьПолныеПраваОбластиДанных -// роль ПолныеПрава. -// -Процедура ЗаменитьУдалитьПолныеПраваОбластиДанныхНаПолныеПрава() Экспорт - - Если ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл - Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) - ИЛИ НЕ ПользовательИБ.Роли.Содержит(Метаданные.Роли.УдалитьПолныеПраваОбластиДанных) Тогда - - Продолжить; - КонецЕсли; - - ПользовательИБ.Роли.Добавить(Метаданные.Роли.ПолныеПрава); - ПользовательИБ.Роли.Удалить(Метаданные.Роли.УдалитьПолныеПраваОбластиДанных); - ПользовательИБ.Записать(); - КонецЦикла; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl new file mode 100644 index 000000000..ebe5284be --- /dev/null +++ b/SSL/src/CommonModules/ПользователиКлиентСервер/Module.bsl @@ -0,0 +1,85 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает текущего пользователя или текущего внешнего пользователя, +// в зависимости от того, кто выполнил вход в сеанс. +// Рекомендуется использователь в коде, который поддерживает работу +// в обоих случаях. +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи или СправочникСсылка.ВнешниеПользователи. +// +Функция АвторизованныйПользователь() Экспорт + +#Если Сервер ИЛИ ВнешнееСоединение Тогда + УстановитьПривилегированныйРежим(Истина); + + Возврат ?(ЗначениеЗаполнено(ПараметрыСеанса.ТекущийПользователь), + ПараметрыСеанса.ТекущийПользователь, + ПараметрыСеанса.ТекущийВнешнийПользователь); +#Иначе + Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().АвторизованныйПользователь; +#КонецЕсли + +КонецФункции + +// Возвращает текущего пользователя. +// Рекомендуется использовать в коде, который не поддерживает +// работу с внешними пользователями. +// +// Если вход в сеанс выполнил внешний пользователь, +// тогда будет вызвано исключение. +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи +// +Функция ТекущийПользователь() Экспорт + + АвторизованныйПользователь = АвторизованныйПользователь(); + + Если ТипЗнч(АвторизованныйПользователь) <> Тип("СправочникСсылка.Пользователи") Тогда + ВызватьИсключение + НСтр("ru = 'Невозможно получить текущего пользователя + |в сеансе внешнего пользователя.'"); + КонецЕсли; + + Возврат АвторизованныйПользователь; + +КонецФункции + +// Возвращает текущего внешнего пользователя. +// Рекомендуется использовать в коде, который поддерживает +// только внешних пользователей. +// +// Если вход в сеанс выполнил не внешний пользователь, +// тогда будет вызвано исключение. +// +// Возвращаемое значение: +// СправочникСсылка.ВнешниеПользователи +// +Функция ТекущийВнешнийПользователь() Экспорт + + АвторизованныйПользователь = АвторизованныйПользователь(); + + Если ТипЗнч(АвторизованныйПользователь) <> Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ВызватьИсключение + НСтр("ru = 'Невозможно получить текущего внешнего пользователя + |в сеансе пользователя.'"); + КонецЕсли; + + Возврат АвторизованныйПользователь; + +КонецФункции + +// Возвращает Истина, если вход в сеанс выполнил внешний пользователь. +Функция ЭтоСеансВнешнегоПользователя() Экспорт + + Возврат ТипЗнч(АвторизованныйПользователь()) + = Тип("СправочникСсылка.ВнешниеПользователи"); + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/ПользователиКлиентСервер/ПользователиКлиентСервер.mdo b/SSL/src/CommonModules/ПользователиКлиентСервер/ПользователиКлиентСервер.mdo new file mode 100644 index 000000000..a55c3f94f --- /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 9540d18e1..56f187bcf 100644 --- a/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПользователиПереопределяемый/Module.bsl @@ -72,14 +72,7 @@ // Процедура ПриЗаписиПользователяИнформационнойБазы(Знач СтарыеСвойства, Знач НовыеСвойства) Экспорт - // СтандартныеПодсистемы.ФайловыеФункции - Если ЗначениеЗаполнено(СтарыеСвойства.ПользовательИнфБазыИмя) И - ВРег(СтарыеСвойства.ПользовательИнфБазыИмя) <> ВРег(НовыеСвойства.ПользовательИнфБазыИмя) Тогда - - ФайловыеФункции.ПеренестиНастройкиПриСменеИмениПользователя( - СтарыеСвойства.ПользовательИнфБазыИмя, НовыеСвойства.ПользовательИнфБазыИмя); - КонецЕсли; - // Конец СтандартныеПодсистемы.ФайловыеФункции + КонецПроцедуры @@ -95,84 +88,3 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Обработчики записи первого администратора - -// Переопределяет текст вопроса перед записью первого администратора. -// Вызывается из обработчика ПередЗаписью формы пользователя. -// Вызов выполняется если установлен ЗапретРедактированияРолей() и -// количество пользователей информационной базы равно нулю. -// -Процедура ТекстВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса) Экспорт - - // СтандартныеПодсистемы.УправлениеДоступом - ТекстВопроса = НСтр("ru = 'В список пользователей программы добавляется первый пользователь, - |поэтому он будет автоматически включен в группу доступа Администраторы. - |Продолжить?'") - // Конец СтандартныеПодсистемы.УправлениеДоступом - -КонецПроцедуры - -// Доопределяет действия при записи администратора. -// Вызывается при записи администратора в процедуре авторизации, -// обычно при записи первого администратора, но также и при связывании -// пользователя ИБ с элементом справочника пользователи. -// -// Параметры: -// Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено). -// -Процедура ПриЗаписиПервогоАдминистратора(Пользователь) Экспорт - - // СтандартныеПодсистемы.УправлениеДоступом - - // Первый администратор автоматически добавляется в группу доступа Администраторы - Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); - Если Объект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда - Объект.Пользователи.Добавить().Пользователь = Пользователь; - Объект.ОбменДанными.Загрузка = Истина; - Объект.Записать(); - КонецЕсли; - - // Конец СтандартныеПодсистемы.УправлениеДоступом - -КонецПроцедуры - -// Переопределяет текст комментария при авторизации пользователя ИБ, -// созданного в конфигураторе с административными правами. -// Вызывается из Пользователи.АвторизоватьТекущегоПользователя(). -// Комментарий записывается в журнал регистрации. -// -// Параметры: -// Комментарий - Строка - начальное значение задано. -// -Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт - - // СтандартныеПодсистемы.УправлениеДоступом - Комментарий = НСтр("ru = 'Обнаружено, что пользователь информационной базы - |с ролью ""Полные права"" был создан в Конфигураторе: - | - |- пользователь не найден в справочнике Пользователи, - |- пользователь зарегистрирован в справочнике Пользователи, - |- пользователь добавлен в группу доступа Администраторы. - | - |Пользователей информационной базы следует создавать в режиме 1С:Предприятия.'"); - // Конец СтандартныеПодсистемы.УправлениеДоступом - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Работа в модели сервиса - -// Устанавливает пользователю права по умолчанию. -// Вызывается при работе в модели сервиса, в случае обновления в менеджере -// сервиса прав пользователя без прав администрирования. -// -// Параметры: -// Пользователь - СправочникСсылка.Пользователи - пользователь, которому -// требуется установить права по умолчанию -// -Процедура УстановитьПраваПоУмолчанию(Пользователь) Экспорт - - - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиПереопределяемый/ПользователиПереопределяемый.mdo b/SSL/src/CommonModules/ПользователиПереопределяемый/ПользователиПереопределяемый.mdo index 96d740014..5247c7797 100644 --- a/SSL/src/CommonModules/ПользователиПереопределяемый/ПользователиПереопределяемый.mdo +++ b/SSL/src/CommonModules/ПользователиПереопределяемый/ПользователиПереопределяемый.mdo @@ -6,5 +6,6 @@ Пользователи переопределяемый true - true + true + true diff --git a/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl new file mode 100644 index 000000000..3d2d0669d --- /dev/null +++ b/SSL/src/CommonModules/ПользователиСлужебный/Module.bsl @@ -0,0 +1,3140 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Заполняет параметр сеанса ТекущийПользователь или ТекущийВнешнийПользователь +// значением пользователя, найденному по пользователю информационной базы +// под которым запущен сеанс. +// Если пользователь не найден, то при наличии административных прав +// создается новый пользователь в справочнике, иначе вызывается исключение. +// +Процедура УстановкаПараметровСеанса(Знач ИмяПараметра, УстановленныеПараметры) Экспорт + + Если ИмяПараметра <> "ТекущийПользователь" + И ИмяПараметра <> "ТекущийВнешнийПользователь" Тогда + + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(); + + Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ВызватьИсключение + НСтр("ru = 'Недопустимое получение параметра сеанса ТекущийПользователь + |в сеансе без указания всех разделителей.'"); + КонецЕсли; + + НачатьТранзакцию(); + Попытка + ПользовательНеНайден = Ложь; + СоздатьПользователя = Ложь; + СсылкаНового = Неопределено; + Служебный = Ложь; + + ТекущийПользователь = Неопределено; + ТекущийВнешнийПользователь = Неопределено; + + Если ПустаяСтрока(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) Тогда + + ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка(); + + СвойстваНеуказанногоПользователя = СвойстваНеуказанногоПользователя(); + + ИмяПользователя = СвойстваНеуказанногоПользователя.ПолноеИмя; + ПолноеИмяПользователя = СвойстваНеуказанногоПользователя.ПолноеИмя; + СсылкаНового = СвойстваНеуказанногоПользователя.СтандартнаяСсылка; + + Если СвойстваНеуказанногоПользователя.Ссылка = Неопределено Тогда + ПользовательНеНайден = Истина; + СоздатьПользователя = Истина; + Служебный = Истина; + ИдентификаторПользователяИБ = ""; + Иначе + ТекущийПользователь = СвойстваНеуказанногоПользователя.Ссылка; + КонецЕсли; + Иначе + ИдентификаторПользователяИБ = + ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор; + + Пользователи.НайтиНеоднозначныхПользователейИБ(, ИдентификаторПользователяИБ); + + Запрос = Новый Запрос; + Запрос.Параметры.Вставить("ИдентификаторПользователяИБ", ИдентификаторПользователяИБ); + + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Пользователи.Ссылка КАК Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ"; + РезультатПользователи = Запрос.Выполнить(); + + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВнешниеПользователи.Ссылка КАК Ссылка + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ = &ИдентификаторПользователяИБ"; + РезультатВнешниеПользователи = Запрос.Выполнить(); + + Если НЕ РезультатВнешниеПользователи.Пустой() Тогда + + Выборка = РезультатВнешниеПользователи.Выбрать(); + Выборка.Следующий(); + ТекущийПользователь = Справочники.Пользователи.ПустаяСсылка(); + ТекущийВнешнийПользователь = Выборка.Ссылка; + + Если НЕ ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда + + ТекстСообщенияОбОшибке = НСтр("ru = 'Внешние пользователи отключены.'"); + ВызватьИсключение ТекстСообщенияОбОшибке; + КонецЕсли; + Иначе + ТекущийВнешнийПользователь = Справочники.ВнешниеПользователи.ПустаяСсылка(); + + Если РезультатПользователи.Пустой() Тогда + Если Пользователи.ЭтоПолноправныйПользователь( , , Ложь) Тогда + + ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + ИмяПользователя = ТекущийПользовательИБ.Имя; + ПолноеИмяПользователя = ТекущийПользовательИБ.ПолноеИмя; + ИдентификаторПользователяИБ = ТекущийПользовательИБ.УникальныйИдентификатор; + ПользовательПоНаименованию = СсылкаПользователяПоПолномуНаименованию(ПолноеИмяПользователя); + + Если ПользовательПоНаименованию = Неопределено Тогда + ПользовательНеНайден = Истина; + СоздатьПользователя = Истина; + Иначе + ТекущийПользователь = ПользовательПоНаименованию; + КонецЕсли; + Иначе + ПользовательНеНайден = Истина; + КонецЕсли; + Иначе + Выборка = РезультатПользователи.Выбрать(); + Выборка.Следующий(); + ТекущийПользователь = Выборка.Ссылка; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если СоздатьПользователя Тогда + + СтандартныеПодсистемыПереопределяемый.ЗарегистрироватьНеразделенногоПользователя(); + + Если СсылкаНового = Неопределено Тогда + СсылкаНового = Справочники.Пользователи.ПолучитьСсылку(); + КонецЕсли; + + ТекущийПользователь = СсылкаНового; + + НовыйПользователь = Справочники.Пользователи.СоздатьЭлемент(); + НовыйПользователь.Служебный = Служебный; + НовыйПользователь.Наименование = ПолноеИмяПользователя; + НовыйПользователь.УстановитьСсылкуНового(СсылкаНового); + + Если ЗначениеЗаполнено(ИдентификаторПользователяИБ) Тогда + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить( + "УникальныйИдентификатор", ИдентификаторПользователяИБ); + + НовыйПользователь.ДополнительныеСвойства.Вставить( + "ОписаниеПользователяИБ", ОписаниеПользователяИБ); + КонецЕсли; + + Попытка + НовыйПользователь.Записать(); + Исключение + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. + |Пользователь: %1 не найден в справочнике ""Пользователи"". + | + |При попытке добавления пользователя в справочник возникла ошибка: + |""%2"". + | + |Обратитесь к администратору.'"), + ИмяПользователя, + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); + ВызватьИсключение ТекстСообщенияОбОшибке; + КонецПопытки; + + ИначеЕсли ПользовательНеНайден Тогда + ВызватьИсключение ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ТекущийПользователь = Неопределено + ИЛИ ТекущийВнешнийПользователь = Неопределено Тогда + + ТекстСообщенияОбОшибке = ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) + + НСтр("ru = ' + |Возникла внутренняя ошибка при поиске пользователя.'"); + ВызватьИсключение ТекстСообщенияОбОшибке; + КонецЕсли; + + ПараметрыСеанса.ТекущийПользователь = ТекущийПользователь; + ПараметрыСеанса.ТекущийВнешнийПользователь = ТекущийВнешнийПользователь; + + УстановленныеПараметры.Добавить("ТекущийПользователь"); + УстановленныеПараметры.Добавить("ТекущийВнешнийПользователь"); + +КонецПроцедуры + +// Вызывается при начале работы системы, чтобы проверить возможность выполнения авторизации и +// вызвать заполнение значений параметров сеанса ТекущийПользователь и ТекущийВнешнийПользователь. +// Также вызывается при входе в область данных. +// +// Возвращаемое значение: +// Строка - пустая строка - авторизация выполнена успешно. +// непустая строка - описание ошибки. +// При начале работы системы следует +// завершить работу 1С:Предприятия. +// +Функция АвторизоватьТекущегоПользователя(ПриНачалеРаботыСистемы = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ПриНачалеРаботыСистемы Тогда + ОбновитьПовторноИспользуемыеЗначения(); + Иначе + // Программное заполнение списка пользователей. + Перезапустить = Ложь; + ДополнительныеПараметрыКомаднойСтроки = ""; + + СтандартныеПодсистемыПереопределяемый.ПередАвторизациейТекущегоПользователяПриНачалеРаботыСистемы( + Перезапустить, ДополнительныеПараметрыКомаднойСтроки); + + Если Перезапустить Тогда + Возврат Новый Структура( + "ДополнительныеПараметрыКомаднойСтроки", + ДополнительныеПараметрыКомаднойСтроки); + КонецЕсли; + + // Проверка возможности продолжения. + ТекстОшибки = ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(Истина); + Если ЗначениеЗаполнено(ТекстОшибки) Тогда + Возврат ТекстОшибки; + КонецЕсли; + КонецЕсли; + + ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); + ПроверитьПраваПользователя(ТекущийПользователь); + + СтандартныеПодсистемыПереопределяемый.ЗарегистрироватьНеразделенногоПользователя(); + + Если ПустаяСтрока(ТекущийПользователь.Имя) + ИЛИ ПользовательПоИдентификаторуСуществует(ТекущийПользователь.УникальныйИдентификатор) Тогда + // Авторизуется пользователь по умолчанию + // или пользовательИБ найден в справочнике. + Возврат ""; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ТекущийПользователь.РазделениеДанных.Количество() = 0 Тогда + + НачатьТранзакцию(); + + // Это неразделенный пользователь, требуется создать элемент в текущей области. + ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент(); + ПользовательОбъект.Наименование = ТекущийПользователь.Имя; + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить( + "УникальныйИдентификатор", ТекущийПользователь.УникальныйИдентификатор); + + ПользовательОбъект.ДополнительныеСвойства.Вставить( + "ОписаниеПользователяИБ", ОписаниеПользователяИБ); + + ПользовательОбъект.Служебный = Истина; + ПользовательОбъект.Записать(); + + ЗафиксироватьТранзакцию(); + УстановитьПривилегированныйРежим(Ложь); + + Возврат ""; + КонецЕсли; + + // Требуется либо создать администратора, либо сообщить об отказе авторизации. + ТекстСообщенияОбОшибке = ""; + ТребуетсяСоздатьАдминистратора = Ложь; + + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + + Если ПользователиИБ.Количество() = 1 Или Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь) Тогда + // Авторизуется администратор, созданный в конфигураторе. + ТребуетсяСоздатьАдминистратора = Истина; + Иначе + // Авторизуется обычный пользователь, созданный в конфигураторе. + ТекстСообщенияОбОшибке = ТекстСообщенияПользовательНеНайденВСправочнике(ТекущийПользователь.Имя); + КонецЕсли; + + Если ТребуетсяСоздатьАдминистратора Тогда + + Если РольДоступна(Метаданные.Роли.ПолныеПрава) + И (РольДоступна(Пользователи.РольАдминистратораСистемы()) + ИЛИ ОбщегоНазначенияПовтИсп.РазделениеВключено() ) Тогда + + Пользователь = Пользователи.СоздатьАдминистратора(ТекущийПользователь); + + Комментарий = + НСтр("ru = 'Выполняется запуск от имени пользователя с ролью ""Полные права"", + |который не зарегистрирован в списке пользователей. + |Выполнена автоматическая регистрация в списке пользователей. + | + |Для ведения списка и настройки прав пользователей предназначен список Пользователи, + |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); + + СтандартныеПодсистемыПереопределяемый.ПослеЗаписиАдминистратораПриАвторизации(Комментарий); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Администратор зарегистрирован в справочнике Пользователи'"), + УровеньЖурналаРегистрации.Предупреждение, + Метаданные.Справочники.Пользователи, + Пользователь, + Комментарий); + Иначе + ТекстСообщенияОбОшибке = + НСтр("ru = 'Запуск от имени пользователя с правом Администрирование невозможен, + |так как он не зарегистрирован в списке пользователей. + | + |Для ведения списка и настройки прав пользователей предназначен список Пользователи, + |режим конфигурирования 1С:Предприятия для этого использовать не следует.'"); + КонецЕсли; + КонецЕсли; + + Возврат ТекстСообщенияОбОшибке; + +КонецФункции + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.5.2"; + Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьИдентификаторыПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.5.15"; + Обработчик.Процедура = "ПользователиСлужебный.ЗаполнениеРегистраСоставыГруппПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.6.5"; + Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьСоставыГруппВнешнихПользователей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.0.6.5"; + Обработчик.Процедура = "ПользователиСлужебный.ДляВнешнихПользователейСоздатьПользователейИБ"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.1.2"; + Обработчик.Процедура = "Пользователи.ПриНаличииГруппПользователейУстановитьИспользование"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.1.10"; + Обработчик.Процедура = "ПользователиСлужебный.ЗаполнитьФлажокСлужебный"; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей в управляемой форме + +Процедура ОбработатьИнтерфейсРолей(Действие, Параметры) Экспорт + + Если Действие = "УстановитьТолькоПросмотрРолей" Тогда + УстановитьТолькоПросмотрРолей(Параметры); + + ИначеЕсли Действие = "НастроитьИнтерфейсРолейПриЗагрузкеНастроек" Тогда + НастроитьИнтерфейсРолейПриЗагрузкеНастроек(Параметры); + + ИначеЕсли Действие = "НастроитьИнтерфейсРолейПриСозданииФормы" Тогда + НастроитьИнтерфейсРолейПриСозданииФормы(Параметры); + + ИначеЕсли Действие = "ТолькоВыбранныеРоли" Тогда + ТолькоВыбранныеРоли(Параметры); + + ИначеЕсли Действие = "ГруппировкаПоПодсистемам" Тогда + ГруппировкаПоПодсистемам(Параметры); + + ИначеЕсли Действие = "ОбновитьДеревоРолей" Тогда + ОбновитьДеревоРолей(Параметры); + + ИначеЕсли Действие = "ОбновитьСоставРолей" Тогда + ОбновитьСоставРолей(Параметры); + + ИначеЕсли Действие = "ЗаполнитьРоли" Тогда + ЗаполнитьРоли(Параметры); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка в процедуре ПользователиСлужебный.ОбработатьИнтерфейсРолей() + |Неверное значение параметра Действие: ""%1"".'"), + Действие); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры используемые при обмене данными + +// Переопределяет стандартное поведение при выгрузке данных. +// Реквизит ИдентификаторПользователяИБ не переносится. +// +Процедура ПриОтправкеПользователя(ЭлементДанных, ОтправкаЭлемента) Экспорт + + Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить + ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Пользователи") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Пользователи.ЭтоНеразделенныйПользователь(ЭлементДанных.ИдентификаторПользователяИБ) Тогда + + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + Возврат; + + КонецЕсли; + + ЭлементДанных.ИдентификаторПользователяИБ = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + + КонецЕсли; + +КонецПроцедуры + +// Переопределяет стандартное поведение при загрузке данных. +// Реквизит ИдентификаторПользователяИБ не переносится, т.к. всегда +// связан с пользователем текущей базы или не связан с пользователем. +// +Процедура ПриПолученииПользователя(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад = Неопределено) Экспорт + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Пользователи") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + // Получение пользователей из автономного рабочего места игнорируем. + // Дополнительно отправляем данные в автономное рабочее место для полной синхронизации с сервисом. + ОтправкаНазад = Истина; + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + Иначе + + ЭлементДанных.ИдентификаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементДанных.Ссылка, "ИдентификаторПользователяИБ"); + + КонецЕсли; + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыПользователей") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыВнешнихПользователей") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.СоставыГруппПользователей") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьВнешнихПользователей") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ИспользоватьГруппыПользователей") Тогда + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + // Получение элемента из автономного рабочего места игнорируем. + // Дополнительно отправляем данные в автономное рабочее место для полной синхронизации с сервисом. + ОтправкаНазад = Истина; + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события + +// Вызывает обновление представления внешнего пользователя при изменении +// представления его объекта авторизации. +// +// В состав подписки следует включить типы объектов авторизации: +// Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип. +// Например: Справочник.ФизическиеЛица, Справочник.Контрагенты +// +Процедура ОбновитьПредставлениеВнешнегоПользователяПриЗаписи(Знач Объект, Отказ) Экспорт + + Если Объект.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + Возврат; + КонецЕсли; + + ОбновитьПредставлениеВнешнегоПользователя(Объект.Ссылка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции работы с пользователями + +Функция ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(ВернутьТекстОшибки = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекстОшибки = ""; + + ТекущийПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь(); + + Если НЕ ЗначениеЗаполнено(ТекущийПользовательИБ.Имя) + И НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ТипЗнч(Метаданные.ОсновнаяРоль) = Тип("ОбъектМетаданных") + И Метаданные.Роли.Содержит(Метаданные.ОсновнаяРоль) + И НЕ ПравоДоступа("Администрирование", Метаданные, Метаданные.ОсновнаяРоль) + И НЕ ЭтоСеансФоновогоЗадания() + И ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() = 0 Тогда + + ТекстОшибки = + НСтр("ru = 'Запуск с пустым списком пользователей информационной базы невозможен. + |Необходимо добавить администратора системы с двумя ролями + |""Администратор системы"", ""Полные права"" и повторить запуск программы от его имени. + | + |Для перехода к списку пользователей информационной базы необходимо открыть + |Конфигуратор и воспользоваться пунктом меню ""Администрирование - Пользователи"".'"); + + Если НЕ ВернутьТекстОшибки Тогда + ВызватьИсключение ТекстОшибки; + КонецЕсли; + КонецЕсли; + + Возврат ТекстОшибки; + +КонецФункции + +// Возвращает сохраняемое значение пароля для указанного пароля. +// +// Параметры: +// Пароль - Строка - пароль для которого нужно получить сохраняемое значение. +// +// ИдентификаторПользователяИБ - УникальныйИдентификатор - пользователя ИБ для которого нужно +// сравнить сохраняемое значение с полученным и результат поместить +// в следующий параметр Совпадает. +// +// Совпадает - Булево (возвращаемое значение) - см. комментарий к параметру +// ИдентификаторПользователяИБ. +// Возвращаемое значение: +// Строка - сохраняемое значение пароля. +// +Функция СохраняемоеЗначениеСтрокиПароля(Знач Пароль, + Знач ИдентификаторПользователяИБ = Неопределено, + Совпадает = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + ВременныйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ВременныйПользовательИБ.АутентификацияСтандартная = Истина; + ВременныйПользовательИБ.Пароль = Пароль; + + ВременныйПользовательИБ.Имя = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Временный пользователь (%1)'"), + Новый УникальныйИдентификатор); + + ВременныйПользовательИБ.Записать(); + + ВременныйПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ВременныйПользовательИБ.УникальныйИдентификатор); + + СохраняемоеЗначениеПароля = ВременныйПользовательИБ.СохраняемоеЗначениеПароля; + ОтменитьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ИдентификаторПользователяИБ); + + Если ТипЗнч(ПользовательИБ) = Тип("ПользовательИнформационнойБазы") Тогда + Совпадает = (СохраняемоеЗначениеПароля = ПользовательИБ.СохраняемоеЗначениеПароля); + КонецЕсли; + КонецЕсли; + + Возврат СохраняемоеЗначениеПароля; + +КонецФункции + +// Возвращает текущий уровень доступа на изменение свойств пользователя ИБ. +// +// Параметры: +// ДляВнешнегоПользователя - Булево. +// +// Возвращаемое значение: +// Строка. Возможные значения: +// "ПолныйДоступ" - любое изменение свойств пользователя. +// "УправлениеСписком" - управление списком пользователей, без возможности +// изменения прав. +// "ИзменениеТекущего" - изменение свойств текущего пользователя "Имя", +// "Пароль" и "Язык". +// "НетДоступа" - права на изменение пользователей отсутствуют. +// +Функция УровеньДоступаКСвойствамПользователяИБ(ДляВнешнегоПользователя) Экспорт + + Если ПривилегированныйРежим() + ИЛИ Пользователи.ЭтоПолноправныйПользователь() Тогда + + Возврат "ПолныйДоступ"; + + ИначеЕсли ДляВнешнегоПользователя Тогда + + Если РольДоступна(Метаданные.Роли.ДобавлениеИзменениеВнешнихПользователей) Тогда + Возврат "УправлениеСписком"; + + ИначеЕсли РольДоступна(Метаданные.Роли.ИзменениеТекущегоВнешнегоПользователя) Тогда + Возврат "ИзменениеТекущего"; + КонецЕсли; + Иначе + Если РольДоступна(Метаданные.Роли.ДобавлениеИзменениеПользователей) Тогда + Возврат "УправлениеСписком"; + + ИначеЕсли РольДоступна(Метаданные.Роли.ИзменениеТекущегоПользователя) Тогда + Возврат "ИзменениеТекущего"; + КонецЕсли; + КонецЕсли; + + Возврат "НетДоступа"; + +КонецФункции + +Процедура НачатьОбработкуПользователяИБ(ПользовательОбъект, + ПараметрыОбработки, + УдалениеПользователяИзСправочника = Ложь) Экспорт + + // Внешние пользователи не поддерживаются в модели сервиса. + Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.ВнешниеПользователи") + И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + ВызватьИсключение + НСтр("ru = 'Внешние пользователи не поддерживаются в модели сервиса.'"); + КонецЕсли; + + ДополнительныеСвойства = ПользовательОбъект.ДополнительныеСвойства; + + ПараметрыОбработки = Новый Структура; + ПараметрыОбработки.Вставить("ЗаписьАдминистратора", Ложь); + ПараметрыОбработки.Вставить("УдалениеПользователяИзСправочника", УдалениеПользователяИзСправочника); + + Если ДополнительныеСвойства.Свойство("ЗначениеКопирования") + И ЗначениеЗаполнено(ДополнительныеСвойства.ЗначениеКопирования) + И ТипЗнч(ДополнительныеСвойства.ЗначениеКопирования) = ТипЗнч(ПользовательОбъект.Ссылка) Тогда + + ПараметрыОбработки.Вставить("ЗначениеКопирования", ДополнительныеСвойства.ЗначениеКопирования); + КонецЕсли; + + Если ДополнительныеСвойства.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") Тогда + + // Проверка прав. + Если НЕ ОбщегоНазначенияПовтИсп.СеансЗапущенБезРазделителей() Тогда + ВызватьИсключение НСтр("ru = 'Обновление пользователя по сообщению + |канала удаленного администрирования + |доступно только неразделенным пользователям.'"); + КонецЕсли; + + ПараметрыОбработки.Вставить("ОбработкаСообщенияКаналаУдаленногоАдминистрирования"); + Иначе + СтандартныеПодсистемыПереопределяемый.ПередЗаписьюПользователя(ПользовательОбъект); + КонецЕсли; + + СтарыеСвойства = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + ПользовательОбъект.Ссылка, + "ИдентификаторПользователяИБ, + |ИдентификаторПользователяСервиса"); + + Если НЕ ЗначениеЗаполнено(СтарыеСвойства.ИдентификаторПользователяИБ) Тогда + СтарыеСвойства.ИдентификаторПользователяИБ = + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(СтарыеСвойства.ИдентификаторПользователяСервиса) Тогда + СтарыеСвойства.ИдентификаторПользователяСервиса = + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); + КонецЕсли; + + // Идентификаторы для дальнейшего использования при обработке пользователя. + ПараметрыОбработки.Вставить("СтарыйИдентификаторПользователяИБ", + СтарыеСвойства.ИдентификаторПользователяИБ); + ПараметрыОбработки.Вставить("СтарыйИдентификаторПользователяСервиса", + СтарыеСвойства.ИдентификаторПользователяСервиса); + + // Новые значения полей для контроля при записи элемента справочника Пользователи. + ПараметрыОбработки.Вставить("НовыйИдентификаторПользователяИБ", + СтарыеСвойства.ИдентификаторПользователяИБ); + + Если ПараметрыОбработки.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") Тогда + + ПараметрыОбработки.Вставить("НовыйИдентификаторПользователяСервиса", + ПользовательОбъект.ИдентификаторПользователяСервиса); + Иначе + ПараметрыОбработки.Вставить("НовыйИдентификаторПользователяСервиса", + СтарыеСвойства.ИдентификаторПользователяСервиса); + КонецЕсли; + + Если ЗначениеЗаполнено(ПараметрыОбработки.НовыйИдентификаторПользователяСервиса) + И ПараметрыОбработки.НовыйИдентификаторПользователяСервиса <> + ПараметрыОбработки.СтарыйИдентификаторПользователяСервиса Тогда + + Если ЗначениеЗаполнено(ПараметрыОбработки.СтарыйИдентификаторПользователяСервиса) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя изменять уже установленный идентификатор + |пользователя сервиса в элементе справочника.'"), + ПользовательОбъект.Наименование); + + КонецЕсли; + + НайденныйПользователь = Неопределено; + + Если ПользовательПоИдентификаторуСуществует( + ПараметрыОбработки.НовыйИдентификаторПользователяСервиса, + ПользовательОбъект.Ссылка, + НайденныйПользователь, + Истина) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя устанавливать идентификатор + |пользователя сервиса ""%2"" + |в этот элемент справочника, т.к. он + |уже используется в элементе ""%3"".'"), + ПользовательОбъект.Наименование, + ПараметрыОбработки.НовыйИдентификаторПользователяСервиса, + НайденныйПользователь); + КонецЕсли; + КонецЕсли; + + Если НЕ ДополнительныеСвойства.Свойство("ОписаниеПользователяИБ") Тогда + Возврат; + КонецЕсли; + ОписаниеПользователяИБ = ДополнительныеСвойства.ОписаниеПользователяИБ; + + Если НЕ ОписаниеПользователяИБ.Свойство("Действие") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |В параметре ОписаниеПользователяИБ не указано свойство Действие.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + + Если ОписаниеПользователяИБ.Действие <> "Записать" + И ОписаниеПользователяИБ.Действие <> "Удалить" Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |В параметре ОписаниеПользователяИБ указано + |неверное значение ""%2"" свойства Действие.'"), + ПользовательОбъект.Ссылка, + ОписаниеПользователяИБ.Действие); + КонецЕсли; + ПараметрыОбработки.Вставить("Действие", ОписаниеПользователяИБ.Действие); + + Если ЗначениеЗаполнено(ПараметрыОбработки.СтарыйИдентификаторПользователяИБ) + И ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Пользователи.ЭтоНеразделенныйПользователь( + ПараметрыОбработки.СтарыйИдентификаторПользователяИБ) Тогда + + ВызватьИсключение ТекстИсключенияЗаписьНеразделенныхПользователейЗапрещена(); + + ИначеЕсли ОписаниеПользователяИБ.Свойство("УникальныйИдентификатор") + И ЗначениеЗаполнено(ОписаниеПользователяИБ.УникальныйИдентификатор) + И ОбщегоНазначенияПовтИсп.РазделениеВключено() + И Пользователи.ЭтоНеразделенныйПользователь( + ОписаниеПользователяИБ.УникальныйИдентификатор) Тогда + + ПараметрыОбработки.Вставить("ЭтоНеразделенныйПользовательИБ"); + + Если ОписаниеПользователяИБ.Количество() > 2 + ИЛИ ОписаниеПользователяИБ.Действие = "Удалить" Тогда + + ВызватьИсключение ТекстИсключенияЗаписьНеразделенныхПользователейЗапрещена(); + КонецЕсли; + КонецЕсли; + + Если ТипЗнч(ПользовательОбъект) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда + УровеньДоступа = УровеньДоступаКСвойствамПользователяИБ(Истина); + Иначе + УровеньДоступа = УровеньДоступаКСвойствамПользователяИБ(Ложь); + КонецЕсли; + ТекстСообщения = НСтр("ru = 'Недостаточно прав для изменения пользователя информационной базы.'"); + + Если УровеньДоступа = "НетДоступа" Тогда + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ОписаниеСтарогоПользователяИБ = Неопределено; + Если Пользователи.ПрочитатьПользователяИБ( + ПараметрыОбработки.СтарыйИдентификаторПользователяИБ, + ОписаниеСтарогоПользователяИБ) Тогда + + ПараметрыОбработки.Вставить("СтарыйПользовательИБСуществует", Истина); + Иначе + ПараметрыОбработки.Вставить("СтарыйПользовательИБСуществует", Ложь); + КонецЕсли; + ПараметрыОбработки.Вставить( + "ОписаниеСтарогоПользователяИБ", ОписаниеСтарогоПользователяИБ); + + Если УровеньДоступа <> "ПолныйДоступ" + И УровеньДоступа <> "УправлениеСписком" + И ( НЕ ПараметрыОбработки.СтарыйПользовательИБСуществует + И ОписаниеПользователяИБ.Действие = "Записать" + ИЛИ ПараметрыОбработки.СтарыйПользовательИБСуществует + И ОписаниеПользователяИБ.Действие = "Удалить" ) Тогда + + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + Если ОписаниеПользователяИБ.Действие = "Записать" + И ОписаниеПользователяИБ.Свойство("УникальныйИдентификатор") + И ЗначениеЗаполнено(ОписаниеПользователяИБ.УникальныйИдентификатор) Тогда + + Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя связать пользователя ИБ с пользователем + |справочника для которого уже задан пользователь ИБ.'"), + ПользовательОбъект.Наименование); + + ИначеЕсли ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОписаниеПользователяИБ.УникальныйИдентификатор) = Неопределено Тогда + + Если НЕ ПараметрыОбработки.Свойство("ЭтоНеразделенныйПользовательИБ") Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя связать несуществующего пользователя ИБ + |с пользователем справочника.'"), + ПользовательОбъект.Наименование); + КонецЕсли; + КонецЕсли; + + НайденныйПользователь = Неопределено; + + Если ПользовательПоИдентификаторуСуществует( + ОписаниеПользователяИБ.УникальныйИдентификатор, + ПользовательОбъект.Ссылка, + НайденныйПользователь) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Нельзя связать с этим пользователем справочника + |пользователя ИБ уже связанного с другим пользователем + |справочника ""%2"".'"), + НайденныйПользователь, + ПользовательОбъект.Наименование); + КонецЕсли; + КонецЕсли; + + Если ПараметрыОбработки.Свойство("ЭтоНеразделенныйПользовательИБ") Тогда + + ПользовательОбъект.ИдентификаторПользователяИБ = + ОписаниеПользователяИБ.УникальныйИдентификатор; + + // Обновление значения реквизита контролируемого при записи. + ПараметрыОбработки.НовыйИдентификаторПользователяИБ = + ПользовательОбъект.ИдентификаторПользователяИБ; + + Возврат; + КонецЕсли; + + ОписаниеПользователя = Новый Структура; + ПараметрыОбработки.Вставить("ОписаниеПользователя", Новый Структура); + + Если ОписаниеПользователяИБ.Действие = "Записать" Тогда + // Проверка попытки изменения недоступных свойств. + + Если УровеньДоступа = "УправлениеСписком" Тогда + Если ОписаниеПользователяИБ.Свойство("Роли") Тогда + ВызватьИсключение ТекстСообщения; + КонецЕсли; + + ИначеЕсли УровеньДоступа = "ИзменениеТекущего" Тогда + + ВсеСвойства = Пользователи.НовоеОписаниеПользователяИБ(); + + ДопустимыеСвойства = Новый Массив; + ДопустимыеСвойства.Добавить("Пароль"); + ДопустимыеСвойства.Добавить("Язык"); + + Для каждого КлючИЗначение Из ОписаниеПользователяИБ Цикл + + Если ВсеСвойства.Свойство(КлючИЗначение.Ключ) + И ДопустимыеСвойства.Найти(КлючИЗначение.Ключ) = Неопределено Тогда + + ВызватьИсключение ТекстСообщения; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ЗаписатьПользователяИБ(ПользовательОбъект, ПараметрыОбработки); + Иначе + УдалитьПользователяИБ(ПользовательОбъект, ПараметрыОбработки); + КонецЕсли; + + // Обновление значения реквизита контролируемого при записи. + ПараметрыОбработки.НовыйИдентификаторПользователяИБ = + ПользовательОбъект.ИдентификаторПользователяИБ; + + ОписаниеНовогоПользователяИБ = Неопределено; + Если Пользователи.ПрочитатьПользователяИБ( + ПользовательОбъект.ИдентификаторПользователяИБ, + ОписаниеНовогоПользователяИБ) Тогда + + ПараметрыОбработки.Вставить("НовыйПользовательИБСуществует", Истина); + Иначе + ПараметрыОбработки.Вставить("НовыйПользовательИБСуществует", Ложь); + КонецЕсли; + ПараметрыОбработки.Вставить( + "ОписаниеНовогоПользователяИБ", ОписаниеНовогоПользователяИБ); + + ПараметрыОбработки.Вставить("СоздатьПользователяСервиса", Ложь); + + Если ПараметрыОбработки.НовыйПользовательИБСуществует + И ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если НЕ ЗначениеЗаполнено(ПараметрыОбработки.НовыйИдентификаторПользователяСервиса) Тогда + ПараметрыОбработки.Вставить("СоздатьПользователяСервиса", Истина); + ПользовательОбъект.ИдентификаторПользователяСервиса = Новый УникальныйИдентификатор; + // Обновление значения реквизита контролируемого при записи. + ПараметрыОбработки.НовыйИдентификаторПользователяСервиса = + ПользовательОбъект.ИдентификаторПользователяСервиса; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ЗавершитьОбработкуПользователяИБ(ПользовательОбъект, ПараметрыОбработки) Экспорт + + Если ПараметрыОбработки.НовыйИдентификаторПользователяИБ + <> ПользовательОбъект.ИдентификаторПользователяИБ Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Реквизит ИдентификаторПользователяИБ не допускается изменять. + |Обновление реквизита выполняется автоматически.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + + Если ПараметрыОбработки.НовыйИдентификаторПользователяСервиса + <> ПользовательОбъект.ИдентификаторПользователяСервиса Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи пользователя ""%1"". + |Реквизит ИдентификаторПользователяСервиса не допускается изменять. + |Обновление реквизита выполняется автоматически.'"), + ПользовательОбъект.Ссылка); + КонецЕсли; + + Если НЕ ПараметрыОбработки.Свойство("Действие") Тогда + Возврат; + КонецЕсли; + + Если НЕ ПараметрыОбработки.Свойство("ОбработкаСообщенияКаналаУдаленногоАдминистрирования") + И НЕ ПараметрыОбработки.Свойство("ЭтоНеразделенныйПользовательИБ") + И ПараметрыОбработки.ОписаниеПользователя.Количество() > 0 Тогда + + СтандартныеПодсистемыПереопределяемый.ПриЗаписиПользователя( + ПользовательОбъект, + ПараметрыОбработки.ОписаниеПользователя, + ПараметрыОбработки.СтарыйПользовательИБСуществует, + ПараметрыОбработки.НовыйПользовательИБСуществует, + ПараметрыОбработки.СоздатьПользователяСервиса); + КонецЕсли; + + Если ПараметрыОбработки.ЗаписьАдминистратора Тогда + УстановитьПривилегированныйРежим(Истина); + + СтандартныеПодсистемыПереопределяемый.ПриЗаписиАдминистратора(ПользовательОбъект.Ссылка); + + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + СкопироватьНастройкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки); + +КонецПроцедуры + +Процедура ЗаписатьПользователяИБ(ПользовательОбъект, ПараметрыОбработки) + + ДополнительныеСвойства = ПользовательОбъект.ДополнительныеСвойства; + ОписаниеПользователяИБ = ДополнительныеСвойства.ОписаниеПользователяИБ; + + Если ОписаниеПользователяИБ.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СоздатьНовогоПользователяИБ = Ложь; + + Если ОписаниеПользователяИБ.Свойство("УникальныйИдентификатор") + И ЗначениеЗаполнено(ОписаниеПользователяИБ.УникальныйИдентификатор) Тогда + + ИдентификаторПользователяИБ = ОписаниеПользователяИБ.УникальныйИдентификатор; + + ИначеЕсли ЗначениеЗаполнено(ПараметрыОбработки.СтарыйИдентификаторПользователяИБ) Тогда + ИдентификаторПользователяИБ = ПараметрыОбработки.СтарыйИдентификаторПользователяИБ; + СоздатьНовогоПользователяИБ = НЕ ПараметрыОбработки.СтарыйПользовательИБСуществует; + Иначе + ИдентификаторПользователяИБ = Неопределено; + СоздатьНовогоПользователяИБ = Истина; + КонецЕсли; + + ОписаниеПользователяИБ.Вставить("ПолноеИмя", ПользовательОбъект.Наименование); + + // Попытка записи пользователя ИБ. + ОписаниеОшибки = ""; + ПользовательИБ = Неопределено; + Если НЕ Пользователи.ЗаписатьПользователяИБ( + ИдентификаторПользователяИБ, + ОписаниеПользователяИБ, + СоздатьНовогоПользователяИБ, + ОписаниеОшибки, + ПользовательИБ) Тогда + + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + Если ПользовательИБ.Роли.Содержит(Метаданные.роли.ПолныеПрава) Тогда + ПараметрыОбработки.Вставить("ЗаписьАдминистратора", Истина); + КонецЕсли; + + Если СоздатьНовогоПользователяИБ Тогда + ОписаниеПользователяИБ.Вставить("РезультатДействия", "ДобавленПользовательИБ"); + ИдентификаторПользователяИБ = ОписаниеПользователяИБ.УникальныйИдентификатор; + Иначе + ОписаниеПользователяИБ.Вставить("РезультатДействия", "ИзмененПользовательИБ"); + КонецЕсли; + + ПользовательОбъект.ИдентификаторПользователяИБ = ИдентификаторПользователяИБ; + + ОписаниеПользователяИБ.Вставить( + "УникальныйИдентификатор", + ИдентификаторПользователяИБ); + + ПараметрыОбработки.ОписаниеПользователя.Вставить("Имя", ПользовательИБ.Имя); + ПараметрыОбработки.ОписаниеПользователя.Вставить("ПолноеИмя", ПользовательИБ.ПолноеИмя); + ПараметрыОбработки.ОписаниеПользователя.Вставить("Язык", Строка(ПользовательИБ.Язык)); + +КонецПроцедуры + +Функция УдалитьПользователяИБ(ПользовательОбъект, ПараметрыОбработки) + + ОписаниеПользователяИБ = ПользовательОбъект.ДополнительныеСвойства.ОписаниеПользователяИБ; + + // Очистка идентификатора пользователя ИБ. + ПользовательОбъект.ИдентификаторПользователяИБ = Неопределено; + + Если ПараметрыОбработки.СтарыйПользовательИБСуществует Тогда + + УстановитьПривилегированныйРежим(Истина); + + ОписаниеОшибки = ""; + ПользовательИБ = Неопределено; + Если Пользователи.УдалитьПользователяИБ( + ПараметрыОбработки.СтарыйИдентификаторПользователяИБ, + ОписаниеОшибки, + ПользовательИБ) Тогда + + // Установка идентификатора удаляемого пользователя ИБ, как результата действия Удалить. + ОписаниеПользователяИБ.Вставить("УникальныйИдентификатор", + ПараметрыОбработки.СтарыйИдентификаторПользователяИБ); + + ОписаниеПользователяИБ.Вставить("РезультатДействия", "УдаленПользовательИБ"); + + ПараметрыОбработки.ОписаниеПользователя.Вставить("Имя", ПользовательИБ.Имя); + ПараметрыОбработки.ОписаниеПользователя.Вставить("ПолноеИмя", ПользовательИБ.ПолноеИмя); + ПараметрыОбработки.ОписаниеПользователя.Вставить("Язык", Строка(ПользовательИБ.Язык)); + Иначе + ВызватьИсключение ОписаниеОшибки; + КонецЕсли; + + ИначеЕсли ЗначениеЗаполнено(ПараметрыОбработки.СтарыйИдентификаторПользователяИБ) Тогда + + ОписаниеПользователяИБ.Вставить( + "РезультатДействия", "ОчищенаСвязьСНесуществущимПользователемИБ"); + Иначе + ОписаниеПользователяИБ.Вставить( + "РезультатДействия", "НеТребуетсяУдалениеПользовательИБ"); + КонецЕсли; + +КонецФункции + +// Нельзя вызвать из фоновых заданий с пустым пользователем. +Функция ТребуетсяСоздатьПервогоАдминистратора(Знач ОписаниеПользователяИБ, + Текст = Неопределено) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() + И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Возврат Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ЗначениеЗаполнено(ПользователиИнформационнойБазы.ТекущийПользователь().Имя) Тогда + + Если ОписаниеПользователяИБ = Тип("Структура") Тогда + // Проверка перед записью обычного пользователя или пользователя ИБ. + + Если ОписаниеПользователяИБ.Свойство("Роли") Тогда + Роли = ОписаниеПользователяИБ.Роли; + Иначе + Роли = Новый Массив; + КонецЕсли; + + Если ПользователиПереопределяемый.ЗапретРедактированияРолей() + ИЛИ Роли.Найти("ПолныеПрава") = Неопределено + ИЛИ Роли.Найти(Пользователи.РольАдминистратораСистемы().Имя) = Неопределено Тогда + + // Подготовка текста вопроса при записи первого администратора. + Текст = НСтр("ru = 'В список пользователей программы добавляется первый пользователь, + |поэтому ему автоматически будет назначена роль ""Полные права"". + |Продолжить?'"); + СтандартныеПодсистемыПереопределяемый.ТекстВопросаПередЗаписьюПервогоАдминистратора( + Текст); + + Возврат Истина; + КонецЕсли; + Иначе + // Проверка перед записью внешнего пользователя. + Текст = НСтр("ru = 'Первый пользователь информационной базы должен иметь полные права. + |Внешний пользователь не может быть полноправным. + |Сначала создайте обычного пользователя-администратора.'"); + Возврат Истина; + КонецЕсли; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Процедура СкопироватьНастройкиПользователяИБ(ПользовательОбъект, ПараметрыОбработки) + + Если НЕ ПараметрыОбработки.Свойство("ЗначениеКопирования") + ИЛИ НЕ ПараметрыОбработки.НовыйПользовательИБСуществует Тогда + + Возврат; + КонецЕсли; + + ИмяНовогоПользователя = ПараметрыОбработки.ОписаниеНовогоПользователяИБ.Имя; + + ИдентификаторКопируемогоПользователяИБ = + ОбщегоНазначения.ПолучитьЗначениеРеквизита( + ПараметрыОбработки.ЗначениеКопирования, "ИдентификаторПользователяИБ"); + + Если НЕ ЗначениеЗаполнено(ИдентификаторКопируемогоПользователяИБ) Тогда + Возврат; + КонецЕсли; + + ОписаниеКопируемогоПользователяИБ = Неопределено; + Если НЕ Пользователи.ПрочитатьПользователяИБ( + ИдентификаторКопируемогоПользователяИБ, + ОписаниеКопируемогоПользователяИБ) Тогда + + Возврат; + КонецЕсли; + + ИмяКопируемогоПользователяИБ = ОписаниеКопируемогоПользователяИБ.Имя; + + // Копирование настроек. + СкопироватьНастройкиПользователя(ИмяКопируемогоПользователяИБ, ИмяНовогоПользователя, Ложь); + +КонецПроцедуры + +Функция СвойстваНеуказанногоПользователя() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Свойства = Новый Структура; + + // Ссылка на найденный элемент справочника + // соответствующий неуказанному пользователю. + Свойства.Вставить("Ссылка", Неопределено); + + // Ссылка, используемая для поиска и создания + // неуказанного пользователя в справочнике Пользователи. + Свойства.Вставить("СтандартнаяСсылка", Справочники.Пользователи.ПолучитьСсылку( + Новый УникальныйИдентификатор("aa00559e-ad84-4494-88fd-f0826edc46f0"))); + + // Полное имя, которое устанавливается в элемент справочника Пользователи + // при создании несуществующего неуказанного пользователя. + Свойства.Вставить("ПолноеИмя", Пользователи.ПолноеИмяНеуказанногоПользователя()); + + // Полное имя, которое используется для поиска неуказанного пользователя + // старым способом, необходимым для поддержки старых версий + // неуказанного пользователя. Это имя не требуется изменять. + Свойства.Вставить("ПолноеИмяДляПоиска", НСтр("ru = '<Не указан>'")); + + // Поиск по уникальному идентификатору. + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Ссылка", Свойства.СтандартнаяСсылка); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Ссылка = &Ссылка"; + + НачатьТранзакцию(); + Попытка + Если Запрос.Выполнить().Пустой() Тогда + Запрос.УстановитьПараметр("ПолноеИмя", Свойства.ПолноеИмяДляПоиска); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | Пользователи.Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Наименование = &ПолноеИмя"; + Результат = Запрос.Выполнить(); + + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Свойства.Ссылка = Выборка.Ссылка; + КонецЕсли; + Иначе + Свойства.Ссылка = Свойства.СтандартнаяСсылка; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Свойства; + +КонецФункции + +// Проверяет корректность заполнения структуры описания пользователя ИБ. +// В случае нахождения ошибок устанавливает параметр Отказ в Истина и +// отправляет сообщения об ошибках. +// +// Параметры: +// ОписаниеПользователяИБ - Структура - описание пользователя ИБ +// заполнение которого требуется проверить. +// +// Отказ - Булево - флаг отказа от выполнения операции. +// Устанавливается в случае ошибки. +// +// Возвращаемое значение: +// Булево - если Истина, ошибок не найдено. +// +Функция ПроверитьОписаниеПользователяИБ(Знач ОписаниеПользователяИБ, Отказ) Экспорт + + Если ОписаниеПользователяИБ.Свойство("Имя") Тогда + + Если ПустаяСтрока(ОписаниеПользователяИБ.Имя) Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не заполнено имя пользователя информационной базы.'"), + , + "Имя", + , + Отказ); + КонецЕсли; + + КонецЕсли; + + Если ОписаниеПользователяИБ.Свойство("Пароль") Тогда + + Если ОписаниеПользователяИБ.Пароль <> Неопределено + И ОписаниеПользователяИБ.Пароль + <> ОписаниеПользователяИБ.ПодтверждениеПароля Тогда + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"), + , + "Пароль", + , + Отказ); + КонецЕсли; + + КонецЕсли; + + Если ОписаниеПользователяИБ.Свойство("ПользовательОС") Тогда + + Если НЕ ПустаяСтрока(ОписаниеПользователяИБ.ПользовательОС) Тогда + + УстановитьПривилегированныйРежим(Истина); + Попытка + ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ПользовательИБ.ПользовательОС = ОписаниеПользователяИБ.ПользовательОС; + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Пользователь ОС должен быть в формате + |""\\ИмяДомена\ИмяПользователя"".'"), + , + "ПользовательОС", + , + Отказ); + КонецПопытки; + УстановитьПривилегированныйРежим(Ложь); + КонецЕсли; + + КонецЕсли; + + Возврат НЕ Отказ; + +КонецФункции + +// Записывает указанного Пользователя ИБ с учетом режима разделения данных. +// Если режим разделения данных включен, тогда перед записью проверяются +// права записываемого пользователя. +// +// Параметры: +// ПользовательИБ - ПользовательИнформационнойБазы - объект, который требуется записать. +// +Процедура ЗаписатьПользователяИнформационнойБазы(ПользовательИБ) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если Пользователи.ЭтоНеразделенныйПользователь( + ПользовательИБ.УникальныйИдентификатор) Тогда + + ВызватьИсключение ТекстИсключенияЗаписьНеразделенныхПользователейЗапрещена(); + КонецЕсли; + + КонецЕсли; + + ПроверитьПраваПользователя(ПользовательИБ); + + ПользовательИБ.Записать(); + +КонецПроцедуры + +// Проверяет существование пользователя информационной базы. +// +// Параметры: +// Идентификатор - Строка - имя пользователя ИБ, +// УникальныйИдентификатор - идентификатор пользователя ИБ. +// +// Возвращаемое значение: +// Булево. +// +Функция ПользовательИБСуществует(Знач Идентификатор) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(Идентификатор) = Тип("УникальныйИдентификатор") Тогда + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Идентификатор); + Иначе + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Идентификатор); + КонецЕсли; + + Если ПользовательИБ = Неопределено Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции + +// Определяет наличие элемента в справочнике Пользователи +// или справочнике ВнешниеПользователи по уникальному идентификатору +// пользователя информационной. +// Функция используется для проверки наличия связи пользователяИБ только +// с одним элементом справочников Пользователи, ВнешниеПользователи. +// +// Параметры: +// УникальныйИдентификатор - идентификатор пользователя ИБ. +// +// СсылкаНаТекущего - СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи - исключить +// указанную ссылку из поиска. +// Неопределено - искать среди всех элементов справочников. +// +// НайденныйПользователь (Возвращаемое значение): +// Неопределено - пользователь не существует. +// СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи, если найден. +// +// ИдентификаторПользователяСервиса - Булево. +// Ложь - проверять ИдентификаторПользователяИБ. +// Истина - проверять ИдентификаторПользователяСервиса. +// +// Возвращаемое значение: +// Булево. +// +Функция ПользовательПоИдентификаторуСуществует(УникальныйИдентификатор, + СсылкаНаТекущего = Неопределено, + НайденныйПользователь = Неопределено, + ИдентификаторПользователяСервиса = Ложь) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("СсылкаНаТекущего", СсылкаНаТекущего); + Запрос.УстановитьПараметр("УникальныйИдентификатор", УникальныйИдентификатор); + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор + | И Пользователи.Ссылка <> &СсылкаНаТекущего + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | ВнешниеПользователи.Ссылка + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ИдентификаторПользователяИБ = &УникальныйИдентификатор + | И ВнешниеПользователи.Ссылка <> &СсылкаНаТекущего"; + + Результат = Ложь; + НайденныйПользователь = Неопределено; + + НачатьТранзакцию(); + Попытка + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + НайденныйПользователь = Выборка.Пользователь; + Результат = Истина; + Пользователи.НайтиНеоднозначныхПользователейИБ(, УникальныйИдентификатор); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Результат; + +КонецФункции + +// Обновляет составы пользователей у групп пользователей с учетом иерархии +// в регистре сведений "Составы групп пользователей". +// Данные регистра используются в форме списка и формы выбора пользователей. +// Данные регистра могут быть использованы для повышения производительности запросов, +// т.к. не требуется работать с иерархией. +// +// Параметры: +// ГруппаПользователей - СправочникСсылка.ГруппыПользователей. +// +// Пользователь - Неопределено - для всех пользователей. +// - Массив значений СправочникСсылка.Пользователи - для указанных пользователей. +// - СправочникСсылка.Пользователи - для указанного пользователя. +// +Процедура ОбновитьСоставыГруппПользователей(Знач ГруппаПользователей, Знач Пользователь = Неопределено) Экспорт + + Если НЕ ЗначениеЗаполнено(ГруппаПользователей) Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(Пользователь) = Тип("Массив") И Пользователь.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + Если ГруппаПользователей = Справочники.ГруппыПользователей.ВсеПользователи Тогда + + ОбновитьСоставГруппыВсеПользователи(Пользователь); + Иначе + ОбновитьСоставыИерархическихГруппПользователей(ГруппаПользователей, Пользователь); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции работы с внешними пользователями + +// Обновляет составы внешних пользователей у групп внешних пользователей +// с учетом иерархии в регистре сведений "Составы групп пользователей". +// Данные используеются в форме списка и форме выбора внешних пользователей. +// Данные могут быть использованы в целях для повышения производительности, +// так как не требуется работать с иерархией на языке запросов. +// +// Параметры: +// ГруппаВнешнихПользователей - СправочникСсылка.ГруппыВнешнихПользователей +// Когда указана группа ВсеВнешниеПользователи обновляются также все +// автоматические группы внешних пользователей по типам объектов авторизации. +// +// ВнешнийПользователь - Неопределено - для всех внешних пользователей. +// - Массив значений СправочникСсылка.ВнешниеПользователи +// - для указанных внешних пользователей. +// - СправочникСсылка.ВнешниеПользователи - для указанного внешнего пользователя. +// +Процедура ОбновитьСоставыГруппВнешнихПользователей(Знач ГруппаВнешнихПользователей, + Знач ВнешнийПользователь = Неопределено) Экспорт + + Если НЕ ЗначениеЗаполнено(ГруппаВнешнихПользователей) Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ВнешнийПользователь) = Тип("Массив") И ВнешнийПользователь.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда + УчастникиИзменений = Новый Соответствие; + КонецЕсли; + + НачатьТранзакцию(); + Попытка + Если ГруппаВнешнихПользователей = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда + + ОбновитьСоставГруппыВсеПользователи(ВнешнийПользователь, Истина, УчастникиИзменений); + ОбновитьСоставыГруппПоТипамОбъектовАвторизации( , ВнешнийПользователь, УчастникиИзменений); + + ИначеЕсли ОбщегоНазначения.ПолучитьЗначениеРеквизита( + ГруппаВнешнихПользователей, "ВсеОбъектыАвторизации") = Истина Тогда + + ОбновитьСоставыГруппПоТипамОбъектовАвторизации( + ГруппаВнешнихПользователей, ВнешнийПользователь, УчастникиИзменений); + Иначе + ОбновитьСоставыИерархическихГруппПользователей( + ГруппаВнешнихПользователей, ВнешнийПользователь, УчастникиИзменений); + КонецЕсли; + + Если НЕ ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда + + УчастникиИзмененийМассив = Новый Массив; + Для каждого КлючИЗначение Из УчастникиИзменений Цикл + УчастникиИзмененийМассив.Добавить(КлючИЗначение.Ключ); + КонецЦикла; + + ОбновитьРолиВнешнихПользователей(УчастникиИзмененийМассив); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Обновляет список ролей пользователей информационной базы, которые соответствуют +// внешним пользователям. Состав ролей вычисляется исходя из вхождения внешних +// пользователей в группы внешних пользователей, кроме тех внешних пользователей, +// для которых роли установлены непосредственно. +// Требуется только при разрешении редактирования ролей, например, если +// встроена подсистема Управление доступом, то эта процедура не требуется. +// +// Параметры: +// МассивВнешнихПользователей - Неопределено - все внешние пользователи. +// СправочникСсылка.ГруппаВнешнихПользователей, +// Массив элементов СправочникСсылка.ВнешниеПользователи. +// +Процедура ОбновитьРолиВнешнихПользователей(Знач МассивВнешнихПользователей = Неопределено) Экспорт + + Если ПользователиПереопределяемый.ЗапретРедактированияРолей() Тогда + // Роли устанавливаются другим механизмом, например, механизмом подсистемы УправлениеДоступом. + Возврат; + КонецЕсли; + + Если ТипЗнч(МассивВнешнихПользователей) = Тип("Массив") + И МассивВнешнихПользователей.Количество() = 0 Тогда + + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + Если ТипЗнч(МассивВнешнихПользователей) <> Тип("Массив") Тогда + + Если МассивВнешнихПользователей = Неопределено Тогда + ГруппаВнешнихПользователей = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; + Иначе + ГруппаВнешнихПользователей = МассивВнешнихПользователей; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ГруппаВнешнихПользователей", ГруппаВнешнихПользователей); + Запрос.Текст = + "ВЫБРАТЬ + | СоставыГруппПользователей.Пользователь + |ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + |ГДЕ + | СоставыГруппПользователей.ГруппаПользователей = &ГруппаВнешнихПользователей"; + + МассивВнешнихПользователей = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); + КонецЕсли; + + Пользователи.НайтиНеоднозначныхПользователейИБ(); + + ИдентификаторыПользователейИБ = Новый Соответствие; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ВнешниеПользователи", МассивВнешнихПользователей); + Запрос.Текст = + "ВЫБРАТЬ + | ВнешниеПользователи.Ссылка КАК ВнешнийПользователь, + | ВнешниеПользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.Ссылка В(&ВнешниеПользователи) + | И (НЕ ВнешниеПользователи.УстановитьРолиНепосредственно)"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ИдентификаторыПользователейИБ.Вставить( + Выборка.ВнешнийПользователь, Выборка.ИдентификаторПользователяИБ); + КонецЦикла; + + // Подготовка таблицы старых ролей внешних пользователей. + СтарыеРолиВнешнихПользователей = Новый ТаблицаЗначений; + + СтарыеРолиВнешнихПользователей.Колонки.Добавить( + "ВнешнийПользователь", Новый ОписаниеТипов("СправочникСсылка.ВнешниеПользователи")); + + СтарыеРолиВнешнихПользователей.Колонки.Добавить( + "Роль", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(200))); + + ТекущийНомер = МассивВнешнихПользователей.Количество() - 1; + Пока ТекущийНомер >= 0 Цикл + + // Проверка необходимости обработки пользователя. + ПользовательИБ = Неопределено; + ИдентификаторПользователяИБ = ИдентификаторыПользователейИБ[МассивВнешнихПользователей[ТекущийНомер]]; + Если ИдентификаторПользователяИБ <> Неопределено Тогда + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ИдентификаторПользователяИБ); + КонецЕсли; + + Если ПользовательИБ = Неопределено + ИЛИ ПустаяСтрока(ПользовательИБ.Имя) Тогда + + МассивВнешнихПользователей.Удалить(ТекущийНомер); + Иначе + Для каждого Роль Из ПользовательИБ.Роли Цикл + СтараяРольВнешнегоПользователя = СтарыеРолиВнешнихПользователей.Добавить(); + СтараяРольВнешнегоПользователя.ВнешнийПользователь = МассивВнешнихПользователей[ТекущийНомер]; + СтараяРольВнешнегоПользователя.Роль = Роль.Имя; + КонецЦикла; + КонецЕсли; + ТекущийНомер = ТекущийНомер - 1; + КонецЦикла; + + // Подготовка списка ролей отсутствующих в метаданных и которые нужно переустановить. + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.УстановитьПараметр("ВнешниеПользователи", МассивВнешнихПользователей); + Запрос.УстановитьПараметр("ВсеДоступныеРоли", ПользователиСлужебныйПовтИсп.ВсеРоли()); + Запрос.УстановитьПараметр("СтарыеРолиВнешнихПользователей", СтарыеРолиВнешнихПользователей); + Запрос.Текст = + "ВЫБРАТЬ + | СтарыеРолиВнешнихПользователей.ВнешнийПользователь, + | СтарыеРолиВнешнихПользователей.Роль + |ПОМЕСТИТЬ СтарыеРолиВнешнихПользователей + |ИЗ + | &СтарыеРолиВнешнихПользователей КАК СтарыеРолиВнешнихПользователей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВсеДоступныеРоли.Имя + |ПОМЕСТИТЬ ВсеДоступныеРоли + |ИЗ + | &ВсеДоступныеРоли КАК ВсеДоступныеРоли + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | СоставыГруппПользователей.ГруппаПользователей КАК ГруппаВнешнихПользователей, + | СоставыГруппПользователей.Пользователь КАК ВнешнийПользователь, + | Роли.Роль + |ПОМЕСТИТЬ ВсеНовыеРолиВнешнихПользователей + |ИЗ + | Справочник.ГруппыВнешнихПользователей.Роли КАК Роли + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.Пользователь В (&ВнешниеПользователи)) + | И (СоставыГруппПользователей.ГруппаПользователей = Роли.Ссылка) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВсеНовыеРолиВнешнихПользователей.ВнешнийПользователь, + | ВсеНовыеРолиВнешнихПользователей.Роль + |ПОМЕСТИТЬ НовыеРолиВнешнихПользователей + |ИЗ + | ВсеНовыеРолиВнешнихПользователей КАК ВсеНовыеРолиВнешнихПользователей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СтарыеРолиВнешнихПользователей.ВнешнийПользователь + |ПОМЕСТИТЬ ИзмененныеВнешниеПользователи + |ИЗ + | СтарыеРолиВнешнихПользователей КАК СтарыеРолиВнешнихПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ НовыеРолиВнешнихПользователей КАК НовыеРолиВнешнихПользователей + | ПО (НовыеРолиВнешнихПользователей.ВнешнийПользователь = СтарыеРолиВнешнихПользователей.ВнешнийПользователь) + | И (НовыеРолиВнешнихПользователей.Роль = СтарыеРолиВнешнихПользователей.Роль) + |ГДЕ + | НовыеРолиВнешнихПользователей.Роль ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | НовыеРолиВнешнихПользователей.ВнешнийПользователь + |ИЗ + | НовыеРолиВнешнихПользователей КАК НовыеРолиВнешнихПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ СтарыеРолиВнешнихПользователей КАК СтарыеРолиВнешнихПользователей + | ПО НовыеРолиВнешнихПользователей.ВнешнийПользователь = СтарыеРолиВнешнихПользователей.ВнешнийПользователь + | И НовыеРолиВнешнихПользователей.Роль = СтарыеРолиВнешнихПользователей.Роль + |ГДЕ + | СтарыеРолиВнешнихПользователей.Роль ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ВсеНовыеРолиВнешнихПользователей.ГруппаВнешнихПользователей, + | ВсеНовыеРолиВнешнихПользователей.ВнешнийПользователь, + | ВсеНовыеРолиВнешнихПользователей.Роль + |ИЗ + | ВсеНовыеРолиВнешнихПользователей КАК ВсеНовыеРолиВнешнихПользователей + |ГДЕ + | НЕ ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + | ИЗ + | ВсеДоступныеРоли КАК ВсеДоступныеРоли + | ГДЕ + | ВсеДоступныеРоли.Имя = ВсеНовыеРолиВнешнихПользователей.Роль)"; + + // Регистрация ошибок имен ролей в профилях групп доступа. + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru= 'При обновлении ролей внешнего пользователя + |""%1"" + |роль ""%2"" + |группы внешних пользователей ""%3"" + |не найдена в метаданных.'"), + СокрЛП(Выборка.ВнешнийПользователь.Наименование), + Выборка.Роль, + Строка(Выборка.ГруппаВнешнихПользователей)); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Внешние пользователи.Роль не найдена в метаданных'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + ТекстСообщения, + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + КонецЦикла; + + // Обновление ролей пользователей ИБ. + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененныеВнешниеПользователиИРоли.ВнешнийПользователь, + | ИзмененныеВнешниеПользователиИРоли.Роль + |ИЗ + | (ВЫБРАТЬ + | НовыеРолиВнешнихПользователей.ВнешнийПользователь КАК ВнешнийПользователь, + | НовыеРолиВнешнихПользователей.Роль КАК Роль + | ИЗ + | НовыеРолиВнешнихПользователей КАК НовыеРолиВнешнихПользователей + | ГДЕ + | НовыеРолиВнешнихПользователей.ВнешнийПользователь В + | (ВЫБРАТЬ + | ИзмененныеВнешниеПользователи.ВнешнийПользователь + | ИЗ + | ИзмененныеВнешниеПользователи КАК ИзмененныеВнешниеПользователи) + | + | ОБЪЕДИНИТЬ + | + | ВЫБРАТЬ + | ВнешниеПользователи.Ссылка, + | """" + | ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + | ГДЕ + | ВнешниеПользователи.Ссылка В + | (ВЫБРАТЬ + | ИзмененныеВнешниеПользователи.ВнешнийПользователь + | ИЗ + | ИзмененныеВнешниеПользователи КАК ИзмененныеВнешниеПользователи)) КАК ИзмененныеВнешниеПользователиИРоли + | + |УПОРЯДОЧИТЬ ПО + | ИзмененныеВнешниеПользователиИРоли.ВнешнийПользователь, + | ИзмененныеВнешниеПользователиИРоли.Роль"; + Выборка = Запрос.Выполнить().Выбрать(); + + ПользовательИБ = Неопределено; + Пока Выборка.Следующий() Цикл + Если ЗначениеЗаполнено(Выборка.Роль) Тогда + ПользовательИБ.Роли.Добавить(Метаданные.Роли[Выборка.Роль]); + Продолжить; + КонецЕсли; + Если ПользовательИБ <> Неопределено Тогда + ПользовательИБ.Записать(); + КонецЕсли; + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ИдентификаторыПользователейИБ[Выборка.ВнешнийПользователь]); + + ПользовательИБ.Роли.Очистить(); + КонецЦикла; + Если ПользовательИБ <> Неопределено Тогда + ПользовательИБ.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Проверяет, что объект информационной базы используется в качестве объекта авторизации +// какого-нибудь внешнего пользователя, кроме заданного внешнего пользователя (если задан). +// +Функция ОбъектАвторизацииИспользуется(Знач СсылкаНаОбъектАвторизации, + Знач СсылкаНаТекущегоВнешнегоПользователя = Неопределено, + НайденныйВнешнийПользователь = Неопределено, + ЕстьПравоДобавленияВнешнегоПользователя = Ложь, + ТекстОшибки = "") Экспорт + + ТекстОшибки = НСтр("ru = 'Объект информационной базы уже используется + |для другого внешнего пользователя.'"); + + ЕстьПравоДобавленияВнешнегоПользователя = ПравоДоступа( + "Добавление", Метаданные.Справочники.ВнешниеПользователи); + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + + Запрос.УстановитьПараметр( + "СсылкаНаТекущегоВнешнегоПользователя", СсылкаНаТекущегоВнешнегоПользователя); + + Запрос.УстановитьПараметр("СсылкаНаОбъектАвторизации", СсылкаНаОбъектАвторизации); + + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВнешниеПользователи.Ссылка + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ОбъектАвторизации = &СсылкаНаОбъектАвторизации + | И ВнешниеПользователи.Ссылка <> &СсылкаНаТекущегоВнешнегоПользователя"; + + НачатьТранзакцию(); + Попытка + Таблица = Запрос.Выполнить().Выгрузить(); + Если Таблица.Количество() > 0 Тогда + НайденныйВнешнийПользователь = Таблица[0].Ссылка; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Таблица.Количество() > 0; + +КонецФункции + +// Обновляет представление внешнего пользователя при изменении представления его объекта авторизации. +Процедура ОбновитьПредставлениеВнешнегоПользователя(СсылкаНаОбъектАвторизации) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ВнешниеПользователи.Ссылка + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |ГДЕ + | ВнешниеПользователи.ОбъектАвторизации = &СсылкаНаОбъектАвторизации + | И ВнешниеПользователи.Наименование <> &НовоеПредставлениеОбъектаАвторизации"); + Запрос.УстановитьПараметр("СсылкаНаОбъектАвторизации", СсылкаНаОбъектАвторизации); + Запрос.УстановитьПараметр("НовоеПредставлениеОбъектаАвторизации", Строка(СсылкаНаОбъектАвторизации)); + + НачатьТранзакцию(); + Попытка + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + ВнешнийПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВнешнийПользовательОбъект.Наименование = Строка(СсылкаНаОбъектАвторизации); + ВнешнийПользовательОбъект.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Работа с настройками пользователя информационной базы + +// Копирует настройки от пользователя источника пользователю приемнику. При значении +// параметра Переносить = Истина, настройки у пользователя источника удаляются. +// +// Параметры +// ИмяПользователяИсточник - Строка - Имя пользователя ИБ от которого будет производиться копирование настроек +// +// ИмяПользователяПриемник - Строка - Имя пользователя ИБ которому будут записаны настройки +// +// Переносить - Булево - Если Истина - настройки переносятся от одного пользователя другому, +// если Ложь - копируются новому +// +Процедура СкопироватьНастройкиПользователя(ИмяПользователяИсточник, ИмяПользователяПриемник, Переносить = Ложь) Экспорт + + // Перенос пользовательских настроек отчетов + СкопироватьНастройки(ХранилищеПользовательскихНастроекОтчетов, ИмяПользователяИсточник, ИмяПользователяПриемник, Переносить); + // Перенос настроек внешнего вида + СкопироватьНастройки(ХранилищеСистемныхНастроек,ИмяПользователяИсточник, ИмяПользователяПриемник, Переносить); + // Перенос произвольных настроек пользователей + СкопироватьНастройки(ХранилищеОбщихНастроек, ИмяПользователяИсточник, ИмяПользователяПриемник, Переносить); + // Перенос настроек данных форм + СкопироватьНастройки(ХранилищеНастроекДанныхФорм, ИмяПользователяИсточник, ИмяПользователяПриемник, Переносить); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Универсальные процедуры и функции + +Функция РазличияЗначенийКолонки(ИмяКолонки, Таблица1, Таблица2) Экспорт + + Если ТипЗнч(Таблица1) <> Тип("ТаблицаЗначений") + И ТипЗнч(Таблица2) <> Тип("ТаблицаЗначений") Тогда + + Возврат Новый Массив; + КонецЕсли; + + Если ТипЗнч(Таблица1) <> Тип("ТаблицаЗначений") Тогда + Возврат Таблица2.ВыгрузитьКолонку(ИмяКолонки); + КонецЕсли; + + Если ТипЗнч(Таблица2) <> Тип("ТаблицаЗначений") Тогда + Возврат Таблица1.ВыгрузитьКолонку(ИмяКолонки); + КонецЕсли; + + Таблица11 = Таблица1.Скопировать(, ИмяКолонки); + Таблица11.Свернуть(ИмяКолонки); + + Таблица22 = Таблица2.Скопировать(, ИмяКолонки); + Таблица22.Свернуть(ИмяКолонки); + + Для каждого Строка Из Таблица22 Цикл + НоваяСтрока = Таблица11.Добавить(); + НоваяСтрока[ИмяКолонки] = Строка[ИмяКолонки]; + КонецЦикла; + + Таблица11.Колонки.Добавить("Признак"); + Таблица11.ЗаполнитьЗначения(1, "Признак"); + + Таблица11.Свернуть(ИмяКолонки, "Признак"); + + Отбор = Новый Структура("Признак", 1); + Таблица = Таблица11.Скопировать(Таблица11.НайтиСтроки(Отбор)); + + Возврат Таблица.ВыгрузитьКолонку(ИмяКолонки); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Функция ТекстСообщенияПользовательНеНайденВСправочнике(ИмяПользователя) + + Если ВнешниеПользователи.ИспользоватьВнешнихПользователей() Тогда + ТекстСообщенияОбОшибке = НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. + | + |Пользователь ""%1"" не найден в справочниках + |""Пользователи"" и ""Внешние пользователи"". + | + |Обратитесь к администратору.'"); + Иначе + ТекстСообщенияОбОшибке = НСтр("ru = 'Авторизация не выполнена. Работа системы будет завершена. + | + |Пользователь ""%1"" не найден в справочнике ""Пользователи"". + | + |Обратитесь к администратору.'"); + КонецЕсли; + + ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщенияОбОшибке, ИмяПользователя); + + Возврат ТекстСообщенияОбОшибке; + +КонецФункции + +Функция СсылкаПользователяПоПолномуНаименованию(ПолноеИмя) + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка, + | Пользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Наименование = &ПолноеИмя"; + + Запрос.УстановитьПараметр("ПолноеИмя", ПолноеИмя); + + Результат = Неопределено; + + НачатьТранзакцию(); + Попытка + РезультатЗапроса = Запрос.Выполнить(); + Если НЕ РезультатЗапроса.Пустой() Тогда + + Выборка = РезультатЗапроса.Выбрать(); + Выборка.Следующий(); + + Если НЕ Пользователи.ПользовательИБЗанят(Выборка.ИдентификаторПользователяИБ) Тогда + Результат = Выборка.Ссылка; + КонецЕсли; + КонецЕсли; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + + Возврат Неопределено; + +КонецФункции + +Функция ЭтоСеансФоновогоЗадания() + + НомерСеанса = НомерСеансаИнформационнойБазы(); + Сеансы = ПолучитьСеансыИнформационнойБазы(); + + Для каждого Сеанс Из Сеансы Цикл + Если Сеанс.НомерСеанса = НомерСеанса Тогда + Возврат Сеанс.ИмяПриложения = "BackgroundJob"; + КонецЕсли; + КонецЦикла; + + Возврат Ложь; + +КонецФункции + +// Используется в процедурах ОбновитьСоставыГруппПользователей, +// ОбновитьСоставыГруппВнешнихПользователей. +// +// Параметры: +// Таблица - полное имя объекта метаданных. +// +// Возвращаемое значение: +// ТаблицаЗначений (Ссылка, Родитель) +// +Функция СсылкиВИерархииРодителей(Таблица) + + // Подготовка состава групп родителей. + Запрос = Новый Запрос( + "ВЫБРАТЬ + | СсылкиРодителей.Ссылка КАК Ссылка, + | СсылкиРодителей.Родитель КАК Родитель + |ИЗ + | " + Таблица + " КАК СсылкиРодителей"); + СсылкиРодителей = Запрос.Выполнить().Выгрузить(); + СсылкиРодителей.Индексы.Добавить("Родитель"); + СсылкиВИерархииРодителей = СсылкиРодителей.Скопировать(Новый Массив); + + Для каждого ОписаниеСсылки Из СсылкиРодителей Цикл + НоваяСтрока = СсылкиВИерархииРодителей.Добавить(); + НоваяСтрока.Родитель = ОписаниеСсылки.Ссылка; + НоваяСтрока.Ссылка = ОписаниеСсылки.Ссылка; + + ЗаполнитьСсылкиВИерархииРодителя(ОписаниеСсылки.Ссылка, ОписаниеСсылки.Ссылка, СсылкиРодителей, СсылкиВИерархииРодителей); + КонецЦикла; + + Возврат СсылкиВИерархииРодителей; + +КонецФункции + +Процедура ЗаполнитьСсылкиВИерархииРодителя(Знач Родитель, Знач ТекущийРодитель, Знач СсылкиРодителей, Знач СсылкиВИерархииРодителей) + + СсылкиРодителя = СсылкиРодителей.НайтиСтроки(Новый Структура("Родитель", ТекущийРодитель)); + + Для каждого ОписаниеСсылки Из СсылкиРодителя Цикл + НоваяСтрока = СсылкиВИерархииРодителей.Добавить(); + НоваяСтрока.Родитель = Родитель; + НоваяСтрока.Ссылка = ОписаниеСсылки.Ссылка; + + ЗаполнитьСсылкиВИерархииРодителя(Родитель, ОписаниеСсылки.Ссылка, СсылкиРодителей, СсылкиВИерархииРодителей); + КонецЦикла; + +КонецПроцедуры + +// Используется в процедурах ОбновитьСоставыГруппПользователей, +// ОбновитьСоставыГруппВнешнихПользователей. +// +Процедура ОбновитьСоставГруппыВсеПользователи(Пользователь, + ОбновитьГруппуВнешнихПользователей = Ложь, + УчастникиИзменений = Неопределено) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр( + "ГруппаВсеПользователи", + ?(ОбновитьГруппуВнешнихПользователей, + Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, + Справочники.ГруппыПользователей.ВсеПользователи) ); + + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка + |ПОМЕСТИТЬ Пользователи + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | &ОтборПользователя + | + |ИНДЕКСИРОВАТЬ ПО + | Пользователи.Ссылка + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | &ГруппаВсеПользователи КАК ГруппаПользователей, + | Пользователи.Ссылка КАК Пользователь + |ИЗ + | Пользователи КАК Пользователи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = &ГруппаВсеПользователи) + | И (СоставыГруппПользователей.Пользователь = Пользователи.Ссылка) + |ГДЕ + | СоставыГруппПользователей.Пользователь ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | Пользователи.Ссылка, + | Пользователи.Ссылка + |ИЗ + | Пользователи КАК Пользователи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = Пользователи.Ссылка) + | И (СоставыГруппПользователей.Пользователь = Пользователи.Ссылка) + |ГДЕ + | СоставыГруппПользователей.Пользователь ЕСТЬ NULL "; + + Если ОбновитьГруппуВнешнихПользователей Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.Пользователи", "Справочник.ВнешниеПользователи"); + КонецЕсли; + + Если Пользователь = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПользователя", "ИСТИНА"); + Иначе + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.Текст = СтрЗаменить( + Запрос.Текст, "&ОтборПользователя", "Пользователи.Ссылка В (&Пользователь)"); + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); + Запись = НаборЗаписей.Добавить(); + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.ГруппаПользователей.Установить(Выборка.ГруппаПользователей); + НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); + ЗаполнитьЗначенияСвойств(Запись, Выборка); + НаборЗаписей.Записать(); // Добавление недостающих записей о связях. + Если УчастникиИзменений <> Неопределено Тогда + УчастникиИзменений.Вставить(Выборка.Пользователь); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Используется в процедуре ОбновитьСоставыГруппВнешнихПользователей. +Процедура ОбновитьСоставыГруппПоТипамОбъектовАвторизации(ГруппаВнешнихПользователей = Неопределено, + ВнешнийПользователь, + УчастникиИзменений = Неопределено) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Группы.Ссылка КАК Ссылка, + | Группы.ТипОбъектовАвторизации + |ПОМЕСТИТЬ Группы + |ИЗ + | Справочник.ГруппыВнешнихПользователей КАК Группы + |ГДЕ + | Группы.ВсеОбъектыАвторизации = ИСТИНА + | И &ОтборГрупп + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Группы.Ссылка КАК ГруппаПользователей, + | ВнешниеПользователи.Ссылка КАК Пользователь + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Группы КАК Группы + | ПО (ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации) = ТИПЗНАЧЕНИЯ(Группы.ТипОбъектовАвторизации)) + | И (&ОтборВнешнегоПользователя) + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.ГруппаПользователей = Группы.Ссылка) + | И (СоставыГруппПользователей.Пользователь = ВнешниеПользователи.Ссылка) + |ГДЕ + | СоставыГруппПользователей.Пользователь ЕСТЬ NULL "; + + Если ГруппаВнешнихПользователей = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборГрупп", "ИСТИНА"); + Иначе + Запрос.УстановитьПараметр("Группа", ГруппаВнешнихПользователей); + Запрос.Текст = СтрЗаменить( + Запрос.Текст, "&ОтборГрупп", "Группы.Ссылка В (&Группа)"); + КонецЕсли; + + Если ВнешнийПользователь = Неопределено Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборВнешнегоПользователя", "ИСТИНА"); + Иначе + Запрос.УстановитьПараметр("ВнешнийПользователь", ВнешнийПользователь); + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "&ОтборВнешнегоПользователя", + "ВнешниеПользователи.Ссылка В (&ВнешнийПользователь)"); + КонецЕсли; + + РезультатЗапроса = Запрос.Выполнить(); + + Если НЕ РезультатЗапроса.Пустой() Тогда + НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); + Запись = НаборЗаписей.Добавить(); + Выборка = РезультатЗапроса.Выбрать(); + + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.ГруппаПользователей.Установить(Выборка.ГруппаПользователей); + НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); + ЗаполнитьЗначенияСвойств(Запись, Выборка); + НаборЗаписей.Записать(); // Добавление недостающих записей о связях. + Если УчастникиИзменений <> Неопределено Тогда + УчастникиИзменений.Вставить(Выборка.Пользователь); + КонецЕсли; + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +// Используется в процедурах ОбновитьСоставыГруппПользователей, +// ОбновитьСоставыГруппВнешнихПользователей. +// +Процедура ОбновитьСоставыИерархическихГруппПользователей(ГруппаПользователей, + Пользователь, + УчастникиИзменений = Неопределено) + + ОбновитьГруппыВнешнихПользователей = + ТипЗнч(ГруппаПользователей) <> Тип("СправочникСсылка.ГруппыПользователей"); + + // Подготовка групп пользователей в иерархии их родителей. + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СсылкиВИерархииРодителей.Родитель, + | СсылкиВИерархииРодителей.Ссылка + |ПОМЕСТИТЬ СсылкиВИерархииРодителей + |ИЗ + | &СсылкиВИерархииРодителей КАК СсылкиВИерархииРодителей"; + + Запрос.УстановитьПараметр("СсылкиВИерархииРодителей", СсылкиВИерархииРодителей( + ?(ОбновитьГруппыВнешнихПользователей, + "Справочник.ГруппыВнешнихПользователей", + "Справочник.ГруппыПользователей") )); + + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + Запрос.Выполнить(); + + // Подготовка запроса для цикла. + Запрос.Текст = + "ВЫБРАТЬ + | СоставыГруппПользователей.Пользователь + |ПОМЕСТИТЬ СоставыГруппПользователей + |ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + |ГДЕ + | &ОтборПользователяВРегистре + | И СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | СоставыГруппПользователей.Пользователь + |ИЗ + | СоставыГруппПользователей КАК СоставыГруппПользователей + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ СсылкиВИерархииРодителей КАК СсылкиВИерархииРодителей + | ПО (СсылкиВИерархииРодителей.Ссылка = ГруппыПользователейСостав.Ссылка) + | И (СсылкиВИерархииРодителей.Родитель = &ГруппаПользователей) + | И (&ОтборПользователяВСправочнике) + | ПО СоставыГруппПользователей.Пользователь = ГруппыПользователейСостав.Пользователь + |ГДЕ + | ГруппыПользователейСостав.Ссылка ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | &ГруппаПользователей КАК ГруппаПользователей, + | ГруппыПользователейСостав.Пользователь КАК Пользователь + |ИЗ + | Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ СсылкиВИерархииРодителей КАК СсылкиВИерархииРодителей + | ПО (СсылкиВИерархииРодителей.Ссылка = ГруппыПользователейСостав.Ссылка) + | И (СсылкиВИерархииРодителей.Родитель = &ГруппаПользователей) + | И (&ОтборПользователяВСправочнике) + | ЛЕВОЕ СОЕДИНЕНИЕ СоставыГруппПользователей КАК СоставыГруппПользователей + | ПО (СоставыГруппПользователей.Пользователь = ГруппыПользователейСостав.Пользователь) + |ГДЕ + | СоставыГруппПользователей.Пользователь ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ГруппыПользователей.Родитель КАК Родитель + |ИЗ + | Справочник.ГруппыПользователей КАК ГруппыПользователей + |ГДЕ + | ГруппыПользователей.Ссылка = &ГруппаПользователей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ СоставыГруппПользователей"; + + Если Пользователь = Неопределено Тогда + ОтборПользователяВРегистре = "ИСТИНА"; + ОтборПользователяВСправочнике = "ИСТИНА"; + Иначе + Запрос.УстановитьПараметр("Пользователь", Пользователь); + ОтборПользователяВРегистре = "СоставыГруппПользователей.Пользователь В (&Пользователь)"; + ОтборПользователяВСправочнике = "ГруппыПользователейСостав.Пользователь В (&Пользователь)"; + КонецЕсли; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПользователяВРегистре", ОтборПользователяВРегистре); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&ОтборПользователяВСправочнике", ОтборПользователяВСправочнике); + + Если ОбновитьГруппыВнешнихПользователей Тогда + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "Справочник.ГруппыПользователей", + "Справочник.ГруппыВнешнихПользователей"); + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "ГруппыПользователейСостав.Пользователь", + "ГруппыПользователейСостав.ВнешнийПользователь"); + КонецЕсли; + + // Выполнение для текущий группы пользователей и каждой группы-родителя. + Пока ЗначениеЗаполнено(ГруппаПользователей) Цикл + + Запрос.УстановитьПараметр("ГруппаПользователей", ГруппаПользователей); + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если НЕ РезультатыЗапроса[1].Пустой() Тогда + НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); + Выборка = РезультатыЗапроса[1].Выбрать(); + + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); + НаборЗаписей.Отбор.ГруппаПользователей.Установить(ГруппаПользователей); + НаборЗаписей.Записать(); // Удаление лишних записей о связях. + Если УчастникиИзменений <> Неопределено Тогда + УчастникиИзменений.Вставить(Выборка.Пользователь); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если НЕ РезультатыЗапроса[2].Пустой() Тогда + НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей(); + Запись = НаборЗаписей.Добавить(); + Выборка = РезультатыЗапроса[2].Выбрать(); + + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.Пользователь.Установить(Выборка.Пользователь); + НаборЗаписей.Отбор.ГруппаПользователей.Установить(Выборка.ГруппаПользователей); + ЗаполнитьЗначенияСвойств(Запись, Выборка); + НаборЗаписей.Записать(); // Добавление недостающих записей о связях. + Если УчастникиИзменений <> Неопределено Тогда + УчастникиИзменений.Вставить(Выборка.Пользователь); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если НЕ РезультатыЗапроса[3].Пустой() Тогда + Выборка = РезультатыЗапроса[3].Выбрать(); + Выборка.Следующий(); + ГруппаПользователей = Выборка.Родитель; + Иначе + ГруппаПользователей = Неопределено; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Проверяет права указанного Пользователя ИБ в режиме разделения данных. +// +// Параметры: +// ПользовательИБ - ПользовательИнформационнойБазы. +// +Процедура ПроверитьПраваПользователя(ПользовательИБ) + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ПользовательИБ.РазделениеДанных.Количество() > 0 Тогда + + НедоступныеПрава = ПользователиСлужебныйПовтИсп.НедоступныеПраваПоТипуПользователя( + Перечисления.ТипыПользователей.ПользовательОбластиДанных); + + НедоступнаяРоль = Неопределено; + + Для каждого Роль Из ПользовательИБ.Роли Цикл + + ДоступныеДляИзмененияОбщиеДанные = + ПользователиСлужебныйПовтИсп.ОбщиеДанныеДоступныеДляИзменения(Роль.Имя); + + Если ДоступныеДляИзмененияОбщиеДанные.Количество() > 0 Тогда + НедоступнаяРоль = Роль; + + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + СериализаторXDTO.ЗаписатьXML(Запись, ДоступныеДляИзмененияОбщиеДанные); + ТаблицаСтрокой = Запись.Закрыть(); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Запись'"), + УровеньЖурналаРегистрации.Ошибка, + , + ПользовательИБ, + НСтр("ru = 'Разделенному пользователю назначена роль, + |предоставляющая права на изменение общих данных: + |'") + ТаблицаСтрокой); + КонецЕсли; + + Для каждого Право Из НедоступныеПрава Цикл + + Если ПравоДоступа(Право, Метаданные, Роль) Тогда + НедоступнаяРоль = Роль; + + ШаблонСообщения = НСтр("ru = 'Разделенному пользователю назначена роль, + |предоставляющая право ""%1"".'"); + + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, + Право); + + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Пользователи.Запись'"), + УровеньЖурналаРегистрации.Ошибка, + , + ПользовательИБ, + ТекстСообщения); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Если НедоступнаяРоль <> Неопределено Тогда + + ШаблонСообщения = НСтр("ru = 'Разделенным пользователям не может быть назначена + |роль ""%1"".'"); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонСообщения, + НедоступнаяРоль.Представление()); + КонецЕсли; + + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Функция ТекстИсключенияЗаписьНеразделенныхПользователейЗапрещена() + + Возврат + НСтр("ru = 'Запись неразделенных пользователей + |при включенном использовании разделителей запрещена.'"); +КонецФункции + +Функция СписокНастроек(ИмяПользователяИБ, МенеджерНастроек) + + ТаблицаНастроек = Новый ТаблицаЗначений; + ТаблицаНастроек.Колонки.Добавить("КлючОбъекта"); + ТаблицаНастроек.Колонки.Добавить("КлючНастроек"); + + Отбор = Новый Структура; + Отбор.Вставить("Пользователь", ИмяПользователяИБ); + + ВыборкаНастроек = МенеджерНастроек.Выбрать(Отбор); + Пропустить = Ложь; + Пока СледующаяНастройка(ВыборкаНастроек, Пропустить) Цикл + + Если Пропустить Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = ТаблицаНастроек.Добавить(); + НоваяСтрока.КлючОбъекта = ВыборкаНастроек.КлючОбъекта; + НоваяСтрока.КлючНастроек = ВыборкаНастроек.КлючНастроек; + КонецЦикла; + + Возврат ТаблицаНастроек; + +КонецФункции + +Функция СледующаяНастройка(ВыборкаНастроек, Пропустить) + + Попытка + Пропустить = Ложь; + Возврат ВыборкаНастроек.Следующий(); + Исключение + Пропустить = Истина; + Возврат Истина; + КонецПопытки; + +КонецФункции + +Процедура СкопироватьНастройки(МенеджерНастроек, ИмяПользователяИсточник, ИмяПользователяПриемник, Переносить) + + ТаблицаНастроек = СписокНастроек(ИмяПользователяИсточник, МенеджерНастроек); + + Для Каждого Настройка Из ТаблицаНастроек Цикл + КлючОбъекта = Настройка.КлючОбъекта; + КлючНастроек = Настройка.КлючНастроек; + Значение = МенеджерНастроек.Загрузить(КлючОбъекта, КлючНастроек, , ИмяПользователяИсточник); + ОписаниеНастроек = МенеджерНастроек.ПолучитьОписание(КлючОбъекта, КлючНастроек, ИмяПользователяИсточник); + МенеджерНастроек.Сохранить(КлючОбъекта, КлючНастроек, Значение, + ОписаниеНастроек, ИмяПользователяПриемник); + Если Переносить Тогда + МенеджерНастроек.Удалить(КлючОбъекта, КлючНастроек, ИмяПользователяИсточник); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Для процедуры ОбработатьИнтерфейсРолей + +Процедура ЗаполнитьРоли(Параметры) + + ПрочитанныеРоли = Параметры.ОсновнойПараметр; + КоллекцияРолей = Параметры.КоллекцияРолей; + + КоллекцияРолей.Очистить(); + + Для каждого Роль Из ПрочитанныеРоли Цикл + КоллекцияРолей.Добавить().Роль = Роль; + КонецЦикла; + + ОбновитьДеревоРолей(Параметры); + +КонецПроцедуры + +Процедура НастроитьИнтерфейсРолейПриСозданииФормы(Параметры) + + Форма = Параметры.Форма; + Элементы = Форма.Элементы; + + // Установка начальных значений перед загрузкой данных из настроек на сервере + // для случая, когда данные ещё не были записаны и не загружаются. + ПоказатьПодсистемыРолей = Истина; + Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; + + // Для нового элемента показать все роли, для существующего - только выбранные роли. + Если Элементы.Найти("РолиПоказатьТолькоВыбранныеРоли") <> Неопределено Тогда + Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Параметры.ОсновнойПараметр; + КонецЕсли; + + ОбновитьДеревоРолей(Параметры); + +КонецПроцедуры + +Процедура НастроитьИнтерфейсРолейПриЗагрузкеНастроек(Параметры) + + Настройки = Параметры.ОсновнойПараметр; + Форма = Параметры.Форма; + Элементы = Форма.Элементы; + + ПоказатьПодсистемыРолей = Форма.ПоказатьПодсистемыРолей; + + Если Настройки["ПоказатьПодсистемыРолей"] = Ложь Тогда + Форма.ПоказатьПодсистемыРолей = Ложь; + Элементы.РолиПоказатьПодсистемыРолей.Пометка = Ложь; + Иначе + Форма.ПоказатьПодсистемыРолей = Истина; + Элементы.РолиПоказатьПодсистемыРолей.Пометка = Истина; + КонецЕсли; + + Если ПоказатьПодсистемыРолей <> Форма.ПоказатьПодсистемыРолей Тогда + ОбновитьДеревоРолей(Параметры); + КонецЕсли; + +КонецПроцедуры + +Процедура УстановитьТолькоПросмотрРолей(Параметры) + + Элементы = Параметры.Форма.Элементы; + ТолькоПросмотрРолей = Параметры.ОсновнойПараметр; + + Если Параметры.Свойство("ДополнительныйПараметр") + И ТипЗнч(Параметры.ДополнительныйПараметр) = Тип("Булево") Тогда + + РазрешитьПросмотрТолькоВыбранных = Параметры.ДополнительныйПараметр; + Иначе + РазрешитьПросмотрТолькоВыбранных = Ложь; + КонецЕсли; + + Если ТолькоПросмотрРолей <> Неопределено Тогда + + Элементы.Роли.ТолькоПросмотр = ТолькоПросмотрРолей; + + Если Элементы.Найти("РолиУстановитьФлажки") <> Неопределено Тогда + Элементы.РолиУстановитьФлажки.Доступность = НЕ ТолькоПросмотрРолей; + КонецЕсли; + Если Элементы.Найти("РолиСнятьФлажки") <> Неопределено Тогда + Элементы.РолиСнятьФлажки.Доступность = НЕ ТолькоПросмотрРолей; + КонецЕсли; + КонецЕсли; + + Если РазрешитьПросмотрТолькоВыбранных Тогда + Если Элементы.Найти("РолиПоказатьТолькоВыбранныеРоли") <> Неопределено Тогда + Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность = Ложь; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ТолькоВыбранныеРоли(Параметры) + + Параметры.Форма.Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = + НЕ Параметры.Форма.Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка; + + ОбновитьДеревоРолей(Параметры); + +КонецПроцедуры + +Процедура ГруппировкаПоПодсистемам(Параметры) + + Параметры.Форма.ПоказатьПодсистемыРолей = НЕ Параметры.Форма.ПоказатьПодсистемыРолей; + Параметры.Форма.Элементы.РолиПоказатьПодсистемыРолей.Пометка = Параметры.Форма.ПоказатьПодсистемыРолей; + + ОбновитьДеревоРолей(Параметры); + +КонецПроцедуры + +Процедура ОбновитьДеревоРолей(Параметры) + + Форма = Параметры.Форма; + Элементы = Форма.Элементы; + Роли = Форма.Роли; + ТипПользователя = Параметры.ТипПользователя; + КоллекцияРолей = Параметры.КоллекцияРолей; + + СкрытьРольПолныеПрава = Параметры.Свойство("СкрытьРольПолныеПрава") + И Параметры.СкрытьРольПолныеПрава = Истина; + + Если Элементы.Найти("РолиПоказатьТолькоВыбранныеРоли") <> Неопределено Тогда + Если НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Доступность Тогда + Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка = Истина; + КонецЕсли; + ПоказатьТолькоВыбранныеРоли = Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка; + Иначе + ПоказатьТолькоВыбранныеРоли = Истина; + КонецЕсли; + + ПоказатьПодсистемыРолей = Параметры.Форма.ПоказатьПодсистемыРолей; + + // Запоминание текущей строки. + ТекущаяПодсистема = ""; + ТекущаяРоль = ""; + + Если Элементы.Роли.ТекущаяСтрока <> Неопределено Тогда + ТекущиеДанные = Роли.НайтиПоИдентификатору(Элементы.Роли.ТекущаяСтрока); + Если ТекущиеДанные.ЭтоРоль Тогда + ТекущаяПодсистема = ?(ТекущиеДанные.ПолучитьРодителя() = Неопределено, "", ТекущиеДанные.ПолучитьРодителя().Имя); + ТекущаяРоль = ТекущиеДанные.Имя; + Иначе + ТекущаяПодсистема = ТекущиеДанные.Имя; + ТекущаяРоль = ""; + КонецЕсли; + КонецЕсли; + + ДеревоРолей = ПользователиСлужебныйПовтИсп.ДеревоРолей( + ПоказатьПодсистемыРолей, ТипПользователя).Скопировать(); + + ДобавитьИменаНесуществующихРолей(Параметры, ДеревоРолей); + + ДеревоРолей.Колонки.Добавить("Пометка", Новый ОписаниеТипов("Булево")); + ДеревоРолей.Колонки.Добавить("НомерКартинки", Новый ОписаниеТипов("Число")); + ПодготовитьДеревоРолей(ДеревоРолей.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли, Параметры.КоллекцияРолей); + + Параметры.Форма.ЗначениеВРеквизитФормы(ДеревоРолей, "Роли"); + + Элементы.Роли.Отображение = ?(ДеревоРолей.Строки.Найти(Ложь, "ЭтоРоль") = Неопределено, ОтображениеТаблицы.Список, ОтображениеТаблицы.Дерево); + + // Восстановление текущей строки + НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Ложь, ТекущаяПодсистема), Истина); + Если НайденныеСтроки.Количество() <> 0 Тогда + ОписаниеПодсистемы = НайденныеСтроки[0]; + ИндексПодсистемы = ?(ОписаниеПодсистемы.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеПодсистемы.Родитель.Строки).Индекс(ОписаниеПодсистемы); + СтрокаПодсистемы = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеПодсистемы).Получить(ИндексПодсистемы); + Если ЗначениеЗаполнено(ТекущаяРоль) Тогда + НайденныеСтроки = ОписаниеПодсистемы.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль)); + Если НайденныеСтроки.Количество() <> 0 Тогда + ОписаниеРоли = НайденныеСтроки[0]; + Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьЭлементы().Получить(ОписаниеПодсистемы.Строки.Индекс(ОписаниеРоли)).ПолучитьИдентификатор(); + Иначе + Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); + КонецЕсли; + Иначе + Элементы.Роли.ТекущаяСтрока = СтрокаПодсистемы.ПолучитьИдентификатор(); + КонецЕсли; + Иначе + НайденныеСтроки = ДеревоРолей.Строки.НайтиСтроки(Новый Структура("ЭтоРоль, Имя", Истина, ТекущаяРоль), Истина); + Если НайденныеСтроки.Количество() <> 0 Тогда + ОписаниеРоли = НайденныеСтроки[0]; + ИндексРоли = ?(ОписаниеРоли.Родитель = Неопределено, ДеревоРолей.Строки, ОписаниеРоли.Родитель.Строки).Индекс(ОписаниеРоли); + СтрокаРоли = ДанныеФормыКоллекцияЭлементовДерева(Роли, ОписаниеРоли).Получить(ИндексРоли); + Элементы.Роли.ТекущаяСтрока = СтрокаРоли.ПолучитьИдентификатор(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьИменаНесуществующихРолей(Параметры, ДеревоРолей) + + КоллекцияРолей = Параметры.КоллекцияРолей; + + // Добавление несуществующих ролей. + Для каждого Строка Из КоллекцияРолей Цикл + Отбор = Новый Структура("ЭтоРоль, Имя", Истина, Строка.Роль); + Если ДеревоРолей.Строки.НайтиСтроки(Отбор, Истина).Количество() = 0 Тогда + СтрокаДерева = ДеревоРолей.Строки.Вставить(0); + СтрокаДерева.ЭтоРоль = Истина; + СтрокаДерева.Имя = Строка.Роль; + СтрокаДерева.Синоним = "? " + Строка.Роль; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ПодготовитьДеревоРолей(Знач Коллекция, Знач СкрытьРольПолныеПрава, Знач ПоказатьТолькоВыбранныеРоли, КоллекцияРолей) + + Индекс = Коллекция.Количество()-1; + + Пока Индекс >= 0 Цикл + Строка = Коллекция[Индекс]; + + ПодготовитьДеревоРолей(Строка.Строки, СкрытьРольПолныеПрава, ПоказатьТолькоВыбранныеРоли, КоллекцияРолей); + + Если Строка.ЭтоРоль Тогда + Если СкрытьРольПолныеПрава И + (ВРег(Строка.Имя) = ВРег("ПолныеПрава") ИЛИ ВРег(Строка.Имя) = ВРег("АдминистраторСистемы")) Тогда + Коллекция.Удалить(Индекс); + Иначе + Строка.НомерКартинки = 6; + Строка.Пометка = КоллекцияРолей.НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; + Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда + Коллекция.Удалить(Индекс); + КонецЕсли; + КонецЕсли; + Иначе + Если Строка.Строки.Количество() = 0 Тогда + Коллекция.Удалить(Индекс); + Иначе + Строка.НомерКартинки = 5; + Строка.Пометка = Строка.Строки.НайтиСтроки(Новый Структура("Пометка", Ложь)).Количество() = 0; + КонецЕсли; + КонецЕсли; + + Индекс = Индекс-1; + КонецЦикла; + +КонецПроцедуры + +Функция ДанныеФормыКоллекцияЭлементовДерева(Знач ДанныеФормыДерево, Знач СтрокаДереваЗначений) + + Если СтрокаДереваЗначений.Родитель = Неопределено Тогда + ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыДерево.ПолучитьЭлементы(); + Иначе + ИндексРодителя = ?(СтрокаДереваЗначений.Родитель.Родитель = Неопределено, СтрокаДереваЗначений.Владелец().Строки, СтрокаДереваЗначений.Родитель.Родитель.Строки).Индекс(СтрокаДереваЗначений.Родитель); + ДанныеФормыКоллекцияЭлементовДерева = ДанныеФормыКоллекцияЭлементовДерева(ДанныеФормыДерево, СтрокаДереваЗначений.Родитель).Получить(ИндексРодителя).ПолучитьЭлементы(); + КонецЕсли; + + Возврат ДанныеФормыКоллекцияЭлементовДерева; + +КонецФункции + +Процедура ОбновитьСоставРолей(Параметры) + + Роли = Параметры.Форма.Роли; + ПоказатьТолькоВыбранныеРоли = Параметры.Форма.Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка; + ТипПользователя = Параметры.ТипПользователя; + + Если Параметры.ОсновнойПараметр = "ВключитьВсе" Тогда + ИдентификаторСтроки = Неопределено; + Добавить = Истина; + + ИначеЕсли Параметры.ОсновнойПараметр = "ИсключитьВсе" Тогда + ИдентификаторСтроки = Неопределено; + Добавить = Ложь; + Иначе + ИдентификаторСтроки = Параметры.Форма.Элементы.Роли.ТекущаяСтрока; + КонецЕсли; + + Если ИдентификаторСтроки = Неопределено Тогда + // Обработка всех + КоллекцияРолей = Параметры.КоллекцияРолей; + КоллекцияРолей.Очистить(); + Если Добавить Тогда + ДоступныеРоли = ПользователиСлужебныйПовтИсп.ДоступныеРоли(ТипПользователя); + Для каждого ОписаниеРоли Из ДоступныеРоли Цикл + + Если ОписаниеРоли.Имя <> "ПолныеПрава" + И ОписаниеРоли.Имя <> "АдминистраторСистемы" Тогда + + КоллекцияРолей.Добавить().Роль = ОписаниеРоли.Имя; + КонецЕсли; + КонецЦикла; + КонецЕсли; + Если ПоказатьТолькоВыбранныеРоли Тогда + Если КоллекцияРолей.Количество() > 0 Тогда + ОбновитьДеревоРолей(Параметры); + Иначе + Роли.ПолучитьЭлементы().Очистить(); + КонецЕсли; + // Возврат + Возврат; + // Возврат + КонецЕсли; + Иначе + ТекущиеДанные = Роли.НайтиПоИдентификатору(ИдентификаторСтроки); + Если ТекущиеДанные.ЭтоРоль Тогда + ДобавитьУдалитьРоль(Параметры, ТекущиеДанные.Имя, ТекущиеДанные.Пометка); + Иначе + ДобавитьУдалитьРолиПодсистемы(Параметры, ТекущиеДанные.ПолучитьЭлементы(), ТекущиеДанные.Пометка); + КонецЕсли; + КонецЕсли; + + ОбновитьПометкуВыбранныхРолей(Параметры, Роли.ПолучитьЭлементы()); + + Модифицированность = Истина; + +КонецПроцедуры + +Процедура ДобавитьУдалитьРоль(Параметры, Знач Роль, Знач Добавить) + + НайденныеРоли = Параметры.КоллекцияРолей.НайтиСтроки(Новый Структура("Роль", Роль)); + + Если Добавить Тогда + Если НайденныеРоли.Количество() = 0 Тогда + Параметры.КоллекцияРолей.Добавить().Роль = Роль; + КонецЕсли; + Иначе + Если НайденныеРоли.Количество() > 0 Тогда + Параметры.КоллекцияРолей.Удалить(НайденныеРоли[0]); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьУдалитьРолиПодсистемы(Параметры, Знач Коллекция, Знач Добавить) + + Для каждого Строка Из Коллекция Цикл + Если Строка.ЭтоРоль Тогда + ДобавитьУдалитьРоль(Параметры, Строка.Имя, Добавить); + Иначе + ДобавитьУдалитьРолиПодсистемы(Параметры, Строка.ПолучитьЭлементы(), Добавить); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Процедура ОбновитьПометкуВыбранныхРолей(Параметры, Знач Коллекция) + + ПоказатьТолькоВыбранныеРоли = Параметры.Форма.Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка; + + Индекс = Коллекция.Количество()-1; + + Пока Индекс >= 0 Цикл + Строка = Коллекция[Индекс]; + + Если Строка.ЭтоРоль Тогда + Строка.Пометка = Параметры.КоллекцияРолей.НайтиСтроки(Новый Структура("Роль", Строка.Имя)).Количество() > 0; + Если ПоказатьТолькоВыбранныеРоли И НЕ Строка.Пометка Тогда + Коллекция.Удалить(Индекс); + КонецЕсли; + Иначе + ОбновитьПометкуВыбранныхРолей(Параметры, Строка.ПолучитьЭлементы()); + Если Строка.ПолучитьЭлементы().Количество() = 0 Тогда + Коллекция.Удалить(Индекс); + Иначе + Строка.Пометка = Истина; + Для каждого Элемент Из Строка.ПолучитьЭлементы() Цикл + Если НЕ Элемент.Пометка Тогда + Строка.Пометка = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Индекс = Индекс-1; + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Вызывается при обновлении конфигурации на версию 1.0.5.2 +// Выполняет попытку сопоставления / заполнения реквизита "ИдентификаторПользователяИБ" +// для каждого элемента справочника Пользователи. +// +Процедура ЗаполнитьИдентификаторыПользователей() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Пользователи.НайтиНеоднозначныхПользователейИБ(); + + ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); + + Запрос = Новый Запрос; + + Запрос.УстановитьПараметр("ПустойИдентификатор", + Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") ); + + Запрос.УстановитьПараметр("НеуказанныйПользователь", + СвойстваНеуказанногоПользователя().Ссылка); + + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.Пользователи КАК Пользователи + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ВнешниеПользователи.ИдентификаторПользователяИБ + |ИЗ + | Справочник.ВнешниеПользователи КАК ВнешниеПользователи + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | Пользователи.Ссылка КАК Ссылка, + | Пользователи.Наименование КАК Наименование + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Ссылка <> &НеуказанныйПользователь + | И Пользователи.ИдентификаторПользователяИБ = &ПустойИдентификатор"; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если РезультатыЗапроса[1].Пустой() Тогда + Возврат; + КонецЕсли; + + ЗанятыеИдентификаторы = РезультатыЗапроса[0].Выгрузить(); + ЗанятыеИдентификаторы.Индексы.Добавить("ИдентификаторПользователяИБ"); + + ДлинаПолногоИмени = Метаданные.Справочники.Пользователи.ДлинаНаименования; + СвободныеПользователи = РезультатыЗапроса[1].Выгрузить(); + СвободныеПользователи.Индексы.Добавить("Наименование"); + + Для каждого Строка Из СвободныеПользователи Цикл + Строка.Наименование = ВРег(СокрЛП(Строка.Наименование)); + КонецЦикла; + + Для каждого ПользовательИБ Из ПользователиИБ Цикл + + Если ЗанятыеИдентификаторы.Найти( + ПользовательИБ.УникальныйИдентификатор, + "ИдентификаторПользователяИБ") <> Неопределено Тогда + + Продолжить; + КонецЕсли; + + ПолноеИмяПользователя = ВРег(СокрЛП(Лев(ПользовательИБ.ПолноеИмя, ДлинаПолногоИмени))); + + ОписаниеПользователя = СвободныеПользователи.Найти(ПолноеИмяПользователя, "Наименование"); + Если ОписаниеПользователя <> Неопределено Тогда + + ОбъектПользователь = ОписаниеПользователя.Ссылка.ПолучитьОбъект(); + ОбъектПользователь.ОбменДанными.Загрузка = Истина; + ОбъектПользователь.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; + ОбъектПользователь.Записать(); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Вызывается при обновлении конфигурации на версию 1.0.5.15 +// Возможен вызов с любой версии начиная с 1.0.5.15. +// +Процедура ЗаполнениеРегистраСоставыГруппПользователей() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбновитьСоставыГруппПользователей( + Справочники.ГруппыПользователей.ВсеПользователи); + +КонецПроцедуры + +// Вызывается при переходе на версию конфигурации 1.0.6.5 +// для обновления записей регистра сведений СоставыГруппПользователей. +// +Процедура ЗаполнитьСоставыГруппВнешнихПользователей() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ОбновитьСоставыГруппВнешнихПользователей( + Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + +КонецПроцедуры + +// Вызывается при переходе на версию конфигурации 1.0.6.5 +// создает пользователей ИБ из данных Справочник.ВнешниеПользователи +// +Процедура ДляВнешнихПользователейСоздатьПользователейИБ() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Выборка = Справочники.ВнешниеПользователи.Выбрать(); + + Пока Выборка.Следующий() Цикл + + Если НЕ ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ) И + ЗначениеЗаполнено(Выборка.ОбъектАвторизации) И + ЗначениеЗаполнено(Выборка.Код) Тогда + + ВнешнийПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); + Попытка + ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя(); + ПользовательИБ.Имя = Выборка.Код; + ПользовательИБ.Пароль = Выборка.УдалитьПароль; + ПользовательИБ.ПолноеИмя = Строка(Выборка.ОбъектАвторизации); + ПользовательИБ.Записать(); + ВнешнийПользовательОбъект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор; + ВнешнийПользовательОбъект.Записать(); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Внешние пользователи.Ошибка при обновлении информационной базы'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru= 'При создании пользователя информационной базы с именем ""%1"" для внешнего пользователя ""%2"" произошла ошибка: + |%3'"), + Выборка.Код, + Выборка.Наименование, + ОписаниеОшибки()), + РежимТранзакцииЗаписиЖурналаРегистрации.Независимая); + КонецПопытки; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Вызывается при переходе на версию конфигурации 2.1.1.10 +Процедура ЗаполнитьФлажокСлужебный() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Заполнение для пользователя <Не указан> и + // для неразделенных пользователей. + + НеуказанныеПользователи = Новый Массив; + НеуказанныеПользователи.Добавить(СвойстваНеуказанногоПользователя().Ссылка); + НеуказанныеПользователи.Добавить(СвойстваНеуказанногоПользователя().СтандартнаяСсылка); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("НеуказанныеПользователи", НеуказанныеПользователи); + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | Пользователи.Ссылка В(&НеуказанныеПользователи) + | И НЕ Пользователи.Служебный + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | Пользователи.Ссылка + |ИЗ + | Справочник.Пользователи КАК Пользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.НеразделенныеПользователи КАК НеразделенныеПользователи + | ПО Пользователи.ИдентификаторПользователяИБ = НеразделенныеПользователи.ИдентификаторПользователяИБ + |ГДЕ + | НЕ Пользователи.Служебный"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + ПользовательОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ПользовательОбъект.ОбменДанными.Загрузка = Истина; + ПользовательОбъект.Служебный = Истина; + ПользовательОбъект.Записать(); + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиСобытия/ПользователиСобытия.mdo b/SSL/src/CommonModules/ПользователиСлужебный/ПользователиСлужебный.mdo similarity index 71% rename from SSL/src/CommonModules/ПользователиСобытия/ПользователиСобытия.mdo rename to SSL/src/CommonModules/ПользователиСлужебный/ПользователиСлужебный.mdo index f1fd3ab9a..fd79e3038 100644 --- a/SSL/src/CommonModules/ПользователиСобытия/ПользователиСобытия.mdo +++ b/SSL/src/CommonModules/ПользователиСлужебный/ПользователиСлужебный.mdo @@ -1,12 +1,11 @@ - ПользователиСобытия + ПользователиСлужебный ru - Пользователи события + Пользователи служебный true true true - true diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl new file mode 100644 index 000000000..a816e6d5d --- /dev/null +++ b/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,34 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +Функция ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(ВернутьТекстОшибки = Ложь) Экспорт + + Возврат ПользователиСлужебный.ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ( + ВернутьТекстОшибки); + +КонецФункции + +Процедура СоздатьАдминистратораСистемы() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ЗначениеЗаполнено( + ПользователиСлужебный.ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(Истина)) Тогда + + Администратор = ПользователиИнформационнойБазы.СоздатьПользователя(); + Администратор.Имя = НСтр("ru = 'Администратор'"); + Администратор.ПолноеИмя = Администратор.Имя; + Администратор.АутентификацияСтандартная = Истина; + Администратор.ПоказыватьВСпискеВыбора = Истина; + Администратор.Роли.Добавить(Метаданные.Роли.ПолныеПрава); + Администратор.Роли.Добавить(Пользователи.РольАдминистратораСистемы()); + Администратор.Записать(); + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/ПользователиСлужебныйВызовСервера.mdo b/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/ПользователиСлужебныйВызовСервера.mdo new file mode 100644 index 000000000..e24619de9 --- /dev/null +++ b/SSL/src/CommonModules/ПользователиСлужебныйВызовСервера/ПользователиСлужебныйВызовСервера.mdo @@ -0,0 +1,10 @@ + + + ПользователиСлужебныйВызовСервера + + ru + Пользователи служебный вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..a8e5941ea --- /dev/null +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/Module.bsl @@ -0,0 +1,79 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Для работы интерфейса ролей в управляемой форме + +Процедура РазвернутьПодсистемыРолей(Форма, Безусловно = Истина) Экспорт + + Элементы = Форма.Элементы; + + Если НЕ Безусловно + И НЕ Элементы.РолиПоказатьТолькоВыбранныеРоли.Пометка Тогда + + Возврат; + КонецЕсли; + + // Развернуть все. + Для каждого Строка Из Форма.Роли.ПолучитьЭлементы() Цикл + Элементы.Роли.Развернуть(Строка.ПолучитьИдентификатор(), Истина); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ПроверитьАвторизациюПользователя(Отказ = Истина) Экспорт + + ОшибкаАвторизации = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ОшибкаАвторизации; + Если ОшибкаАвторизации = "" Тогда + Возврат; + ИначеЕсли ТипЗнч(ОшибкаАвторизации) = Тип("Структура") Тогда + Если ЗначениеЗаполнено(ОшибкаАвторизации.ДополнительныеПараметрыКомаднойСтроки) Тогда + ПрекратитьРаботуСистемы(Истина, ОшибкаАвторизации.ДополнительныеПараметрыКомаднойСтроки); + Иначе + ПрекратитьРаботуСистемы(Истина); + КонецЕсли; + КонецЕсли; + + Отказ = Истина; + ТекстОшибки = ПользователиСлужебныйВызовСервера.ПроверитьВозможностьЗапускаСПустымСпискомПользователейИБ(Истина); + Если Не ЗначениеЗаполнено(ТекстОшибки) Тогда + Предупреждение(ОшибкаАвторизации); + КонецЕсли; + + ТекстВопроса = + НСтр("ru = 'Запуск с пустым списком пользователей информационной базы невозможен. + |Добавить пользователя Администратор и перезапустить программу? + | + |Пояснение: также можно завершить работу и вручную добавить в список + |пользователей информационной базы учетную запись администратора с двумя ролями + |""Администратор системы"", ""Полные права"" и повторить запуск программы от его имени. + | + |Для перехода к списку пользователей информационной базы необходимо открыть + |Конфигуратор и воспользоваться пунктом меню ""Администрирование - Пользователи"".'"); + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("СоздатьИПерезапустить", НСтр("ru = 'Добавить и перезапустить'")); + Кнопки.Добавить("ЗавершитьРаботу", НСтр("ru = 'Завершить работу'")); + + Ответ = Вопрос( + ТекстВопроса, + Кнопки, + , + "СоздатьИПерезапустить", + НСтр("ru = 'Авторизация пользователя'") ); + + Если Ответ = "СоздатьИПерезапустить" Тогда + ПользователиСлужебныйВызовСервера.СоздатьАдминистратораСистемы(); + ПрекратитьРаботуСистемы(Истина); + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиент/ПользователиСлужебныйКлиент.mdo b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/ПользователиСлужебныйКлиент.mdo new file mode 100644 index 000000000..627777879 --- /dev/null +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиент/ПользователиСлужебныйКлиент.mdo @@ -0,0 +1,10 @@ + + + ПользователиСлужебныйКлиент + + ru + Пользователи служебный клиент + + true + true + diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl new file mode 100644 index 000000000..519fe3490 --- /dev/null +++ b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/Module.bsl @@ -0,0 +1,51 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Пользователи". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ПолучитьКраткоеИмяПользователяИБ(Знач ПолноеИмя) Экспорт + + Разделители = Новый Массив; + Разделители.Добавить(" "); + Разделители.Добавить("."); + + КраткоеИмя = ""; + Для Счетчик = 1 По 3 Цикл + + Если Счетчик <> 1 Тогда + КраткоеИмя = КраткоеИмя + ВРег(Лев(ПолноеИмя, 1)); + КонецЕсли; + + ПозицияРазделителя = 0; + Для каждого Разделитель Из Разделители Цикл + ПозицияТекущегоРазделителя = Найти(ПолноеИмя, Разделитель); + Если ПозицияТекущегоРазделителя > 0 + И ( ПозицияРазделителя = 0 + ИЛИ ПозицияРазделителя > ПозицияТекущегоРазделителя ) Тогда + ПозицияРазделителя = ПозицияТекущегоРазделителя; + КонецЕсли; + КонецЦикла; + + Если ПозицияРазделителя = 0 Тогда + Если Счетчик = 1 Тогда + КраткоеИмя = ПолноеИмя; + КонецЕсли; + Прервать; + КонецЕсли; + + Если Счетчик = 1 Тогда + КраткоеИмя = Лев(ПолноеИмя, ПозицияРазделителя - 1); + КонецЕсли; + + ПолноеИмя = Прав(ПолноеИмя, СтрДлина(ПолноеИмя) - ПозицияРазделителя); + Пока Разделители.Найти(Лев(ПолноеИмя, 1)) <> Неопределено Цикл + ПолноеИмя = Сред(ПолноеИмя, 2); + КонецЦикла; + КонецЦикла; + + Возврат КраткоеИмя; + +КонецФункции diff --git a/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/ПользователиСлужебныйКлиентСервер.mdo b/SSL/src/CommonModules/ПользователиСлужебныйКлиентСервер/ПользователиСлужебныйКлиентСервер.mdo new file mode 100644 index 000000000..22b3bca3b --- /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 similarity index 87% rename from SSL/src/CommonModules/ПользователиСерверПовтИсп/Module.bsl rename to SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl index 716cce4b5..dfa426c66 100644 --- a/SSL/src/CommonModules/ПользователиСерверПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/Module.bsl @@ -27,6 +27,42 @@ КонецФункции +// Возвращает таблицу значений имен ролей доступных для типа пользователя. +// +// Параметры: +// +// Возвращаемое значение: +// ТаблицаЗначений с колонками: +// Имя - Строка. +// +Функция ДоступныеРоли(Знач ТипПользователя = Неопределено) Экспорт + + Если ТипПользователя = Неопределено Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ТипПользователя = Перечисления.ТипыПользователей.ПользовательОбластиДанных; + Иначе + ТипПользователя = Перечисления.ТипыПользователей.ПользовательЛокальногоРешения; + КонецЕсли; + КонецЕсли; + + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРолиПоТипуПользователя(ТипПользователя); + + Таблица = Новый ТаблицаЗначений; + Таблица.Колонки.Добавить("Имя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(1000))); + + Для каждого Роль Из Метаданные.Роли Цикл + Если НедоступныеРоли.Получить(Роль) <> Неопределено + ИЛИ ВРег(Лев(Роль.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") Тогда + + Продолжить; + КонецЕсли; + Таблица.Добавить().Имя = Роль.Имя; + КонецЦикла; + + Возврат Таблица; + +КонецФункции + // Возвращает таблицу значений с колонками Роль и РольСиноним, // которая формируется из метаданных. // @@ -84,7 +120,7 @@ ЗаполнитьПодсистемыИРоли(Дерево.Строки, , ТипПользователя); КонецЕсли; - НедоступныеРоли = ПользователиСерверПовтИсп.НедоступныеРолиПоТипуПользователя(ТипПользователя); + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРолиПоТипуПользователя(ТипПользователя); // Добавление ненайденных ролей Для каждого Роль Из Метаданные.Роли Цикл @@ -115,8 +151,10 @@ Результат = Новый Массив; Результат.Добавить("Администрирование"); Результат.Добавить("АдминистрированиеДанных"); + ИначеЕсли ТипПользователя = Перечисления.ТипыПользователей.ПользовательЛокальногоРешения Тогда Результат = Новый Массив; + ИначеЕсли ТипПользователя = Перечисления.ТипыПользователей.ПользовательОбластиДанных Тогда Результат = Новый Массив; Результат.Добавить("Администрирование"); @@ -156,7 +194,7 @@ Функция ДоступноИзменениеОбщихДанных(Знач ИмяРоли) Экспорт - Возврат ПользователиСерверПовтИсп.ОбщиеДанныеДоступныеДляИзменения(ИмяРоли).Количество() > 0; + Возврат ПользователиСлужебныйПовтИсп.ОбщиеДанныеДоступныеДляИзменения(ИмяРоли).Количество() > 0; КонецФункции @@ -235,11 +273,10 @@ УстановитьПривилегированныйРежим(Истина); Результат = Новый Соответствие; - НедоступныеПрава = НедоступныеПраваПоТипуПользователя(ТипПользователя); - + ПроверятьОбщиеДанные = НЕ РазрешеноИзменениеОбщихДанных(ТипПользователя); - + Для каждого Роль Из Метаданные.Роли Цикл НайденыНедоступныеПрава = Ложь; Для каждого Право Из НедоступныеПрава Цикл @@ -267,14 +304,11 @@ Функция АутентификацияOpenIDНастраивается() Экспорт УстановитьПривилегированныйРежим(Истина); - Попытка - АутентификацияOpenID = ПользователиИнформационнойБазы.ТекущийПользователь().АутентификацияOpenID; - ИтогПроверки = Истина; - Исключение - ИтогПроверки = Ложь; - КонецПопытки; - Возврат ИтогПроверки; + СистемнаяИнформация = Новый СистемнаяИнформация; + + Возврат ОбщегоНазначенияКлиентСервер.СравнитьВерсии( + СистемнаяИнформация.ВерсияПриложения, "8.2.16.0") >= 0; КонецФункции @@ -283,8 +317,8 @@ Процедура ЗаполнитьПодсистемыИРоли(КоллекцияСтрокДерева, Подсистемы = Неопределено, ТипПользователя) - НедоступныеРоли = - ПользователиСерверПовтИсп.НедоступныеРолиПоТипуПользователя(ТипПользователя); + НедоступныеРоли = + ПользователиСлужебныйПовтИсп.НедоступныеРолиПоТипуПользователя(ТипПользователя); Если Подсистемы = Неопределено Тогда Подсистемы = Метаданные.Подсистемы; diff --git a/SSL/src/CommonModules/ПользователиСерверПовтИсп/ПользователиСерверПовтИсп.mdo b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/ПользователиСлужебныйПовтИсп.mdo similarity index 54% rename from SSL/src/CommonModules/ПользователиСерверПовтИсп/ПользователиСерверПовтИсп.mdo rename to SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/ПользователиСлужебныйПовтИсп.mdo index 26b2288dc..b7fd5e8a7 100644 --- a/SSL/src/CommonModules/ПользователиСерверПовтИсп/ПользователиСерверПовтИсп.mdo +++ b/SSL/src/CommonModules/ПользователиСлужебныйПовтИсп/ПользователиСлужебныйПовтИсп.mdo @@ -1,11 +1,12 @@ - ПользователиСерверПовтИсп + ПользователиСлужебныйПовтИсп ru - Пользователи сервер повт исп + Пользователи служебный повт исп true - true + true + true DuringSession diff --git a/SSL/src/CommonModules/ПользователиСобытия/Module.bsl b/SSL/src/CommonModules/ПользователиСобытия/Module.bsl deleted file mode 100644 index 88352942d..000000000 --- a/SSL/src/CommonModules/ПользователиСобытия/Module.bsl +++ /dev/null @@ -1,69 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Пользователи". -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры используемые при обмене данными - -// Переопределяет стандартное поведение при выгрузке данных. -// Реквизит ИдентификаторПользователяИБ не переносится. -// -Процедура ПриОтправкеДанных(ЭлементДанных, ОтправкаЭлемента) Экспорт - - Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить - ИЛИ ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Пользователи") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда - ЭлементДанных.ИдентификаторПользователяИБ = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000"); - КонецЕсли; - -КонецПроцедуры - -// Переопределяет стандартное поведение при загрузке данных. -// Реквизит ИдентификаторПользователяИБ не переносится, т.к. всегда -// связан с пользователем текущей базы или не связан с пользователем. -// -Процедура ПриПолученииДанных(ЭлементДанных) Экспорт - - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Пользователи") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВнешниеПользователи") Тогда - ЭлементДанных.ИдентификаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ЭлементДанных.Ссылка, "ИдентификаторПользователяИБ"); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события - -// Обработчик подписки ОбновитьПредставлениеВнешнегоПользователя на событие ПриЗаписи -// вызывает обновление представления внешнего пользователя при изменении -// представления его объекта авторизации. -// -// В состав подписки следует включить типы объектов авторизации: -// Метаданные.Справочники.ВнешниеПользователи.Реквизиты.ОбъектАвторизации.Тип. -// Например: Справочник.ФизическиеЛица, Справочник.Контрагенты -// -Процедура ОбновитьПредставлениеВнешнегоПользователя(Знач Объект, Отказ) Экспорт - - Если Объект.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если ТипЗнч(Объект.Ссылка) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда - Возврат; - КонецЕсли; - - ВнешниеПользователи.ОбновитьПредставлениеВнешнегоПользователя(Объект.Ссылка); - -КонецПроцедуры - diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl index ac861dfd9..f19809130 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанные/Module.bsl @@ -6,6 +6,390 @@ /////////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Получить дескрипторы данных по заданным условиям +// +// Параметры +// ВидДанных - Строка. +// Фильтр - Коллекция. Элементы должны содержать поля Код (строка) и Значение (строка). +// +// Возвращаемое значение +// ОбъектXDTO типа ArrayOfDescriptor +// +Функция ДескрипторыПоставляемыхДанныхИзМенеджера(Знач ВидДанных, Знач Фильтр = Неопределено) Экспорт + Перем Прокси, Условия, ТипФильтра; + Прокси = НовыйПроксиНаМенеджереСервиса(); + + Если Фильтр <> Неопределено Тогда + + ТипФильтра = Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/SuppliedData", + "ArrayOfProperty"); + Условия = Прокси.ФабрикаXDTO.Создать(ТипФильтра); + Для каждого СтрокаФльтра Из Фильтр Цикл + Условие = Условия.Property.Добавить(); + Условие.Code = СтрокаФльтра.Код; + Условие.Value = СтрокаФльтра.Значение; + КонецЦикла; + КонецЕсли; + + //Конвертируем в стандартный тип + Результат = Прокси.GetData(ВидДанных, Условия); + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + Прокси.ФабрикаXDTO.ЗаписатьXML(Запись, Результат, , , , НазначениеТипаXML.Явное); + СериализованныйРезультат = Запись.Закрыть(); + + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(СериализованныйРезультат); + Результат = ФабрикаXDTO.ПрочитатьXML(Чтение); + Чтение.Закрыть(); + Возврат Результат; + +КонецФункции + +// Инициирует обработку данных +// +// Может использоваться в связке с ДескрипторыПоставляемыхДанныхИзМенеджера для +// ручной инициации процесса обработки данных. После вызова метода система поведет +// себя так, как будто она только что получила уведомление о доступности новых данных, +// с указанным дескриптором – будет вызван ДоступныНовыеДанные, а затем, при необходимости, +// ОбработатьНовыеДанные для соответствующих обработчиков. +// +// Параметры: +// Дескриптор - ОбъектXDTO Descriptor. +// +Процедура ЗагрузитьИОбработатьДанные(Знач Дескриптор) Экспорт + + ОбработчикКаналовСообщенийПоставляемыхДанных.ОбработатьНовыйДескриптор(Дескриптор); + +КонецПроцедуры + +// Помещает данные в справочник ПоставляемыеДанные +// +// Данные сохраняются либо в том на диске, либо в поле таблицы ПоставляемыеДанные в +// зависимости от константы ХранитьФайлыВТомахНаДиске и наличия свободных томов. Данные +// могут быть позднее извлечены при помощи поиска по реквизитам, либо путем указания +// уникального идентификатора, который передавался в поле Дескриптор.FileGUID. Если в базе +// уже есть данные с тем же видом данных и набором ключевых характеристик – новые данные +// замещают старые. При это используется обновление существующего элемента справочника, а +// не удаление и создание нового. +// +// Параметры: +// Дескриптор - ОбъектXDTO Descriptor или структура с полями +// "ВидДанных, ДатаДобавления, ИдентификаторФайла, Характеристики", +// где Характеристики - массив структур с полями "Код, Значение, Ключевая" +// ПутьКФайлу - строка. Полное имя извлеченного файла. +// +Процедура СохранитьПоставляемыеДанныеВКэш(Знач Дескриптор, Знач ПутьКФайлу) Экспорт + + //Приводим дескриптор к каноническому виду + Если ТипЗнч(Дескриптор) = Тип("Структура") Тогда + НаАнглийском = Новый Структура("DataType, CreationDate, FileGUID, Properties", + Дескриптор.ВидДанных, Дескриптор.ДатаДобавления, Дескриптор.ИдентификаторФайла, + Новый Структура("Property", Новый Массив)); + Если ТипЗнч(Дескриптор.Характеристики) = Тип("Массив") Тогда + Для каждого Характеристика Из Дескриптор.Характеристики Цикл + НаАнглийском.Properties.Property.Добавить(Новый Структура("Code, Value, IsKey", + Характеристика.Код, Характеристика.Значение, Характеристика.Ключевая)); + КонецЦикла; + КонецЕсли; + Дескриптор = НаАнглийском; + КонецЕсли; + + Фильтр = Новый Массив; + Для каждого Характеристика Из Дескриптор.Properties.Property Цикл + Если Характеристика.IsKey Тогда + Фильтр.Добавить(Новый Структура("Код, Значение", Характеристика.Code, Характеристика.Value)); + КонецЕсли; + КонецЦикла; + + Запрос = ЗапросДанныхПоИменам(Дескриптор.DataType, Фильтр); + Выборка = Запрос.Выполнить().Выбрать(); + + Данные = Неопределено; + ПутьКСтаромуФайлу = Неопределено; + + Пока Выборка.Следующий() Цикл + Если Данные = Неопределено Тогда + Данные = Выборка.ПоставляемыеДанные.ПолучитьОбъект(); + Если Данные.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ПутьКСтаромуФайлу = ФайловыеФункцииСлужебный.ПолныйПутьТома(Данные.Том) + Данные.ПутьКФайлу; + КонецЕсли; + Иначе + УдалитьПоставляемыеДанныеИзКэша(Выборка.ПоставляемыеДанные); + КонецЕсли; + КонецЦикла; + + Если Данные = Неопределено Тогда + Данные = Справочники.ПоставляемыеДанные.СоздатьЭлемент(); + КонецЕсли; + + Данные.ВидДанных = Дескриптор.DataType; + Данные.ДатаДобавления = Дескриптор.CreationDate; + Данные.ИдентификаторФайла = Дескриптор.FileGUID; + Данные.ХарактеристикиДанных.Очистить(); + Для каждого Property Из Дескриптор.Properties.Property Цикл + Характеристика = Данные.ХарактеристикиДанных.Добавить(); + Характеристика.Характеристика = Property.Code; + Характеристика.Значение = Property.Value; + КонецЦикла; + Данные.ТипХраненияФайла = ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов(); + + Если Данные.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + Данные.ХранимыйФайл = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПутьКФайлу)); + Данные.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + Данные.ПутьКФайлу = ""; + Иначе + // Добавление в один из томов (где есть свободное место). + ФайловыеФункцииСлужебный.ДобавитьНаДиск( + ПутьКФайлу, + Данные.ПутьКФайлу, + Данные.Том, + Данные.ДатаДобавления, + "", + Строка(Данные.ИдентификаторФайла), + ""); + Данные.ХранимыйФайл = Неопределено; + КонецЕсли; + + Данные.Записать(); + Если ПутьКСтаромуФайлу <> Неопределено Тогда + УдалитьФайлы(ПутьКСтаромуФайлу); + КонецЕсли; + +КонецПроцедуры + +// Удаляет файл из кеша. +// +// Параметры: +// СсылкаИлиИдентификатор - СправочникСсылка.ПоставляемыеДанные или УникальныйИдентификатор +// +Процедура УдалитьПоставляемыеДанныеИзКэша(Знач СсылкаИлиИдентификатор) Экспорт + Перем Данные, ПолныйПуть; + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(СсылкаИлиИдентификатор) = Тип("УникальныйИдентификатор") Тогда + СсылкаИлиИдентификатор = Справочники.ПоставляемыеДанные.НайтиПоРеквизиту("ИдентификаторФайла", СсылкаИлиИдентификатор); + Если СсылкаИлиИдентификатор.Пустая() Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Данные = СсылкаИлиИдентификатор.ПолучитьОбъект(); + Если Данные.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(Данные.Том) + Данные.ПутьКФайлу; + УдалитьФайлы(ПолныйПуть); + КонецЕсли; + + Удаление = Новый УдалениеОбъекта(СсылкаИлиИдентификатор); + Удаление.ОбменДанными.Загрузка = Истина; + Удаление.Записать(); + +КонецПроцедуры + +// Возвращает двоичные данные присоединенного файла. +// +// Параметры: +// СсылкаИлиИдентификатор - СправочникСсылка.ПоставляемыеДанные +// или УникальныйИдентификатор - идентификатор файла +// +// Возвращаемое значение: +// ДвоичныеДанные. +// +Функция ПоставляемыеДанныеИзКэша(Знач СсылкаИлиИдентификатор) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(СсылкаИлиИдентификатор) = Тип("УникальныйИдентификатор") Тогда + СсылкаИлиИдентификатор = Справочники.ПоставляемыеДанные.НайтиПоРеквизиту("ИдентификаторФайла", СсылкаИлиИдентификатор); + Если СсылкаИлиИдентификатор.Пустая() Тогда + Возврат Неопределено; + КонецЕсли; + КонецЕсли; + + ФайлОбъект = СсылкаИлиИдентификатор.ПолучитьОбъект(); + Если ФайлОбъект = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + Возврат ФайлОбъект.ХранимыйФайл.Получить(); + Иначе + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; + + Попытка + Возврат Новый ДвоичныеДанные(ПолныйПуть) + Исключение + // Запись в журнал регистрации. + СообщениеОбОшибке = ТекстОшибкиПриПолученииФайла(ИнформацияОбОшибке(), СсылкаИлиИдентификатор); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Поставляемые данные.Получение файла из тома'"), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники.ПоставляемыеДанные, + СсылкаИлиИдентификатор, + СообщениеОбОшибке); + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка открытия файла: файл не найден на сервере. + |Обратитесь к администратору. + | + |Файл: ""%1.%2"".'"), + ФайлОбъект.Наименование, + ФайлОбъект.Расширение); + КонецПопытки; + КонецЕсли; + +КонецФункции + +// Проверяет наличие данных с указанными ключевыми характеристиками в кеше. +// +// Параметры: +// Дескриптор - ОбъектXDTO Descriptor. +// +// Возвращаемое значение: +// Булево. +// +Функция ЕстьВКеше(Знач Дескриптор) Экспорт + + Фильтр = Новый Массив; + Для каждого Характеристика Из Дескриптор.Properties.Property Цикл + Если Характеристика.IsKey Тогда + Фильтр.Добавить(Новый Структура("Код, Значение", Характеристика.Code, Характеристика.Value)); + КонецЕсли; + КонецЦикла; + + Запрос = ЗапросДанныхПоИменам(Дескриптор.DataType, Фильтр); + Возврат Запрос.Выполнить().Выгрузить().Количество() > 0; + + +КонецФункции + +// Возвращает массив ссылок на данные, удовлетворяющие заданным условиям +// +// Параметры +// ВидДанных - Строка. +// Фильтр - Коллекция. Элементы должны содержать поля Код (строка) и Значение (строка). +// +// Возвращаемое значение +// Массив +// +Функция СсылкиПоставляемыхДанныхИзКэша(Знач ВидДанных, Знач Фильтр = Неопределено) Экспорт + + Запрос = ЗапросДанныхПоИменам(ВидДанных, Фильтр); + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ПоставляемыеДанные"); + +КонецФункции + +// Получить данные по заданным условиям +// +// Параметры +// ВидДанных - Строка. +// Фильтр - Коллекция. Элементы должны содержать поля Код (строка) и Значение (строка). +// ВВидеXDTO - булево. В каком виде возвращать значения +// +// Возвращаемое значение +// ОбъектXDTO типа ArrayOfDescriptor или +// Массив структур с полями "ВидДанных, ДатаДобавления, ИдентификаторФайла, Характеристики", +// где Характеристики - массив структур с полями "Код, Значение, Ключевая" +// Для получения самого файла необходимо вызвать ПолучитьПоставляемыеДанныеИзКэша +// +// +Функция ДескрипторыПоставляемыхДанныхИзКэша(Знач ВидДанных, Знач Фильтр = Неопределено, Знач ВВидеXDTO = Ложь) Экспорт + Перем Запрос, РезультатЗапроса, Выборка, Дескрипторы, Результат; + + Запрос = ЗапросДанныхПоИменам(ВидДанных, Фильтр); + + Запрос.Текст = "ВЫБРАТЬ + | СправочникПоставляемыеДанные.ИдентификаторФайла, + | СправочникПоставляемыеДанные.ДатаДобавления, + | СправочникПоставляемыеДанные.ВидДанных КАК КодВидаДанных, + | СправочникПоставляемыеДанные.ХарактеристикиДанных.( + | Значение, + | Характеристика) + |ИЗ + | Справочник.ПоставляемыеДанные КАК СправочникПоставляемыеДанные + | ГДЕ СправочникПоставляемыеДанные.Ссылка В (" + Запрос.Текст + ")"; + + РезультатЗапроса = Запрос.Выполнить(); + Выборка = РезультатЗапроса.Выбрать(); + + Если ВВидеXDTO Тогда + Результат = СоздатьОбъект(ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/SuppliedData", + "ArrayOfDescriptor")); + Дескрипторы = Результат.Descriptor; + Иначе + Результат = Новый Массив(); + Дескрипторы = Результат; + КонецЕсли; + + Пока Выборка.Следующий() Цикл + Сообщение = ?(ВВидеXDTO, ПолучитьXDTOДескриптор(Выборка), ПолучитьДескриптор(Выборка)); + Дескрипторы.Добавить(Сообщение); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает список областей данных, в которые еще не были скопированы поставляемые данные +// +// В случае первого вызова фукнции возвращается полный набор доступных областей +// При последующем вызове, при восстановлении после сбоя, будут возвращены только +// необработанные области. После копированя данных в область следует вызвать УдалитьНеобработаннуюОбласть +// +// Параметры +// ИдентификаторФайла - УникальныйИдентификатор файла поставляемых данных +// КодОбработчика - Строка +// +Функция ОбластиТребующиеОбработки(Знач ИдентификаторФайла, Знач КодОбработчика) Экспорт + + НаборЗаписей = РегистрыСведений.ОбластиТребующиеОбработкиПоставляемыхДанных.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИдентификаторФайла.Установить(ИдентификаторФайла); + НаборЗаписей.Отбор.КодОбработчика.Установить(КодОбработчика); + НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() = 0 Тогда + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | &ИдентификаторФайла КАК ИдентификаторФайла, + | &КодОбработчика КАК КодОбработчика, + | ОбластиДанных.ОбластьДанных + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных"; + Запрос.УстановитьПараметр("ИдентификаторФайла", ИдентификаторФайла); + Запрос.УстановитьПараметр("КодОбработчика", КодОбработчика); + НаборЗаписей.Загрузить(Запрос.Выполнить().Выгрузить()); + + Если КодОбработчика = "КурсыВалютЗаДень" Тогда + ОбщиеКурсы = НаборЗаписей.Добавить(); + ОбщиеКурсы.ИдентификаторФайла = ИдентификаторФайла; + ОбщиеКурсы.КодОбработчика = КодОбработчика; + ОбщиеКурсы.ОбластьДанных = -1; + КонецЕсли; + + НаборЗаписей.Записать(); + КонецЕсли; + Возврат НаборЗаписей.ВыгрузитьКолонку("ОбластьДанных"); +КонецФункции + +// Удаляет область из списка необработанных +// +// Параметры +// ИдентификаторФайла - УникальныйИдентификатор файла поставляемых данных +// КодОбработчика - Строка +// ОбластьДанных - Число, идентификатор обработанной области +// +Процедура ОбластьОбработана(Знач ИдентификаторФайла, Знач КодОбработчика, Знач ОбластьДанных) Экспорт + + НаборЗаписей = РегистрыСведений.ОбластиТребующиеОбработкиПоставляемыхДанных.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ИдентификаторФайла.Установить(ИдентификаторФайла); + Если ОбластьДанных <> Неопределено Тогда + НаборЗаписей.Отбор.ОбластьДанных.Установить(ОбластьДанных); + КонецЕсли; + НаборЗаписей.Отбор.КодОбработчика.Установить(КодОбработчика); + НаборЗаписей.Записать(); + +КонецПроцедуры + // Функция возвращает прокси web-сервиса для обновления общих поставляемых данных // // Возвращаемое значение: @@ -24,8 +408,8 @@ ИмяПользователя = Константы.ИмяСлужебногоПользователяСервисаПоставляемыхДанных.Получить(); ПарольПользователя = Константы.ПарольСлужебногоПользователяСервисаПоставляемыхДанных.Получить(); - Прокси = ОбщегоНазначенияПовтИсп.ПолучитьWSПрокси(АдресСервиса, "http://www.1c.ru/supplieddata", - "SuppliedData", , ИмяПользователя, ПарольПользователя); + Прокси = ОбщегоНазначенияПовтИсп.WSПрокси(АдресСервиса, "http://www.1c.ru/supplieddata", + "SuppliedData", , ИмяПользователя, ПарольПользователя, 1200); Возврат Прокси; @@ -324,7 +708,16 @@ Возврат; КонецЕсли; - УстановитьПривилегированныйРежим(Истина); + УдалитьСвязьПоставляемыхДанных(Источник.Ссылка); + +КонецПроцедуры + +// Удаляет связь с элеметном общего справочника +// +// Параметры: +// ЭлементРазделенныхДанных, СправочникСсылка - ссылка на элемент разделенного справочника +// +Процедура УдалитьСвязьПоставляемыхДанных(Знач ЭлементРазделенныхДанных) Экспорт Запрос = Новый Запрос; Запрос.Текст = @@ -336,22 +729,148 @@ | СвязиПоставляемыхДанных.ОбластьДанных = &ОбластьДанных | И СвязиПоставляемыхДанных.ЭлементРазделенныхДанных = &ЭлементРазделенныхДанных"; Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - Запрос.УстановитьПараметр("ЭлементРазделенныхДанных", Источник.Ссылка); + Запрос.УстановитьПараметр("ЭлементРазделенныхДанных", ЭлементРазделенныхДанных); + УстановитьПривилегированныйРежим(Истина); Результат = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); Если Не Результат.Пустой() Тогда Менеджер = РегистрыСведений.СвязиПоставляемыхДанных.СоздатьМенеджерЗаписи(); Менеджер.ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); Менеджер.ЭлементОбщихДанных = Результат.Выгрузить()[0].Ссылка; - Менеджер.ЭлементРазделенныхДанных = Источник.Ссылка; + Менеджер.ЭлементРазделенныхДанных = ЭлементРазделенныхДанных; Менеджер.Удалить(); КонецЕсли; КонецПроцедуры +// Связывает общие и разделенные данные. Если в таблицах связей уже присутствует +// +// Параметры +// Связи - коллекция со следующими полями: +// ЭлементРазделенныхДанных (СправочникСсылка) +// ЭлементОбщихДанных (СправочникСсылка, Строка) +// ТипОбщихДанных (Строка) +// +// СкопироватьДанныеСейчас, булево - Истина - функиця после создания связей переносит +// данные из общего классификатора в разделенный, Ложь - данный перенос будет +// осуществляться позднее, в фоновом задании +// +Процедура СвязатьСКлассификатором(Знач Связи, Знач СкопироватьДанныеСейчас = Ложь) Экспорт + + Если Связи.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Ключ = РегистрыСведений.СвязиПоставляемыхДанных.СоздатьКлючЗаписи( + Новый Структура("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса())); + + ЗаблокироватьДанныеДляРедактирования(Ключ); + + НачатьТранзакцию(); + Попытка + + Запрос = Новый Запрос; + УсловияСвязи = ""; + Индекс = 1; + Для каждого Связь Из Связи Цикл + Если УсловияСвязи <> "" Тогда + УсловияСвязи = УсловияСвязи + " Или "; + КонецЕсли; + УсловияСвязи = УсловияСвязи + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "((ТипОбщихДанных = &ТипОбщихДанных%1 И ЭлементОбщихДанных = &ЭлементОбщихДанных%1) + | Или ЭлементРазделенныхДанных = &ЭлементРазделенныхДанных%1)", Формат(Индекс,"ЧГ=0")); + Запрос.УстановитьПараметр("ТипОбщихДанных" + Формат(Индекс,"ЧГ=0"), Связь.ТипОбщихДанных); + Запрос.УстановитьПараметр("ЭлементОбщихДанных" + Формат(Индекс,"ЧГ=0"), Связь.ЭлементОбщихДанных); + Запрос.УстановитьПараметр("ЭлементРазделенныхДанных" + Формат(Индекс,"ЧГ=0"), Связь.ЭлементРазделенныхДанных); + + Индекс = Индекс + 1; + КонецЦикла; + + Запрос.Текст = + "ВЫБРАТЬ + | СвязиПоставляемыхДанных.ТипОбщихДанных, + | СвязиПоставляемыхДанных.ЭлементОбщихДанных, + | СвязиПоставляемыхДанных.ЭлементРазделенныхДанных + |ИЗ + | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных + |ГДЕ + | СвязиПоставляемыхДанных.ОбластьДанных = &ОбластьДанных + | И (" + УсловияСвязи + ")"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + + УстановитьПривилегированныйРежим(Истина); + ТаблицаСоответствия = Запрос.Выполнить().Выгрузить(); + + //Стираем старые связи, если есть + Для каждого СтрокаСоответствия Из ТаблицаСоответствия Цикл + Менеджер = РегистрыСведений.СвязиПоставляемыхДанных.СоздатьМенеджерЗаписи(); + Менеджер.ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Менеджер.ТипОбщихДанных = СтрокаСоответствия.ТипОбщихДанных; + Менеджер.ЭлементОбщихДанных = СтрокаСоответствия.ЭлементОбщихДанных; + Менеджер.ЭлементРазделенныхДанных = СтрокаСоответствия.ЭлементРазделенныхДанных; + Менеджер.Удалить(); + КонецЦикла; + УстановитьПривилегированныйРежим(Ложь); + + //Добавляем новые связи + Для Каждого Связь Из Связи Цикл + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.СвязиПоставляемыхДанных.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + МенеджерЗаписи.ТипОбщихДанных = Связь.ТипОбщихДанных; + МенеджерЗаписи.ЭлементОбщихДанных = Связь.ЭлементОбщихДанных; + МенеджерЗаписи.ЭлементРазделенныхДанных = Связь.ЭлементРазделенныхДанных; + МенеджерЗаписи.РучноеИзменение = Ложь; + МенеджерЗаписи.Записать(); + + Если ТипЗнч(Связь.ЭлементОбщихДанных) <> Тип("Строка") Тогда + ПланыОбмена.ЗарегистрироватьИзменения(ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных( + ОбщегоНазначения.ЗначениеРазделителяСеанса()), Связь.ЭлементОбщихДанных); + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + + СтандартныеПодсистемыПереопределяемый.ПриПодбореПоставляемыхДанныхВОбласть(Связь.ЭлементОбщихДанных, Связь.ТипОбщихДанных); + ПоставляемыеДанныеПереопределяемый.ПриПодбореПоставляемыхДанныхВОбласть(Связь.ЭлементОбщихДанных, Связь.ТипОбщихДанных); + + КонецЦикла; + + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Подбор из классификатора'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + + РазблокироватьДанныеДляРедактирования(Ключ); + + УстановитьПривилегированныйРежим(Истина); + Если СкопироватьДанныеСейчас Тогда + ОбновитьПоставляемыеДанные(ОбщегоНазначения.ЗначениеРазделителяСеанса(), 0); + Иначе + Если ДобавитьОбластьДанныхВСписокУзлов(ОбщегоНазначения.ЗначениеРазделителяСеанса(), 0) Тогда + Менеджер = РегистрыСведений.ОбластиДляОбновленияПоставляемыхДанных.СоздатьМенеджерЗаписи(); + Менеджер.ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + Менеджер.НомерСообщения = 0; + Менеджер.Записать(); + КонецЕсли; + КонецЕсли; + УстановитьПривилегированныйРежим(Ложь); + +КонецПроцедуры + // Процедура осуществляет копирование общих данных в разделенные // +// Параметры: +// Ссылки, массив СправочникСсылка - набор общих данных, на основе которых нужно +// сформировать разделенные данные в текущей области данных +// Процедура ПодобратьИзКлассификатора(Знач Ссылки, Знач ИгнорироватьРучноеИзменение = Ложь) Экспорт Если Ссылки.Количество() = 0 Тогда @@ -553,9 +1072,9 @@ // Возвращаемое значение: // СправочникСсылка - разделенной ссылка, соответствующая общей. // -Функция РазделеннаяСсылкаПоОбщей(ОбщаяСсылка) Экспорт +Функция РазделеннаяСсылкаПоОбщей(ОбщаяСсылка, ОбщийТип = "") Экспорт - Если ОбщаяСсылка.Пустая() Тогда + Если ТипЗнч(ОбщаяСсылка) <> Тип("Строка") И ОбщаяСсылка.Пустая() Тогда Возврат Новый(ПолучитьТипРазделенныхДанныхПоОбщему(ТипЗнч(ОбщаяСсылка))); КонецЕсли; @@ -567,9 +1086,11 @@ | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных |ГДЕ | СвязиПоставляемыхДанных.ОбластьДанных = &ОбластьДанных - | И СвязиПоставляемыхДанных.ЭлементОбщихДанных = &ЭлементОбщихДанных"; + | И СвязиПоставляемыхДанных.ЭлементОбщихДанных = &ЭлементОбщихДанных + | И СвязиПоставляемыхДанных.ТипОбщихДанных = &ТипОбщихДанных"; Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); Запрос.УстановитьПараметр("ЭлементОбщихДанных", ОбщаяСсылка); + Запрос.УстановитьПараметр("ТипОбщихДанных", ОбщийТип); УстановитьПривилегированныйРежим(Истина); Результат = Запрос.Выполнить(); @@ -860,6 +1381,9 @@ // ИмяЭлементаОбщихДанных - имя поля, содержащего ссылку на элемент общих данных // СтрокаКлючей - перечисленные через запятую имена ключей набора записей // +// Например: +// ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхРегистраСведений(СсылкаОбщихДанных, "ПоставляемыеКурсыВалют", "Валюта", "Период,Валюта"); +// Процедура ЗарегистрироватьИзмененияДанныхРегистраСведений(ЭлементОбщихДанных, ИмяРегистраСведений, ИмяЭлементаОбщихДанных, СтрокаКлючей = "") Экспорт УстановитьПривилегированныйРежим(Истина); @@ -882,13 +1406,14 @@ Выборка = Результат.Выбрать(); ИменаКлючей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаКлючей); + ДанныйУзел = ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных( + ОбщегоНазначения.ЗначениеРазделителяСеанса()); Пока Выборка.Следующий() Цикл Для Каждого ИмяКлюча Из ИменаКлючей Цикл НаборЗаписей.Отбор[ИмяКлюча].Установить(Выборка[ИмяКлюча]); КонецЦикла; - ПланыОбмена.ЗарегистрироватьИзменения(ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных( - ОбщегоНазначения.ЗначениеРазделителяСеанса()), НаборЗаписей); + ПланыОбмена.ЗарегистрироватьИзменения(ДанныйУзел, НаборЗаписей); КонецЦикла; КонецПроцедуры @@ -933,6 +1458,9 @@ // НаборЗаписей - набор записей регистра сведений // СтрокаКлючей - перечисленные через запятую имена ключей набора записей // +// Пример: +// СформироватьВременнуюТаблицуДанныхНабораЗаписей(Запрос, ЭтотОбъект, "Период, Валюта"); +// Процедура СформироватьВременнуюТаблицуДанныхНабораЗаписей(Запрос, НаборЗаписей, СтрокаКлючей = "") Экспорт Запрос = Новый Запрос; @@ -977,11 +1505,13 @@ // СтрокаКлючей - перечисленные через запятую имена ключей набора записей // ИгнорироватьРучныеИзменения - признак необходимости регистрировать изменения для данных, подчиненных измененному вручную объекту // -Процедура ЗарегистрироватьИзмененияДанныхНабораЗаписей(Запрос, НаборЗаписей, ИмяЭлементаОбщихДанных, СтрокаКлючей = "", ИгнорироватьРучныеИзменения = Ложь) Экспорт +Процедура ЗарегистрироватьИзмененияДанныхНабораЗаписей(Запрос, НаборЗаписей, ИмяЭлементаОбщихДанных, СтрокаКлючей = "", ИгнорироватьРучныеИзменения = Ложь, ТипОбщихДанных = "") Экспорт Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВТ_СтарыеКлючи", "ВТ_НовыеКлючи"); Запрос.Выполнить(); + //Выбираем области данных (и узлы плана ИзмененияПоставляемыхДанных), связанные через + //регистр СвязиПоставляемыхДанных с изменившимися общими данными Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | " + СтрокаКлючей + " @@ -1009,6 +1539,7 @@ | РегистрСведений.СвязиПоставляемыхДанных КАК СвязиПоставляемыхДанных | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Ключи КАК Ключи | ПО СвязиПоставляемыхДанных.ЭлементОбщихДанных = Ключи." + ИмяЭлементаОбщихДанных + " + | И СвязиПоставляемыхДанных.ТипОбщихДанных = &ТипОбщихДанных | И (&ИгнорироватьРучныеИзменения ИЛИ НЕ СвязиПоставляемыхДанных.РучноеИзменение) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных | ПО СвязиПоставляемыхДанных.ОбластьДанных = ИзмененияПоставляемыхДанных.ОбластьДанных @@ -1025,6 +1556,7 @@ Области = Новый Соответствие; Запрос.УстановитьПараметр("ИгнорироватьРучныеИзменения", ИгнорироватьРучныеИзменения); + Запрос.УстановитьПараметр("ТипОбщихДанных", ТипОбщихДанных); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); @@ -1038,6 +1570,7 @@ Если Области.Получить(Выборка.ОбластьДанных) = Неопределено Тогда Области.Вставить(Выборка.ОбластьДанных, Истина); + //Помечаем область данных как подлежащую обновлению Если ДобавитьОбластьДанныхВСписокУзлов(Выборка.ОбластьДанных, НомерЗагрузки) Тогда Менеджер = РегистрыСведений.ОбластиДляОбновленияПоставляемыхДанных.СоздатьМенеджерЗаписи(); Менеджер.ОбластьДанных = Выборка.ОбластьДанных; @@ -1054,6 +1587,8 @@ КонецЕсли; КонецЦикла; + //Если мы дошли до следующей записи в СвязиПоставляемыхДанных - регистрируем + //изменения для всех подходящих областей данных Если ОтличаетсяКлюч Тогда Если НакопленныеУзлы.Количество() > 0 Тогда Для каждого КлючИЗначение Из ТекущийКлюч Цикл @@ -1169,6 +1704,34 @@ КонецПроцедуры +// Удаляет служебные записи поставляемых данных при удалении области +// +Процедура ПриУдаленииОбластиДанных(Знач ОбластьДанных) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ИзмененияПоставляемыхДанных.Ссылка КАК Ссылка + |ИЗ + | ПланОбмена.ИзмененияПоставляемыхДанных КАК ИзмененияПоставляемыхДанных + |ГДЕ + | ИзмененияПоставляемыхДанных.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + Возврат; + КонецЕсли; + + Удаление = Новый УдалениеОбъекта(Результат.Выгрузить()[0][0]); + Удаление.ОбменДанными.Загрузка = Истина; + Удаление.Записать(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -1592,6 +2155,19 @@ КонецПроцедуры +Функция НовыйПроксиНаМенеджереСервиса() + + URL = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); + ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + + АдресСервиса = URL + "/ws/SuppliedData?wsdl"; + + Возврат ОбщегоНазначенияПовтИсп.WSПрокси(АдресСервиса, + "http://www.1c.ru/SaaS/1.0/WS", "SuppliedData", , ИмяПользователя, ПарольПользователя); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Обновление информационной базы. @@ -1680,3 +2256,143 @@ КонецЦикла; КонецПроцедуры + +//Получить запрос, возвращающий ссылки на данные с указанными характеристиками +// +// Параметры +// ВидДанных - строка. +// Характеристики - коллекция, содержащая структуры Код(строка) +// и Значение(строка) +// +// Возвращаемое значение: +// Запрос +Функция ЗапросДанныхПоИменам(Знач ВидДанных, Знач Характеристики) + Если Характеристики = Неопределено Или Характеристики.Количество() = 0 Тогда + Возврат ЗапросПоИмениВидаДанных(ВидДанных); + Иначе + Возврат ЗапросПоИменамХарактеристик(ВидДанных, Характеристики); + КонецЕсли; +КонецФункции + +Функция ЗапросПоИмениВидаДанных(Знач ВидДанных) + Запрос = Новый Запрос(); + Запрос.Текст = "ВЫБРАТЬ + | ПоставляемыеДанные.Ссылка КАК ПоставляемыеДанные + |ИЗ + | Справочник.ПоставляемыеДанные КАК ПоставляемыеДанные + |ГДЕ + | ПоставляемыеДанные.ВидДанных = &ВидДанных"; + Запрос.УстановитьПараметр("ВидДанных", ВидДанных); + Возврат Запрос; + +КонецФункции + +Функция ЗапросПоИменамХарактеристик(Знач ВидДанных, Знач Характеристики) +//ВЫБРАТЬ Ссылка +//ИЗ Характеристики +//ГДЕ (ИмяХарактеристики = '' И ЗначениеХарактеристики = '') ИЛИ ..(N) +//СГРУППИРОВАТЬ ПО ДанныеИд +//ИМЕЮЩИЕ Количество(*) = N + Запрос = Новый Запрос(); + Запрос.Текст = + "ВЫБРАТЬ + | ПоставляемыеДанныеХарактеристикиДанных.Ссылка КАК ПоставляемыеДанные + |ИЗ + | Справочник.ПоставляемыеДанные.ХарактеристикиДанных КАК ПоставляемыеДанныеХарактеристикиДанных + |ГДЕ + | ПоставляемыеДанныеХарактеристикиДанных.Ссылка.ВидДанных = &ВидДанных И ("; + Счетчик = 0; + Для Каждого Характеристика из Характеристики Цикл + Если Счетчик > 0 Тогда + Запрос.Текст = Запрос.Текст + " ИЛИ "; + КонецЕсли; + + Запрос.Текст = Запрос.Текст + "( + | ВЫРАЗИТЬ(ПоставляемыеДанныеХарактеристикиДанных.Значение КАК Строка(150)) = &Значение" + Счетчик + " + | И ПоставляемыеДанныеХарактеристикиДанных.Характеристика = &Код" + Счетчик + ")"; + Запрос.УстановитьПараметр("Значение" + Счетчик, Характеристика.Значение); + Запрос.УстановитьПараметр("Код" + Счетчик, Характеристика.Код); + Счетчик = Счетчик + 1; + КонецЦикла; + Запрос.Текст = Запрос.Текст + ") + |СГРУППИРОВАТЬ ПО + | ПоставляемыеДанныеХарактеристикиДанных.Ссылка + |ИМЕЮЩИЕ + |Количество(*) = &Количество"; + Запрос.УстановитьПараметр("Количество", Счетчик); + Запрос.УстановитьПараметр("ВидДанных", ВидДанных); + Возврат Запрос; + +КонецФункции + +// Преобразование результатов выборки в XDTO объект +// +// Параметры +// Выборка - ВыборкаИзРезультатаЗапроса. Выборка запроса, содержащего информацию об +// обновлении данных +// +Функция ПолучитьXDTOДескриптор(Выборка) + Дескриптор = СоздатьОбъект(ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/SuppliedData", + "Descriptor")); + Дескриптор.DataType = Выборка.КодВидаДанных; + Дескриптор.CreationDate = Выборка.ДатаДобавления; + Дескриптор.FileGUID = Выборка.ИдентификаторФайла; + Дескриптор.Properties = СоздатьОбъект(ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/SuppliedData", + "ArrayOfProperty")); + ВыборкаХарактеристик = Выборка.ХарактеристикиДанных.Выбрать(); + Пока ВыборкаХарактеристик.Следующий() Цикл + Характеристика = СоздатьОбъект(ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/SuppliedData", + "Property")); + Характеристика.Code = ВыборкаХарактеристик.ХарактеристикаКод; + Характеристика.Value = ВыборкаХарактеристик.Значение; + Характеристика.IsKey = Истина; + Дескриптор.Properties.Property.Добавить(Характеристика); + КонецЦикла; + Возврат Дескриптор; + +КонецФункции + +Функция ПолучитьДескриптор(Знач Выборка) + Перем Дескриптор, ВыборкаХарактеристик, Характеристика; + + Дескриптор = Новый Структура("ВидДанных, ДатаДобавления, ИдентификаторФайла, Характеристики"); + Дескриптор.ВидДанных = Выборка.КодВидаДанных; + Дескриптор.ДатаДобавления = Выборка.ДатаДобавления; + Дескриптор.ИдентификаторФайла = Выборка.ИдентификаторФайла; + Дескриптор.Характеристики = Новый Массив(); + + ВыборкаХарактеристик = Выборка.ХарактеристикиДанных.Выбрать(); + Пока ВыборкаХарактеристик.Следующий() Цикл + Характеристика = Новый Структура("Код, Значение, Ключевая"); + Характеристика.Код = ВыборкаХарактеристик.Характеристика; + Характеристика.Значение = ВыборкаХарактеристик.Значение; + Характеристика.Ключевая = Истина; + Дескриптор.Характеристики.Добавить(Характеристика); + КонецЦикла; + + Возврат Дескриптор; + +КонецФункции + +Функция СоздатьОбъект(Знач ТипСообщения) Экспорт + + Возврат ФабрикаXDTO.Создать(ТипСообщения); + +КонецФункции + +Функция ТекстОшибкиПриПолученииФайла(Знач ИнформацияОбОшибке, Знач Файл) + + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + + Если Файл <> Неопределено Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Ссылка на файл: ""%2"".'"), + СообщениеОбОшибке, + ПолучитьНавигационнуюСсылку(Файл) ); + КонецЕсли; + + Возврат СообщениеОбОшибке; + +КонецФункции diff --git a/SSL/src/CommonModules/ПоставляемыеДанные/ПоставляемыеДанные.mdo b/SSL/src/CommonModules/ПоставляемыеДанные/ПоставляемыеДанные.mdo index e89557b55..82a1ba7d7 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанные/ПоставляемыеДанные.mdo +++ b/SSL/src/CommonModules/ПоставляемыеДанные/ПоставляемыеДанные.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl index 4a98544dd..b27dfbb59 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/Module.bsl @@ -21,7 +21,7 @@ // Параметры: // СсылкаОбщихДанных - Ссылка - ссылка на элемент подбираемый в область данных // -Процедура ПриПодбореПоставляемыхДанныхВОбласть(СсылкаОбщихДанных) Экспорт +Процедура ПриПодбореПоставляемыхДанныхВОбласть(СсылкаОбщихДанных, ТипОбщихДанных = "") Экспорт КонецПроцедуры @@ -75,3 +75,31 @@ ТипПриемника, ОбъектПриемник, СтандартаяОбработка) Экспорт КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для подсистемы ПоставляемыеДанные +// общий модуль ПоставляемыеДанныеПереопределяемый +// + +// Зарегистрировать обработчики поставляемых данных +// +// При получении уведомления о доступности новых общих данных, вызывается процедуры +// ДоступныНовыеДанные модулей, зарегистрированнных через ПолучитьОбработчикиПоставляемыхДанных. +// В процедуру передается Дескриптор - ОбъектXDTO Descriptor. +// +// В случае, если ДоступныНовыеДанные устанавливает аргумент Загружать в значение Истина, +// данные загружаются, дескриптор и путь к файлу с данными передаются в процедуру +// ОбработатьНовыеДанные. Файл будет автоматически удален после завершения процедуры. +// +// Параметры: +// Обработчики, ТаблицаЗначений - таблица для добавления обработчиков. +// Колонки: +// ВидДанных, строка - код вида данных, обрабатываемый обработчиком +// КодОбработчика, строка(20) - будет использоваться при восстановлении обработки данных после сбоя +// Обработчик, ОбщийМодуль - модуль, содержащий следующие процедуры: +// ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт +// ОбработатьНовыеДанные(Дескриптор, ПутьКФайлу) Экспорт +// ОбработкаДанныхОтменена(Дескриптор) Экспорт +// +Процедура ПолучитьОбработчикиПоставляемыхДанных(Обработчики) Экспорт + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/ПоставляемыеДанныеПереопределяемый.mdo b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/ПоставляемыеДанныеПереопределяемый.mdo index 3191041a5..78c0ad671 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/ПоставляемыеДанныеПереопределяемый.mdo +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПереопределяемый/ПоставляемыеДанныеПереопределяемый.mdo @@ -6,6 +6,6 @@ Поставляемые данные переопределяемый true + true true - true diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/Module.bsl b/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/Module.bsl index 5d4a8efbc..dc70ad5b2 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/Module.bsl @@ -31,7 +31,7 @@ УстановитьПривилегированныйРежим(Ложь); Если Результат.Пустой() Тогда - ШаблонСообщения = НСтр("ru = 'Не найден узел соответствующий области данных %1'"); + ШаблонСообщения = НСтр("ru = 'Не найден узел, соответствующий области данных %1'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбластьДанных); ВызватьИсключение(ТекстСообщения); КонецЕсли; diff --git a/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/ПоставляемыеДанныеПовтИсп.mdo b/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/ПоставляемыеДанныеПовтИсп.mdo index 47da5b014..2af915ad3 100644 --- a/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/ПоставляемыеДанныеПовтИсп.mdo +++ b/SSL/src/CommonModules/ПоставляемыеДанныеПовтИсп/ПоставляемыеДанныеПовтИсп.mdo @@ -6,7 +6,7 @@ Поставляемые данные повт исп true + true true - true DuringRequest diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектов/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовВызовСервера/Module.bsl similarity index 86% rename from SSL/src/CommonModules/ПрефиксацияОбъектов/Module.bsl rename to SSL/src/CommonModules/ПрефиксацияОбъектовВызовСервера/Module.bsl index f99930907..f36c52890 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектов/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовВызовСервера/Module.bsl @@ -26,13 +26,15 @@ ТекстЗапроса = " |ВЫБРАТЬ | ШапкаОбъекта.Дата КАК Дата, - | ЕСТЬNULL(ШапкаОбъекта.Организация.Префикс, """") КАК ПрефиксОрганизацииДоИзменения + | ЕСТЬNULL(ШапкаОбъекта.[ИмяРеквизитаОрганизация].Префикс, """") КАК ПрефиксОрганизацииДоИзменения |ИЗ | " + ПолноеИмяТаблицы + " КАК ШапкаОбъекта |ГДЕ | ШапкаОбъекта.Ссылка = &Ссылка |"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаОрганизация]", ПрефиксацияОбъектовСобытия.ИмяРеквизитаОрганизация(ПолноеИмяТаблицы)); + Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Ссылка", Ссылка); @@ -41,7 +43,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); - ПрефиксОрганизацииПослеИзменения = ПолучитьФункциональнуюОпцию("ПрефиксыОрганизаций", Новый Структура("Организация", ОрганизацияПослеИзменения)); + ПрефиксОрганизацииПослеИзменения = ПрефиксацияОбъектовПереопределяемый.ПрефиксыОрганизаций(Новый Структура("Организация", ОрганизацияПослеИзменения)); // если задана пустая ссылка на организацию ПрефиксОрганизацииПослеИзменения = ?(ПрефиксОрганизацииПослеИзменения = Ложь, "", ПрефиксОрганизацииПослеИзменения); @@ -64,13 +66,15 @@ ТекстЗапроса = " |ВЫБРАТЬ - | ЕСТЬNULL(ШапкаОбъекта.Организация.Префикс, """") КАК ПрефиксОрганизацииДоИзменения + | ЕСТЬNULL(ШапкаОбъекта.[ИмяРеквизитаОрганизация].Префикс, """") КАК ПрефиксОрганизацииДоИзменения |ИЗ | " + ПолноеИмяТаблицы + " КАК ШапкаОбъекта |ГДЕ | ШапкаОбъекта.Ссылка = &Ссылка |"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "[ИмяРеквизитаОрганизация]", ПрефиксацияОбъектовСобытия.ИмяРеквизитаОрганизация(ПолноеИмяТаблицы)); + Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("Ссылка", Ссылка); @@ -79,14 +83,13 @@ Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); - ПрефиксОрганизацииПослеИзменения = ПолучитьФункциональнуюОпцию("ПрефиксыОрганизаций", Новый Структура("Организация", ОрганизацияПослеИзменения)); + ПрефиксОрганизацииПослеИзменения = ПрефиксацияОбъектовПереопределяемый.ПрефиксыОрганизаций(Новый Структура("Организация", ОрганизацияПослеИзменения)); // если задана пустая ссылка на организацию ПрефиксОрганизацииПослеИзменения = ?(ПрефиксОрганизацииПослеИзменения = Ложь, "", ПрефиксОрганизацииПослеИзменения); Возврат Выборка.ПрефиксОрганизацииДоИзменения <> ПрефиксОрганизацииПослеИзменения; - - // + КонецФункции // Определяет признак равенства двух дат для объекта метаданных. diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектов/ПрефиксацияОбъектов.mdo b/SSL/src/CommonModules/ПрефиксацияОбъектовВызовСервера/ПрефиксацияОбъектовВызовСервера.mdo similarity index 63% rename from SSL/src/CommonModules/ПрефиксацияОбъектов/ПрефиксацияОбъектов.mdo rename to SSL/src/CommonModules/ПрефиксацияОбъектовВызовСервера/ПрефиксацияОбъектовВызовСервера.mdo index 63913db77..b1bba1480 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..e75684b21 --- /dev/null +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/Module.bsl @@ -0,0 +1,121 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Префиксация объектов" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработчик события при изменении номера объекта. +// Обработчик предназначен для вычисления базового номера объекта в случае, +// когда стандартным способом получить базовый номер без потери информации нельзя. +// Обработчик вызывается только для случая, когда обрабатываемые номера и коды объектов +// были сформированы нестандартным образом, не в формате номеров и кодов БСП. +// +// Параметры: +// Объект. Тип: ДокументОбъект, БизнесПроцессОбъект, ЗадачаОбъект. +// Объект данных, для которого необходимо определить базовый номер. +// +// Номер. Тип: Строка. Номер текущего объекта, из которого необходимо извлечь базовый номер. +// +// БазовыйНомер. Тип: Строка. Базовый номер объекта. Под базовым номером объекта подразумевается номер объекта +// за вычетом всех префиксов (префикса ИБ, префикса организации, префикса подразделения, пользовательского префикса и пр). +// +// СтандартнаяОбработка. Тип: Булево. Флаг стандартной обработки. Значения по умолчанию Истина. +// Если в обработчике установить данному параметру значение Ложь, то стандартная обработка выполнена не будет. +// Стандартная обработка получает базовый номер справа до первого нечислового символа. +// Например, для номера "АА00005/12/368" стандартная обработка вернет "368". +// Однако базовый номер для объекта будет равен "5/12/368". +// +Процедура ПриИзмененииНомера(Объект, Знач Номер, БазовыйНомер, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// Обработчик события при изменении кода объекта. +// Обработчик предназначен для вычисления базового кода объекта в случае, +// когда стандартным способом получить базовый код без потери информации нельзя. +// Обработчик вызывается только для случая, когда обрабатываемые номера и коды объектов +// были сформированы нестандартным образом, не в формате номеров и кодов БСП. +// +// Параметры: +// Объект. Тип: СправочникОбъект, ПланВидовХарактеристикОбъект. +// Объект данных, для которого необходимо определить базовый код. +// +// Код. Тип: Строка. Код текущего объекта, из которого необходимо извлечь базовый код. +// +// БазовыйКод. Тип: Строка. Базовый код объекта. Под базовым кодом объекта подразумевается код объекта +// за вычетом всех префиксов (префикса ИБ, префикса организации, префикса подразделения, пользовательского префикса и пр). +// +// СтандартнаяОбработка. Тип: Булево. Флаг стандартной обработки. Значения по умолчанию Истина. +// Если в обработчике установить данному параметру значение Ложь, то стандартная обработка выполнена не будет. +// Стандартная обработка получает базовый код справа до первого нечислового символа. +// Например, для кода "АА00005/12/368" стандартная обработка вернет "368". +// Однако базовый код для объекта будет равен "5/12/368". +// +Процедура ПриИзмененииКода(Объект, Знач Код, БазовыйКод, СтандартнаяОбработка) Экспорт + + + +КонецПроцедуры + +// + +// В процедуре необходимо заполнить параметр "Объекты" для тех объектов метаданных, +// для которых ссылка на организацию располагается в реквизите с именем отличным от стандартного имени "Организация". +// +// Параметры: +// Объекты. Тип: Таблица значений. +// Колонки таблицы: +// Объект. Тип: Объект метаданных. Объект метаданных, для которого указывается реквизит, +// содержащий ссылку на организацию. +// Реквизит. Тип: Строка. Имя реквизита, который содержит ссылку на организацию. +// +Процедура ПолучитьПрефиксообразующиеРеквизиты(Объекты) Экспорт + + + +КонецПроцедуры + +// + +Функция ЕстьФункциональнаяОпцияПрефиксыОрганизаций() Экспорт + + // СтандартныеПодсистемы.Организации + Возврат Истина; + // Конец СтандартныеПодсистемы.Организации + + Возврат Ложь; + +КонецФункции + +Функция ЕстьФункциональнаяОпцияПрефиксИнформационнойБазы() Экспорт + + // СтандартныеПодсистемы.ОбменДанными + Возврат Истина; + // Конец СтандартныеПодсистемы.ОбменДанными + + Возврат Ложь; + +КонецФункции + +Функция ПрефиксИнформационнойБазы() Экспорт + + Возврат ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + +КонецФункции + +Функция ПрефиксыОрганизаций(Параметры) Экспорт + + Возврат ПолучитьФункциональнуюОпцию("ПрефиксыОрганизаций", Параметры); + +КонецФункции + +Функция УстановитьПрефиксИнформационнойБазы(Префикс) Экспорт + + Константы.ПрефиксУзлаРаспределеннойИнформационнойБазы.Установить(Префикс); + +КонецФункции + + diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСобытия/ПрисоединенныеФайлыСобытия.mdo b/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/ПрефиксацияОбъектовПереопределяемый.mdo similarity index 56% rename from SSL/src/CommonModules/ПрисоединенныеФайлыСобытия/ПрисоединенныеФайлыСобытия.mdo rename to SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/ПрефиксацияОбъектовПереопределяемый.mdo index 112a86c3e..65160f3b9 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСобытия/ПрисоединенныеФайлыСобытия.mdo +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПереопределяемый/ПрефиксацияОбъектовПереопределяемый.mdo @@ -1,12 +1,11 @@ - - ПрисоединенныеФайлыСобытия + + ПрефиксацияОбъектовПереопределяемый ru - Присоединенные файлы события + Префиксация объектов переопределяемый true true true - true diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl index 710b6e112..32ff2b5e4 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/Module.bsl @@ -9,34 +9,34 @@ // Возвращает признак наличия в конфигурации функциональной опции ПрефиксыОрганизаций. // // Возвращаемое значение: -// Булево - признак наличия в конфигурации функциональной опции с заданным именем. +// Булево - признак наличия в конфигурации функциональной опции ПрефиксыОрганизаций. // Функция ЕстьФункциональнаяОпцияПрефиксыОрганизаций() Экспорт - Возврат ЕстьФункциональнаяОпция("ПрефиксыОрганизаций"); + + Возврат ПрефиксацияОбъектовПереопределяемый.ЕстьФункциональнаяОпцияПрефиксыОрганизаций(); + КонецФункции -// Возвращает признак наличия в конфигурации функциональной опции с заданным именем. +// Возвращает признак наличия в конфигурации функциональной опции ПрефиксИнформационнойБазы. // -// Параметры: -// ИмяФункциональнойОпции - Строка - имя функциональной опции, наличие которой в конфигурации необходимо проверить. -// // Возвращаемое значение: // Булево - признак наличия в конфигурации функциональной опции ПрефиксИнформационнойБазы. // Функция ЕстьФункциональнаяОпцияПрефиксИнформационнойБазы() Экспорт - Возврат ЕстьФункциональнаяОпция("ПрефиксИнформационнойБазы"); -КонецФункции + + Возврат ПрефиксацияОбъектовПереопределяемый.ЕстьФункциональнаяОпцияПрефиксИнформационнойБазы(); + +КонецФункции -// Возвращает признак наличия в конфигурации функциональной опции с заданным именем. +// Возвращает таблицу префиксообразующих реквизитов, заданных в переопределяемом модуле. // -// Параметры: -// ИмяФункциональнойОпции - Строка - имя функциональной опции, наличие которой необходимо проверить. -// -// Возвращаемое значение: -// Булево - признак наличия в конфигурации функциональной опции с заданным именем. -// -Функция ЕстьФункциональнаяОпция(ИмяФункциональнойОпции) +Функция ПрефиксообразующиеРеквизиты() Экспорт - Возврат Метаданные.ФункциональныеОпции.Найти(ИмяФункциональнойОпции) <> Неопределено; + Объекты = Новый ТаблицаЗначений; + Объекты.Колонки.Добавить("Объект"); + Объекты.Колонки.Добавить("Реквизит"); -КонецФункции \ No newline at end of file + ПрефиксацияОбъектовПереопределяемый.ПолучитьПрефиксообразующиеРеквизиты(Объекты); + + Возврат Объекты; +КонецФункции diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/ПрефиксацияОбъектовПовтИсп.mdo b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/ПрефиксацияОбъектовПовтИсп.mdo index e4f4dc91c..9519135f4 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/ПрефиксацияОбъектовПовтИсп.mdo +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовПовтИсп/ПрефиксацияОбъектовПовтИсп.mdo @@ -6,6 +6,7 @@ Префиксация объектов повторное использование true - true + true + true DuringSession diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl index a28359391..3403a3c90 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/Module.bsl @@ -143,7 +143,7 @@ Если УстановитьПрефиксИнформационнойБазы И ПрефиксацияОбъектовПовтИсп.ЕстьФункциональнаяОпцияПрефиксИнформационнойБазы() Тогда - ПрефиксИнформационнойБазы = ПолучитьФункциональнуюОпцию("ПрефиксИнформационнойБазы"); + ПрефиксИнформационнойБазы = ПрефиксацияОбъектовПереопределяемый.ПрефиксИнформационнойБазы(); ДополнитьСтрокуНулямиСлева(ПрефиксИнформационнойБазы, 2); @@ -154,7 +154,9 @@ Если РеквизитОрганизацияДоступен(Источник) Тогда - ПрефиксОрганизации = ПолучитьФункциональнуюОпцию("ПрефиксыОрганизаций", Новый Структура("Организация", Источник.Организация)); + ПрефиксОрганизации = ПрефиксацияОбъектовПереопределяемый.ПрефиксыОрганизаций( + Новый Структура("Организация", Источник[ИмяРеквизитаОрганизация(Источник.Метаданные())]) + ); // если задана пустая ссылка на организацию Если ПрефиксОрганизации = Ложь Тогда @@ -208,7 +210,7 @@ Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); - Если Не ПрефиксацияОбъектов.ДатыОбъектаОдногоПериода(Выборка.Дата, Объект.Дата, Объект.Ссылка) Тогда + Если Не ПрефиксацияОбъектовВызовСервера.ДатыОбъектаОдногоПериода(Выборка.Дата, Объект.Дата, Объект.Ссылка) Тогда Объект.Номер = ""; @@ -224,7 +226,12 @@ Возврат; КонецЕсли; - Если ПрефиксацияОбъектов.ДатаИлиОрганизацияОбъектаИзменена(Объект.Ссылка, Объект.Дата, Объект.Организация, Объект.Метаданные().ПолноеИмя()) Тогда + Если ПрефиксацияОбъектовВызовСервера.ДатаИлиОрганизацияОбъектаИзменена( + Объект.Ссылка, + Объект.Дата, + Объект[ИмяРеквизитаОрганизация(Объект.Метаданные())], + Объект.Метаданные().ПолноеИмя()) + Тогда Объект.Номер = ""; @@ -242,7 +249,11 @@ Возврат; КонецЕсли; - Если ПрефиксацияОбъектов.ОрганизацияОбъектаИзменена(Объект.Ссылка, Объект.Организация, Объект.Метаданные().ПолноеИмя()) Тогда + Если ПрефиксацияОбъектовВызовСервера.ОрганизацияОбъектаИзменена( + Объект.Ссылка, + Объект[ИмяРеквизитаОрганизация(Объект.Метаданные())], + Объект.Метаданные().ПолноеИмя()) + Тогда Объект.Код = ""; @@ -261,8 +272,24 @@ ИЛИ ОбщегоНазначения.ЭтоПланВидовХарактеристик(МетаданныеОбъекта)) И МетаданныеОбъекта.Иерархический Тогда - РеквизитОрганизация = МетаданныеОбъекта.Реквизиты.Найти("Организация"); + ИмяРеквизитаОрганизация = ИмяРеквизитаОрганизация(МетаданныеОбъекта); + РеквизитОрганизация = МетаданныеОбъекта.Реквизиты.Найти(ИмяРеквизитаОрганизация); + + Если РеквизитОрганизация = Неопределено Тогда + + Если ОбщегоНазначения.ЭтоСтандартныйРеквизит(МетаданныеОбъекта.СтандартныеРеквизиты, ИмяРеквизитаОрганизация) Тогда + + // Стандартный реквизит всегда доступен и для элемента и для группы. + Возврат Истина; + + КонецЕсли; + + СтрокаСообщения = НСтр("ru = 'Для объекта метаданных %1 не определен реквизит с именем %2.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, МетаданныеОбъекта.ПолноеИмя(), ИмяРеквизитаОрганизация); + ВызватьИсключение СтрокаСообщения; + КонецЕсли; + Если РеквизитОрганизация.Использование = Метаданные.СвойстваОбъектов.ИспользованиеРеквизита.ДляГруппы И Не Объект.ЭтоГруппа Тогда Результат = Ложь; @@ -278,3 +305,22 @@ Возврат Результат; КонецФункции +Функция ИмяРеквизитаОрганизация(Объект) Экспорт + + Если ТипЗнч(Объект) = Тип("Строка") Тогда + + Объект = Метаданные.НайтиПоПолномуИмени(Объект); + + КонецЕсли; + + СтрокаТаблицы = ПрефиксацияОбъектовПовтИсп.ПрефиксообразующиеРеквизиты().Найти(Объект, "Объект"); + + Если СтрокаТаблицы <> Неопределено Тогда + + Возврат СтрокаТаблицы.Реквизит; + + КонецЕсли; + + Возврат "Организация"; +КонецФункции + diff --git a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/ПрефиксацияОбъектовСобытия.mdo b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/ПрефиксацияОбъектовСобытия.mdo index c33e15632..247440e38 100644 --- a/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/ПрефиксацияОбъектовСобытия.mdo +++ b/SSL/src/CommonModules/ПрефиксацияОбъектовСобытия/ПрефиксацияОбъектовСобытия.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl index 03473685e..68b470e19 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлы/Module.bsl @@ -6,34 +6,6 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Настраивает форму присоединенного файла ПриСозданииНаСервере. -Процедура ПриСозданииНаСервереПрисоединенныйФайл(Знач Форма) Экспорт - - // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Форма.Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - Если НЕ Форма.Параметры.Свойство("Ключ", Форма.Ключ) Тогда - Форма.Ключ = Форма.Параметры.Key; - КонецЕсли; - - Форма.АвтоЗаголовок = Ложь; - Форма.Заголовок = НСтр("ru = 'Присоединенный файл'"); - - Команда = Форма.Команды.Добавить("ПерейтиКФормеФайла"); - Команда.Действие = "Подключаемый_ПерейтиКФормеФайла"; - - Декорация = Форма.Элементы.Добавить("ПоясняющийТекст", Тип("ДекорацияФормы")); - Декорация.Заголовок = НСтр("ru = 'Для того, чтобы перейти к карточке файла, нажмите на гиперссылку'"); - - Кнопка = Форма.Элементы.Добавить("ПерейтиКФормеФайла1", Тип("КнопкаФормы")); - Кнопка.Вид = ВидКнопкиФормы.Гиперссылка; - Кнопка.Заголовок = НСтр("ru = 'Перейти к форме файла'"); - Кнопка.ИмяКоманды = "ПерейтиКФормеФайла"; - -КонецПроцедуры - // Возвращает двоичные данные присоединенного файла. // // Параметры: @@ -44,10 +16,10 @@ // Функция ПолучитьДвоичныеДанныеФайла(Знач ПрисоединенныйФайл) Экспорт - УстановитьПривилегированныйРежим(Истина); - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + УстановитьПривилегированныйРежим(Истина); + Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда Запрос = Новый Запрос; Запрос.Текст = @@ -74,7 +46,7 @@ ФайлОбъект.Расширение); КонецЕсли; Иначе - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; Попытка Возврат Новый ДвоичныеДанные(ПолныйПуть) @@ -129,12 +101,15 @@ // ФайлРедактируется - Булево. // ФайлРедактируетТекущийПользователь - Булево. // -Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено, Знач ПолучатьСсылкуНаДвоичныеДанные = Истина) Экспорт +Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, + Знач ИдентификаторФормы = Неопределено, + Знач ПолучатьСсылкуНаДвоичныеДанные = Истина) Экспорт + + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); УстановитьПривилегированныйРежим(Истина); СсылкаНаДвоичныеДанныеФайла = Неопределено; - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); Если ПолучатьСсылкуНаДвоичныеДанные Тогда @@ -162,7 +137,7 @@ СсылкаНаДвоичныеДанныеФайла = ПоместитьВоВременноеХранилище(ДвоичныеДанные); КонецЕсли; Иначе - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; Попытка ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); @@ -227,10 +202,10 @@ // Процедура ПолучитьПрикрепленныеФайлыКОбъекту(Знач Объект, Знач МассивФайлов) Экспорт - ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); Если ТипыВладельцев.Найти(ТипЗнч(Объект)) <> Неопределено Тогда - МассивФайловЛокальный = ПолучитьВсеПодчиненныеФайлы(Объект); + МассивФайловЛокальный = ПрисоединенныеФайлыСлужебный.ПолучитьВсеПодчиненныеФайлы(Объект); Для Каждого СсылкаНаФайл Из МассивФайловЛокальный Цикл МассивФайлов.Добавить(СсылкаНаФайл); КонецЦикла; @@ -242,25 +217,36 @@ // Создает объект в справочнике для хранения файла и заполняет его реквизиты переданными свойствами. // // Параметры: -// ВладелецФайла - Ссылка на владелеца файла. -// ИмяБезРасширения - Строка - имя файла без расширения. -// РасширениеБезТочки - Строка - расширение файла (без точки вначале). -// ВремяИзменения - Дата - дата и время изменения файла (местное время). -// ВремяИзмененияУниверсальное - Дата - дата и время изменения файла (UTC+0:00). -// АдресФайлаВоВременномХранилище - Строка - адрес, указывающий на двоичные данные во временном хранилище. -// АдресВременногоХранилищаТекста - Строка - адрес, указывающий на извлеченный текст из файла во временном хранилище. +// ВладелецФайла - Ссылка - объект, к которому добавляется файл; +// ИмяБезРасширения - Строка - имя файла без расширения; +// РасширениеБезТочки - Строка - расширение файла (без точки вначале); +// ВремяИзменения - Дата - дата и время изменения файла (местное время); +// ВремяИзмененияУниверсальное - Дата - дата и время изменения файла (UTC+0:00); +// АдресФайлаВоВременномХранилище - Строка - адрес, указывающий на двоичные данные во временном хранилище; +// АдресВременногоХранилищаТекста - Строка - адрес, указывающий на извлеченный текст из файла во временном хранилище; +// Описание - Строка - описание файла. // // Возвращаемое значение: // Ссылка - ссылка на созданный объект. // Функция ДобавитьФайл(Знач ВладелецФайла, Знач ИмяБезРасширения, - Знач РасширениеБезТочки, + Знач РасширениеБезТочки = Неопределено, Знач ВремяИзменения = Неопределено, Знач ВремяИзмененияУниверсальное = Неопределено, Знач АдресФайлаВоВременномХранилище, - Знач АдресВременногоХранилищаТекста = "") Экспорт + Знач АдресВременногоХранилищаТекста = "", + Знач Описание = "") Экспорт + // если расширение не задано явно, выделяем его из имени файла + Если РасширениеБезТочки = Неопределено Тогда + ЧастиИмениФайла = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяБезРасширения, ".", Ложь); + Если ЧастиИмениФайла.Количество() > 1 Тогда + РасширениеБезТочки = ЧастиИмениФайла[ЧастиИмениФайла.Количество()-1]; + ИмяБезРасширения = Лев(ИмяБезРасширения, СтрДлина(ИмяБезРасширения) - (СтрДлина(РасширениеБезТочки)+1)); + КонецЕсли; + КонецЕсли; + Если Не ЗначениеЗаполнено(ВремяИзменения) Тогда ВремяИзменения = ТекущаяДатаСеанса(); ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДатаСеанса()); @@ -276,11 +262,11 @@ ПрисоединенныйФайл.ВладелецФайла = ВладелецФайла; ПрисоединенныйФайл.ДатаМодификацииУниверсальная = ВремяИзмененияУниверсальное; ПрисоединенныйФайл.ДатаСоздания = ТекущаяДатаСеанса(); - ПрисоединенныйФайл.Описание = ""; + ПрисоединенныйФайл.Описание = Описание; ПрисоединенныйФайл.ПодписанЭЦП = Ложь; ПрисоединенныйФайл.Наименование = ИмяБезРасширения; ПрисоединенныйФайл.Расширение = РасширениеБезТочки; - ПрисоединенныйФайл.ТипХраненияФайла = ФайловыеФункции.ПолучитьТипХраненияФайлов(); + ПрисоединенныйФайл.ТипХраненияФайла = ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов(); ПрисоединенныйФайл.Размер = ДвоичныеДанные.Размер(); СвояТранзакцияОткрыта = Ложь; @@ -290,12 +276,12 @@ Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда НачатьТранзакцию(); СвояТранзакцияОткрыта = Истина; - ЗаписатьФайлВИнформационнуюБазу(СсылкаНового, ДвоичныеДанные); + ПрисоединенныеФайлыСлужебный.ЗаписатьФайлВИнформационнуюБазу(СсылкаНового, ДвоичныеДанные); ПрисоединенныйФайл.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); ПрисоединенныйФайл.ПутьКФайлу = ""; Иначе // Добавление в один из томов (где есть свободное место). - ФайловыеФункции.ДобавитьНаДиск( + ФайловыеФункцииСлужебный.ДобавитьНаДиск( ДвоичныеДанные, ПрисоединенныйФайл.ПутьКФайлу, ПрисоединенныйФайл.Том, @@ -311,12 +297,13 @@ ИзвлеченныйТекст = ""; Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда - ИзвлеченныйТекст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + ИзвлеченныйТекст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - ИначеЕсли НЕ ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда + ИначеЕсли НЕ ФайловыеФункцииСлужебный.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда // Тексты извлекаются сразу, а не в фоновом задании. - СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); + СтатусИзвлеченияТекста = ПрисоединенныеФайлыСлужебный.ИзвлечьТекст( + ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); КонецЕсли; ПрисоединенныйФайл.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; @@ -405,17 +392,22 @@ ИзвлеченныйТекст = ""; Если ЭтоАдресВременногоХранилища(ИнформацияОФайле.АдресВременногоХранилищаТекста) Тогда - ИзвлеченныйТекст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(ИнформацияОФайле.АдресВременногоХранилищаТекста); + + ИзвлеченныйТекст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища( + ИнформацияОФайле.АдресВременногоХранилищаТекста); + РеквизитыЗначения.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - ИначеЕсли НЕ ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда + ИначеЕсли НЕ ФайловыеФункцииСлужебный.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда // Тексты извлекаются сразу, а не в фоновом задании - РеквизитыЗначения.СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); + РеквизитыЗначения.СтатусИзвлеченияТекста = ПрисоединенныеФайлыСлужебный.ИзвлечьТекст( + ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); КонецЕсли; РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения(ИзвлеченныйТекст)); - ОбновитьДвоичныеДанныеФайлаНаСервере(ПрисоединенныйФайл, ДвоичныеДанные, РеквизитыЗначения); + ПрисоединенныеФайлыСлужебный.ОбновитьДвоичныеДанныеФайлаНаСервере( + ПрисоединенныйФайл, ДвоичныеДанные, РеквизитыЗначения); КонецПроцедуры @@ -436,7 +428,24 @@ КонецФункции +// Определяет наличие хранилища присоединенных файлов у объекта. +Функция КОбъектуМожноПрисоединятьФайлы(СсылкаНаОбъект) Экспорт + + ИмяХранилища = СсылкаНаОбъект.Метаданные().Имя + "ПрисоединенныеФайлы"; + + СправочникПрисоединенныеФайлы = Метаданные.Справочники.Найти(ИмяХранилища); + + ТипыХранимыхФайлов = + Метаданные.РегистрыСведений.ПрисоединенныеФайлы.Измерения.ПрисоединенныйФайл.Тип; + + Возврат СправочникПрисоединенныеФайлы <> Неопределено + И ПравоДоступа("Добавление", СправочникПрисоединенныеФайлы) + И ТипыХранимыхФайлов.СодержитТип(Тип("СправочникСсылка." + ИмяХранилища)); + +КонецФункции + // Конвертирует файлы из подсистемы Работа с файлами в подсистему Присоединенные файлы. +// Требует наличия подсистемы Работа с файлами. // // Для использования в процедурах обновления ИБ, если выполняется переход от использования // одной подсистемы к другой в каком-либо объекте-владельце файлов. @@ -557,6 +566,92 @@ КонецФункции +// Возвращает ссылки на объекты с файлами из подсистемы Работа с файлами. +// Требует наличия подсистемы Работа с файлами. +// +// Используется совместно с функцией СконвертироватьФайлыВПрисоединенные. +// +// Параметры: +// ТаблицаВладелецевФайлов - Строка - полное имя объекта метаданных, +// который может владеть присоединенными файлами. +// +Функция СсылкиНаОбъектыСФайлами(Знач ТаблицаВладелецевФайлов) Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбъектыСФайлами.Ссылка КАК Ссылка + |ИЗ + | &Таблица КАК ОбъектыСФайлами + |ГДЕ + | ИСТИНА В + | (ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + | ИЗ + | Справочник.Файлы КАК Файлы + | ГДЕ + | Файлы.ВладелецФайла = ОбъектыСФайлами.Ссылка)"; + + Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", ТаблицаВладелецевФайлов); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры, подключаемые к событиям управляемых форм + +// Настраивает форму присоединенного файла ПриСозданииНаСервере. +Процедура ПриСозданииНаСервереПрисоединенныйФайл(Знач Форма) Экспорт + + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Форма.Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + Если НЕ Форма.Параметры.Свойство("Ключ", Форма.Ключ) Тогда + Форма.Ключ = Форма.Параметры.Key; + КонецЕсли; + + Форма.АвтоЗаголовок = Ложь; + Форма.Заголовок = НСтр("ru = 'Присоединенный файл'"); + + Команда = Форма.Команды.Добавить("ПерейтиКФормеФайла"); + Команда.Действие = "Подключаемый_ПерейтиКФормеФайла"; + + Декорация = Форма.Элементы.Добавить("ПоясняющийТекст", Тип("ДекорацияФормы")); + Декорация.Заголовок = НСтр("ru = 'Для того, чтобы перейти к карточке файла, нажмите на гиперссылку'"); + + Кнопка = Форма.Элементы.Добавить("ПерейтиКФормеФайла1", Тип("КнопкаФормы")); + Кнопка.Вид = ВидКнопкиФормы.Гиперссылка; + Кнопка.Заголовок = НСтр("ru = 'Перейти к форме файла'"); + Кнопка.ИмяКоманды = "ПерейтиКФормеФайла"; + +КонецПроцедуры + +// Обработчик подписки владельца присоединенного файла на событие "При записи на сервере". +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, Параметры) Экспорт + + Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда + + ПрисоединенныеФайлыСлужебный.СкопироватьПрисоединенныеФайлы( + Параметры.ЗначениеКопирования, ТекущийОбъект); + КонецЕсли; + +КонецПроцедуры + +// Вызывает исключение в стандартной форме списка справочника присоединенных файлов. +Процедура ВызватьИсключениеОткрытияФормы(Форма) Экспорт + + // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Форма.Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ВызватьИсключение НСтр("ru = 'Самостоятельное использование формы не предусмотрено.'"); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Операции с ЭЦП @@ -579,11 +674,11 @@ КонецЕсли; Если НЕ СтруктураРеквизитов.Редактирует.Пустая() Тогда - ВызватьИсключение ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(ПрисоединенныйФайлСсылка); + ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(ПрисоединенныйФайлСсылка); КонецЕсли; Если СтруктураРеквизитов.Зашифрован Тогда - ВызватьИсключение ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(ПрисоединенныйФайлСсылка); + ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(ПрисоединенныйФайлСсылка); КонецЕсли; ЭлектроннаяЦифроваяПодпись.ЗанестиИнформациюОПодписи( @@ -604,7 +699,9 @@ // ПрисоединенныйФайл - Ссылка или Объект присоединенного файла. // МассивПодписей - Массив Структур данных подписей для заполнения в табличной части ЭлектронныеЦифровыеПодписи. // -Процедура ЗанестиИнформациюОПодписях(Знач ПрисоединенныйФайл, Знач МассивПодписей, Знач ИдентификаторФормы = Неопределено) Экспорт +Процедура ЗанестиИнформациюОПодписях(Знач ПрисоединенныйФайл, + Знач МассивПодписей, + Знач ИдентификаторФормы = Неопределено) Экспорт Если ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ПрисоединенныйФайл)) Тогда ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); @@ -619,13 +716,15 @@ Зашифрован = ФайлОбъект.Зашифрован; Если НЕ Редактирует.Пустая() Тогда - СтрокаИсключения = ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(ФайлСсылка); - ВызватьИсключение СтрокаИсключения; + ВызватьИсключение + ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла( + ФайлСсылка); КонецЕсли; Если Зашифрован Тогда - СтрокаИсключения = ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(ФайлСсылка); - ВызватьИсключение СтрокаИсключения; + ВызватьИсключение + ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла( + ФайлСсылка); КонецЕсли; Для Каждого ДанныеПодписи Из МассивПодписей Цикл @@ -639,7 +738,6 @@ ДанныеПодписи.ИмяФайлаПодписи, ДанныеПодписи.КомуВыданСертификат, ДанныеПодписи.ДвоичныеДанныеСертификата); - КонецЦикла; ФайлОбъект.Записать(); @@ -647,69 +745,125 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// Обработчики подписок на события -// Возвращает новый идентификатор объекта. -// Для получения нового идентификатора выбирает последний идентификатор объекта -// из регистра НаличиеПрисоединенныхФайлов увеличивает его значение -// на одну единицу и возвращает полученный результат. -// -// Возвращаемое значение: -// Строка (10) - новый идентификатор объекта. -// -Функция ПолучитьОчереднойИдентификаторОбъекта() +// Обработчик подписки присоединенного файла на событие "Перед записью". +Процедура ПередЗаписьюПрисоединенногоФайла(Источник, Отказ) Экспорт - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | НаличиеПрисоединенныхФайлов.ИдентификаторОбъекта КАК ИдентификаторОбъекта - |ИЗ - | РегистрСведений.НаличиеПрисоединенныхФайлов КАК НаличиеПрисоединенныхФайлов - | - |УПОРЯДОЧИТЬ ПО - | ИдентификаторОбъекта УБЫВ"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - РезультатВыполненияЗапроса = Запрос.Выполнить(); - - // Вычисление нового идентификатора объекта. - - Если РезультатВыполненияЗапроса.Пустой() Тогда - Строка = "0000000000"; // По длине ресурса ИдентификаторОбъекта. - Иначе - Выборка = РезультатВыполненияЗапроса.Выбрать(); - Выборка.Следующий(); - Строка = Выборка.ИдентификаторОбъекта; - - // Правила вычисления, как в обычном сложении - при - // заполнении текущего разряда следующий разряд увеличивается - // на единицу, при этом в текущем разряде значение становится - // равным нулю. Значениями разрядов выступают символы - // [0..9] и [a..z]. Таким образом один разряд может содержать - // 34 значения. - - Позиция = 10; // 9- индекс 10-го символа - Пока Позиция > 0 Цикл - - Символ = Сред(Строка, Позиция, 1); - - Если Символ = "z" Тогда - Строка = Лев(Строка, Позиция-1) + "0" + Прав(Строка, 10 - Позиция); - Позиция = Позиция - 1; - Продолжить; - - ИначеЕсли Символ = "9" Тогда - НовыйСимвол = "a"; - Иначе - НовыйСимвол = Символ(КодСимвола(Символ)+1); - КонецЕсли; - - Строка = Лев(Строка, Позиция-1) + НовыйСимвол + Прав(Строка, 10 - Позиция); - Прервать; - КонецЦикла; + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; КонецЕсли; - Возврат Строка; + Источник.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Источник.Расширение); + + Если Источник.ЭтоНовый() Тогда + Источник.Автор = Пользователи.ТекущийПользователь(); + КонецЕсли; + +КонецПроцедуры + +// Обработчик подписки присоединенного файла на событие "Перед удалением". +Процедура ПередУдалениемПрисоединенногоФайла(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПрисоединенныеФайлыСлужебный.ПередУдалениемПрисоединенногоФайлаСервер( + Источник.Ссылка, + Источник.ВладелецФайла, + Источник.Том, + Источник.ТипХраненияФайла, + Источник.ПутьКФайлу); + +КонецПроцедуры + +// Обработчик подписки присоединенного файла на событие "При записи". +Процедура ПриЗаписиПрисоединенногоФайла(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник); + Возврат; + КонецЕсли; + + ПрисоединенныеФайлыСлужебный.ПриЗаписиПрисоединенногоФайлаСервер( + Источник.ВладелецФайла); + +КонецПроцедуры + +// Обработчик подписки присоединенного файла на событие "Обработка получения формы". +Процедура ОбработкаПолученияФормыПрисоединенногоФайла(Источник, + ВидФормы, + Параметры, + ВыбраннаяФорма, + ДополнительнаяИнформация, + СтандартнаяОбработка) Экспорт + + Если ВидФормы = "ФормаОбъекта" Тогда + ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныйФайл"; + СтандартнаяОбработка = Ложь; + + ИначеЕсли ВидФормы = "ФормаСписка" Тогда + ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныеФайлы"; + СтандартнаяОбработка = Ложь; + КонецЕсли; +КонецПроцедуры + +// Обработчик подписки владельца присоединенного файла на событие "Перед записью". +// Помечает на удаление связанные файлы. +// +// Параметры: +// Источник - Объект - владелец присоединенного файла, кроме ДокументОбъект. +// Отказ - Булево - признак отказа от записи. +// +Процедура УстановитьПометкуУдаленияПрисоединенныхФайлов(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПометитьНаУдалениеПриложенныеФайлы(Источник); + +КонецПроцедуры + +// Обработчик подписки владельца-документа присоединенного файла на событие "Перед записью". +// Помечает на удаление связанные файлы. +// +// Параметры: +// Источник - ДокументОбъект - владелец присоединенного файла. +// Отказ - Булево - признак отказа от записи. +// +Процедура УстановитьПометкуУдаленияПрисоединенныхФайловДокументов(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + ПометитьНаУдалениеПриложенныеФайлы(Источник); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент +// справочника хранимого файла. +// +Функция ТекстОшибкиПриПолученииФайла(Знач ИнформацияОбОшибке, Знач Файл) + + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); + + Если Файл <> Неопределено Тогда + СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 + | + |Ссылка на файл: ""%2"".'"), + СообщениеОбОшибке, + ПолучитьНавигационнуюСсылку(Файл) ); + КонецЕсли; + + Возврат СообщениеОбОшибке; КонецФункции @@ -740,923 +894,75 @@ КонецФункции -// Обновляет свойства файла при окончании редактирования. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на присоединенный файл. -// ИнформацияОФайле - Структура со свойствами: -// <обязательные> -// АдресФайлаВоВременномХранилище - Строка - адрес новых двоичных данных файла. -// АдресВременногоХранилищаТекста - Строка - адрес новых двоичных данных текста, -// извлеченного из файла. -// <необязательные> -// ДатаМодификацииУниверсальная - Дата - дата последнего изменения файла, если -// свойство не указано или не заполнено, тогда будет -// установлена текущая дата сеанса. -// Расширение - Строка - новое расширение файла. -// -Процедура ПоместитьФайлВХранилищеИОсвободить(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт +Процедура ПометитьНаУдалениеПриложенныеФайлы(Знач Источник) - ИнформацияОФайле.Вставить("Редактирует", Справочники.Пользователи.ПустаяСсылка()); - - ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле) - -КонецПроцедуры - -// Отменяет редактирование файла. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется освободить. -// -Процедура ОсвободитьФайл(Знач ПрисоединенныйФайл) Экспорт - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - Иначе - ФайлОбъект = ПрисоединенныйФайл; - КонецЕсли; - - Если НЕ ФайлОбъект.Редактирует.Пустая() Тогда - ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); - ФайлОбъект.Записать(); - Конецесли; - -КонецПроцедуры - -// Отмечает файл, как редактируемый. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется отметить. -// -Процедура ЗанятьФайлДляРедактированияСервер(Знач ПрисоединенныйФайл) Экспорт - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - Иначе - ФайлОбъект = ПрисоединенныйФайл; - КонецЕсли; - - ФайлОбъект.Редактирует = Пользователи.ТекущийПользователь(); - ФайлОбъект.Записать(); - -КонецПроцедуры - -// Помещает зашифрованные данные файла в хранилище и устанавливает файлу признак Зашифрован. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на присоединенный файл. -// ЗашифрованныеДанные - Структура со свойством: -// АдресВременногоХранилища - Строка - адрес зашифрованных двоичных данных. -// МассивОтпечатков - Массив Структур отпечатков по сертификатам. -// -Процедура Зашифровать(Знач ПрисоединенныйФайл, Знач ЗашифрованныеДанные, Знач МассивОтпечатков) Экспорт - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ПрисоединенныйФайлОбъект.Заблокировать(); - Иначе - ПрисоединенныйФайлОбъект = ПрисоединенныйФайл; - КонецЕсли; - - Для Каждого ОтпечатокСтруктура Из МассивОтпечатков Цикл - НоваяСтрока = ПрисоединенныйФайлОбъект.СертификатыШифрования.Добавить(); - НоваяСтрока.Отпечаток = ОтпечатокСтруктура.Отпечаток; - НоваяСтрока.Представление = ОтпечатокСтруктура.Представление; - НоваяСтрока.Сертификат = Новый ХранилищеЗначения(ОтпечатокСтруктура.Сертификат); - КонецЦикла; - - РеквизитыЗначения = Новый Структура; - РеквизитыЗначения.Вставить("Зашифрован", Истина); - РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения("")); - ОбновитьДвоичныеДанныеФайлаНаСервере(ПрисоединенныйФайлОбъект, ЗашифрованныеДанные.АдресВременногоХранилища, РеквизитыЗначения); - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ПрисоединенныйФайлОбъект.Записать(); - ПрисоединенныйФайлОбъект.Разблокировать(); - КонецЕсли; - -КонецПроцедуры - -// Помещает расшифрованные данные файла в хранилище и снимает файлу признак Зашифрован. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на присоединенный файл. -// ЗашифрованныеДанные - Структура со свойством: -// АдресВременногоХранилища - Строка - адрес расшифрованных двоичных данных. -// -Процедура Расшифровать(Знач ПрисоединенныйФайл, Знач РасшифрованныеДанные) Экспорт - - Перем Отказ; - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ПрисоединенныйФайлОбъект.Заблокировать(); - Иначе - ПрисоединенныйФайлОбъект = ПрисоединенныйФайл; - КонецЕсли; - - ПрисоединенныйФайлОбъект.СертификатыШифрования.Очистить(); - - РеквизитыЗначения = Новый Структура; - РеквизитыЗначения.Вставить("Зашифрован", Ложь); - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилища); - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ИзвлеченныйТекст = ""; - - Если ЭтоАдресВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилищаТекста) Тогда - ИзвлеченныйТекст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилищаТекста); - СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - - ИначеЕсли НЕ ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда - // Тексты извлекаются сразу, а не в фоновом задании. - СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); - КонецЕсли; - - ПрисоединенныйФайлОбъект.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; - - РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения(ИзвлеченныйТекст, Новый СжатиеДанных(9))); - - ОбновитьДвоичныеДанныеФайлаНаСервере(ПрисоединенныйФайлОбъект, ДвоичныеДанные, РеквизитыЗначения); - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ПрисоединенныйФайлОбъект.Записать(); - ПрисоединенныйФайлОбъект.Разблокировать(); - КонецЕсли; - -КонецПроцедуры - -// Вызывает исключение в стандартной форме списка справочника присоединенных файлов. -Процедура ВызватьИсключениеОткрытияФормы(Форма) Экспорт - - // Пропуск инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Форма.Параметры.Свойство("АвтоТест") Тогда + Если Источник.ЭтоНовый() ТОгда Возврат; КонецЕсли; - ВызватьИсключение НСтр("ru = 'Самостоятельное использование формы не предусмотрено.'"); - -КонецПроцедуры - -// Размещает файлы из сформированного образа. -Процедура ДобавитьФайлыВТомаПриРазмещении(Знач СоответствиеПутейФайлов, Знач ТипХраненияФайлов, Знач Файлы) Экспорт - - Для Каждого ЭлементСоответствия Из СоответствиеПутейФайлов Цикл - - Позиция = Найти(ЭлементСоответствия.Ключ, "CatalogRef"); - - Если Позиция = 0 Тогда - Продолжить; - КонецЕсли; - - ПолныйПутьФайлаНаДиске = СоответствиеПутейФайлов.Получить(ЭлементСоответствия.Ключ); - - Если ПолныйПутьФайлаНаДиске = Неопределено Тогда - Продолжить; - КонецЕсли; - - УникальныйИдентификатор = Новый УникальныйИдентификатор(Лев(ЭлементСоответствия.Ключ, Позиция - 1)); - - ИмяСправочника = Прав(ЭлементСоответствия.Ключ, СтрДлина(ЭлементСоответствия.Ключ) - Позиция -10); - Ссылка = Справочники[ИмяСправочника].ПолучитьСсылку(УникальныйИдентификатор); - - Если Ссылка.Пустая() Тогда - Продолжить; - КонецЕсли; - - Объект = Ссылка.ПолучитьОбъект(); - - Если Объект.ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Продолжить; - КонецЕсли; - - Если Файлы.Найти(ТипЗнч(Объект)) = Неопределено Тогда - Файлы.Добавить(ТипЗнч(Объект)); - КонецЕсли; - - // Размещение файлов в базе-приемнике внутри базы, независимо от хранения в базе-источнике. - Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - - Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - Объект.ПутьКФайлу = ""; - Объект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаНаДиске); - - ОбновитьДвоичныеДанныеФайлаНаСервере(Объект, ПоместитьВоВременноеХранилище(ДвоичныеДанные)); - - Иначе // Размещение файлов в базе-приемнике внутри тома, независимо от хранения в базе-источнике. - - ФайлИсх = Новый Файл(ПолныйПутьФайлаНаДиске); - РазмерФайла = ФайлИсх.Размер(); - - ВремяИзменения = Объект.ДатаМодификацииУниверсальная; - ИмяБезРасширения = Объект.Наименование; - Расширение = Объект.Расширение; - Зашифрован = Объект.Зашифрован; - - ПолныйПутьНовый = ФайлИсх.Путь + ИмяБезРасширения + "." + Объект.Расширение; - ПереместитьФайл(ПолныйПутьФайлаНаДиске, ПолныйПутьНовый); - - ПутьКФайлуНаТоме = ""; - СсылкаНаТом = Неопределено; - - // Добавление файла в один из томов (где есть свободное место). - - ФайловыеФункции.ДобавитьНаДиск( - ПолныйПутьНовый, - ПутьКФайлуНаТоме, - СсылкаНаТом, - ВремяИзменения, - "", - ИмяБезРасширения, - Расширение, - РазмерФайла, - Зашифрован); - - Объект.ПутьКФайлу = ПутьКФайлуНаТоме; - Объект.Том = СсылкаНаТом.Ссылка; - - КонецЕсли; - - Объект.Записать(); - - Если НЕ ПустаяСтрока(ПолныйПутьНовый) Тогда - УдалитьФайлы(ПолныйПутьНовый); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Удаляет регистрацию в плане обмена при обмене файлами. -// -// Параметры: -// ПланОбменаСсылка - Ссылка на план обмена. -// ТипыФайлов - Массив Типов справочников с присоединенными файлами. -// -Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка, ТипыФайлов) Экспорт - - Для Каждого Тип Из ТипыФайлов Цикл - ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.НайтиПоТипу(Тип)); - КонецЦикла; - -КонецПроцедуры - -// Возвращает свойства присоедиеннного файла - двоичные данные и подпись. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на присоединенный файл. -// АдресПодписи - Строка - адрес подписи во временном хранилище. -// -// Возвращаемое значение: -// Структура со свойствами: -// ДвоичныеДанные - ДвоичныеДанные присоединенного файла. -// ДвоичныеДанныеПодписи - ДвоичныеДанные подписи. -// -Функция ПолучитьДвоичныеДанныеФайлаИПодписи(Знач ПрисоединенныйФайл, Знач АдресПодписи) Экспорт - - Свойства = Новый Структура; - Свойства.Вставить("ДвоичныеДанные", ПолучитьДвоичныеДанныеФайла(ПрисоединенныйФайл)); - Свойства.Вставить("ДвоичныеДанныеПодписи", ПолучитьИзВременногоХранилища(АдресПодписи)); - - Возврат Свойства; - -КонецФункции - -// Заполняет текст запроса для получения присоединенных файлов у которых не извлечен текст. -// Текст запроса формируется по всем справочникам присоединенных файлов. В качестве параметра -// может прийти другой запрос, с которым следует сделать объединение. -// -// Параметры: -// ТекстЗапроса - Строка (возвращаемое значение), варианты передаваемых значений: -// Пустая строка - будет возвращен требуемый текст запроса. -// Непустая строка - будет возвращен требуемый текст запроса, добавленный -// к переданному тексту посредством "ОБЪЕДИНИТЬ ВСЕ". -// -// ПолучитьВсеФайлы - Булево - начальное значение Ложь. Позволяет отключить выборку присоединенных -// файлов по частям, если передать Истина. -// -Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса = "", ПолучитьВсеФайлы = Ложь) Экспорт - - Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда - ТекстЗапроса = ТекстЗапроса + - " - | - |ОБЪЕДИНИТЬ ВСЕ - |"; - КонецЕсли; - - ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); - - ЧислоФайловВВыборке = Цел(100 / ТипыВладельцев.Количество()); - ЧислоФайловВВыборке = ?(ЧислоФайловВВыборке < 10, 10, ЧислоФайловВВыборке); - - Индекс = 1; - Для Каждого Тип Из ТипыВладельцев Цикл - - ИмяСправочникаПрисоединенныхФайлов = Метаданные.НайтиПоТипу(Тип).Имя + "ПрисоединенныеФайлы"; - - ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляФайловСНеизвлеченнымТекстом( - ИмяСправочникаПрисоединенныхФайлов, - ЧислоФайловВВыборке, - ПолучитьВсеФайлы); - - Если Индекс < ТипыВладельцев.Количество() Тогда - ТекстЗапроса = ТекстЗапроса + - " - | - |ОБЪЕДИНИТЬ ВСЕ - |"; - КонецЕсли; - Индекс = Индекс + 1; - КонецЦикла; - -КонецПроцедуры - -// Возвращает путь к файлу на диске. Если файл хранится в информационной базе, -// предварительно сохраняет его. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на присоединенный файл. -// -// Возвращаемое значение: -// Строка - полный путь к файлу на диске. -// -Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(Знач ПрисоединенныйФайл) Экспорт - - ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(ПрисоединенныйФайл.Расширение); - - Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ПрисоединенныеФайлы.ПрисоединенныйФайл, - | ПрисоединенныеФайлы.ХранимыйФайл - |ИЗ - | РегистрСведений.ПрисоединенныеФайлы КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.ПрисоединенныйФайл = &ПрисоединенныйФайл"; - - Запрос.УстановитьПараметр("ПрисоединенныйФайл", ПрисоединенныйФайл.Ссылка); - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Следующий() Тогда - ДвоичныеДанные = Выборка.ХранимыйФайл.Получить(); - ДвоичныеДанные.Записать(ИмяФайлаСПутем); - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка открытия файла: файл не найден в информационной базе. - |Обратитесь к администратору. - | - |Файл: ""%1.%2"".'"), - ПрисоединенныйФайл.Наименование, - ПрисоединенныйФайл.Расширение); - КонецЕсли; - Иначе - Если НЕ ПрисоединенныйФайл.Том.Пустая() Тогда - ИмяФайлаСПутем = ФайловыеФункции.ПолныйПутьТома(ПрисоединенныйФайл.Том) + ПрисоединенныйФайл.ПутьКФайлу; - КонецЕсли; - КонецЕсли; - - Возврат ИмяФайлаСПутем; - -КонецФункции - -// Записывает присоединеннный файл в привилегированном режиме. -// -// Параметры: -// ФайлОбъект - Объект присоединенного файла. -// -Процедура ЗаписатьИзвлеченныйТекст(ФайлОбъект) Экспорт - УстановитьПривилегированныйРежим(Истина); - Попытка - ФайлОбъект.Записать(); - Исключение - ВызватьИсключение; - КонецПопытки; + ИсточникСсылкаПометкаУдаления = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Источник.Ссылка, "ПометкаУдаления"); -КонецПроцедуры - -// Заполняет параметр КоличествоФайловВТомах. -Процедура ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах) Экспорт - - ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); - - Для Каждого Тип Из ТипыВладельцев Цикл - - ИмяСправочникаПрисоединенныхФайлов = Метаданные.НайтиПоТипу(Тип).Имя + "ПрисоединенныеФайлы"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапросаДляФайловВТомах(ИмяСправочникаПрисоединенныхФайлов); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - КоличествоФайловВТомах = КоличествоФайловВТомах + Выборка.КоличествоФайлов; - КонецЕсли - КонецЦикла; - -КонецПроцедуры - -// Возвращает количество версий с неизвлеченным текстом. -Функция ПолучитьКоличествоВерсийСНеизвлеченнымТекстом() Экспорт - - КоличествоФайлов = 0; - - ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); - - Для Каждого Тип Из ТипыВладельцев Цикл - ИмяСправочникаПрисоединенныхФайлов = Метаданные.НайтиПоТипу(Тип).Имя + "ПрисоединенныеФайлы"; - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапросаДляЧислаФайловСНеизвлеченнымТекстом(ИмяСправочникаПрисоединенныхФайлов); - - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - КоличествоФайлов = КоличествоФайлов + Выборка.КоличествоФайлов; - КонецЕсли - КонецЦикла; - - Возврат КоличествоФайлов; - -КонецФункции - -// Возвращает Истина в параметре ЕстьХранимыеФайлы, если есть хранимые файлы к объекту ВнешнийОбъект. -// Определяет есть ли хранимые файлы у внешнего объекта. -// -// Параметры: -// ВнешнийОбъект - Ссылка на внешний объект. -// ЕстьХранимыеФайлы - Булево (возвращаемое значение), варианты значений параметра: -// Истина - возврат, -// Ложь - устанавливает Истина, если объект имеет хранимые файлы. -// -Процедура ОпределитьНаличиеХранимыхФайлов(Знач ВнешнийОбъект, ЕстьХранимыеФайлы) Экспорт - - Если ЕстьХранимыеФайлы = Истина Тогда + Если Источник.ПометкаУдаления = ИсточникСсылкаПометкаУдаления Тогда Возврат; КонецЕсли; - ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); - Если ТипыВладельцев.Найти(ТипЗнч(ВнешнийОбъект)) <> Неопределено Тогда - ЕстьХранимыеФайлы = ОбъектИмеетФайлы(ВнешнийОбъект); - КонецЕсли; - -КонецПроцедуры - -// Заполняет массив ХранимыеФайлы данными хранимых файлов объекта ВнешнийОбъект. -Процедура ПолучитьХранимыеФайлы(Знач ВнешнийОбъект, Знач ХранимыеФайлы) Экспорт - - ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлыКОбъекту.ТипПараметраКоманды.Типы(); - Если ТипыВладельцев.Найти(ТипЗнч(ВнешнийОбъект)) = Неопределено Тогда - Возврат; - КонецЕсли; - - МассивФайлов = ПолучитьВсеПодчиненныеФайлы(ВнешнийОбъект); - Для Каждого Файл Из МассивФайлов Цикл - - ДанныеФайла = Новый Структура; - ДанныеФайла.Вставить("ДатаМодификацииУниверсальная", Файл.ДатаМодификацииУниверсальная); - ДанныеФайла.Вставить("Размер", Файл.Размер); - ДанныеФайла.Вставить("Наименование", Файл.Наименование); - ДанныеФайла.Вставить("Расширение", Файл.Расширение); - ДанныеФайла.Вставить("ДвоичныеДанныеФайла", ПолучитьДанныеФайла(Файл, Неопределено).СсылкаНаДвоичныеДанныеФайла); - ДанныеФайла.Вставить("Текст", Файл.ТекстХранилище.Получить()); - - ХранимыеФайлы.Добавить(ДанныеФайла); - КонецЦикла; - -КонецПроцедуры - -Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(Знач ИмяСправочника, Знач ЧислоФайловВВыборке, Знач ПолучитьВсеФайлы = Ложь) - - ТекстЗапроса = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ПрисоединенныеФайлы.Ссылка КАК Ссылка, - | ПрисоединенныеФайлы.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, - | ПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, - | ПрисоединенныеФайлы.Расширение КАК Расширение, - | ПрисоединенныеФайлы.Наименование КАК Наименование - |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы - |ГДЕ - | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) - | И НЕ ПрисоединенныеФайлы.Зашифрован"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 1", ?( - ПолучитьВсеФайлы, - "", - "ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН=")) ); - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); - - Возврат ТекстЗапроса; - -КонецФункции - -Функция ТекстЗапросаДляФайловВТомах(Знач ИмяСправочника) - ТекстЗапроса = "ВЫБРАТЬ - | ЕСТЬNULL(КОЛИЧЕСТВО(ПрисоединенныеФайлы.Ссылка), 0) КАК КоличествоФайлов + | Файлы.Ссылка КАК Ссылка, + | Файлы.Редактирует КАК Редактирует |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы + | &ИмяСправочника КАК Файлы |ГДЕ - | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)"; + | Файлы.ВладелецФайла = &ВладелецФайла"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); - - Возврат ТекстЗапроса; - -КонецФункции - -Функция ТекстЗапросаДляЧислаФайловСНеизвлеченнымТекстом(Знач ИмяСправочника) - - ТекстЗапроса = - "ВЫБРАТЬ - | ЕСТЬNULL(КОЛИЧЕСТВО(ПрисоединенныеФайлы.Ссылка), 0) КАК КоличествоФайлов - |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы - |ГДЕ - | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) - | И НЕ ПрисоединенныеФайлы.Зашифрован"; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); - - Возврат ТекстЗапроса; - -КонецФункции - -Процедура ОбновитьДвоичныеДанныеФайлаНаСервере(Знач ПрисоединенныйФайл, - Знач АдресФайлаВоВременномХранилищеДвоичныеДанные, - Знач РеквизитыЗначения = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - ФайлСсылка = ПрисоединенныйФайл; - Иначе - ФайлОбъект = ПрисоединенныйФайл; - ФайлСсылка = ФайлОбъект.Ссылка; - КонецЕсли; - - Если ТипЗнч(АдресФайлаВоВременномХранилищеДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда - ДвоичныеДанные = АдресФайлаВоВременномХранилищеДвоичныеДанные; - Иначе - ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилищеДвоичныеДанные); - КонецЕсли; - - ФайлОбъект.Изменил = Пользователи.ТекущийПользователь(); - - Если ТипЗнч(РеквизитыЗначения) = Тип("Структура") Тогда - ЗаполнитьЗначенияСвойств(ФайлОбъект, РеквизитыЗначения); - КонецЕсли; - - ТранзакцияАктивна = Ложь; - - Попытка - Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - НачатьТранзакцию(); - ТранзакцияАктивна = Истина; - МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ПрисоединенныйФайл = ФайлСсылка; - МенеджерЗаписи.Прочитать(); - МенеджерЗаписи.ПрисоединенныйФайл = ФайлСсылка; - МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); - МенеджерЗаписи.Записать(); - Иначе - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; - - Попытка - ФайлНаДиске = Новый Файл(ПолныйПуть); - ФайлНаДиске.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); - - ФайловыеФункции.ДобавитьНаДиск( - ДвоичныеДанные, - ФайлОбъект.ПутьКФайлу, - ФайлОбъект.Том, - ФайлОбъект.ДатаМодификацииУниверсальная, - "", - ФайлОбъект.Наименование, - ФайлОбъект.Расширение, - ДвоичныеДанные.Размер(), - ФайлОбъект.Зашифрован); - Исключение - ИнформацияОбОшибке = ИнформацияОбОшибке(); - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Запись файла на диске'"), - УровеньЖурналаРегистрации.Ошибка, - Метаданные.Справочники[ФайлСсылка.Метаданные().Имя], - ФайлСсылка, - ТекстОшибкиПриСохраненииФайлаВТоме(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка)); - - ВызватьИсключение ТекстОшибкиПриСохраненииФайлаВТоме(КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка); - КонецПопытки; - - КонецЕсли; - - ФайлОбъект.Размер = ДвоичныеДанные.Размер(); - - ФайлОбъект.Записать(); - - Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда - ФайлОбъект.Разблокировать(); - КонецЕсли; - - Если ТранзакцияАктивна Тогда - ЗафиксироватьТранзакцию(); - КонецЕсли; - - Исключение - Если ТранзакцияАктивна Тогда - ОтменитьТранзакцию(); - КонецЕсли; - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Обновление данных присоединенного файла на сервере'"), - УровеньЖурналаРегистрации.Ошибка, - , - , - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Записывает двоичные данные файла в информационную базу. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на присоединенный файл. -// ДвоичныеДанные - ДвоичныеДанные, которые требуется записать. -// -Процедура ЗаписатьФайлВИнформационнуюБазу(Знач ПрисоединенныйФайл, Знач ДвоичныеДанные) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ПрисоединенныйФайл = ПрисоединенныйФайл; - МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); - МенеджерЗаписи.Записать(Истина); - -КонецПроцедуры - -// Определяет, что к объекту присоединен по крайней мере один файл. -Функция ОбъектИмеетФайлы(Знач ВладелецФайла, Знач ФайлИсключение = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ИмяСправочника = ВладелецФайла.Метаданные().Имя + "ПрисоединенныеФайлы"; - - ТекстЗапроса = - "ВЫБРАТЬ - | ПрисоединенныеФайлы.Ссылка - |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла"; - - Если ФайлИсключение <> Неопределено Тогда - ТекстЗапроса = ТекстЗапроса + - " - | И ПрисоединенныеФайлы.Ссылка <> &Ссылка"; - КонецЕсли; - - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); + ПолноеИмяСправочника = "Справочник." + Источник.Метаданные().Имя + "ПрисоединенныеФайлы"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", ПолноеИмяСправочника); Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; - Запрос.Параметры.Вставить("ВладелецФайла", ВладелецФайла); + Запрос.УстановитьПараметр("ВладелецФайла", Источник.Ссылка); - Если ФайлИсключение <> Неопределено Тогда - Запрос.Параметры.Вставить("Ссылка", ФайлИсключение); - КонецЕсли; + Выборка = Запрос.Выполнить().Выбрать(); - Если Запрос.Выполнить().Пустой() Тогда - Возврат Ложь; - Иначе - Возврат Истина; - КонецЕсли; - -КонецФункции - -// Возвращает массив присоединенных файлов для указанного владельца. -// -// Параметры: -// ВладелецФайла - Ссылка на владельца присоединенных файлов. -// -// Возвращаемое значение: -// Массив ссылок на присоединенные файлы. -// -Функция ПолучитьВсеПодчиненныеФайлы(Знач ВладелецФайла) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ТекстЗапроса = - "ВЫБРАТЬ - | ПрисоединенныеФайлы.Ссылка - |ИЗ - | &ИмяСправочника КАК ПрисоединенныеФайлы - |ГДЕ - | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла"; - - ИмяСправочника = ВладелецФайла.Метаданные().Имя + "ПрисоединенныеФайлы"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); - - Запрос = Новый Запрос(ТекстЗапроса); - Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); - - Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); - -КонецФункции - -// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент -// справочника хранимого файла. -// -Функция ТекстОшибкиПриПолученииФайла(Знач ИнформацияОбОшибке, Знач Файл) - - СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке); - - Если Файл <> Неопределено Тогда - СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '%1 - | - |Ссылка на файл: ""%2"".'"), - СообщениеОбОшибке, - ПолучитьНавигационнуюСсылку(Файл) ); - КонецЕсли; - - Возврат СообщениеОбОшибке; - -КонецФункции - -// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент -// справочника хранимого файла. -// -Функция ТекстОшибкиПриСохраненииФайлаВТоме(Знач СообщениеОбОшибке, Знач Файл) - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка, при сохранении файла в томе: - |%1 - | - |Ссылка на файл: ""%2"".'"), - СообщениеОбОшибке, - ПолучитьНавигационнуюСсылку(Файл) ); - -КонецФункции - -Функция ИзвлечьТекст(Знач ДвоичныеДанные, Знач Расширение, ИзвлеченныйТекст) - - Если ФайловыеФункции.ЭтоПлатформаWindows() - И ФайловыеФункции.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда - - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение); - ДвоичныеДанные.Записать(ИмяВременногоФайла); - - Отказ = Ложь; - ИзвлеченныйТекст = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ИмяВременногоФайла, , Отказ); - - УдалитьФайлы(ИмяВременногоФайла); - - Если Отказ Тогда - Возврат Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; - Иначе - Возврат Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + Пока Выборка.Следующий() Цикл + Если Источник.ПометкаУдаления И Не Выборка.Редактирует.Пустая() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" не может быть удален, + |т.к. содержит файл ""%2"", + |занятый для редактирования.'"), + Строка(Источник.Ссылка), + Строка(Выборка.Ссылка)); КонецЕсли; - Иначе - ИзвлеченныйТекст = ""; - Возврат Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - КонецЕсли; - -КонецФункции - -// Обработчик подписки на событие "Перед удалением" присоединенного файла. -Процедура ПередУдалениемПрисоединенногоФайлаСервер(Знач Ссылка, Знач ВладелецФайла, Знач Том, Знач ТипХраненияФайла, Знач ПутьКФайлу) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если НЕ ОбъектИмеетФайлы(ВладелецФайла, Ссылка) Тогда - МенеджерЗаписи = РегистрыСведений.НаличиеПрисоединенныхФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбъектСФайлами = ВладелецФайла; - МенеджерЗаписи.Прочитать(); - МенеджерЗаписи.ОбъектСФайлами = ВладелецФайла; - МенеджерЗаписи.ЕстьФайлы = Ложь; - МенеджерЗаписи.Записать(); - КонецЕсли; - - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда - Если НЕ Том.Пустая() Тогда - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(Том) + ПутьКФайлу; - Попытка - Файл = Новый Файл(ПолныйПуть); - Файл.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПуть); - ПутьСПодкаталогом = Файл.Путь; - МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, "*.*"); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ПутьСПодкаталогом); - КонецЕсли; - Исключение - // Если файл не удален - ошибки не было. - КонецПопытки; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Обработчик подписки "при записи" присоединенного файла -// -Процедура ПриЗаписиПрисоединенногоФайлаСервер(ВладелецФайла) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ЗаписьИзменилась = Ложь; - - МенеджерЗаписи = РегистрыСведений.НаличиеПрисоединенныхФайлов.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбъектСФайлами = ВладелецФайла; - МенеджерЗаписи.Прочитать(); - - Если НЕ ЗначениеЗаполнено(МенеджерЗаписи.ОбъектСФайлами) Тогда - МенеджерЗаписи.ОбъектСФайлами = ВладелецФайла; - ЗаписьИзменилась = Истина; - КонецЕсли; - - Если НЕ МенеджерЗаписи.ЕстьФайлы Тогда - МенеджерЗаписи.ЕстьФайлы = Истина; - ЗаписьИзменилась = Истина; - КонецЕсли; - - Если ПустаяСтрока(МенеджерЗаписи.ИдентификаторОбъекта) Тогда - МенеджерЗаписи.ИдентификаторОбъекта = ПолучитьОчереднойИдентификаторОбъекта(); - ЗаписьИзменилась = Истина; - КонецЕсли; - - Если ЗаписьИзменилась Тогда - МенеджерЗаписи.Записать(); - КонецЕсли; - -КонецПроцедуры - -// Создает у Получателя копии всех присоединенных файлов Источника. -// Источник и Получатель должны быть объектами одного типа. -// -// Параметры: -// Источник - Ссылка - объект, имеющий присоединенные файлы для копирования. -// Получатель - Ссылка - объект, к которому копируются присоединенные файлы. -// -Процедура СкопироватьПрисоединенныеФайлы(Знач Источник, Знач Получатель) Экспорт - - КопируемыеФайлы = ПолучитьВсеПодчиненныеФайлы(Источник.Ссылка); - Для Каждого КопируемыйФайл Из КопируемыеФайлы Цикл - Если КопируемыйФайл.ПометкаУдаления Тогда - Продолжить; - КонецЕсли; - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(КопируемыйФайл); - КопияФайла = КопируемыйФайл.Скопировать(); - КопияФайлаСсылка = МенеджерОбъекта.ПолучитьСсылку(); - КопияФайла.УстановитьСсылкуНового(КопияФайлаСсылка); - КопияФайла.ВладелецФайла = Получатель.Ссылка; - КопияФайла.Редактирует = Справочники.Пользователи.ПустаяСсылка(); - - КопияФайла.ТекстХранилище = Новый ХранилищеЗначения(КопируемыйФайл.ТекстХранилище.Получить()); - КопияФайла.ФайлХранилище = Новый ХранилищеЗначения(КопируемыйФайл.ФайлХранилище.Получить()); - - КопияФайла.ЭлектронныеЦифровыеПодписи.Очистить(); - Для Каждого КопируемаяСтрокаТаблицы Из КопируемыйФайл.ЭлектронныеЦифровыеПодписи Цикл - КопияСтрокиТаблицы = КопияФайла.ЭлектронныеЦифровыеПодписи.Добавить(); - ЗаполнитьЗначенияСвойств(КопияСтрокиТаблицы, КопируемаяСтрокаТаблицы); - КопияСтрокиТаблицы.Подпись = КопируемаяСтрокаТаблицы.Подпись; - КопияСтрокиТаблицы.Сертификат = КопируемаяСтрокаТаблицы.Сертификат; - КонецЦикла; - - КопияФайла.СертификатыШифрования.Очистить(); - Для Каждого КопируемаяСтрокаТаблицы Из КопируемыйФайл.СертификатыШифрования Цикл - КопияСтрокиТаблицы = КопияФайла.СертификатыШифрования.Добавить(); - ЗаполнитьЗначенияСвойств(КопияСтрокиТаблицы, КопируемаяСтрокаТаблицы); - КопияСтрокиТаблицы.Сертификат = КопируемаяСтрокаТаблицы.Сертификат; - КонецЦикла; - - ДвоичныеДанные = ПолучитьДвоичныеДанныеФайла(КопируемыйФайл); - КопияФайла.ТипХраненияФайла = ФайловыеФункции.ПолучитьТипХраненияФайлов(); - Если ФайловыеФункции.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ЗаписатьФайлВИнформационнуюБазу(КопияФайлаСсылка, ДвоичныеДанные); - Иначе - // добавить в один из томов (где есть свободное место) - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, КопияФайла.ПутьКФайлу, КопияФайла.Том, - КопияФайла.ДатаМодификацииУниверсальная, "", - КопияФайла.Наименование, КопияФайла.Расширение, КопияФайла.Размер); - КонецЕсли; - КопияФайла.Записать(); + ФайлОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + ФайлОбъект.УстановитьПометкуУдаления(Источник.ПометкаУдаления); КонецЦикла; КонецПроцедуры +Процедура ЗаписатьДанныеФайлаВРегистрПриОбмене(Знач Источник) + + Перем ДвоичныеДанныеФайла; + + Если Источник.ДополнительныеСвойства.Свойство("ДвоичныеДанныеФайла", ДвоичныеДанныеФайла) Тогда + НаборЗаписей = РегистрыСведений.ПрисоединенныеФайлы.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ПрисоединенныйФайл.Использование = Истина; + НаборЗаписей.Отбор.ПрисоединенныйФайл.Значение = Источник.Ссылка; + + Запись = НаборЗаписей.Добавить(); + Запись.ПрисоединенныйФайл = Источник.Ссылка; + Запись.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанныеФайла, Новый СжатиеДанных(9)); + + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(); + + Источник.ДополнительныеСвойства.Удалить("ДвоичныеДанныеФайла"); + КонецЕсли; + +КонецПроцедуры + // Переносит файлы из "Работы с файлами" в "Присоединенные файлы". Процедура ПометитьНаУдалениеВерсииФайла(Знач ФайлСсылка, Знач ВерсияИсключение) @@ -1686,3 +992,4 @@ КонецЦикла; КонецПроцедуры + diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo b/SSL/src/CommonModules/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo index 54451a624..481703a4c 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 e5f124253..8a3cd251f 100644 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыКлиент/Module.bsl @@ -22,8 +22,7 @@ ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); Если ПодключитьРасширениеРаботыСФайлами()Тогда - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - РабочийКаталогПользователя = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + РабочийКаталогПользователя = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); ПолноеИмяФайлаНаКлиенте = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; Отказ = Ложь; @@ -69,7 +68,7 @@ КонецЕсли; Иначе Если ДанныеФайла.ФайлРедактируется И ДанныеФайла.ФайлРедактируетТекущийПользователь Тогда - ФайловыеФункцииКлиент.ПоказатьНапоминаниеПриРедактировании(); + ФайловыеФункцииСлужебныйКлиент.ПоказатьНапоминаниеПриРедактировании(); КонецЕсли; ПолучитьФайл(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, ДанныеФайла.ИмяФайла, Истина); @@ -96,7 +95,7 @@ ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + НастройкиРаботыСФайлами = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); Если ПодключитьРасширениеРаботыСФайлами() Тогда @@ -107,7 +106,7 @@ Если ВыборФайла.Выбрать() Тогда ПрисоединенныеФайлыМассив = Новый Массив; - ПоместитьВыбранныеФайлыВХранилище( + ПрисоединенныеФайлыСлужебныйКлиент.ПоместитьВыбранныеФайлыВХранилище( ВыборФайла.ВыбранныеФайлы, ВладелецФайла, НастройкиРаботыСФайлами, @@ -136,7 +135,8 @@ Иначе // Если веб-клиент без подключенного расширения. #Если ВебКлиент Тогда - ПрисоединенныйФайл = ПоместитьВыбранныеФайлыВХранилищеВеб(ВладелецФайла, НастройкиРаботыСФайлами, ИдентификаторФормы); + ПрисоединенныйФайл = ПрисоединенныеФайлыСлужебныйКлиент.ПоместитьВыбранныеФайлыВХранилищеВеб( + ВладелецФайла, НастройкиРаботыСФайлами, ИдентификаторФормы); Если ПрисоединенныйФайл <> Неопределено Тогда ПоказатьОповещениеПользователя( @@ -186,7 +186,7 @@ МассивСтруктурПодписей = ОткрытьФормуМодально("ОбщаяФорма.ВыборПодписей", ПараметрыФормы); ИначеЕсли Настройка = "СохранятьВсеПодписи" Тогда - МассивСтруктурПодписей = ЭлектроннаяЦифроваяПодпись.ПолучитьВсеПодписи(ПрисоединенныйФайл, ИдентификаторФормы); + МассивСтруктурПодписей = ПрисоединенныеФайлыСлужебныйВызовСервера.ПолучитьВсеПодписи(ПрисоединенныйФайл, ИдентификаторФормы); КонецЕсли; Если ТипЗнч(МассивСтруктурПодписей) = Тип("Массив") И МассивСтруктурПодписей.Количество() > 0 Тогда @@ -283,7 +283,7 @@ // Функция ПоместитьФайлНаДискеВХранилище(Знач ДанныеФайла, ИнформацияОФайле, Знач ПолноеИмяФайлаНаКлиенте, Знач ИдентификаторФормы) Экспорт - НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + НастройкиРаботыСФайлами = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); МаксРазмерФайла = НастройкиРаботыСФайлами.МаксимальныйРазмерФайла; ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; @@ -291,7 +291,7 @@ Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + Если Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, Файл.Расширение) Тогда @@ -304,16 +304,17 @@ Если Файл.Размер() > МаксРазмерФайла Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Файл.Размер(), МаксРазмерФайла, Файл.Имя)); + ПрисоединенныеФайлыСлужебныйКлиент.СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла( + Файл.Размер(), МаксРазмерФайла, Файл.Имя)); Возврат Ложь; КонецЕсли; - ИзвлекатьТекстыФайловНаСервере = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере; + ИзвлекатьТекстыФайловНаСервере = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере; Если ИзвлекатьТекстыФайловНаСервере Тогда АдресВременногоХранилищаТекста = ""; Иначе - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайлаНаКлиенте, ИдентификаторФормы); + АдресВременногоХранилищаТекста = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ПолноеИмяФайлаНаКлиенте, ИдентификаторФормы); КонецЕсли; Описание = Новый ОписаниеПередаваемогоФайла(ПолноеИмяФайлаНаКлиенте, ""); @@ -374,7 +375,7 @@ НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб) |Пожалуйста, подождите...'"), ДанныеФайла.ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб) ); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб) ); Состояние(ТекстПояснения); @@ -473,107 +474,15 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Добавляет файлы перетаскиваением в список файлов. -// -// Параметры: -// ВладелецФайла - Ссылка - владелец файла. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// МассивИменФайлов - Массив Строк - путей к файлам. -// -Процедура ДобавитьФайлыПеретаскиванием(Знач ВладелецФайла, Знач ИдентификаторФормы, Знач МассивИменФайлов) Экспорт +// См. эту функцию в модуле ПрисоединенныеФайлы. +Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, + Знач ИдентификаторФормы = Неопределено, + Знач ПолучатьСсылкуНаДвоичныеДанные = Истина) Экспорт - НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); - - ПрисоединенныеФайлыМассив = Новый Массив; - ПоместитьВыбранныеФайлыВХранилище( - МассивИменФайлов, - ВладелецФайла, - НастройкиРаботыСФайлами, - ПрисоединенныеФайлыМассив, - ИдентификаторФормы); - - Если ПрисоединенныеФайлыМассив.Количество() = 1 Тогда - ПрисоединенныйФайл = ПрисоединенныеФайлыМассив[0]; - - ПоказатьОповещениеПользователя( - НСтр("ru = 'Создание'"), - ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), - ПрисоединенныйФайл, - БиблиотекаКартинок.Информация32); - - ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ЭтоНовый", ПрисоединенныйФайл, Истина); - ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); - КонецЕсли; - - Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда - ОповеститьОбИзменении(ПрисоединенныеФайлыМассив[0]); - Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый", Истина), ПрисоединенныеФайлыМассив); - КонецЕсли; - -КонецПроцедуры - -#Если ВебКлиент Тогда -// Помещает файл с диска в хранилище присоединенных файлов (веб-клиент). -// -// Параметры: -// ВладелецФайла - Ссылка на владельца файла. -// НастройкиРаботыСФайлами - Структура. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -// Возвращаемое значение: -// Ссылка на файл. -// -Функция ПоместитьВыбранныеФайлыВХранилищеВеб(Знач ВладелецФайла, Знач НастройкиРаботыСФайлами, Знач ИдентификаторФормы) - - АдресВременногоХранилищаФайла = ""; - ИмяФайла = ""; - Если НЕ ПоместитьФайл(АдресВременногоХранилищаФайла, ИмяФайла, ИмяФайла, Истина, ИдентификаторФормы) Тогда - Возврат Неопределено; - КонецЕсли; - - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); - - Если СтрокиПути.Количество() >= 2 Тогда - Расширение = СтрокиПути[СтрокиПути.Количество()-1]; - ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; - Иначе - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при помещении файла в хранилище: - |""%1"".'"), - ИмяФайла); - КонецЕсли; - - ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; - - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( - ЗапретЗагрузкиФайловПоРасширению, - СписокЗапрещенныхРасширений, - Расширение) Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. - |Обратитесь к администратору.'"), - Расширение); - КонецЕсли; - - // Создание карточки Файла в базе данных. - ПрисоединенныйФайл = ПрисоединенныеФайлы.ДобавитьФайл( - ВладелецФайла, - ИмяБезРасширения, - Расширение, - , - , - АдресВременногоХранилищаФайла, - ""); - - Возврат ПрисоединенныйФайл; + Возврат ПрисоединенныеФайлыСлужебныйВызовСервера.ПолучитьДанныеФайла( + ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные); КонецФункции -#КонецЕсли // Обновляет данные файла из файла, выбранного пользователем. // Используется, как обработчик команды обновления присоединенного файла из другого файла. @@ -591,8 +500,10 @@ ИнформацияОФайле = Новый Структура; - Если ВыбратьФайлНаДискеИПоместитьВХранилище(ДанныеФайла, ИнформацияОФайле, ИдентификаторФормы) Тогда - ПрисоединенныеФайлы.ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле); + Если ПрисоединенныеФайлыСлужебныйКлиент.ВыбратьФайлНаДискеИПоместитьВХранилище( + ДанныеФайла, ИнформацияОФайле, ИдентификаторФормы) Тогда + + ПрисоединенныеФайлыСлужебныйВызовСервера.ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле); Возврат Истина; Иначе Возврат Ложь; @@ -600,813 +511,9 @@ КонецФункции - -// Помещает отредактированные файлы в хранилище. -// Используется, как обработчик команды окончания редактирования файлов. -// -// Параметры -// ДанныеФайла - Структура с данными файла. -// ИнформацияОФайле - Структура (возвращаемое значение) - информация о файле. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -// Возвращаемое значение: -// Истина - файл успешно помещен во временное хранилище. -// -Функция ПоместитьРедактируемыйФайлНаДискеВХранилище(Знач ДанныеФайла, ИнформацияОФайле, Знач ИдентификаторФормы) Экспорт - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами()Тогда - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - РабочийКаталогПользователя = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; - - ПолноеИмяФайлаНаКлиенте = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; - - Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); - Если НЕ Файл.Существует() Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Файл не найден в рабочем каталоге.'")); - Возврат Ложь; - КонецЕсли; - - Возврат ПоместитьФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, ПолноеИмяФайлаНаКлиенте, ИдентификаторФормы); - - Иначе -#Если ВебКлиент Тогда - Результат = ПоместитьФайлНаДискеВХранилищеВеб(ДанныеФайла, ИнформацияОФайле, ИдентификаторФормы); - - Если НЕ Результат Тогда - Возврат Ложь; - КонецЕсли; - - Если ДанныеФайла.ИмяФайла <> ИнформацияОФайле.ИмяФайла Тогда - ТекстВопроса = НСтр("ru = 'Имя выбранного файла - |""%1"" - |отличается от имени файла в хранилище - |""%2"", - |продолжить?'"); - ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ИнформацияОФайле.ИмяФайла, ДанныеФайла.ИмяФайла); - КодВозврата = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена); - Если КодВозврата <> КодВозвратаДиалога.ОК Тогда - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - Возврат Результат; -#КонецЕсли - КонецЕсли; - -КонецФункции - -// Выбирает файл с диска и помещает его во временное хранилище на сервере. -// -// Параметры: -// ДанныеФайла - Структура с данными файла. -// ИнформацияОФайле - Структура (возвращаемое значение) - информация о файле. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -// Возвращаемое значение: -// Истина - файл успешно выбран и помещен во временное хранилище, иначе Ложь. -// -Функция ВыбратьФайлНаДискеИПоместитьВХранилище(Знач ДанныеФайла, ИнформацияОФайле, Знач ИдентификаторФормы) Экспорт - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами()Тогда - - ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ВыборФайла.МножественныйВыбор = Ложь; - ВыборФайла.ПолноеИмяФайла = ДанныеФайла.Наименование + "." + ДанныеФайла.Расширение; - ВыборФайла.Расширение = ДанныеФайла.Расширение; - ВыборФайла.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Все файлы (*.%1)|*.%1'"), ДанныеФайла.Расширение); - - Если НЕ ВыборФайла.Выбрать() Тогда - Возврат Ложь; - КонецЕсли; - - Возврат ПоместитьФайлНаДискеВХранилище(ДанныеФайла, ИнформацияОФайле, ВыборФайла.ПолноеИмяФайла, ИдентификаторФормы); - - Иначе -#Если ВебКлиент Тогда - Возврат ПоместитьФайлНаДискеВХранилищеВеб(ДанныеФайла, ИнформацияОФайле, ИдентификаторФормы); -#КонецЕсли - КонецЕсли; - -КонецФункции - -#Если ВебКлиент Тогда -// Помещает файл с диска клиента во временное хранилище. -// Аналог функции ПоместитьФайлНаДискеВХранилище -// для веб-клиента без расширения для работы с файлами. -// -// Параметры: -// ДанныеФайла - Структура с данными файла. -// ИнформацияОФайле - Структура (возвращаемое значение) с информацией о файле. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -// Возвращаемое значение: -// Булево - Истина - файл успешно помещен в хранилище, иначе Ложь. -// -Функция ПоместитьФайлНаДискеВХранилищеВеб(Знач ДанныеФайла, ИнформацияОФайле, Знач ИдентификаторФормы) - - НастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); - - АдресВременногоХранилищаФайла = ""; - ВыбранноеИмяФайла = ""; - - Если Не ПоместитьФайл(АдресВременногоХранилищаФайла, ДанныеФайла.ИмяФайла, ВыбранноеИмяФайла, Истина, ИдентификаторФормы) Тогда - Возврат Ложь; - КонецЕсли; - - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ВыбранноеИмяФайла); - - Если СтрокиПути.Количество() >= 2 Тогда - НовоеИмя = СтрокиПути[СтрокиПути.Количество()-2]; - НовоеРасширение = СтрокиПути[СтрокиПути.Количество()-1]; - ИмяФайла = НовоеИмя + "." + НовоеРасширение; - ИначеЕсли СтрокиПути.Количество() = 1 Тогда - НовоеИмя = СтрокиПути[0]; - НовоеРасширение = ""; - ИмяФайла = НовоеИмя; - КонецЕсли; - - ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; - - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( - ЗапретЗагрузкиФайловПоРасширению, - СписокЗапрещенныхРасширений, - НовоеРасширение) Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. - |Обратитесь к администратору.'"), - НовоеРасширение); - КонецЕсли; - - ИнформацияОФайле = Новый Структура; - ИнформацияОФайле.Вставить("ДатаМодификацииУниверсальная", Неопределено); - ИнформацияОФайле.Вставить("АдресФайлаВоВременномХранилище", АдресВременногоХранилищаФайла); - ИнформацияОФайле.Вставить("АдресВременногоХранилищаТекста", ""); - ИнформацияОФайле.Вставить("ИмяФайла", ИмяФайла); - ИнформацияОФайле.Вставить("Расширение", НовоеРасширение); - - Возврат Истина; - -КонецФункции -#КонецЕсли - -// Открывает каталог с файлом (при необходимости получает файл из хранилища). -// Используется, как обработчик команды открытия каталога с файлом. -// -// Параметры: -// ДанныеФайла - Структура с данными файла. -// -Процедура ОткрытьКаталогСФайлом(Знач ДанныеФайла) Экспорт - - Перем ПолноеИмяФайла; - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами() Тогда - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - РабочийКаталогПользователя = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; - - Если ПустаяСтрока(РабочийКаталогПользователя) Тогда - Предупреждение(НСтр("ru = 'Не задан путь к локальному кэшу файлов'")); - Возврат; - КонецЕсли; - - ПолныйПуть = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; - - Файл = Новый Файл(ПолныйПуть); - - Если НЕ Файл.Существует() Тогда - КодВозврата = Вопрос(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" - |отсутствует в рабочем каталоге. Получить файл с сервера?'"), Файл.Имя), - РежимДиалогаВопрос.ДаНет); - - Если КодВозврата <> КодВозвратаДиалога.Да Тогда - Возврат; - КонецЕсли; - - ПолноеИмяФайлаНаКлиенте = ""; - ПолучитьФайлВРабочийКаталог(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, ДанныеФайла.ОтносительныйПуть, ДанныеФайла.ДатаМодификацииУниверсальная, ДанныеФайла.ИмяФайла, РабочийКаталогПользователя, ПолноеИмяФайлаНаКлиенте); - - КонецЕсли; - - ФайловыеФункцииКлиент.ОткрытьПроводникСФайлом(ПолныйПуть); - Иначе -#Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'Для выполнения операции требуется - |установить расширение работы с файлами.'")); -#КонецЕсли - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ЭЦП - -// Подписывает присоединенный файл: -// - предлагает пользователю выбрать ЭЦП для подписания и получает данные подписи, -// - записывает файл с эцп в хранилище. -// Используется в обработчике команды "Подписать" формы списка. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка присоединенный файл. -// ДанныеФайла - Структура с данными файла. -// -// Возвращаемое значение: -// Булево - Истина - файл успешно подписан и сохранен в хранилище, -// Ложь - ошибки или отказ во время работы. -// -Функция СформироватьПодписьФайла(Знач ПрисоединенныйФайл, Знач ДанныеФайла) Экспорт - - ДанныеПодписи = Неопределено; - - Если ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи(ПрисоединенныйФайл, ДанныеФайла, ДанныеПодписи) Тогда - ПрисоединенныеФайлы.ЗанестиИнформациюОднойПодписи(ПрисоединенныйФайл, ДанныеПодписи); - Возврат Истина - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Формирует подпись для двоичных данных файла: -// - предлагает пользователю диалог выбора сертификатов ЭЦП, -// - подписывает двоичные данные присоединенного файла с целью получения подписи. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на файл. -// ДанныеФайла - Структура с данными файла. -// ДанныеПодписи - Структура (возвращаемое значение) - сформированная подпись. -// -// Возвращаемое значение: -// Булево - Истина, если данные присоединенного файла успешно подписаны, -// Ложь, если пользователь отказался от подписания или произошла ошибка. -// -Функция ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи(Знач ПрисоединенныйФайл, Знач ДанныеФайла, ДанныеПодписи) Экспорт - -#Если ВебКлиент Тогда - Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, - |операция прервана.'")); - Возврат Ложь; - КонецЕсли; -#КонецЕсли - - МассивСтруктурСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Истина); - - ПараметрыФормы = Новый Структура("МассивСтруктурСертификатов, ОбъектСсылка", МассивСтруктурСертификатов, ПрисоединенныйФайл); - - СтруктураПараметровПодписи = ОткрытьФормуМодально("ОбщаяФорма.УстановкаПодписиЭЦП", ПараметрыФормы); - - Если ТипЗнч(СтруктураПараметровПодписи) <> Тип("Структура") Тогда - Возврат Ложь; - КонецЕсли; - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); - - Отказ = Ложь; - МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(Отказ); - Если Отказ Тогда - Возврат Ложь - КонецЕсли; - - ДанныеПодписи = ЭлектроннаяЦифроваяПодписьКлиент.СформироватьДанныеПодписи( - МенеджерКриптографии, - ПрисоединенныйФайл, - ДвоичныеДанные, - СтруктураПараметровПодписи); - - Возврат Истина; - -КонецФункции - -// Добавляет ЭЦП из файла(ов) на диске. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на файл, которому требуется добавить подпись. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -Процедура ДобавитьЭЦПИзФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) Экспорт - -#Если ВебКлиент Тогда - Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, - |операция прервана.'")); - Возврат; - КонецЕсли; -#КонецЕсли - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами() Тогда - МассивПодписей = ПолучитьМассивПодписей(ПрисоединенныйФайл, ИдентификаторФормы); - - Если МассивПодписей.Количество() > 0 Тогда - ПрисоединенныеФайлы.ЗанестиИнформациюОПодписях(ПрисоединенныйФайл, МассивПодписей, ИдентификаторФормы); - ОповеститьОДобавленииПодписиИзФайла(ПрисоединенныйФайл, МассивПодписей.Количество()); - КонецЕсли; - Иначе -#Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'Для выполнения операции требуется - |установить расширение работы с файлами.'")); -#КонецЕсли - КонецЕсли; - -КонецПроцедуры - -// Возвращает подписи, для чего вызывает диалог добавления подписей. -// -// ОСОБЫЕ УСЛОВИЯ -// Требуется наличие подключенного расширения для работы с файлами -// и расширения для работы со средствами криптографии. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на файл. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -// Возвращаемое значение: -// Массив Структур подписей. -// -Функция ПолучитьМассивПодписей(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) Экспорт - - МассивФайловПодписей = ОткрытьФормуМодально("ОбщаяФорма.ДобавлениеПодписиИзФайла"); - - Если ТипЗнч(МассивФайловПодписей) <> Тип("Массив") ИЛИ МассивФайловПодписей.Количество() = 0 Тогда - Возврат Новый Массив; - КонецЕсли; - - Возврат ЭлектроннаяЦифроваяПодписьКлиент.СформироватьПодписиДляЗанесениюВБазу( - ПрисоединенныйФайл, МассивФайловПодписей, ИдентификаторФормы); - -КонецФункции - -// Служебная процедура используется для оповещения системы об изменении объекта, -// а так же для отображения оповещения пользователя о добавлении подписей. -// Параметры -// ПрисоединенныйФайл - ссылка на файл с добавленными подписями -// КоличествоПодписей - количество добавленных подписей -// -Процедура ОповеститьОДобавленииПодписиИзФайла(ПрисоединенныйФайл, КоличествоПодписей) Экспорт - - ОповеститьОбИзменении(ПрисоединенныйФайл); - - Если КоличествоПодписей = 1 Тогда - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Добавлена подпись из файла для ""%1"".'"), - ПрисоединенныйФайл); - Иначе - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Добавлены подписи из файлов для ""%1"".'"), - ПрисоединенныйФайл); - КонецЕсли; - - Состояние(ТекстСообщения); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Шифрование. - -// Шифрует файл в хранилище: -// - предлагает пользователю выбрать сертификаты для шифрования, -// - выполняет шифрование файла, -// - записывает зашифрованные данные вместе с отпечатками в хранилище, -// - оповещает систему и пользователя об изменениях. -// Используется в обработчике команды шифрования файла. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на файл, который требуется зашифровать. -// ДанныеФайла - Структура с данными файла. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -Процедура Зашифровать(Знач ПрисоединенныйФайл, Знач ДанныеФайла, Знач ИдентификаторФормы) Экспорт - - ЗашифрованныеДанные = Неопределено; - МассивОтпечатков = Новый Массив; - - Если НЕ ПолучитьЗашифрованныеДанные(ПрисоединенныйФайл, - ДанныеФайла, - ИдентификаторФормы, - ЗашифрованныеДанные, - МассивОтпечатков) Тогда - Возврат; - КонецЕсли; - - ПрисоединенныеФайлы.Зашифровать(ПрисоединенныйФайл, ЗашифрованныеДанные, МассивОтпечатков); - - ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге(ПрисоединенныйФайл, ДанныеФайла); - -КонецПроцедуры - -// Шифрует двоичные данные файла с помощью сертификатов, выбранных пользователем. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на файл. -// ДанныеФайла - Структура с данными файла. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// ЗашифрованныеДанные - Структура (возвращаемое значение) - содержит зашифрованные данные файла (для записи). -// МассивОтпечатков - Массив (возвращаемое значение) - содержит отпечатки. -// -// Возвращаемое значение: -// Истина, если данные успешно зашифрованы, Ложь - иначе. -// -Функция ПолучитьЗашифрованныеДанные(Знач ПрисоединенныйФайл, - Знач ДанныеФайла, - Знач ИдентификаторФормы, - ЗашифрованныеДанные, - МассивОтпечатков) Экспорт - -#Если ВебКлиент Тогда - Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, - |операция прервана.'")); - Возврат Ложь; - КонецЕсли; -#КонецЕсли - - Если ДанныеФайла.Зашифрован Тогда - Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" - |уже зашифрован.'"), Строка(ПрисоединенныйФайл))); - Возврат Ложь; - КонецЕсли; - - Если НЕ ДанныеФайла.Редактирует.Пустая() Тогда - Предупреждение(НСтр("ru = 'Нельзя зашифровать занятый файл.'")); - Возврат Ложь; - КонецЕсли; - - МассивСтруктурСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Ложь); - - ОтпечатокЛичногоСертификатаДляШифрования = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ОтпечатокЛичногоСертификатаДляШифрования; - - // Отпечаток сохраненный в ХранилищеНастроек мог устареть - сертификат могли уже удалить. - Если ОтпечатокЛичногоСертификатаДляШифрования <> Неопределено И НЕ ПустаяСтрока(ОтпечатокЛичногоСертификатаДляШифрования) Тогда - Сертификат = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьСертификатПоОтпечатку(ОтпечатокЛичногоСертификатаДляШифрования, Истина); // ТолькоЛичные - Если Сертификат = Неопределено Тогда - ОтпечатокЛичногоСертификатаДляШифрования = ""; - КонецЕсли; - КонецЕсли; - - Если ОтпечатокЛичногоСертификатаДляШифрования = Неопределено - ИЛИ ПустаяСтрока(ОтпечатокЛичногоСертификатаДляШифрования) Тогда - - МассивСтруктурЛичныхСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Истина); // ТолькоЛичные - - ПараметрыФормы = Новый Структура("МассивСтруктурСертификатов", МассивСтруктурЛичныхСертификатов); - СтруктураВозврата = ОткрытьФормуМодально("ОбщаяФорма.ВыборСертификата", ПараметрыФормы); - Если ТипЗнч(СтруктураВозврата) = Тип("Структура") Тогда - ОтпечатокЛичногоСертификатаДляШифрования = СтруктураВозврата.Отпечаток; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения( - "ЭЦП", - "ОтпечатокЛичногоСертификатаДляШифрования", - ОтпечатокЛичногоСертификатаДляШифрования); - Иначе - Предупреждение(НСтр("ru = 'Не выбран персональный сертификат для шифрования.'")); - Возврат Ложь; - КонецЕсли; - КонецЕсли; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("МассивСтруктурСертификатов", МассивСтруктурСертификатов); - ПараметрыФормы.Вставить("ФайлСсылка", ПрисоединенныйФайл); - ПараметрыФормы.Вставить("ОтпечатокЛичногоСертификатаДляШифрования", ОтпечатокЛичногоСертификатаДляШифрования); - - МассивСертификатов = ОткрытьФормуМодально("ОбщаяФорма.ВыборСертификатовШифрования", ПараметрыФормы); - - Если ТипЗнч(МассивСертификатов) = Тип("Массив") Тогда - - Возврат ВыполнитьШифрованиеПоПараметрам(МассивСертификатов, - ДанныеФайла, - ИдентификаторФормы, - ЗашифрованныеДанные, - МассивОтпечатков); - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -// Шифрует двоичные данные файла по указанному массиву сертификатов. -// -// Параметры: -// МассивСертификатов - Массив сертификатов для шифрования. -// ДанныеФайла - Структура данных файла. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// ЗашифрованныеДанные - Структура (возвращаемое значение) - содержит зашифрованные данные файла. -// МассивОтпечатков - Массив (возвращаемое значение) - содержит отпечатки. -// -// Возвращаемое значение: -// Истина - шифрование выполнено успешно, иначе Ложь. -// -Функция ВыполнитьШифрованиеПоПараметрам(Знач МассивСертификатов, - Знач ДанныеФайла, - Знач ИдентификаторФормы, - ЗашифрованныеДанные, - МассивОтпечатков) - - МассивОтпечатков = Новый Массив; - - Для Каждого Сертификат Из МассивСертификатов Цикл - Отпечаток = Base64Строка(Сертификат.Отпечаток); - Представление = ЭлектроннаяЦифроваяПодписьКлиентСервер.ПолучитьПредставлениеПользователя(Сертификат.Субъект); - ДвоичныеДанныеСертификата = Сертификат.Выгрузить(); - - ОтпечатокСтруктура = Новый Структура("Отпечаток, Представление, Сертификат", Отпечаток, Представление, ДвоичныеДанныеСертификата); - МассивОтпечатков.Добавить(ОтпечатокСтруктура); - КонецЦикла; - - Состояние(НСтр("ru = 'Выполняется шифрование ...'")); - - Отказ = Ложь; - МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(Отказ); - Если Отказ Тогда - Возврат Ложь; - КонецЕсли; - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); - ШифрованныйФайлДвоичныеДанные = МенеджерКриптографии.Зашифровать(ДвоичныеДанные, МассивСертификатов); - АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ШифрованныйФайлДвоичныеДанные, ИдентификаторФормы); - - ЗашифрованныеДанные = Новый Структура; - ЗашифрованныеДанные.Вставить("АдресВременногоХранилища", АдресВременногоХранилища); - - Состояние(НСтр("ru = 'Шифрование завершено.'")); - - Возврат Истина; - -КонецФункции - -Процедура ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге(Знач ПрисоединенныйФайл, Знач ДанныеФайла) Экспорт - - ОповеститьОбИзменении(ПрисоединенныйФайл); - - Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" - |зашифрован.'"), - ПрисоединенныйФайл) ); - - ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - - Если ПодключитьРасширениеРаботыСФайлами()Тогда - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - РабочийКаталогПользователя = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; - ПолныйПутьКФайлу = РабочийКаталогПользователя + ДанныеФайла.ИмяФайла; - - Файл = Новый Файл(ПолныйПутьКФайлу); - - Если Файл.Существует() Тогда - Попытка - Файл.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолныйПутьКФайлу); - Исключение - // Попытка удалить файл с диска. - КонецПопытки; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Расшифровывает файл в хранилище: -// - показывает пользователю диалог с предложением расшифровать файл, -// - получает двоичные данные и массив отпечатков, -// - производит расшифровку, -// - записывает расшифрованные данные файла в хранилище. -// Используется как обработчик команды расшифровки файла. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на файл. -// ДанныеФайла - Структура с данными файла. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -Процедура Расшифровать(Знач ПрисоединенныйФайл, Знач ДанныеФайла, Знач ИдентификаторФормы) Экспорт - - РасшифрованныеДанные = Неопределено; - - Если НЕ ПолучитьРасшифрованныеДанные(ПрисоединенныйФайл, ДанныеФайла, РасшифрованныеДанные, ИдентификаторФормы) Тогда - Возврат; - КонецЕсли; - - ПрисоединенныеФайлы.Расшифровать(ПрисоединенныйФайл, РасшифрованныеДанные); - - ОповеститьОРасшифровкеФайла(ПрисоединенныйФайл); - -КонецПроцедуры - -// Получает расшифрованные данные файла. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на файл. -// ДанныеФайла - Структура с данными файла. -// РасшифрованныеДанные - Структура (возвращаемое значение) - содержит расшифрованные данные. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -// Возвращаемое значение: -// Истина - данные успешно расшифрованы, Ложь - данные не расшифрованы. -// -Функция ПолучитьРасшифрованныеДанные(Знач ПрисоединенныйФайл, Знач ДанныеФайла, РасшифрованныеДанные, Знач ИдентификаторФормы) Экспорт - -#Если ВебКлиент Тогда - Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда - Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, - |операция прервана.'")); - Возврат Ложь; - КонецЕсли; -#КонецЕсли - - ПредставленияСертификатов = ""; - - МассивСертификатовШифрования = ДанныеФайла.МассивСертификатовШифрования; - Для Каждого СтруктураСертификата Из МассивСертификатовШифрования Цикл - Отпечаток = СтруктураСертификата.Отпечаток; - Сертификат = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьСертификатПоОтпечатку(Отпечаток, Истина); - Если Сертификат <> Неопределено Тогда - Если НЕ ПустаяСтрока(ПредставленияСертификатов) Тогда - ПредставленияСертификатов = ПредставленияСертификатов + Символы.ПС; - КонецЕсли; - ПредставленияСертификатов = ПредставленияСертификатов + СтруктураСертификата.Представление; - КонецЕсли; - КонецЦикла; - - ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Введите пароль для расшифровки'")); - ПараметрыФормы.Вставить("ПредставленияСертификатов", ПредставленияСертификатов); - ПараметрыФормы.Вставить("Файл", ПрисоединенныйФайл); - - КодВозврата = ОткрытьФормуМодально("ОбщаяФорма.ВводПароляСОписаниями", ПараметрыФормы); - - Если ТипЗнч(КодВозврата) = Тип("Строка") Тогда - Пароль = КодВозврата; - Иначе - Возврат Ложь; - КонецЕсли; - - Состояние(НСтр("ru = 'Выполняется расшифровка ...'")); - - ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); - - Отказ = Ложь; - МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(Отказ); - Если Отказ Тогда - Возврат Ложь - КонецЕсли; - - МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Пароль; - ДвоичныеДанныеРасшифрованные = МенеджерКриптографии.Расшифровать(ДвоичныеДанные); - АдресВременногоХранилищаРасшифрованныхДанных = ПоместитьВоВременноеХранилище(ДвоичныеДанныеРасшифрованные, ИдентификаторФормы); - -#Если ВебКлиент Тогда - АдресВременногоХранилищаТекста = ""; -#Иначе - ИзвлекатьТекстыФайловНаСервере = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере; - Если НЕ ИзвлекатьТекстыФайловНаСервере Тогда - ПолныйПутьКФайлу = ПолучитьИмяВременногоФайла(ДанныеФайла.Расширение); - ДвоичныеДанныеРасшифрованные.Записать(ПолныйПутьКФайлу); - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ПолныйПутьКФайлу, ИдентификаторФормы); - УдалитьФайлы(ПолныйПутьКФайлу); - Иначе - АдресВременногоХранилищаТекста = ""; - КонецЕсли; -#КонецЕсли - - РасшифрованныеДанные = Новый Структура; - РасшифрованныеДанные.Вставить("АдресВременногоХранилища", АдресВременногоХранилищаРасшифрованныхДанных); - РасшифрованныеДанные.Вставить("АдресВременногоХранилищаТекста", АдресВременногоХранилищаТекста); - - Состояние(НСтр("ru = 'Расшифровка завершена.'")); - - Возврат Истина; - -КонецФункции - -// Оповещает систему и пользователя о расшифровке файла. -// -// Параметры: -// ПрисоединенныйФайл - Ссылка на файл. -// -Процедура ОповеститьОРасшифровкеФайла(Знач ПрисоединенныйФайл) Экспорт - - ОповеститьОбИзменении(ПрисоединенныйФайл); - - Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файл ""%1"" - |расшифрован.'"), - ПрисоединенныйФайл) ); - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции -// Помещает файлы с диска в хранилище присоединенных файлов. -// -// Параметры: -// ВыбранныеФайлы - Массив - пути к файлам на диске. -// ВладелецФайла - Ссылка на владельца файла. -// НастройкиРаботыСФайлами - Структура. -// ПрисоединенныеФайлыМассив - Массив (возвращаемое значение) - заполняется ссылками -// на добавленные файлы. -// ИдентификаторФормы - УникальныйИдентификатор формы. -// -Процедура ПоместитьВыбранныеФайлыВХранилище(Знач ВыбранныеФайлы, - Знач ВладелецФайла, - Знач НастройкиРаботыСФайлами, - ПрисоединенныеФайлыМассив, - Знач ИдентификаторФормы) - - МаксРазмерФайла = НастройкиРаботыСФайлами.МаксимальныйРазмерФайла; - ИзвлекатьТекстыФайловНаСервере = НастройкиРаботыСФайлами.ИзвлекатьТекстыФайловНаСервере; - ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; - - ТекущаяПозиция = 0; - - ПоследнийСохраненныйФайл = Неопределено; - - Для Каждого ПолноеИмяФайла Из ВыбранныеФайлы Цикл - - ТекущаяПозиция = ТекущаяПозиция + 1; - - Файл = Новый Файл(ПолноеИмяФайла); - - Если Файл.Размер() > МаксРазмерФайла Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Файл.Размер(), МаксРазмерФайла, Файл.Имя)); - Продолжить; - КонецЕсли; - - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( - ЗапретЗагрузкиФайловПоРасширению, - СписокЗапрещенныхРасширений, - Файл.Расширение) Тогда - - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. - |Обратитесь к администратору.'"), - Файл.Расширение); - КонецЕсли; - - Если ИзвлекатьТекстыФайловНаСервере Тогда - АдресВременногоХранилищаТекста = ""; - Иначе - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ПолноеИмяФайла, ИдентификаторФормы); - КонецЕсли; - - ВремяИзменения = ОбщегоНазначенияКлиент.ДатаСеанса(); - ВремяИзмененияУниверсальное = Файл.ПолучитьУниверсальноеВремяИзменения(); - - ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, Файл, ТекущаяПозиция); - ПоследнийСохраненныйФайл = Файл; - - ПомещаемыеФайлы = Новый Массив; - Описание = Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя, ""); - ПомещаемыеФайлы.Добавить(Описание); - - ПомещенныеФайлы = Новый Массив; - - Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ИдентификаторФормы) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при помещении файла в хранилище: - |""%1"".'"), - Файл.ПолноеИмя) ); - Продолжить; - КонецЕсли; - - АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; - - // Создание карточки Файла в базе данных. - ПрисоединенныйФайл = ПрисоединенныеФайлы.ДобавитьФайл( - ВладелецФайла, - Файл.ИмяБезРасширения, - ФайловыеФункцииКлиентСервер.РасширениеБезТочки(Файл.Расширение), - ВремяИзменения, - ВремяИзмененияУниверсальное, - АдресВременногоХранилищаФайла, - АдресВременногоХранилищаТекста); - - Если ПрисоединенныйФайл = Неопределено Тогда - Продолжить; - КонецЕсли; - - ПрисоединенныеФайлыМассив.Добавить(ПрисоединенныйФайл); - - КонецЦикла; - - ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, ПоследнийСохраненныйФайл); - -КонецПроцедуры - Функция ДиалогНужноПолучитьФайлССервера(Знач ПолноеИмяФайлаНаКлиенте, Знач ДанныеФайла, Знач ФайлРедактируется, Отказ = Ложь) ФайлНаДиске = Новый Файл(ПолноеИмяФайлаНаКлиенте); @@ -1474,28 +581,6 @@ КонецФункции -Процедура УдалитьФайл(Знач ПолноеИмяФайла) - - Файл = Новый Файл(ПолноеИмяФайла); - Файл.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПолноеИмяФайла); - -КонецПроцедуры - -Функция СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Знач РазмерФайла, Знач МаксимальныйРазмерФайла, Знач ИмяФайла) - - РазмерВМб = РазмерФайла / (1024 * 1024); - РазмерВМбМакс = МаксимальныйРазмерФайла / (1024 * 1024); - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Размер файла ""%1"" (%2 Мб) - |превышает максимально допустимый размер файла (%3 Мб).'"), - ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс) ); - -КонецФункции - Процедура ОткрытьФайлПриложением(Знач ИмяОткрываемогоФайла) РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); @@ -1521,39 +606,11 @@ КонецПроцедуры -Процедура ОбновитьСостояниеОСохраненииФайлов(Знач ВыбранныеФайлы, Знач Файл, Знач ТекущаяПозиция = Неопределено); +Процедура УдалитьФайл(Знач ПолноеИмяФайла) - Если Файл = Неопределено Тогда - Возврат; - КонецЕсли; - - РазмерВМб = ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(Файл.Размер() / (1024 * 1024)); - - Если ВыбранныеФайлы.Количество() > 1 Тогда - - Если ТекущаяПозиция = Неопределено Тогда - Состояние(НСтр("ru = 'Сохранение файлов завершено.'")); - Иначе - ИндикаторПроцент = ТекущаяПозиция * 100 / ВыбранныеФайлы.Количество(); - - НадписьПодробнее = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб) ...'"), Файл.Имя, РазмерВМб); - - ТекстСостояния = НСтр("ru = 'Сохранение нескольких файлов.'"); - - Состояние(ТекстСостояния, ИндикаторПроцент, НадписьПодробнее, БиблиотекаКартинок.Информация32); - КонецЕсли; - Иначе - Если ТекущаяПозиция = Неопределено Тогда - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сохранение файла ""%1"" (%2 Мб) - |завершено.'"), Файл.Имя, РазмерВМб); - Иначе - ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб). - |Пожалуйста, подождите...'"), Файл.Имя, РазмерВМб); - КонецЕсли; - Состояние(ТекстПояснения); - КонецЕсли; + Файл = Новый Файл(ПолноеИмяФайла); + Файл.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ПолноеИмяФайла); КонецПроцедуры + diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl new file mode 100644 index 000000000..f03d272f5 --- /dev/null +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/Module.bsl @@ -0,0 +1,1232 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Присоединенные файлы". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры используемые при обмене данными + +Процедура ПриОтправкеФайла(ЭлементДанных, + ОтправкаЭлемента, + Знач СозданиеНачальногоОбраза = Ложь, + Получатель = Неопределено) Экспорт + + Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить + ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Тогда + + Если СозданиеНачальногоОбраза Тогда + + Если ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + Если Получатель <> Неопределено + И Получатель.ДополнительныеСвойства.Свойство("РазмещатьФайлыВНачальномОбразе") Тогда + + // Помещаем данные файла из тома на диске в служебный реквизит справочника + ПоместитьФайлВРеквизитСправочника(ЭлементДанных); + + Иначе + + // Копируем файл из тома на диске в каталог создания начального образа + ИмяКаталогаФайлов = ХранилищеОбщихНастроек.Загрузить("ОбменФайлами", "ВременныйКаталог"); + + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ЭлементДанных.Том) + ЭлементДанных.ПутьКФайлу; + УникальныйИдентификатор = ЭлементДанных.Ссылка.УникальныйИдентификатор(); + + НовыйПутьФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ИмяКаталогаФайлов, + Строка(УникальныйИдентификатор) + "CatalogRef_" + ЭлементДанных.Метаданные().Имя + ); + + ФайловыеФункцииСлужебный.СкопироватьФайлПриСозданииНачальногоОбраза(ПолныйПуть, НовыйПутьФайла); + + КонецЕсли; + + Иначе + + // Если файл хранится в ИБ, то при создании начального образа + // он будет выгружен в составе регистра сведений ПрисоединенныеФайлы. + + КонецЕсли; + + Иначе + + Если ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + // Помещаем данные файла из тома на диске в служебный реквизит справочника + ПоместитьФайлВРеквизитСправочника(ЭлементДанных); + + Иначе // Перечисления.ТипыХраненияФайлов.ВИнформационнойБаза + + Попытка + // Помещаем данные файла из информационной базы в служебный реквизит справочника + АдресВоВременномХранилище = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭлементДанных.Ссылка).СсылкаНаДвоичныеДанныеФайла; + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВоВременномХранилище), Новый СжатиеДанных(9)); + Исключение + // Возможно, файл не был найден. Отправку данных не прерываем. + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + КонецПопытки; + + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + ЭлементДанных.ПутьКФайлу = ""; + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ПрисоединенныеФайлы") + И Не СозданиеНачальногоОбраза Тогда + + // Выгрузку регистра выполняем только при создании начального образа + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + + КонецЕсли; + +КонецПроцедуры + +Процедура ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента) Экспорт + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Тогда + + Если ПолучениеФайлаЗапрещено(ЭлементДанных) Тогда + + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + // Для существующих файлов, размещенных в томах, выполняем их удаление из томов, + // т.к. при получении нового файла он будет заново размещен в томе или информационной базе. + Если НЕ ЭлементДанных.ЭтоНовый() Тогда + + ВерсияФайла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ЭлементДанных.Ссылка, "ТипХраненияФайла, Том, ПутьКФайлу"); + + Если ВерсияФайла.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + ПрежнийПутьНаТоме = ФайловыеФункцииСлужебный.ПолныйПутьТома(ВерсияФайла.Том) + ВерсияФайла.ПутьКФайлу; + + ФайловыеФункцииСлужебный.УдалитьФайлыНаСервере(ПрежнийПутьНаТоме); + + КонецЕсли; + + КонецЕсли; + + Если ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + // По обмену пришел элемент с хранением в базе - но в базе приемнике принято хранить в томах. + // Из служебного реквизита файл размещаем на томе и меняем ТипХраненияФайла на ВТомахНаДиске. + + ПутьКФайлуНаТоме = ""; + СсылкаНаТом = Неопределено; + + // добавить в один из томов (где есть свободное место) + ФайловыеФункцииСлужебный.ДобавитьНаДиск( + ЭлементДанных.ФайлХранилище.Получить(), + ПутьКФайлуНаТоме, + СсылкаНаТом, + ЭлементДанных.ДатаМодификацииУниверсальная, + "", + ЭлементДанных.Наименование, + ЭлементДанных.Расширение, + ЭлементДанных.Размер, + ЭлементДанных.Зашифрован + ); + + ЭлементДанных.ПутьКФайлу = ПутьКФайлуНаТоме; + ЭлементДанных.Том = СсылкаНаТом; + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; + + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + + Иначе + + ДвоичныеДанные = ЭлементДанных.ФайлХранилище.Получить(); + + Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда + ЭлементДанных.ДополнительныеСвойства.Вставить("ДвоичныеДанныеФайла", ДвоичныеДанные); + КонецЕсли; + + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ЭлементДанных.ПутьКФайлу = ""; + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры используемые в модуле СтандартныеПодсистемыПереопределяемый + +// Размещает файлы из сформированного образа. +Процедура ДобавитьФайлыВТомаПриРазмещении(Знач СоответствиеПутейФайлов, + Знач ТипХраненияФайлов, + Знач Файлы) Экспорт + + Для Каждого ЭлементСоответствия Из СоответствиеПутейФайлов Цикл + + Позиция = Найти(ЭлементСоответствия.Ключ, "CatalogRef"); + + Если Позиция = 0 Тогда + Продолжить; + КонецЕсли; + + ПолныйПутьФайлаНаДиске = СоответствиеПутейФайлов.Получить(ЭлементСоответствия.Ключ); + + Если ПолныйПутьФайлаНаДиске = Неопределено Тогда + Продолжить; + КонецЕсли; + + УникальныйИдентификатор = Новый УникальныйИдентификатор(Лев(ЭлементСоответствия.Ключ, Позиция - 1)); + + ИмяСправочника = Прав(ЭлементСоответствия.Ключ, СтрДлина(ЭлементСоответствия.Ключ) - Позиция -10); + Ссылка = Справочники[ИмяСправочника].ПолучитьСсылку(УникальныйИдентификатор); + + Если Ссылка.Пустая() Тогда + Продолжить; + КонецЕсли; + + Объект = Ссылка.ПолучитьОбъект(); + + Если Объект.ТипХраненияФайла <> Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + Продолжить; + КонецЕсли; + + Если Файлы.Найти(ТипЗнч(Объект)) = Неопределено Тогда + Файлы.Добавить(ТипЗнч(Объект)); + КонецЕсли; + + // Размещение файлов в базе-приемнике внутри базы, независимо от хранения в базе-источнике. + Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + + Объект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + Объект.ПутьКФайлу = ""; + Объект.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + + ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаНаДиске); + + ОбновитьДвоичныеДанныеФайлаНаСервере(Объект, ПоместитьВоВременноеХранилище(ДвоичныеДанные)); + + Иначе // Размещение файлов в базе-приемнике внутри тома, независимо от хранения в базе-источнике. + + ФайлИсх = Новый Файл(ПолныйПутьФайлаНаДиске); + РазмерФайла = ФайлИсх.Размер(); + + ВремяИзменения = Объект.ДатаМодификацииУниверсальная; + ИмяБезРасширения = Объект.Наименование; + Расширение = Объект.Расширение; + Зашифрован = Объект.Зашифрован; + + ПолныйПутьНовый = ФайлИсх.Путь + ИмяБезРасширения + "." + Объект.Расширение; + ПереместитьФайл(ПолныйПутьФайлаНаДиске, ПолныйПутьНовый); + + ПутьКФайлуНаТоме = ""; + СсылкаНаТом = Неопределено; + + // Добавление файла в один из томов (где есть свободное место). + + ФайловыеФункцииСлужебный.ДобавитьНаДиск( + ПолныйПутьНовый, + ПутьКФайлуНаТоме, + СсылкаНаТом, + ВремяИзменения, + "", + ИмяБезРасширения, + Расширение, + РазмерФайла, + Зашифрован); + + Объект.ПутьКФайлу = ПутьКФайлуНаТоме; + Объект.Том = СсылкаНаТом.Ссылка; + + КонецЕсли; + + Объект.Записать(); + + Если НЕ ПустаяСтрока(ПолныйПутьНовый) Тогда + УдалитьФайлы(ПолныйПутьНовый); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Удаляет регистрацию в плане обмена при обмене файлами. +// +// Параметры: +// ПланОбменаСсылка - Ссылка на план обмена. +// ТипыФайлов - Массив Типов справочников с присоединенными файлами. +// +Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка, ТипыФайлов) Экспорт + + Для Каждого Тип Из ТипыФайлов Цикл + ПланыОбмена.УдалитьРегистрациюИзменений(ПланОбменаСсылка, Метаданные.НайтиПоТипу(Тип)); + КонецЦикла; + +КонецПроцедуры + +// Проверяет, что переданный элемент данных - это объект присоединенного файла. +Функция ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Экспорт + + Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда + Возврат Ложь; + КонецЕсли; + + МетаданныеЭлемента = ЭлементДанных.Метаданные(); + + Возврат ОбщегоНазначения.ЭтоСправочник(МетаданныеЭлемента) + И ВРег(Прав(МетаданныеЭлемента.Имя, СтрДлина("ПрисоединенныеФайлы"))) = ВРег("ПрисоединенныеФайлы"); + +КонецФункции + +// Возвращает свойства присоедиеннного файла - двоичные данные и подпись. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// АдресПодписи - Строка - адрес подписи во временном хранилище. +// +// Возвращаемое значение: +// Структура со свойствами: +// ДвоичныеДанные - ДвоичныеДанные присоединенного файла. +// ДвоичныеДанныеПодписи - ДвоичныеДанные подписи. +// +Функция ПолучитьДвоичныеДанныеФайлаИПодписи(Знач ПрисоединенныйФайл, Знач АдресПодписи) Экспорт + + Свойства = Новый Структура; + + Свойства.Вставить("ДвоичныеДанные", ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла( + ПрисоединенныйФайл)); + + Свойства.Вставить("ДвоичныеДанныеПодписи", ПолучитьИзВременногоХранилища(АдресПодписи)); + + Возврат Свойства; + +КонецФункции + +// Заполняет текст запроса для получения присоединенных файлов у которых не извлечен текст. +// Текст запроса формируется по всем справочникам присоединенных файлов. В качестве параметра +// может прийти другой запрос, с которым следует сделать объединение. +// +// Параметры: +// ТекстЗапроса - Строка (возвращаемое значение), варианты передаваемых значений: +// Пустая строка - будет возвращен требуемый текст запроса. +// Непустая строка - будет возвращен требуемый текст запроса, добавленный +// к переданному тексту посредством "ОБЪЕДИНИТЬ ВСЕ". +// +// ПолучитьВсеФайлы - Булево - начальное значение Ложь. Позволяет отключить выборку присоединенных +// файлов по частям, если передать Истина. +// +Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса = "", ПолучитьВсеФайлы = Ложь) Экспорт + + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); + КоличествоТипов = ТипыВладельцев.Количество(); + Если КоличествоТипов = 0 Тогда + Возврат; + КонецЕсли; + + ЧислоФайловВВыборке = Цел(100 / ТипыВладельцев.Количество()); + ЧислоФайловВВыборке = ?(ЧислоФайловВВыборке < 10, 10, ЧислоФайловВВыборке); + + Для Каждого Тип Из ТипыВладельцев Цикл + + Если НЕ ПустаяСтрока(ТекстЗапроса) Тогда + ТекстЗапроса = ТекстЗапроса + + " + | + |ОБЪЕДИНИТЬ ВСЕ + |"; + КонецЕсли; + + ИмяСправочникаПрисоединенныхФайлов = Метаданные.НайтиПоТипу(Тип).Имя + "ПрисоединенныеФайлы"; + + ТекстЗапроса = ТекстЗапроса + ТекстЗапросаДляФайловСНеизвлеченнымТекстом( + ИмяСправочникаПрисоединенныхФайлов, + ЧислоФайловВВыборке, + ПолучитьВсеФайлы); + + КонецЦикла; + +КонецПроцедуры + +// Возвращает количество версий с неизвлеченным текстом. +Функция ПолучитьКоличествоВерсийСНеизвлеченнымТекстом() Экспорт + + КоличествоФайлов = 0; + + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); + + Для Каждого Тип Из ТипыВладельцев Цикл + ИмяСправочникаПрисоединенныхФайлов = Метаданные.НайтиПоТипу(Тип).Имя + "ПрисоединенныеФайлы"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапросаДляЧислаФайловСНеизвлеченнымТекстом(ИмяСправочникаПрисоединенныхФайлов); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + КоличествоФайлов = КоличествоФайлов + Выборка.КоличествоФайлов; + КонецЕсли + КонецЦикла; + + Возврат КоличествоФайлов; + +КонецФункции + +// Возвращает путь к файлу на диске. Если файл хранится в информационной базе, +// предварительно сохраняет его. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// +// Возвращаемое значение: +// Строка - полный путь к файлу на диске. +// +Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(Знач ПрисоединенныйФайл) Экспорт + + ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(ПрисоединенныйФайл.Расширение); + + Если ПрисоединенныйФайл.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПрисоединенныеФайлы.ПрисоединенныйФайл, + | ПрисоединенныеФайлы.ХранимыйФайл + |ИЗ + | РегистрСведений.ПрисоединенныеФайлы КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ПрисоединенныйФайл = &ПрисоединенныйФайл"; + + Запрос.УстановитьПараметр("ПрисоединенныйФайл", ПрисоединенныйФайл.Ссылка); + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Следующий() Тогда + ДвоичныеДанные = Выборка.ХранимыйФайл.Получить(); + ДвоичныеДанные.Записать(ИмяФайлаСПутем); + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка открытия файла: файл не найден в информационной базе. + |Обратитесь к администратору. + | + |Файл: ""%1.%2"".'"), + ПрисоединенныйФайл.Наименование, + ПрисоединенныйФайл.Расширение); + КонецЕсли; + Иначе + Если НЕ ПрисоединенныйФайл.Том.Пустая() Тогда + ИмяФайлаСПутем = ФайловыеФункцииСлужебный.ПолныйПутьТома(ПрисоединенныйФайл.Том) + ПрисоединенныйФайл.ПутьКФайлу; + КонецЕсли; + КонецЕсли; + + Возврат ИмяФайлаСПутем; + +КонецФункции + +// Записывает присоединеннный файл. +// +// Параметры: +// ФайлОбъект - Объект присоединенного файла. +// +Процедура ЗаписатьИзвлеченныйТекст(ФайлОбъект) Экспорт + + Попытка + ФайлОбъект.Записать(); + Исключение + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Заполняет параметр КоличествоФайловВТомах. +Процедура ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах) Экспорт + + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); + + Для Каждого Тип Из ТипыВладельцев Цикл + + ИмяСправочникаПрисоединенныхФайлов = Метаданные.НайтиПоТипу(Тип).Имя + "ПрисоединенныеФайлы"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапросаДляФайловВТомах(ИмяСправочникаПрисоединенныхФайлов); + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + КоличествоФайловВТомах = КоличествоФайловВТомах + Выборка.КоличествоФайлов; + КонецЕсли + КонецЦикла; + +КонецПроцедуры + +// Возвращает Истина в параметре ЕстьХранимыеФайлы, если есть хранимые файлы к объекту ВнешнийОбъект. +// Определяет есть ли хранимые файлы у внешнего объекта. +// +// Параметры: +// ВнешнийОбъект - Ссылка на внешний объект. +// ЕстьХранимыеФайлы - Булево (возвращаемое значение), варианты значений параметра: +// Истина - возврат, +// Ложь - устанавливает Истина, если объект имеет хранимые файлы. +// +Процедура ОпределитьНаличиеХранимыхФайлов(Знач ВнешнийОбъект, ЕстьХранимыеФайлы) Экспорт + + Если ЕстьХранимыеФайлы = Истина Тогда + Возврат; + КонецЕсли; + + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); + Если ТипыВладельцев.Найти(ТипЗнч(ВнешнийОбъект)) <> Неопределено Тогда + ЕстьХранимыеФайлы = ОбъектИмеетФайлы(ВнешнийОбъект); + КонецЕсли; + +КонецПроцедуры + +// Заполняет массив ХранимыеФайлы данными хранимых файлов объекта ВнешнийОбъект. +Процедура ПолучитьХранимыеФайлы(Знач ВнешнийОбъект, Знач ХранимыеФайлы) Экспорт + + ТипыВладельцев = Метаданные.РегистрыСведений.НаличиеПрисоединенныхФайлов.Измерения.ОбъектСФайлами.Тип.Типы(); + Если ТипыВладельцев.Найти(ТипЗнч(ВнешнийОбъект)) = Неопределено Тогда + Возврат; + КонецЕсли; + + МассивФайлов = ПолучитьВсеПодчиненныеФайлы(ВнешнийОбъект); + Для Каждого Файл Из МассивФайлов Цикл + + ДанныеФайла = Новый Структура; + ДанныеФайла.Вставить("ДатаМодификацииУниверсальная", Файл.ДатаМодификацииУниверсальная); + ДанныеФайла.Вставить("Размер", Файл.Размер); + ДанныеФайла.Вставить("Наименование", Файл.Наименование); + ДанныеФайла.Вставить("Расширение", Файл.Расширение); + + ДанныеФайла.Вставить("ДвоичныеДанныеФайла", ПрисоединенныеФайлы.ПолучитьДанныеФайла( + Файл, Неопределено).СсылкаНаДвоичныеДанныеФайла); + + ДанныеФайла.Вставить("Текст", Файл.ТекстХранилище.Получить()); + + ХранимыеФайлы.Добавить(ДанныеФайла); + КонецЦикла; + +КонецПроцедуры + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.1.22"; + Обработчик.Процедура = "ПрисоединенныеФайлыСлужебный.ОчиститьНекорректныеЗаписиРегистраСведенийНаличиеПрисоединенныхФайлов"; + Обработчик.Опциональный = Истина; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Обновляет свойства файла при окончании редактирования. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ИнформацияОФайле - Структура со свойствами: +// <обязательные> +// АдресФайлаВоВременномХранилище - Строка - адрес новых двоичных данных файла. +// АдресВременногоХранилищаТекста - Строка - адрес новых двоичных данных текста, +// извлеченного из файла. +// <необязательные> +// ДатаМодификацииУниверсальная - Дата - дата последнего изменения файла, если +// свойство не указано или не заполнено, тогда будет +// установлена текущая дата сеанса. +// Расширение - Строка - новое расширение файла. +// +Процедура ПоместитьФайлВХранилищеИОсвободить(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт + + ИнформацияОФайле.Вставить("Редактирует", Справочники.Пользователи.ПустаяСсылка()); + + ПрисоединенныеФайлы.ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле) + +КонецПроцедуры + +// Отменяет редактирование файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется освободить. +// +Процедура ОсвободитьФайл(Знач ПрисоединенныйФайл) Экспорт + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + Иначе + ФайлОбъект = ПрисоединенныйФайл; + КонецЕсли; + + Если НЕ ФайлОбъект.Редактирует.Пустая() Тогда + ФайлОбъект.Редактирует = Справочники.Пользователи.ПустаяСсылка(); + ФайлОбъект.Записать(); + Конецесли; + +КонецПроцедуры + +// Отмечает файл, как редактируемый. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка или Объект присоединенного файла, который требуется отметить. +// +Процедура ЗанятьФайлДляРедактированияСервер(Знач ПрисоединенныйФайл) Экспорт + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + Иначе + ФайлОбъект = ПрисоединенныйФайл; + КонецЕсли; + + ФайлОбъект.Редактирует = Пользователи.ТекущийПользователь(); + ФайлОбъект.Записать(); + +КонецПроцедуры + +// Помещает зашифрованные данные файла в хранилище и устанавливает файлу признак Зашифрован. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ЗашифрованныеДанные - Структура со свойством: +// АдресВременногоХранилища - Строка - адрес зашифрованных двоичных данных. +// МассивОтпечатков - Массив Структур отпечатков по сертификатам. +// +Процедура Зашифровать(Знач ПрисоединенныйФайл, Знач ЗашифрованныеДанные, Знач МассивОтпечатков) Экспорт + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ПрисоединенныйФайлОбъект.Заблокировать(); + Иначе + ПрисоединенныйФайлОбъект = ПрисоединенныйФайл; + КонецЕсли; + + Для Каждого ОтпечатокСтруктура Из МассивОтпечатков Цикл + НоваяСтрока = ПрисоединенныйФайлОбъект.СертификатыШифрования.Добавить(); + НоваяСтрока.Отпечаток = ОтпечатокСтруктура.Отпечаток; + НоваяСтрока.Представление = ОтпечатокСтруктура.Представление; + НоваяСтрока.Сертификат = Новый ХранилищеЗначения(ОтпечатокСтруктура.Сертификат); + КонецЦикла; + + РеквизитыЗначения = Новый Структура; + РеквизитыЗначения.Вставить("Зашифрован", Истина); + РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения("")); + ОбновитьДвоичныеДанныеФайлаНаСервере(ПрисоединенныйФайлОбъект, ЗашифрованныеДанные.АдресВременногоХранилища, РеквизитыЗначения); + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ПрисоединенныйФайлОбъект.Записать(); + ПрисоединенныйФайлОбъект.Разблокировать(); + КонецЕсли; + +КонецПроцедуры + +// Помещает расшифрованные данные файла в хранилище и снимает файлу признак Зашифрован. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ЗашифрованныеДанные - Структура со свойством: +// АдресВременногоХранилища - Строка - адрес расшифрованных двоичных данных. +// +Процедура Расшифровать(Знач ПрисоединенныйФайл, Знач РасшифрованныеДанные) Экспорт + + Перем Отказ; + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ПрисоединенныйФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ПрисоединенныйФайлОбъект.Заблокировать(); + Иначе + ПрисоединенныйФайлОбъект = ПрисоединенныйФайл; + КонецЕсли; + + ПрисоединенныйФайлОбъект.СертификатыШифрования.Очистить(); + + РеквизитыЗначения = Новый Структура; + РеквизитыЗначения.Вставить("Зашифрован", Ложь); + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилища); + СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ИзвлеченныйТекст = ""; + + Если ЭтоАдресВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилищаТекста) Тогда + ИзвлеченныйТекст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(РасшифрованныеДанные.АдресВременногоХранилищаТекста); + СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + + ИначеЕсли НЕ ФайловыеФункцииСлужебный.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда + // Тексты извлекаются сразу, а не в фоновом задании. + СтатусИзвлеченияТекста = ИзвлечьТекст(ДвоичныеДанные, ПрисоединенныйФайл.Расширение, ИзвлеченныйТекст); + КонецЕсли; + + ПрисоединенныйФайлОбъект.СтатусИзвлеченияТекста = СтатусИзвлеченияТекста; + + РеквизитыЗначения.Вставить("ТекстХранилище", Новый ХранилищеЗначения(ИзвлеченныйТекст, Новый СжатиеДанных(9))); + + ОбновитьДвоичныеДанныеФайлаНаСервере(ПрисоединенныйФайлОбъект, ДвоичныеДанные, РеквизитыЗначения); + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ПрисоединенныйФайлОбъект.Записать(); + ПрисоединенныйФайлОбъект.Разблокировать(); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбновитьДвоичныеДанныеФайлаНаСервере(Знач ПрисоединенныйФайл, + Знач АдресФайлаВоВременномХранилищеДвоичныеДанные, + Знач РеквизитыЗначения = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ФайлОбъект = ПрисоединенныйФайл.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + ФайлСсылка = ПрисоединенныйФайл; + Иначе + ФайлОбъект = ПрисоединенныйФайл; + ФайлСсылка = ФайлОбъект.Ссылка; + КонецЕсли; + + Если ТипЗнч(АдресФайлаВоВременномХранилищеДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда + ДвоичныеДанные = АдресФайлаВоВременномХранилищеДвоичныеДанные; + Иначе + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайлаВоВременномХранилищеДвоичныеДанные); + КонецЕсли; + + ФайлОбъект.Изменил = Пользователи.ТекущийПользователь(); + + Если ТипЗнч(РеквизитыЗначения) = Тип("Структура") Тогда + ЗаполнитьЗначенияСвойств(ФайлОбъект, РеквизитыЗначения); + КонецЕсли; + + ТранзакцияАктивна = Ложь; + + Попытка + Если ФайлОбъект.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + НачатьТранзакцию(); + ТранзакцияАктивна = Истина; + МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ПрисоединенныйФайл = ФайлСсылка; + МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.ПрисоединенныйФайл = ФайлСсылка; + МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); + МенеджерЗаписи.Записать(); + Иначе + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ФайлОбъект.Том) + ФайлОбъект.ПутьКФайлу; + + Попытка + ФайлНаДиске = Новый Файл(ПолныйПуть); + ФайлНаДиске.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ПолныйПуть); + + ФайловыеФункцииСлужебный.ДобавитьНаДиск( + ДвоичныеДанные, + ФайлОбъект.ПутьКФайлу, + ФайлОбъект.Том, + ФайлОбъект.ДатаМодификацииУниверсальная, + "", + ФайлОбъект.Наименование, + ФайлОбъект.Расширение, + ДвоичныеДанные.Размер(), + ФайлОбъект.Зашифрован); + Исключение + ИнформацияОбОшибке = ИнформацияОбОшибке(); + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Запись файла на диске'"), + УровеньЖурналаРегистрации.Ошибка, + Метаданные.Справочники[ФайлСсылка.Метаданные().Имя], + ФайлСсылка, + ТекстОшибкиПриСохраненииФайлаВТоме(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка)); + + ВызватьИсключение ТекстОшибкиПриСохраненииФайлаВТоме(КраткоеПредставлениеОшибки(ИнформацияОбОшибке), ФайлСсылка); + КонецПопытки; + + КонецЕсли; + + ФайлОбъект.Размер = ДвоичныеДанные.Размер(); + + ФайлОбъект.Записать(); + + Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(ПрисоединенныйФайл)) Тогда + ФайлОбъект.Разблокировать(); + КонецЕсли; + + Если ТранзакцияАктивна Тогда + ЗафиксироватьТранзакцию(); + КонецЕсли; + + Исключение + Если ТранзакцияАктивна Тогда + ОтменитьТранзакцию(); + КонецЕсли; + ЗаписьЖурналаРегистрации( + НСтр("ru = 'Обновление данных присоединенного файла на сервере'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Записывает двоичные данные файла в информационную базу. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на присоединенный файл. +// ДвоичныеДанные - ДвоичныеДанные, которые требуется записать. +// +Процедура ЗаписатьФайлВИнформационнуюБазу(Знач ПрисоединенныйФайл, Знач ДвоичныеДанные) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МенеджерЗаписи = РегистрыСведений.ПрисоединенныеФайлы.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ПрисоединенныйФайл = ПрисоединенныйФайл; + МенеджерЗаписи.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); + МенеджерЗаписи.Записать(Истина); + +КонецПроцедуры + +// Определяет, что к объекту присоединен по крайней мере один файл. +Функция ОбъектИмеетФайлы(Знач ВладелецФайла, Знач ФайлИсключение = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ИмяСправочника = ВладелецФайла.Метаданные().Имя + "ПрисоединенныеФайлы"; + + ТекстЗапроса = + "ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла"; + + Если ФайлИсключение <> Неопределено Тогда + ТекстЗапроса = ТекстЗапроса + + " + | И ПрисоединенныеФайлы.Ссылка <> &Ссылка"; + КонецЕсли; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + Запрос.Параметры.Вставить("ВладелецФайла", ВладелецФайла); + + Если ФайлИсключение <> Неопределено Тогда + Запрос.Параметры.Вставить("Ссылка", ФайлИсключение); + КонецЕсли; + + Если Запрос.Выполнить().Пустой() Тогда + Возврат Ложь; + Иначе + Возврат Истина; + КонецЕсли; + +КонецФункции + +// Возвращает массив присоединенных файлов для указанного владельца. +// +// Параметры: +// ВладелецФайла - Ссылка на владельца присоединенных файлов. +// +// Возвращаемое значение: +// Массив ссылок на присоединенные файлы. +// +Функция ПолучитьВсеПодчиненныеФайлы(Знач ВладелецФайла) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТекстЗапроса = + "ВЫБРАТЬ + | ПрисоединенныеФайлы.Ссылка + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла"; + + ИмяСправочника = ВладелецФайла.Метаданные().Имя + "ПрисоединенныеФайлы"; + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + + Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + +КонецФункции + +// Обработчик подписки на событие "Перед удалением" присоединенного файла. +Процедура ПередУдалениемПрисоединенногоФайлаСервер(Знач Ссылка, + Знач ВладелецФайла, + Знач Том, + Знач ТипХраненияФайла, + Знач ПутьКФайлу) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ОбъектИмеетФайлы(ВладелецФайла, Ссылка) Тогда + МенеджерЗаписи = РегистрыСведений.НаличиеПрисоединенныхФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбъектСФайлами = ВладелецФайла; + МенеджерЗаписи.Прочитать(); + Если МенеджерЗаписи.Выбран() Тогда + МенеджерЗаписи.ЕстьФайлы = Ложь; + МенеджерЗаписи.Записать(); + КонецЕсли; + КонецЕсли; + + Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + Если НЕ Том.Пустая() Тогда + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(Том) + ПутьКФайлу; + Попытка + Файл = Новый Файл(ПолныйПуть); + Файл.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ПолныйПуть); + ПутьСПодкаталогом = Файл.Путь; + МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, "*.*"); + Если МассивФайловВКаталоге.Количество() = 0 Тогда + УдалитьФайлы(ПутьСПодкаталогом); + КонецЕсли; + Исключение + // Если файл не удален - ошибки не было. + КонецПопытки; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Обработчик подписки "при записи" присоединенного файла +// +Процедура ПриЗаписиПрисоединенногоФайлаСервер(ВладелецФайла) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЗаписьИзменилась = Ложь; + + МенеджерЗаписи = РегистрыСведений.НаличиеПрисоединенныхФайлов.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбъектСФайлами = ВладелецФайла; + МенеджерЗаписи.Прочитать(); + + Если НЕ ЗначениеЗаполнено(МенеджерЗаписи.ОбъектСФайлами) Тогда + МенеджерЗаписи.ОбъектСФайлами = ВладелецФайла; + ЗаписьИзменилась = Истина; + КонецЕсли; + + Если НЕ МенеджерЗаписи.ЕстьФайлы Тогда + МенеджерЗаписи.ЕстьФайлы = Истина; + ЗаписьИзменилась = Истина; + КонецЕсли; + + Если ПустаяСтрока(МенеджерЗаписи.ИдентификаторОбъекта) Тогда + МенеджерЗаписи.ИдентификаторОбъекта = ПолучитьОчереднойИдентификаторОбъекта(); + ЗаписьИзменилась = Истина; + КонецЕсли; + + Если ЗаписьИзменилась Тогда + МенеджерЗаписи.Записать(); + КонецЕсли; + +КонецПроцедуры + +// Создает у Получателя копии всех присоединенных файлов Источника. +// Источник и Получатель должны быть объектами одного типа. +// +// Параметры: +// Источник - Ссылка - объект, имеющий присоединенные файлы для копирования. +// Получатель - Ссылка - объект, к которому копируются присоединенные файлы. +// +Процедура СкопироватьПрисоединенныеФайлы(Знач Источник, Знач Получатель) Экспорт + + КопируемыеФайлы = ПолучитьВсеПодчиненныеФайлы(Источник.Ссылка); + Для Каждого КопируемыйФайл Из КопируемыеФайлы Цикл + Если КопируемыйФайл.ПометкаУдаления Тогда + Продолжить; + КонецЕсли; + МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(КопируемыйФайл); + КопияФайла = КопируемыйФайл.Скопировать(); + КопияФайлаСсылка = МенеджерОбъекта.ПолучитьСсылку(); + КопияФайла.УстановитьСсылкуНового(КопияФайлаСсылка); + КопияФайла.ВладелецФайла = Получатель.Ссылка; + КопияФайла.Редактирует = Справочники.Пользователи.ПустаяСсылка(); + + КопияФайла.ТекстХранилище = Новый ХранилищеЗначения(КопируемыйФайл.ТекстХранилище.Получить()); + КопияФайла.ФайлХранилище = Новый ХранилищеЗначения(КопируемыйФайл.ФайлХранилище.Получить()); + + КопияФайла.ЭлектронныеЦифровыеПодписи.Очистить(); + Для Каждого КопируемаяСтрокаТаблицы Из КопируемыйФайл.ЭлектронныеЦифровыеПодписи Цикл + КопияСтрокиТаблицы = КопияФайла.ЭлектронныеЦифровыеПодписи.Добавить(); + ЗаполнитьЗначенияСвойств(КопияСтрокиТаблицы, КопируемаяСтрокаТаблицы); + КопияСтрокиТаблицы.Подпись = КопируемаяСтрокаТаблицы.Подпись; + КопияСтрокиТаблицы.Сертификат = КопируемаяСтрокаТаблицы.Сертификат; + КонецЦикла; + + КопияФайла.СертификатыШифрования.Очистить(); + Для Каждого КопируемаяСтрокаТаблицы Из КопируемыйФайл.СертификатыШифрования Цикл + КопияСтрокиТаблицы = КопияФайла.СертификатыШифрования.Добавить(); + ЗаполнитьЗначенияСвойств(КопияСтрокиТаблицы, КопируемаяСтрокаТаблицы); + КопияСтрокиТаблицы.Сертификат = КопируемаяСтрокаТаблицы.Сертификат; + КонецЦикла; + + ДвоичныеДанные = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(КопируемыйФайл); + КопияФайла.ТипХраненияФайла = ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов(); + Если ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + ЗаписатьФайлВИнформационнуюБазу(КопияФайлаСсылка, ДвоичныеДанные); + Иначе + // добавить в один из томов (где есть свободное место) + ФайловыеФункцииСлужебный.ДобавитьНаДиск(ДвоичныеДанные, КопияФайла.ПутьКФайлу, КопияФайла.Том, + КопияФайла.ДатаМодификацииУниверсальная, "", + КопияФайла.Наименование, КопияФайла.Расширение, КопияФайла.Размер); + КонецЕсли; + КопияФайла.Записать(); + КонецЦикла; + +КонецПроцедуры + +Функция ИзвлечьТекст(Знач ДвоичныеДанные, Знач Расширение, ИзвлеченныйТекст) Экспорт + + Если ФайловыеФункцииСлужебный.ЭтоПлатформаWindows() + И ФайловыеФункцииСлужебный.ФоновоеИзвлечениеТекстовФайловНаСервере() Тогда + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(Расширение); + ДвоичныеДанные.Записать(ИмяВременногоФайла); + + Отказ = Ложь; + ИзвлеченныйТекст = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ИмяВременногоФайла, , Отказ); + + Попытка + УдалитьФайлы(ИмяВременногоФайла); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Извлечение текста'"), УровеньЖурналаРегистрации.Ошибка, , , + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + + Если Отказ Тогда + Возврат Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + Иначе + Возврат Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + КонецЕсли; + Иначе + ИзвлеченныйТекст = ""; + Возврат Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + КонецЕсли; + +КонецФункции + +// Очищает записи, содержащие символ с кодом 0 в реквизите ИдентификаторОбъекта. +Процедура ОчиститьНекорректныеЗаписиРегистраСведенийНаличиеПрисоединенныхФайлов() Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | НаличиеПрисоединенныхФайлов.ОбъектСФайлами + |ИЗ + | РегистрСведений.НаличиеПрисоединенныхФайлов КАК НаличиеПрисоединенныхФайлов + |ГДЕ + | НаличиеПрисоединенныхФайлов.ИдентификаторОбъекта = &ИдентификаторОбъекта"; + + Запрос = Новый Запрос(ТекстЗапроса); + Запрос.УстановитьПараметр("ИдентификаторОбъекта", Символ(0)); + + Выборка = Запрос.Выполнить().Выбрать(); + + НаборЗаписей = РегистрыСведений.НаличиеПрисоединенныхФайлов.СоздатьНаборЗаписей(); + Пока Выборка.Следующий() Цикл + НаборЗаписей.Отбор.ОбъектСФайлами.Установить(Выборка.ОбъектСФайлами); + НаборЗаписей.Очистить(); + НаборЗаписей.Записать(); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Функция ПолучениеФайлаЗапрещено(ЭлементДанных) + + Возврат ЭлементДанных.ЭтоНовый() + И Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ФайловыеФункцииСлужебный.ПолучитьЗапретЗагрузкиФайловПоРасширению(), + ФайловыеФункцииСлужебный.ПолучитьСписокЗапрещенныхРасширений(), + ЭлементДанных.Расширение) + ; +КонецФункции + +Процедура ПоместитьФайлВРеквизитСправочника(ЭлементДанных) + + Попытка + // Помещаем данные файла из тома на диске в служебный реквизит справочника + ЭлементДанных.ФайлХранилище = ФайловыеФункцииСлужебный.ПоместитьДвоичныеДанныеВХранилище(ЭлементДанных.Том, ЭлементДанных.ПутьКФайлу, ЭлементДанных.Ссылка.УникальныйИдентификатор()); + Исключение + // Возможно, файл не был найден. Отправку данных не прерываем. + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + КонецПопытки; + + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + ЭлементДанных.ПутьКФайлу = ""; + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + +КонецПроцедуры + +// Возвращает новый идентификатор объекта. +// Для получения нового идентификатора выбирает последний идентификатор объекта +// из регистра НаличиеПрисоединенныхФайлов увеличивает его значение +// на одну единицу и возвращает полученный результат. +// +// Возвращаемое значение: +// Строка (10) - новый идентификатор объекта. +// +Функция ПолучитьОчереднойИдентификаторОбъекта() + + // Вычисление нового идентификатора объекта. + Результат = "0000000000"; // По длине ресурса ИдентификаторОбъекта. + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | НаличиеПрисоединенныхФайлов.ИдентификаторОбъекта КАК ИдентификаторОбъекта + |ИЗ + | РегистрСведений.НаличиеПрисоединенныхФайлов КАК НаличиеПрисоединенныхФайлов + | + |УПОРЯДОЧИТЬ ПО + | ИдентификаторОбъекта УБЫВ"; + + Запрос = Новый Запрос; + Запрос.Текст = ТекстЗапроса; + + + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + Идентификатор = Выборка.ИдентификаторОбъекта; + + Если ПустаяСтрока(Идентификатор) Тогда + Возврат Результат; + КонецЕсли; + + // Правила вычисления, как в обычном сложении: при + // заполнении текущего разряда следующий разряд увеличивается + // на единицу, при этом, в текущем разряде значение становится + // равным нулю. Значениями разрядов выступают символы + // [0..9] и [a..z]. Таким образом один разряд может содержать + // 36 значений. + + Позиция = 10; // 9- индекс 10-го символа + Пока Позиция > 0 Цикл + + Символ = Сред(Идентификатор, Позиция, 1); + + Если Символ = "z" Тогда + Идентификатор = Лев(Идентификатор, Позиция-1) + "0" + Прав(Идентификатор, 10 - Позиция); + Позиция = Позиция - 1; + Продолжить; + + ИначеЕсли Символ = "9" Тогда + НовыйСимвол = "a"; + Иначе + НовыйСимвол = Символ(КодСимвола(Символ)+1); + КонецЕсли; + + Идентификатор = Лев(Идентификатор, Позиция-1) + НовыйСимвол + Прав(Идентификатор, 10 - Позиция); + Прервать; + КонецЦикла; + + Результат = Идентификатор; + КонецЕсли; + + + Возврат Результат; + +КонецФункции + +Функция ТекстЗапросаДляФайловСНеизвлеченнымТекстом(Знач ИмяСправочника, Знач ЧислоФайловВВыборке, Знач ПолучитьВсеФайлы = Ложь) + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ПрисоединенныеФайлы.Ссылка КАК Ссылка, + | ПрисоединенныеФайлы.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, + | ПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла, + | ПрисоединенныеФайлы.Расширение КАК Расширение, + | ПрисоединенныеФайлы.Наименование КАК Наименование + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) + | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) + | И НЕ ПрисоединенныеФайлы.Зашифрован"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 1", ?( + ПолучитьВсеФайлы, + "", + "ПЕРВЫЕ " + Формат(ЧислоФайловВВыборке, "ЧГ=; ЧН=")) ); + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); + + Возврат ТекстЗапроса; + +КонецФункции + +Функция ТекстЗапросаДляФайловВТомах(Знач ИмяСправочника) + + ТекстЗапроса = + "ВЫБРАТЬ + | ЕСТЬNULL(КОЛИЧЕСТВО(ПрисоединенныеФайлы.Ссылка), 0) КАК КоличествоФайлов + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | ПрисоединенныеФайлы.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); + + Возврат ТекстЗапроса; + +КонецФункции + +Функция ТекстЗапросаДляЧислаФайловСНеизвлеченнымТекстом(Знач ИмяСправочника) + + ТекстЗапроса = + "ВЫБРАТЬ + | ЕСТЬNULL(КОЛИЧЕСТВО(ПрисоединенныеФайлы.Ссылка), 0) КАК КоличествоФайлов + |ИЗ + | &ИмяСправочника КАК ПрисоединенныеФайлы + |ГДЕ + | (ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) + | ИЛИ ПрисоединенныеФайлы.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) + | И НЕ ПрисоединенныеФайлы.Зашифрован"; + + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", "Справочник." + ИмяСправочника); + + Возврат ТекстЗапроса; + +КонецФункции + +// Возвращает текст сообщения об ошибке, добавляя к нему ссылку на элемент +// справочника хранимого файла. +// +Функция ТекстОшибкиПриСохраненииФайлаВТоме(Знач СообщениеОбОшибке, Знач Файл) + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка, при сохранении файла в томе: + |%1 + | + |Ссылка на файл: ""%2"".'"), + СообщениеОбОшибке, + ПолучитьНавигационнуюСсылку(Файл) ); + +КонецФункции + diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/ПрисоединенныеФайлыСлужебный.mdo b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебный/ПрисоединенныеФайлыСлужебный.mdo new file mode 100644 index 000000000..ba47319b9 --- /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..213bf0596 --- /dev/null +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,89 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Присоединенные файлы". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// См. эту процедуру в модуле ПрисоединенныеФайлы. +Процедура ОбновитьПрисоединенныйФайл(Знач ПрисоединенныйФайл, Знач ИнформацияОФайле) Экспорт + + ПрисоединенныеФайлы.ОбновитьПрисоединенныйФайл(ПрисоединенныйФайл, ИнформацияОФайле); + +КонецПроцедуры + +// См. эту процедуру в модуле ПрисоединенныеФайлы. +Процедура ЗанестиИнформациюОднойПодписи(Знач ПрисоединенныйФайл, Знач ДанныеПодписи) Экспорт + + ПрисоединенныеФайлы.ЗанестиИнформациюОднойПодписи(ПрисоединенныйФайл, ДанныеПодписи); + +КонецПроцедуры + +// См. эту процедуру в модуле ПрисоединенныеФайлы. +Процедура ЗанестиИнформациюОПодписях(Знач ПрисоединенныйФайл, + Знач МассивПодписей, + Знач ИдентификаторФормы = Неопределено) Экспорт + + ПрисоединенныеФайлы.ЗанестиИнформациюОПодписях( + ПрисоединенныйФайл, МассивПодписей, ИдентификаторФормы); + +КонецПроцедуры + +// См. эту функцию в модуле ПрисоединенныеФайлы. +Функция ДобавитьФайл(Знач ВладелецФайла, + Знач ИмяБезРасширения, + Знач РасширениеБезТочки = Неопределено, + Знач ВремяИзменения = Неопределено, + Знач ВремяИзмененияУниверсальное = Неопределено, + Знач АдресФайлаВоВременномХранилище, + Знач АдресВременногоХранилищаТекста = "", + Знач Описание = "") Экспорт + + Возврат ПрисоединенныеФайлы.ДобавитьФайл( + ВладелецФайла, + ИмяБезРасширения, + РасширениеБезТочки, + ВремяИзменения, + ВремяИзмененияУниверсальное, + АдресФайлаВоВременномХранилище, + АдресВременногоХранилищаТекста, + Описание); + +КонецФункции + +// См. эту функцию в модуле ПрисоединенныеФайлы. +Функция ПолучитьДанныеФайла(Знач ПрисоединенныйФайл, + Знач ИдентификаторФормы = Неопределено, + Знач ПолучатьСсылкуНаДвоичныеДанные = Истина) Экспорт + + Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла( + ПрисоединенныйФайл, ИдентификаторФормы, ПолучатьСсылкуНаДвоичныеДанные); + +КонецФункции + +// См. эту процедуру в модуле ПрисоединенныеФайлыСлужебный. +Процедура Зашифровать(Знач ПрисоединенныйФайл, Знач ЗашифрованныеДанные, Знач МассивОтпечатков) Экспорт + + ПрисоединенныеФайлыСлужебный.Зашифровать( + ПрисоединенныйФайл, ЗашифрованныеДанные, МассивОтпечатков); + +КонецПроцедуры + +// См. эту процедуру в модуле ПрисоединенныеФайлыСлужебный. +Процедура Расшифровать(Знач ПрисоединенныйФайл, Знач РасшифрованныеДанные) Экспорт + + ПрисоединенныеФайлыСлужебный.Расшифровать(ПрисоединенныйФайл, РасшифрованныеДанные); + +КонецПроцедуры + +// Получает все подписи файла. +// +// Подробнее - см. описание ЭлектроннаяЦифроваяПодпись.ПолучитьВсеПодписи(). +// +Функция ПолучитьВсеПодписи(СсылкаНаОбъект, УникальныйИдентификатор) Экспорт + + Возврат ЭлектроннаяЦифроваяПодпись.ПолучитьВсеПодписи(СсылкаНаОбъект, УникальныйИдентификатор); + +КонецФункции + diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/ПрисоединенныеФайлыСлужебныйВызовСервера.mdo b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/ПрисоединенныеФайлыСлужебныйВызовСервера.mdo new file mode 100644 index 000000000..735d527e4 --- /dev/null +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйВызовСервера/ПрисоединенныеФайлыСлужебныйВызовСервера.mdo @@ -0,0 +1,10 @@ + + + ПрисоединенныеФайлыСлужебныйВызовСервера + + ru + Присоединенные файлы служебный вызов сервера + + true + true + diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl new file mode 100644 index 000000000..7671be169 --- /dev/null +++ b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/Module.bsl @@ -0,0 +1,976 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Присоединенные файлы". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Добавляет файлы перетаскиваением в список файлов. +// +// Параметры: +// ВладелецФайла - Ссылка - владелец файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// МассивИменФайлов - Массив Строк - путей к файлам. +// +Процедура ДобавитьФайлыПеретаскиванием(Знач ВладелецФайла, Знач ИдентификаторФормы, Знач МассивИменФайлов) Экспорт + + НастройкиРаботыСФайлами = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + + ПрисоединенныеФайлыМассив = Новый Массив; + ПоместитьВыбранныеФайлыВХранилище( + МассивИменФайлов, + ВладелецФайла, + НастройкиРаботыСФайлами, + ПрисоединенныеФайлыМассив, + ИдентификаторФормы); + + Если ПрисоединенныеФайлыМассив.Количество() = 1 Тогда + ПрисоединенныйФайл = ПрисоединенныеФайлыМассив[0]; + + ПоказатьОповещениеПользователя( + НСтр("ru = 'Создание'"), + ПолучитьНавигационнуюСсылку(ПрисоединенныйФайл), + ПрисоединенныйФайл, + БиблиотекаКартинок.Информация32); + + ПараметрыФормы = Новый Структура("ПрисоединенныйФайл, ЭтоНовый", ПрисоединенныйФайл, Истина); + ОткрытьФорму("ОбщаяФорма.ПрисоединенныйФайл", ПараметрыФормы, , ПрисоединенныйФайл); + КонецЕсли; + + Если ПрисоединенныеФайлыМассив.Количество() > 0 Тогда + ОповеститьОбИзменении(ПрисоединенныеФайлыМассив[0]); + Оповестить("Запись_ПрисоединенныйФайл", Новый Структура("ЭтоНовый", Истина), ПрисоединенныеФайлыМассив); + КонецЕсли; + +КонецПроцедуры + +#Если ВебКлиент Тогда +// Помещает файл с диска в хранилище присоединенных файлов (веб-клиент). +// +// Параметры: +// ВладелецФайла - Ссылка на владельца файла. +// НастройкиРаботыСФайлами - Структура. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Ссылка на файл. +// +Функция ПоместитьВыбранныеФайлыВХранилищеВеб(Знач ВладелецФайла, Знач НастройкиРаботыСФайлами, Знач ИдентификаторФормы) Экспорт + + АдресВременногоХранилищаФайла = ""; + ИмяФайла = ""; + Если НЕ ПоместитьФайл(АдресВременногоХранилищаФайла, ИмяФайла, ИмяФайла, Истина, ИдентификаторФормы) Тогда + Возврат Неопределено; + КонецЕсли; + + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); + + Если СтрокиПути.Количество() >= 2 Тогда + Расширение = СтрокиПути[СтрокиПути.Количество()-1]; + ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; + Иначе + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при помещении файла в хранилище: + |""%1"".'"), + ИмяФайла); + КонецЕсли; + + ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; + + Если Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ЗапретЗагрузкиФайловПоРасширению, + СписокЗапрещенныхРасширений, + Расширение) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + Расширение); + КонецЕсли; + + // Создание карточки Файла в базе данных. + ПрисоединенныйФайл = ПрисоединенныеФайлыСлужебныйВызовСервера.ДобавитьФайл( + ВладелецФайла, + ИмяБезРасширения, + Расширение, + , + , + АдресВременногоХранилищаФайла, + ""); + + Возврат ПрисоединенныйФайл; + +КонецФункции +#КонецЕсли + +// Помещает отредактированные файлы в хранилище. +// Используется, как обработчик команды окончания редактирования файлов. +// +// Параметры +// ДанныеФайла - Структура с данными файла. +// ИнформацияОФайле - Структура (возвращаемое значение) - информация о файле. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Истина - файл успешно помещен во временное хранилище. +// +Функция ПоместитьРедактируемыйФайлНаДискеВХранилище(Знач ДанныеФайла, ИнформацияОФайле, Знач ИдентификаторФормы) Экспорт + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами()Тогда + + РабочийКаталогПользователя = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); + + ПолноеИмяФайлаНаКлиенте = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; + + Файл = Новый Файл(ПолноеИмяФайлаНаКлиенте); + Если НЕ Файл.Существует() Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Файл не найден в рабочем каталоге.'")); + Возврат Ложь; + КонецЕсли; + + Возврат ПрисоединенныеФайлыКлиент.ПоместитьФайлНаДискеВХранилище( + ДанныеФайла, ИнформацияОФайле, ПолноеИмяФайлаНаКлиенте, ИдентификаторФормы); + + Иначе +#Если ВебКлиент Тогда + Результат = ПоместитьФайлНаДискеВХранилищеВеб(ДанныеФайла, ИнформацияОФайле, ИдентификаторФормы); + + Если НЕ Результат Тогда + Возврат Ложь; + КонецЕсли; + + Если ДанныеФайла.ИмяФайла <> ИнформацияОФайле.ИмяФайла Тогда + ТекстВопроса = НСтр("ru = 'Имя выбранного файла + |""%1"" + |отличается от имени файла в хранилище + |""%2"", + |продолжить?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ИнформацияОФайле.ИмяФайла, ДанныеФайла.ИмяФайла); + КодВозврата = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ОКОтмена); + Если КодВозврата <> КодВозвратаДиалога.ОК Тогда + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + Возврат Результат; +#КонецЕсли + КонецЕсли; + +КонецФункции + +// Выбирает файл с диска и помещает его во временное хранилище на сервере. +// +// Параметры: +// ДанныеФайла - Структура с данными файла. +// ИнформацияОФайле - Структура (возвращаемое значение) - информация о файле. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Истина - файл успешно выбран и помещен во временное хранилище, иначе Ложь. +// +Функция ВыбратьФайлНаДискеИПоместитьВХранилище(Знач ДанныеФайла, ИнформацияОФайле, Знач ИдентификаторФормы) Экспорт + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами()Тогда + + ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + ВыборФайла.МножественныйВыбор = Ложь; + ВыборФайла.ПолноеИмяФайла = ДанныеФайла.Наименование + "." + ДанныеФайла.Расширение; + ВыборФайла.Расширение = ДанныеФайла.Расширение; + ВыборФайла.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Все файлы (*.%1)|*.%1'"), ДанныеФайла.Расширение); + + Если НЕ ВыборФайла.Выбрать() Тогда + Возврат Ложь; + КонецЕсли; + + Возврат ПрисоединенныеФайлыКлиент.ПоместитьФайлНаДискеВХранилище( + ДанныеФайла, ИнформацияОФайле, ВыборФайла.ПолноеИмяФайла, ИдентификаторФормы); + + Иначе +#Если ВебКлиент Тогда + Возврат ПоместитьФайлНаДискеВХранилищеВеб(ДанныеФайла, ИнформацияОФайле, ИдентификаторФормы); +#КонецЕсли + КонецЕсли; + +КонецФункции + +#Если ВебКлиент Тогда +// Помещает файл с диска клиента во временное хранилище. +// Аналог функции ПоместитьФайлНаДискеВХранилище +// для веб-клиента без расширения для работы с файлами. +// +// Параметры: +// ДанныеФайла - Структура с данными файла. +// ИнформацияОФайле - Структура (возвращаемое значение) с информацией о файле. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Булево - Истина - файл успешно помещен в хранилище, иначе Ложь. +// +Функция ПоместитьФайлНаДискеВХранилищеВеб(Знач ДанныеФайла, ИнформацияОФайле, Знач ИдентификаторФормы) + + НастройкиРаботыСФайлами = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + + АдресВременногоХранилищаФайла = ""; + ВыбранноеИмяФайла = ""; + + Если Не ПоместитьФайл(АдресВременногоХранилищаФайла, ДанныеФайла.ИмяФайла, ВыбранноеИмяФайла, Истина, ИдентификаторФормы) Тогда + Возврат Ложь; + КонецЕсли; + + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ВыбранноеИмяФайла); + + Если СтрокиПути.Количество() >= 2 Тогда + НовоеИмя = СтрокиПути[СтрокиПути.Количество()-2]; + НовоеРасширение = СтрокиПути[СтрокиПути.Количество()-1]; + ИмяФайла = НовоеИмя + "." + НовоеРасширение; + ИначеЕсли СтрокиПути.Количество() = 1 Тогда + НовоеИмя = СтрокиПути[0]; + НовоеРасширение = ""; + ИмяФайла = НовоеИмя; + КонецЕсли; + + ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; + + Если Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ЗапретЗагрузкиФайловПоРасширению, + СписокЗапрещенныхРасширений, + НовоеРасширение) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + НовоеРасширение); + КонецЕсли; + + ИнформацияОФайле = Новый Структура; + ИнформацияОФайле.Вставить("ДатаМодификацииУниверсальная", Неопределено); + ИнформацияОФайле.Вставить("АдресФайлаВоВременномХранилище", АдресВременногоХранилищаФайла); + ИнформацияОФайле.Вставить("АдресВременногоХранилищаТекста", ""); + ИнформацияОФайле.Вставить("ИмяФайла", ИмяФайла); + ИнформацияОФайле.Вставить("Расширение", НовоеРасширение); + + Возврат Истина; + +КонецФункции +#КонецЕсли + +// Открывает каталог с файлом (при необходимости получает файл из хранилища). +// Используется, как обработчик команды открытия каталога с файлом. +// +// Параметры: +// ДанныеФайла - Структура с данными файла. +// +Процедура ОткрытьКаталогСФайлом(Знач ДанныеФайла) Экспорт + + Перем ПолноеИмяФайла; + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами() Тогда + + РабочийКаталогПользователя = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); + + Если ПустаяСтрока(РабочийКаталогПользователя) Тогда + Предупреждение(НСтр("ru = 'Не задан путь к локальному кэшу файлов'")); + Возврат; + КонецЕсли; + + ПолныйПуть = РабочийКаталогПользователя + ДанныеФайла.ОтносительныйПуть + ДанныеФайла.ИмяФайла; + + Файл = Новый Файл(ПолныйПуть); + + Если НЕ Файл.Существует() Тогда + КодВозврата = Вопрос(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл ""%1"" + |отсутствует в рабочем каталоге. Получить файл с сервера?'"), Файл.Имя), + РежимДиалогаВопрос.ДаНет); + + Если КодВозврата <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + ПолноеИмяФайлаНаКлиенте = ""; + ПрисоединенныеФайлыКлиент.ПолучитьФайлВРабочийКаталог( + ДанныеФайла.СсылкаНаДвоичныеДанныеФайла, + ДанныеФайла.ОтносительныйПуть, + ДанныеФайла.ДатаМодификацииУниверсальная, + ДанныеФайла.ИмяФайла, + РабочийКаталогПользователя, + ПолноеИмяФайлаНаКлиенте); + + КонецЕсли; + + ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(ПолныйПуть); + Иначе +#Если ВебКлиент Тогда + Предупреждение(НСтр("ru = 'Для выполнения операции требуется + |установить расширение работы с файлами.'")); +#КонецЕсли + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ЭЦП + +// Подписывает присоединенный файл: +// - предлагает пользователю выбрать ЭЦП для подписания и получает данные подписи, +// - записывает файл с эцп в хранилище. +// Используется в обработчике команды "Подписать" формы списка. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка присоединенный файл. +// ДанныеФайла - Структура с данными файла. +// +// Возвращаемое значение: +// Булево - Истина - файл успешно подписан и сохранен в хранилище, +// Ложь - ошибки или отказ во время работы. +// +Функция СформироватьПодписьФайла(Знач ПрисоединенныйФайл, Знач ДанныеФайла) Экспорт + + ДанныеПодписи = Неопределено; + + Если ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи(ПрисоединенныйФайл, ДанныеФайла, ДанныеПодписи) Тогда + + ПрисоединенныеФайлыСлужебныйВызовСервера.ЗанестиИнформациюОднойПодписи( + ПрисоединенныйФайл, ДанныеПодписи); + + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Формирует подпись для двоичных данных файла: +// - предлагает пользователю диалог выбора сертификатов ЭЦП, +// - подписывает двоичные данные присоединенного файла с целью получения подписи. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ДанныеФайла - Структура с данными файла. +// ДанныеПодписи - Структура (возвращаемое значение) - сформированная подпись. +// +// Возвращаемое значение: +// Булево - Истина, если данные присоединенного файла успешно подписаны, +// Ложь, если пользователь отказался от подписания или произошла ошибка. +// +Функция ВыбратьСертификатыЭЦПИСформироватьДанныеПодписи(Знач ПрисоединенныйФайл, Знач ДанныеФайла, ДанныеПодписи) Экспорт + +#Если ВебКлиент Тогда + Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда + Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, + |операция прервана.'")); + Возврат Ложь; + КонецЕсли; +#КонецЕсли + + МассивСтруктурСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Истина); + + ПараметрыФормы = Новый Структура("МассивСтруктурСертификатов, ОбъектСсылка", МассивСтруктурСертификатов, ПрисоединенныйФайл); + + СтруктураПараметровПодписи = ОткрытьФормуМодально("ОбщаяФорма.УстановкаПодписиЭЦП", ПараметрыФормы); + + Если ТипЗнч(СтруктураПараметровПодписи) <> Тип("Структура") Тогда + Возврат Ложь; + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); + + Отказ = Ложь; + МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(Отказ); + Если Отказ Тогда + Возврат Ложь + КонецЕсли; + + ДанныеПодписи = ЭлектроннаяЦифроваяПодписьКлиент.СформироватьДанныеПодписи( + МенеджерКриптографии, + ПрисоединенныйФайл, + ДвоичныеДанные, + СтруктураПараметровПодписи); + + Возврат Истина; + +КонецФункции + +// Добавляет ЭЦП из файла(ов) на диске. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл, которому требуется добавить подпись. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +Процедура ДобавитьЭЦПИзФайла(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) Экспорт + +#Если ВебКлиент Тогда + Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда + Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, + |операция прервана.'")); + Возврат; + КонецЕсли; +#КонецЕсли + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами() Тогда + МассивПодписей = ПолучитьМассивПодписей(ПрисоединенныйФайл, ИдентификаторФормы); + + Если МассивПодписей.Количество() > 0 Тогда + + ПрисоединенныеФайлыСлужебныйВызовСервера.ЗанестиИнформациюОПодписях( + ПрисоединенныйФайл, МассивПодписей, ИдентификаторФормы); + + ОповеститьОДобавленииПодписиИзФайла(ПрисоединенныйФайл, МассивПодписей.Количество()); + КонецЕсли; + Иначе +#Если ВебКлиент Тогда + Предупреждение(НСтр("ru = 'Для выполнения операции требуется + |установить расширение работы с файлами.'")); +#КонецЕсли + КонецЕсли; + +КонецПроцедуры + +// Возвращает подписи, для чего вызывает диалог добавления подписей. +// +// ОСОБЫЕ УСЛОВИЯ +// Требуется наличие подключенного расширения для работы с файлами +// и расширения для работы со средствами криптографии. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Массив Структур подписей. +// +Функция ПолучитьМассивПодписей(Знач ПрисоединенныйФайл, Знач ИдентификаторФормы = Неопределено) Экспорт + + МассивФайловПодписей = ОткрытьФормуМодально("ОбщаяФорма.ДобавлениеПодписиИзФайла"); + + Если ТипЗнч(МассивФайловПодписей) <> Тип("Массив") ИЛИ МассивФайловПодписей.Количество() = 0 Тогда + Возврат Новый Массив; + КонецЕсли; + + Возврат ЭлектроннаяЦифроваяПодписьКлиент.СформироватьПодписиДляЗанесениюВБазу( + ПрисоединенныйФайл, МассивФайловПодписей, ИдентификаторФормы); + +КонецФункции + +// Служебная процедура используется для оповещения системы об изменении объекта, +// а так же для отображения оповещения пользователя о добавлении подписей. +// Параметры +// ПрисоединенныйФайл - ссылка на файл с добавленными подписями +// КоличествоПодписей - количество добавленных подписей +// +Процедура ОповеститьОДобавленииПодписиИзФайла(ПрисоединенныйФайл, КоличествоПодписей) Экспорт + + ОповеститьОбИзменении(ПрисоединенныйФайл); + + Если КоличествоПодписей = 1 Тогда + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Добавлена подпись из файла для ""%1"".'"), + ПрисоединенныйФайл); + Иначе + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Добавлены подписи из файлов для ""%1"".'"), + ПрисоединенныйФайл); + КонецЕсли; + + Состояние(ТекстСообщения); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Шифрование. + +// Шифрует файл в хранилище: +// - предлагает пользователю выбрать сертификаты для шифрования, +// - выполняет шифрование файла, +// - записывает зашифрованные данные вместе с отпечатками в хранилище, +// - оповещает систему и пользователя об изменениях. +// Используется в обработчике команды шифрования файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл, который требуется зашифровать. +// ДанныеФайла - Структура с данными файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +Процедура Зашифровать(Знач ПрисоединенныйФайл, Знач ДанныеФайла, Знач ИдентификаторФормы) Экспорт + + ЗашифрованныеДанные = Неопределено; + МассивОтпечатков = Новый Массив; + + Если НЕ ПолучитьЗашифрованныеДанные(ПрисоединенныйФайл, + ДанныеФайла, + ИдентификаторФормы, + ЗашифрованныеДанные, + МассивОтпечатков) Тогда + Возврат; + КонецЕсли; + + ПрисоединенныеФайлыСлужебныйВызовСервера.Зашифровать(ПрисоединенныйФайл, ЗашифрованныеДанные, МассивОтпечатков); + + ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге(ПрисоединенныйФайл, ДанныеФайла); + +КонецПроцедуры + +// Шифрует двоичные данные файла с помощью сертификатов, выбранных пользователем. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ДанныеФайла - Структура с данными файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// ЗашифрованныеДанные - Структура (возвращаемое значение) - содержит зашифрованные данные файла (для записи). +// МассивОтпечатков - Массив (возвращаемое значение) - содержит отпечатки. +// +// Возвращаемое значение: +// Истина, если данные успешно зашифрованы, Ложь - иначе. +// +Функция ПолучитьЗашифрованныеДанные(Знач ПрисоединенныйФайл, + Знач ДанныеФайла, + Знач ИдентификаторФормы, + ЗашифрованныеДанные, + МассивОтпечатков) Экспорт + +#Если ВебКлиент Тогда + Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда + Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, + |операция прервана.'")); + Возврат Ложь; + КонецЕсли; +#КонецЕсли + + Если ДанныеФайла.Зашифрован Тогда + Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл ""%1"" + |уже зашифрован.'"), Строка(ПрисоединенныйФайл))); + Возврат Ложь; + КонецЕсли; + + Если НЕ ДанныеФайла.Редактирует.Пустая() Тогда + Предупреждение(НСтр("ru = 'Нельзя зашифровать занятый файл.'")); + Возврат Ложь; + КонецЕсли; + + МассивСтруктурСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Ложь); + + ОтпечатокЛичногоСертификатаДляШифрования = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ОтпечатокЛичногоСертификатаДляШифрования; + + // Отпечаток сохраненный в ХранилищеНастроек мог устареть - сертификат могли уже удалить. + Если ОтпечатокЛичногоСертификатаДляШифрования <> Неопределено И НЕ ПустаяСтрока(ОтпечатокЛичногоСертификатаДляШифрования) Тогда + Сертификат = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьСертификатПоОтпечатку(ОтпечатокЛичногоСертификатаДляШифрования, Истина); // ТолькоЛичные + Если Сертификат = Неопределено Тогда + ОтпечатокЛичногоСертификатаДляШифрования = ""; + КонецЕсли; + КонецЕсли; + + Если ОтпечатокЛичногоСертификатаДляШифрования = Неопределено + ИЛИ ПустаяСтрока(ОтпечатокЛичногоСертификатаДляШифрования) Тогда + + МассивСтруктурЛичныхСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Истина); // ТолькоЛичные + + ПараметрыФормы = Новый Структура("МассивСтруктурСертификатов", МассивСтруктурЛичныхСертификатов); + СтруктураВозврата = ОткрытьФормуМодально("ОбщаяФорма.ВыборСертификата", ПараметрыФормы); + Если ТипЗнч(СтруктураВозврата) = Тип("Структура") Тогда + ОтпечатокЛичногоСертификатаДляШифрования = СтруктураВозврата.Отпечаток; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения( + "ЭЦП", + "ОтпечатокЛичногоСертификатаДляШифрования", + ОтпечатокЛичногоСертификатаДляШифрования); + Иначе + Предупреждение(НСтр("ru = 'Не выбран персональный сертификат для шифрования.'")); + Возврат Ложь; + КонецЕсли; + КонецЕсли; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("МассивСтруктурСертификатов", МассивСтруктурСертификатов); + ПараметрыФормы.Вставить("ФайлСсылка", ПрисоединенныйФайл); + ПараметрыФормы.Вставить("ОтпечатокЛичногоСертификатаДляШифрования", ОтпечатокЛичногоСертификатаДляШифрования); + + МассивСертификатов = ОткрытьФормуМодально("ОбщаяФорма.ВыборСертификатовШифрования", ПараметрыФормы); + + Если ТипЗнч(МассивСертификатов) = Тип("Массив") Тогда + + Возврат ВыполнитьШифрованиеПоПараметрам(МассивСертификатов, + ДанныеФайла, + ИдентификаторФормы, + ЗашифрованныеДанные, + МассивОтпечатков); + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Шифрует двоичные данные файла по указанному массиву сертификатов. +// +// Параметры: +// МассивСертификатов - Массив сертификатов для шифрования. +// ДанныеФайла - Структура данных файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// ЗашифрованныеДанные - Структура (возвращаемое значение) - содержит зашифрованные данные файла. +// МассивОтпечатков - Массив (возвращаемое значение) - содержит отпечатки. +// +// Возвращаемое значение: +// Истина - шифрование выполнено успешно, иначе Ложь. +// +Функция ВыполнитьШифрованиеПоПараметрам(Знач МассивСертификатов, + Знач ДанныеФайла, + Знач ИдентификаторФормы, + ЗашифрованныеДанные, + МассивОтпечатков) + + МассивОтпечатков = Новый Массив; + + Для Каждого Сертификат Из МассивСертификатов Цикл + Отпечаток = Base64Строка(Сертификат.Отпечаток); + Представление = ЭлектроннаяЦифроваяПодписьКлиентСервер.ПолучитьПредставлениеПользователя(Сертификат.Субъект); + ДвоичныеДанныеСертификата = Сертификат.Выгрузить(); + + ОтпечатокСтруктура = Новый Структура("Отпечаток, Представление, Сертификат", Отпечаток, Представление, ДвоичныеДанныеСертификата); + МассивОтпечатков.Добавить(ОтпечатокСтруктура); + КонецЦикла; + + Состояние(НСтр("ru = 'Выполняется шифрование ...'")); + + Отказ = Ложь; + МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(Отказ); + Если Отказ Тогда + Возврат Ложь; + КонецЕсли; + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); + ШифрованныйФайлДвоичныеДанные = МенеджерКриптографии.Зашифровать(ДвоичныеДанные, МассивСертификатов); + АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ШифрованныйФайлДвоичныеДанные, ИдентификаторФормы); + + ЗашифрованныеДанные = Новый Структура; + ЗашифрованныеДанные.Вставить("АдресВременногоХранилища", АдресВременногоХранилища); + + Состояние(НСтр("ru = 'Шифрование завершено.'")); + + Возврат Истина; + +КонецФункции + +Процедура ОповеститьОбИзмененииИУдалитьФайлВРабочемКаталоге(Знач ПрисоединенныйФайл, Знач ДанныеФайла) Экспорт + + ОповеститьОбИзменении(ПрисоединенныйФайл); + + Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл ""%1"" + |зашифрован.'"), + ПрисоединенныйФайл) ); + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами()Тогда + + РабочийКаталогПользователя = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); + ПолныйПутьКФайлу = РабочийКаталогПользователя + ДанныеФайла.ИмяФайла; + + Файл = Новый Файл(ПолныйПутьКФайлу); + + Если Файл.Существует() Тогда + Попытка + Файл.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ПолныйПутьКФайлу); + Исключение + // Попытка удалить файл с диска. + КонецПопытки; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Расшифровывает файл в хранилище: +// - показывает пользователю диалог с предложением расшифровать файл, +// - получает двоичные данные и массив отпечатков, +// - производит расшифровку, +// - записывает расшифрованные данные файла в хранилище. +// Используется как обработчик команды расшифровки файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ДанныеФайла - Структура с данными файла. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +Процедура Расшифровать(Знач ПрисоединенныйФайл, Знач ДанныеФайла, Знач ИдентификаторФормы) Экспорт + + РасшифрованныеДанные = Неопределено; + + Если НЕ ПолучитьРасшифрованныеДанные(ПрисоединенныйФайл, ДанныеФайла, РасшифрованныеДанные, ИдентификаторФормы) Тогда + Возврат; + КонецЕсли; + + ПрисоединенныеФайлыСлужебныйВызовСервера.Расшифровать(ПрисоединенныйФайл, РасшифрованныеДанные); + + ОповеститьОРасшифровкеФайла(ПрисоединенныйФайл); + +КонецПроцедуры + +// Получает расшифрованные данные файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// ДанныеФайла - Структура с данными файла. +// РасшифрованныеДанные - Структура (возвращаемое значение) - содержит расшифрованные данные. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +// Возвращаемое значение: +// Истина - данные успешно расшифрованы, Ложь - данные не расшифрованы. +// +Функция ПолучитьРасшифрованныеДанные(Знач ПрисоединенныйФайл, Знач ДанныеФайла, РасшифрованныеДанные, Знач ИдентификаторФормы) Экспорт + +#Если ВебКлиент Тогда + Если НЕ ПодключитьРасширениеРаботыСКриптографией() Тогда + Предупреждение(НСтр("ru = 'Расширение для работы с криптографией не подключено, + |операция прервана.'")); + Возврат Ложь; + КонецЕсли; +#КонецЕсли + + ПредставленияСертификатов = ""; + + МассивСертификатовШифрования = ДанныеФайла.МассивСертификатовШифрования; + Для Каждого СтруктураСертификата Из МассивСертификатовШифрования Цикл + Отпечаток = СтруктураСертификата.Отпечаток; + Сертификат = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьСертификатПоОтпечатку(Отпечаток, Истина); + Если Сертификат <> Неопределено Тогда + Если НЕ ПустаяСтрока(ПредставленияСертификатов) Тогда + ПредставленияСертификатов = ПредставленияСертификатов + Символы.ПС; + КонецЕсли; + ПредставленияСертификатов = ПредставленияСертификатов + СтруктураСертификата.Представление; + КонецЕсли; + КонецЦикла; + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Введите пароль для расшифровки'")); + ПараметрыФормы.Вставить("ПредставленияСертификатов", ПредставленияСертификатов); + ПараметрыФормы.Вставить("Файл", ПрисоединенныйФайл); + + КодВозврата = ОткрытьФормуМодально("ОбщаяФорма.ВводПароляСОписаниями", ПараметрыФормы); + + Если ТипЗнч(КодВозврата) = Тип("Строка") Тогда + Пароль = КодВозврата; + Иначе + Возврат Ложь; + КонецЕсли; + + Состояние(НСтр("ru = 'Выполняется расшифровка ...'")); + + ДвоичныеДанные = ПолучитьИзВременногоХранилища(ДанныеФайла.СсылкаНаДвоичныеДанныеФайла); + + Отказ = Ложь; + МенеджерКриптографии = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМенеджерКриптографии(Отказ); + Если Отказ Тогда + Возврат Ложь + КонецЕсли; + + МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Пароль; + ДвоичныеДанныеРасшифрованные = МенеджерКриптографии.Расшифровать(ДвоичныеДанные); + АдресВременногоХранилищаРасшифрованныхДанных = ПоместитьВоВременноеХранилище(ДвоичныеДанныеРасшифрованные, ИдентификаторФормы); + +#Если ВебКлиент Тогда + АдресВременногоХранилищаТекста = ""; +#Иначе + ИзвлекатьТекстыФайловНаСервере = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере; + Если НЕ ИзвлекатьТекстыФайловНаСервере Тогда + ПолныйПутьКФайлу = ПолучитьИмяВременногоФайла(ДанныеФайла.Расширение); + ДвоичныеДанныеРасшифрованные.Записать(ПолныйПутьКФайлу); + АдресВременногоХранилищаТекста = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище(ПолныйПутьКФайлу, ИдентификаторФормы); + УдалитьФайлы(ПолныйПутьКФайлу); + Иначе + АдресВременногоХранилищаТекста = ""; + КонецЕсли; +#КонецЕсли + + РасшифрованныеДанные = Новый Структура; + РасшифрованныеДанные.Вставить("АдресВременногоХранилища", АдресВременногоХранилищаРасшифрованныхДанных); + РасшифрованныеДанные.Вставить("АдресВременногоХранилищаТекста", АдресВременногоХранилищаТекста); + + Состояние(НСтр("ru = 'Расшифровка завершена.'")); + + Возврат Истина; + +КонецФункции + +// Оповещает систему и пользователя о расшифровке файла. +// +// Параметры: +// ПрисоединенныйФайл - Ссылка на файл. +// +Процедура ОповеститьОРасшифровкеФайла(Знач ПрисоединенныйФайл) Экспорт + + ОповеститьОбИзменении(ПрисоединенныйФайл); + + Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Файл ""%1"" + |расшифрован.'"), + ПрисоединенныйФайл) ); + +КонецПроцедуры + +// Помещает файлы с диска в хранилище присоединенных файлов. +// +// Параметры: +// ВыбранныеФайлы - Массив - пути к файлам на диске. +// ВладелецФайла - Ссылка на владельца файла. +// НастройкиРаботыСФайлами - Структура. +// ПрисоединенныеФайлыМассив - Массив (возвращаемое значение) - заполняется ссылками +// на добавленные файлы. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// +Процедура ПоместитьВыбранныеФайлыВХранилище(Знач ВыбранныеФайлы, + Знач ВладелецФайла, + Знач НастройкиРаботыСФайлами, + ПрисоединенныеФайлыМассив, + Знач ИдентификаторФормы) Экспорт + + МаксРазмерФайла = НастройкиРаботыСФайлами.МаксимальныйРазмерФайла; + ИзвлекатьТекстыФайловНаСервере = НастройкиРаботыСФайлами.ИзвлекатьТекстыФайловНаСервере; + ЗапретЗагрузкиФайловПоРасширению = НастройкиРаботыСФайлами.ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = НастройкиРаботыСФайлами.СписокЗапрещенныхРасширений; + + ТекущаяПозиция = 0; + + ПоследнийСохраненныйФайл = Неопределено; + + Для Каждого ПолноеИмяФайла Из ВыбранныеФайлы Цикл + + ТекущаяПозиция = ТекущаяПозиция + 1; + + Файл = Новый Файл(ПолноеИмяФайла); + + Если Файл.Размер() > МаксРазмерФайла Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Файл.Размер(), МаксРазмерФайла, Файл.Имя)); + Продолжить; + КонецЕсли; + + Если Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ЗапретЗагрузкиФайловПоРасширению, + СписокЗапрещенныхРасширений, + Файл.Расширение) Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. + |Обратитесь к администратору.'"), + Файл.Расширение); + КонецЕсли; + + Если ИзвлекатьТекстыФайловНаСервере Тогда + АдресВременногоХранилищаТекста = ""; + Иначе + АдресВременногоХранилищаТекста = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( + ПолноеИмяФайла, ИдентификаторФормы); + КонецЕсли; + + ВремяИзменения = ОбщегоНазначенияКлиент.ДатаСеанса(); + ВремяИзмененияУниверсальное = Файл.ПолучитьУниверсальноеВремяИзменения(); + + ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, Файл, ТекущаяПозиция); + ПоследнийСохраненныйФайл = Файл; + + ПомещаемыеФайлы = Новый Массив; + Описание = Новый ОписаниеПередаваемогоФайла(Файл.ПолноеИмя, ""); + ПомещаемыеФайлы.Добавить(Описание); + + ПомещенныеФайлы = Новый Массив; + + Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, ИдентификаторФормы) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при помещении файла в хранилище: + |""%1"".'"), + Файл.ПолноеИмя) ); + Продолжить; + КонецЕсли; + + АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; + + // Создание карточки Файла в базе данных. + ПрисоединенныйФайл = ПрисоединенныеФайлыСлужебныйВызовСервера.ДобавитьФайл( + ВладелецФайла, + Файл.ИмяБезРасширения, + ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(Файл.Расширение), + ВремяИзменения, + ВремяИзмененияУниверсальное, + АдресВременногоХранилищаФайла, + АдресВременногоХранилищаТекста); + + Если ПрисоединенныйФайл = Неопределено Тогда + Продолжить; + КонецЕсли; + + ПрисоединенныеФайлыМассив.Добавить(ПрисоединенныйФайл); + + КонецЦикла; + + ОбновитьСостояниеОСохраненииФайлов(ВыбранныеФайлы, ПоследнийСохраненныйФайл); + +КонецПроцедуры + +Функция СообщениеОПревышенииМаксимальноДопустимогоРазмераФайла(Знач РазмерФайла, + Знач МаксимальныйРазмерФайла, + Знач ИмяФайла) Экспорт + + РазмерВМб = РазмерФайла / (1024 * 1024); + РазмерВМбМакс = МаксимальныйРазмерФайла / (1024 * 1024); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размер файла ""%1"" (%2 Мб) + |превышает максимально допустимый размер файла (%3 Мб).'"), + ИмяФайла, + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс) ); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Процедура ОбновитьСостояниеОСохраненииФайлов(Знач ВыбранныеФайлы, Знач Файл, Знач ТекущаяПозиция = Неопределено); + + Если Файл = Неопределено Тогда + Возврат; + КонецЕсли; + + РазмерВМб = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(Файл.Размер() / (1024 * 1024)); + + Если ВыбранныеФайлы.Количество() > 1 Тогда + + Если ТекущаяПозиция = Неопределено Тогда + Состояние(НСтр("ru = 'Сохранение файлов завершено.'")); + Иначе + ИндикаторПроцент = ТекущаяПозиция * 100 / ВыбранныеФайлы.Количество(); + + НадписьПодробнее = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб) ...'"), Файл.Имя, РазмерВМб); + + ТекстСостояния = НСтр("ru = 'Сохранение нескольких файлов.'"); + + Состояние(ТекстСостояния, ИндикаторПроцент, НадписьПодробнее, БиблиотекаКартинок.Информация32); + КонецЕсли; + Иначе + Если ТекущаяПозиция = Неопределено Тогда + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохранение файла ""%1"" (%2 Мб) + |завершено.'"), Файл.Имя, РазмерВМб); + Иначе + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сохраняется файл ""%1"" (%2 Мб). + |Пожалуйста, подождите...'"), Файл.Имя, РазмерВМб); + КонецЕсли; + Состояние(ТекстПояснения); + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/ПрисоединенныеФайлыСлужебныйКлиент.mdo b/SSL/src/CommonModules/ПрисоединенныеФайлыСлужебныйКлиент/ПрисоединенныеФайлыСлужебныйКлиент.mdo new file mode 100644 index 000000000..03281794e --- /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 deleted file mode 100644 index 91fee10e3..000000000 --- a/SSL/src/CommonModules/ПрисоединенныеФайлыСобытия/Module.bsl +++ /dev/null @@ -1,277 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Присоединенные файлы". -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Обработчик подписки присоединенного файла на событие "Перед записью". -Процедура ПередЗаписьюПрисоединенногоФайла(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Источник.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Источник.Расширение); - - Если Источник.ЭтоНовый() Тогда - Источник.Автор = Пользователи.ТекущийПользователь(); - КонецЕсли; - -КонецПроцедуры - -// Обработчик подписки присоединенного файла на событие "Перед удалением". -Процедура ПередУдалениемПрисоединенногоФайла(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - ПрисоединенныеФайлы.ПередУдалениемПрисоединенногоФайлаСервер(Источник.Ссылка, Источник.ВладелецФайла, Источник.Том, Источник.ТипХраненияФайла, Источник.ПутьКФайлу); - -КонецПроцедуры - -// Обработчик подписки присоединенного файла на событие "При записи". -Процедура ПриЗаписиПрисоединенногоФайла(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник); - Возврат; - КонецЕсли; - - ПрисоединенныеФайлы.ПриЗаписиПрисоединенногоФайлаСервер(Источник.ВладелецФайла); - -КонецПроцедуры - -// Обработчик подписки присоединенного файла на событие "Обработка получения формы". -Процедура ОбработкаПолученияФормыПрисоединенногоФайла(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт - - Если ВидФормы = "ФормаОбъекта" Тогда - ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныйФайл"; - СтандартнаяОбработка = Ложь; - - ИначеЕсли ВидФормы = "ФормаСписка" Тогда - ВыбраннаяФорма = "ОбщаяФорма.ПрисоединенныеФайлы"; - СтандартнаяОбработка = Ложь; - КонецЕсли; -КонецПроцедуры - -// Обработчик подписки владельца присоединенного файла на событие "Перед записью". -// Помечает на удаление связанные файлы. -// -// Параметры: -// Источник - Объект - владелец присоединенного файла, кроме ДокументОбъект. -// Отказ - Булево - признак отказа от записи. -// -Процедура УстановитьПометкуУдаленияПрисоединенныхФайлов(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - ПометитьНаУдалениеПриложенныеФайлы(Источник); - -КонецПроцедуры - -// Обработчик подписки владельца-документа присоединенного файла на событие "Перед записью". -// Помечает на удаление связанные файлы. -// -// Параметры: -// Источник - ДокументОбъект - владелец присоединенного файла. -// Отказ - Булево - признак отказа от записи. -// -Процедура УстановитьПометкуУдаленияПрисоединенныхФайловДокументов(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - ПометитьНаУдалениеПриложенныеФайлы(Источник); - -КонецПроцедуры - -// Обработчик подписки владельца присоединенного файла на событие "При записи на сервере". -Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, Параметры) Экспорт - - Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда - ПрисоединенныеФайлы.СкопироватьПрисоединенныеФайлы(Параметры.ЗначениеКопирования, ТекущийОбъект); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок - -Процедура ПометитьНаУдалениеПриложенныеФайлы(Знач Источник) - - Если Источник.ЭтоНовый() ТОгда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - ИсточникСсылкаПометкаУдаления = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Источник.Ссылка, "ПометкаУдаления"); - - Если Источник.ПометкаУдаления = ИсточникСсылкаПометкаУдаления Тогда - Возврат; - КонецЕсли; - - ТекстЗапроса = - "ВЫБРАТЬ - | Файлы.Ссылка КАК Ссылка, - | Файлы.Редактирует КАК Редактирует - |ИЗ - | &ИмяСправочника КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; - - ПолноеИмяСправочника = "Справочник." + Источник.Метаданные().Имя + "ПрисоединенныеФайлы"; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяСправочника", ПолноеИмяСправочника); - - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.УстановитьПараметр("ВладелецФайла", Источник.Ссылка); - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - Если Источник.ПометкаУдаления И Не Выборка.Редактирует.Пустая() Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '""%1"" не может быть удален, - |т.к. содержит файл ""%2"", - |занятый для редактирования.'"), - Строка(Источник.Ссылка), - Строка(Выборка.Ссылка)); - КонецЕсли; - ФайлОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - ФайлОбъект.УстановитьПометкуУдаления(Источник.ПометкаУдаления); - КонецЦикла; - -КонецПроцедуры - -Процедура ЗаписатьДанныеФайлаВРегистрПриОбмене(Знач Источник) - - Перем ДвоичныеДанныеФайла; - - Если Источник.ДополнительныеСвойства.Свойство("ДвоичныеДанныеФайла", ДвоичныеДанныеФайла) Тогда - НаборЗаписей = РегистрыСведений.ПрисоединенныеФайлы.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ПрисоединенныйФайл.Использование = Истина; - НаборЗаписей.Отбор.ПрисоединенныйФайл.Значение = Источник.Ссылка; - - Запись = НаборЗаписей.Добавить(); - Запись.ПрисоединенныйФайл = Источник.Ссылка; - Запись.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанныеФайла, Новый СжатиеДанных(9)); - - НаборЗаписей.ОбменДанными.Загрузка = Истина; - НаборЗаписей.Записать(); - - Источник.ДополнительныеСвойства.Удалить("ДвоичныеДанныеФайла"); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий обмена - -// Проверяет, что переданный элемент данных - это объект присоединенного файла. -Процедура ЭтоЭлементФайл(Знач ЭлементДанных, ЭтоФайл) Экспорт - - ЭтоФайл = ЭтоФайл Или ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных); - -КонецПроцедуры - -// Проверяет, что переданный элемент данных - это объект присоединенного файла. -Функция ЭтоЭлементПрисоединенныеФайлы(Знач ЭлементДанных) Экспорт - - МетаданныеЭлемента = ЭлементДанных.Метаданные(); - - Возврат ОбщегоНазначения.ЭтоСправочник(МетаданныеЭлемента) - И ВРег(Прав(МетаданныеЭлемента.Имя, СтрДлина("ПрисоединенныеФайлы"))) = ВРег("ПрисоединенныеФайлы"); - -КонецФункции - -// Создает начальный образ работы с файлами. -Процедура УстановитьИмяФайлаПриОтправкеДанныхФайла(Знач ЭлементДанных, Знач ИмяКаталогаФайлов, Знач УникальныйИдентификатор, ПутьФайла) Экспорт - - Если ПутьФайла <> Неопределено Тогда - Возврат; - КонецЕсли; - ПутьФайла = Неопределено; - - Если ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Тогда - ПутьФайла = ИмяКаталогаФайлов + "\" + УникальныйИдентификатор + "CatalogRef_" + ЭлементДанных.Метаданные().Имя; - КонецЕсли; - -КонецПроцедуры - -// Используется в обмене при получении данных. -Процедура ДобавитьНаДискПриПолученииДанныхФайла(Знач ЭлементДанных, - Знач ДвоичныеДанные, - ПутьКФайлуНаТоме, - СсылкаНаТом, - Знач ВремяИзменения, - Знач ИмяБезРасширения, - Знач Расширение, - Знач РазмерФайла, - Знач Зашифрован) Экспорт - - Если ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Тогда - - ФайловыеФункции.ДобавитьНаДиск( - ДвоичныеДанные, - ПутьКФайлуНаТоме, - СсылкаНаТом, - ВремяИзменения, - "", - ИмяБезРасширения, - Расширение, - РазмерФайла, - Зашифрован); - КонецЕсли; - -КонецПроцедуры - -// Выполняет дополнительную обработку при отправке данных обмена. -// Помещает данные присоединенного файла из регистра во временное хранилище, -// адрес которого запоминается в реквизите ФайлХранилище. -// -Процедура ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(Знач ЭлементДанных) Экспорт - - Если Не ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Тогда - Возврат; - КонецЕсли; - - АдресВоВременномХранилище = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ЭлементДанных.Ссылка).СсылкаНаДвоичныеДанныеФайла; - - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВоВременномХранилище), Новый СжатиеДанных(9)); - ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ЭлементДанных.ПутьКФайлу = ""; - ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - -КонецПроцедуры - -// Выполняет дополнительную обработку при получении данных обмена. -// Размещает присоединенные файлы в регистре. -// -Процедура ВыполнитьДополнительнуюОбработкуПриПолученииДанных(Знач ЭлементДанных) Экспорт - - Если Не ЭтоЭлементПрисоединенныеФайлы(ЭлементДанных) Тогда - Возврат; - КонецЕсли; - - Значение = ЭлементДанных.ФайлХранилище.Получить(); - Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда - ЭлементДанных.ДополнительныеСвойства.Вставить("ДвоичныеДанныеФайла", Значение); - КонецЕсли; - - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); - ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ЭлементДанных.ПутьКФайлу = ""; - ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl index 5300f4441..d713df190 100644 --- a/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl +++ b/SSL/src/CommonModules/ПроверкаЛегальностиПолученияОбновленияКлиент/Module.bsl @@ -1,3 +1,8 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Проверка легальности получения обновления". +// +//////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -36,20 +41,22 @@ КонецФункции -// Процедура для проверки легальности получения обновления. +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Проверить легальность получения обновления при запуске программы. // Должна вызываться перед обновлением информационной базы. // -Функция ПодтвердитьЛегальностьПолученияОбновления() Экспорт +Функция ПриНачалеРаботыСистемы() Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыКлиента.РазделениеВключено Тогда Возврат Истина; КонецЕсли; - ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - - Если ПараметрыРаботыКлиента.ПервыйВходВОбластьДанных - ИЛИ НЕ ПараметрыРаботыКлиента.НеобходимоОбновлениеИнформационнойБазы - ИЛИ НЕ ПараметрыРаботыКлиента.ЭтоГлавныйУзел Тогда + Если ПараметрыКлиента.ПервыйВходВОбластьДанных + Или Не ПараметрыКлиента.НеобходимоОбновлениеИнформационнойБазы + Или Не ПараметрыКлиента.ЭтоГлавныйУзел Тогда Возврат Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl index fc78db7d6..21654ced0 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервиса/Module.bsl @@ -233,11 +233,15 @@ ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); - Пользователи.АвторизоватьТекущегоПользователя(); + ПользователиСлужебный.АвторизоватьТекущегоПользователя(); Если ИДФайлаВыгрузки <> Неопределено Тогда ИмяФайлаВыгрузки = ПолучитьФайлИзХранилищаМенеджераСервиса(ИДФайлаВыгрузки); + Если ИмяФайлаВыгрузки = Неопределено Тогда + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл с id %1 не найден.'"), ИДФайлаВыгрузки)); + КонецЕсли; + ВыгрузкаЗагрузкаДанных.ЗагрузитьТекущуюОбластьИзАрхива(ИмяФайлаВыгрузки); Попытка УдалитьФайлы(ИмяФайлаВыгрузки); @@ -258,13 +262,13 @@ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Используется; // Отправить соообщение о готовности области в менеджер сервиса - Сообщение = СообщенияУдаленногоАдминистрирования.НовоеСообщение( - СообщенияУдаленногоАдминистрированияПовтИсп.СообщениеОбластьДанныхПодготовлена()); - Сообщение.ОбластьДанных = ОбластьДанных; + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + РаботаВМоделиСервисаПовтИсп.СообщениеОбластьДанныхПодготовлена()); + Сообщение.Body.Zone = ОбластьДанных; НачатьТранзакцию(); Попытка - СообщенияУдаленногоАдминистрирования.ОтправитьСообщение( + СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); @@ -275,8 +279,6 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Подготовка области данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -364,25 +366,38 @@ КлючОбласти = РегистрыСведений.ОбластиДанных.СоздатьКлючЗаписи(Новый Структура("ОбластьДанных", ОбластьДанных)); ЗаблокироватьДанныеДляРедактирования(КлючОбласти); - НачатьТранзакцию(); Попытка + Блокировка = Новый БлокировкаДанных; Элемент = Блокировка.Добавить("РегистрСведений.ОбластиДанных"); Элемент.УстановитьЗначение("ОбластьДанных", ОбластьДанных); Элемент.Режим = РежимБлокировкиДанных.Разделяемый; - Блокировка.Заблокировать(); МенеджерЗаписи = РегистрыСведений.ОбластиДанных.СоздатьМенеджерЗаписи(); - МенеджерЗаписи.ОбластьДанных= ОбластьДанных; - МенеджерЗаписи.Прочитать(); + МенеджерЗаписи.ОбластьДанных = ОбластьДанных; + + Попытка + НачатьТранзакцию(); + Блокировка.Заблокировать(); + + МенеджерЗаписи.Прочитать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + Если НЕ МенеджерЗаписи.Выбран() Тогда ШаблонСообщения = НСтр("ru = 'Область данных %1 не найдена'"); - ВызватьИсключение(ШаблонСообщения); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбластьДанных); + ВызватьИсключение(ТекстСообщения); ИначеЕсли МенеджерЗаписи.Статус <> Перечисления.СтатусыОбластейДанных.КУдалению Тогда ШаблонСообщения = НСтр("ru = 'Область данных %1 не помечена к удалению'"); - ВызватьИсключение(ШаблонСообщения); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, ОбластьДанных); + ВызватьИсключение(ТекстСообщения); КонецЕсли; - + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ОбластьДанных); СтандартныеПодсистемыПереопределяемый.ПриУдаленииОбластиДанных(ОбластьДанных); @@ -553,28 +568,33 @@ МенеджерЗаписи.Статус = Перечисления.СтатусыОбластейДанных.Удалена; // Отправить соообщение об удалении области в менеджер сервиса - Сообщение = СообщенияУдаленногоАдминистрирования.НовоеСообщение( - СообщенияУдаленногоАдминистрированияПовтИсп.СообщениеОбластьДанныхУдалена()); - Сообщение.ОбластьДанных = ОбластьДанных; - СообщенияУдаленногоАдминистрирования.ОтправитьСообщение( - Сообщение, - РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); - - МенеджерЗаписи.Записать(); - - РазблокироватьДанныеДляРедактирования(КлючОбласти); - - ЗафиксироватьТранзакцию(); + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + РаботаВМоделиСервисаПовтИсп.СообщениеОбластьДанныхУдалена()); + Сообщение.Body.Zone = ОбластьДанных; + + НачатьТранзакцию(); + Попытка + СообщенияВМоделиСервиса.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + МенеджерЗаписи.Записать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Исключение - ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Очистка области данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + РазблокироватьДанныеДляРедактирования(КлючОбласти); ВызватьИсключение; КонецПопытки; + РазблокироватьДанныеДляРедактирования(КлючОбласти); + КонецПроцедуры -// Процедура однименного регламентного задания. +// Процедура одноименного регламентного задания. // Находит все области данных со статусами, требующими обработки // прикладным приложением и при необходимости планирует запуск ФЗ // по их обслуживанию. @@ -659,21 +679,21 @@ // Отправить соообщение о готовности области в менеджер сервиса Если Менеджер.Статус = Перечисления.СтатусыОбластейДанных.Новая Тогда - Сообщение = СообщенияУдаленногоАдминистрирования.НовоеСообщение( - СообщенияУдаленногоАдминистрированияПовтИсп.СообщениеОшибкаПодготовкиОбластиДанных()); + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + РаботаВМоделиСервисаПовтИсп.СообщениеОшибкаПодготовкиОбластиДанных()); Иначе - Сообщение = СообщенияУдаленногоАдминистрирования.НовоеСообщение( - СообщенияУдаленногоАдминистрированияПовтИсп.СообщениеОшибкаУдаленияОбластиДанных()); + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + РаботаВМоделиСервисаПовтИсп.СообщениеОшибкаУдаленияОбластиДанных()); КонецЕсли; - Сообщение.ОбластьДанных = Менеджер.ОбластьДанных; - Сообщение.ОписаниеОшибки = ""; + Сообщение.Body.Zone = Менеджер.ОбластьДанных; + Сообщение.Body.ErrorDescription = ""; НачатьТранзакцию(); Попытка Менеджер.ОшибкаОбработки = Истина; Менеджер.Записать(); - СообщенияУдаленногоАдминистрирования.ОтправитьСообщение( + СообщенияВМоделиСервиса.ОтправитьСообщение( Сообщение, РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); @@ -682,8 +702,6 @@ ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Обслуживание областей данных'"), - УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ВызватьИсключение; КонецПопытки; @@ -693,8 +711,7 @@ КонецПроцедуры -// Возвращает прокси web-сервиса для синхронизации адинистративных действи -// в сервисе. +// Возвращает прокси web-сервиса для синхронизации адинистративных действий в сервисе. // // Возвращаемое значение: // WSПрокси. @@ -707,12 +724,12 @@ ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); КонецЕсли; - АдресСервиса = АдресМенеджераСервиса + "/ws/ManageApplication?wsdl"; + АдресСервиса = АдресМенеджераСервиса + "/ws/ManageApplication_1_0_2_1?wsdl"; ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); - Прокси = ОбщегоНазначенияПовтИсп.ПолучитьWSПрокси(АдресСервиса, "http://www.1c.ru/SaaS/1.0/WS", - "ManageApplication", , ИмяПользователя, ПарольПользователя); + Прокси = ОбщегоНазначения.WSПрокси(АдресСервиса, "http://www.1c.ru/SaaS/ManageApplication/1.0.2.1", + "ManageApplication_1_0_2_1", , ИмяПользователя, ПарольПользователя, 20); Возврат Прокси; @@ -787,28 +804,27 @@ // Процедура ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Знач Параметры) Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Параметры.Вставить("ПоказатьОписаниеИзмененийСистемы", - ОбновлениеИнформационнойБазы.ПоказатьОписаниеИзмененийСистемы()); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ОбластиДанных.Представление КАК Представление - |ИЗ - | РегистрСведений.ОбластиДанных КАК ОбластиДанных - |ГДЕ - | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; - УстановитьПривилегированныйРежим(Истина); - Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); - Результат = Запрос.Выполнить(); - УстановитьПривилегированныйРежим(Ложь); - Если НЕ Результат.Пустой() Тогда - Выборка = Результат.Выбрать(); - Выборка.Следующий(); - Если НЕ ПустаяСтрока(Выборка.Представление) Тогда - Параметры.Вставить("ПредставлениеОбластиДанных", Выборка.Представление); - КонецЕсли; + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.Представление КАК Представление + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; + УстановитьПривилегированныйРежим(Истина); + Запрос.УстановитьПараметр("ОбластьДанных", ОбщегоНазначения.ЗначениеРазделителяСеанса()); + Результат = Запрос.Выполнить(); + УстановитьПривилегированныйРежим(Ложь); + Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + Если НЕ ПустаяСтрока(Выборка.Представление) Тогда + Параметры.Вставить("ПредставлениеОбластиДанных", Выборка.Представление); КонецЕсли; КонецЕсли; @@ -865,149 +881,6 @@ КонецФункции -// Получает описание файла по его идентификатору в регистре Файлы. -// Если хранение на диске и ПутьВместоДанных = Истина, -// в выходной структуре Данные = Неопределено, ПолноеИмя = Полное имя файла, -// иначе Данные - двоичные данные файла, ПолноеИмя - Неопределено. -// Значение ключа Имя всегда содержит имя в хранилище. -// -// Параметры: -// ИдентификаторФайла - УникальныйИдентификатор. -// ПараметрыПодключения - Структура: -// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. -// - UserName - Строка - Имя пользователя сервиса. -// - Password - Строка - Пароль пользователя сервиса. -// ПутьВместоДанных - Булево - Что возвращать. -// -// Возвращаемое значение: -// ОписаниеФайла - Структура: -// Имя - Строка - имя файла в хранилище. -// Данные - ДвоичныеДанные - данные файла. -// ПолноеИмя - Строка - полное имя файла. -// - Файл будет удален автоматически по истечении срока хранения временных файлов. -// -Функция ПолучитьФайлИзХранилища(Знач ИдентификаторФайла, Знач ПараметрыПодключения, Знач ПутьВместоДанных = Ложь) Экспорт - - // Учесть версионирование. - МассивПоддерживаемыхВерсий = ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "СервисПередачиФайлов"); - Если МассивПоддерживаемыхВерсий.Найти("1.0.2.1") = Неопределено Тогда - ЕстьПоддержка2йВерсии = Ложь; - Прокси = ПолучитьПроксиДляПодключенияКСервису(ПараметрыПодключения, "FilesTransfer", "1.0.1.1"); - Иначе - ЕстьПоддержка2йВерсии = Истина; - Прокси = ПолучитьПроксиДляПодключенияКСервису(ПараметрыПодключения, "FilesTransfer", "1.0.2.1"); - КонецЕсли; - - ОбменЧерезФС = МожноПередаватьЧерезФСССервера(Прокси, ЕстьПоддержка2йВерсии); - - Если ОбменЧерезФС Тогда - - Попытка - ИмяФайла = Прокси.WriteFileToFS(ИдентификаторФайла); - СвойстваФайла = Новый Файл(ПолучитьОбщийКаталогВременныхФайлов() + ИмяФайла); - Если СвойстваФайла.Существует() Тогда - ОписаниеФайла = СоздатьОписаниеФайла(); - ОписаниеФайла.Имя = СвойстваФайла.Имя; - - Если ПутьВместоДанных Тогда - ОписаниеФайла.Данные = Неопределено; - ОписаниеФайла.ПолноеИмя = СвойстваФайла.ПолноеИмя; - Иначе - ОписаниеФайла.Данные = Новый ДвоичныеДанные(СвойстваФайла.ПолноеИмя); - ОписаниеФайла.ПолноеИмя = Неопределено; - Попытка - УдалитьФайлы(СвойстваФайла.ПолноеИмя); - Исключение - КонецПопытки; - КонецЕсли; - - Возврат ОписаниеФайла; - Иначе - ОбменЧерезФС = Ложь; - КонецЕсли; - Исключение - ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файла из хранилища'"), - УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбменЧерезФС = Ложь; - КонецПопытки; - - КонецЕсли; // ОбменЧерезФС - - КоличествоЧастей = Неопределено; - ИмяФайлаВСправочнике = Неопределено; - РазмерБлокаПередачиФайла = ПолучитьРазмерБлокаПередачиФайла(); - Если ЕстьПоддержка2йВерсии Тогда - ИдентификаторПередачи = Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, КоличествоЧастей); - Иначе - ИдентификаторПередачи = Неопределено; - Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, ИдентификаторПередачи, КоличествоЧастей); - КонецЕсли; - - ИменаФайлов = Новый Массив; - - КаталогСборки = СоздатьКаталогСборки(); - - Если ЕстьПоддержка2йВерсии Тогда - Для НомерЧасти = 1 По КоличествоЧастей Цикл - ДанныеЧасти = Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, КоличествоЧастей); - ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); - ДанныеЧасти.Записать(ИмяФайлаЧасти); - ИменаФайлов.Добавить(ИмяФайлаЧасти); - КонецЦикла; - Иначе // 1-я версия. - Для НомерЧасти = 1 По КоличествоЧастей Цикл - ДанныеЧасти = Неопределено; - Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеЧасти); - ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); - ДанныеЧасти.Записать(ИмяФайлаЧасти); - ИменаФайлов.Добавить(ИмяФайлаЧасти); - КонецЦикла; - КонецЕсли; - ДанныеЧасти = Неопределено; - - Прокси.ReleaseFile(ИдентификаторПередачи); - - ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); - - ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); - - Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); - Если Разархиватор.Элементы.Количество() > 1 Тогда - ВызватьИсключение(НСтр("ru = 'В полученном архиве содержится более одного файла'")); - КонецЕсли; - - ИмяФайла = КаталогСборки + Разархиватор.Элементы[0].Имя; - Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогСборки); - Разархиватор.Закрыть(); - - ФайлРезультата = Новый Файл(ПолучитьИмяВременногоФайла()); - ПереместитьФайл(ИмяФайла, ФайлРезультата.ПолноеИмя); - - ОписаниеФайла = СоздатьОписаниеФайла(); - ОписаниеФайла.Имя = ФайлРезультата.Имя; - - Если ПутьВместоДанных Тогда - ОписаниеФайла.Данные = Неопределено; - ОписаниеФайла.ПолноеИмя = ФайлРезультата.ПолноеИмя; - Иначе - ОписаниеФайла.Данные = Новый ДвоичныеДанные(ФайлРезультата.ПолноеИмя); - ОписаниеФайла.ПолноеИмя = Неопределено; - Попытка - УдалитьФайлы(ФайлРезультата.ПолноеИмя); - Исключение - КонецПопытки; - КонецЕсли; - - Попытка - УдалитьФайлы(ИмяАрхива); - УдалитьФайлы(КаталогСборки); - Исключение - КонецПопытки; - - Возврат ОписаниеФайла; - -КонецФункции - // Получает имя приложения, так как его задал Абонент. // // Возвращаемое значение - Строка - имя приложения. @@ -1098,52 +971,6 @@ КонецФункции -// Получает объект WSПрокси Web-сервиса передачи файлов. -// -// Параметры: -// ПараметрыПодключения - Структура: -// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. -// - UserName - Строка - Имя пользователя сервиса. -// - Password - Строка - Пароль пользователя сервиса. -// БазовоеИмяСервиса - Строка - Имя базовой версии Web-сервиса. Примеры: "FilesTransfer", "ManageAgent". -// ВерсияИнтерфейса - Строка - Номер версии сервиса, к которому надо получить доступ. -// -// Возвращаемое значение: -// WSПрокси. -// -Функция ПолучитьПроксиДляПодключенияКСервису(Знач ПараметрыПодключения, Знач БазовоеИмяСервиса, Знач ВерсияИнтерфейса) Экспорт - - Если Не ПараметрыПодключения.Свойство("URL") - Или Не ЗначениеЗаполнено(ПараметрыПодключения.URL) Тогда - - ВызватьИсключение(НСтр("ru = 'Не задан адрес агента сервиса.'")); - КонецЕсли; - - Если ПараметрыПодключения.Свойство("UserName") - И ЗначениеЗаполнено(ПараметрыПодключения.UserName) Тогда - - ИмяПользователя = ПараметрыПодключения.UserName; - ПарольПользователя = ПараметрыПодключения.Password; - Иначе - ИмяПользователя = Неопределено; - ПарольПользователя = Неопределено; - КонецЕсли; - - Если ВерсияИнтерфейса = Неопределено Или ВерсияИнтерфейса = "1.0.1.1" Тогда // 1-я версия. - ИмяСервиса = БазовоеИмяСервиса; - Иначе // Версии 2 и выше. - ИмяСервиса = БазовоеИмяСервиса + "_" + СтрЗаменить(ВерсияИнтерфейса, ".", "_"); - КонецЕсли; - - // Получить прокси работы с файлами. - - АдресСервиса = ПараметрыПодключения.URL + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("/ws/%1?wsdl", ИмяСервиса); - - Возврат ОбщегоНазначенияПовтИсп.ПолучитьWSПрокси(АдресСервиса, - "http://www.1c.ru/SaaS/1.0/WS", ИмяСервиса, , ИмяПользователя, ПарольПользователя); - -КонецФункции - // Сериализует объект структурного типа. // // Параметры: @@ -1192,9 +1019,66 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// Работа с файлами + +// Возвращает полное имя файла, полученного из файлового хранилища МС по его идентификатору. +// +// Параметры: +// ИДФайла - УникальныйИдентификатор - Идентификатор файла в файловом хранилище МС. +// +// Возвращаемое значение: +// Строка - Полное имя извлеченного файла. +// +Функция ПолучитьФайлИзХранилищаМенеджераСервиса(Знач ИДФайла) Экспорт + + АдресМенеджераСервиса = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда + ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); + КонецЕсли; + + ПараметрыДоступаКХранилищу = Новый Структура; + ПараметрыДоступаКХранилищу.Вставить("URL", АдресМенеджераСервиса); + ПараметрыДоступаКХранилищу.Вставить("UserName", Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить()); + ПараметрыДоступаКХранилищу.Вставить("Password", Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить()); + + ОписаниеФайла = ПолучитьФайлИзХранилища(ИДФайла, ПараметрыДоступаКХранилищу, Истина); + + СвойстваФайла = Новый Файл(ОписаниеФайла.ПолноеИмя); + Если Не СвойстваФайла.Существует() Тогда + Возврат Неопределено; + КонецЕсли; + + Возврат СвойстваФайла.ПолноеИмя; + +КонецФункции + +// Добавляет файл в хранилище менеджера сервиса. +// +// Параметры: +// АдресДанныеФайл - Строка/ДвоичныеДанные/Файл - Адрес временного хранилища/Данные файла/Файл. +// ИмяФайла - Строка - Хранимое имя файла. +// +// Возвращаемое значение: +// УникальныйИдентификатор - Идентификатор файла в хранилище. +// +Функция ПоместитьФайлВХранилищеМенеджераСервиса(Знач АдресДанныеФайл, Знач ИмяФайла = "") Экспорт + + ПараметрыДоступаКХранилищу = Новый Структура; + ПараметрыДоступаКХранилищу.Вставить("URL", Константы.ВнутреннийАдресМенеджераСервиса.Получить()); + ПараметрыДоступаКХранилищу.Вставить("UserName", Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить()); + ПараметрыДоступаКХранилищу.Вставить("Password", Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить()); + + Возврат ПоместитьФайлВХранилище(АдресДанныеФайл, ПараметрыДоступаКХранилищу, ИмяФайла); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +//////////////////////////////////////////////////////////////////////////////// +// Работа через Агента сервиса + // Для текущей ИБ удаляет заданные сеансы и разрывает соединения через Агент сервиса. // Сеансы задаются своими номерами во входном массиве либо одним номером. // @@ -1230,14 +1114,14 @@ Возврат Истина; КонецЕсли; - // Создать структуру параметров подключения к агенту сервиса. - ПараметрыПодключения = Новый Структура; - ПараметрыПодключения.Вставить("URL", Константы.АдресАгентаСервиса.Получить()); - ПараметрыПодключения.Вставить("UserName", Константы.ИмяПользователяАгентаСервиса.Получить()); - ПараметрыПодключения.Вставить("Password", Константы.ПарольПользователяАгентаСервиса.Получить()); + ПубликацияАгента = Константы.АдресАгентаСервиса.Получить(); + ПользовательАгента = Константы.ИмяПользователяАгентаСервиса.Получить(); + ПарольАгента = Константы.ПарольПользователяАгентаСервиса.Получить(); // Проверить с помощью версионирования, поддерживается ли нужный интерфейс. - МассивПоддерживаемыхВерсий = ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "УправлениеАгентом"); + МассивПоддерживаемыхВерсий = ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПубликацияАгента, + ПользовательАгента, ПарольАгента, "УправлениеАгентом"); + Если МассивПоддерживаемыхВерсий.Найти("1.0.2.1") = Неопределено Тогда ВызватьИсключение(НСтр("ru = 'Агент сервиса. Выборочное удаление сеансов не поддерживается в этой версии.'")); КонецЕсли; @@ -1258,8 +1142,6 @@ ПараметрыАдминистрированияКластера.AgentConnectionString = "tcp://" + ПараметрыСоединения.Srvr + ":" + Формат(ПараметрыАдминистрированияИБ.ПортАгентаСервера, "ЧГ="); - ПараметрыАдминистрированияКластера.WorkServerUserName = ПараметрыАдминистрированияИБ.ИмяАдминистратораКластера; - ПараметрыАдминистрированияКластера.WorkServerPassword = СтрокаВBase64(ПараметрыАдминистрированияИБ.ПарольАдминистратораКластера); ПараметрыАдминистрированияКластера.ClusterPort = ПараметрыАдминистрированияИБ.ПортКластераСерверов; ПараметрыАдминистрированияКластера.ClusterUserName = ПараметрыАдминистрированияИБ.ИмяАдминистратораКластера; ПараметрыАдминистрированияКластера.ClusterPassword = СтрокаВBase64(ПараметрыАдминистрированияИБ.ПарольАдминистратораКластера); @@ -1271,8 +1153,17 @@ ПараметрыXDTO = ЗаписатьСтруктурныйОбъектXDTOВСтроку(ЗначенияПараметров); - // Есть поддержка 2-й версии, в которой реализовано выборочное удаление сеансов. - Прокси = ПолучитьПроксиДляПодключенияКСервису(ПараметрыПодключения, "ManageAgent", "1.0.2.1"); + // Требуется поддержка 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, СостояниеЗавершения); @@ -1301,35 +1192,306 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с файлами -// Возвращает полное имя файла, полученного из файлового хранилища МС по его идентификатору. +// Получает описание файла по его идентификатору в регистре Файлы. +// Если хранение на диске и ПутьВместоДанных = Истина, +// в выходной структуре Данные = Неопределено, ПолноеИмя = Полное имя файла, +// иначе Данные - двоичные данные файла, ПолноеИмя - Неопределено. +// Значение ключа Имя всегда содержит имя в хранилище. // // Параметры: -// ИДФайла - УникальныйИдентификатор - Идентификатор файла в файловом хранилище МС. -// +// ИдентификаторФайла - УникальныйИдентификатор. +// ПараметрыПодключения - Структура: +// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. +// - UserName - Строка - Имя пользователя сервиса. +// - Password - Строка - Пароль пользователя сервиса. +// ПутьВместоДанных - Булево - Что возвращать. +// // Возвращаемое значение: -// Строка - Полное имя извлеченного файла. +// ОписаниеФайла - Структура: +// Имя - Строка - имя файла в хранилище. +// Данные - ДвоичныеДанные - данные файла. +// ПолноеИмя - Строка - полное имя файла. +// - Файл будет удален автоматически по истечении срока хранения временных файлов. // -Функция ПолучитьФайлИзХранилищаМенеджераСервиса(Знач ИДФайла) +Функция ПолучитьФайлИзХранилища(Знач ИдентификаторФайла, Знач ПараметрыПодключения, Знач ПутьВместоДанных = Ложь) Экспорт - АдресМенеджераСервиса = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); - Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда - ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); + ОписаниеПрокси = ОписаниеПроксиСервисаПередачиФайлов(ПараметрыПодключения); + + ОбменЧерезФС = МожноПередаватьЧерезФСССервера(ОписаниеПрокси.Прокси, ОписаниеПрокси.ЕстьПоддержка2йВерсии); + + Если ОбменЧерезФС Тогда + + Попытка + ИмяФайла = ОписаниеПрокси.Прокси.WriteFileToFS(ИдентификаторФайла); + СвойстваФайла = Новый Файл(ПолучитьОбщийКаталогВременныхФайлов() + ИмяФайла); + Если СвойстваФайла.Существует() Тогда + ОписаниеФайла = СоздатьОписаниеФайла(); + ОписаниеФайла.Имя = СвойстваФайла.Имя; + + Если ПутьВместоДанных Тогда + ОписаниеФайла.Данные = Неопределено; + ОписаниеФайла.ПолноеИмя = СвойстваФайла.ПолноеИмя; + Иначе + ОписаниеФайла.Данные = Новый ДвоичныеДанные(СвойстваФайла.ПолноеИмя); + ОписаниеФайла.ПолноеИмя = Неопределено; + Попытка + УдалитьФайлы(СвойстваФайла.ПолноеИмя); + Исключение + КонецПопытки; + КонецЕсли; + + Возврат ОписаниеФайла; + Иначе + ОбменЧерезФС = Ложь; + КонецЕсли; + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Получение файла из хранилища'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбменЧерезФС = Ложь; + КонецПопытки; + + КонецЕсли; // ОбменЧерезФС + + КоличествоЧастей = Неопределено; + ИмяФайлаВСправочнике = Неопределено; + РазмерБлокаПередачиФайла = ПолучитьРазмерБлокаПередачиФайла(); + Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда + ИдентификаторПередачи = ОписаниеПрокси.Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, КоличествоЧастей); + Иначе + ИдентификаторПередачи = Неопределено; + ОписаниеПрокси.Прокси.PrepareGetFile(ИдентификаторФайла, РазмерБлокаПередачиФайла * 1024, ИдентификаторПередачи, КоличествоЧастей); КонецЕсли; - ПараметрыДоступаКХранилищу = Новый Структура; - ПараметрыДоступаКХранилищу.Вставить("URL", АдресМенеджераСервиса); - ПараметрыДоступаКХранилищу.Вставить("UserName", Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить()); - ПараметрыДоступаКХранилищу.Вставить("Password", Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить()); + ИменаФайлов = Новый Массив; - ОписаниеФайла = ПолучитьФайлИзХранилища(ИДФайла, ПараметрыДоступаКХранилищу, Истина); + КаталогСборки = СоздатьКаталогСборки(); - СвойстваФайла = Новый Файл(ОписаниеФайла.ПолноеИмя); - Если Не СвойстваФайла.Существует() Тогда - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Файл %1 не найден.'"), ОписаниеФайла.ПолноеИмя)); + Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда + Для НомерЧасти = 1 По КоличествоЧастей Цикл + ДанныеЧасти = ОписаниеПрокси.Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, КоличествоЧастей); + ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + КонецЦикла; + Иначе // 1-я версия. + Для НомерЧасти = 1 По КоличествоЧастей Цикл + ДанныеЧасти = Неопределено; + ОписаниеПрокси.Прокси.GetFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеЧасти); + ИмяФайлаЧасти = КаталогСборки + "part" + Формат(НомерЧасти, "ЧЦ=4; ЧВН=; ЧГ="); + ДанныеЧасти.Записать(ИмяФайлаЧасти); + ИменаФайлов.Добавить(ИмяФайлаЧасти); + КонецЦикла; + КонецЕсли; + ДанныеЧасти = Неопределено; + + ОписаниеПрокси.Прокси.ReleaseFile(ИдентификаторПередачи); + + ИмяАрхива = ПолучитьИмяВременногоФайла("zip"); + + ОбъединитьФайлы(ИменаФайлов, ИмяАрхива); + + Разархиватор = Новый ЧтениеZipФайла(ИмяАрхива); + Если Разархиватор.Элементы.Количество() > 1 Тогда + ВызватьИсключение(НСтр("ru = 'В полученном архиве содержится более одного файла'")); КонецЕсли; - Возврат СвойстваФайла.ПолноеИмя; + ИмяФайла = КаталогСборки + Разархиватор.Элементы[0].Имя; + Разархиватор.Извлечь(Разархиватор.Элементы[0], КаталогСборки); + Разархиватор.Закрыть(); + + ФайлРезультата = Новый Файл(ПолучитьИмяВременногоФайла()); + ПереместитьФайл(ИмяФайла, ФайлРезультата.ПолноеИмя); + + ОписаниеФайла = СоздатьОписаниеФайла(); + ОписаниеФайла.Имя = ФайлРезультата.Имя; + + Если ПутьВместоДанных Тогда + ОписаниеФайла.Данные = Неопределено; + ОписаниеФайла.ПолноеИмя = ФайлРезультата.ПолноеИмя; + Иначе + ОписаниеФайла.Данные = Новый ДвоичныеДанные(ФайлРезультата.ПолноеИмя); + ОписаниеФайла.ПолноеИмя = Неопределено; + Попытка + УдалитьФайлы(ФайлРезультата.ПолноеИмя); + Исключение + КонецПопытки; + КонецЕсли; + + Попытка + УдалитьФайлы(ИмяАрхива); + УдалитьФайлы(КаталогСборки); + Исключение + КонецПопытки; + + Возврат ОписаниеФайла; + +КонецФункции + +// Добавляет файл в хранилище менеджера сервиса. +// +// Параметры: +// АдресДанныеФайл - Строка/ДвоичныеДанные/Файл - Адрес временного хранилища/Данные файла/Файл. +// ПараметрыПодключения - Структура: +// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. +// - UserName - Строка - Имя пользователя сервиса. +// - Password - Строка - Пароль пользователя сервиса. +// ИмяФайла - Строка - Хранимое имя файла. +// +// Возвращаемое значение: +// УникальныйИдентификатор - Идентификатор файла в хранилище. +// +Функция ПоместитьФайлВХранилище(Знач АдресДанныеФайл, Знач ПараметрыПодключения, Знач ИмяФайла = "") + + ОписаниеПрокси = ОписаниеПроксиСервисаПередачиФайлов(ПараметрыПодключения); + + Описание = ПолучитьИмяФайлаСДанными(АдресДанныеФайл, ИмяФайла); + СвойстваФайла = Новый Файл(Описание.Имя); + + ОбменЧерезФС = МожноПередаватьЧерезФСНаСервер(ОписаниеПрокси.Прокси, ОписаниеПрокси.ЕстьПоддержка2йВерсии); + Если ОбменЧерезФС Тогда + // Сохранить данные в файл. + ОбщийКаталог = ПолучитьОбщийКаталогВременныхФайлов(); + ЦелевойФайл = Новый Файл(ОбщийКаталог + СвойстваФайла.Имя); + Если ЦелевойФайл.Существует() Тогда + Если СвойстваФайла.ПолноеИмя = ЦелевойФайл.ПолноеИмя Тогда // Это один и тот же файл. Его можно, не передавая, сразу читать на сервере. + Возврат ОписаниеПрокси.Прокси.ReadFileFromFS(ЦелевойФайл.Имя, СвойстваФайла.Имя); + // Нельзя удалять, поскольку он является и источником. + КонецЕсли; + // Источник и приемник - разные файлы. Чтобы не затереть чужой файл, делаем приемнику уникальное имя. + НовыйИД = Новый УникальныйИдентификатор; + ЦелевойФайл = Новый Файл(ОбщийКаталог + НовыйИД + СвойстваФайла.Расширение); + КонецЕсли; + + Попытка + Если Описание.Данные = Неопределено тогда + КопироватьФайл(СвойстваФайла.ПолноеИмя, ЦелевойФайл.ПолноеИмя); + Иначе + Описание.Данные.Записать(ЦелевойФайл.ПолноеИмя); + КонецЕсли; + Результат = ОписаниеПрокси.Прокси.ReadFileFromFS(ЦелевойФайл.Имя, СвойстваФайла.Имя); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Добавление файла. Обмен через ФС'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + ОбменЧерезФС = Ложь; + КонецПопытки; + + УдалитьВременныеФайлы(ЦелевойФайл.ПолноеИмя); + + КонецЕсли; // ОбменЧерезФС + + Если Не ОбменЧерезФС Тогда + + РазмерБлокаПередачиФайла = ПолучитьРазмерБлокаПередачиФайла(); // Мб + ИдентификаторПередачи = Новый УникальныйИдентификатор; + + // Сохранить данные в файл. + КаталогСборки = СоздатьКаталогСборки(); + ПолноеИмяФайла = КаталогСборки + СвойстваФайла.Имя; + + Если Описание.Данные = Неопределено тогда + Если СвойстваФайла.Существует() Тогда + КопироватьФайл(СвойстваФайла.ПолноеИмя, ПолноеИмяФайла); + Иначе + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Добавление файла в хранилище. Не найден файл %1.'"), СвойстваФайла.ПолноеИмя)); + КонецЕсли; + Иначе + Описание.Данные.Записать(ПолноеИмяФайла); + КонецЕсли; + + // Архивировать файл. + ИмяНеразделенногоФайла = ПолучитьИмяВременногоФайла("zip"); + Архиватор = Новый ЗаписьZipФайла(ИмяНеразделенногоФайла, , , , УровеньСжатияZIP.Минимальный); + Архиватор.Добавить(ПолноеИмяФайла); + Архиватор.Записать(); + + // Разделить файл на части. + ИменаФайлов = РазделитьФайл(ИмяНеразделенногоФайла, РазмерБлокаПередачиФайла * 1024 * 1024, КаталогСборки); // Мб => байты. + + Попытка + УдалитьФайлы(ИмяНеразделенногоФайла); + Исключение + КонецПопытки; + + // Передать файл через сервис по частям. + КоличествоЧастей = ИменаФайлов.Количество(); + Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда + Для НомерЧасти = 1 По КоличествоЧастей Цикл // Передача по частям. + ИмяФайлаЧасти = ИменаФайлов[НомерЧасти - 1]; + ДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаЧасти); + Попытка + УдалитьФайлы(ИмяФайлаЧасти); + Исключение + КонецПопытки; + ОписаниеПрокси.Прокси.PutFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеФайла, КоличествоЧастей); + КонецЦикла; + Иначе // 1-я версия. + Для НомерЧасти = 1 По КоличествоЧастей Цикл // Передача по частям. + ИмяФайлаЧасти = ИменаФайлов[НомерЧасти - 1]; + ДанныеФайла = Новый ДвоичныеДанные(ИмяФайлаЧасти); + Попытка + УдалитьФайлы(ИмяФайлаЧасти); + Исключение + КонецПопытки; + ОписаниеПрокси.Прокси.PutFilePart(ИдентификаторПередачи, НомерЧасти, ДанныеФайла); + КонецЦикла; + КонецЕсли; + + Попытка + УдалитьФайлы(КаталогСборки); + Исключение + КонецПопытки; + + Если ОписаниеПрокси.ЕстьПоддержка2йВерсии Тогда + Результат = ОписаниеПрокси.Прокси.SaveFileFromParts(ИдентификаторПередачи, КоличествоЧастей); + Иначе // 1-я версия. + Результат = Неопределено; + ОписаниеПрокси.Прокси.SaveFileFromParts(ИдентификаторПередачи, КоличествоЧастей, Результат); + КонецЕсли; + + КонецЕсли; // Не ОбменЧерезФС + + Возврат Результат; + +КонецФункции + +// Возвращает структуру с именем и данными файла по адресу во временном хранилище/информации в объекте Файл/двоичным данным. +// +// Параметры: +// АдресДанныеФайл - Строка/ДвоичныеДанные/Файл - Адрес хранилища данных файла/Данные файла/Файл. +// ИмяФайла - Строка. +// +// Возвращаемое значение: +// Структура: +// Данные - ДвоичныеДанные - Данные файла. +// Имя - Строка - Имя файла. +// +Функция ПолучитьИмяФайлаСДанными(Знач АдресДанныеФайл, Знач ИмяФайла = "") + + Если ТипЗнч(АдресДанныеФайл) = Тип("Строка") Тогда // Адрес данных файла во временном хранилище. + Если ПустаяСтрока(АдресДанныеФайл) Тогда + ВызватьИсключение(НСтр("ru = 'Неверный адрес хранилища.'")); + КонецЕсли; + ДанныеФайла = ПолучитьИзВременногоХранилища(АдресДанныеФайл); + ИначеЕсли ТипЗнч(АдресДанныеФайл) = Тип("Файл") Тогда // Объект типа Файл. + Если Не АдресДанныеФайл.Существует() Тогда + ВызватьИсключение(НСтр("ru = 'Файл не найден.'")); + КонецЕсли; + ДанныеФайла = Неопределено; + ИмяФайла = АдресДанныеФайл.ПолноеИмя; + ИначеЕсли ТипЗнч(АдресДанныеФайл) = Тип("ДвоичныеДанные") Тогда // Данные файла. + ДанныеФайла = АдресДанныеФайл; + Иначе + ВызватьИсключение(НСтр("ru = 'Неверный тип данных'")); + КонецЕсли; + + Если ПустаяСтрока(ИмяФайла) Тогда + ИмяФайла = ПолучитьИмяВременногоФайла(); + КонецЕсли; + + Возврат Новый Структура("Данные, Имя", ДанныеФайла, ИмяФайла); + КонецФункции // Проверяет, возможна ли передача файла через файловую систему с сервера на клиент. @@ -1360,6 +1522,35 @@ КонецФункции +// Проверяет, возможна ли передача файла через файловую систему с клиента на сервер. +// +// Параметры: +// Прокси - WSПрокси - Прокси сервиса FilesTransfer*. +// ЕстьПоддержка2йВерсии - Булево. +// +// Возвращаемое значение: +// Булево. +// +Функция МожноПередаватьЧерезФСНаСервер(Знач Прокси, Знач ЕстьПоддержка2йВерсии) + + Если Не ЕстьПоддержка2йВерсии Тогда + Возврат Ложь; + КонецЕсли; + + ИмяФайла = ЗаписатьПробныйФайл(); + Если ИмяФайла = "" Тогда + Возврат Ложь; + КонецЕсли; + + Результат = Прокси.ReadTestFile(ИмяФайла); + + ПолноеИмяФайла = ПолучитьОбщийКаталогВременныхФайлов() + ИмяФайла; + УдалитьВременныеФайлы(ПолноеИмяФайла); + + Возврат Результат; + +КонецФункции + // Создать каталог с уникальным именем для размещения частей разделяемого файла. // // Возвращаемое значение: @@ -1396,6 +1587,28 @@ КонецФункции +// Записывает тестовый файл на диск, возвращая его имя и размер. +// Файл должна удалять вызывающая сторона. +// +// Параметры: +// РазмерФайла - Число. +// +// Возвращаемое значение: +// Строка - Имя пробного файла без пути. +// +Функция ЗаписатьПробныйФайл() Экспорт + + НовыйИД = Новый УникальныйИдентификатор; + СвойстваФайла = Новый Файл(ПолучитьОбщийКаталогВременныхФайлов() + НовыйИД + ".tmp"); + + Текст = Новый ЗаписьТекста(СвойстваФайла.ПолноеИмя, КодировкаТекста.ANSI); + Текст.Записать(НовыйИД); + Текст.Закрыть(); + + Возврат СвойстваФайла.Имя; + +КонецФункции + // Создает незаполненную структуру нужного формата. // // Возвращаемое значение: @@ -1415,6 +1628,90 @@ КонецФункции +// Получает объект WSПрокси Web-сервиса, заданного своим базовым именем. +// +// Параметры: +// ПараметрыПодключения - Структура: +// - URL - Строка - URL сервиса. Обязательно должно присутствовать и быть заполненным. +// - UserName - Строка - Имя пользователя сервиса. +// - Password - Строка - Пароль пользователя сервиса. +// Возвращаемое значение: +// Структура +// Прокси - WSПрокси +// ЕстьПоддержка2йВерсии - Булево +// +Функция ОписаниеПроксиСервисаПередачиФайлов(Знач ПараметрыПодключения) + + БазовоеИмяСервиса = "FilesTransfer"; + + МассивПоддерживаемыхВерсий = ОбщегоНазначения.ПолучитьВерсииИнтерфейса(ПараметрыПодключения, "СервисПередачиФайлов"); + Если МассивПоддерживаемыхВерсий.Найти("1.0.2.1") = Неопределено Тогда + ЕстьПоддержка2йВерсии = Ложь; + ВерсияИнтерфейса = "1.0.1.1" + Иначе + ЕстьПоддержка2йВерсии = Истина; + ВерсияИнтерфейса = "1.0.2.1"; + КонецЕсли; + + Если ПараметрыПодключения.Свойство("UserName") + И ЗначениеЗаполнено(ПараметрыПодключения.UserName) Тогда + + ИмяПользователя = ПараметрыПодключения.UserName; + ПарольПользователя = ПараметрыПодключения.Password; + Иначе + ИмяПользователя = Неопределено; + ПарольПользователя = Неопределено; + КонецЕсли; + + Если ВерсияИнтерфейса = Неопределено Или ВерсияИнтерфейса = "1.0.1.1" Тогда // 1-я версия. + ИмяСервиса = БазовоеИмяСервиса; + Иначе // Версии 2 и выше. + ИмяСервиса = БазовоеИмяСервиса + "_" + СтрЗаменить(ВерсияИнтерфейса, ".", "_"); + КонецЕсли; + + АдресСервиса = ПараметрыПодключения.URL + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("/ws/%1?wsdl", ИмяСервиса); + + Прокси = ОбщегоНазначения.WSПрокси(АдресСервиса, + "http://www.1c.ru/SaaS/1.0/WS", ИмяСервиса, , ИмяПользователя, ПарольПользователя, 600); + + Возврат Новый Структура("Прокси, ЕстьПоддержка2йВерсии", Прокси, ЕстьПоддержка2йВерсии); + +КонецФункции + +///////////////////////////////////////////////////////////////////////////////// +// Временные файлы + +// Удалить файл(ы) на диске. +// Если в качестве имени файла задана маска с путем, разделить его на путь и маску. +// +Процедура УдалитьВременныеФайлы(Знач ИмяФайла) + + Попытка + Если Прав(ИмяФайла, 1) = "*" Тогда // Маска. + Индекс = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца( + ИмяФайла, ПолучитьРазделительПутиФайловойСистемы()); + Если Индекс > 0 Тогда + ПутьКФайлу = Лев(ИмяФайла, Индекс - 1); + МаскаФайла = Сред(ИмяФайла, Индекс + 1); + Если НайтиФайлы(ПутьКФайлу, МаскаФайла, Ложь).Количество() > 0 Тогда + УдалитьФайлы(ПутьКФайлу, МаскаФайла); + КонецЕсли; + КонецЕсли; + Иначе + СвойстваФайла = Новый Файл(ИмяФайла); + Если СвойстваФайла.Существует() Тогда + СвойстваФайла.УстановитьТолькоЧтение(Ложь); // Снять атрибут. + УдалитьФайлы(СвойстваФайла.ПолноеИмя); + КонецЕсли; + КонецЕсли; + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Выполнение операции удаления временного файла'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + +КонецПроцедуры + ///////////////////////////////////////////////////////////////////////////////// // Сериализация diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl index b0c3344f4..987479a51 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПереопределяемый/Module.bsl @@ -84,3 +84,17 @@ КонецПроцедуры +// Устанавливает пользователю права по умолчанию. +// Вызывается при работе в модели сервиса, в случае обновления в менеджере +// сервиса прав пользователя без прав администрирования. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи - пользователь, которому +// требуется установить права по умолчанию +// +Процедура УстановитьПраваПоУмолчанию(Пользователь) Экспорт + + + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl index f62a76822..87968f991 100644 --- a/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаВМоделиСервисаПовтИсп/Module.bsl @@ -6,17 +6,6 @@ /////////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Возвращает конечную точку для отправки сообщений в менеджер сервиса. -// -// Возвращаемое значение: -// ПланОбменСсылка.ОбменСообщениями - узел соответствующий менеджеру сервиса -// -Функция КонечнаяТочкаМенеджераСервиса() Экспорт - - Возврат Константы.КонечнаяТочкаМенеджераСервиса.Получить(); - -КонецФункции - // Возвращает массив сериализуемых структурных типов, поддерживаемых в настоящее время. // // Возвращаемое значение: @@ -38,3 +27,188 @@ Возврат Новый ФиксированныйМассив(МассивТипов); КонецФункции + +// Возвращает конечную точку для отправки сообщений в менеджер сервиса. +// +// Возвращаемое значение: +// ПланОбменСсылка.ОбменСообщениями - узел соответствующий менеджеру сервиса +// +Функция КонечнаяТочкаМенеджераСервиса() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.КонечнаяТочкаМенеджераСервиса.Получить(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование + + ВызватьИсключение(НСтр("ru = 'Для получения конечной точки Менеджера сервиса + |необходимо внедрение подсистемы РаботаВМоделиСервиса.УдаленноеАдминистрирование'")); + +КонецФункции + +/////////////////////////////////////////////////////////////////////////////////// +// Функции, возвращающие типы сообщений и имена содержащих их пакетов + +// Возвращает имя пакета удаленного администрирования. +// +// Возвращаемое значение: +// Строка. +// +Функция ПакетУдаленноеАдминистрирование() Экспорт + + Возврат "http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1"; + +КонецФункции + +// Возвращает имя пакета контроля удаленного администрирования. +// +// Возвращаемое значение: +// Строка. +// +Функция ПакетКонтрольУдаленногоАдминистрирования() Экспорт + + Возврат "http://www.1c.ru/SaaS/RemoteAdministration/Control/1.0.2.1"; + +КонецФункции + +// Возвращает тип сообщения ОбновитьПользователя. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.ОбновитьПользователя +// +Функция СообщениеОбновитьПользователя() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "UpdateUser"); + +КонецФункции + +// Возвращает тип сообщения УстановитьПолныеПраваОбластиДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПолныеПраваОбластиДанных +// +Функция СообщениеУстановитьПолныеПраваОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "SetFullControl"); + +КонецФункции + +// Возвращает тип сообщения УстановитьДоступКОбластиДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьДоступКОбластиДанных +// +Функция СообщениеУстановитьДоступКОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "SetApplicationAccess"); + +КонецФункции + +// Возвращает тип сообщения УстановитьПраваПользователяПоУмолчанию. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПраваПользователяПоУмолчанию +// +Функция СообщениеУстановитьПраваПользователяПоУмолчанию() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "SetDefaultUserRights"); + +КонецФункции + +// Возвращает тип сообщения ПодготовитьОбластьДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.ПодготовитьОбластьДанных +// +Функция СообщениеПодготовитьОбластьДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "PrepareApplication"); + +КонецФункции + +// Возвращает тип сообщения УдалитьОбластьДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УдалитьОбластьДанных +// +Функция СообщениеУдалитьОбластьДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "DeleteApplication"); + +КонецФункции + +// Возвращает тип сообщения УстановитьПараметрыОбластиДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПараметрыОбластиДанных +// +Функция СообщениеУстановитьПараметрыОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "SetApplicationParams"); + +КонецФункции + +// Возвращает тип сообщения ОбластьДанныхПодготовлена. +// +// Возвращаемое значение: +// XDTO-пакеты.КонтрольУдаленногоАдминистрирования.ОбластьДанныхПодготовлена +// +Функция СообщениеОбластьДанныхПодготовлена() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ApplicationPrepared"); + +КонецФункции + +// Возвращает тип сообщения ОбластьДанныхУдалена. +// +// Возвращаемое значение: +// XDTO-пакеты.КонтрольУдаленногоАдминистрирования.ОбластьДанныхУдалена +// +Функция СообщениеОбластьДанныхУдалена() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ApplicationDeleted"); + +КонецФункции + +// Возвращает тип сообщения ОшибкаПодготовкиОбластиДанных.ОшибкаПодготовкиОбластиДанных +// +// Возвращаемое значение: +// XDTO-пакеты.КонтрольУдаленногоАдминистрирования. +// +Функция СообщениеОшибкаПодготовкиОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ApplicationPrepareFailed"); + +КонецФункции + +// Возвращает тип сообщения ОшибкаУдаленияОбластиДанных. +// +// Возвращаемое значение: +// XDTO-пакеты.КонтрольУдаленногоАдминистрирования.ОшибкаУдаленияОбластиДанных +// +Функция СообщениеОшибкаУдаленияОбластиДанных() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ApplicationDeleteFailed"); + +КонецФункции + +// Возвращает тип сообщения УстановитьПараметрыИБ. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПараметрыИБ +// +Функция СообщениеУстановитьПараметрыИБ() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "SetIBParams"); + +КонецФункции + +// Возвращает тип сообщения УстановитьКонечнуюТочкуМенеджераСервиса. +// +// Возвращаемое значение: +// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьКонечнуюТочкуМенеджераСервиса +// +Функция СообщениеУстановитьКонечнуюТочкуМенеджераСервиса() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "SetServiceManagerEndPoint"); + +КонецФункции diff --git a/SSL/src/CommonModules/РаботаС1СДокументооборотВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаС1СДокументооборотВызовСервера/Module.bsl index c97335f1d..3631bdc98 100644 --- a/SSL/src/CommonModules/РаботаС1СДокументооборотВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаС1СДокументооборотВызовСервера/Module.bsl @@ -952,8 +952,8 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла для передачи (%3 Мб).'"), ПараметрыСоздания.Имя, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); КонецЕсли; Если НЕ ПустаяСтрока(ПараметрыСоздания.Текст) Тогда @@ -988,7 +988,7 @@ Редактируется = СведенияОФайле.editing; Зашифрован = СведенияОФайле.encrypted; - НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(НоваяСтрока.Расширение); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(НоваяСтрока.Расширение); КонецЦикла; ФайлыЗаголовок = НСтр("ru = 'Файлы'"); @@ -1431,7 +1431,7 @@ // заполнить список файлов копированием присоединенных файлов или Файлов из внешнего объекта Процедура ЗаполнитьКопированием(ВнешнийОбъект, id, Тип, Представление, УникальныйИдентификатор) Экспорт - МассивФайлов = ФайловыеФункции.ПолучитьХранимыеФайлы(ВнешнийОбъект); + МассивФайлов = ФайловыеФункцииСлужебный.ПолучитьХранимыеФайлы(ВнешнийОбъект); Для Каждого ДанныеФайла Из МассивФайлов Цикл diff --git a/SSL/src/CommonModules/РаботаС1СДокументооборотКлиент/Module.bsl b/SSL/src/CommonModules/РаботаС1СДокументооборотКлиент/Module.bsl index 830f4a2a8..907443af8 100644 --- a/SSL/src/CommonModules/РаботаС1СДокументооборотКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаС1СДокументооборотКлиент/Module.bsl @@ -233,7 +233,7 @@ НСтр("ru = 'Выполняется передача файла ""%1"" (%2 Мб)... |Пожалуйста, подождите.'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -344,7 +344,7 @@ НСтр("ru = 'Выполняется сохранение файла ""%1"" (%2 Мб)... |Пожалуйста, подождите.'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -393,7 +393,7 @@ НСтр("ru = 'Выполняется сохранение файла ""%1"" (%2 Мб)... |Пожалуйста, подождите.'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -452,7 +452,7 @@ Возврат Ложь; КонецЕсли; - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); Если СтрокиПути.Количество() >= 2 Тогда Расширение = СтрокиПути[СтрокиПути.Количество()-1]; ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; @@ -511,7 +511,7 @@ НСтр("ru = 'Идет сохранение файла ""%1"" (%2 Мб). |Пожалуйста, подождите...'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -535,7 +535,7 @@ КонецЕсли; ПараметрыСоздания.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; - ПараметрыСоздания.Расширение = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(Файл.Расширение); + ПараметрыСоздания.Расширение = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(Файл.Расширение); ПараметрыСоздания.ВремяИзменения = Файл.ПолучитьВремяИзменения(); ПараметрыСоздания.ВремяИзмененияУниверсальное = Файл.ПолучитьУниверсальноеВремяИзменения(); ПараметрыСоздания.Имя = Файл.ИмяБезРасширения; @@ -546,7 +546,7 @@ Текст = ""; Если НужноИзвлечьТекст Тогда - Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(Файл.ПолноеИмя); + Текст = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекст(Файл.ПолноеИмя); КонецЕсли; ПараметрыСоздания.Текст = Текст; @@ -596,12 +596,12 @@ МассивСуществующихПодписейФайла) Экспорт Если Редактируется Тогда - Предупреждение(ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла()); + Предупреждение(ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла()); Возврат; КонецЕсли; Если Зашифрован Тогда - Предупреждение(ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла()); + Предупреждение(ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла()); Возврат; КонецЕсли; @@ -783,8 +783,8 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла для передачи (%3 Мб).'"), Файл.Имя, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); КонецЕсли; ТекстПояснения = @@ -792,7 +792,7 @@ НСтр("ru = 'Идет сохранение файла ""%1"" (%2 Мб). |Пожалуйста, подождите...'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -816,7 +816,7 @@ КонецЕсли; ПараметрыСоздания.АдресВременногоХранилищаФайла = АдресВременногоХранилищаФайла; - ПараметрыСоздания.Расширение = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(Файл.Расширение); + ПараметрыСоздания.Расширение = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(Файл.Расширение); ПараметрыСоздания.ВремяИзменения = Файл.ПолучитьВремяИзменения(); ПараметрыСоздания.ВремяИзмененияУниверсальное = Файл.ПолучитьУниверсальноеВремяИзменения(); ПараметрыСоздания.Имя = Файл.ИмяБезРасширения; @@ -826,7 +826,7 @@ Текст = ""; Если НужноИзвлечьТекст Тогда - Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(Файл.ПолноеИмя); + Текст = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекст(Файл.ПолноеИмя); КонецЕсли; ПараметрыСоздания.Текст = Текст; diff --git a/SSL/src/CommonModules/РаботаСБанками/Module.bsl b/SSL/src/CommonModules/РаботаСБанками/Module.bsl index 2b41d1fe4..7ae321321 100644 --- a/SSL/src/CommonModules/РаботаСБанками/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБанками/Module.bsl @@ -42,6 +42,161 @@ //////////////////////////////////////////////////////////////////////////////// // Работа с данными сайта РБК +// Формирует, дополняет текст сообщения пользователю в случае, если загрузка данных классификатора проведена успешно +// +// Параметры +// ПараметрыЗагрузкиКлассификатора - Соответствие: +// Загружено - Число - Количество новых записей классификатора +// Обновлено - Число - Количество обновленных записей классификатора +// ТекстСообщения - Строка - тест сообщения о результатах загрузки +// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора +// +Процедура ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора) Экспорт + + Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда + ТекстСообщения = НСтр("ru ='Загрузка классификатора банков РФ выполнена успешно.'"); + Иначе + ТекстСообщения = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; + КонецЕсли; + + Если ПараметрыЗагрузкиКлассификатора["Загружено"] > 0 Тогда + + ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru =' + |Загружено новых: %1.'"), ПараметрыЗагрузкиКлассификатора["Загружено"]); + + КонецЕсли; + + Если ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0 Тогда + + ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru =' + |Обновлено записей: %1.'"), ПараметрыЗагрузкиКлассификатора["Обновлено"]); + + КонецЕсли; + + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + +КонецПроцедуры + +// Получает, сортирует, записывает данные классификатора БИК РФ с сайта РБК +// +// Параметры +// ПараметрыЗагрузкиКлассификатора - Соответствие: +// Загружено - Число - Количество новых записей классификатора +// Обновлено - Число - Количество обновленных записей классификатора +// ТекстСообщения - Строка - тест сообщения о результатах загрузки +// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора +// АдресХранилища - Строка - адрес внутреннего хранилища. +Процедура ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора, АдресХранилища = "") Экспорт + + ВременныйКаталог = КаталогВременныхФайлов() + "tempBik"; + СоздатьКаталог(ВременныйКаталог); + УдалитьФайлыВКаталоге(ВременныйКаталог, "*.*"); + + ПараметрыПолученияФайловРБК = Новый Соответствие; + ПараметрыПолученияФайловРБК.Вставить("ПутьКФайлуРБК", ""); + ПараметрыПолученияФайловРБК.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); + ПараметрыПолученияФайловРБК.Вставить("ВременныйКаталог", ВременныйКаталог); + + ПолучитьДанныеРБКИзИнтернета(ПараметрыПолученияФайловРБК); + + Если Не ПустаяСтрока(ПараметрыПолученияФайловРБК["ТекстСообщения"]) Тогда + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыПолученияФайловРБК["ТекстСообщения"]); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + Попытка + ZIPФайлРБК = Новый ЧтениеZipФайла(ПараметрыПолученияФайловРБК["ПутьКФайлуРБК"]); + Исключение + ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК.'"); + ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если Не ПустаяСтрока(ТекстСообщения) Тогда + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + Попытка + ZIPФайлРБК.ИзвлечьВсе(ВременныйКаталог); + Исключение + ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК.'"); + ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + Если Не ПустаяСтрока(ТекстСообщения) Тогда + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + ПутьКФайлуБИКРБК = ВременныйКаталог + "\bnkseek.txt"; + ФайлБИКРБК = Новый Файл(ПутьКФайлуБИКРБК); + Если Не ФайлБИКРБК.Существует() Тогда + ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. + |Архив не содержит информацию - классификатор банков.'"); + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + ПутьКФайлуРегионовРБК = ВременныйКаталог + "\reg.txt"; + ФайлРегионовРБК = Новый Файл(ПутьКФайлуРегионовРБК); + Если Не ФайлРегионовРБК.Существует() Тогда + ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. + |Архив не содержит информацию о регионах.'"); + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + ПараметрыЗагрузкиФайловРБК = Новый Соответствие; + ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуБИКРБК", ПутьКФайлуБИКРБК); + ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуРегионовРБК", ПутьКФайлуРегионовРБК); + ПараметрыЗагрузкиФайловРБК.Вставить("ВременныйКаталог", ВременныйКаталог); + ПараметрыЗагрузкиФайловРБК.Вставить("Загружено", ПараметрыЗагрузкиКлассификатора["Загружено"]); + ПараметрыЗагрузкиФайловРБК.Вставить("Обновлено", ПараметрыЗагрузкиКлассификатора["Обновлено"]); + ПараметрыЗагрузкиФайловРБК.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); + + ЗагрузитьДанныеРБК(ПараметрыЗагрузкиФайловРБК); + + Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловРБК["ТекстСообщения"]) Тогда + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + Возврат; + КонецЕсли; + + УстановитьВерсиюКлассификатораБанков(); + УдалитьФайлыВКаталоге(ВременныйКаталог,"*.*"); + УдалитьФайлы(ВременныйКаталог); + + ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", ПараметрыЗагрузкиФайловРБК["Загружено"]); + ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", ПараметрыЗагрузкиФайловРБК["Обновлено"]); + ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловРБК["ТекстСообщения"]); + ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Истина); + + ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); + + Если НЕ ПустаяСтрока(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ПараметрыЗагрузкиКлассификатора, АдресХранилища); + КонецЕсли; + +КонецПроцедуры + // Получает, сортирует, записывает данные классификатора БИК РФ с сайта РБК; // Процедура ЗагрузитьКлассификаторБанков() Экспорт @@ -54,15 +209,18 @@ ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", 0); ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", 0); ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ""); + ПараметрыЗагрузкиКлассификатора.Вставить("ЗагрузкаВыполнена", Ложь); - РаботаСБанкамиВызовСервера.ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора); + ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора); ИмяСобытия = НСтр("ru ='Загрузка классификатора банков. Сайт РБК'"); УровеньСобытия = УровеньЖурналаРегистрации.Информация; - Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда - РаботаСБанкамиВызовСервера.ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); + Если ПараметрыЗагрузкиКлассификатора["ЗагрузкаВыполнена"] Тогда + Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда + ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора); + КонецЕсли; Иначе УровеньСобытия = УровеньЖурналаРегистрации.Ошибка; КонецЕсли; @@ -77,15 +235,16 @@ // ПараметрыЗагрузкиФайловРБК - Соответствие: // ПутьКФайлуБИКРБК - Строка - путь к файлу с данными классификатора, размещенному во временном каталоге // ПутьКФайлуРегионовРБК - Строка - путь к файлу с информацией о регионах, размещенному во временном каталоге -// Загружено - Число - Количество новых записей классификатора -// Обновлено - Число - Количество обновленных записей классификатора -// ТекстСообщения - Строка - текст сообщения об ошибке +// Загружено - Число - количество новых записей классификатора +// Обновлено - Число - количество обновленных записей классификатора +// ТекстСообщения - Строка - тест сообщения о результатах загрузки +// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора // Процедура ЗагрузитьДанныеРБК(ПараметрыЗагрузкиФайловРБК) Экспорт СоответствиеРегионов = ПолучитьСоответствиеРегионов(ПараметрыЗагрузкиФайловРБК["ПутьКФайлуРегионовРБК"]); - ТекстБИКРБК = Новый ЧтениеТекста(ПараметрыЗагрузкиФайловРБК["ПутьКФайлуБИКРБК"]); + ТекстБИКРБК = Новый ЧтениеТекста(ПараметрыЗагрузкиФайловРБК["ПутьКФайлуБИКРБК"], "windows-1251"); СтрокаТекстаБИКРБК = ТекстБИКРБК.ПрочитатьСтроку(); ДатаЗагрузки = ТекущаяУниверсальнаяДата(); @@ -141,9 +300,23 @@ РезультатИзИнтернета = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(ФайлРБКНаВебСервере, ПараметрыПолучения); Если РезультатИзИнтернета.Статус Тогда + ПараметрыПолученияФайловРБК.Вставить("ПутьКФайлуРБК", РезультатИзИнтернета.Путь); + Иначе - ПараметрыПолученияФайловРБК.Вставить("ТекстСообщения", РезультатИзИнтернета.СообщениеОбОшибке); + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ДополнительноеСообщение = + НСтр("ru =' + |Возможно неточные или неправильные настройки подключения к Интернету.'"); + Иначе + ДополнительноеСообщение = + НСтр("ru =' + |Возможно неточные или неправильные настройки подключения к Интернету на сервере 1С:Предприятие.'"); + КонецЕсли; + + СообщениеОбОшибке = РезультатИзИнтернета.СообщениеОбОшибке + ДополнительноеСообщение; + + ПараметрыПолученияФайловРБК.Вставить("ТекстСообщения", СообщениеОбОшибке); КонецЕсли; КонецПроцедуры @@ -186,7 +359,7 @@ Разделитель = Символы.Таб; СоответствиеРегионов = Новый Соответствие; - РегионыРБКТекстовыйДокумент = Новый ЧтениеТекста(ПутьКФайлуРегионовРБК); + РегионыРБКТекстовыйДокумент = Новый ЧтениеТекста(ПутьКФайлуРегионовРБК, "windows-1251"); СтрокаРегионовРБК = РегионыРБКТекстовыйДокумент.ПрочитатьСтроку(); Пока СтрокаРегионовРБК <> Неопределено Цикл @@ -286,7 +459,8 @@ // ДанныеИТСАдресДвоичныхДанных - ВременноеХранилище - Файл данных БИК ИТС // Загружено - Число - Количество новых записей классификатора // Обновлено - Число - Количество обновленных записей классификатора -// ТекстСообщения - Строка - текст сообщения об ошибке +// ТекстСообщения - Строка - тест сообщения о результатах загрузки +// ЗагрузкаВыполнена - Булево - флаг успешного завершения загрузки данных классификатора // Процедура ЗагрузитьДанныеДискИТС(ПараметрыЗагрузкиФайловИТС) Экспорт @@ -347,9 +521,15 @@ ПараметрыЗагрузкиФайловИТС.Вставить("Обновлено", ПараметрыЗагрузкиДанныхИТС["Обновлено"]); КонецЦикла; - + УстановитьВерсиюКлассификатораБанков(ДатаВерсии); УдалитьФайлыВКаталоге(ВременныйКаталог,"*.*"); + УдалитьФайлы(ВременныйКаталог); + + Если ПустаяСтрока(ПараметрыЗагрузкиФайловИТС["ТекстСообщения"]) Тогда + ПараметрыЗагрузкиФайловИТС.Вставить("ЗагрузкаВыполнена", Истина); + ДополнитьТекстСообщения(ПараметрыЗагрузкиФайловИТС); + КонецЕсли; КонецПроцедуры @@ -398,7 +578,8 @@ КонецЕсли; КонецЕсли; - ЗаписываемыйЭлементСправочникаКлассификаторБанковРФ = Справочники.КлассификаторБанковРФ.НайтиПоКоду(СтруктураБанк.БИК); + ЗаписываемыйЭлементСправочникаКлассификаторБанковРФ = + Справочники.КлассификаторБанковРФ.НайтиПоКоду(СтруктураБанк.БИК); Если ЗаписываемыйЭлементСправочникаКлассификаторБанковРФ.Пустая() Тогда КлассификаторБанковОбъект = Справочники.КлассификаторБанковРФ.СоздатьЭлемент(); diff --git a/SSL/src/CommonModules/РаботаСБанкамиВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСБанкамиВызовСервера/Module.bsl deleted file mode 100644 index 31cc27cf3..000000000 --- a/SSL/src/CommonModules/РаботаСБанкамиВызовСервера/Module.bsl +++ /dev/null @@ -1,134 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Работа с банками". -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Формирует, дополняет текст сообщения пользователю в случае, если загрузка данных классификатора проведена успешно -// -// Параметры -// ПараметрыЗагрузкиКлассификатора - Соответствие: -// Загружено - Число - Количество новых записей классификатора -// Обновлено - Число - Количество обновленных записей классификатора -// ТекстСообщения - Строка - текст сообщения об ошибке -// -Процедура ДополнитьТекстСообщения(ПараметрыЗагрузкиКлассификатора) Экспорт - - Если ПустаяСтрока(ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]) Тогда - ТекстСообщения = НСтр("ru ='Загрузка классификатора банков РФ выполнена успешно.'"); - Иначе - ТекстСообщения = ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]; - КонецЕсли; - - Если ПараметрыЗагрузкиКлассификатора["Загружено"] > 0 Тогда - - ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru =' - |Загружено новых: %1.'"), ПараметрыЗагрузкиКлассификатора["Загружено"]); - - КонецЕсли; - - Если ПараметрыЗагрузкиКлассификатора["Обновлено"] > 0 Тогда - - ТекстСообщения = ТекстСообщения + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru =' - |Обновлено записей: %1.'"), ПараметрыЗагрузкиКлассификатора["Обновлено"]); - - КонецЕсли; - - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); - -КонецПроцедуры - -// Получает, сортирует, записывает данные классификатора БИК РФ с сайта РБК -// -// Параметры -// ПараметрыЗагрузкиКлассификатора - Соответствие: -// Загружено - Число - Количество новых записей классификатора -// Обновлено - Число - Количество обновленных записей классификатора -// ТекстСообщения - Строка - текст сообщения об ошибке -// -Процедура ПолучитьДанныеРБК(ПараметрыЗагрузкиКлассификатора) Экспорт - - ВременныйКаталог = КаталогВременныхФайлов() + "tempBik"; - СоздатьКаталог(ВременныйКаталог); - РаботаСБанками.УдалитьФайлыВКаталоге(ВременныйКаталог, "*.*"); - - ПараметрыПолученияФайловРБК = Новый Соответствие; - ПараметрыПолученияФайловРБК.Вставить("ПутьКФайлуРБК", ""); - ПараметрыПолученияФайловРБК.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); - ПараметрыПолученияФайловРБК.Вставить("ВременныйКаталог", ВременныйКаталог); - - РаботаСБанками.ПолучитьДанныеРБКИзИнтернета(ПараметрыПолученияФайловРБК); - - Если Не ПустаяСтрока(ПараметрыПолученияФайловРБК["ТекстСообщения"]) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыПолученияФайловРБК["ТекстСообщения"]); - Возврат; - КонецЕсли; - - Попытка - ZIPФайлРБК = Новый ЧтениеZipФайла(ПараметрыПолученияФайловРБК["ПутьКФайлуРБК"]); - Исключение - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК.'"); - ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - - Если Не ПустаяСтрока(ТекстСообщения) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); - Возврат; - КонецЕсли; - - Попытка - ZIPФайлРБК.ИзвлечьВсе(ВременныйКаталог); - Исключение - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК.'"); - ТекстСообщения = ТекстСообщения + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - - Если Не ПустаяСтрока(ТекстСообщения) Тогда - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); - Возврат; - КонецЕсли; - - ПутьКФайлуБИКРБК = ВременныйКаталог + "\bnkseek.txt"; - ФайлБИКРБК = Новый Файл(ПутьКФайлуБИКРБК); - Если Не ФайлБИКРБК.Существует() Тогда - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. - |Архив не содержит информацию - классификатор банков.'"); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); - Возврат; - КонецЕсли; - - ПутьКФайлуРегионовРБК = ВременныйКаталог + "\reg.txt"; - ФайлРегионовРБК = Новый Файл(ПутьКФайлуРегионовРБК); - Если Не ФайлРегионовРБК.Существует() Тогда - ТекстСообщения = НСтр("ru ='Возникли проблемы с файлом классификатора банков, полученным с сайта РБК. - |Архив не содержит информацию о регионах.'"); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ТекстСообщения); - Возврат; - КонецЕсли; - - ПараметрыЗагрузкиФайловРБК = Новый Соответствие; - ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуБИКРБК", ПутьКФайлуБИКРБК); - ПараметрыЗагрузкиФайловРБК.Вставить("ПутьКФайлуРегионовРБК", ПутьКФайлуРегионовРБК); - ПараметрыЗагрузкиФайловРБК.Вставить("ВременныйКаталог", ВременныйКаталог); - ПараметрыЗагрузкиФайловРБК.Вставить("Загружено", ПараметрыЗагрузкиКлассификатора["Загружено"]); - ПараметрыЗагрузкиФайловРБК.Вставить("Обновлено", ПараметрыЗагрузкиКлассификатора["Обновлено"]); - ПараметрыЗагрузкиФайловРБК.Вставить("ТекстСообщения", ПараметрыЗагрузкиКлассификатора["ТекстСообщения"]); - - РаботаСБанками.ЗагрузитьДанныеРБК(ПараметрыЗагрузкиФайловРБК); - - Если Не ПустаяСтрока(ПараметрыЗагрузкиФайловРБК["ТекстСообщения"]) Тогда - Возврат; - КонецЕсли; - - РаботаСБанками.УстановитьВерсиюКлассификатораБанков(); - РаботаСБанками.УдалитьФайлыВКаталоге(ВременныйКаталог,"*.*"); - - ПараметрыЗагрузкиКлассификатора.Вставить("Загружено", ПараметрыЗагрузкиФайловРБК["Загружено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("Обновлено", ПараметрыЗагрузкиФайловРБК["Обновлено"]); - ПараметрыЗагрузкиКлассификатора.Вставить("ТекстСообщения", ПараметрыЗагрузкиФайловРБК["ТекстСообщения"]); - -КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСБиблиотекойФайловКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСБиблиотекойФайловКлиент/Module.bsl index 20c37c0a5..3e9c11a14 100644 --- a/SSL/src/CommonModules/РаботаСБиблиотекойФайловКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСБиблиотекойФайловКлиент/Module.bsl @@ -23,7 +23,7 @@ НСтр("ru = 'Выполняется передача файла ""%1"" (%2 Мб)... |Пожалуйста, подождите.'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl index 56f41b963..1bac60d92 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/Module.bsl @@ -6,6 +6,48 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС +// Добавляет в справочник валют валюты из макета +// +// Параметры: +// Код (коллекция строк) Коды добавляемых валют +// +// Возвращаемое заначение: +// Массив из СправочникСсылка, соответствующих созданным валютам +// +Функция ДобавитьВалютыПоКоду(Знач Коды) Экспорт + Перем КлассификаторXML, КлассификаторТаблица, ЗаписьОКВ, НоваяСтрока, Результат; + + КлассификаторXML = Справочники.Валюты.ПолучитьМакет("ОбщероссийскийКлассификаторВалют").ПолучитьТекст(); + + КлассификаторТаблица = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные; + + Результат = Новый Массив(); + + Для каждого Код Из Коды Цикл + ЗаписьОКВ = КлассификаторТаблица.Найти(Код, "Code"); + Если ЗаписьОКВ = Неопределено Тогда + Продолжить; + КонецЕсли; + + ВалютаСсылка = Справочники.Валюты.НайтиПоКоду(ЗаписьОКВ.Code); + Если ВалютаСсылка.Пустая() Тогда + НоваяСтрока = Справочники.Валюты.СоздатьЭлемент(); + НоваяСтрока.Код = ЗаписьОКВ.Code; + НоваяСтрока.Наименование = ЗаписьОКВ.CodeSymbol; + НоваяСтрока.НаименованиеПолное = ЗаписьОКВ.Name; + НоваяСтрока.ЗагружаетсяИзИнтернета = ЗаписьОКВ.RBCLoading; + НоваяСтрока.ПараметрыПрописиНаРусском = ЗаписьОКВ.NumerationItemOptions; + НоваяСтрока.Записать(); + Результат.Добавить(НоваяСтрока.Ссылка); + Иначе + Результат.Добавить(ВалютаСсылка); + КонецЕсли + КонецЦикла; + + Возврат Результат; + +КонецФункции + // Возвращает курс валюты на дату // // Параметры: @@ -125,33 +167,37 @@ Процедура ЗаписатьСведенияДляПодчиненногоРегистра(ВалютаИсточник, ВалютаПриемник) Экспорт Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ * - | ИЗ РегистрСведений.КурсыВалют - | ГДЕ Валюта = &ВалютаИсточник"; + Запрос.Текст = + "ВЫБРАТЬ + | КурсыВалют.Период, + | КурсыВалют.Валюта, + | КурсыВалют.Курс, + | КурсыВалют.Кратность + |ИЗ + | РегистрСведений.КурсыВалют КАК КурсыВалют + |ГДЕ + | КурсыВалют.Валюта = &ВалютаИсточник"; Запрос.УстановитьПараметр("ВалютаИсточник", ВалютаИсточник); Выборка = Запрос.Выполнить().Выбрать(); - РегистрКурсыВалют = РегистрыСведений.КурсыВалют; - НаборКурсов = РегистрКурсыВалют.СоздатьНаборЗаписей(); - - НаборКурсов.Отбор.Валюта.ВидСравнения = ВидСравнения.Равно; - НаборКурсов.Отбор.Валюта.Значение = ВалютаПриемник; - НаборКурсов.Отбор.Валюта.Использование = Истина; + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Валюта.Установить(ВалютаПриемник, Истина); Наценка = ВалютаПриемник.Наценка; Пока Выборка.Следующий() Цикл - НоваяЗаписьНабораКурсов = НаборКурсов.Добавить(); + НоваяЗаписьНабораКурсов = НаборЗаписей.Добавить(); НоваяЗаписьНабораКурсов.Валюта = ВалютаПриемник; НоваяЗаписьНабораКурсов.Кратность = Выборка.Кратность; - НоваяЗаписьНабораКурсов.Курс = Выборка.Курс + Выборка.Курс*Наценка/100; + НоваяЗаписьНабораКурсов.Курс = Выборка.Курс + Выборка.Курс * Наценка / 100; НоваяЗаписьНабораКурсов.Период = Выборка.Период; КонецЦикла; - НаборКурсов.Записать(); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют", Истина); + НаборЗаписей.Записать(); КонецПроцедуры @@ -320,18 +366,39 @@ // колонка "Ссылка" - СправочникСсылка.Валюты // колонка "Наценка" - число // -Функция ПолучитьСписокЗависимыхВалют(знач ВалютаБазовая) Экспорт +Функция ПолучитьСписокЗависимыхВалют(ВалютаБазовая, ДополнительныеСвойства = Неопределено) Экспорт + Кэшировать = (ТипЗнч(ДополнительныеСвойства) = Тип("Структура")); - Запрос = Новый Запрос; - Запрос.Текст = "Выбрать Ссылка, Наценка - |ИЗ - | Справочник.Валюты Как СпрВалюты - |ГДЕ - | ОсновнаяВалюта = &ВалютаБазовая"; + Если Кэшировать Тогда + + ЗависимыеВалюты = ДополнительныеСвойства.ЗависимыеВалюты.Получить(ВалютаБазовая); + + Если ТипЗнч(ЗависимыеВалюты) = Тип("ТаблицаЗначений") Тогда + Возврат ЗависимыеВалюты; + КонецЕсли; + + КонецЕсли; + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СпрВалюты.Ссылка, + | СпрВалюты.Наценка + |ИЗ + | Справочник.Валюты КАК СпрВалюты + |ГДЕ + | СпрВалюты.ОсновнаяВалюта = &ВалютаБазовая"; Запрос.УстановитьПараметр("ВалютаБазовая", ВалютаБазовая); - Возврат Запрос.Выполнить().Выгрузить(); + ЗависимыеВалюты = Запрос.Выполнить().Выгрузить(); + + Если Кэшировать Тогда + + ДополнительныеСвойства.ЗависимыеВалюты.Вставить(ВалютаБазовая, ЗависимыеВалюты); + + КонецЕсли; + + Возврат ЗависимыеВалюты; КонецФункции diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалют/РаботаСКурсамиВалют.mdo b/SSL/src/CommonModules/РаботаСКурсамиВалют/РаботаСКурсамиВалют.mdo index b9be725e4..ab38806e1 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалют/РаботаСКурсамиВалют.mdo +++ b/SSL/src/CommonModules/РаботаСКурсамиВалют/РаботаСКурсамиВалют.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl new file mode 100644 index 000000000..16bd86c56 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/Module.bsl @@ -0,0 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Валюты" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Загружает информацию о курсе валюты. +// См. РаботаСКурсамиВалют.ЗагрузитьКурсВалютыИзФайла. +// +Функция ЗагрузитьКурсВалютыИзФайла(Валюта, ПутьКФайлу, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) Экспорт + + Возврат РаботаСКурсамиВалют.ЗагрузитьКурсВалютыИзФайла(Валюта, ПутьКФайлу, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки); + +КонецФункции diff --git a/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/РаботаСКурсамиВалютВызовСервера.mdo b/SSL/src/CommonModules/РаботаСКурсамиВалютВызовСервера/РаботаСКурсамиВалютВызовСервера.mdo new file mode 100644 index 000000000..b0f972728 --- /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 db8eedd75..4282a8757 100644 --- a/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСКурсамиВалютКлиентСервер/Module.bsl @@ -131,7 +131,7 @@ #Если Клиент Тогда ДвоичныеДанные = Новый ДвоичныеДанные(Результат.Путь); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные); - ПоясняющееСообщение = РаботаСКурсамиВалют.ЗагрузитьКурсВалютыИзФайла(Валюта.Валюта, АдресВоВременномХранилище, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) + Символы.ПС; + ПоясняющееСообщение = РаботаСКурсамиВалютВызовСервера.ЗагрузитьКурсВалютыИзФайла(Валюта.Валюта, АдресВоВременномХранилище, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) + Символы.ПС; #Иначе ПоясняющееСообщение = РаботаСКурсамиВалют.ЗагрузитьКурсВалютыИзФайла(Валюта.Валюта, Результат.Путь, НачалоПериодаЗагрузки, ОкончаниеПериодаЗагрузки) + Символы.ПС; #КонецЕсли diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo index 5b4add148..dfc56007f 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl index 5d681561e..2354ec21c 100644 --- a/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСПочтовымиСообщениямиКлиент/Module.bsl @@ -91,7 +91,7 @@ Состояние(НСтр("ru = 'Проверка учетной записи'"),,НСтр("ru = 'Выполняется проверка учетной записи. Подождите...'")); - Если ЭлектроннаяПочта.ПарольЗадан(УчетнаяЗапись) Тогда + Если ЭлектроннаяПочтаВызовСервера.ПарольЗадан(УчетнаяЗапись) Тогда ПарольПараметр = Неопределено; Иначе ПараметрУчетнаяЗапись = Новый Структура("УчетнаяЗапись", УчетнаяЗапись); @@ -103,7 +103,7 @@ СообщениеОбОшибке = ""; ДополнительноеСообщение = ""; - ЭлектроннаяПочта.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); + ЭлектроннаяПочтаВызовСервера.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); Если ЗначениеЗаполнено(СообщениеОбОшибке) Тогда Предупреждение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( diff --git a/SSL/src/CommonModules/РаботаСФайлами/Module.bsl b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl new file mode 100644 index 000000000..132bdd33c --- /dev/null +++ b/SSL/src/CommonModules/РаботаСФайлами/Module.bsl @@ -0,0 +1,68 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработчик события ПриЗаписи. Определен для объектов (кроме Документ), владельцев Файла. +Процедура УстановитьПометкуУдаленияФайловПередЗаписью(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Источник.ПометкаУдаления <> Источник.Ссылка.ПометкаУдаления Тогда + ПометитьНаУдалениеПриложенныеФайлы(Источник.Ссылка, Источник.ПометкаУдаления); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события ПриЗаписи. Определен для объектов типа Документ, владельцев Файла. +Процедура УстановитьПометкуУдаленияФайловДокументовПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если Источник.ПометкаУдаления <> Источник.Ссылка.ПометкаУдаления Тогда + ПометитьНаУдалениеПриложенныеФайлы(Источник.Ссылка, Источник.ПометкаУдаления); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +// Помечает/снимает пометку удаления у приложенных файлов. +Процедура ПометитьНаУдалениеПриложенныеФайлы(ВладелецФайла, ПометкаУдаления) + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Файлы.Ссылка КАК Ссылка, + | Файлы.Редактирует КАК Редактирует + |ИЗ + | Справочник.Файлы КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла"; + + Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); + + Результат = Запрос.Выполнить(); + Выборка = Результат.Выбрать(); + Пока Выборка.Следующий() Цикл + Если ПометкаУдаления И Не Выборка.Редактирует.Пустая() Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" не может быть удален, т.к. содержит файл ""%2"", занятый для редактирования.'"), + Строка(ВладелецФайла), + Строка(Выборка.Ссылка)); + КонецЕсли; + ФайлОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ФайлОбъект.Заблокировать(); + ФайлОбъект.УстановитьПометкуУдаления(ПометкаУдаления); + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиСобытия/РаботаСФайламиСобытия.mdo b/SSL/src/CommonModules/РаботаСФайлами/РаботаСФайлами.mdo similarity index 70% rename from SSL/src/CommonModules/РаботаСФайламиСобытия/РаботаСФайламиСобытия.mdo rename to SSL/src/CommonModules/РаботаСФайлами/РаботаСФайлами.mdo index a4fb61ddf..a0f322737 100644 --- a/SSL/src/CommonModules/РаботаСФайламиСобытия/РаботаСФайламиСобытия.mdo +++ b/SSL/src/CommonModules/РаботаСФайлами/РаботаСФайлами.mdo @@ -1,12 +1,11 @@ - РаботаСФайламиСобытия + РаботаСФайлами ru - Работа с файлами события + Работа с файлами true true true - true diff --git a/SSL/src/CommonModules/РаботаСФайламиВызовСервера/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиВызовСервера/Module.bsl index 3421cd06b..f41235277 100644 --- a/SSL/src/CommonModules/РаботаСФайламиВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиВызовСервера/Module.bsl @@ -1,11 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// МОДУЛЬ СОДЕРЖИТ РЕАЛИЗАЦИЮ МЕХАНИКИ РАБОТЫ С ФАЙЛАМИ -// - +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// Интерфейсные функции -// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Создает карточку Файла в БД вместе с версией // Параметры @@ -14,6 +13,7 @@ // // Возвращаемое значение: // СправочникСсылка.Файлы - созданный файл +// Функция СоздатьФайлНаОсновеФайлаНаДиске(Владелец, ПутьКФайлуНаДиске) Экспорт Файл = Новый Файл(ПутьКФайлуНаДиске); @@ -27,8 +27,8 @@ Если ИзвлекатьТекстыФайловНаСервере = Ложь Тогда // сами пытаемся извлечь текст - если сервер под Windows - Если ФайловыеФункции.ЭтоПлатформаWindows() Тогда - Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(ПутьКФайлуНаДиске); + Если ФайловыеФункцииСлужебный.ЭтоПлатформаWindows() Тогда + Текст = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекст(ПутьКФайлуНаДиске); АдресВременногоХранилищаТекста = Новый ХранилищеЗначения(Текст); КонецЕсли; @@ -49,20 +49,20 @@ Возврат ФайлСсылка; -КонецФункции - +КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Служебные функции +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Освобождает файл // Параметры: // ДанныеФайла - структура, содержащая сведения о Файле -// см. функцию ПолучитьДанныеФайла() - +// см. функцию ПолучитьДанныеФайла() +// // Параметры // ДанныеФайла - структура с данными файла // УникальныйИдентификатор - уникальный идентификатор формы +// Процедура ОсвободитьФайл(ДанныеФайла, УникальныйИдентификатор = Неопределено) Экспорт ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); @@ -75,9 +75,10 @@ РаботаСФайламиВызовСервераПереопределяемый.ПриОсвобожденииФайла(ДанныеФайла, УникальныйИдентификатор); -КонецПроцедуры +КонецПроцедуры // Занимает файл на редактирование (checkout) +// // Параметры // ДанныеФайла - структура с данными файла // СтрокаОшибки - строка, в которой возвращается причина ошибки в случае неуспеха (скажем "Файл занят другим пользователем") @@ -85,6 +86,7 @@ // // Возвращаемое значение: // Булево - успешно ли выполнена операция +// Функция ЗанятьФайл(ДанныеФайла, СтрокаОшибки = "", УникальныйИдентификатор = Неопределено) Экспорт Если Не РаботаСФайламиПереопределяемый.ВозможноЗанятьФайл(ДанныеФайла, СтрокаОшибки) Тогда @@ -112,12 +114,14 @@ Возврат Истина; -КонецФункции // ЗанятьФайл() +КонецФункции // Переносит Файл в другую папку +// // Параметры // ДанныеФайла - структура с данными файла // Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файл +// Процедура ПеренестиФайл(ДанныеФайла, Папка) Экспорт ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); @@ -128,24 +132,27 @@ КонецПроцедуры // Переносит Файлы в другую папку +// // Параметры // ОбъектыСсылка - Массив - массив ссылок на файлы // Папка - СправочникСсылка.ПапкиФайлов - ссылка на папку, куда нужно переместить файлы +// Функция ПеренестиФайлы(ОбъектыСсылка, Папка) Экспорт ДанныеФайлов = Новый Массив; Для Каждого ФайлСсылка Из ОбъектыСсылка Цикл - ПеренестиФайл(ФайлСсылка, Папка); + ПеренестиФайл(ФайлСсылка, Папка); ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка); ДанныеФайлов.Добавить(ДанныеФайла); - КонецЦикла; + КонецЦикла; Возврат ДанныеФайлов; - + КонецФункции // Создает карточку Файла в БД +// // Параметры // Владелец - владелец файла - будет устанолвен в реквизит ВладелецФайла у созданного файла // Комментарий - Строка - комментарий к файлу @@ -156,9 +163,13 @@ // // Возвращаемое значение: // СправочникСсылка.Файлы - ссылка на созданный файл -Функция СоздатьФайл(Знач Владелец, Знач Комментарий, Знач ИмяБезРасширения, - Знач ХранитьВерсии, Знач АдресВременногоХранилищаТекста, - Пользователь = Неопределено) Экспорт +// +Функция СоздатьФайл(Знач Владелец, + Знач Комментарий, + Знач ИмяБезРасширения, + Знач ХранитьВерсии, + Знач АдресВременногоХранилищаТекста, + Пользователь = Неопределено) Экспорт Файл = Справочники.Файлы.СоздатьЭлемент(); Файл.ВладелецФайла = Владелец; @@ -167,30 +178,31 @@ Если Пользователь = Неопределено Тогда Файл.Автор = Пользователи.ТекущийПользователь(); - Иначе + Иначе Файл.Автор = Пользователь; - КонецЕсли; + КонецЕсли; Файл.ДатаСоздания = ТекущаяДатаСеанса(); Файл.Описание = Комментарий; - Файл.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено); + Файл.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Неопределено); Файл.ХранитьВерсии = ХранитьВерсии; Если ТипЗнч(АдресВременногоХранилищаТекста) = Тип("ХранилищеЗначения") Тогда // При создании Файла из шаблона хранилище значения копируется напрямую Файл.ТекстХранилище = АдресВременногоХранилищаТекста; ИначеЕсли Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда - Текст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); Файл.ТекстХранилище = Новый ХранилищеЗначения(Текст); КонецЕсли; Файл.Записать(); Возврат Файл.Ссылка; -КонецФункции // СоздатьФайл() +КонецФункции // Создает версию сохраняемого файла для сохранения в карточке Файла // и подставляет ссылку на версию в карточку Файла +// // Параметры // ВремяИзменения - Дата - дата и время изменения файла // ВремяИзмененияУниверсальное - Дата - UTC дата и время изменения файла @@ -203,38 +215,38 @@ // ЭтоВебКлиент - Булево - Истина, если вызов идет из веб клиента // ХранитьВерсии - Булево - хранить версии // Пользователь - СправочникССылка.Пользователи - ссылка на пользователя - автора файла -Процедура СоздатьВерсиюИОбновитьВерсиюВФайле( - ВремяИзменения, - ВремяИзмененияУниверсальное, - ДокСсылка, - ИмяБезРасширения, - Размер, - Расширение, - АдресВременногоХранилищаФайла, - АдресВременногоХранилищаТекста, - ЭтоВебКлиент = Ложь, - Пользователь = Неопределено) Экспорт +// +Процедура СоздатьВерсиюИОбновитьВерсиюВФайле(ВремяИзменения, + ВремяИзмененияУниверсальное, + ДокСсылка, + ИмяБезРасширения, + Размер, + Расширение, + АдресВременногоХранилищаФайла, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент = Ложь, + Пользователь = Неопределено) Экспорт ВерсияСсылка = СоздатьВерсию( - ВремяИзменения, + ВремяИзменения, ВремяИзмененияУниверсальное, - ДокСсылка, - ИмяБезРасширения, - Размер, - Расширение, - АдресВременногоХранилищаФайла, + ДокСсылка, + ИмяБезРасширения, + Размер, + Расширение, + АдресВременногоХранилищаФайла, АдресВременногоХранилищаТекста, ЭтоВебКлиент, - Неопределено, // СсылкаНаВерсиюИсточник = - Неопределено, // НоваяВерсияДатаСоздания = + Неопределено, // СсылкаНаВерсиюИсточник + Неопределено, // НоваяВерсияДатаСоздания Пользователь, Неопределено, // НоваяВерсияКомментарий - Неопределено // НоваяВерсияНомерВерсии + Неопределено // НоваяВерсияНомерВерсии ); - + ОбновитьВерсиюВФайле(ДокСсылка, ВерсияСсылка, АдресВременногоХранилищаТекста); -КонецПроцедуры // СоздатьВерсиюИОбновитьВерсиюВФайле() +КонецПроцедуры // Находит максимальный номер версии для данного объекта Файл. Если нет версий - то 0 // Параметры @@ -242,14 +254,17 @@ // // Возвращаемое значение: // Число - максимальный номер версии +// Функция НайтиМаксимальныйНомерВерсии(ФайлСсылка) + Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ЕСТЬNULL(МАКСИМУМ(Версии.НомерВерсии), 0) КАК МаксимальныйНомер - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.Владелец = &Файл"; + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(МАКСИМУМ(Версии.НомерВерсии), 0) КАК МаксимальныйНомер + |ИЗ + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.Владелец = &Файл"; Запрос.Параметры.Вставить("Файл", ФайлСсылка); @@ -264,9 +279,10 @@ КонецЕсли; Возврат 0; -КонецФункции // НайтиМаксимальныйНомерВерсии +КонецФункции // Создает версию сохраняемого файла для сохранения в карточке Файла +// // Параметры // ВремяИзменения - Дата - дата и время изменения файла // ВремяИзмененияУниверсальное - Дата - UTC дата и время изменения файла @@ -285,21 +301,21 @@ // // Возвращаемое значение: // СправочникСсылка.ВерсииФайлов - созданная версия -Функция СоздатьВерсию( - ВремяИзменения, - ВремяИзмененияУниверсальное, - ДокСсылка, - ИмяБезРасширения, - Размер, - Расширение, - АдресВременногоХранилищаФайла, - АдресВременногоХранилищаТекста, - ЭтоВебКлиент = Ложь, - СсылкаНаВерсиюИсточник = Неопределено, - НоваяВерсияДатаСоздания = Неопределено, - НоваяВерсияАвтор = Неопределено, - НоваяВерсияКомментарий = Неопределено, - НоваяВерсияНомерВерсии = Неопределено) Экспорт +// +Функция СоздатьВерсию(ВремяИзменения, + ВремяИзмененияУниверсальное, + ДокСсылка, + ИмяБезРасширения, + Размер, + Расширение, + АдресВременногоХранилищаФайла, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент = Ложь, + СсылкаНаВерсиюИсточник = Неопределено, + НоваяВерсияДатаСоздания = Неопределено, + НоваяВерсияАвтор = Неопределено, + НоваяВерсияКомментарий = Неопределено, + НоваяВерсияНомерВерсии = Неопределено) Экспорт Перем СсылкаНаТом; ХранилищеФайла = Неопределено; @@ -308,20 +324,20 @@ Если ВремяИзменения = Дата('00010101') Тогда ВремяИзменения = ТекущаяДатаСеанса(); - КонецЕсли; + КонецЕсли; + Если ВремяИзмененияУниверсальное = Дата('00010101') Тогда ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДатаСеанса()); - КонецЕсли; + КонецЕсли; - ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункции.ПолучитьЗапретЗагрузкиФайловПоРасширению(); - СписокЗапрещенныхРасширений = ФайловыеФункции.ПолучитьСписокЗапрещенныхРасширений(); + ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункцииСлужебный.ПолучитьЗапретЗагрузкиФайловПоРасширению(); + СписокЗапрещенныхРасширений = ФайловыеФункцииСлужебный.ПолучитьСписокЗапрещенныхРасширений(); РасширениеФайла = Расширение; - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайла) Тогда - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), - РасширениеФайла); + Если Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайла) Тогда + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), + РасширениеФайла); КонецЕсли; Версия = Справочники.ВерсииФайлов.СоздатьЭлемент(); @@ -342,19 +358,19 @@ Версия.Автор = Пользователи.ТекущийПользователь(); Иначе Версия.Автор = НоваяВерсияАвтор; - КонецЕсли; + КонецЕсли; Если НоваяВерсияДатаСоздания = Неопределено Тогда Версия.ДатаСоздания = ТекущаяДатаСеанса(); Иначе Версия.ДатаСоздания = НоваяВерсияДатаСоздания; - КонецЕсли; + КонецЕсли; Версия.ПолноеНаименование = ИмяБезРасширения; Версия.Размер = Размер; - Версия.Расширение = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(Расширение); + Версия.Расширение = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(Расширение); - ТипХраненияФайлов = ФайловыеФункции.ПолучитьТипХраненияФайлов(); + ТипХраненияФайлов = ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов(); Версия.ТипХраненияФайла = ТипХраненияФайлов; Если СсылкаНаВерсиюИсточник <> Неопределено Тогда // создание Файла из шаблона @@ -371,12 +387,12 @@ // и шаблон, и новый Файл - на диске - просто копируем файл Если НЕ СсылкаНаВерсиюИсточник.Том.Пустая() Тогда - ПолныйПутьФайлаШаблона = ФайловыеФункции.ПолныйПутьТома(СсылкаНаВерсиюИсточник.Том) + СсылкаНаВерсиюИсточник.ПутьКФайлу; + ПолныйПутьФайлаШаблона = ФайловыеФункцииСлужебный.ПолныйПутьТома(СсылкаНаВерсиюИсточник.Том) + СсылкаНаВерсиюИсточник.ПутьКФайлу; ПутьКФайлу = ""; // добавить в один из томов (где есть свободное место) - ФайловыеФункции.ДобавитьНаДиск(ПолныйПутьФайлаШаблона, ПутьКФайлу, СсылкаНаТом, ВремяИзменения, Версия.НомерВерсии, + ФайловыеФункцииСлужебный.ДобавитьНаДиск(ПолныйПутьФайлаШаблона, ПутьКФайлу, СсылкаНаТом, ВремяИзменения, Версия.НомерВерсии, ИмяБезРасширения, Расширение, Версия.Размер, СсылкаНаВерсиюИсточник.Зашифрован); Версия.ПутьКФайлу = ПутьКФайлу; Версия.Том = СсылкаНаТом.Ссылка; @@ -390,7 +406,7 @@ ПутьКФайлу = ""; // добавить в один из томов (где есть свободное место) - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлу, СсылкаНаТом, ВремяИзменения, Версия.НомерВерсии, + ФайловыеФункцииСлужебный.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлу, СсылкаНаТом, ВремяИзменения, Версия.НомерВерсии, ИмяБезРасширения, Расширение, Версия.Размер, СсылкаНаВерсиюИсточник.Зашифрован); Версия.ПутьКФайлу = ПутьКФайлу; Версия.Том = СсылкаНаТом.Ссылка; @@ -399,7 +415,7 @@ // шаблон на диске, новый Файл - в базе Если НЕ СсылкаНаВерсиюИсточник.Том.Пустая() Тогда - ПолныйПутьФайлаШаблона = ФайловыеФункции.ПолныйПутьТома(СсылкаНаВерсиюИсточник.Том) + СсылкаНаВерсиюИсточник.ПутьКФайлу; + ПолныйПутьФайлаШаблона = ФайловыеФункцииСлужебный.ПолныйПутьТома(СсылкаНаВерсиюИсточник.Том) + СсылкаНаВерсиюИсточник.ПутьКФайлу; ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьФайлаШаблона); ХранилищеФайла = Новый ХранилищеЗначения(ДвоичныеДанные); КонецЕсли; @@ -416,17 +432,16 @@ ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); Версия.Размер = ДвоичныеДанныеФайла.Размер(); - МаксРазмерФайла = ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла(); + МаксРазмерФайла = ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла(); РазмерВМб = Версия.Размер / (1024 * 1024); РазмерВМбМакс = МаксРазмерФайла / (1024 * 1024); Если Версия.Размер > МаксРазмерФайла Тогда - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), - ИмяБезРасширения, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), + ИмяБезРасширения, + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); КонецЕсли; КонецЕсли; @@ -438,31 +453,30 @@ Если (ЭтоВебКлиент = Истина) И (Версия.Размер = 0) Тогда Версия.Размер = ДвоичныеДанные.Размер(); - МаксРазмерФайла = ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла(); + МаксРазмерФайла = ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла(); РазмерВМб = Версия.Размер / (1024 * 1024); РазмерВМбМакс = МаксРазмерФайла / (1024 * 1024); Если Версия.Размер > МаксРазмерФайла Тогда - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), - ИмяБезРасширения, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), + ИмяБезРасширения, + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); КонецЕсли; КонецЕсли; ПутьКФайлу = ""; // добавить в один из томов (где есть свободное место) - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлу, СсылкаНаТом, ВремяИзменения, + ФайловыеФункцииСлужебный.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлу, СсылкаНаТом, ВремяИзменения, Версия.НомерВерсии, ИмяБезРасширения, Расширение, Версия.Размер); Версия.ПутьКФайлу = ПутьКФайлу; Версия.Том = СсылкаНаТом.Ссылка; - КонецЕсли; // хранение на диске - - КонецЕсли; + КонецЕсли; // хранение на диске + + КонецЕсли; Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; @@ -471,7 +485,7 @@ Версия.ТекстХранилище = АдресВременногоХранилищаТекста; Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; ИначеЕсли Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда - Текст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; КонецЕсли; @@ -486,20 +500,25 @@ Версия.Записать(); Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ХранилищеФайла); - КонецЕсли; + ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ХранилищеФайла); + КонецЕсли; Возврат Версия.Ссылка; -КонецФункции // СоздатьВерсию() + +КонецФункции // Подставляет ссылку на версию в карточку Файла +// // Параметры // ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия // Версия - СправочникСсылка.ВерсииФайлов - версия файла // АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с файлом текста или ХранилищеЗначения - непосредственно содержит двоичные данные с файлом текста // УникальныйИдентификатор - уникальный идентификатор формы -Процедура ОбновитьВерсиюВФайле(ФайлСсылка, Версия, Знач АдресВременногоХранилищаТекста, - УникальныйИдентификатор = Неопределено) Экспорт +// +Процедура ОбновитьВерсиюВФайле(ФайлСсылка, + Версия, + Знач АдресВременногоХранилищаТекста, + УникальныйИдентификатор = Неопределено) Экспорт ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); @@ -510,32 +529,36 @@ // При создании Файла из шаблона хранилище значения копируется напрямую ФайлОбъект.ТекстХранилище = АдресВременногоХранилищаТекста; Иначе - Текст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); КонецЕсли; ФайлОбъект.Записать(); РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); -КонецПроцедуры // ОбновитьВерсиюВФайле() +КонецПроцедуры // Обновляет текстовую порцию из файла в карточке файла +// // Параметры // ФайлСсылка - СправочникСсылка.Файлы - Файл, в котором создается версия // АдресВременногоХранилищаТекста - Строка - содержит адрес во временном хранилище, где находятся двоичные данные с файлом текста или ХранилищеЗначения - непосредственно содержит двоичные данные с файлом текста // УникальныйИдентификатор - уникальный идентификатор формы -Процедура ОбновитьТекстВФайле(ФайлСсылка, Знач АдресВременногоХранилищаТекста, УникальныйИдентификатор = Неопределено) +// +Процедура ОбновитьТекстВФайле(ФайлСсылка, + Знач АдресВременногоХранилищаТекста, + УникальныйИдентификатор = Неопределено) ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - Текст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); ФайлОбъект.Записать(); РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); -КонецПроцедуры // ОбновитьТекстВФайле() +КонецПроцедуры // Обновление или создание версии Файла и возврат ссылки на обновленную версию (или Ложь, если файл бинарно не изменен) // Параметры @@ -559,27 +582,29 @@ // // Возвращаемое значение: // СправочникСсылка.ВерсииФайлов - созданная/измененная версия -Функция ОбновитьВерсию( - Файл, - СоздаватьВерсию, - АдресВременногоХранилищаФайла, - Комментарий, - ВремяИзменения, - ВремяИзмененияУниверсальное, - Размер, - ИмяБезРасширения, - Расширение, - ПолныйПутьКФайлу, - АдресВременногоХранилищаТекста, - ЭтоВебКлиент, - ТекстНеИзвлеченНаКлиенте, - УникальныйИдентификатор = Неопределено, - Зашифрован = Неопределено, - ВерсияСсылка = Неопределено, - СтатусИзвлеченияТекста = Неопределено) +// +Функция ОбновитьВерсию(Файл, + СоздаватьВерсию, + АдресВременногоХранилищаФайла, + Комментарий, + ВремяИзменения, + ВремяИзмененияУниверсальное, + Размер, + ИмяБезРасширения, + Расширение, + ПолныйПутьКФайлу, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент, + ТекстНеИзвлеченНаКлиенте, + УникальныйИдентификатор = Неопределено, + Зашифрован = Неопределено, + ВерсияСсылка = Неопределено, + СтатусИзвлеченияТекста = Неопределено) Перем СсылкаНаТом; - ХранилищеФайла = Неопределено; + ХранилищеФайла = Неопределено; + + ЕстьПравоСохранения = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); УстановитьПривилегированныйРежим(Истина); @@ -590,16 +615,16 @@ ВремяИзмененияУниверсальное = УниверсальноеВремя(ТекущаяДатаСеанса()); КонецЕсли; - ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункции.ПолучитьЗапретЗагрузкиФайловПоРасширению(); + ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункцииСлужебный.ПолучитьЗапретЗагрузкиФайловПоРасширению(); - СписокЗапрещенныхРасширений = ФайловыеФункции.ПолучитьСписокЗапрещенныхРасширений(); + СписокЗапрещенныхРасширений = ФайловыеФункцииСлужебный.ПолучитьСписокЗапрещенныхРасширений(); РасширениеФайла = Расширение; - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайла) Тогда + Если Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайла) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), - РасширениеФайла); + НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), + РасширениеФайла); КонецЕсли; ТекущаяВерсияРазмер = 0; @@ -627,26 +652,26 @@ Если Размер = ТекущаяВерсияРазмер Тогда - МаксРазмерФайла = ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла(); + МаксРазмерФайла = ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла(); Если ТекущаяВерсияРазмер <= МаксРазмерФайла / 2 Тогда ДвоичныеДанныеПредыдущейВерсии = Неопределено; Если ТекущаяВерсияТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда Если НЕ ТекущаяВерсияТом.Пустая() Тогда - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ТекущаяВерсияТом) + ТекущаяВерсияПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ТекущаяВерсияТом) + ТекущаяВерсияПутьКФайлу; ДвоичныеДанныеПредыдущейВерсии = Новый ДвоичныеДанные(ПолныйПуть); - КонецЕсли; + КонецЕсли; Иначе ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ВерсияСсылкаДляСравненияРазмера); ДвоичныеДанныеПредыдущейВерсии = ХранилищеФайла.Получить(); - КонецЕсли; + КонецЕсли; ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилищаФайла); Если ДвоичныеДанныеПредыдущейВерсии = ДвоичныеДанные Тогда Возврат Ложь; // файл бинарно не изменен - вернем Ложь - КонецЕсли; + КонецЕсли; КонецЕсли; @@ -674,7 +699,7 @@ // удалим файл с диска - мы заместим его новым Если Версия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда Если НЕ Версия.Том.Пустая() Тогда - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; Попытка ФайлНаДиске = Новый Файл(ПолныйПуть); ФайлНаДиске.УстановитьТолькоЧтение(Ложь); @@ -701,14 +726,14 @@ Версия.ПолноеНаименование = ИмяБезРасширения; Версия.Комментарий = Комментарий; - Версия.Расширение = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(Расширение); + Версия.Расширение = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(Расширение); - ТипХраненияФайлов = ФайловыеФункции.ПолучитьТипХраненияФайлов(); + ТипХраненияФайлов = ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов(); Версия.ТипХраненияФайла = ТипХраненияФайлов; Если ДвоичныеДанные = Неопределено Тогда ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилищаФайла); - КонецЕсли; + КонецЕсли; Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда @@ -718,21 +743,20 @@ ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); Версия.Размер = ДвоичныеДанныеФайла.Размер(); - МаксРазмерФайла = ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла(); + МаксРазмерФайла = ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла(); РазмерВМб = Версия.Размер / (1024 * 1024); РазмерВМбМакс = МаксРазмерФайла / (1024 * 1024); Если Версия.Размер > МаксРазмерФайла Тогда - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), - ИмяБезРасширения, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), + ИмяБезРасширения, + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); КонецЕсли; КонецЕсли; - + // очистим поля Версия.ПутьКФайлу = ""; Версия.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); @@ -741,17 +765,16 @@ Если (ЭтоВебКлиент = Истина) И (Версия.Размер = 0) Тогда Версия.Размер = ДвоичныеДанные.Размер(); - МаксРазмерФайла = ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла(); + МаксРазмерФайла = ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла(); РазмерВМб = Версия.Размер / (1024 * 1024); РазмерВМбМакс = МаксРазмерФайла / (1024 * 1024); Если Версия.Размер > МаксРазмерФайла Тогда - ВызватьИсключение - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), - ИмяБезРасширения, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), + ИмяБезРасширения, + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); КонецЕсли; КонецЕсли; @@ -764,17 +787,17 @@ КонецЕсли; // добавить в один из томов (где есть свободное место) - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлу, СсылкаНаТом, ВремяИзменения, + ФайловыеФункцииСлужебный.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлу, СсылкаНаТом, ВремяИзменения, Версия.НомерВерсии, ИмяБезРасширения, Версия.Расширение, Версия.Размер, ФайлЗашифрован); Версия.ПутьКФайлу = ПутьКФайлу; Версия.Том = СсылкаНаТом.Ссылка; ХранилищеФайла = Новый ХранилищеЗначения(Неопределено); // очистим ХранилищеЗначения - КонецЕсли; // хранение на диске + КонецЕсли; // хранение на диске - Если НЕ ТекстНеИзвлеченНаКлиенте Тогда + Если НЕ ТекстНеИзвлеченНаКлиенте Тогда ИзвлекатьТекстыФайловНаСервере = Константы.ИзвлекатьТекстыФайловНаСервере.Получить(); Если ИзвлекатьТекстыФайловНаСервере = Ложь Тогда - Текст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); Версия.ТекстХранилище = Новый ХранилищеЗначения(Текст); Версия.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; Иначе @@ -792,7 +815,7 @@ Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); Версия.Размер = ДвоичныеДанныеФайла.Размер(); - КонецЕсли; + КонецЕсли; КонецЕсли; Если Зашифрован <> Неопределено Тогда @@ -802,8 +825,8 @@ Версия.Записать(); Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ХранилищеФайла); - КонецЕсли; + ЗаписатьФайлВИнформационнуюБазу(Версия.Ссылка, ХранилищеФайла); + КонецЕсли; Если ВерсияЗаблокирована Тогда РазблокироватьДанныеДляРедактирования(Версия.Ссылка, УникальныйИдентификатор); @@ -811,12 +834,14 @@ ЗаписатьКодировкуВерсииФайла(Версия.Ссылка, КодировкаПредВерсии); - НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(Файл); - ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла); + Если ЕстьПравоСохранения Тогда + НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(Файл); + ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла); + КонецЕсли; Возврат Версия.Ссылка; -КонецФункции // ОбновитьВерсию +КонецФункции // Обновляет или создает версию Файла и снимает заем. Возвращает Истина, если создание версии выполнено (и файл бинарно изменен) // Параметры @@ -838,47 +863,47 @@ // УникальныйИдентификатор - уникальный идентификатор формы // // Возвращаемое значение: -// Булево - успешно ли выполнена операция -Функция ОпубликоватьИОсвободитьФайл( - ДанныеФайла, - СоздаватьВерсию, - АдресВременногоХранилищаФайла, - Комментарий, - ВремяИзменения, - ВремяИзмененияУниверсальное, - Размер, - ИмяБезРасширения, - Расширение, - ПолныйПутьКФайлу, - АдресВременногоХранилищаТекста, - ЭтоВебКлиент, - ТекстНеИзвлеченНаКлиенте, - ВРабочемКаталогеВладельца, - НеМенятьЗаписьВРабочемКаталоге, - УникальныйИдентификатор = Неопределено, - Кодировка = Неопределено) Экспорт +// Булево - успешно ли выполнена операция. +// +Функция ОпубликоватьИОсвободитьФайл(ДанныеФайла, + СоздаватьВерсию, + АдресВременногоХранилищаФайла, + Комментарий, + ВремяИзменения, + ВремяИзмененияУниверсальное, + Размер, + ИмяБезРасширения, + Расширение, + ПолныйПутьКФайлу, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент, + ТекстНеИзвлеченНаКлиенте, + ВРабочемКаталогеВладельца, + НеМенятьЗаписьВРабочемКаталоге, + УникальныйИдентификатор = Неопределено, + Кодировка = Неопределено, + РабочийКаталогПользователя) Экспорт ДанныеФайлаТекущие = ПолучитьДанныеФайла(ДанныеФайла.Ссылка); Если Не ДанныеФайлаТекущие.РедактируетТекущийПользователь Тогда ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'"); - КонецЕсли; + КонецЕсли; ВерсияНеСоздана = Ложь; НачатьТранзакцию(); Попытка - ПредыдущаяВерсия = ДанныеФайла.ТекущаяВерсия; КодВозвратаОбновитьВерсию = ОбновитьВерсию( - ДанныеФайла.Ссылка, - СоздаватьВерсию, - АдресВременногоХранилищаФайла, - Комментарий, - ВремяИзменения, + ДанныеФайла.Ссылка, + СоздаватьВерсию, + АдресВременногоХранилищаФайла, + Комментарий, + ВремяИзменения, ВремяИзмененияУниверсальное, - Размер, - ИмяБезРасширения, - Расширение, + Размер, + ИмяБезРасширения, + Расширение, ПолныйПутьКФайлу, АдресВременногоХранилищаТекста, ЭтоВебКлиент, @@ -886,12 +911,12 @@ УникальныйИдентификатор, ДанныеФайла.Зашифрован); - НоваяВерсия = Неопределено; + НоваяВерсия = Неопределено; Если ТипЗнч(КодВозвратаОбновитьВерсию) = Тип("Булево") Тогда ВерсияНеСоздана = Истина; - Иначе + Иначе НоваяВерсия = КодВозвратаОбновитьВерсию; - КонецЕсли; + КонецЕсли; Если Не ВерсияНеСоздана Тогда Если СоздаватьВерсию Тогда @@ -907,30 +932,30 @@ Если Кодировка <> Неопределено Тогда Если Не ЗначениеЗаполнено(ПолучитьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия)) Тогда ЗаписатьКодировкуВерсииФайла(ДанныеФайла.ТекущаяВерсия, Кодировка); - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; Если Не ВерсияНеСоздана Тогда Если НЕ ЭтоВебКлиент И Не НеМенятьЗаписьВРабочемКаталоге Тогда - ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); + УдалитьВерсиюИЗанестиИнформациюФайлаВРегистр( - ПредыдущаяВерсия, - НоваяВерсия, - ПолныйПутьКФайлу, - ИмяКаталога, + ПредыдущаяВерсия, + НоваяВерсия, + ПолныйПутьКФайлу, + РабочийКаталогПользователя, ДанныеФайла.РабочийКаталогВладельца <> ""); КонецЕсли; - КонецЕсли; + КонецЕсли; ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; + ОтменитьТранзакцию(); + ВызватьИсключение; КонецПопытки; - Возврат (Не ВерсияНеСоздана); - -КонецФункции // ОпубликоватьИОсвободитьФайл() + Возврат Не ВерсияНеСоздана; + +КонецФункции // Получает данные файла, затем обновляет или создает версию Файла и снимает заем // Нужно для случаев, когда на клиенте нет ДанныеФайла (из соображений экономии вызовов клиент-сервер) @@ -954,28 +979,29 @@ // // Возвращаемое значение: // Булево - успешно ли выполнена операция -Функция ПолучитьДанныеФайлаИОпубликоватьИОсвободитьФайл( - ОбъектСсылка, - ДанныеФайла, - СоздаватьВерсию, - АдресВременногоХранилищаФайла, - Комментарий, - ВремяИзменения, - ВремяИзмененияУниверсальное, - Размер, - ИмяБезРасширения, - Расширение, - ПолныйПутьКФайлу, - АдресВременногоХранилищаТекста, - ЭтоВебКлиент, - ТекстНеИзвлеченНаКлиенте, - УникальныйИдентификатор = Неопределено) Экспорт - +// +Функция ПолучитьДанныеФайлаИОпубликоватьИОсвободитьФайл(ОбъектСсылка, + ДанныеФайла, + СоздаватьВерсию, + АдресВременногоХранилищаФайла, + Комментарий, + ВремяИзменения, + ВремяИзмененияУниверсальное, + Размер, + ИмяБезРасширения, + Расширение, + ПолныйПутьКФайлу, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент, + ТекстНеИзвлеченНаКлиенте, + УникальныйИдентификатор = Неопределено, + РабочийКаталогПользователя) Экспорт + ДанныеФайла = ПолучитьДанныеФайла(ОбъектСсылка); Если Не ДанныеФайла.РедактируетТекущийПользователь Тогда ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'"); - КонецЕсли; + КонецЕсли; ВерсияНеСоздана = Ложь; @@ -984,33 +1010,40 @@ ПредыдущаяВерсия = ДанныеФайла.ТекущаяВерсия; КодВозвратаОбновитьВерсию = ОбновитьВерсию( - ДанныеФайла.Ссылка, - СоздаватьВерсию, - АдресВременногоХранилищаФайла, - Комментарий, - ВремяИзменения, + ДанныеФайла.Ссылка, + СоздаватьВерсию, + АдресВременногоХранилищаФайла, + Комментарий, + ВремяИзменения, ВремяИзмененияУниверсальное, - Размер, - ИмяБезРасширения, - Расширение, + Размер, + ИмяБезРасширения, + Расширение, ПолныйПутьКФайлу, АдресВременногоХранилищаТекста, ЭтоВебКлиент, ТекстНеИзвлеченНаКлиенте, УникальныйИдентификатор); - НоваяВерсия = Неопределено; + НоваяВерсия = Неопределено; Если ТипЗнч(КодВозвратаОбновитьВерсию) = Тип("Булево") Тогда ВерсияНеСоздана = Истина; - Иначе + Иначе НоваяВерсия = КодВозвратаОбновитьВерсию; - КонецЕсли; + КонецЕсли; Если Не ВерсияНеСоздана Тогда Если СоздаватьВерсию Тогда - ОбновитьВерсиюВФайле(ДанныеФайла.Ссылка, НоваяВерсия, АдресВременногоХранилищаТекста, УникальныйИдентификатор); + ОбновитьВерсиюВФайле( + ДанныеФайла.Ссылка, + НоваяВерсия, + АдресВременногоХранилищаТекста, + УникальныйИдентификатор); Иначе - ОбновитьТекстВФайле(ДанныеФайла.Ссылка, АдресВременногоХранилищаТекста, УникальныйИдентификатор); + ОбновитьТекстВФайле( + ДанныеФайла.Ссылка, + АдресВременногоХранилищаТекста, + УникальныйИдентификатор); КонецЕсли; ДанныеФайла.ТекущаяВерсия = НоваяВерсия; КонецЕсли; @@ -1019,25 +1052,25 @@ Если Не ВерсияНеСоздана Тогда Если НЕ ЭтоВебКлиент Тогда - ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); + УдалитьВерсиюИЗанестиИнформациюФайлаВРегистр( - ПредыдущаяВерсия, - НоваяВерсия, - ПолныйПутьКФайлу, - ИмяКаталога, + ПредыдущаяВерсия, + НоваяВерсия, + ПолныйПутьКФайлу, + РабочийКаталогПользователя, ДанныеФайла.РабочийКаталогВладельца <> ""); КонецЕсли; КонецЕсли; - + ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; + ОтменитьТранзакцию(); + ВызватьИсключение; КонецПопытки; - Возврат (Не ВерсияНеСоздана); + Возврат Не ВерсияНеСоздана; -КонецФункции // ПолучитьДанныеФайлаИОпубликоватьИОсвободитьФайл() +КонецФункции // Предназначена для опубликования файла без его освобождения. Возвращает Истина, если создание версии выполнено (и файл бинарно изменен) // Параметры @@ -1061,63 +1094,63 @@ // // Возвращаемое значение: // Булево - успешно ли выполнена операция -Функция ОпубликоватьФайл( - Файл, - СоздаватьВерсию, - АдресВременногоХранилищаФайла, - Комментарий, - ВремяИзменения, - ВремяИзмененияУниверсальное, - Размер, - ИмяБезРасширения, - Расширение, - ОтносительныйПутьКФайлу, - ПолныйПутьКФайлу, - АдресВременногоХранилищаТекста, - ЭтоВебКлиент, - ТекстНеИзвлеченНаКлиенте, - ВРабочемКаталогеВладельца, - НеМенятьЗаписьВРабочемКаталоге, - УникальныйИдентификатор = Неопределено, - Кодировка = Неопределено) Экспорт +// +Функция ОпубликоватьФайл(Файл, + СоздаватьВерсию, + АдресВременногоХранилищаФайла, + Комментарий, + ВремяИзменения, + ВремяИзмененияУниверсальное, + Размер, + ИмяБезРасширения, + Расширение, + ОтносительныйПутьКФайлу, + ПолныйПутьКФайлу, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент, + ТекстНеИзвлеченНаКлиенте, + ВРабочемКаталогеВладельца, + НеМенятьЗаписьВРабочемКаталоге, + УникальныйИдентификатор = Неопределено, + Кодировка = Неопределено) Экспорт ДанныеФайлаТекущие = ПолучитьДанныеФайла(Файл); Если Не ДанныеФайлаТекущие.РедактируетТекущийПользователь Тогда ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'"); - КонецЕсли; + КонецЕсли; ВерсияНеСоздана = Ложь; ТекущаяВерсия = ДанныеФайлаТекущие.ТекущаяВерсия; НачатьТранзакцию(); Попытка - + СтараяВерсия = Файл.ТекущаяВерсия; КодВозвратаОбновитьВерсию = ОбновитьВерсию( - Файл, - СоздаватьВерсию, - АдресВременногоХранилищаФайла, - Комментарий, - ВремяИзменения, + Файл, + СоздаватьВерсию, + АдресВременногоХранилищаФайла, + Комментарий, + ВремяИзменения, ВремяИзмененияУниверсальное, - Размер, - ИмяБезРасширения, - Расширение, + Размер, + ИмяБезРасширения, + Расширение, ПолныйПутьКФайлу, АдресВременногоХранилищаТекста, ЭтоВебКлиент, ТекстНеИзвлеченНаКлиенте, УникальныйИдентификатор, ДанныеФайлаТекущие.Зашифрован); - - НоваяВерсия = Неопределено; + + НоваяВерсия = Неопределено; Если ТипЗнч(КодВозвратаОбновитьВерсию) = Тип("Булево") Тогда ВерсияНеСоздана = Истина; - Иначе + Иначе НоваяВерсия = КодВозвратаОбновитьВерсию; ТекущаяВерсия = НоваяВерсия; - КонецЕсли; + КонецЕсли; Если Не ВерсияНеСоздана Тогда Если СоздаватьВерсию Тогда @@ -1136,18 +1169,18 @@ Если Кодировка <> Неопределено Тогда Если Не ЗначениеЗаполнено(ПолучитьКодировкуВерсииФайла(ТекущаяВерсия)) Тогда ЗаписатьКодировкуВерсииФайла(ТекущаяВерсия, Кодировка); - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; ЗафиксироватьТранзакцию(); Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; + ОтменитьТранзакцию(); + ВызватьИсключение; КонецПопытки; - Возврат (Не ВерсияНеСоздана); + Возврат Не ВерсияНеСоздана; -КонецФункции // ОпубликоватьФайл() +КонецФункции // Получает РедактируетТекущийПользователь - в привилегированном режиме // Параметры @@ -1155,22 +1188,23 @@ // // Возвращаемое значение: // Булево - Истина, если файл редактирует текущий пользователь +// Функция ПолучитьРедактируетТекущийПользователь(ВерсияСсылка) Экспорт УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Редактирует КАК Редактирует + |ИЗ + | Справочник.Файлы КАК Файлы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО (ИСТИНА) + |ГДЕ + | ВерсииФайлов.Ссылка = &Версия + | И Файлы.Ссылка = ВерсииФайлов.Владелец"; - Запрос.Текст = "ВЫБРАТЬ - | Файлы.Редактирует КАК Редактирует - |ИЗ - | Справочник.Файлы КАК Файлы - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов - | ПО (ИСТИНА) - |ГДЕ - | ВерсииФайлов.Ссылка = &Версия - | И Файлы.Ссылка = ВерсииФайлов.Владелец"; - Запрос.Параметры.Вставить("Версия", ВерсияСсылка); Выборка = Запрос.Выполнить().Выбрать(); @@ -1180,7 +1214,8 @@ КонецЕсли; Возврат Ложь; -КонецФункции + +КонецФункции // Функция возвращает структуру, содержащую различные сведения о Файле и версии // Параметры @@ -1189,112 +1224,116 @@ // // Возвращаемое значение: // Структура - структура с данными файла +// Функция ПолучитьДанныеФайла(ФайлСсылка, ВерсияСсылка = Неопределено) Экспорт Запрос = Новый Запрос; - + Если ВерсияСсылка = Справочники.ВерсииФайлов.ПустаяСсылка() Тогда ВерсияСсылка = Неопределено; КонецЕсли; Если ВерсияСсылка = Неопределено Тогда - Запрос.Текст = "ВЫБРАТЬ - | Файлы.Ссылка КАК Ссылка, - | Файлы.Код КАК Код, - | Файлы.Редактирует КАК Редактирует, - | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, - | Файлы.ВладелецФайла КАК ВладелецФайла, - | Файлы.ХранитьВерсии КАК ХранитьВерсии, - | Файлы.ПометкаУдаления КАК ПометкаУдаления, - | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, - | ВерсииФайлов.Расширение КАК Расширение, - | ВерсииФайлов.Размер КАК Размер, - | ВерсииФайлов.НомерВерсии КАК НомерВерсии, - | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, - | ВерсииФайлов.Том КАК Том, - | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, - | ВерсииФайлов.Автор КАК Автор, - | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, - | Файлы.Зашифрован КАК Зашифрован, - | Файлы.ДатаЗаема КАК ДатаЗаема - |ИЗ - | Справочник.Файлы КАК Файлы - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов - | ПО Файлы.ТекущаяВерсия = ВерсииФайлов.Ссылка"; + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка КАК Ссылка, + | Файлы.Код КАК Код, + | Файлы.Редактирует КАК Редактирует, + | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, + | Файлы.ВладелецФайла КАК ВладелецФайла, + | Файлы.ХранитьВерсии КАК ХранитьВерсии, + | Файлы.ПометкаУдаления КАК ПометкаУдаления, + | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, + | ВерсииФайлов.Расширение КАК Расширение, + | ВерсииФайлов.Размер КАК Размер, + | ВерсииФайлов.НомерВерсии КАК НомерВерсии, + | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, + | ВерсииФайлов.Том КАК Том, + | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, + | ВерсииФайлов.Автор КАК Автор, + | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, + | Файлы.Зашифрован КАК Зашифрован, + | Файлы.ДатаЗаема КАК ДатаЗаема + |ИЗ + | Справочник.Файлы КАК Файлы + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО Файлы.ТекущаяВерсия = ВерсииФайлов.Ссылка"; Если ТипЗнч(ФайлСсылка) = Тип("Массив") Тогда Запрос.Текст = Запрос.Текст + " ГДЕ Файлы.Ссылка В (&Файл) "; Иначе Запрос.Текст = Запрос.Текст + " ГДЕ Файлы.Ссылка = &Файл "; КонецЕсли; - + Запрос.Параметры.Вставить("Файл", ФайлСсылка); Иначе Если ФайлСсылка <> Неопределено Тогда - Запрос.Текст = "ВЫБРАТЬ - | Файлы.Ссылка КАК Ссылка, - | Файлы.Код КАК Код, - | Файлы.Редактирует КАК Редактирует, - | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, - | Файлы.ВладелецФайла КАК ВладелецФайла, - | Файлы.ХранитьВерсии КАК ХранитьВерсии, - | Файлы.ПометкаУдаления КАК ПометкаУдаления, - | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, - | ВерсииФайлов.Расширение КАК Расширение, - | ВерсииФайлов.Размер КАК Размер, - | ВерсииФайлов.НомерВерсии КАК НомерВерсии, - | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, - | ВерсииФайлов.Том КАК Том, - | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, - | ВерсииФайлов.Автор КАК Автор, - | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, - | Файлы.Зашифрован КАК Зашифрован, - | Файлы.ДатаЗаема КАК ДатаЗаема - |ИЗ - | Справочник.Файлы КАК Файлы - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов - | ПО (ИСТИНА) - |ГДЕ - | Файлы.Ссылка = &Файл - | И ВерсииФайлов.Ссылка = &Версия"; - + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка КАК Ссылка, + | Файлы.Код КАК Код, + | Файлы.Редактирует КАК Редактирует, + | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, + | Файлы.ВладелецФайла КАК ВладелецФайла, + | Файлы.ХранитьВерсии КАК ХранитьВерсии, + | Файлы.ПометкаУдаления КАК ПометкаУдаления, + | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, + | ВерсииФайлов.Расширение КАК Расширение, + | ВерсииФайлов.Размер КАК Размер, + | ВерсииФайлов.НомерВерсии КАК НомерВерсии, + | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, + | ВерсииФайлов.Том КАК Том, + | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, + | ВерсииФайлов.Автор КАК Автор, + | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, + | Файлы.Зашифрован КАК Зашифрован, + | Файлы.ДатаЗаема КАК ДатаЗаема + |ИЗ + | Справочник.Файлы КАК Файлы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО (ИСТИНА) + |ГДЕ + | Файлы.Ссылка = &Файл + | И ВерсииФайлов.Ссылка = &Версия"; + Запрос.Параметры.Вставить("Файл", ФайлСсылка); Запрос.Параметры.Вставить("Версия", ВерсияСсылка); Иначе - Запрос.Текст = "ВЫБРАТЬ - | Файлы.Ссылка КАК Ссылка, - | Файлы.Код КАК Код, - | Файлы.Редактирует КАК Редактирует, - | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, - | Файлы.ВладелецФайла КАК ВладелецФайла, - | Файлы.ХранитьВерсии КАК ХранитьВерсии, - | Файлы.ПометкаУдаления КАК ПометкаУдаления, - | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, - | ВерсииФайлов.Расширение КАК Расширение, - | ВерсииФайлов.Размер КАК Размер, - | ВерсииФайлов.НомерВерсии КАК НомерВерсии, - | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, - | ВерсииФайлов.Том КАК Том, - | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, - | ВерсииФайлов.Автор КАК Автор, - | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, - | Файлы.Зашифрован КАК Зашифрован, - | Файлы.ДатаЗаема КАК ДатаЗаема - |ИЗ - | Справочник.Файлы КАК Файлы - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов - | ПО (ИСТИНА) - |ГДЕ - | ВерсииФайлов.Ссылка = &Версия - | И Файлы.Ссылка = ВерсииФайлов.Владелец"; - + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка КАК Ссылка, + | Файлы.Код КАК Код, + | Файлы.Редактирует КАК Редактирует, + | Файлы.ТекущаяВерсия КАК ТекущаяВерсия, + | Файлы.ВладелецФайла КАК ВладелецФайла, + | Файлы.ХранитьВерсии КАК ХранитьВерсии, + | Файлы.ПометкаУдаления КАК ПометкаУдаления, + | ВерсииФайлов.ПолноеНаименование КАК ПолноеНаименование, + | ВерсииФайлов.Расширение КАК Расширение, + | ВерсииФайлов.Размер КАК Размер, + | ВерсииФайлов.НомерВерсии КАК НомерВерсии, + | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, + | ВерсииФайлов.Том КАК Том, + | ВерсииФайлов.ДатаМодификацииУниверсальная КАК ДатаМодификацииУниверсальная, + | ВерсииФайлов.Автор КАК Автор, + | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, + | Файлы.Зашифрован КАК Зашифрован, + | Файлы.ДатаЗаема КАК ДатаЗаема + |ИЗ + | Справочник.Файлы КАК Файлы + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВерсииФайлов КАК ВерсииФайлов + | ПО (ИСТИНА) + |ГДЕ + | ВерсииФайлов.Ссылка = &Версия + | И Файлы.Ссылка = ВерсииФайлов.Владелец"; + Запрос.Параметры.Вставить("Версия", ВерсияСсылка); - КонецЕсли; + КонецЕсли; - КонецЕсли; + КонецЕсли; МассивДанныеФайла = Новый Массив; @@ -1338,7 +1377,7 @@ Если ДанныеФайла.Зашифрован Тогда МассивСертификатовШифрования = ПолучитьМассивСертификатовШифрования(ДанныеФайла.Ссылка); ДанныеФайла.Вставить("МассивСертификатовШифрования", МассивСертификатовШифрования); - КонецЕсли; + КонецЕсли; НаЧтение = ДанныеФайла.Редактирует <> Пользователи.ТекущийПользователь(); ДанныеФайла.Вставить("НаЧтение", НаЧтение); @@ -1348,13 +1387,13 @@ ИмяКаталога = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); Если ИмяКаталога = Неопределено Тогда ИмяКаталога = ""; - КонецЕсли; + КонецЕсли; Если ВерсияСсылка <> Неопределено Тогда ИмяФайлаСПутемВРабочемКаталоге = ПолучитьИмяФайлаСПутемИзРегистра(ВерсияСсылка, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); Иначе ИмяФайлаСПутемВРабочемКаталоге = ПолучитьИмяФайлаСПутемИзРегистра(Выборка.ТекущаяВерсия, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); - КонецЕсли; + КонецЕсли; ДанныеФайла.Вставить("ИмяФайлаСПутемВРабочемКаталоге", ИмяФайлаСПутемВРабочемКаталоге); ДанныеФайла.Вставить("ВРабочемКаталогеНаЧтение", ВРабочемКаталогеНаЧтение); @@ -1370,10 +1409,10 @@ СтатусИзвлеченияТекстаСтрока = "Извлечен"; ИначеЕсли Выборка.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось Тогда СтатусИзвлеченияТекстаСтрока = "ИзвлечьНеУдалось"; - КонецЕсли; + КонецЕсли; ДанныеФайла.Вставить("СтатусИзвлеченияТекста", СтатусИзвлеченияТекстаСтрока); - МассивДанныеФайла.Добавить(ДанныеФайла); + МассивДанныеФайла.Добавить(ДанныеФайла); КонецЦикла; @@ -1406,6 +1445,7 @@ // // Возвращаемое значение: // СправочникСсылка.Файлы - созданный файл +// Функция СоздатьФайлСВерсией( ВладелецФайла, ИмяБезРасширения, @@ -1420,10 +1460,12 @@ Комментарий = "", ЗаписатьВИсторию = Ложь, Кодировка = Неопределено) Экспорт - + + ЕстьПравоСохранения = ПравоДоступа("СохранениеДанныхПользователя", Метаданные); + НачатьТранзакцию(); Попытка - + // Создадим карточку Файла в БД Док = СоздатьФайл( ВладелецФайла, @@ -1447,30 +1489,29 @@ Неопределено, // СсылкаНаВерсиюИсточник Неопределено, // НоваяВерсияДатаСоздания Пользователь); - + // Подставим ссылку на версию в карточку Файла ОбновитьВерсиюВФайле(Док, Версия, АдресВременногоХранилищаТекста); - + Если Кодировка <> Неопределено Тогда ЗаписатьКодировкуВерсииФайла(Версия, Кодировка); - КонецЕсли; + КонецЕсли; - ЗафиксироватьТранзакцию(); - - Если ЗаписатьВИсторию Тогда + Если ЗаписатьВИсторию И ЕстьПравоСохранения Тогда НавигационнаяСсылкаФайла = ПолучитьНавигационнуюСсылку(Док); ИсторияРаботыПользователя.Добавить(НавигационнаяСсылкаФайла); - КонецЕсли; + КонецЕсли; + ЗафиксироватьТранзакцию(); Исключение - Инфо = ИнформацияОбОшибке(); ОтменитьТранзакцию(); - ВызватьИсключение КраткоеПредставлениеОшибки(Инфо); + ВызватьИсключение; КонецПопытки; - + РаботаСФайламиВызовСервераПереопределяемый.ПриСозданииФайла(Док); Возврат Док; + КонецФункции // Получает данные файла и делает заем (checkout) - для экономии вызовов @@ -1483,6 +1524,7 @@ // // Возвращаемое значение: // Булево - успешно ли выполнена операция +// Функция ПолучитьДанныеФайлаИЗанятьФайл(ФайлСсылка, ДанныеФайла, СтрокаОшибки, УникальныйИдентификатор = Неопределено) Экспорт ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка); @@ -1501,12 +1543,14 @@ КонецЕсли; Возврат Истина; -КонецФункции // ПолучитьДанныеФайлаИЗанятьФайл() + +КонецФункции // Получает ДанныеФайла для файлов и помещает в МассивДанныхФайла // МассивФайлов - массив ссылок на файлы // МассивДанныхФайла - массив структур с данными файлов +// Процедура ПолучитьДанныеДляМассиваФайлов(Знач МассивФайлов, МассивДанныхФайла) Экспорт Для Каждого Файл Из МассивФайлов Цикл @@ -1514,7 +1558,7 @@ МассивДанныхФайла.Добавить(ДанныеФайла); КонецЦикла; -КонецПроцедуры +КонецПроцедуры // Получает данные файла для открытия и делает заем (checkout) - для экономии вызовов @@ -1528,26 +1572,30 @@ // // Возвращаемое значение: // Булево - успешно ли выполнена операция -Функция ПолучитьДанныеФайлаДляОткрытияИЗанятьФайл(ФайлСсылка, ДанныеФайла, СтрокаОшибки, - УникальныйИдентификатор = Неопределено, РабочийКаталогВладельца = Неопределено) Экспорт +// +Функция ПолучитьДанныеФайлаДляОткрытияИЗанятьФайл(ФайлСсылка, + ДанныеФайла, + СтрокаОшибки, + УникальныйИдентификатор = Неопределено, + РабочийКаталогВладельца = Неопределено) Экспорт ДанныеФайла = ПолучитьДанныеФайлаДляОткрытия(ФайлСсылка, Неопределено, УникальныйИдентификатор, РабочийКаталогВладельца); СтрокаОшибки = ""; Если НЕ РаботаСФайламиКлиентСервер.МожноЛиЗанятьФайл(ДанныеФайла, СтрокаОшибки) Тогда Возврат Ложь; - КонецЕсли; + КонецЕсли; Если ДанныеФайла.Редактирует.Пустая() Тогда СтрокаОшибки = ""; Если Не ЗанятьФайл(ДанныеФайла, СтрокаОшибки, УникальныйИдентификатор) Тогда Возврат Ложь; - КонецЕсли; + КонецЕсли; КонецЕсли; Возврат Истина; -КонецФункции // ПолучитьДанныеФайлаДляОткрытияИЗанятьФайл() +КонецФункции // делает ПоместитьВоВременноеХранилище (если файл хранится на диске) и возвращает нужную ссылку // Параметры @@ -1556,14 +1604,16 @@ // // Возвращаемое значение: // Строка - навигационная ссылка во временном хранилище +// Функция ПолучитьНавигационнуюСсылкуДляОткрытия(ВерсияСсылка, ИдентификаторФормы = Неопределено) Экспорт + Адрес = ""; ТипХраненияФайла = ВерсияСсылка.ТипХраненияФайла; Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда Если НЕ ВерсияСсылка.Том.Пустая() Тогда - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; Попытка ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); @@ -1586,7 +1636,8 @@ КонецЕсли; Возврат Адрес; -КонецФункции // ПолучитьНавигационнуюСсылкуДляОткрытия() + +КонецФункции // Делает ПолучитьДанныеФайла и вычисляет РабочийКаталогВладельца // Параметры @@ -1596,8 +1647,10 @@ // // Возвращаемое значение: // Структура - структура с данными файла -Функция ПолучитьДанныеФайлаИРабочийКаталог(ФайлСсылка, ВерсияСсылка = Неопределено, - РабочийКаталогВладельца = Неопределено) Экспорт +// +Функция ПолучитьДанныеФайлаИРабочийКаталог(ФайлСсылка, + ВерсияСсылка = Неопределено, + РабочийКаталогВладельца = Неопределено) Экспорт ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка, ВерсияСсылка); @@ -1623,8 +1676,7 @@ КонецЕсли; Возврат ДанныеФайла; -КонецФункции // ПолучитьДанныеФайлаИРабочийКаталог() - +КонецФункции // Делает ПолучитьДанныеФайла и вычисляет количество версий файла // Параметры @@ -1632,13 +1684,16 @@ // // Возвращаемое значение: // Структура - структура с данными файла +// Функция ПолучитьДанныеФайлаИКоличествоВерсий(ФайлСсылка) Экспорт ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка); КоличествоВерсий = ПолучитьКоличествоВерсий(ФайлСсылка); ДанныеФайла.Вставить("КоличествоВерсий", КоличествоВерсий); + Возврат ДанныеФайла; -КонецФункции // ПолучитьДанныеФайлаИРабочийКаталог() + +КонецФункции // Формирует текст ошибки для помещения в журнал регистрации // Параметры @@ -1647,14 +1702,19 @@ // // Возвращаемое значение: // Строка - описание ошибки +// Функция СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора(ИнформацияОбОшибкеФункции, ФайлСсылка) Экспорт + СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибкеФункции); СообщениеОбОшибке = СообщениеОбОшибке + Символы.ПС + Нстр("ru = 'Ссылка на файл: '"); + Если ФайлСсылка <> Неопределено Тогда СообщениеОбОшибке = СообщениеОбОшибке + ПолучитьНавигационнуюСсылку(ФайлСсылка); КонецЕсли; + Возврат СообщениеОбОшибке; -КонецФункции // ПолучитьДанныеФайлаИРабочийКаталог() + +КонецФункции // Делает ПолучитьДанныеФайла + ПоместитьВоВременноеХранилище (если файл хранится на диске) // Функция возвращает структуру, содержащую различные сведения о Файле и версии @@ -1666,18 +1726,18 @@ // // Возвращаемое значение: // Структура - структура с данными файла -Функция ПолучитьДанныеФайлаДляОткрытия( - ФайлСсылка, - ВерсияСсылка = Неопределено, - ИдентификаторФормы = Неопределено, - РабочийКаталогВладельца = Неопределено, - ПредыдущийАдресФайла = Неопределено) Экспорт +// +Функция ПолучитьДанныеФайлаДляОткрытия(ФайлСсылка, + ВерсияСсылка = Неопределено, + ИдентификаторФормы = Неопределено, + РабочийКаталогВладельца = Неопределено, + ПредыдущийАдресФайла = Неопределено) Экспорт Если ПредыдущийАдресФайла <> Неопределено Тогда Если НЕ ПустаяСтрока(ПредыдущийАдресФайла) И ЭтоАдресВременногоХранилища(ПредыдущийАдресФайла) Тогда УдалитьИзВременногоХранилища(ПредыдущийАдресФайла); - КонецЕсли; - КонецЕсли; + КонецЕсли; + КонецЕсли; ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка, ВерсияСсылка); @@ -1687,7 +1747,7 @@ ДанныеФайла.Вставить("РабочийКаталогВладельца", РабочийКаталогВладельца); Если ДанныеФайла.РабочийКаталогВладельца <> "" Тогда - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); ИмяФайлаСПутемВРабочемКаталоге = РабочийКаталогВладельца + ИмяФайла; ДанныеФайла.Вставить("ИмяФайлаСПутемВРабочемКаталоге", ИмяФайлаСПутемВРабочемКаталоге); КонецЕсли; @@ -1700,18 +1760,19 @@ Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, - | ВерсииФайлов.Том КАК Том - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.Ссылка = &Версия"; - + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.ПутьКФайлу КАК ПутьКФайлу, + | ВерсииФайлов.Том КАК Том + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.Ссылка = &Версия"; + Запрос.Параметры.Вставить("Версия", ДанныеФайла.Версия); ДанныеФайлаТом = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ДанныеФайлаПутьКФайлу = ""; + ДанныеФайлаПутьКФайлу = ""; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда @@ -1720,7 +1781,7 @@ КонецЕсли; Если НЕ ДанныеФайлаТом.Пустая() Тогда - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ДанныеФайлаТом) + ДанныеФайлаПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ДанныеФайлаТом) + ДанныеФайлаПутьКФайлу; Попытка ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); // работаем только с текущей версией - для не-текущей ссылку получаем в ПолучитьНавигационнуюСсылкуДляОткрытия @@ -1743,21 +1804,21 @@ Возврат ДанныеФайла; -КонецФункции // ПолучитьДанныеФайлаДляОткрытия() - +КонецФункции // Освобождение Файла с получением данных // Параметры // ФайлСсылка - СправочникСсылка.Файлы - файл // ДанныеФайла - структура с данными файла // УникальныйИдентификатор - уникальный идентификатор формы +// Процедура ПолучитьДанныеФайлаИОсвободитьФайл(ФайлСсылка, ДанныеФайла, УникальныйИдентификатор = Неопределено) Экспорт - ДанныеФайла = ПолучитьДанныеФайла( - ФайлСсылка); - - ОсвободитьФайл(ДанныеФайла, УникальныйИдентификатор); -КонецПроцедуры + ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка); + + ОсвободитьФайл(ДанныеФайла, УникальныйИдентификатор); + +КонецПроцедуры // Процедура предназначена для опубликования файла без его освобождения // Параметры @@ -1778,36 +1839,35 @@ // ТекстНеИзвлеченНаКлиенте - Булево - текст не извлечен на клиенте - т.е. его надо извлекать на сервере // ВРабочемКаталогеВладельца - Булево - файл находится в рабочем каталоге владельца // УникальныйИдентификатор - уникальный идентификатор формы -Процедура ПолучитьДанныеФайлаИОпубликоватьФайл( - Файл, - ДанныеФайла, - СоздаватьВерсию, - АдресВременногоХранилищаФайла, - Комментарий, - ВремяИзменения, - ВремяИзмененияУниверсальное, - Размер, - ИмяБезРасширения, - Расширение, - ОтносительныйПутьКФайлу, - ПолныйПутьКФайлу, - АдресВременногоХранилищаТекста, - ЭтоВебКлиент, - ТекстНеИзвлеченНаКлиенте, - ВРабочемКаталогеВладельца, - УникальныйИдентификатор = Неопределено) Экспорт - - ДанныеФайла = ПолучитьДанныеФайла( - Файл); - +// +Процедура ПолучитьДанныеФайлаИОпубликоватьФайл(Файл, + ДанныеФайла, + СоздаватьВерсию, + АдресВременногоХранилищаФайла, + Комментарий, + ВремяИзменения, + ВремяИзмененияУниверсальное, + Размер, + ИмяБезРасширения, + Расширение, + ОтносительныйПутьКФайлу, + ПолныйПутьКФайлу, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент, + ТекстНеИзвлеченНаКлиенте, + ВРабочемКаталогеВладельца, + УникальныйИдентификатор = Неопределено) Экспорт + + ДанныеФайла = ПолучитьДанныеФайла(Файл); + Если Не ДанныеФайла.РедактируетТекущийПользователь Тогда ВызватьИсключение НСтр("ru = 'Файл не занят текущим пользователем'"); - КонецЕсли; - + КонецЕсли; + НеМенятьЗаписьВРабочемКаталоге = Ложь; ОпубликоватьФайл( - Файл, + Файл, СоздаватьВерсию, АдресВременногоХранилищаФайла, Комментарий, @@ -1824,7 +1884,8 @@ ВРабочемКаталогеВладельца, НеМенятьЗаписьВРабочемКаталоге, УникальныйИдентификатор); -КонецПроцедуры + +КонецПроцедуры // Получает синтетический рабочий каталог папки на диске (он может прийти от родительской папки) // Параметры @@ -1832,6 +1893,7 @@ // // Возвращаемое значение: // Строка - рабочий каталог +// Функция ПолучитьРабочийКаталог(СсылкаПапки) Экспорт Если ТипЗнч(СсылкаПапки) <> Тип("СправочникСсылка.ПапкиФайлов") Тогда @@ -1867,66 +1929,76 @@ // Параметры // СсылкаПапки - СправочникСсылка.ПапкиФайлов - владелец файла // РабочийКаталогВладельца - Строка - рабочий каталог владельца +// Процедура СохранитьРабочийКаталог(СсылкаПапки, РабочийКаталогВладельца) Экспорт + УстановитьПривилегированныйРежим(Истина); НаборЗаписей = РегистрыСведений.РабочиеКаталогиФайлов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Папка.Установить(СсылкаПапки); НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); - + НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Папка = СсылкаПапки; НоваяЗапись.Пользователь = Пользователи.ТекущийПользователь(); НоваяЗапись.Путь = РабочийКаталогВладельца; - + НаборЗаписей.Записать(); + КонецПроцедуры // Сохраняет в регистре сведений рабочий каталог папки и заменяет пути в регистре сведений ФайлыВРабочемКаталоге // Параметры // СсылкаПапки - СправочникСсылка.ПапкиФайлов - владелец файла // РабочийКаталогВладельца - Строка - рабочий каталог владельца -// ИмяКаталогаПрежнееЗначение - Строка - прежнее значение рабочего каталога -Процедура СохранитьРабочийКаталогИЗаменитьПутиВРегистре(СсылкаПапки, РабочийКаталогВладельца, - ИмяКаталогаПрежнееЗначение) Экспорт - - СохранитьРабочийКаталог(СсылкаПапки, РабочийКаталогВладельца); +// ИмяКаталогаПрежнееЗначение - Строка - прежнее значение рабочего каталога +// +Процедура СохранитьРабочийКаталогИЗаменитьПутиВРегистре(СсылкаПапки, + РабочийКаталогВладельца, + ИмяКаталогаПрежнееЗначение) Экспорт - // ниже заменяем пути в регистре сведений ФайлыВРабочемКаталоге + СохранитьРабочийКаталог(СсылкаПапки, РабочийКаталогВладельца); + + // ниже заменяем пути в регистре сведений ФайлыВРабочемКаталоге УстановитьПривилегированныйРежим(Истина); СписокДляЗамены = Новый Массив; ТекущийПользователь = Пользователи.ТекущийПользователь(); - + // для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует ЗапросВРегистр = Новый Запрос; ЗапросВРегистр.УстановитьПараметр("Пользователь", ТекущийПользователь); ЗапросВРегистр.УстановитьПараметр("Путь", ИмяКаталогаПрежнееЗначение + "%"); - ЗапросВРегистр.Текст = "ВЫБРАТЬ - | ФайлыВРабочемКаталоге.Версия КАК Версия, - | ФайлыВРабочемКаталоге.Путь КАК Путь, - | ФайлыВРабочемКаталоге.Размер КАК Размер, - | ФайлыВРабочемКаталоге.ДатаПомещенияВРабочийКаталог КАК ДатаПомещенияВРабочийКаталог, - | ФайлыВРабочемКаталоге.НаЧтение КАК НаЧтение - |ИЗ - | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге - |ГДЕ - | ФайлыВРабочемКаталоге.Пользователь = &Пользователь - | И ФайлыВРабочемКаталоге.ВРабочемКаталогеВладельца = ИСТИНА - | И ФайлыВРабочемКаталоге.Путь ПОДОБНО &Путь"; + ЗапросВРегистр.Текст = + "ВЫБРАТЬ + | ФайлыВРабочемКаталоге.Версия КАК Версия, + | ФайлыВРабочемКаталоге.Путь КАК Путь, + | ФайлыВРабочемКаталоге.Размер КАК Размер, + | ФайлыВРабочемКаталоге.ДатаПомещенияВРабочийКаталог КАК ДатаПомещенияВРабочийКаталог, + | ФайлыВРабочемКаталоге.НаЧтение КАК НаЧтение + |ИЗ + | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге + |ГДЕ + | ФайлыВРабочемКаталоге.Пользователь = &Пользователь + | И ФайлыВРабочемКаталоге.ВРабочемКаталогеВладельца = ИСТИНА + | И ФайлыВРабочемКаталоге.Путь ПОДОБНО &Путь"; РезультатЗапроса = ЗапросВРегистр.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл - + НовыйПуть = Выборка.Путь; НовыйПуть = СтрЗаменить(НовыйПуть, ИмяКаталогаПрежнееЗначение, РабочийКаталогВладельца); - СтруктураЗаписи = Новый Структура("Версия, Путь, Размер, ДатаПомещенияВРабочийКаталог, НаЧтение", - Выборка.Версия, НовыйПуть, Выборка.Размер, - Выборка.ДатаПомещенияВРабочийКаталог, Выборка.НаЧтение); + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Версия", Выборка.Версия); + СтруктураЗаписи.Вставить("Путь", НовыйПуть); + СтруктураЗаписи.Вставить("Размер", Выборка.Размер); + СтруктураЗаписи.Вставить("ДатаПомещенияВРабочийКаталог", Выборка.ДатаПомещенияВРабочийКаталог); + СтруктураЗаписи.Вставить("НаЧтение", Выборка.НаЧтение); + СписокДляЗамены.Добавить(СтруктураЗаписи); КонецЦикла; @@ -1934,12 +2006,17 @@ Для Каждого СтруктураЗаписи из СписокДляЗамены Цикл ВРабочемКаталогеВладельца = Истина; - ЗаписатьСтруктуруЗаписиВРегистр(СтруктураЗаписи.Версия, СтруктураЗаписи.Путь, СтруктураЗаписи.Размер, - СтруктураЗаписи.ДатаПомещенияВРабочийКаталог, СтруктураЗаписи.НаЧтение, ВРабочемКаталогеВладельца); + ЗаписатьСтруктуруЗаписиВРегистр( + СтруктураЗаписи.Версия, + СтруктураЗаписи.Путь, + СтруктураЗаписи.Размер, + СтруктураЗаписи.ДатаПомещенияВРабочийКаталог, + СтруктураЗаписи.НаЧтение, + ВРабочемКаталогеВладельца); КонецЦикла; -КонецПроцедуры +КонецПроцедуры // После смены пути запишем заново - с теми же значениями остальных полей // Параметры @@ -1949,7 +2026,13 @@ // ДатаПомещенияВРабочийКаталог - Дата - дата помещения файла в рабочий каталог // НаЧтение - Булево - файл помещен на чтение // ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге) -Процедура ЗаписатьСтруктуруЗаписиВРегистр(Версия, Путь, Размер, ДатаПомещенияВРабочийКаталог, НаЧтение, ВРабочемКаталогеВладельца) Экспорт +// +Процедура ЗаписатьСтруктуруЗаписиВРегистр(Версия, + Путь, + Размер, + ДатаПомещенияВРабочийКаталог, + НаЧтение, + ВРабочемКаталогеВладельца) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -1970,11 +2053,13 @@ НоваяЗапись.ВРабочемКаталогеВладельца = ВРабочемКаталогеВладельца; НаборЗаписей.Записать(); + КонецПроцедуры // Очищает в регистре сведений рабочий каталог папки // Параметры // СсылкаПапки - СправочникСсылка.ПапкиФайлов - владелец файла +// Процедура ОчиститьРабочийКаталог(СсылкаПапки) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -1989,13 +2074,13 @@ // для дочерних папок очищаем рабочие каталоги Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ПапкиФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПапкиФайлов КАК ПапкиФайлов - |ГДЕ - | ПапкиФайлов.Родитель = &Ссылка"; + Запрос.Текст = + "ВЫБРАТЬ + | ПапкиФайлов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПапкиФайлов КАК ПапкиФайлов + |ГДЕ + | ПапкиФайлов.Родитель = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", СсылкаПапки); @@ -2017,6 +2102,7 @@ // ВРегистреНаЧтение - сюда помещается значение ресурса НаЧтение // ВРегистреКодФайла - сюда помещается код файла // ВРегистреПапка - сюда помещается папка файла +// Функция НайтиВРегистреПоПути(Имяфайла, Версия, ДатаПомещения, Владелец, НомерВерсии, ВРегистреНаЧтение, ВРегистреКодФайла, ВРегистреПапка) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -2028,15 +2114,16 @@ ЗапросВРегистр = Новый Запрос; ЗапросВРегистр.УстановитьПараметр("Имяфайла", Имяфайла); ЗапросВРегистр.УстановитьПараметр("Пользователь", Пользователи.ТекущийПользователь()); - ЗапросВРегистр.Текст = "ВЫБРАТЬ - | ФайлыВРабочемКаталоге.Версия КАК Версия, - | ФайлыВРабочемКаталоге.ДатаПомещенияВРабочийКаталог КАК ДатаПомещенияВРабочийКаталог, - | ФайлыВРабочемКаталоге.НаЧтение КАК НаЧтение - |ИЗ - | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге - |ГДЕ - | ФайлыВРабочемКаталоге.Путь = &Имяфайла - | И ФайлыВРабочемКаталоге.Пользователь = &Пользователь"; + ЗапросВРегистр.Текст = + "ВЫБРАТЬ + | ФайлыВРабочемКаталоге.Версия КАК Версия, + | ФайлыВРабочемКаталоге.ДатаПомещенияВРабочийКаталог КАК ДатаПомещенияВРабочийКаталог, + | ФайлыВРабочемКаталоге.НаЧтение КАК НаЧтение + |ИЗ + | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге + |ГДЕ + | ФайлыВРабочемКаталоге.Путь = &Имяфайла + | И ФайлыВРабочемКаталоге.Пользователь = &Пользователь"; РезультатЗапроса = ЗапросВРегистр.Выполнить(); @@ -2056,13 +2143,17 @@ КонецЕсли; Возврат Ложь; + КонецФункции // Возвращает с сервера на клиент идентификатор текущего пользователя // Возвращаемое значение: // УникальныйИдентификатор - Уникальный идентификатор текущего пользователя +// Функция ПараметрыСеансаИдентификаторТекущегоПользователя() Экспорт + Возврат Пользователи.ТекущийПользователь().УникальныйИдентификатор(); + КонецФункции // Находит в регистре сведений ФайлыВРабочемКаталоге информацию о ВерсииФайла (путь к файлу версии в рабочем каталоге, и статус - на чтение или на редактирование) @@ -2071,7 +2162,11 @@ // ИмяКаталога - путь рабочего каталога // ВРабочемКаталогеНаЧтение - Булево - файл помещен на чтение // ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге) -Функция ПолучитьИмяФайлаСПутемИзРегистра(Версия, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца) Экспорт +// +Функция ПолучитьИмяФайлаСПутемИзРегистра(Версия, + ИмяКаталога, + ВРабочемКаталогеНаЧтение, + ВРабочемКаталогеВладельца) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -2094,6 +2189,7 @@ КонецЕсли; Возврат ИмяФайлаСПутем; + КонецФункции // Находит в регистре сведений ФайлыВРабочемКаталоге информацию о ВерсииФайла (путь к файлу версии в рабочем каталоге) @@ -2102,6 +2198,7 @@ // // Возвращаемое значение: // Строка - имя с путем в рабочем каталоге +// Функция ПолучитьИмяФайлаИзРегистра(Ссылка) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -2120,6 +2217,7 @@ ИмяФайлаСПутем = СтруктураРесурсов.Путь; Возврат ИмяФайлаСПутем; + КонецФункции // Записать в регистр сведений ФайлыВРабочемКаталоге информацию о пути файла @@ -2128,7 +2226,11 @@ // ИмяФайлаСПутем - имя с путем в рабочем каталоге // НаЧтение - Булево - файл помещен на чтение // ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге) -Процедура ЗаписатьИмяФайлаСПутемВРегистр(ТекущаяВерсия, ИмяФайлаСПутем, НаЧтение, ВРабочемКаталогеВладельца) Экспорт +// +Процедура ЗаписатьИмяФайлаСПутемВРегистр(ТекущаяВерсия, + ИмяФайлаСПутем, + НаЧтение, + ВРабочемКаталогеВладельца) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -2149,11 +2251,13 @@ НоваяЗапись.ВРабочемКаталогеВладельца = ВРабочемКаталогеВладельца; НаборЗаписей.Записать(); + КонецПроцедуры // Удалить из регистра сведений ФайлыВРабочемКаталоге запись о данной версии файла // Параметры // Версия - СправочникСсылка.ВерсииФайлов - версия +// Процедура УдалитьИзРегистра(Версия) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -2164,10 +2268,14 @@ НаборЗаписей.Отбор.Пользователь.Установить(Пользователи.ТекущийПользователь()); НаборЗаписей.Записать(); + КонецПроцедуры -// Удалить из регистра сведений ФайлыВРабочемКаталоге все записи, кроме записей о файлах занятых текущим пользователем +// Удалить из регистра сведений ФайлыВРабочемКаталоге все записи, +// кроме записей о файлах занятых текущим пользователем. +// Процедура ОчиститьВсеСвоиКромеЗанятых() Экспорт + // Отбираем все в регистре сведений. Перебираем - находим те, что не заняты текущим пользователем - // и все удаляем - считаем, что на диске они уже удалены @@ -2175,18 +2283,19 @@ СписокУдалить = Новый Массив; ТекущийПользователь = Пользователи.ТекущийПользователь(); - + // для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует ЗапросВРегистр = Новый Запрос; ЗапросВРегистр.УстановитьПараметр("Пользователь", ТекущийПользователь); - ЗапросВРегистр.Текст = "ВЫБРАТЬ - | ФайлыВРабочемКаталоге.Версия КАК Версия, - | ФайлыВРабочемКаталоге.Версия.Владелец.Редактирует КАК Редактирует - |ИЗ - | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге - |ГДЕ - | ФайлыВРабочемКаталоге.Пользователь = &Пользователь - |И ФайлыВРабочемКаталоге.ВРабочемКаталогеВладельца = Ложь"; + ЗапросВРегистр.Текст = + "ВЫБРАТЬ + | ФайлыВРабочемКаталоге.Версия КАК Версия, + | ФайлыВРабочемКаталоге.Версия.Владелец.Редактирует КАК Редактирует + |ИЗ + | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге + |ГДЕ + | ФайлыВРабочемКаталоге.Пользователь = &Пользователь + | И ФайлыВРабочемКаталоге.ВРабочемКаталогеВладельца = ЛОЖЬ"; РезультатЗапроса = ЗапросВРегистр.Выполнить(); @@ -2212,6 +2321,7 @@ НаборЗаписей.Записать(); КонецЦикла; + КонецПроцедуры // Удалить из регистра сведений ФайлыВРабочемКаталоге запись о старой версии и внести запись о новой @@ -2221,10 +2331,17 @@ // ПолноеИмяФайла - имя с путем в рабочем каталоге // ИмяКаталога - путь рабочего каталога // ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге) -Процедура УдалитьВерсиюИЗанестиИнформациюФайлаВРегистр(СтараяВерсия, НоваяВерсия, ПолноеИмяФайла, ИмяКаталога, ВРабочемКаталогеВладельца) +// +Процедура УдалитьВерсиюИЗанестиИнформациюФайлаВРегистр(СтараяВерсия, + НоваяВерсия, + ПолноеИмяФайла, + ИмяКаталога, + ВРабочемКаталогеВладельца) + УдалитьИзРегистра(СтараяВерсия); НаЧтение = Истина; ЗанестиИнформациюФайлаВРегистр(НоваяВерсия, ПолноеИмяФайла, ИмяКаталога, НаЧтение, 0, ВРабочемКаталогеВладельца); + КонецПроцедуры // Записать в регистр сведений ФайлыВРабочемКаталоге информацию о пути файла @@ -2234,7 +2351,13 @@ // НаЧтение - Булево - файл помещен на чтение // РазмерФайла - размер файла в байтах // ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге) -Процедура ЗанестиИнформациюФайлаВРегистр(Версия, ПолныйПуть, ИмяКаталога, НаЧтение, РазмерФайла, ВРабочемКаталогеВладельца) Экспорт +// +Процедура ЗанестиИнформациюФайлаВРегистр(Версия, + ПолныйПуть, + ИмяКаталога, + НаЧтение, + РазмерФайла, + ВРабочемКаталогеВладельца) Экспорт ИмяФайлаСПутем = ПолныйПуть; Если ВРабочемКаталогеВладельца = Ложь Тогда @@ -2257,7 +2380,7 @@ Если РазмерФайла <> 0 Тогда НоваяЗапись.Размер = РазмерФайла; - Иначе + Иначе НоваяЗапись.Размер = Версия.Размер; КонецЕсли; @@ -2267,11 +2390,14 @@ НоваяЗапись.ВРабочемКаталогеВладельца = ВРабочемКаталогеВладельца; НаборЗаписей.Записать(); + КонецПроцедуры // Возвращает массив файлов в регистре сведений ФайлыВРабочемКаталоге +// // Возвращаемое значение: // Массив - массив структур описывающих файлы +// Функция СписокФайловВРегистре() Экспорт УстановитьПривилегированныйРежим(Истина); @@ -2282,18 +2408,17 @@ // Для каждой нашей записи находим запись в регистре сведений - оттуда берем поле Версия и Редактирует ЗапросВРегистр = Новый Запрос; ЗапросВРегистр.УстановитьПараметр("Пользователь", ТекущийПользователь); - - ЗапросВРегистр.Текст = + ЗапросВРегистр.Текст = "ВЫБРАТЬ | ФайлыВРабочемКаталоге.Версия КАК Версия, | ФайлыВРабочемКаталоге.НаЧтение КАК НаЧтение, | ФайлыВРабочемКаталоге.Размер КАК Размер, - | ФайлыВРабочемКаталоге.Путь КАК Путь + | ФайлыВРабочемКаталоге.Путь КАК Путь |ИЗ | РегистрСведений.ФайлыВРабочемКаталоге КАК ФайлыВРабочемКаталоге |ГДЕ | ФайлыВРабочемКаталоге.Пользователь = &Пользователь - |И ВРабочемКаталогеВладельца = Ложь"; + | И ФайлыВРабочемКаталоге.ВРабочемКаталогеВладельца = ЛОЖЬ"; РезультатЗапроса = ЗапросВРегистр.Выполнить(); @@ -2318,7 +2443,7 @@ КонецЕсли; Возврат СписокФайлов; -КонецФункции +КонецФункции // Создать папку файлов // Параметры @@ -2328,7 +2453,9 @@ // // Возвращаемое значение: // СправочникСсылка.ПапкиФайлов +// Функция СправочникиПапкиСоздатьЭлемент(Имя, Родитель, Пользователь = Неопределено) Экспорт + Папка = Справочники.ПапкиФайлов.СоздатьЭлемент(); Папка.Наименование = Имя; Папка.Родитель = Родитель; @@ -2338,10 +2465,11 @@ Папка.Ответственный = Пользователи.ТекущийПользователь(); Иначе Папка.Ответственный = Пользователь; - КонецЕсли; + КонецЕсли; Папка.Записать(); Возврат Папка.Ссылка; + КонецФункции // Формирует отчет для файлов с ошибками @@ -2350,7 +2478,9 @@ // // Возвращаемое значение: // ТабличныйДокумент с отчетом +// Функция ИмпортФайловСформироватьОтчет(МассивИменФайловСОшибками) Экспорт + ТабДок = Новый ТабличныйДокумент; ТабМакет = Справочники.Файлы.ПолучитьМакет("МакетОтчета"); @@ -2364,17 +2494,20 @@ ОбластьСтрока.Параметры.Название = Выборка.ИмяФайла; ОбластьСтрока.Параметры.Ошибка = Выборка.Ошибка; ТабДок.Вывести(ОбластьСтрока); - КонецЦикла; + КонецЦикла; Отчет = Новый ТабличныйДокумент; Отчет.Вывести(ТабДок); Возврат Отчет; + КонецФункции // Сортирует массив структур по полю Дата - на сервере, т.к. на тонком клиенте нет ТаблицаЗначений +// // Параметры // МассивСтруктур - массив структур описаний файлов +// Процедура СортироватьМассивСтруктур(МассивСтруктур) Экспорт ТаблицаФайлов = Новый ТаблицаЗначений; @@ -2401,14 +2534,16 @@ Запись.Вставить("Версия", Строка.Версия); Запись.Вставить("ДатаПомещенияВРабочийКаталог", Строка.ДатаПомещенияВРабочийКаталог); МассивСтруктурВозврат.Добавить(Запись); - КонецЦикла; + КонецЦикла; - МассивСтруктур = МассивСтруктурВозврат; -КонецПроцедуры // СортироватьМассивСтруктур() + МассивСтруктур = МассивСтруктурВозврат; + +КонецПроцедуры // Возвращает настройку - Спрашивать режим редактирования при открытии файла // Возвращаемое значение: // Булево - Спрашивать режим редактирования при открытии файла +// Функция СпрашиватьРежимРедактированияПриОткрытииФайла() СпрашиватьРежимРедактированияПриОткрытииФайла = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла"); @@ -2418,12 +2553,13 @@ КонецЕсли; Возврат СпрашиватьРежимРедактированияПриОткрытииФайла; -КонецФункции +КонецФункции // Считаем ДействиеПоДвойномуЩелчкуМыши - если первый раз - поставим правильное значение // // Возвращаемое значение: // Строка - Действие по двойному щелчку мыши +// Функция ДействиеПоДвойномуЩелчкуМыши() КакОткрывать = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов", "ДействиеПоДвойномуЩелчкуМыши"); @@ -2445,7 +2581,9 @@ // // Возвращаемое значение: // Строка - Способ сравнения версий файлов +// Функция СпособСравненияВерсийФайлов() + СпособСравнения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиСравненияФайлов", "СпособСравненияВерсийФайлов"); Если СпособСравнения = Перечисления.СпособыСравненияВерсийФайлов.MicrosoftOfficeWord Тогда @@ -2455,6 +2593,7 @@ Иначе Возврат Неопределено; КонецЕсли; + КонецФункции // Функция возвращает количество Файлов, занятых текущим пользователем @@ -2464,6 +2603,7 @@ // // Возвращаемое значение: // Число - количество занятых файлов +// Функция КоличествоФайловЗанятыхТекущимПользователем(ВладелецФайла) Экспорт КоличествоЗанятыхФайлов = ПолучитьКоличествоЗанятыхФайлов(ВладелецФайла, Пользователи.ТекущийПользователь()); @@ -2474,6 +2614,7 @@ // Получает значение настройки ПоказыватьКолонкуРазмер // Возвращаемое значение: // Булево - Показывать колонку размер +// Функция ПолучитьПоказыватьКолонкуРазмер() Экспорт ПоказыватьКолонкуРазмер = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьКолонкуРазмер"); Если ПоказыватьКолонкуРазмер = Неопределено Тогда @@ -2482,7 +2623,8 @@ КонецЕсли; Возврат ПоказыватьКолонкуРазмер; -КонецФункции + +КонецФункции // Функция меняет ВладелецФайла объектам типа Справочник.Файл, вернет Истина при успехе // Параметры @@ -2491,6 +2633,7 @@ // // Возвращаемое значение: // Булево - успешно ли выполнена операция +// Функция УстановитьВладельцаФайла(МассивСсылокНаФайлы, НовыйВладелецФайла) Экспорт Если МассивСсылокНаФайлы.Количество() = 0 Или Не ЗначениеЗаполнено(НовыйВладелецФайла) Тогда Возврат Ложь; @@ -2518,6 +2661,7 @@ КонецПопытки; Возврат Истина; + КонецФункции // Вернет Истина если есть зацикливание (если одну из папок переносим в ее же дочернюю папку) @@ -2527,6 +2671,7 @@ // // Возвращаемое значение: // Булево - есть зацикливание +// Функция ЕстьЗацикливание(Знач МассивСсылокНаФайлы, НовыйРодитель) Если МассивСсылокНаФайлы.Найти(НовыйРодитель) <> Неопределено Тогда @@ -2543,6 +2688,7 @@ КонецЕсли; Возврат Ложь; + КонецФункции // Функция меняет свойство Родитель объектам типа Справочник.ПапкиФайла, вернет Истина при успехе, @@ -2555,6 +2701,7 @@ // // Возвращаемое значение: // Булево - успешно ли выполнена операция +// Функция СменитьРодителяПапок(МассивСсылокНаФайлы, НовыйРодитель, НайденоЗацикливание) Экспорт НайденоЗацикливание = Ложь; @@ -2589,6 +2736,7 @@ КонецПопытки; Возврат Истина; + КонецФункции // Вернет Истина, если в указанном элементе справочника ПапкиФайлов есть дочерний элемент с таким именем @@ -2599,6 +2747,7 @@ // // Возвращаемое значение: // Булево - есть дочерний элемент с таким именем +// Функция ЕстьПапкаСТакимИменем(ИмяФайла, Родитель, ПерваяПапкаСТакимЖеИменем) Экспорт ПерваяПапкаСТакимЖеИменем = Справочники.ПапкиФайлов.ПустаяСсылка(); @@ -2606,13 +2755,14 @@ ЗапросВПапки = Новый Запрос; ЗапросВПапки.УстановитьПараметр("Наименование", Имяфайла); ЗапросВПапки.УстановитьПараметр("Родитель", Родитель); - ЗапросВПапки.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | ПапкиФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПапкиФайлов КАК ПапкиФайлов - |ГДЕ - | ПапкиФайлов.Наименование = &Наименование - | И ПапкиФайлов.Родитель = &Родитель"; + ЗапросВПапки.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | ПапкиФайлов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПапкиФайлов КАК ПапкиФайлов + |ГДЕ + | ПапкиФайлов.Наименование = &Наименование + | И ПапкиФайлов.Родитель = &Родитель"; РезультатЗапроса = ЗапросВПапки.Выполнить(); @@ -2622,8 +2772,8 @@ Возврат Истина; КонецЕсли; - Возврат Ложь; + КонецФункции // Вернет Истина, если в указанном элементе справочника Файлы есть файл с таким именем @@ -2634,26 +2784,29 @@ // // Возвращаемое значение: // Булево - есть дочерний элемент с таким именем +// Функция ЕстьФайлСТакимИменем(ИмяФайла, Родитель) Экспорт ЗапросВПапки = Новый Запрос; ЗапросВПапки.УстановитьПараметр("Наименование", Имяфайла); ЗапросВПапки.УстановитьПараметр("Родитель", Родитель); - ЗапросВПапки.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 - | Файлы.Ссылка КАК Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ПолноеНаименование = &Наименование - | И Файлы.ВладелецФайла = &Родитель"; + ЗапросВПапки.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | Файлы.Ссылка КАК Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы + |ГДЕ + | Файлы.ПолноеНаименование = &Наименование + | И Файлы.ВладелецФайла = &Родитель"; - РезультатЗапроса = ЗапросВПапки.Выполнить(); + РезультатЗапроса = ЗапросВПапки.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Возврат Истина; КонецЕсли; Возврат Ложь; + КонецФункции // Для справочника ВерсииФайлов переименует файл на диске, если ТипХраненияФайла = ВТомахНаДиске @@ -2661,8 +2814,11 @@ // Версия - СправочникСсылка.ВерсииФайлов - версия файла // СтароеНаименование - Строка - старое наименование // НовоеНаименование - Строка - новое наименование -Процедура ПереименоватьФайлВерсииНаДиске(Версия, СтароеНаименование, НовоеНаименование, - УникальныйИдентификатор = Неопределено) Экспорт +// +Процедура ПереименоватьФайлВерсииНаДиске(Версия, + СтароеНаименование, + НовоеНаименование, + УникальныйИдентификатор = Неопределено) Экспорт ффф = ""; @@ -2671,7 +2827,7 @@ ВерсияОбъект = Версия.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(Версия, , УникальныйИдентификатор); - СтарыйПолныйПуть = ФайловыеФункции.ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; + СтарыйПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(Версия.Том) + Версия.ПутьКФайлу; ФайлНаДиске = Новый Файл(СтарыйПолныйПуть); ПолныйПуть = ФайлНаДиске.Путь; @@ -2680,7 +2836,7 @@ НовоеИмяБезРасширения = СтрЗаменить(ИмяБезРасширения, СтароеНаименование, НовоеНаименование); НовыйПолныйПуть = ПолныйПуть + НовоеИмяБезРасширения + Расширение; - ПолныйПутьКТому = ФайловыеФункции.ПолныйПутьТома(Версия.Том); + ПолныйПутьКТому = ФайловыеФункцииСлужебный.ПолныйПутьТома(Версия.Том); НовыйЧастичныйПуть = Прав(НовыйПолныйПуть, СтрДлина(НовыйПолныйПуть) - СтрДлина(ПолныйПутьКТому)); ПереместитьФайл(СтарыйПолныйПуть, НовыйПолныйПуть); @@ -2693,7 +2849,7 @@ КонецЕсли; -КонецПроцедуры +КонецПроцедуры // Возвращает количество занятых файлов // Параметры @@ -2702,12 +2858,13 @@ // // Возвращаемое значение: // Число - число занятых файлов +// Функция ПолучитьКоличествоЗанятыхФайлов(ВладелецФайла = Неопределено, Редактирует = Неопределено) Экспорт Количество = 0; Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.Файлы) Тогда - Возврат 0; + Возврат 0; КонецЕсли; Запрос = Новый Запрос; @@ -2728,24 +2885,26 @@ Если ВладелецФайла <> Неопределено Тогда Запрос.Текст = Запрос.Текст + " И Файлы.ВладелецФайла = &ВладелецФайла "; Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); - КонецЕсли; + КонецЕсли; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Количество = Количество + 1; - КонецЦикла; + КонецЦикла; Возврат Количество; КонецФункции // Получает данные для переноса файла из одного списка приложенных файлов в другой -// Параметры +// +// Параметры: // ФайлМассив - массив ссылок на файлы или СправочникСсылка.Файлы // ВладелецФайла - ЛюбаяСсылка - владелец файла // // Возвращаемое значение: // ТаблицаЗначений - описания файлов +// Функция ПолучитьДанныеДляПереносаВПриложенныеФайлы(ФайлМассив, ВладелецФайла) Экспорт Если ТипЗнч(ФайлМассив) = Тип("Массив") Тогда @@ -2753,10 +2912,10 @@ Иначе МассивФайлов = Новый Массив; МассивФайлов.Добавить(ФайлМассив); - КонецЕсли; + КонецЕсли; Запрос = Новый Запрос; - Запрос.Текст = + Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Файлы.Ссылка КАК Ссылка, | Файлы.ПолноеНаименование КАК ПолноеНаименование @@ -2774,15 +2933,15 @@ Результат.Вставить(ФайлСсылка, "Пропустить"); ИначеЕсли ТаблРезультат.Найти(ФайлСсылка.ПолноеНаименование, "ПолноеНаименование") <> Неопределено Тогда Результат.Вставить(ФайлСсылка, "Обновить"); - Иначе + Иначе Результат.Вставить(ФайлСсылка, "Скопировать"); - КонецЕсли; + КонецЕсли; - КонецЦикла; + КонецЦикла; Возврат Результат; -КонецФункции +КонецФункции // копирует файлы при переносе из одного списка приложенных файлов в другой // Параметры @@ -2791,6 +2950,7 @@ // // Возвращаемое значение: // СправочникСсылка.Файлы - скопированный файл +// Функция СкопироватьФайлВПриложенных(ФайлМассив, ВладелецФайла) Экспорт Если ТипЗнч(ФайлМассив) = Тип("Массив") Тогда @@ -2816,7 +2976,7 @@ ХранилищеФайла = Неопределено; Если Источник.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(Источник.ТекущаяВерсия); - КонецЕсли; + КонецЕсли; Версия = СоздатьВерсию( ТекущаяДатаСеанса(), @@ -2846,6 +3006,7 @@ // // Возвращаемое значение: // СправочникСсылка.Файлы - скопированный файл +// Функция ОбновитьФайлВПриложенных(ФайлМассив, ВладелецФайла) Экспорт Если ТипЗнч(ФайлМассив) = Тип("Массив") Тогда @@ -2879,7 +3040,7 @@ ХранилищеФайла = Неопределено; Если Источник.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(Источник.ТекущаяВерсия); - КонецЕсли; + КонецЕсли; Версия = СоздатьВерсию( ТекущаяДатаСеанса(), @@ -2896,7 +3057,7 @@ ОбновитьВерсиюВФайле(Приемник, Версия, Источник.ТекущаяВерсия.ТекстХранилище); КонецЕсли; - КонецЦикла; + КонецЦикла; Возврат Приемник; @@ -2909,6 +3070,7 @@ // // Возвращаемое значение: // Булево - есть дублирующийся элемент +// Функция ЕстьДублирующийсяЭлемент(Элементы, ЭлементПоиска) Для Каждого Элемент Из Элементы Цикл @@ -2916,7 +3078,7 @@ Если Элемент.Оформление.Элементы.Количество() <> ЭлементПоиска.Оформление.Элементы.Количество() Тогда Продолжить; - КонецЕсли; + КонецЕсли; НайденОтличающийсяЭлемент = Ложь; @@ -2932,15 +3094,15 @@ Прервать; КонецЕсли; КонецЕсли; - КонецЦикла; + КонецЦикла; Если НайденОтличающийсяЭлемент Тогда Продолжить; - КонецЕсли; + КонецЕсли; Если Элемент.Отбор.Элементы.Количество() <> ЭлементПоиска.Отбор.Элементы.Количество() Тогда Продолжить; - КонецЕсли; + КонецЕсли; // обходим все элементы отбора - если есть хоть один отличающийся - делаем Продолжить; ЧислоЭлементов = Элемент.Отбор.Элементы.Количество(); @@ -2958,60 +3120,59 @@ КонецЕсли; КонецЕсли; - КонецЦикла; + КонецЦикла; Если НайденОтличающийсяЭлемент Тогда Продолжить; - КонецЕсли; + КонецЕсли; // обошли все элементы оформления и отбора - они все одинаковы - это дубль - Возврат Истина; + Возврат Истина; - КонецЕсли; - КонецЦикла; - - - Возврат Ложь; + КонецЕсли; + КонецЦикла; -КонецФункции + + Возврат Ложь; + +КонецФункции // Заполняет условное оформление списка файлов -// Параметры +// +// Параметры: // Список - динамический список +// Процедура ЗаполнитьУсловноеОформлениеСпискаФайлов(Список) Экспорт Элемент = Список.УсловноеОформление.Элементы.Добавить(); Элемент.Использование = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ФайлЗанятыйДругимПользователем); + Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.Использование = Истина; Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); Отбор.ПравоеЗначение = ПредопределенноеЗначение("Справочник.Пользователи.ПустаяСсылка"); + Если ЕстьДублирующийсяЭлемент(Список.УсловноеОформление.Элементы, Элемент) Тогда Список.УсловноеОформление.Элементы.Удалить(Элемент); - КонецЕсли; + КонецЕсли; Элемент = Список.УсловноеОформление.Элементы.Добавить(); Элемент.Использование = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ФайлЗанятыйТекущимПользователем); + Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.Использование = Истина; Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Редактирует"); Отбор.ПравоеЗначение = Пользователи.ТекущийПользователь(); + Если ЕстьДублирующийсяЭлемент(Список.УсловноеОформление.Элементы, Элемент) Тогда Список.УсловноеОформление.Элементы.Удалить(Элемент); - КонецЕсли; + КонецЕсли; -КонецПроцедуры - -// Сохраняет путь к рабочему каталогу пользователя в настройках и параметре сеанса -// Параметры -// ИмяКаталога - Строка - имя каталога -Процедура СохранитьПутьКРабочемуКаталогуПользователя(ИмяКаталога) Экспорт - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов", ИмяКаталога); -КонецПроцедуры +КонецПроцедуры // Возвращает объект, для которого проверяется право доступа - для Файл это ПапкиФайлов (реквизит ВладелецФайла) // Параметры @@ -3019,17 +3180,19 @@ // // Возвращаемое значение: // ЛюбаяСсылка - объект для которого вычисляются права доступа +// Функция ПолучитьОбъектДоступа(Объект) Экспорт Если ТипЗнч(Объект) <> Тип("СправочникСсылка.Файлы") Тогда Возврат Неопределено; - КонецЕсли; + КонецЕсли; Если ТипЗнч(Объект.ВладелецФайла) = Тип("СправочникСсылка.ПапкиФайлов") Тогда Возврат Объект.ВладелецФайла; - КонецЕсли; + КонецЕсли; Возврат Неопределено; -КонецФункции + +КонецФункции // Возвращает номер по нарастанию. Предыдущее значение берется из регистра сведений НомераОтсканированныхФайлов // Параметры @@ -3037,6 +3200,7 @@ // // Возвращаемое значение: // Число - новый номер для сканирования +// Функция ПолучитьНовыйНомерДляСканирования(Владелец) Экспорт // Подготовить структуру отбора по измерениям @@ -3058,34 +3222,33 @@ Номер = СтруктураРесурсов.Номер; Номер = Номер + 1; // увеличим на 1 - // запишем новый номер в регистр НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Владелец.Установить(Владелец); - + НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Владелец = Владелец; НоваяЗапись.Номер = Номер; - + НаборЗаписей.Записать(); ЗафиксироватьТранзакцию(); - - Возврат Номер; Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; + Возврат Номер; - Возврат 0; -КонецФункции +КонецФункции // Заносит номер в регистр сведений НомераОтсканированныхФайлов -// Параметры +// +// Параметры: // Владелец - ЛюбаяСсылка - владелец файла // НовыйНомер - Число - максимальный номер для сканирования +// Процедура ЗанестиМаксимальныйНомерДляСканирования(Владелец, НовыйНомер) Экспорт // Подготовить структуру отбора по измерениям @@ -3108,7 +3271,7 @@ Если НовыйНомер <= Номер Тогда // кто-то другой уже записал бОльший номер ОтменитьТранзакцию(); Возврат; - КонецЕсли; + КонецЕсли; Номер = НовыйНомер; @@ -3116,11 +3279,11 @@ НаборЗаписей = РегистрыСведений.НомераОтсканированныхФайлов.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.Владелец.Установить(Владелец); - + НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.Владелец = Владелец; НоваяЗапись.Номер = Номер; - + НаборЗаписей.Записать(); ЗафиксироватьТранзакцию(); @@ -3129,7 +3292,6 @@ ВызватьИсключение; КонецПопытки; - КонецПроцедуры // Очищает настройки форм ФормаНового @@ -3141,10 +3303,11 @@ ОбновитьПовторноИспользуемыеЗначения(); -КонецПроцедуры +КонецПроцедуры // Преобразует параметры сканера в виде чисел - в перечисления -// Параметры +// +// Параметры: // РазрешениеЧисло - Число - разрешение dpi // ЦветностьЧисло - Число - Цветность (0,1,2) // ПоворотЧисло - Число - Поворот @@ -3153,6 +3316,7 @@ // Цветность - Перечисление.ЦветностиИзображения - Цветность // Поворот - Перечисление.СпособыПоворотаИзображения - Поворот // РазмерБумаги - Перечисление.РазмерыБумаги - Размер бумаги +// Процедура ПреобразоватьПараметрыСканераВПеречисления(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, РазмерБумагиЧисло, Разрешение, Цветность, Поворот, РазмерБумаги) Экспорт @@ -3215,14 +3379,20 @@ КонецПроцедуры // Преобразует число в перечисление и сохраняет в настройках -// Параметры +// +// Параметры: // РазрешениеЧисло - Число - разрешение dpi // ЦветностьЧисло - Число - Цветность (0,1,2) // ПоворотЧисло - Число - Поворот // РазмерБумагиЧисло - Число - Размер бумаги // ИдентификаторКлиента - Строка - Идентификатор клиента -Процедура ПреобразоватьИСохранитьПараметрыСканера(РазрешениеЧисло, ЦветностьЧисло, ПоворотЧисло, - РазмерБумагиЧисло, ИдентификаторКлиента) Экспорт +// +Процедура ПреобразоватьИСохранитьПараметрыСканера(РазрешениеЧисло, + ЦветностьЧисло, + ПоворотЧисло, + РазмерБумагиЧисло, + ИдентификаторКлиента) Экспорт + Перем Разрешение; Перем Цветность; Перем Поворот; @@ -3232,12 +3402,14 @@ Разрешение, Цветность, Поворот, РазмерБумаги); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиСканирования/Разрешение", ИдентификаторКлиента, Разрешение); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиСканирования/Цветность", ИдентификаторКлиента, Цветность); -КонецПроцедуры + +КонецПроцедуры // Получает первые 100 версий файлов, у которых еще не извлечен текст // // Возвращаемое значение: // Массив - массив версий файлов +// Функция ПолучитьМассивВерсийДляИзвлеченияТекста() Экспорт МассивВерсий = Новый Массив; @@ -3245,14 +3417,14 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 100 - | ВерсииФайлов.Ссылка КАК Ссылка, - | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | (ВерсииФайлов.СтатусИзвлеченияТекста = &Статус - | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; + "ВЫБРАТЬ ПЕРВЫЕ 100 + | ВерсииФайлов.Ссылка КАК Ссылка, + | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | (ВерсииФайлов.СтатусИзвлеченияТекста = &Статус + | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка))"; Запрос.УстановитьПараметр("Статус", Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен); @@ -3275,6 +3447,7 @@ // // Возвращаемое значение: // Массив - массив файлов +// Функция ПолучитьВсеФайлыВПапке(Папка, Рекурсивно) Экспорт МассивФайлов = Новый Массив; @@ -3287,12 +3460,13 @@ ЗапросВПапки = Новый Запрос; ЗапросВПапки.УстановитьПараметр("Родитель", Папка); - ЗапросВПапки.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ПапкиФайлов.Ссылка КАК Ссылка - |ИЗ - | Справочник.ПапкиФайлов КАК ПапкиФайлов - |ГДЕ - | ПапкиФайлов.Родитель В ИЕРАРХИИ(&Родитель)"; + ЗапросВПапки.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ПапкиФайлов.Ссылка КАК Ссылка + |ИЗ + | Справочник.ПапкиФайлов КАК ПапкиФайлов + |ГДЕ + | ПапкиФайлов.Родитель В ИЕРАРХИИ(&Родитель)"; Результат = ЗапросВПапки.Выполнить(); Выборка = Результат.Выбрать(); @@ -3302,27 +3476,30 @@ Для Каждого Подпапка Из МассивПапок Цикл ПолучитьВсеФайлыВОднойПапке(Подпапка, МассивФайлов); - КонецЦикла; + КонецЦикла; - КонецЕсли; + КонецЕсли; Возврат МассивФайлов; -КонецФункции + +КонецФункции // Получает массив ссылок всех файлов в папке // Параметры // Папка - СправочникСсылка.ПапкиФайлов - папка файлов // МассивФайлов - Массив - массив файлов +// Процедура ПолучитьВсеФайлыВОднойПапке(Папка, МассивФайлов) Экспорт ЗапросВПапки = Новый Запрос; ЗапросВПапки.УстановитьПараметр("Родитель", Папка); - ЗапросВПапки.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Файлы.Ссылка КАК Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &Родитель"; + ЗапросВПапки.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Файлы.Ссылка КАК Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &Родитель"; Результат = ЗапросВПапки.Выполнить(); Выборка = Результат.Выбрать(); @@ -3340,17 +3517,19 @@ // // Возвращаемое значение: // Структура - структура с данными файла +// Функция ПолучитьДанныеФайлаИНавигационнуюСсылкуВерсии(ФайлСсылка, ВерсияСсылка, ИдентификаторФормы) Экспорт ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка, ВерсияСсылка); Если ВерсияСсылка = Неопределено Тогда ВерсияСсылка = ФайлСсылка.ТекущаяВерсия; - КонецЕсли; + КонецЕсли; НавигационнаяСсылкаВерсии = ПолучитьНавигационнуюСсылкуДляОткрытия(ВерсияСсылка, ИдентификаторФормы); - + СтруктураВозврата = Новый Структура("ДанныеФайла, НавигационнаяСсылкаВерсии", ДанныеФайла, НавигационнаяСсылкаВерсии); Возврат СтруктураВозврата; + КонецФункции // Получает данные файла для открытия и читает их Общих настроек ПапкаДляСохранитьКак @@ -3362,6 +3541,7 @@ // // Возвращаемое значение: // Структура - структура с данными файла +// Функция ПолучитьДанныеФайлаДляСохранения(ФайлСсылка, ВерсияСсылка = Неопределено, ИдентификаторФормы = Неопределено, РабочийКаталогВладельца = Неопределено) Экспорт @@ -3371,15 +3551,17 @@ ДанныеФайла.Вставить("ПапкаДляСохранитьКак", ПапкаДляСохранитьКак); Возврат ДанныеФайла; -КонецФункции // ПолучитьДанныеФайлаИЗанятьФайл() +КонецФункции // Возвращает ИспользоватьЭлектронныеЦифровыеПодписиИШифрование // Возвращаемое значение: // Булево - константа ИспользоватьЭлектронныеЦифровыеПодписи Функция ПолучитьИспользоватьЭлектронныеЦифровыеПодписиИШифрование() Экспорт + УстановитьПривилегированныйРежим(Истина); ИспользоватьЭлектронныеЦифровыеПодписиИШифрование = Константы.ИспользоватьЭлектронныеЦифровыеПодписи.Получить(); Возврат ИспользоватьЭлектронныеЦифровыеПодписиИШифрование; + КонецФункции // Получает ДанныеФайла и НавигационнуюСсылкуВерсии всех подчиненных файлов для Вх Исх Внутр @@ -3392,13 +3574,13 @@ Функция ПолучитьДанныеФайлаИНавигационнуюСсылкуВерсииВсехПодчиненныхФайлов(ВладелецФайла, ИдентификаторФормы) Экспорт Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Файлы.Ссылка КАК Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Файлы.Ссылка КАК Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла"; Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); Результат = Запрос.Выполнить(); @@ -3411,7 +3593,7 @@ ВерсияСсылка = ФайлСсылка.ТекущаяВерсия; ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка, ВерсияСсылка); НавигационнаяСсылкаВерсии = ПолучитьНавигационнуюСсылкуДляОткрытия(ВерсияСсылка, ИдентификаторФормы); - + СтруктураВозврата = Новый Структура("ДанныеФайла, НавигационнаяСсылкаВерсии", ДанныеФайла, НавигационнаяСсылкаВерсии); МассивВозврата.Добавить(СтруктураВозврата); КонецЦикла; @@ -3428,13 +3610,13 @@ Функция ПолучитьВсеПодчиненныеФайлы(ВладелецФайла) Экспорт Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Файлы.Ссылка КАК Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Файлы.Ссылка КАК Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла"; Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); @@ -3453,20 +3635,21 @@ УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | КОЛИЧЕСТВО(*) КАК Количество - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.Владелец = &ФайлСсылка"; - + Запрос.Текст = + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.Владелец = &ФайлСсылка"; + Запрос.УстановитьПараметр("ФайлСсылка", ФайлСсылка); Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Возврат Число(Выборка.Количество); -КонецФункции +КонецФункции // Получает ДанныеФайла и НавигационнуюСсылкуВерсии всех подчиненных файлов // Параметры @@ -3572,7 +3755,7 @@ КонецЕсли; КонецЦикла; - + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор); @@ -3592,7 +3775,7 @@ КонецЕсли; Если АдресВременногоХранилищаТекстаТекущейВерсии <> "" Тогда - Текст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекстаТекущейВерсии); + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекстаТекущейВерсии); ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); КонецЕсли; @@ -3621,7 +3804,7 @@ Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда Если НЕ ВерсияСсылка.Том.Пустая() Тогда - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; Попытка ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные, ИдентификаторФормы); @@ -3645,7 +3828,8 @@ КонецЕсли; Возврат Адрес; -КонецФункции // ПолучитьНавигационнуюСсылкуДляОткрытия() + +КонецФункции // Получает ДанныеФайла и НавигационнуюСсылкуВерсии, предварительно поместив файл версии во временное хранилище // Параметры @@ -3660,9 +3844,9 @@ ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка, ВерсияСсылка); Если ВерсияСсылка = Неопределено Тогда ВерсияСсылка = ФайлСсылка.ТекущаяВерсия; - КонецЕсли; + КонецЕсли; НавигационнаяСсылкаВерсии = ПолучитьНавигационнуюСсылкуВоВременномХранилище(ВерсияСсылка, ИдентификаторФормы); - + СтруктураВозврата = Новый Структура("ДанныеФайла, НавигационнаяСсылкаВерсии", ДанныеФайла, НавигационнаяСсылкаВерсии); Возврат СтруктураВозврата; @@ -3678,15 +3862,16 @@ УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | СертификатыШифрования.Представление КАК Представление, - | СертификатыШифрования.Отпечаток КАК Отпечаток, - | СертификатыШифрования.Сертификат КАК Сертификат - |ИЗ - | Справочник.Файлы.СертификатыШифрования КАК СертификатыШифрования - |ГДЕ - | СертификатыШифрования.Ссылка = &ОбъектСсылка"; - + Запрос.Текст = + "ВЫБРАТЬ + | СертификатыШифрования.Представление КАК Представление, + | СертификатыШифрования.Отпечаток КАК Отпечаток, + | СертификатыШифрования.Сертификат КАК Сертификат + |ИЗ + | Справочник.Файлы.СертификатыШифрования КАК СертификатыШифрования + |ГДЕ + | СертификатыШифрования.Ссылка = &ОбъектСсылка"; + Запрос.Параметры.Вставить("ОбъектСсылка", Ссылка); ВыборкаЗапроса = Запрос.Выполнить().Выбрать(); @@ -3698,8 +3883,8 @@ КонецЦикла; Возврат МассивСертификатовШифрования; - -КонецФункции + +КонецФункции // Получает ДанныеФайла и сам файл как ДвоичныеДанные // Параметры @@ -3715,18 +3900,18 @@ ДанныеФайла = ПолучитьДанныеФайла(ФайлСсылка, ВерсияСсылка); Если ВерсияСсылка = Неопределено Тогда ВерсияСсылка = ФайлСсылка.ТекущаяВерсия; - КонецЕсли; + КонецЕсли; ДвоичныеДанные = Неопределено; ТипХраненияФайла = ВерсияСсылка.ТипХраненияФайла; Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда Если НЕ ВерсияСсылка.Том.Пустая() Тогда - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; Попытка ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); Исключение - // запись в журнал регистрации + // Запись в журнал регистрации. СообщениеОбОшибке = СформироватьТекстОшибкиПолученияФайлСТомаДляАдминистратора(ИнформацияОбОшибке(), ВерсияСсылка.Владелец); ЗаписьЖурналаРегистрации("Открытие файла", УровеньЖурналаРегистрации.Ошибка, Метаданные.Справочники.Файлы, ВерсияСсылка.Владелец, СообщениеОбОшибке); @@ -3745,9 +3930,9 @@ ДвоичныеДанныеПодписи = Неопределено; Если АдресПодписи <> Неопределено Тогда ДвоичныеДанныеПодписи = ПолучитьИзВременногоХранилища(АдресПодписи); - КонецЕсли; + КонецЕсли; - СтруктураВозврата = Новый Структура("ДанныеФайла, ДвоичныеДанные, ДвоичныеДанныеПодписи", + СтруктураВозврата = Новый Структура("ДанныеФайла, ДвоичныеДанные, ДвоичныеДанныеПодписи", ДанныеФайла, ДвоичныеДанные, ДвоичныеДанныеПодписи); Возврат СтруктураВозврата; @@ -3779,23 +3964,23 @@ Для Каждого Данные Из МассивДанныхДляЗанесенияВБазу Цикл ОбъектСсылка = Данные.ОбъектСсылка; - + СтруктураРеквизитов = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ОбъектСсылка, "Редактирует, Зашифрован"); Редактирует = СтруктураРеквизитов.Редактирует; Зашифрован = СтруктураРеквизитов.Зашифрован; - + Если НЕ Редактирует.Пустая() Тогда - СтрокаИсключения = ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(ОбъектСсылка); + СтрокаИсключения = ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(ОбъектСсылка); ВызватьИсключение СтрокаИсключения; КонецЕсли; Если Зашифрован Тогда - СтрокаИсключения = ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(ОбъектСсылка); + СтрокаИсключения = ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(ОбъектСсылка); ВызватьИсключение СтрокаИсключения; КонецЕсли; КонецЦикла; - + Для Каждого Данные Из МассивДанныхДляЗанесенияВБазу Цикл ЗанестиИнформациюОПодписиФайла(Данные.ОбъектСсылка, Данные.НоваяПодписьДвоичныеДанные, @@ -3827,15 +4012,15 @@ Редактирует = СтруктураРеквизитов.Редактирует; Если НЕ Редактирует.Пустая() Тогда - ВызватьИсключение ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(ОбъектСсылка); + ВызватьИсключение ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗанятогоФайла(ОбъектСсылка); КонецЕсли; Зашифрован = СтруктураРеквизитов.Зашифрован; Если Зашифрован Тогда - СтрокаИсключения = ФайловыеФункцииКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(ОбъектСсылка); + СтрокаИсключения = ФайловыеФункцииСлужебныйКлиентСервер.СтрокаСообщенияОНедопустимостиПодписанияЗашифрованногоФайла(ОбъектСсылка); ВызватьИсключение СтрокаИсключения; КонецЕсли; - + ЗанестиИнформациюОПодписиФайла(Данные.ОбъектСсылка, Данные.НоваяПодписьДвоичныеДанные, Данные.Отпечаток, Данные.ДатаПодписи, Данные.Комментарий, Данные.ИмяФайлаПодписи, Данные.КомуВыданСертификат, @@ -3887,7 +4072,7 @@ ВызватьИсключение; КонецПопытки; -КонецПроцедуры +КонецПроцедуры // Удаляет записи из табличной части ЭЦП // @@ -3934,66 +4119,28 @@ Процедура ПолучитьПерсональныеНастройкиФайловыхФункций(Настройки) Экспорт УстановитьПривилегированныйРежим(Истина); + Настройки.Вставить("ДействиеПоДвойномуЩелчкуМыши", ДействиеПоДвойномуЩелчкуМыши()); - Настройки.Вставить("СпрашиватьРежимРедактированияПриОткрытииФайла", СпрашиватьРежимРедактированияПриОткрытииФайла()); Настройки.Вставить("СпособСравненияВерсийФайлов", СпособСравненияВерсийФайлов()); - УстановитьПривилегированныйРежим(Ложь); - Настройки.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь()); + Настройки.Вставить("СпрашиватьРежимРедактированияПриОткрытииФайла", + СпрашиватьРежимРедактированияПриОткрытииФайла()); + + Настройки.Вставить("ЭтоПолноправныйПользователь", Пользователи.ЭтоПолноправныйПользователь(,, Ложь)); + + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы"); - УстановитьПривилегированныйРежим(Истина); - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы"); Если ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Неопределено Тогда ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = Истина; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); - КонецЕсли; - Настройки.Вставить("ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); - -КонецПроцедуры - -// При переименовании пользователя переносит его настройки - РабочийКаталог, ДействиеПоДвойномуЩелчкуМыши и пр -// -// Параметры -// ИмяТекущее - Строка - текущее имя пользователя -// ИмяУстанавливаемое - Строка - новое имя пользователя -Процедура ПеренестиНастройкиПриСменеИмениПользователя(знач ИмяТекущее, знач ИмяУстанавливаемое) Экспорт - - ФайловыеФункции.ПеренестиНастройку("НастройкиПрограммы", "ПоказыватьКолонкуРазмер", ИмяТекущее, ИмяУстанавливаемое); - ФайловыеФункции.ПеренестиНастройку("НастройкиПрограммы", "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", ИмяТекущее, ИмяУстанавливаемое); - ФайловыеФункции.ПеренестиНастройку("НастройкиПрограммы", "ПапкаДляСохранитьКак", ИмяТекущее, ИмяУстанавливаемое); - ФайловыеФункции.ПеренестиНастройку("НастройкиПрограммы", "ПапкаДляОбновитьИзФайла", ИмяТекущее, ИмяУстанавливаемое); - - ФайловыеФункции.ПеренестиНастройку("НастройкиСравненияФайлов", "СпособСравненияВерсийФайлов", ИмяТекущее, ИмяУстанавливаемое); - ФайловыеФункции.ПеренестиНастройку("ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки", ИмяТекущее, ИмяУстанавливаемое); - - ФайловыеФункции.ПеренестиНастройку("НастройкиОткрытияФайлов", "ДействиеПоДвойномуЩелчкуМыши", ИмяТекущее, ИмяУстанавливаемое); - ФайловыеФункции.ПеренестиНастройку("НастройкиОткрытияФайлов", "СпрашиватьРежимРедактированияПриОткрытииФайла", ИмяТекущее, ИмяУстанавливаемое); - -КонецПроцедуры - -// Удаляет файл при обмене -// Параметры -// Ссылка - СправочникСсылка.Файлы - файл -// ПутьСПодкаталогом - Строка - путь с подкаталогом где лежит файл в томе -Процедура УдалитьФайлыПриПолученииДанныхФайла(Ссылка, ПутьСПодкаталогом) Экспорт - - Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(Ссылка) Тогда - - Попытка - МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, "*.*"); - Если МассивФайловВКаталоге.Количество() = 0 Тогда - УдалитьФайлы(ПутьСПодкаталогом); - КонецЕсли; - Исключение - - ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление файлов в томе при обмене'"), - УровеньЖурналаРегистрации.Ошибка,,, - ОписаниеОшибки); - - КонецПопытки; + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы", + "ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); КонецЕсли; + Настройки.Вставить("ПоказыватьЗанятыеФайлыПриЗавершенииРаботы", + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы); КонецПроцедуры @@ -4050,7 +4197,7 @@ СсылкаНаТом = Неопределено; // добавить в один из томов (где есть свободное место) - ФайловыеФункции.ДобавитьНаДиск(ПолныйПутьНовый, ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, + ФайловыеФункцииСлужебный.ДобавитьНаДиск(ПолныйПутьНовый, ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, Объект.НомерВерсии, ИмяБезРасширения, Расширение, РазмерФайла, Объект.Зашифрован); Объект.ПутьКФайлу = ПутьКФайлуНаТоме; @@ -4063,11 +4210,11 @@ Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда ЗаписатьФайлВИнформационнуюБазу(Объект.Ссылка, ХранилищеФайла); - КонецЕсли; + КонецЕсли; Если НЕ ПустаяСтрока(ПолныйПутьНовый) Тогда УдалитьФайлы(ПолныйПутьНовый); - КонецЕсли; + КонецЕсли; КонецЦикла; @@ -4087,28 +4234,27 @@ // Получает текст запроса для извлечения текста // Параметры // ТекстЗапроса - Строка - текст запроса для извлечения текста +// Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы = Ложь) Экспорт - ТекстЗапроса = - "ВЫБРАТЬ {КоличествоФайловВПорции} - | ВерсииФайлов.Ссылка КАК Ссылка, - | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, - | ВерсииФайлов.ТипХраненияФайла КАК ТипХраненияФайла, - | ВерсииФайлов.Расширение КАК Расширение, - | ВерсииФайлов.Владелец.Наименование КАК Наименование - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) - | И (НЕ ВерсииФайлов.Зашифрован)"; - - Если Не ПолучитьВсеФайлы Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "{КоличествоФайловВПорции}", "ПЕРВЫЕ 100"); - Иначе - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "{КоличествоФайловВПорции}", ""); - КонецЕсли; - + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 100 + | ВерсииФайлов.Ссылка КАК Ссылка, + | ВерсииФайлов.СтатусИзвлеченияТекста КАК СтатусИзвлеченияТекста, + | ВерсииФайлов.ТипХраненияФайла КАК ТипХраненияФайла, + | ВерсииФайлов.Расширение КАК Расширение, + | ВерсииФайлов.Владелец.Наименование КАК Наименование + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) + | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) + | И НЕ ВерсииФайлов.Зашифрован"; + + Если ПолучитьВсеФайлы Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 100", ""); + КонецЕсли; + КонецПроцедуры // Получает полный путь к файлу на диске @@ -4130,7 +4276,7 @@ ДвоичныеДанныеФайла.Записать(ИмяФайлаСПутем); Иначе Если НЕ ВерсияСсылка.Том.Пустая() Тогда - ИмяФайлаСПутем = ФайловыеФункции.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; + ИмяФайлаСПутем = ФайловыеФункцииСлужебный.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; КонецЕсли; КонецЕсли; @@ -4138,9 +4284,11 @@ КонецФункции -// Записывает извлеченный текст -// Параметры -// ТекущаяВерсия - СправочникСсылка.ВерсииФайлов - версия файла +// Записывает извлеченный текст. +// +// Параметры: +// ТекущаяВерсия - СправочникСсылка.ВерсииФайлов - версия файла. +// Процедура ЗаписатьИзвлеченныйТекст(ТекущаяВерсия) Экспорт ФайлЗаблокирован = Ложь; @@ -4155,7 +4303,6 @@ КонецПопытки; КонецЕсли; - УстановитьПривилегированныйРежим(Истина); НачатьТранзакцию(); Попытка ТекущаяВерсия.Записать(); @@ -4167,15 +4314,8 @@ КонецЕсли; ЗафиксироватьТранзакцию(); - УстановитьПривилегированныйРежим(Ложь); - - Если ФайлЗаблокирован Тогда - РазблокироватьДанныеДляРедактирования(Файл); - КонецЕсли; - Исключение ОтменитьТранзакцию(); - УстановитьПривилегированныйРежим(Ложь); Если ФайлЗаблокирован Тогда РазблокироватьДанныеДляРедактирования(Файл); @@ -4184,21 +4324,27 @@ ВызватьИсключение; КонецПопытки; + Если ФайлЗаблокирован Тогда + РазблокироватьДанныеДляРедактирования(Файл); + КонецЕсли; + КонецПроцедуры // Возвращает количество файлов в томах // Возвращаемое значение: // Число - число файлов в томах +// Функция ПодсчитатьКоличествоФайловВТомах() Экспорт Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ЕСТЬNULL(КОЛИЧЕСТВО(Версии.Ссылка), 0) КАК КоличествоФайлов - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)"; + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(КОЛИЧЕСТВО(Версии.Ссылка), 0) КАК КоличествоФайлов + |ИЗ + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ВТомахНаДиске)"; Выборка = Запрос.Выполнить().Выбрать(); @@ -4224,7 +4370,7 @@ Если ЕстьХранимыеФайлы = Истина Тогда Возврат; - КонецЕсли; + КонецЕсли; ТипыВладельцев = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлы.ТипПараметраКоманды.Типы(); Если ТипыВладельцев.Найти(ТипЗнч(ВнешнийОбъект)) <> Неопределено Тогда МассивФайлов = ПолучитьВсеПодчиненныеФайлы(ВнешнийОбъект); @@ -4241,7 +4387,7 @@ Если ТипыВладельцев.Найти(ТипЗнч(ВнешнийОбъект)) = Неопределено Тогда Возврат; КонецЕсли; - + МассивФайлов = ПолучитьВсеПодчиненныеФайлы(ВнешнийОбъект); Для Каждого Файл Из МассивФайлов Цикл ДанныеФайла = Новый Структура("ДатаМодификацииУниверсальная, Размер, Наименование, Расширение, ДвоичныеДанныеФайла, Текст"); @@ -4257,9 +4403,8 @@ ДанныеФайла.Текст = Файл.ТекстХранилище.Получить(); ХранимыеФайлы.Добавить(ДанныеФайла); - КонецЦикла; - - + КонецЦикла; + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -4314,7 +4459,7 @@ Обработчик.Версия = "1.2.1.4"; Обработчик.Процедура = "РаботаСФайламиВызовСервера.ИнициализироватьКонстантуХранитьФайлыВТомахНаДиске"; -КонецПроцедуры +КонецПроцедуры // В справочнике ВерсииФайлов из данных в Код(Строка) заполняет НомерВерсии(Число) Процедура ЗаполнитьНомерВерсииИзКодаСправочника() Экспорт @@ -4323,10 +4468,10 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов"; + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -4334,7 +4479,7 @@ Объект = Выборка.Ссылка.ПолучитьОбъект(); Если Объект.НомерВерсии = 0 Тогда - + // коррекция ситуации, допустимой ранее, но недопустимой сейчас - активная версия помечена на удаление, а владелец - нет Если Объект.ПометкаУдаления = Истина И Объект.Владелец.ПометкаУдаления = Ложь И Объект.Владелец.ТекущаяВерсия = Объект.Ссылка Тогда Объект.ПометкаУдаления = Ложь; @@ -4347,10 +4492,10 @@ КонецПопытки; КонецЕсли; - + КонецЦикла; -КонецПроцедуры +КонецПроцедуры // В справочнике ВерсииФайлов заполняет ТипХраненияФайла значением ВБазе Процедура ЗаполнитьТипХраненияФайлаВБазе() Экспорт @@ -4358,12 +4503,12 @@ УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов"; - + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов"; + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Объект = Выборка.Ссылка.ПолучитьОбъект(); @@ -4375,7 +4520,7 @@ КонецЦикла; -КонецПроцедуры +КонецПроцедуры // В справочнике ВерсииФайлов и Файлы ИндексКартинки увеличивает в 2 раза Процедура СменитьИндексПиктограммы() Экспорт @@ -4383,26 +4528,26 @@ УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов"; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.ОбменДанными.Загрузка = Истина; - Объект.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Объект.Расширение); + Объект.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Объект.Расширение); Объект.Записать(); КонецЦикла; Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Файлы.Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы"; + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -4410,9 +4555,9 @@ Объект.ОбменДанными.Загрузка = Истина; Объект.ИндексКартинки = Объект.ТекущаяВерсия.ИндексКартинки; Объект.Записать(); - КонецЦикла; + КонецЦикла; -КонецПроцедуры +КонецПроцедуры // Вызывается при обновлении на 1.0.6.3 - заполняет пути ТомаХраненияФайлов Процедура ЗаполнитьПутиТома() Экспорт @@ -4420,11 +4565,11 @@ УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТомаХраненияФайлов.Ссылка - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов"; + Запрос.Текст = + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл @@ -4433,7 +4578,7 @@ Объект.Записать(); КонецЦикла; -КонецПроцедуры +КонецПроцедуры // В справочнике Файлы перезаписывает все элементы Процедура ПерезаписатьВсеФайлы() Экспорт @@ -4441,19 +4586,19 @@ УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | Файлы.Ссылка - |ИЗ - | Справочник.Файлы КАК Файлы"; - + Запрос.Текст = + "ВЫБРАТЬ + | Файлы.Ссылка + |ИЗ + | Справочник.Файлы КАК Файлы"; + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.Записать(); КонецЦикла; -КонецПроцедуры +КонецПроцедуры // Проинициализирует ХранитьФайлыВТомахНаДиске из ТипХраненияФайлов Процедура ПроинициализироватьХранитьФайлыВТомахНаДиске() Экспорт @@ -4464,7 +4609,7 @@ ХранитьФайлыВТомахНаДиске = (ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске); Константы.ХранитьФайлыВТомахНаДиске.Установить(ХранитьФайлыВТомахНаДиске); -КонецПроцедуры +КонецПроцедуры // В справочнике ВерсииФайлов заполняет ДатаМодификацииФайла - из даты создания Процедура ЗаполнитьДатуМодификацииФайла() Экспорт @@ -4492,15 +4637,16 @@ ПерезаписатьВсеФайлы(); // чтобы перенеслись значения реквизита ДатаМодификацииФайла из версии в файл -КонецПроцедуры +КонецПроцедуры // Создает новые файлы по аналогии с указанными // Параметры // МассивФайлов - Массив - массив объектов СправочникСсылка.Файлы - существующие файлы // ВладелецНовогоФайла - ЛюбаяСсылка - владелец файла +// Процедура СкопироватьФайлы(МассивФайлов, ВладелецНовогоФайла) Экспорт - Для каждого Файл Из МассивФайлов Цикл + Для каждого Файл Из МассивФайлов Цикл НовыйФайл = СкопироватьФайл(Файл, ВладелецНовогоФайла); КонецЦикла; @@ -4513,6 +4659,7 @@ // // Возвращаемое значение: // СправочникСсылка.Файлы - новый файл +// Функция СкопироватьФайл(ИсходныйФайл, ВладелецНовогоФайла) Экспорт Если ИсходныйФайл = Неопределено Или ИсходныйФайл.Пустая() Или ИсходныйФайл.ТекущаяВерсия.Пустая()Тогда @@ -4529,7 +4676,7 @@ ХранилищеФайла = Неопределено; Если ИсходныйФайл.ТекущаяВерсия.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда ХранилищеФайла = ПолучитьХранилищеФайлаИзИнформационнойБазы(ИсходныйФайл.ТекущаяВерсия); - КонецЕсли; + КонецЕсли; Версия = СоздатьВерсию( ТекущаяДатаСеанса(), @@ -4561,10 +4708,10 @@ ВерсияОбъект.ПодписанЭЦП = Истина; ВерсияОбъект.Записать(); - КонецЕсли; - + КонецЕсли; + Если ИсходныйФайл.Зашифрован Тогда - + ФайлОбъект = НовыйФайл.ПолучитьОбъект(); ФайлОбъект.Зашифрован = Истина; @@ -4581,7 +4728,7 @@ ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта ВерсияОбъект.Записать(); - КонецЕсли; + КонецЕсли; РаботаСФайламиВызовСервераПереопределяемый.ЗаполнитьРеквизитыФайлаИзИсходногоФайла(НовыйФайл, ИсходныйФайл); @@ -4589,40 +4736,6 @@ КонецФункции -// помечает \ снимает пометку удаления у приложенных файлов -// Параметры -// ВладелецФайла - ЛюбаяСсылка - владелец файла -// ПометкаУдаления - Булево - пометка удаления -Процедура ПометитьНаУдалениеПриложенныеФайлы(ВладелецФайла, ПометкаУдаления) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Файлы.Ссылка КАК Ссылка, - | Файлы.Редактирует КАК Редактирует - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; - - Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); - - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - Если ПометкаУдаления И Не Выборка.Редактирует.Пустая() Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '""%1"" не может быть удален, т.к. содержит файл ""%2"", занятый для редактирования.'"), - Строка(ВладелецФайла), - Строка(Выборка.Ссылка)); - КонецЕсли; - ФайлОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - ФайлОбъект.УстановитьПометкуУдаления(ПометкаУдаления); - КонецЦикла; - -КонецПроцедуры - // Возвращает массив ссылок на файлы // Параметры // Объект - ЛюбаяСсылка - владелец файла @@ -4634,7 +4747,7 @@ Если ТипЗнч(Объект) = Тип("СправочникСсылка.Файлы") Тогда МассивФайлов.Добавить(Объект); Возврат; - КонецЕсли; + КонецЕсли; ТипыПараметраКоманды = Метаданные.ОбщиеКоманды.ПрисоединенныеФайлы.ТипПараметраКоманды.Типы(); ТипыВладельцев = Метаданные.Справочники.Файлы.Реквизиты.ВладелецФайла.Тип.Типы(); @@ -4645,7 +4758,7 @@ МассивФайловЛокальный = ПолучитьВсеПодчиненныеФайлы(Объект); Для Каждого Строка Из МассивФайловЛокальный Цикл МассивФайлов.Добавить(Строка); - КонецЦикла; + КонецЦикла; Возврат; @@ -4713,9 +4826,9 @@ Если ТипХраненияФайлов = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда Константы.ХранитьФайлыВТомахНаДиске.Установить(Истина); - КонецЕсли; - -КонецПроцедуры + КонецЕсли; + +КонецПроцедуры // переносит бинарный файл из ФайлХранилище справочника ВерсииФайлов в регистр сведений ХранимыеФайлыВерсий Процедура ПереместитьФайлыИзИнформационнойБазыВРегистрСведений() Экспорт @@ -4723,13 +4836,13 @@ УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВерсииФайлов.Ссылка - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; + Запрос.Текст = + "ВЫБРАТЬ + | ВерсииФайлов.Ссылка + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | ВерсииФайлов.ТипХраненияФайла = &ТипХраненияФайла"; Запрос.УстановитьПараметр("ТипХраненияФайла", Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе); @@ -4747,7 +4860,7 @@ КонецЦикла; -КонецПроцедуры +КонецПроцедуры // заполняет поле ДатаЗаема текущей датой Процедура ЗаполнитьДатуЗаема() Экспорт @@ -4755,14 +4868,14 @@ УстановитьПривилегированныйРежим(Истина); ДатаЗаема = ТекущаяДатаСеанса(); - + Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Файлы.Ссылка |ИЗ | Справочник.Файлы КАК Файлы"; - + Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если НЕ Выборка.Ссылка.Редактирует.Пустая() Тогда @@ -4771,77 +4884,77 @@ Объект.ДатаЗаема = ДатаЗаема; Объект.Записать(); КонецЕсли; - КонецЦикла; + КонецЦикла; -КонецПроцедуры +КонецПроцедуры // Ставит файлу признак Зашифрован Процедура УстановитьПризнакЗашифрован(ФайлСсылка, Зашифрован, УникальныйИдентификатор = Неопределено) Экспорт - - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор); - - ФайлОбъект.Зашифрован = Зашифрован; - ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта - ФайлОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор); - -КонецПроцедуры + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор); + + ФайлОбъект.Зашифрован = Зашифрован; + ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта + ФайлОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор); + +КонецПроцедуры // Помещает информацию о сертификатах шифрования в табличную часть файла Процедура ЗанестиИнформациюОСертификатахШифрования(ФайлСсылка, МассивОтпечатков, УникальныйИдентификатор) Экспорт - - НачатьТранзакцию(); - Попытка - - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор); - - Для Каждого ОтпечатокСтруктура Из МассивОтпечатков Цикл - НоваяСтрока = ФайлОбъект.СертификатыШифрования.Добавить(); - НоваяСтрока.Отпечаток = ОтпечатокСтруктура.Отпечаток; - НоваяСтрока.Представление = ОтпечатокСтруктура.Представление; - НоваяСтрока.Сертификат = Новый ХранилищеЗначения(ОтпечатокСтруктура.Сертификат); - КонецЦикла; - - ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта - ФайлОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры + + НачатьТранзакцию(); + Попытка + + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ФайлСсылка, , УникальныйИдентификатор); + + Для Каждого ОтпечатокСтруктура Из МассивОтпечатков Цикл + НоваяСтрока = ФайлОбъект.СертификатыШифрования.Добавить(); + НоваяСтрока.Отпечаток = ОтпечатокСтруктура.Отпечаток; + НоваяСтрока.Представление = ОтпечатокСтруктура.Представление; + НоваяСтрока.Сертификат = Новый ХранилищеЗначения(ОтпечатокСтруктура.Сертификат); + КонецЦикла; + + ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта + ФайлОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ФайлСсылка, УникальныйИдентификатор); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры // Обновляет размер файла и текущей версии. Нужно при загрузке шифрованного файла в почте Процедура ОбновитьРазмерФайлаИВерсии(ДанныеФайла, РазмерФайла, УникальныйИдентификатор) Экспорт - - НачатьТранзакцию(); - Попытка - - ВерсияОбъект = ДанныеФайла.Версия.ПолучитьОбъект(); - ВерсияОбъект.Заблокировать(); - ВерсияОбъект.Размер = РазмерФайла; - ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта - ВерсияОбъект.Записать(); - ВерсияОбъект.Разблокировать(); - - ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); - ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта - ФайлОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры + + НачатьТранзакцию(); + Попытка + + ВерсияОбъект = ДанныеФайла.Версия.ПолучитьОбъект(); + ВерсияОбъект.Заблокировать(); + ВерсияОбъект.Размер = РазмерФайла; + ВерсияОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта + ВерсияОбъект.Записать(); + ВерсияОбъект.Разблокировать(); + + ФайлОбъект = ДанныеФайла.Ссылка.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, , УникальныйИдентификатор); + ФайлОбъект.ДополнительныеСвойства.Вставить("ЗаписьПодписанногоОбъекта", Истина); // чтобы прошла запись ранее подписанного объекта + ФайлОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ФайлОбъект.Ссылка, УникальныйИдентификатор); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры Функция ПолучитьИзвлекатьТекстыФайловНаСервере() @@ -4849,7 +4962,7 @@ ИзвлекатьТекстыФайловНаСервере = Константы.ИзвлекатьТекстыФайловНаСервере.Получить(); Возврат ИзвлекатьТекстыФайловНаСервере; -КонецФункции +КонецФункции // Получает количество версий с неизвлеченным текстом Функция ПолучитьКоличествоВерсийСНеизвлеченнымТекстом() Экспорт @@ -4857,34 +4970,35 @@ Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ - | КОЛИЧЕСТВО(*) КАК ЧислоВерсий - |ИЗ - | Справочник.ВерсииФайлов КАК ВерсииФайлов - |ГДЕ - | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) - | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) - | И (НЕ ВерсииФайлов.Зашифрован)"; - + "ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК ЧислоВерсий + |ИЗ + | Справочник.ВерсииФайлов КАК ВерсииФайлов + |ГДЕ + | (ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен) + | ИЛИ ВерсииФайлов.СтатусИзвлеченияТекста = ЗНАЧЕНИЕ(Перечисление.СтатусыИзвлеченияТекстаФайлов.ПустаяСсылка)) + | И НЕ ВерсииФайлов.Зашифрован"; + Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); Результат = Выборка.ЧислоВерсий; Возврат Результат; - + КонецФункции // Вернет размер файлов на томе - в байтах Функция ПодсчитатьРазмерФайловНаТоме(СсылкаТома) Экспорт Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов - |ИЗ - | Справочник.ВерсииФайлов КАК Версии - |ГДЕ - | Версии.Том = &Том"; + Запрос.Текст = + "ВЫБРАТЬ + | ЕСТЬNULL(СУММА(Версии.Размер), 0) КАК РазмерФайлов + |ИЗ + | Справочник.ВерсииФайлов КАК Версии + |ГДЕ + | Версии.Том = &Том"; Запрос.Параметры.Вставить("Том", СсылкаТома); @@ -4973,7 +5087,7 @@ Если Не ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда Если ЭтоАдресВременногоХранилища(АдресВременногоХранилищаТекста) Тогда - Текст = ФайловыеФункции.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + Текст = ФайловыеФункцииСлужебный.ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); Иначе Текст = АдресВременногоХранилищаТекста; КонецЕсли; @@ -5005,11 +5119,6 @@ КонецЕсли; ЗафиксироватьТранзакцию(); - - Если ФайлЗаблокирован Тогда - РазблокироватьДанныеДляРедактирования(Файл); - КонецЕсли; - Исключение ОтменитьТранзакцию(); @@ -5020,4 +5129,8 @@ ВызватьИсключение; КонецПопытки; + Если ФайлЗаблокирован Тогда + РазблокироватьДанныеДляРедактирования(Файл); + КонецЕсли; + КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиВызовСервераПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиВызовСервераПереопределяемый/Module.bsl index f6d46e848..86858e46b 100644 --- a/SSL/src/CommonModules/РаботаСФайламиВызовСервераПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиВызовСервераПереопределяемый/Module.bsl @@ -1,3 +1,8 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// + // Вызывается после копирования файла из исходного файла // для заполнения таких реквизитов нового файла, которые не // предусмотрены в БСП и были добавлены к справочнику Файлы или diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl index 6535ae03a..2386a6688 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиент/Module.bsl @@ -1,3 +1,11 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + // Можно ли освободить Файл // Параметры // ОбъектСсылка - СправочникСсылка.Файлы - файл @@ -13,17 +21,18 @@ Возврат Истина; ИначеЕсли Редактирует.Пустая() Тогда СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Нельзя освободить файл ""%1"" т.к. он никем не занят.'"), Строка(ОбъектСсылка)); + НСтр("ru = 'Нельзя освободить файл ""%1"" т.к. он никем не занят.'"), + Строка(ОбъектСсылка)); Возврат Ложь; Иначе - Если ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ЭтоПолноправныйПользователь Тогда + Если ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ЭтоПолноправныйПользователь Тогда Возврат Истина; КонецЕсли; СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Нельзя освободить файл ""%1"" т.к. он занят пользователем ""%2"".'"), - Строка(ОбъектСсылка), - Строка(Редактирует)); + НСтр("ru = 'Нельзя освободить файл ""%1"" т.к. он занят пользователем ""%2"".'"), + Строка(ОбъектСсылка), + Строка(Редактирует)); Возврат Ложь; КонецЕсли; @@ -184,8 +193,8 @@ ОткрытьФайлПриложением(ДанныеФайла, ПолноеИмяФайла); КонецЕсли; Иначе - ФайловыеФункцииКлиент.ПоказатьНапоминаниеПриРедактировании(); - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ФайловыеФункцииСлужебныйКлиент.ПоказатьНапоминаниеПриРедактировании(); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); ПолучитьФайл(ДанныеФайла.НавигационнаяСсылкаТекущейВерсии, ИмяФайла, Истина); // для варианта с хранением файлов на диске (на сервере) удаляем Файл из временного хранилища после получения @@ -232,8 +241,8 @@ ОткрытьФайлПриложением(ДанныеФайла, ПолноеИмяФайла); КонецЕсли; Иначе - ФайловыеФункцииКлиент.ПоказатьНапоминаниеПриРедактировании(); - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ФайловыеФункцииСлужебныйКлиент.ПоказатьНапоминаниеПриРедактировании(); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); ПолучитьФайл(ДанныеФайла.НавигационнаяСсылкаТекущейВерсии, ИмяФайла, Истина); // для варианта с хранением файлов на диске (на сервере) удаляем Файл из временного хранилища после получения @@ -269,9 +278,9 @@ КонецЕсли; Иначе Если ДанныеФайла.РедактируетТекущийПользователь Тогда - ФайловыеФункцииКлиент.ПоказатьНапоминаниеПриРедактировании(); + ФайловыеФункцииСлужебныйКлиент.ПоказатьНапоминаниеПриРедактировании(); КонецЕсли; - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); ПолучитьФайл(ДанныеФайла.НавигационнаяСсылкаТекущейВерсии, ИмяФайла, Истина); // для варианта с хранением файлов на диске (на сервере) не удаляем сразу Файл из временного хранилища @@ -300,7 +309,7 @@ Иначе Адрес = РаботаСФайламиВызовСервера.ПолучитьНавигационнуюСсылкуДляОткрытия(ДанныеФайла.Версия, УникальныйИдентификатор); - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); ПолучитьФайл(Адрес, ИмяФайла, Истина); // для варианта с хранением файлов на диске (на сервере) удаляем Файл из временного хранилища после получения @@ -325,17 +334,17 @@ // Здесь создаем Файл ... Файл = Новый Файл(ПолноеИмяФайла); - ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СписокЗапрещенныхРасширений; + ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СписокЗапрещенныхРасширений; РасширениеФайла = Файл.Расширение; - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайла) Тогда + Если Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайла) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), РасширениеФайла); КонецЕсли; - МаксРазмерФайла = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерФайла; + МаксРазмерФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерФайла; РазмерВМб = Файл.Размер() / (1024 * 1024); РазмерВМбМакс = МаксРазмерФайла / (1024 * 1024); @@ -346,12 +355,12 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Размер файла ""%1"" (%2 Мб) превышает максимально допустимый размер файла (%3 Мб).'"), Файл.Имя, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб), + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМбМакс)); КонецЕсли; - Если НЕ ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище( + Если НЕ ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда + АдресВременногоХранилищаТекста = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( Файл.ПолноеИмя, ФормаВладелец.УникальныйИдентификатор); Иначе @@ -374,7 +383,7 @@ НСтр("ru = 'Идет сохранение файла ""%1"" (%2 Мб). |Пожалуйста, подождите...'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -402,7 +411,7 @@ Док = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией( ВладелецФайла, ИмяСоздания, - ФайловыеФункцииКлиентСервер.РасширениеБезТочки(Файл.Расширение), + ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(Файл.Расширение), ВремяИзменения, ВремяИзмененияУниверсальное, Файл.Размер(), @@ -511,7 +520,7 @@ Возврат; КонецЕсли; - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ИмяФайла); Если СтрокиПути.Количество() >= 2 Тогда Расширение = СтрокиПути[СтрокиПути.Количество()-1]; ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; @@ -525,7 +534,7 @@ Док = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией( ВладелецФайла, ИмяБезРасширения, - ФайловыеФункцииКлиентСервер.РасширениеБезТочки(Расширение), + ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(Расширение), ВремяИзменения, ВремяИзмененияУниверсальное, Размер, @@ -705,7 +714,9 @@ ПолныйПутьКФайлу = ПереданныйПолныйПутьКФайлу; Если ПолныйПутьКФайлу = "" Тогда - ПолныйПутьКФайлу = ФайловыеФункцииКлиент.ПолучитьПолныйПутьКФайлуВРабочемКаталоге(ДанныеФайла); + + ПолныйПутьКФайлу = ФайловыеФункцииСлужебныйКлиент + .ПолучитьПолныйПутьКФайлуВРабочемКаталоге(ДанныеФайла); КонецЕсли; // Проверяем наличие файла на диске @@ -853,7 +864,7 @@ УдалитьФайл(ПолныйПутьКФайлу); ПереместитьФайл(ИмяФайлаСПутемШифрованное, ПолныйПутьКФайлу); - КонецЕсли; + КонецЕсли; Пока Истина Цикл Попытка @@ -866,7 +877,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выполняется передача файла ""%1"" (%2 Мб)... |Пожалуйста, подождите.'"), - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -888,14 +899,14 @@ ТекстНеИзвлеченНаКлиенте = Ложь; #Если ВебКлиент Тогда ТекстНеИзвлеченНаКлиенте = Истина; - #КонецЕсли + #КонецЕсли ИмяБезРасширения = ФайлНовойВерсии.ИмяБезРасширения; Расширение = ФайлНовойВерсии.Расширение; Отказ = Ложь; - Если НЕ ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище( + Если НЕ ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда + АдресВременногоХранилищаТекста = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( ПолныйПутьКФайлу, ИдентификаторФормы, Отказ, Кодировка); Иначе АдресВременногоХранилищаТекста = ""; @@ -924,12 +935,14 @@ ТекстНеИзвлеченНаКлиенте, ВРабочемКаталогеВладельца, НеМенятьЗаписьВРабочемКаталоге, - ИдентификаторФормы); + ИдентификаторФормы, + , + ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя()); НоваяВерсия = ДанныеФайла.ТекущаяВерсия; Если ПереданныйПолныйПутьКФайлу = "" Тогда - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования; Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Неопределено Тогда УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; КонецЕсли; @@ -1095,7 +1108,7 @@ ВремяИзмененияУниверсальное = Дата('00010101'); Размер = 0; // Т.к. не можем получить размер файла на диске - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ВыбранныйПутьКФайлу); + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ВыбранныйПутьКФайлу); Если СтрокиПути.Количество() >= 2 Тогда Расширение = СтрокиПути[СтрокиПути.Количество()-1]; ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; @@ -1116,7 +1129,8 @@ АдресВременногоХранилищаТекста, ЭтоВебКлиент, ТекстНеИзвлеченНаКлиенте, - ИдентификаторФормы); + ИдентификаторФормы, + ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя()); НоваяВерсия = ДанныеФайла.ТекущаяВерсия; @@ -1232,7 +1246,7 @@ // Редактирует - СправочникСсылка.Пользователи - кто занял файл // УникальныйИдентификатор - уникальный идентификатор формы // НеЗадаватьВопрос - Булево - Не задавать вопрос "Отмена редактирования файла может привести к потере Ваших изменений" - +// // Возвращаемое значение: // Булево - успешно ли выполнена операция Функция ОсвободитьФайл(ОбъектСсылка, Знач ХранитьВерсии = Неопределено, @@ -1492,21 +1506,31 @@ КонецПроцедуры //ОпубликоватьФайлыПоСсылкам -// Процедура предназначена для опубликования файла без его освобождения +// Процедура предназначена для опубликования файла без его освобождения. // // Параметры: -// ОбъектСсылка - СправочникСсылка.Файлы - файл -// ИдентификаторФормы - уникальный идентификатор формы -// ХранитьВерсии - Булево - Хранить версии -// РедактируетТекущийПользователь - Булево - файл редактирует текущи пользователь -// Редактирует - СправочникСсылка.Пользователи - кто занял файл -// АвторТекущейВерсии - СправочникСсылка.Пользователи - Автор текущей версии -// ПереданныйПолныйПутьКФайлу - Строка - полный путь к файлу (вместо взятия пути из рабочего каталога) -// СоздатьНовуюВерсию - Булево - Создать новую версию -// КомментарийКВерсии - Строка - Комментарий к версии -// ПоказыватьОповещение - Булево - Показывать оповещение -Функция ОпубликоватьФайл(ОбъектСсылка, ИдентификаторФормы, Знач ХранитьВерсии = Неопределено, - Знач РедактируетТекущийПользователь = Неопределено, +// ОбъектСсылка - СправочникСсылка.Файлы - файл. +// ИдентификаторФормы - УникальныйИдентификатор формы. +// ХранитьВерсии - Булево. +// +// РедактируетТекущийПользователь - Булево - файл редактирует +// текущий пользователь. +// +// Редактирует - СправочникСсылка.Пользователи - кто занял файл. +// АвторТекущейВерсии - СправочникСсылка.Пользователи - Автор текущей версии +// +// ПереданныйПолныйПутьКФайлу - Строка - полный путь к файлу (вместо взятия пути +// из рабочего каталога). +// +// СоздатьНовуюВерсию - Булево - Создать новую версию. +// КомментарийКВерсии - Строка - Комментарий к версии. +// ПоказыватьОповещение - Булево - Показывать оповещение. +// +Функция ОпубликоватьФайл( + ОбъектСсылка, + ИдентификаторФормы, + Знач ХранитьВерсии = Неопределено, + Знач РедактируетТекущийПользователь = Неопределено, Знач Редактирует = Неопределено, Знач АвторТекущейВерсии = Неопределено, ПереданныйПолныйПутьКФайлу = "", @@ -1521,22 +1545,25 @@ РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); - Если РасширениеПодключено Тогда // код для тонкого (или толстого) клиента (или веб с подключенным расширением) - + Если РасширениеПодключено Тогда + // Код для тонкого клиента, толстого клиента и веб-клиента с подключенным расширением. + ДанныеФайла = РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаИРабочийКаталог(ОбъектСсылка); ХранитьВерсии = ДанныеФайла.ХранитьВерсии; - - // Проверяем возможность освобождения + + // Проверка возможности освобождения. СтрокаОшибки = ""; Если НЕ ВозможностьОсвободитьФайл(ДанныеФайла.Ссылка, ДанныеФайла.РедактируетТекущийПользователь, ДанныеФайла.Редактирует, СтрокаОшибки) Тогда Предупреждение(СтрокаОшибки); Возврат Ложь; КонецЕсли; - + ПолныйПутьКФайлу = ПереданныйПолныйПутьКФайлу; Если ПолныйПутьКФайлу = "" Тогда - ПолныйПутьКФайлу = ФайловыеФункцииКлиент.ПолучитьПолныйПутьКФайлуВРабочемКаталоге(ДанныеФайла); + + ПолныйПутьКФайлу = ФайловыеФункцииСлужебныйКлиент + .ПолучитьПолныйПутьКФайлуВРабочемКаталоге(ДанныеФайла); КонецЕсли; НеМенятьЗаписьВРабочемКаталоге = Ложь; @@ -1544,21 +1571,23 @@ НеМенятьЗаписьВРабочемКаталоге = Истина; КонецЕсли; - // Проверяем наличие файла на диске + // Проверка наличия файла на диске. ФайлНовойВерсии = Новый Файл(ПолныйПутьКФайлу); Если НЕ ФайлНовойВерсии.Существует() Тогда СтрокаПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось загрузить файл ""%1"" в информационную базу, т.к. он не найден на локальном компьютере'"), + НСтр("ru = 'Не удалось загрузить файл ""%1"" + |в информационную базу, т.к. он не найден на локальном компьютере.'"), Строка(ДанныеФайла.Ссылка)); + Если НЕ ПустаяСтрока(ПолныйПутьКФайлу) Тогда - СтрокаПредупреждения = СтрокаПредупреждения + " (" + ПолныйПутьКФайлу + ")."; + СтрокаПредупреждения = СтрокаПредупреждения + " (" + ПолныйПутьКФайлу + ")."; Иначе - СтрокаПредупреждения = СтрокаПредупреждения + "."; + СтрокаПредупреждения = СтрокаПредупреждения + "."; КонецЕсли; СтрокаПредупреждения = СтрокаПредупреждения + Символы.ПС + "Освободить файл?"; - + КодВозврата = Вопрос(СтрокаПредупреждения, РежимДиалогаВопрос.ДаНет); Если КодВозврата = КодВозвратаДиалога.Да Тогда @@ -1569,9 +1598,9 @@ КонецЕсли; - // Запрашиваем комментарий и признак хранения версии + // Запрос комментария и признака хранения версии. Если СоздатьНовуюВерсию = Неопределено Тогда - + ФормаВозврата = РаботаСФайламиКлиентПовтИсп.ПолучитьФормуВозвратаФайла(); СоздатьНовуюВерсию = Истина; @@ -1580,30 +1609,36 @@ Если ДанныеФайла.ХранитьВерсии Тогда СоздатьНовуюВерсию = Истина; - // Если автор текущей версии - не текущий пользователь - то галочку «Не создавать новую версию» делаем недоступной + // Если автор текущей версии - не текущий пользователь, + // то флажок "Не создавать новую версию" недоступен. Если ДанныеФайла.АвторТекущейВерсии <> ДанныеФайла.Редактирует Тогда СоздатьНовуюВерсиюДоступность = Ложь; Иначе СоздатьНовуюВерсиюДоступность = Истина; - КонецЕсли; + КонецЕсли; Иначе СоздатьНовуюВерсию = Ложь; СоздатьНовуюВерсиюДоступность = Ложь; - КонецЕсли; + КонецЕсли; + + СтруктураПараметров = Новый Структура; + СтруктураПараметров.Вставить("ФайлСсылка", ДанныеФайла.Ссылка); + СтруктураПараметров.Вставить("КомментарийКВерсии", ""); + СтруктураПараметров.Вставить("СоздатьНовуюВерсию", СоздатьНовуюВерсию); + СтруктураПараметров.Вставить("СоздатьНовуюВерсиюДоступность", + СоздатьНовуюВерсиюДоступность); - СтруктураПараметров = Новый Структура("ФайлСсылка, КомментарийКВерсии, СоздатьНовуюВерсию, СоздатьНовуюВерсиюДоступность", - ДанныеФайла.Ссылка, "", СоздатьНовуюВерсию, СоздатьНовуюВерсиюДоступность); ФормаВозврата.УстановитьПараметрыИспользования(СтруктураПараметров); Результат = ФормаВозврата.ОткрытьМодально(); Если ТипЗнч(Результат) <> Тип("Структура") Тогда Возврат Ложь; - КонецЕсли; + КонецЕсли; КодВозврата = Результат.КодВозврата; Если КодВозврата <> КодВозвратаДиалога.ОК Тогда Возврат Ложь; - КонецЕсли; + КонецЕсли; СоздатьНовуюВерсию = Результат.СоздатьНовуюВерсию; КомментарийКВерсии = Результат.КомментарийКВерсии; @@ -1612,14 +1647,15 @@ Если ХранитьВерсии Тогда - // Если автор текущей версии - не текущий пользователь - то галочку «Не создавать новую версию» делаем недоступной + // Если автор текущей версии - не текущий пользователь, + // то флажок "Не создавать новую версию" недоступен. Если АвторТекущейВерсии <> Редактирует Тогда СоздатьНовуюВерсию = Истина; - КонецЕсли; + КонецЕсли; Иначе СоздатьНовуюВерсию = Ложь; - КонецЕсли; + КонецЕсли; КонецЕсли; @@ -1633,7 +1669,8 @@ ВремяИзмененияУниверсальное = ФайлНовойВерсии.ПолучитьУниверсальноеВремяИзменения(); РазмерФайла = ФайлНовойВерсии.Размер(); - // Файл с признаком шифрован - при публикации снова шифруем для тех же сертификатов + // Если файл с признаком шифрован, тогда при публикации + // файл снова шифруется для тех же сертификатов. Если ДанныеФайла.Зашифрован Тогда МассивСертификатов = Новый Массив; @@ -1645,21 +1682,22 @@ Если СтруктураСертификата.Сертификат <> Неопределено Тогда Сертификат = Новый СертификатКриптографии(СтруктураСертификата.Сертификат); Иначе - Сертификат = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьСертификатПоОтпечатку(СтруктураСертификата.Отпечаток); - КонецЕсли; + Сертификат = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьСертификатПоОтпечатку( + СтруктураСертификата.Отпечаток); + КонецЕсли; МассивСертификатов.Добавить(Сертификат); - КонецЦикла; + КонецЦикла; - Если МассивСертификатов.Количество() = 0 Тогда - СтруктураВозврата = ВыбратьСертификатыДляШифрования(ДанныеФайла); - Если ТипЗнч(СтруктураВозврата) = Тип("Массив") Тогда - МассивСертификатов = СтруктураВозврата; + Если МассивСертификатов.Количество() = 0 Тогда + СтруктураВозврата = ВыбратьСертификатыДляШифрования(ДанныеФайла); + Если ТипЗнч(СтруктураВозврата) = Тип("Массив") Тогда + МассивСертификатов = СтруктураВозврата; ЗаписатьСертификатыВТабличнуюЧасть(ДанныеФайла.Ссылка, МассивСертификатов, ИдентификаторФормы); - Иначе - Возврат Ложь; - КонецЕсли; - КонецЕсли; + Иначе + Возврат Ложь; + КонецЕсли; + КонецЕсли; ИмяФайлаСПутемШифрованное = ПолныйПутьКФайлу + ".crp"; МенеджерКриптографии.Зашифровать(ПолныйПутьКФайлу, ИмяФайлаСПутемШифрованное, МассивСертификатов); @@ -1667,16 +1705,15 @@ ПереместитьФайл(ПолныйПутьКФайлу, ИмяФайлаСПутемВременное); ПереместитьФайл(ИмяФайлаСПутемШифрованное, ПолныйПутьКФайлу); - КонецЕсли; + КонецЕсли; ИмяФайла = ФайлНовойВерсии.Имя; - ТекстПояснения = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выполняется передача файла ""%1"" (%2 Мб)... - |Пожалуйста, подождите.'"), - ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + |Пожалуйста, подождите.'"), + ИмяФайла, + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -1692,9 +1729,9 @@ Если ПомещенныеФайлы.Количество() = 1 Тогда АдресВременногоХранилища = ПомещенныеФайлы[0].Хранение; КонецЕсли; - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + + ПерсональныеНастройки = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); ОтносительныйПутьКФайлу = ""; @@ -1703,7 +1740,7 @@ ВРабочемКаталогеВладельца = ДанныеФайла.РабочийКаталогВладельца <> ""; - Если ДанныеФайла.РабочийКаталогВладельца <> "" Тогда // есть рабочий каталог + Если ДанныеФайла.РабочийКаталогВладельца <> "" Тогда // Есть рабочий каталог. ОтносительныйПутьКФайлу = ПолныйПутьКФайлу; Иначе Позиция = Найти(ПолныйПутьКФайлу, ИмяКаталога); @@ -1712,9 +1749,11 @@ КонецЕсли; КонецЕсли; - Если НЕ ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище( - ПолныйПутьКФайлу, ИдентификаторФормы); + Если НЕ ПерсональныеНастройки.ИзвлекатьТекстыФайловНаСервере Тогда + + АдресВременногоХранилищаТекста = + ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( + ПолныйПутьКФайлу, ИдентификаторФормы); Иначе АдресВременногоХранилищаТекста = ""; КонецЕсли; @@ -1825,7 +1864,7 @@ СоздатьНовуюВерсию = Результат.СоздатьНовуюВерсию; КомментарийКВерсии = Результат.КомментарийКВерсии; - Иначе // СоздатьНовуюВерсию и КомментарийКВерсии переданы извне + Иначе // СоздатьНовуюВерсию и КомментарийКВерсии переданы извне Если ХранитьВерсии Тогда @@ -1855,7 +1894,7 @@ ОтносительныйПутьКФайлу = ""; АдресВременногоХранилищаТекста = ""; - СтрокиПути = ФайловыеФункцииКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ВыбранныйПутьКФайлу); + СтрокиПути = ФайловыеФункцииСлужебныйКлиентСервер.РазложитьСтрокуПоТочкамИСлэшам(ВыбранныйПутьКФайлу); Если СтрокиПути.Количество() >= 2 Тогда Расширение = СтрокиПути[СтрокиПути.Количество()-1]; ИмяБезРасширения = СтрокиПути[СтрокиПути.Количество()-2]; @@ -1895,7 +1934,7 @@ ДанныеФайла.НавигационнаяСсылка, ДанныеФайла.ПолноеНаименованиеВерсии, БиблиотекаКартинок.Информация32); - КонецЕсли; + КонецЕсли; КонецЕсли; @@ -1903,7 +1942,7 @@ Возврат Истина; -КонецФункции // ОпубликоватьФайл() +КонецФункции // Процедура предназначена для интерактивного создания нового Файла // В частности, происходит вызов диалога выбора режима создания Файла @@ -1944,8 +1983,8 @@ // ТекущаяВерсия - СправочникСсылка.ВерсииФайлов - версия файла // НовоеИмя - Строка - Новое имя файла Процедура ОбновитьИнформациюВРабочемКаталоге(ТекущаяВерсия, НовоеИмя) Экспорт - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); ПолноеИмяФайла = ""; ВРабочемКаталогеНаЧтение = Истина; @@ -1981,8 +2020,7 @@ Возврат; КонецЕсли; - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); ПолноеИмяФайла = ""; ВРабочемКаталогеНаЧтение = Истина; @@ -2003,7 +2041,7 @@ // ШапкаВопроса - Строка - Шапка вопроса - добавляет текст к вопросу об удалении Процедура УдалитьФайл(ПолноеИмяФайла, ЗадаватьВопрос = Неопределено, ШапкаВопроса = Неопределено) Экспорт - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов; Если ЗадаватьВопрос <> Неопределено Тогда ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = ЗадаватьВопрос; КонецЕсли; @@ -2048,8 +2086,6 @@ ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ВРабочемКаталогеНаЧтение = Истина; ВРабочемКаталогеВладельца = Ложь; ФайлВРабочемКаталоге = ФайлНаходитсяВЛокальномКэшеФайлов(ДанныеФайла, ДанныеФайла.Версия, ПолноеИмяФайла, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); @@ -2135,7 +2171,7 @@ НаЧтение, ИдентификаторФормы, ДополнительныеПараметры); КонецЕсли; ИначеЕсли ДатаФайлаНаДиске > ДатаФайлаВБазе Тогда // В рабочем каталоге более новый (изменен пользователем со стороны) - ЗанятМной = (ДанныеФайла.Редактирует = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ТекущийПользователь); + ЗанятМной = (ДанныеФайла.Редактирует = ПользователиКлиентСервер.ТекущийПользователь()); Если (ВРабочемКаталогеНаЧтение = Ложь) И ЗанятМной Тогда // В рабочем каталоге на редактирование и занят текущим пользователем Возврат Истина; // Ничего делать не надо Иначе // В рабочем каталоге на чтение @@ -2187,8 +2223,6 @@ ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); РазмерФайлаВБазе = ДанныеФайла.Размер; - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ВРабочемКаталогеНаЧтение = Истина; ВРабочемКаталогеВладельца = Ложь; ФайлВРабочемКаталоге = ФайлНаходитсяВЛокальномКэшеФайлов(ДанныеФайла, ДанныеФайла.Версия, ПолноеИмяФайла, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); @@ -2428,12 +2462,10 @@ ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - // Формирование имени файла с расширением ИмяФайла = ДанныеФайла.ПолноеНаименованиеВерсии; Если НЕ ПустаяСтрока(ДанныеФайла.Расширение) Тогда - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ИмяФайла, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ИмяФайла, ДанныеФайла.Расширение); КонецЕсли; Если ПолноеИмяФайла = "" Тогда @@ -2485,8 +2517,7 @@ // размер и дата модификации одинаковы - используем его - зарегистрируем в кеше Если РазницаДат <= 1 И РазмерФайлаВБазе = РазмерФайлаНаДиске Тогда ФайлНаДиске.УстановитьТолькоЧтение(НаЧтение); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); РаботаСФайламиВызовСервера.ЗанестиИнформациюФайлаВРегистр(ДанныеФайла.Версия, ПолноеИмяФайла, ИмяКаталога, НаЧтение, РазмерФайлаВБазе, ВРабочемКаталогеВладельца); Возврат Истина; // используем находящийся на диске Файл КонецЕсли; @@ -2512,8 +2543,7 @@ Если Ответ = КодВозвратаДиалога.Да Тогда // Открыть существующий ФайлНаДиске.УстановитьТолькоЧтение(НаЧтение); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); РаботаСФайламиВызовСервера.ЗанестиИнформациюФайлаВРегистр(ДанныеФайла.Версия, ПолноеИмяФайла, ИмяКаталога, НаЧтение, РазмерФайлаВБазе, ВРабочемКаталогеВладельца); Возврат Истина; ИначеЕсли Ответ = КодВозвратаДиалога.Отмена ИЛИ Ответ = Неопределено Тогда // Выйти ничего не делая @@ -2648,7 +2678,7 @@ НаЧтение, ИдентификаторФормы, ДополнительныеПараметры); КонецЕсли; ИначеЕсли ДатаФайлаНаДиске > ДатаФайлаВБазе Тогда // В рабочем каталоге более новый (изменен пользователем со стороны) - ЗанятМной = (ДанныеФайла.Редактирует = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ТекущийПользователь); + ЗанятМной = (ДанныеФайла.Редактирует = ПользователиКлиентСервер.ТекущийПользователь()); Если (ВРабочемКаталогеНаЧтение = Ложь) И ЗанятМной Тогда // В рабочем каталоге на редактирование и занят текущим пользователем Возврат Истина; // Ничего делать не надо Иначе // В рабочем каталоге на чтение @@ -2707,12 +2737,10 @@ ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - // Формирование имени файла с расширением ИмяФайла = ДанныеФайла.ПолноеНаименованиеВерсии; Если НЕ ПустаяСтрока(ДанныеФайла.Расширение) Тогда - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ИмяФайла, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ИмяФайла, ДанныеФайла.Расширение); КонецЕсли; Если ПолноеИмяФайла = "" Тогда @@ -2764,8 +2792,7 @@ // размер и дата модификации одинаковы - используем его - зарегистрируем в кеше Если РазницаДат <= 1 И РазмерФайлаВБазе = РазмерФайлаНаДиске Тогда ФайлНаДиске.УстановитьТолькоЧтение(НаЧтение); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); РаботаСФайламиВызовСервера.ЗанестиИнформациюФайлаВРегистр(ДанныеФайла.Версия, ПолноеИмяФайла, ИмяКаталога, НаЧтение, РазмерФайлаВБазе, ВРабочемКаталогеВладельца); Возврат Истина; // используем находящийся на диске Файл @@ -2798,8 +2825,7 @@ Если Ответ = КодВозвратаДиалога.Да Тогда // Открыть существующий ФайлНаДиске.УстановитьТолькоЧтение(НаЧтение); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); РаботаСФайламиВызовСервера.ЗанестиИнформациюФайлаВРегистр(ДанныеФайла.Версия, ПолноеИмяФайла, ИмяКаталога, НаЧтение, РазмерФайлаВБазе, ВРабочемКаталогеВладельца); Возврат Истина; // используем находящийся на диске Файл @@ -2992,8 +3018,7 @@ Функция ПолучитьФайлВерсииВРабочийКаталог(ДанныеФайла, ПолноеИмяФайла, ИдентификаторФормы = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); Если ИмяКаталога = Неопределено ИЛИ ПустаяСтрока(ИмяКаталога) Тогда Возврат Ложь; КонецЕсли; @@ -3032,8 +3057,6 @@ ДатаФайлаВБазе = ДанныеФайла.ДатаМодификацииУниверсальная; ДатаФайлаВБазе = МестноеВремя(ДатаФайлаВБазе); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ВРабочемКаталогеНаЧтение = Истина; ВРабочемКаталогеВладельца = Ложь; ФайлВРабочемКаталоге = ФайлНаходитсяВЛокальномКэшеФайлов(ДанныеФайла, ДанныеФайла.Версия, ПолноеИмяФайла, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); @@ -3111,7 +3134,7 @@ УдалитьФайл(ПолноеИмяФайла, Ложь); // в рабочем каталоге настройка подтверждения при удалении не используется КонецЕсли; ИначеЕсли ДатаФайлаНаДиске > ДатаФайлаВБазе Тогда // В рабочем каталоге более новый (изменен пользователем со стороны) - ЗанятМной = (ДанныеФайла.Редактирует = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ТекущийПользователь); + ЗанятМной = (ДанныеФайла.Редактирует = ПользователиКлиентСервер.ТекущийПользователь()); Если (ВРабочемКаталогеНаЧтение = Ложь) И ЗанятМной Тогда // В рабочем каталоге на редактирование и занят текущим пользователем Возврат Истина; // Ничего делать не надо - т.е. не надо удалять из локального кеша и класть в рабочий каталог - т.к. пропадут изменения Иначе // В рабочем каталоге на чтение @@ -3155,13 +3178,13 @@ РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); Если РасширениеПодключено Тогда - ПерсональныеНастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройкиРаботыСФайлами = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); ТекстовыеФайлыСпособОткрытия = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыСпособОткрытия; Если ТекстовыеФайлыСпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда ТекстовыеФайлыРасширение = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыРасширение; - Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(ТекстовыеФайлыРасширение, ДанныеФайла.Расширение) Тогда + Если ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаВСписке(ТекстовыеФайлыРасширение, ДанныеФайла.Расширение) Тогда ПараметрыФормы = Новый Структура("Файл, ДанныеФайла, ИмяОткрываемогоФайла", ДанныеФайла.Ссылка, ДанныеФайла, ИмяОткрываемогоФайла); @@ -3178,7 +3201,7 @@ Схема = Новый ГрафическаяСхема; Схема.Прочитать(ИмяОткрываемогоФайла); - ЗаголовокСтрока = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ЗаголовокСтрока = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); Схема.Показать(ЗаголовокСтрока, ИмяОткрываемогоФайла); Возврат; @@ -3217,7 +3240,6 @@ // проверим - если файл уже есть в кеше, и он новее чем в базе - дадим диалог с выбором ПутьКФайлуВКеше = ""; Если ДанныеФайла.РедактируетТекущийПользователь Тогда - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); ВРабочемКаталогеНаЧтение = Истина; ВРабочемКаталогеВладельца = Ложь; ПолноеИмяФайла = ""; @@ -3321,7 +3343,7 @@ КонецЕсли; - ИмяСРасширением = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ИмяСРасширением = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); Расширение = ДанныеФайла.Расширение; Если НЕ СохранятьСРасшифровкой Тогда @@ -3348,7 +3370,7 @@ АдресФайла = РаботаСФайламиВызовСервера.ПолучитьНавигационнуюСсылкуДляОткрытия(ДанныеФайла.Версия, УникальныйИдентификатор); КонецЕсли; - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); РазмерВМб = ДанныеФайла.Размер / (1024 * 1024); ТекстПояснения = @@ -3356,7 +3378,7 @@ НСтр("ru = 'Выполняется сохранение файла ""%1"" (%2 Мб)... |Пожалуйста, подождите.'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -3433,7 +3455,7 @@ Иначе // веб клиент АдресФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); РазмерВМб = ДанныеФайла.Размер / (1024 * 1024); ТекстПояснения = @@ -3441,7 +3463,7 @@ НСтр("ru = 'Выполняется сохранение файла ""%1"" (%2 Мб)... |Пожалуйста, подождите.'"), ИмяФайла, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -3470,11 +3492,11 @@ #Если НЕ ВебКлиент Тогда ПолноеИмяФайла = ПолучитьПутьФайлаВРабочемКаталоге(ДанныеФайла); - Если ФайловыеФункцииКлиент.ОткрытьПроводникСФайлом(ПолноеИмяФайла) = Истина Тогда + Если ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(ПолноеИмяФайла) = Истина Тогда Возврат; КонецЕсли; - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); КодВозврата = Вопрос(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файл ""%1"" отсутствует в рабочем каталоге. Получить файл с сервера?'"), ИмяФайла), @@ -3482,7 +3504,7 @@ Если КодВозврата = КодВозвратаДиалога.Да Тогда ПолучитьФайлВерсииВРабочийКаталог(ДанныеФайла, ПолноеИмяФайла); - ФайловыеФункцииКлиент.ОткрытьПроводникСФайлом(ПолноеИмяФайла); + ФайловыеФункцииСлужебныйКлиент.ОткрытьПроводникСФайлом(ПолноеИмяФайла); КонецЕсли; // для варианта с хранением файлов на диске (на сервере) удаляем Файл из временного хранилища после получения @@ -3658,11 +3680,11 @@ ФайлНаДиске = Новый Файл(ДиалогПолноеИмяФайла); ИмяИРасширениеФайлаНаДиске = ФайлНаДиске.Имя; ВремяИзмененияВыбранное = ФайлНаДиске.ПолучитьВремяИзменения(); - РасширениеФайлаНаДиске = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(ФайлНаДиске.Расширение); + РасширениеФайлаНаДиске = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(ФайлНаДиске.Расширение); ИмяФайла = ФайлНаДиске.ИмяБезРасширения; - ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СписокЗапрещенныхРасширений; + ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СписокЗапрещенныхРасширений; РасширениеДляЗашифрованныхФайлов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьПерсональныеНастройкиРаботыСЭЦП().РасширениеДляЗашифрованныхФайлов; @@ -3681,9 +3703,9 @@ ДиалогПолноеИмяФайла = Лев(ДиалогПолноеИмяФайла, Позиция - 2); ВрФайлНешифрованный = Новый Файл(ДиалогПолноеИмяФайла); - РасширениеФайлаНаДиске = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(ВрФайлНешифрованный.Расширение); + РасширениеФайлаНаДиске = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(ВрФайлНешифрованный.Расширение); - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайлаНаДиске) Тогда + Если Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайлаНаДиске) Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Загрузка файлов с расширением ""%1"" запрещена. Обратитесь к администратору системы.'"), @@ -3710,7 +3732,7 @@ МенеджерКриптографии.Расшифровать(ДиалогПолноеИмяФайлаПрежнее, ДиалогПолноеИмяФайла); ВрФайлНешифрованный = Новый Файл(ДиалогПолноеИмяФайла); - РасширениеФайлаНаДиске = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(ВрФайлНешифрованный.Расширение); + РасширениеФайлаНаДиске = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(ВрФайлНешифрованный.Расширение); ВрФайлНешифрованный.УстановитьВремяИзменения(ВремяИзмененияВыбранное); КонецЕсли; @@ -3720,7 +3742,7 @@ ПредыдущаяВерсия = ДанныеФайла.Версия; - ИмяИРасширениеФайлаВБазе = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ИмяИРасширениеФайлаВБазе = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); РедактируетТекущийПользователь = ДанныеФайла.РедактируетТекущийПользователь; @@ -3738,7 +3760,6 @@ // проверим - есть ли файл в локальном кеше - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); ВРабочемКаталогеНаЧтение = Истина; ВРабочемКаталогеВладельца = Ложь; ПолноеИмяФайла = ""; @@ -3817,7 +3838,7 @@ НовоеПолноеИмяФайла = ""; ДанныеФайла.Вставить("ПутьОбновленияИзФайлаНаДиске", ДиалогПолноеИмяФайла); - ДанныеФайла.Расширение = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(РасширениеФайлаНаДиске); + ДанныеФайла.Расширение = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(РасширениеФайлаНаДиске); // помещаем в рабочий каталог - берем не из базы, а из выбранного файла на диске ПолучитьФайлВерсииВРабочийКаталог(ДанныеФайла, НовоеПолноеИмяФайла, ИдентификаторФормы); @@ -3905,7 +3926,7 @@ Диалог.ПроверятьСуществованиеФайла = Ложь; Диалог.МножественныйВыбор = Ложь; Диалог.Каталог = ПутьВыбора; - Диалог.ПолноеИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + Диалог.ПолноеИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); Диалог.Фильтр = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Файл (*.%1)|*.%1|Все файлы (*.*)|*.*'"), ДанныеФайла.Расширение, ДанныеФайла.Расширение); @@ -3937,12 +3958,12 @@ // Функция ПоказатьЗанятыеФайлыПриЗавершенииРаботы() Экспорт - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПоказыватьЗанятыеФайлыПриЗавершенииРаботы; + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ПоказыватьЗанятыеФайлыПриЗавершенииРаботы; Если НЕ ПоказыватьЗанятыеФайлыПриЗавершенииРаботы Тогда Возврат Ложь; КонецЕсли; - ТекущийПользователь = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ТекущийПользователь; + ТекущийПользователь = ПользователиКлиентСервер.ТекущийПользователь(); КоличествоЗанятыхФайлов = РаботаСФайламиВызовСервера.ПолучитьКоличествоЗанятыхФайлов(, ТекущийПользователь); Если КоличествоЗанятыхФайлов > 0 Тогда @@ -3970,17 +3991,21 @@ // Функция ПроверитьЗанятыеФайлыПриЗавершенииРаботы() - ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПоказыватьЗанятыеФайлыПриЗавершенииРаботы; + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда + Возврат Неопределено; + КонецЕсли; + + ПоказыватьЗанятыеФайлыПриЗавершенииРаботы = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ПоказыватьЗанятыеФайлыПриЗавершенииРаботы; Если НЕ ПоказыватьЗанятыеФайлыПриЗавершенииРаботы Тогда Возврат Неопределено; КонецЕсли; - ТекущийПользователь = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ТекущийПользователь; + ТекущийПользователь = ПользователиКлиентСервер.ТекущийПользователь(); КоличествоЗанятыхФайлов = РаботаСФайламиВызовСервера.ПолучитьКоличествоЗанятыхФайлов(, ТекущийПользователь); Если КоличествоЗанятыхФайлов = 0 Тогда Возврат Неопределено; - КонецЕсли; + КонецЕсли; ПараметрыПрикладнойФормыПредупреждения = Новый Структура; ПараметрыПрикладнойФормыПредупреждения.Вставить("СообщениеВопрос", НСтр("ru = 'Завершить работу с программой?'")); @@ -4190,7 +4215,7 @@ МенеджерКриптографии.ПарольДоступаКЗакрытомуКлючу = Пароль; МассивДанныхДляЗанесенияВБазу = Новый Массив; - ИзвлекатьТекстыФайловНаСервере = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере; + ИзвлекатьТекстыФайловНаСервере = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере; Для Каждого СтруктураДляШифрования Из МассивОбъектовШифрования Цикл @@ -4206,7 +4231,7 @@ ПолныйПутьКФайлу = ПолучитьИмяВременногоФайла(СтруктураДляШифрования.Расширение); ДвоичныеДанныеРасшифрованные.Записать(ПолныйПутьКФайлу); - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище( + АдресВременногоХранилищаТекста = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( ПолныйПутьКФайлу, УникальныйИдентификаторФормы); УдалитьФайлы(ПолныйПутьКФайлу); @@ -4303,9 +4328,7 @@ Процедура ОчиститьРабочийКаталог(РазмерФайловВРабочемКаталоге, РазмерДобавляемогоФайла, ОчищатьВсе) Экспорт #Если Не ВебКлиент Тогда - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); ТаблицаФайлов = Новый Массив; @@ -4317,7 +4340,7 @@ // сортировка по дате - в начале будут самые давно помещенные в рабочий каталог РаботаСФайламиВызовСервера.СортироватьМассивСтруктур(ТаблицаФайлов); - МаксРазмер = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерЛокальногоКэшаФайлов; + МаксРазмер = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерЛокальногоКэшаФайлов; СреднийРазмерФайла = 1000; Если ТаблицаФайлов.Количество() <> 0 Тогда @@ -4373,7 +4396,7 @@ УдалитьФайл(ПолныйПуть, Неопределено, ШапкаВопроса); ПутьСПодкаталогом = ИмяКаталога; - Позиция = Найти(Строка.Путь, ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента())); + Позиция = Найти(Строка.Путь, ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента())); Если Позиция <> 0 Тогда ПутьСПодкаталогом = ИмяКаталога + Лев(Строка.Путь, Позиция); КонецЕсли; @@ -4415,13 +4438,13 @@ Перем Версия; Перем ДатаПомещения; - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); Для Каждого ВыбранныйФайл Из МассивФайлов Цикл Если ВыбранныйФайл.ЭтоКаталог() Тогда НовыйПуть = Строка(Путь); - НовыйПуть = НовыйПуть + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + НовыйПуть = НовыйПуть + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); МассивФайловВКаталоге = НайтиФайлы(НовыйПуть, "*.*"); @@ -4484,9 +4507,7 @@ // УдалитьДажеВРабочемКаталоге - Булево - Удалить даже в рабочем каталоге Процедура УдалитьФайлИзРабочегоКаталога(Ссылка, УдалитьДажеВРабочемКаталоге = Неопределено) Экспорт - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); ВРабочемКаталогеНаЧтение = Ложь; ВРабочемКаталогеВладельца = Ложь; @@ -4506,7 +4527,7 @@ УдалитьФайл(ИмяФайлаСПутем); ПутьСПодкаталогом = ИмяКаталога; - Позиция = Найти(ПутьВРегистре, ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента())); + Позиция = Найти(ПутьВРегистре, ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента())); Если Позиция <> 0 Тогда ПутьСПодкаталогом = ИмяКаталога + Лев(ПутьВРегистре, Позиция); КонецЕсли; @@ -4540,8 +4561,7 @@ ПутьДляВозврата = ""; ИмяФайлаСПутем = ""; - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); // Сперва пытаемся найти такую запись в регистре сведений ИмяФайлаСПутем = ДанныеФайла.ИмяФайлаСПутемВРабочемКаталоге; @@ -4559,7 +4579,7 @@ ИмяФайла = ДанныеФайла.ПолноеНаименованиеВерсии; Расширение = ДанныеФайла.Расширение; Если Не ПустаяСтрока(Расширение) Тогда - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ИмяФайла, Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ИмяФайла, Расширение); КонецЕсли; ИмяФайлаСПутем = ""; @@ -4567,7 +4587,7 @@ Если НЕ ПустаяСтрока(ДанныеФайла.РабочийКаталогВладельца) Тогда ИмяФайлаСПутем = ДанныеФайла.РабочийКаталогВладельца + ДанныеФайла.ПолноеНаименованиеВерсии + "." + ДанныеФайла.Расширение; Иначе - ИмяФайлаСПутем = ФайловыеФункцииКлиентСервер.ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ИмяФайлаСПутем = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); КонецЕсли; КонецЕсли; @@ -4633,7 +4653,7 @@ // Покажет напоминание - если стоит настройка Процедура ПоказатьНапоминаниеПередПоместитьФайл() - Если ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПоказыватьПодсказкиПриРедактированииФайлов = Истина Тогда + Если ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ПоказыватьПодсказкиПриРедактированииФайлов = Истина Тогда РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); Если НЕ РасширениеПодключено Тогда @@ -4669,7 +4689,7 @@ ВРабочемКаталогеНаЧтение = ДанныеФайла.ВРабочемКаталогеНаЧтение; Иначе ВРабочемКаталогеНаЧтение = Истина; - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); // Пытаемся найти такую запись в регистре сведений ИмяФайлаСПутем = РаботаСФайламиВызовСервера.ПолучитьИмяФайлаСПутемИзРегистра(ТекущаяВерсия, ИмяКаталога, ВРабочемКаталогеНаЧтение, ВРабочемКаталогеВладельца); КонецЕсли; @@ -4693,31 +4713,33 @@ // Параметры // РеквизитыВерсии - структура с реквизитами версии Процедура ОсвободитьМестоВРабочемКаталоге(РеквизитыВерсии) + +#Если НЕ ВебКлиент Тогда - #Если НЕ ВебКлиент Тогда - МаксРазмер = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерЛокальногоКэшаФайлов; - - // Если размер РабочийКаталог стоит равным 0, то считать что никакого ограничения нет - // и умолчание в 10 Мб не использовать. - Если МаксРазмер = 0 Тогда - Возврат; - КонецЕсли; - - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; - - МассивФайлов = НайтиФайлы(ИмяКаталога, "*.*"); - - РазмерФайловВРабочемКаталоге = 0; - КоличествоСуммарное = 0; - // Вычисляем полный размер файлов в рабочем каталоге - ФайловыеФункцииКлиент.ОбходФайловРазмер(ИмяКаталога, МассивФайлов, РазмерФайловВРабочемКаталоге, КоличествоСуммарное); - - Размер = РеквизитыВерсии.Размер; - Если РазмерФайловВРабочемКаталоге + Размер > МаксРазмер Тогда - ОчиститьРабочийКаталог(РазмерФайловВРабочемКаталоге, Размер, Ложь); // ОчищатьВсе= Ложь - КонецЕсли; - #КонецЕсли + МаксРазмер = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерЛокальногоКэшаФайлов; + + // Если размер РабочийКаталог установлен равным 0, + // то считается, что никакого ограничения нет и умолчание в 10 Мб не используется. + Если МаксРазмер = 0 Тогда + Возврат; + КонецЕсли; + + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); + + МассивФайлов = НайтиФайлы(ИмяКаталога, "*.*"); + + РазмерФайловВРабочемКаталоге = 0; + КоличествоСуммарное = 0; + // Вычисление полного размера файлов в рабочем каталоге. + ФайловыеФункцииСлужебныйКлиент.ОбходФайловРазмер(ИмяКаталога, МассивФайлов, РазмерФайловВРабочемКаталоге, КоличествоСуммарное); + + Размер = РеквизитыВерсии.Размер; + Если РазмерФайловВРабочемКаталоге + Размер > МаксРазмер Тогда + ОчиститьРабочийКаталог(РазмерФайловВРабочемКаталоге, Размер, Ложь); // ОчищатьВсе = Ложь. + КонецЕсли; + +#КонецЕсли + КонецПроцедуры // Выбрать путь к рабочему каталогу @@ -4977,19 +4999,18 @@ ВРабочемКаталогеВладельца = ДанныеФайла.РабочийКаталогВладельца <> ""; Если ИмяФайлаСПутем = "" Тогда - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); ИмяКаталогаПрежнееЗначение = ИмяКаталога; // Формирование имени файла с расширением ИмяФайла = ДанныеФайла.ПолноеНаименованиеВерсии; Если НЕ ПустаяСтрока(ДанныеФайла.Расширение) Тогда - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ИмяФайла, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ИмяФайла, ДанныеФайла.Расширение); КонецЕсли; ИмяФайлаСПутем = ""; Если НЕ ПустаяСтрока(ИмяФайла) Тогда - ИмяФайлаСПутем = ФайловыеФункцииКлиентСервер.ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ИмяФайлаСПутем = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); ИмяФайлаСПутем = ИмяКаталога + ИмяФайлаСПутем; КонецЕсли; @@ -5046,30 +5067,28 @@ Заголовок = НСтр("ru = 'Выберите другой путь к основному рабочему каталогу'"); Если Не ВыбратьПутьКРабочемуКаталогу(ИмяКаталога, Заголовок, Ложь) Тогда Возврат Ложь; - КонецЕсли; + КонецЕсли; - ИмяФайлаСПутем = ФайловыеФункцииКлиентСервер.ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ИмяФайлаСПутем = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ИмяКаталога, ИмяФайла, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); ИмяФайлаСПутем = ИмяКаталога + ИмяФайлаСПутем; Если СтрДлина(ИмяФайлаСПутем) <= МаксимальнаяДлинаПолногоПути Тогда // уложились в 260 символов Если ПеренестиСодержимоеРабочегоКаталога(ИмяКаталогаПрежнееЗначение, ИмяКаталога) Тогда - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов", ИмяКаталога); - ОбновитьПовторноИспользуемыеЗначения(); - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - Иначе + ФайловыеФункцииСлужебныйКлиент.УстановитьРабочийКаталогПользователя(ИмяКаталога); + Иначе Возврат Ложь; КонецЕсли; - Прервать; - КонецЕсли; + Прервать; + КонецЕсли; КонецЦикла; КонецЕсли; #КонецЕсли - КонецЕсли; + КонецЕсли; КонецЕсли; @@ -5088,7 +5107,7 @@ АдресФайла = ДанныеФайла.НавигационнаяСсылкаТекущейВерсии; - ИмяФайла = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); + ИмяФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением(ДанныеФайла.ПолноеНаименованиеВерсии, ДанныеФайла.Расширение); РазмерВМб = ДанныеФайла.Размер / (1024 * 1024); ФайлНаДискеПоИмени = Новый Файл(ИмяФайлаСПутем); @@ -5107,7 +5126,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Выполняется передача файла ""%1"" (%2 Мб)... |Пожалуйста, подождите.'"), - ИмяФайла, ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ИмяФайла, ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); Состояние(ТекстПояснения); @@ -5225,8 +5244,7 @@ Возврат Ложь; КонецПопытки; - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); РаботаСФайламиВызовСервера.ЗанестиИнформациюФайлаВРегистр(ДанныеФайла.Версия, ИмяФайлаСПутем, ИмяКаталога, НаЧтение, РазмерФайла, ВРабочемКаталогеВладельца); @@ -5250,12 +5268,12 @@ // ВРабочемКаталогеВладельца - Булево - файл в рабочем каталоге владельца (а не в основном рабочем каталоге) Процедура ПеререгистрироватьВРабочемКаталоге(ТекущаяВерсия, ИмяФайлаСПутем, НаЧтение, ВРабочемКаталогеВладельца) - ФайловыеФункцииКлиент.ПроинициализироватьПутьКРабочемуКаталогу(); - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПутьКЛокальномуКэшуФайлов; + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.РабочийКаталогПользователя(); РаботаСФайламиВызовСервера.ЗанестиИнформациюФайлаВРегистр(ТекущаяВерсия, ИмяФайлаСПутем, ИмяКаталога, НаЧтение, 0, ВРабочемКаталогеВладельца); Файл = Новый Файл(ИмяФайлаСПутем); - Файл.УстановитьТолькоЧтение(НаЧтение); + Файл.УстановитьТолькоЧтение(НаЧтение); + КонецПроцедуры // Рекурсивная функция импорта файлов с диска - принимает массив файлов (или каталогов) @@ -5298,9 +5316,9 @@ Перем ПерваяПапкаСТакимЖеИменем; Перем ДокГруппаСсылка; - МаксРазмерФайла = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерФайла; - ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ЗапретЗагрузкиФайловПоРасширению; - СписокЗапрещенныхРасширений = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().СписокЗапрещенныхРасширений; + МаксРазмерФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерФайла; + ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ЗапретЗагрузкиФайловПоРасширению; + СписокЗапрещенныхРасширений = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().СписокЗапрещенныхРасширений; Для Каждого ВыбранныйФайл Из ФайлыАргумент Цикл Попытка @@ -5317,7 +5335,7 @@ НовыйПуть = Строка(ВыбранныйФайл.Путь); НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); - МассивФайлов = ФайловыеФункцииКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); + МассивФайлов = ФайловыеФункцииСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); // Создаем группу в справочнике - эквивалент папки на диске Если МассивФайлов.Количество() <> 0 Тогда @@ -5374,7 +5392,7 @@ Продолжить; КонецЕсли; - Если Не ФайловыеФункцииКлиентСервер.ФайлМожноЗагружать(ВыбранныйФайл, МаксРазмерФайла, ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, МассивИменФайловСОшибками) Тогда + Если Не ФайловыеФункцииСлужебныйКлиентСервер.ФайлМожноЗагружать(ВыбранныйФайл, МаксРазмерФайла, ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, МассивИменФайловСОшибками) Тогда Продолжить; КонецЕсли; @@ -5386,7 +5404,7 @@ СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Обрабатывается файл ""%1"" (%2 Мб)...'"), ВыбранныйФайл.Имя, - ФайловыеФункцииКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСтрокуСРазмеромФайла(РазмерВМб)); ТекстСостояния = НСтр("ru = 'Импорт файлов с диска...'"); Если РежимЗагрузки Тогда @@ -5431,8 +5449,8 @@ АдресВременногоХранилищаФайла = ПомещенныеФайлы[0].Хранение; КонецЕсли; - Если НЕ ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда - АдресВременногоХранилищаТекста = ФайловыеФункцииКлиентСервер.ИзвлечьТекстВоВременноеХранилище( + Если НЕ ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ИзвлекатьТекстыФайловНаСервере Тогда + АдресВременногоХранилищаТекста = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекстВоВременноеХранилище( ВыбранныйФайл.ПолноеИмя, ИдентификаторФормы, Ложь, @@ -5549,7 +5567,7 @@ Если ВыбранКаталог Тогда Путь = ИмяФайла.Значение; - МассивФайловЭтогоКаталога = ФайловыеФункцииКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, Путь); + МассивФайловЭтогоКаталога = ФайловыеФункцииСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, Путь); ИмяПапки = ВыбранныйФайл.Имя; @@ -5646,7 +5664,7 @@ КонецЕсли; Если УдалятьФайлыПослеДобавления = Истина Тогда - ФайловыеФункцииКлиентСервер.УдалитьФайлыПослеДобавления(МассивСтруктурВсехФайлов, МассивВсехПапок, РежимЗагрузки); + ФайловыеФункцииСлужебныйКлиентСервер.УдалитьФайлыПослеДобавления(МассивСтруктурВсехФайлов, МассивВсехПапок, РежимЗагрузки); КонецЕсли; Если МассивСтруктурВсехФайлов.Количество() = 1 Тогда @@ -5717,7 +5735,7 @@ НСтр("ru = 'Идет сбор информации о каталоге ""%1"". |Пожалуйста, подождите.'"), Путь )); - МассивФайловЭтогоКаталога = ФайловыеФункцииКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, Путь); + МассивФайловЭтогоКаталога = ФайловыеФункцииСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, Путь); ОбходФайловДляПроверкиПредельногоРазмера(МассивФайловЭтогоКаталога, МассивСлишкомБольшихФайлов, Рекурсивно, КоличествоСуммарное, ПсевдоФайловаяСистема); Иначе МассивФайлов.Добавить(ВыбранныйФайл); @@ -5774,7 +5792,7 @@ КоличествоСуммарное, Знач ПсевдоФайловаяСистема) Экспорт - МаксРазмерФайла = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерФайла; + МаксРазмерФайла = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().МаксимальныйРазмерФайла; Для Каждого ВыбранныйФайл Из МассивФайлов Цикл @@ -5791,7 +5809,7 @@ НовыйПуть = Строка(ВыбранныйФайл.Путь); НовыйПуть = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(НовыйПуть, ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); - МассивФайловВКаталоге = ФайловыеФункцииКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); + МассивФайловВКаталоге = ФайловыеФункцииСлужебныйКлиентСервер.НайтиФайлыПсевдо(ПсевдоФайловаяСистема, НовыйПуть); // Рекурсия Если МассивФайловВКаталоге.Количество() <> 0 Тогда @@ -5874,7 +5892,7 @@ // Покажет напоминание - если стоит настройка Процедура ПоказатьИнформациюФайлНеБылИзменен() - Если ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПоказыватьИнформациюЧтоФайлНеБылИзменен = Истина Тогда + Если ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ПоказыватьИнформациюЧтоФайлНеБылИзменен = Истина Тогда БольшеНеПоказывать = ОткрытьФормуМодально("Справочник.Файлы.Форма.ИнформацияФайлНеБылИзменен"); @@ -5892,7 +5910,7 @@ МассивСтруктурСертификатов = ЭлектроннаяЦифроваяПодписьКлиент.ПолучитьМассивСтруктурСертификатов(Ложь); - ОтпечатокЛичногоСертификатаДляШифрования = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ОтпечатокЛичногоСертификатаДляШифрования; + ОтпечатокЛичногоСертификатаДляШифрования = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами().ОтпечатокЛичногоСертификатаДляШифрования; // отпечаток сохраненный в ХранилищеНастроек мог устареть - сертификат могли уже удалить Если ОтпечатокЛичногоСертификатаДляШифрования <> Неопределено И НЕ ПустаяСтрока(ОтпечатокЛичногоСертификатаДляШифрования) Тогда @@ -5995,13 +6013,13 @@ Функция ВыбратьРежимИРедактироватьФайл(ДанныеФайла, ДоступностьКомандыРедактировать) Экспорт РедактированиеВоВстроенномРедакторе = Ложь; - ПерсональныеНастройкиРаботыСФайлами = ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); + ПерсональныеНастройкиРаботыСФайлами = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); ТекстовыеФайлыСпособОткрытия = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыСпособОткрытия; Если ТекстовыеФайлыСпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда ТекстовыеФайлыРасширение = ПерсональныеНастройкиРаботыСФайлами.ТекстовыеФайлыРасширение; - Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(ТекстовыеФайлыРасширение, ДанныеФайла.Расширение) Тогда + Если ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаВСписке(ТекстовыеФайлыРасширение, ДанныеФайла.Расширение) Тогда РедактированиеВоВстроенномРедакторе = Истина; КонецЕсли; @@ -6011,7 +6029,7 @@ Если ГрафическиеСхемыСпособОткрытия = ПредопределенноеЗначение("Перечисление.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе") Тогда ГрафическиеСхемыРасширение = ПерсональныеНастройкиРаботыСФайлами.ГрафическиеСхемыРасширение; - Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(ГрафическиеСхемыРасширение, ДанныеФайла.Расширение) Тогда + Если ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаВСписке(ГрафическиеСхемыРасширение, ДанныеФайла.Расширение) Тогда РедактированиеВоВстроенномРедакторе = Истина; КонецЕсли; diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl index a776da55c..562c7b8e7 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентПереопределяемый/Module.bsl @@ -1,3 +1,8 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// + // Вызывается при ошибке захвате файла // Параметры // ДанныеФайла - Структура - структура с данными файла diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентПовтИсп/Module.bsl index d171fbb5f..8a0530241 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентПовтИсп/Module.bsl @@ -1,6 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// МОДУЛЬ СОДЕРЖИТ ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ФАЙЛАМИ +// Подсистема "Работа с файлами". // +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Возвращает форму, которая используется при создании нового файла // для выбора варианта создания diff --git a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl index c7a7dbd10..5092f9f88 100644 --- a/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиКлиентСервер/Module.bsl @@ -1,5 +1,10 @@ //////////////////////////////////////////////////////////////////////////////// -// Модуль процедур, исполняемых на сервере и на клиенте +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Определяет, можно ли занять файл и, если нет, то формирует строку ошибки // @@ -42,7 +47,7 @@ ИмяБезРасширения = ВыбранныйФайл.ИмяБезРасширения; Расширение = ВыбранныйФайл.Расширение; - Расширение = ФайловыеФункцииКлиентСервер.РасширениеБезТочки(ВыбранныйФайл.Расширение); + Расширение = ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(ВыбранныйФайл.Расширение); ВремяИзменения = ВыбранныйФайл.ПолучитьВремяИзменения(); ВремяИзмененияУниверсальное = ВыбранныйФайл.ПолучитьУниверсальноеВремяИзменения(); Размер = ВыбранныйФайл.Размер(); @@ -93,7 +98,7 @@ КонецФункции ///////////////////////////////////////////////////////////////////////////////////////// -// РАБОТА С КОДИРОВКАМИ +// Работа с кодировками // Функция возвращает таблицу имен кодировок // Возвращаемое значение: diff --git a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl index 311e60f1c..2df1ca73e 100644 --- a/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РаботаСФайламиПереопределяемый/Module.bsl @@ -1,3 +1,7 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Подключение управления доступом в подсистеме РаботаСФайламиВызовСервера. diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl new file mode 100644 index 000000000..44dc64a28 --- /dev/null +++ b/SSL/src/CommonModules/РаботаСФайламиСлужебный/Module.bsl @@ -0,0 +1,315 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры используемые при обмене данными + +Процедура ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента, Знач СозданиеНачальногоОбраза = Ложь, Получатель = Неопределено) Экспорт + + Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить + ИЛИ ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВерсииФайлов") Тогда + + Если СозданиеНачальногоОбраза Тогда + + Если ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + Если Получатель <> Неопределено + И Получатель.ДополнительныеСвойства.Свойство("РазмещатьФайлыВНачальномОбразе") Тогда + + // Помещаем данные файла из тома на диске в служебный реквизит справочника + ПоместитьФайлВРеквизитСправочника(ЭлементДанных); + + Иначе + + // Копируем файл из тома на диске в каталог создания начального образа + ИмяКаталогаФайлов = ХранилищеОбщихНастроек.Загрузить("ОбменФайлами", "ВременныйКаталог"); + + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ЭлементДанных.Том) + ЭлементДанных.ПутьКФайлу; + УникальныйИдентификатор = ЭлементДанных.Ссылка.УникальныйИдентификатор(); + + НовыйПутьФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + ИмяКаталогаФайлов, + УникальныйИдентификатор + ); + + ФайловыеФункцииСлужебный.СкопироватьФайлПриСозданииНачальногоОбраза(ПолныйПуть, НовыйПутьФайла); + + КонецЕсли; + + Иначе + + // Если файл хранится в ИБ, то при создании начального образа + // он будет выгружен в составе регистра сведений ХранимыеФайлыВерсий. + + КонецЕсли; + + Иначе + + Если ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + // Помещаем данные файла из тома на диске в служебный реквизит справочника + ПоместитьФайлВРеквизитСправочника(ЭлементДанных); + + Иначе // Перечисления.ТипыХраненияФайлов.ВИнформационнойБаза + + Попытка + // Помещаем данные файла из информационной базы в служебный реквизит справочника + АдресВоВременномХранилище = РаботаСФайламиВызовСервера.ПолучитьНавигационнуюСсылкуВоВременномХранилище(ЭлементДанных.Ссылка); + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВоВременномХранилище), Новый СжатиеДанных(9)); + Исключение + // Возможно, файл не был найден. Отправку данных не прерываем. + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + КонецПопытки; + + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + ЭлементДанных.ПутьКФайлу = ""; + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + + КонецЕсли; + + КонецЕсли; + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ХранимыеФайлыВерсий") + И Не СозданиеНачальногоОбраза Тогда + + // Выгрузку регистра выполняем только при создании начального образа + ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать; + + КонецЕсли; + +КонецПроцедуры + +Процедура ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента) Экспорт + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Файлы") + И ПолучениеФайлаЗапрещено(ЭлементДанных) Тогда + + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВерсииФайлов") Тогда + + Если ПолучениеВерсииФайлаЗапрещено(ЭлементДанных) Тогда + + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + Возврат; + КонецЕсли; + + // Для существующих файлов, размещенных в томах, выполняем их удаление из томов, + // т.к. при получении нового файла он будет заново размещен в томе или информационной базе. + Если НЕ ЭлементДанных.ЭтоНовый() Тогда + + ВерсияФайла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ЭлементДанных.Ссылка, "ТипХраненияФайла, Том, ПутьКФайлу"); + + Если ВерсияФайла.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + ПрежнийПутьНаТоме = ФайловыеФункцииСлужебный.ПолныйПутьТома(ВерсияФайла.Том) + ВерсияФайла.ПутьКФайлу; + + ФайловыеФункцииСлужебный.УдалитьФайлыНаСервере(ПрежнийПутьНаТоме); + + КонецЕсли; + + КонецЕсли; + + Если ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда + + // По обмену пришел элемент с хранением в базе - но в базе приемнике принято хранить в томах. + // Из служебного реквизита файл размещаем на томе и меняем ТипХраненияФайла на ВТомахНаДиске. + + ПутьКФайлуНаТоме = ""; + СсылкаНаТом = Неопределено; + + // добавить в один из томов (где есть свободное место) + ФайловыеФункцииСлужебный.ДобавитьНаДиск( + ЭлементДанных.ФайлХранилище.Получить(), + ПутьКФайлуНаТоме, + СсылкаНаТом, + ЭлементДанных.ДатаМодификацииУниверсальная, + ЭлементДанных.НомерВерсии, + ЭлементДанных.Наименование, + ЭлементДанных.Расширение, + ЭлементДанных.Размер, + ЭлементДанных.Зашифрован + ); + + ЭлементДанных.ПутьКФайлу = ПутьКФайлуНаТоме; + ЭлементДанных.Том = СсылкаНаТом; + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; + + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + + Иначе + + ДвоичныеДанные = ЭлементДанных.ФайлХранилище.Получить(); + + Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда + ЭлементДанных.ДополнительныеСвойства.Вставить("ДвоичныеДанныеФайла", ДвоичныеДанные); + КонецЕсли; + + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + ЭлементДанных.ПутьКФайлу = ""; + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры используемые в модуле СтандартныеПодсистемыПереопределяемый + +// Возвращает Истина, если это элемент данных, относящийся к подсистеме РаботаСФайлами +// +Функция ЭтоЭлементРаботаСФайлами(ЭлементДанных) Экспорт + + Возврат ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВерсииФайлов") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникСсылка.ВерсииФайлов"); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события + +// Обработчик подписки "при записи" версии файла +// +Процедура ВерсииФайловПриЗаписиПриЗаписи(Источник, Отказ) Экспорт + + Если Источник.ОбменДанными.Загрузка Тогда + ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник); + Возврат; + КонецЕсли; + + Если Источник.ДополнительныеСвойства.Свойство("ПереименованиеФайла") Тогда + Возврат; + КонецЕсли; + + Если Источник.ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда + Возврат; + КонецЕсли; + + // копируем реквизиты из версии в файл + ТекущаяВерсия = Источник; + Если Не ТекущаяВерсия.Ссылка.Пустая() Тогда + + ФайлСсылка = Источник.Владелец; + + РеквизитыФайла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ФайлСсылка, + "ИндексКартинки, ТекущаяВерсияРазмер, ТекущаяВерсияДатаСоздания, ТекущаяВерсияАвтор, ТекущаяВерсияРасширение, ТекущаяВерсияНомерВерсии, ТекущаяВерсияТом, ТекущаяВерсияПутьКФайлу, ТекущаяВерсияКод, ТекущаяВерсияДатаМодификацииФайла"); + + Если РеквизитыФайла.ТекущаяВерсияРазмер <> ТекущаяВерсия.Размер + ИЛИ РеквизитыФайла.ТекущаяВерсияДатаСоздания <> ТекущаяВерсия.ДатаСоздания + ИЛИ РеквизитыФайла.ТекущаяВерсияРасширение <> ТекущаяВерсия.Расширение + ИЛИ РеквизитыФайла.ТекущаяВерсияНомерВерсии <> ТекущаяВерсия.НомерВерсии + ИЛИ РеквизитыФайла.ТекущаяВерсияТом <> ТекущаяВерсия.Том + ИЛИ РеквизитыФайла.ТекущаяВерсияПутьКФайлу <> ТекущаяВерсия.ПутьКФайлу + ИЛИ РеквизитыФайла.ТекущаяВерсияКод <> ТекущаяВерсия.Код + ИЛИ РеквизитыФайла.ИндексКартинки <> ТекущаяВерсия.ИндексКартинки + ИЛИ РеквизитыФайла.ТекущаяВерсияДатаМодификацииФайла <> ТекущаяВерсия.ДатаМодификацииФайла + Тогда + ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); + + // Сменим индекс картинки, возможно, появилась версия или сменился индекс картинки у версии + ФайлОбъект.ИндексКартинки = ТекущаяВерсия.ИндексКартинки; + + // копируем реквизиты для ускорения работы RLS + ФайлОбъект.ТекущаяВерсияРазмер = ТекущаяВерсия.Размер; + ФайлОбъект.ТекущаяВерсияДатаСоздания = ТекущаяВерсия.ДатаСоздания; + ФайлОбъект.ТекущаяВерсияАвтор = ТекущаяВерсия.Автор; + ФайлОбъект.ТекущаяВерсияРасширение = ТекущаяВерсия.Расширение; + ФайлОбъект.ТекущаяВерсияНомерВерсии = ТекущаяВерсия.НомерВерсии; + ФайлОбъект.ТекущаяВерсияТом = ТекущаяВерсия.Том; + ФайлОбъект.ТекущаяВерсияПутьКФайлу = ТекущаяВерсия.ПутьКФайлу; + ФайлОбъект.ТекущаяВерсияКод = ТекущаяВерсия.Код; + ФайлОбъект.ТекущаяВерсияДатаМодификацииФайла = ТекущаяВерсия.ДатаМодификацииФайла; + + ФайлОбъект.Записать(); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Процедура ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник) + + Перем ДвоичныеДанныеФайла; + + Если Источник.ДополнительныеСвойства.Свойство("ДвоичныеДанныеФайла", ДвоичныеДанныеФайла) Тогда + НаборЗаписей = РегистрыСведений.ХранимыеФайлыВерсий.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ВерсияФайла.Установить(Источник.Ссылка); + + Запись = НаборЗаписей.Добавить(); + Запись.ВерсияФайла = Источник.Ссылка; + Запись.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанныеФайла); + + НаборЗаписей.ОбменДанными.Загрузка = Истина; + НаборЗаписей.Записать(); + + Источник.ДополнительныеСвойства.Удалить("ДвоичныеДанныеФайла"); + КонецЕсли; + +КонецПроцедуры + +Функция ПолучениеФайлаЗапрещено(ЭлементДанных) + + Возврат ЭлементДанных.ЭтоНовый() + И Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ФайловыеФункцииСлужебный.ПолучитьЗапретЗагрузкиФайловПоРасширению(), + ФайловыеФункцииСлужебный.ПолучитьСписокЗапрещенныхРасширений(), + ЭлементДанных.ТекущаяВерсияРасширение) + ; +КонецФункции + +Функция ПолучениеВерсииФайлаЗапрещено(ЭлементДанных) + + Возврат ЭлементДанных.ЭтоНовый() + И Не ФайловыеФункцииСлужебныйКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки( + ФайловыеФункцииСлужебный.ПолучитьЗапретЗагрузкиФайловПоРасширению(), + ФайловыеФункцииСлужебный.ПолучитьСписокЗапрещенныхРасширений(), + ЭлементДанных.Расширение) + ; +КонецФункции + +Процедура ПоместитьФайлВРеквизитСправочника(ЭлементДанных) + + Попытка + // Помещаем данные файла из тома на диске в служебный реквизит справочника + ЭлементДанных.ФайлХранилище = ФайловыеФункцииСлужебный.ПоместитьДвоичныеДанныеВХранилище(ЭлементДанных.Том, ЭлементДанных.ПутьКФайлу, ЭлементДанных.Ссылка.УникальныйИдентификатор()); + Исключение + // Возможно, файл не был найден. Отправку данных не прерываем. + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + + ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); + КонецПопытки; + + ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + ЭлементДанных.ПутьКФайлу = ""; + ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСФайламиСлужебный/РаботаСФайламиСлужебный.mdo b/SSL/src/CommonModules/РаботаСФайламиСлужебный/РаботаСФайламиСлужебный.mdo new file mode 100644 index 000000000..6b7d777a4 --- /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 deleted file mode 100644 index c556b068c..000000000 --- a/SSL/src/CommonModules/РаботаСФайламиСобытия/Module.bsl +++ /dev/null @@ -1,247 +0,0 @@ -// Возвращает Истина, если это элемент данных, относящийся к подсистеме РаботаСФайлами -// -Функция ЭтоЭлементРаботаСФайлами(ЭлементДанных) Экспорт - - Возврат ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ВерсииФайлов") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникСсылка.ВерсииФайлов"); - -КонецФункции - -// Возвращает Истина в параметре ЭтоФайл, если это элемент данных, относящийся к подсистеме РаботаСФайлами -// -Процедура ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл) Экспорт - - ЭтоФайл = ЭтоФайл Или ЭтоЭлементРаботаСФайлами(ЭлементДанных); - -КонецПроцедуры - -// Возвращает Истина в параметре ЭтоФайл, если это элемент данных, относящийся к подсистеме РаботаСФайлами -// -Процедура ЭтоЭлементХранимыеФайлыВерсий(ЭлементДанных, ЭтоФайл) Экспорт - - ЭтоФайл = ЭтоФайл Или (ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ХранимыеФайлыВерсий")); - -КонецПроцедуры - -// Возвращает Истина в параметре Значение, если элемент данных (справочник Файл) запрещен к загрузке -// -Процедура ЭлементЗапрещенКЗагрузке(ЭлементДанных, ПолучениеЭлемента, Значение) Экспорт - - Значение = Ложь; - Если ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.Файлы") - ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникСсылка.Файлы") Тогда - - Если ЭлементДанных.ЭтоНовый() Тогда // добавлен новый файл - - ЗапретЗагрузкиФайловПоРасширению = ФайловыеФункции.ПолучитьЗапретЗагрузкиФайловПоРасширению(); - СписокЗапрещенныхРасширений = ФайловыеФункции.ПолучитьСписокЗапрещенныхРасширений(); - РасширениеФайла = ЭлементДанных.ТекущаяВерсияРасширение; - Если Не ФайловыеФункцииКлиентСервер.РасширениеФайлаРазрешеноДляЗагрузки(ЗапретЗагрузкиФайловПоРасширению, СписокЗапрещенныхРасширений, РасширениеФайла) Тогда - ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; - Значение = Истина; - Возврат; - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -// Устанавливает имя файла при обмене -// -Процедура УстановитьИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор, ПутьФайла) Экспорт - - Если ЭтоЭлементРаботаСФайлами(ЭлементДанных) Тогда - ПутьФайла = ИмяКаталогаФайлов + "\" + УникальныйИдентификатор; - КонецЕсли; - -КонецПроцедуры - -// Добавляет файл в том при обмене -// -Процедура ДобавитьНаДискПриПолученииДанныхФайла(ЭлементДанных, ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, ИмяБезРасширения, Расширение, РазмерФайла) Экспорт - - Если ЭтоЭлементРаботаСФайлами(ЭлементДанных) Тогда - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, - ВремяИзменения, ЭлементДанных.НомерВерсии, ИмяБезРасширения, Расширение, РазмерФайла, - ЭлементДанных.Зашифрован); - КонецЕсли; - -КонецПроцедуры - -// Обработчик события ПриЗаписи. Определен для объектов (кроме Документ), владельцев Файла. -Процедура УстановитьПометкуУдаленияФайловПередЗаписью(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если Источник.ПометкаУдаления <> Источник.Ссылка.ПометкаУдаления Тогда - ПометитьНаУдалениеПриложенныеФайлы(Источник.Ссылка, Источник.ПометкаУдаления); - КонецЕсли; - -КонецПроцедуры - -// Обработчик события ПриЗаписи. Определен для объектов типа Документ, владельцев Файла. -Процедура УстановитьПометкуУдаленияФайловДокументовПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - Возврат; - КонецЕсли; - - Если Источник.ПометкаУдаления <> Источник.Ссылка.ПометкаУдаления Тогда - ПометитьНаУдалениеПриложенныеФайлы(Источник.Ссылка, Источник.ПометкаУдаления); - КонецЕсли; - -КонецПроцедуры - -// Помечает \ снимает пометку удаления у приложенных файлов -Процедура ПометитьНаУдалениеПриложенныеФайлы(ВладелецФайла, ПометкаУдаления) Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | Файлы.Ссылка КАК Ссылка, - | Файлы.Редактирует КАК Редактирует - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла"; - - Запрос.УстановитьПараметр("ВладелецФайла", ВладелецФайла); - - Результат = Запрос.Выполнить(); - Выборка = Результат.Выбрать(); - Пока Выборка.Следующий() Цикл - Если ПометкаУдаления И Не Выборка.Редактирует.Пустая() Тогда - ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = '""%1"" не может быть удален, т.к. содержит файл ""%2"", занятый для редактирования.'"), - Строка(ВладелецФайла), - Строка(Выборка.Ссылка)); - КонецЕсли; - ФайлОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ФайлОбъект.Заблокировать(); - ФайлОбъект.УстановитьПометкуУдаления(ПометкаУдаления); - КонецЦикла; - -КонецПроцедуры - -// Выполняет дополнительную обработку при отправке данных обмена. -// Помещает данные присоединенного файла из регистра во временное хранилище, адрес которого -// запоминается в реквизите ФайлХранилище. -// -Процедура ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(ЭлементДанных) Экспорт - - Если Не ЭтоЭлементРаботаСФайлами(ЭлементДанных) Тогда - Возврат; - КонецЕсли; - - АдресВоВременномХранилище = РаботаСФайламиВызовСервера.ПолучитьНавигационнуюСсылкуВоВременномХранилище(ЭлементДанных.Ссылка); - - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресВоВременномХранилище), Новый СжатиеДанных(9)); - ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - ЭлементДанных.ПутьКФайлу = ""; - ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - -КонецПроцедуры - -// Выполняет дополнительную обработку при получении данных обмена. -// Размещает присоединенные файлы в регистре. -// -Процедура ВыполнитьДополнительнуюОбработкуПриПолученииДанных(ЭлементДанных) Экспорт - - Если Не ЭтоЭлементРаботаСФайлами(ЭлементДанных) Тогда - Возврат; - КонецЕсли; - - Значение = ЭлементДанных.ФайлХранилище.Получить(); - Если ТипЗнч(Значение) = Тип("ДвоичныеДанные") Тогда - ЭлементДанных.ДополнительныеСвойства.Вставить("ДвоичныеДанныеФайла", Значение); - КонецЕсли; - - ЭлементДанных.ФайлХранилище = Новый ХранилищеЗначения(Неопределено); - ЭлементДанных.Том = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - ЭлементДанных.ПутьКФайлу = ""; - ЭлементДанных.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - -КонецПроцедуры - -// Обработчик подписки "при записи" версии файла -// -Процедура ВерсииФайловПриЗаписиПриЗаписи(Источник, Отказ) Экспорт - - Если Источник.ОбменДанными.Загрузка Тогда - ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник); - Возврат; - КонецЕсли; - - Если Источник.ДополнительныеСвойства.Свойство("ПереименованиеФайла") Тогда - Возврат; - КонецЕсли; - - Если Источник.ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда - Возврат; - КонецЕсли; - - // копируем реквизиты из версии в файл - ТекущаяВерсия = Источник; - Если Не ТекущаяВерсия.Ссылка.Пустая() Тогда - - ФайлСсылка = Источник.Владелец; - - РеквизитыФайла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(ФайлСсылка, - "ИндексКартинки, ТекущаяВерсияРазмер, ТекущаяВерсияДатаСоздания, ТекущаяВерсияАвтор, ТекущаяВерсияРасширение, ТекущаяВерсияНомерВерсии, ТекущаяВерсияТом, ТекущаяВерсияПутьКФайлу, ТекущаяВерсияКод, ТекущаяВерсияДатаМодификацииФайла"); - - Если РеквизитыФайла.ТекущаяВерсияРазмер <> ТекущаяВерсия.Размер - ИЛИ РеквизитыФайла.ТекущаяВерсияДатаСоздания <> ТекущаяВерсия.ДатаСоздания - ИЛИ РеквизитыФайла.ТекущаяВерсияРасширение <> ТекущаяВерсия.Расширение - ИЛИ РеквизитыФайла.ТекущаяВерсияНомерВерсии <> ТекущаяВерсия.НомерВерсии - ИЛИ РеквизитыФайла.ТекущаяВерсияТом <> ТекущаяВерсия.Том - ИЛИ РеквизитыФайла.ТекущаяВерсияПутьКФайлу <> ТекущаяВерсия.ПутьКФайлу - ИЛИ РеквизитыФайла.ТекущаяВерсияКод <> ТекущаяВерсия.Код - ИЛИ РеквизитыФайла.ИндексКартинки <> ТекущаяВерсия.ИндексКартинки - ИЛИ РеквизитыФайла.ТекущаяВерсияДатаМодификацииФайла <> ТекущаяВерсия.ДатаМодификацииФайла - Тогда - ФайлОбъект = ФайлСсылка.ПолучитьОбъект(); - - // Сменим индекс картинки, возможно, появилась версия или сменился индекс картинки у версии - ФайлОбъект.ИндексКартинки = ТекущаяВерсия.ИндексКартинки; - - // копируем реквизиты для ускорения работы RLS - ФайлОбъект.ТекущаяВерсияРазмер = ТекущаяВерсия.Размер; - ФайлОбъект.ТекущаяВерсияДатаСоздания = ТекущаяВерсия.ДатаСоздания; - ФайлОбъект.ТекущаяВерсияАвтор = ТекущаяВерсия.Автор; - ФайлОбъект.ТекущаяВерсияРасширение = ТекущаяВерсия.Расширение; - ФайлОбъект.ТекущаяВерсияНомерВерсии = ТекущаяВерсия.НомерВерсии; - ФайлОбъект.ТекущаяВерсияТом = ТекущаяВерсия.Том; - ФайлОбъект.ТекущаяВерсияПутьКФайлу = ТекущаяВерсия.ПутьКФайлу; - ФайлОбъект.ТекущаяВерсияКод = ТекущаяВерсия.Код; - ФайлОбъект.ТекущаяВерсияДатаМодификацииФайла = ТекущаяВерсия.ДатаМодификацииФайла; - - ФайлОбъект.Записать(); - КонецЕсли; - - КонецЕсли; - -КонецПроцедуры - -Процедура ЗаписатьДанныеФайлаВРегистрПриОбмене(Источник) - - Перем ДвоичныеДанныеФайла; - - Если Источник.ДополнительныеСвойства.Свойство("ДвоичныеДанныеФайла", ДвоичныеДанныеФайла) Тогда - НаборЗаписей = РегистрыСведений.ХранимыеФайлыВерсий.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ВерсияФайла.Установить(Источник.Ссылка); - - Запись = НаборЗаписей.Добавить(); - Запись.ВерсияФайла = Источник.Ссылка; - Запись.ХранимыйФайл = Новый ХранилищеЗначения(ДвоичныеДанныеФайла); - - НаборЗаписей.ОбменДанными.Загрузка = Истина; - НаборЗаписей.Записать(); - - Источник.ДополнительныеСвойства.Удалить("ДвоичныеДанныеФайла"); - КонецЕсли; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl b/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl index 3ecd58c4f..70edd86cf 100644 --- a/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl +++ b/SSL/src/CommonModules/РаботаСоСканеромКлиент/Module.bsl @@ -1,14 +1,26 @@ -// Устанавливает компоненту сканирования -Процедура УстановитьКомпоненту() Экспорт +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с файлами". +// +//////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Установка компоненты сканирования. +Процедура УстановитьКомпоненту() Экспорт + Если КомпонентаTwain = Неопределено Тогда - КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаTWAIN", "twain", ТипВнешнейКомпоненты.Native); + + КодВозврата = ПодключитьВнешнююКомпоненту( + "ОбщийМакет.КомпонентаTWAIN", "twain", ТипВнешнейКомпоненты.Native); Если КодВозврата Тогда Состояние(НСтр("ru = 'Компонента сканирования уже установлена.'")); Иначе УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаTWAIN"); - КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаTWAIN", "twain", ТипВнешнейКомпоненты.Native); + + КодВозврата = ПодключитьВнешнююКомпоненту( + "ОбщийМакет.КомпонентаTWAIN", "twain", ТипВнешнейКомпоненты.Native); Если КодВозврата Тогда РаботаСФайламиВызовСервера.ОчиститьНастройкиФормНовогоФайла(); @@ -23,33 +35,39 @@ КонецПроцедуры -// Проинициализировать компоненту сканирования +// Инициализация компоненты сканирования. Функция ПроинициализироватьКомпоненту() Экспорт + Если КомпонентаTwain = Неопределено Тогда - КодВозврата = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаTWAIN", "twain", ТипВнешнейКомпоненты.Native); + + КодВозврата = ПодключитьВнешнююКомпоненту( + "ОбщийМакет.КомпонентаTWAIN", "twain", ТипВнешнейКомпоненты.Native); Если Не КодВозврата Тогда Возврат Ложь; КонецЕсли; - + КомпонентаTwain = Новый("AddIn.twain.AddInNativeExtension"); КонецЕсли; Возврат Истина; + КонецФункции -// Вернет версию компоненты сканирования +// Возвращает версию компоненты сканирования. Функция ВерсияКомпонентыСканирования() Экспорт - + Если Не ПроинициализироватьКомпоненту() Тогда Возврат НСтр("ru= 'Компонента сканирования не установлена'"); КонецЕсли; Возврат КомпонентаTwain.Версия(); -КонецФункции // ВерсияКомпонентыСканирования() + +КонецФункции -// Вернет массив строк - устройства TWAIN +// Возвращает устройства TWAIN (массив строк). Функция ПолучитьУстройства() Экспорт + Массив = Новый Массив; Если Не ПроинициализироватьКомпоненту() Тогда @@ -59,29 +77,37 @@ СтрокаУстройств = КомпонентаTwain.ПолучитьУстройства(); Для Индекс = 1 По СтрЧислоСтрок(СтрокаУстройств) Цикл - Строка = СтрПолучитьСтроку(СтрокаУстройств, Индекс); + Строка = СтрПолучитьСтроку(СтрокаУстройств, Индекс); Массив.Добавить(Строка); - КонецЦикла; + КонецЦикла; Возврат Массив; -КонецФункции // ПолучитьУстройства() + +КонецФункции - -// Вызвать диалог сканирования и показать диалог просмотра картинки -Процедура СканироватьИПоказатьДиалогПросмотра(ВладелецФайла, УникальныйИдентификатор, ЭтаФорма, - НеОткрыватьКарточкуПослеСозданияИзФайла = Неопределено) Экспорт +// Открывает диалог сканирования и просмотра картинки. +Процедура СканироватьИПоказатьДиалогПросмотра( + ВладелецФайла, + УникальныйИдентификатор, + ЭтаФорма, + НеОткрыватьКарточкуПослеСозданияИзФайла = Неопределено) Экспорт СистемнаяИнформация = Новый СистемнаяИнформация(); ИдентификаторКлиента = СистемнаяИнформация.ИдентификаторКлиента; - ПараметрыОткрытия = Новый Структура("ВладелецФайла, НеОткрыватьКарточкуПослеСозданияИзФайла, ИдентификаторКлиента", - ВладелецФайла, НеОткрыватьКарточкуПослеСозданияИзФайла, ИдентификаторКлиента); - ОткрытьФормуМодально("Справочник.Файлы.Форма.РезультатСканирования", ПараметрыОткрытия); + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ВладелецФайла", ВладелецФайла); + ПараметрыФормы.Вставить("ИдентификаторКлиента", ИдентификаторКлиента); + + ПараметрыФормы.Вставить( + "НеОткрыватьКарточкуПослеСозданияИзФайла", НеОткрыватьКарточкуПослеСозданияИзФайла); + + ОткрытьФормуМодально("Справочник.Файлы.Форма.РезультатСканирования", ПараметрыФормы); КонецПроцедуры -// Вернет Истина, если доступна команда Сканировать - установлена компонента сканирования и есть хоть один сканер +// Проверяет установлена ли компонента сканирования и есть ли хоть один сканер. Функция ДоступнаКомандаСканировать() Экспорт Если Не ПроинициализироватьКомпоненту() Тогда @@ -94,19 +120,19 @@ Возврат Ложь; -КонецФункции // ДоступнаКомандаСканировать() +КонецФункции -// Получает настройку сканера по имени +// Возвращает настройку сканера по имени. // -// Параметры +// Параметры: // ИмяУстройства - Строка - Имя сканера // -// ИмяНастройки - Строка - имя настройки, например "XRESOLUTION" или "PIXELTYPE" или "ROTATION" или "SUPPORTEDSIZES" -// +// ИмяНастройки - Строка - имя настройки, например "XRESOLUTION" или +// "PIXELTYPE" или "ROTATION" или "SUPPORTEDSIZES". // // Возвращаемое значение: -// Число - значение настройки сканера +// Число - значение настройки сканера. // Функция ПолучитьНастройку(ИмяУстройства, ИмяНастройки) Экспорт @@ -116,9 +142,9 @@ Возврат -1; КонецПопытки; -КонецФункции // ПолучитьНастройку() +КонецФункции -// Сохраняет в настройках цветность и разрешение +// Сохраняет в настройках цветность и разрешение. Процедура СохранитьВНастройкахПараметрыСканера(Разрешение, Цветность, Поворот, РазмерБумаги) Экспорт МассивСтруктур = Новый Массив; @@ -152,4 +178,4 @@ ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьМассив(МассивСтруктур); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры diff --git a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl index 42661ed24..677f435c5 100644 --- a/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетов/Module.bsl @@ -7,8 +7,8 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Подготавливает параметры для функции ВыполнитьРассылку и выполняет ее -// +// Подготавливает параметры для функции ВыполнитьРассылку и выполняет ее. +// // Параметры: // Рассылка (СправочникСсылка.РассылкиОтчетов) Рассылка, параметры которой будут подготовлены // ПараметрыЖурнала (Структура) Необязательный. Параметры записи в журнал регистрации @@ -19,7 +19,7 @@ // |- Получатели (Соответствие) Набор получателей и их e-mail адресов // |- Ключ (СправочникСсылка.*) Получатель // |- Значение (Строка) Набор e-mail адресов получателя в строке с разделителями -// +// // Возвращаемое значение: // Истина - Рассылка выполнена // Ложь - Рассылка не выполнена @@ -250,25 +250,25 @@ // Параметры: // // ТаблицаОтчетов (ТаблицаЗначений) Набор выгружаемых отчетов. Колонки: -// |- Отчет (...) Отчет, который необходимо сформировать +// |- Отчет (...) Отчет, который необходимо сформировать. // |- (СправочникСсылка.ВариантыОтчетов) // |- (СправочникСсылка.ДополнительныеОтчетыИОбработки) -// |- ОтправлятьЕслиПустой (Булево) Флаг отправки отчета даже если он пустой -// |- Настройки (...) Настройки, с которыми должен сформироваться отчет -// Дополнительно используется для определения принадлежности отчета к СКД. +// |- ОтправлятьЕслиПустой (Булево) Флаг отправки отчета даже если он пустой. +// |- Настройки (...) Настройки, с которыми должен сформироваться отчет. +// Дополнительно используется для определения принадлежности отчета к СКД. // |- (Неопределено) Настройки по умолчанию. Для определения принадлежности к СКД -// будет использован реквизит объекта "СхемаКомпоновкиДанных". +// будет использован реквизит объекта "СхемаКомпоновкиДанных". // |- (ПользовательскиеНастройкиКомпоновкиДанных) Табличный документ сформируется механизмами СКД. -// |- (Структура) Табличный документ сформируется при помощи метода "Сформировать()". -// |- Ключ (Строка) Имя реквизита объекта отчета -// |- Значение (*) Значение реквизита объекта отчета -// |- Форматы (Массив) из (ПеречислениеСсылка.ФорматыСохраненияОтчетов) Форматы, -// в которых необходимо сохранить и отправить отчет +// |- (Структура) Табличный документ сформируется при помощи метода "Сформировать()". +// |- Ключ (Строка) Имя реквизита объекта отчета +// |- Значение (*) Значение реквизита объекта отчета +// |- Форматы (Массив) из (ПеречислениеСсылка.ФорматыСохраненияОтчетов) +// Форматы, в которых необходимо сохранить и отправить отчет // // ПараметрыДоставки (Структура) Настройки транспорта (способа доставки) отчетов. -// Набор реквизитов может отличаться для разных способов доставки: +// Набор реквизитов может отличаться для разных способов доставки: // --- Обязательные реквизиты --- -// +// // |- Автор (СправочникСсылка.Пользователи) Автор рассылки // // |- ИспользоватьПапку (Булево) Доставка отчетов в папку подсистемы "Работа с файлами" @@ -278,7 +278,7 @@ // // --- Обязательные реквизиты когда { ИспользоватьПапку = Истина } --- // -// |- Папка (СправочникСсылка.ПапкиФайлов) - Папка подсистемы "Работа с файлами" +// |- Папка (СправочникСсылка.ПапкиФайлов) Папка подсистемы "Работа с файлами" // // --- Обязательные реквизиты когда { ИспользоватьСетевойКаталог = Истина } --- // @@ -296,8 +296,8 @@ // // --- Обязательные реквизиты когда { ИспользоватьЭлектроннуюПочту = Истина } --- // -// |- УчетнаяЗапись (СправочникСсылка.УчетныеЗаписиЭлектроннойПочты) - Учетная запись для отправки почтового сообщения -// |- Получатели (Соответствие) Набор получателей и их e-mail адресов +// |- УчетнаяЗапись (СправочникСсылка.УчетныеЗаписиЭлектроннойПочты) Учетная запись для отправки почтового сообщения +// |- Получатели (Соответствие) Набор получателей и их e-mail адресов // |- Ключ (СправочникСсылка.*) Получатель // |- Значение (Строка) Набор e-mail адресов получателя в строке с разделителями // @@ -314,16 +314,20 @@ // |- СкрытыеКопии (Булево, Ложь) Если "Истина", то при отправке вместо "Кому" заполняется "СлепыеКопии". // |- ШаблонТемы (Строка) Тема письма // |- ШаблонТекста (Строка) Тело письма -// |- ПараметрыПисьма (Структура) Параметры сообщения, которые будут переданы подсистеме "РаботаСПочтовымиСообщениями" напрямую. -// Их обработку можно увидеть в модуле "ЭлектроннаяПочта", процедура "ОтправитьСообщение". -// Подсистемой "РассылкаОтчетов" могут использоваться: +// |- ПараметрыПисьма (Структура) Параметры сообщения, +// которые будут переданы подсистеме "РаботаСПочтовымиСообщениями" напрямую. +// Их обработку можно увидеть в модуле "ЭлектроннаяПочта", процедура "ОтправитьСообщение". +// Подсистемой "РассылкаОтчетов" могут использоваться: // |- ТипТекста (ТипТекстаПочтовогоСообщения, Строка, ПеречислениеСсылка.ТипыТекстовЭлектронныхПисем) -// |- Вложения (Соответствие) -// |- Ключ (Строка) - наименование вложения -// |- Значение (...) - АдресФайлаВложения (Текст) / ДвоичныеДанные (ДвоичныеДанные) / ИнтернетПочтовоеСообщение -// |- АдресОтвета (Строка) - e-mail адрес ответа +// |- Вложения (Соответствие) +// |- Ключ (Строка) Наименование +// |- Значение (...) Данные +// |- (Текст) Адрес во временном хранилище +// |- (ДвоичныеДанные) +// |- (ИнтернетПочтовоеСообщение) +// |- АдресОтвета (Строка) E-mail адрес ответа // -// --- Подчиненность значений различных параметров --- +// --- Влияние ключевых параметров --- // // { Персонализирована = Истина } => // { ИспользоватьПапку = Ложь } @@ -331,18 +335,18 @@ // { ИспользоватьFTPРесурс = Ложь } // { ТолькоУведомить = Ложь } // -// Рассылка (*) - Используется как объект-инициатор для отображения ошибок и в шаблонах темы и сообщения +// Рассылка (*) Используется как объект-инициатор для отображения ошибок и в шаблонах темы и сообщения // -// ПараметрыЖурнала (Структура) Необязательный. Параметры записи в журнал регистрации +// ПараметрыЖурнала (Структура) Необязательный. Параметры записи в журнал регистрации // |- ИмяСобытия (Строка) Имя события (или группы событий) // |- Метаданные (ОбъектМетаданных) Метаданные для привязки события журнала регистрации // |- Данные (*) Данные для привязки события журнала регистрации -// +// //////////////////////////////////////////////////////////////////////////////// // Возвращаемое значение: // Истина - Рассылка выполнена // Ложь - Рассылка не выполнена -// +// Функция ВыполнитьРассылку(ТаблицаОтчетов, ПараметрыДоставки, Рассылка, ПараметрыЖурнала = Неопределено) Экспорт РассылкаВыполнена = Ложь; @@ -512,11 +516,11 @@ РегистрыСведений.СостоянияРассылокОтчетов.ЗафиксироватьРезультатВыполненияРассылки(Рассылка, ПараметрыДоставки); Возврат РассылкаВыполнена; -КонецФункции // ВыполнитьРассылку +КонецФункции // ВыполнитьРассылку() // Для вызова из модулей "РассылкаОтчетовПереопределяемый" и "РассылкаОтчетовПовтИсп". // Добавляет формат (в случае его отсутствия) и устанавливает его параметры (если переданы). -// +// Процедура УстановитьПараметрыФормата(СписокФорматов, ФорматСсылка, Картинка = Неопределено, ИспользоватьПоУмолчанию = Неопределено) Экспорт Если ТипЗнч(ФорматСсылка) = Тип("Строка") Тогда ФорматСсылка = Перечисления.ФорматыСохраненияОтчетов[ФорматСсылка]; @@ -531,16 +535,16 @@ Если ИспользоватьПоУмолчанию <> Неопределено Тогда ЭлементСписка.Пометка = ИспользоватьПоУмолчанию; КонецЕсли; -КонецПроцедуры +КонецПроцедуры // УстановитьПараметрыФормата() // Для вызова из модулей "РассылкаОтчетовПереопределяемый" и "РассылкаОтчетовПовтИсп". // Добавляет описание типа получателей в соответствующую таблицу. -// +// // Параметры: // ТаблицаТипов (ТаблицаЗначений) Таблица, в которой будет зарегистрирован результат // ДоступныеТипы (Массив) Использованные типы удаляются из этого массива // Настройки (Структура) Предустановленные настройки основного типа -// +// Процедура ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы, Настройки) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -613,18 +617,17 @@ Иначе СтрокаТаблицы.ПутьФормыВыбора = МетаданныеОсновногоТипа.ПолноеИмя() +".ФормаВыбора"; КонецЕсли; -КонецПроцедуры +КонецПроцедуры // ДобавитьЭлементВТаблицуТиповПолучателей() -// Выполняет массив рассылок и размещает результат по адресу АдресРезультата. В файловом +// Выполняет массив рассылок и размещает результат по адресу АдресРезультата. В файловом // режиме вызывается напрямую, в клиент-серверном - через фоновое задание. -// +// // Параметры: -// ПараметрыВыполнения (Структура) Выполняемые рассылки и их параметры -// |- МассивРассылок (Массив) из (СправочникСсылка.Рассылки.Отчетов) +// ПараметрыВыполнения (Структура) Выполняемые рассылки и их параметры. +// |- МассивРассылок (Массив) из (СправочникСсылка.РассылкиОтчетов) // |- ПредварительныеНастройки (Структура) см. функцию ПодготовитьПараметрыИВыполнитьРассылку() -// АдресРезультата (Строка) Адрес, по которому будет размещен результат -// |- (Структура) -// +// АдресРезультата (Строка) Адрес во временном хранилище, по которому будет размещен результат. +// Процедура ВыполнитьРассылкиВФоновомЗадании(ПараметрыВыполнения, АдресРезультата) Экспорт МассивРассылок = ПараметрыВыполнения.МассивРассылок; ПредварительныеНастройки = ПараметрыВыполнения.ПредварительныеНастройки; @@ -726,7 +729,7 @@ Результат.Вставить("ТипДляОбновления", ?(Всего = 1, ТаблицаРассылок[0].Рассылка, Тип("СправочникСсылка.РассылкиОтчетов"))); ПоместитьВоВременноеХранилище(Результат, АдресРезультата); -КонецПроцедуры +КонецПроцедуры // ВыполнитьРассылкиВФоновомЗадании() //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -734,8 +737,8 @@ //////////////////////////////////////////////////////////////////////////////// // Выполнение регламентных заданий -// Запускает рассылку и контролирует результат -// +// Запускает рассылку и контролирует результат. +// // Параметры: // Рассылка (СправочникСсылка.РассылкиОтчетов) Рассылка, которая должна быть выполнена // @@ -766,15 +769,15 @@ //////////////////////////////////////////////////////////////////////////////// // Экспортные служебные процедуры и функции -// Формирует список получателей из табличной части "Получатели" рассылки -// +// Формирует список получателей из табличной части "Получатели" рассылки. +// // Параметры: -// Рассылка (СправочникСсылка.РассылкиОтчетов, Структура) - Элемент справочника, для которого необходимо сформировать список получателей -// +// Рассылка (СправочникСсылка.РассылкиОтчетов, Структура) Элемент справочника, для которого необходимо сформировать список получателей +// // Возвращаемое значение: // Результат (Структура) -// |- Получатели (Соответствие) - см. функцию ВыполнитьРассылку, параметр ПараметрыДоставки.Получатели -// |- Ошибки (Строка) - Ошибки, которые возникли в процессе +// |- Получатели (Соответствие) см. функцию ВыполнитьРассылку, параметр ПараметрыДоставки.Получатели +// |- Ошибки (Строка) Ошибки, которые возникли в процессе // Функция СформироватьСписокПолучателейРассылки(ПараметрыЖурнала, Рассылка) Экспорт @@ -800,8 +803,7 @@ СписокПолучателей = Новый Соответствие; - ШаблонСообщенияОбОшибке = НСтр("ru = 'При формировании списка получателей %1 возникла ошибка:'"); - + Запрос = Новый Запрос; Если ТипПолучателей = Тип("СправочникСсылка.Пользователи") Тогда ТекстЗапроса = @@ -826,6 +828,8 @@ |ГДЕ | СоставыГруппПользователей.Пользователь ССЫЛКА Справочник.Пользователи | И СоставыГруппПользователей.Пользователь.ПометкаУдаления = ЛОЖЬ + | И СоставыГруппПользователей.Пользователь.Недействителен = ЛОЖЬ + | И СоставыГруппПользователей.Пользователь.Служебный = ЛОЖЬ | |СГРУППИРОВАТЬ ПО | СоставыГруппПользователей.Пользователь @@ -897,11 +901,10 @@ ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И &ЭтоНеГруппа", "И СпрПолучателей.ЭтоГруппа = ЛОЖЬ"); КонецЕсли; - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Пользователи", ПолучателиМД.Имя); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Пользователи", ПолучателиМД.ПолноеИмя()); КонецЕсли; - Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТаблицаПолучателей", ТаблицаПолучателей); Если ЗначениеЗаполнено(ВидКИ) Тогда Запрос.УстановитьПараметр("ВидКИ", ВидКИ); @@ -911,6 +914,8 @@ КонецЕсли; Запрос.Текст = ТекстЗапроса; + ШаблонСообщенияОбОшибке = НСтр("ru = 'При формировании списка получателей ""%1"" возникла ошибка:'"); + // Механизм расширения Попытка СтандартнаяОбработка = Истина; @@ -921,7 +926,7 @@ Исключение ЗаписьЖурнала(ПараметрыЖурнала, , ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), - "'"+ Строка(ТипПолучателей) +"'" + Строка(ТипПолучателей) ); Возврат СписокПолучателей; КонецПопытки; @@ -932,7 +937,7 @@ Исключение ЗаписьЖурнала(ПараметрыЖурнала, , ШаблонСообщенияОбОшибке, ИнформацияОбОшибке(), - "'"+ Строка(ТипПолучателей) +"'" + Строка(ТипПолучателей) ); Возврат СписокПолучателей; КонецПопытки; @@ -974,49 +979,44 @@ // Подключает, проверяет и инициализирует отчет по ссылке, используется перед формированием или редактированием параметров // // Параметры: -// ПараметрыОтчета (Структура) - Начальные параметры -// - Отчет и его Настройки (см. Возвращаемое значение) -// ПерсонализацияВозможна (Булево) - Возможность персонализации отчета -// Истина - отчет может быть персонализирован -// Ложь - отчет не может быть персонализирован -// УникальныйИдентификаторФормы (УникальныйИдентификатор) -// - Если заполнен, то схема компоновки данных будет помещена во временное хранилище вплоть до закрытия формы +// ПараметрыОтчета (Структура) Отчет, настройки и результат его инциализации. +// ПерсонализацияВозможна (Булево) = Истина, если отчет может быть персонализирован. +// УникальныйИдентификаторФормы (УникальныйИдентификатор) Необязательный. Адрес размещения СКД. // // Изменяемые параметры: -// ПараметрыОтчета (Структура) - Набор параметров, получаемый в процессе проверки и подключения отчета -// Начальные параметры: +// ПараметрыОтчета (Структура) +// --- Начальные параметры --- // |- Отчет (СправочникСсылка.ВариантыОтчетов, СправочникСсылка.ДополнительныеОтчетыИОбработки) -// | Отчет, который необходимо инициализировать // |- Настройки (Неопределено, ПользовательскиеНастройкиКомпоновкиДанных, ТаблицаЗначений) // | Настройки отчета, которые необходимо использовать, // | подробнее см. процедуру "ЗаписатьНастройкиСтрокиОтчеты" модуля "Справочник.РассылкиОтчетов.ФормаОбъекта" // -// Общие параметры: -// |- Имя (Строка) - Имя объекта метаданных отчета -// |- ЭтоВариант (Булево) - Истина - используется справочник "ВариантыОтчетов", -// Ложь - "ДополнительныеОтчетыИОбработки" -// |- СКД (Булево) - Истина - отчет принадлежит Системе Компоновки Данных, -// Ложь - это произвольный отчет -// |- Метаданные (ОбъектМетаданных) - Метаданные отчета -// |- Объект (ОтчетОбъект.*) - Объект отчета -// -// Параметры, которые заполняеются для СКД отчетов: -// |- СхемаКД (СхемаКомпоновкиДанных) - ... -// |- КомпоновщикНастроекКД (КомпоновщикНастроекКомпоновкиДанных) - ... -// |- АдресСхемыКД (Строка) - Адрес схемы компоновки данных во временном хранилище, -// используется только если передано значение УникальныйИдентификаторФормы -// |- НастройкиКД (НастройкиКомпоновкиДанных) - ... -// -// Параметры, которые заполняеются для произвольных отчетов: -// |- ДоступныеРеквизиты (Структура) - Набор доступных реквизитов -// |- Ключ (Строка) - Имя реквизита -// |- Значение (Структура) - Представление и тип реквизита +// --- Заполняются для всех отчетов --- +// |- Имя (Строка) +// |- ЭтоВариант (Булево) = Истина, если поставщик - справочник "ВариантыОтчетов". +// |- СКД (Булево) = Истина, если отчет на базе СКД. +// |- Метаданные (ОбъектМетаданных) +// |- Объект (ОтчетОбъект.*) +// +// --- Заполняются для СКД отчетов --- +// |- СхемаКД (СхемаКомпоновкиДанных) +// |- КомпоновщикНастроекКД (КомпоновщикНастроекКомпоновкиДанных) +// |- НастройкиКД (НастройкиКомпоновкиДанных) +// |- АдресСхемыКД (Строка) Адрес схемы компоновки данных во временном хранилище. +// +// --- Заполняются для произвольных отчетов --- +// |- ДоступныеРеквизиты (Структура) +// |- Ключ (Строка) Имя реквизита +// |- Значение (Структура) // |- Представление (Строка) -// |- Тип (ОписаниеТипов) -// -// Результат работы: -// |- Инициализирован (Булево) - Истина, если инициализация прошла успешно -// |- Ошибки (Строка) - ... +// |- Тип (ОписаниеТипов) +// +// --- Результат инициализации --- +// |- Инициализирован (Булево) = Истина, если инициализация прошла успешно. +// |- Ошибки (Строка) +// +// Возвращаемое значение: +// (Булево) = Истина, если инициализация прошла успешно. // Функция ИнициализироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, ПерсонализацияВозможна, УникальныйИдентификаторФормы = Неопределено) Экспорт @@ -1047,7 +1047,7 @@ ПараметрыОтчета.ЭтоВариант = (ТипЗнч(ПараметрыОтчета.Отчет) = Тип("СправочникСсылка.ВариантыОтчетов")); Если ПараметрыОтчета.ЭтоВариант Тогда - ПараметрыОтчета.Имя = СокрЛП(СтрЗаменить(ПараметрыОтчета.Отчет.КлючОбъекта, "Отчет.", "")); + ПараметрыОтчета.Имя = ПараметрыОтчета.Отчет.Отчет.Имя; ПараметрыОтчета.Метаданные = Метаданные.Отчеты.Найти(ПараметрыОтчета.Имя); Если ПараметрыОтчета.Метаданные = Неопределено Тогда ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, @@ -1067,7 +1067,7 @@ Результат = Неопределено; СведенияОВнешнейОбработке = Неопределено; Попытка - РассылкаОтчетовПереопределяемый.ПодключитьДополнительныйОтчет(ПараметрыОтчета.Отчет, ПараметрыОтчета, Результат); + СтандартныеПодсистемыПереопределяемый.РассылкаОтчетовПодключитьДопОтчет(ПараметрыОтчета.Отчет, ПараметрыОтчета, Результат); СведенияОВнешнейОбработке = ПараметрыОтчета.Объект.СведенияОВнешнейОбработке(); Исключение ЗаписьЖурнала(ПараметрыЖурнала, , @@ -1147,16 +1147,16 @@ // Настройка компоновки данных в целом. Если ПараметрыОтчета.ЭтоВариант Тогда - ПараметрыОтчета.НастройкиКД = ПараметрыОтчета.Отчет.ХранилищеЗначений.Получить(); + ПараметрыОтчета.НастройкиКД = ПараметрыОтчета.Отчет.Настройки.Получить(); Если ПараметрыОтчета.НастройкиКД = Неопределено Тогда ВариантыНастроекКД = ПараметрыОтчета.СхемаКД.ВариантыНастроек; КлючВарианта = ПараметрыОтчета.Отчет.КлючВарианта; ВариантНастроекКД = ВариантыНастроекКД.Найти(КлючВарианта); Если ВариантНастроекКД = Неопределено Тогда - ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Вариант %1 не найден для отчета %2'"), - "'"+ Строка(ПараметрыОтчета.Отчет) +"'", - "'"+ ПараметрыОтчета.Имя +"'" + ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурналаРегистрации.Ошибка, + НСтр("ru = 'Вариант ""%1"" не найден для отчета ""%2""'"), , + Строка(ПараметрыОтчета.Отчет), + ПараметрыОтчета.Имя ); Возврат ПараметрыОтчета.Инициализирован; КонецЕсли; @@ -1206,7 +1206,7 @@ КонецЦикла; КонецЕсли; // ПерсонализацияВозможна - Иначе // НЕ ПараметрыОтчета.СКД + Иначе // ПараметрыОтчета.СКД // Доступные реквизиты отчета ПараметрыОтчета.ДоступныеРеквизиты = Новый Структура; @@ -1239,33 +1239,29 @@ ПараметрыОтчета.Объект[Настройка] = ЗначениеНастройки; КонецЕсли; - КонецЦикла; // Для Каждого КлючИЗначение Из ПараметрыОтчета.Настройки Цикл + КонецЦикла; - КонецЕсли; // ЗначениеЗаполнено(ПараметрыОтчета.Настройки) + КонецЕсли; - КонецЕсли; // Если ПараметрыОтчета.СКД Тогда + КонецЕсли; // ПараметрыОтчета.СКД - // ПараметрыОтчета.Персонализирован = (ПараметрыОтчета.ПерсональныеОтборы.Количество() > 0); - - // ПараметрыОтчета.Инициализирован = Истина; - // Возврат ПараметрыОтчета.Инициализирован; -КонецФункции +КонецФункции // ИнициализироватьОтчет() -// Формирует отчет, проверяя что результат пустой -// +// Формирует отчет, проверяя что результат пустой. +// // Параметры: -// ПараметрыЖурнала (Структура) - Параметры записи в журнал регистрации. См. описание к процедуре "ЗаписьЖурнала". -// ПараметрыОтчета (Структура) - См. возвращаемое значение функции "ИнициализироватьОтчет" -// Получатель (СправочникСсылка.*) - ... -// +// ПараметрыЖурнала (Структура) Параметры записи в журнал регистрации. См. описание к процедуре "ЗаписьЖурнала". +// ПараметрыОтчета (Структура) См. возвращаемое значение функции "ИнициализироватьОтчет" +// Получатель (СправочникСсылка.*) +// // Возвращаемое значение: // Результат (Структура) -// |- ТабДок (ТабличныйДокумент) - результат формирования отчета -// |- Пустой (Булево) - Истина, если отчет не содержал ни одного значения параметра +// |- ТабДок (ТабличныйДокумент) Результат формирования отчета +// |- Пустой (Булево) = Истина, если отчет не содержал ни одного значения параметра // Функция СформироватьОтчет(ПараметрыЖурнала, ПараметрыОтчета, Получатель = Неопределено) Экспорт Результат = Новый Структура("ТабДок, СФормирован, Пустой", Новый ТабличныйДокумент, Ложь, Истина); @@ -1418,17 +1414,17 @@ Возврат Результат; КонецФункции -// Выполняет транспортировку вложений для всех способов доставки -// +// Выполняет транспортировку вложений для всех способов доставки. +// // Параметры: -// Автор (СправочникСсылка.*) - Автор рассылки -// ПараметрыДоставки (Структура) - см. функцию ВыполнитьРассылку -// Вложения (Соответствие) - см. функцию ДобавитьОтчетыВоВложения -// +// Автор (СправочникСсылка.*) Автор рассылки +// ПараметрыДоставки (Структура) см. функцию ВыполнитьРассылку +// Вложения (Соответствие) см. функцию ДобавитьОтчетыВоВложения +// // Возвращаемое значение: // Результат (Структура) -// |- Доставка (Строка) - Представление способа доставки -// |- Выполнена (Булево) - Флаг того, что доставка выполнена как минимум одним из способов +// |- Доставка (Строка) Представление способа доставки +// |- Выполнена (Булево) = Истина, если доставка выполнена хотя бы одним из способов. // Функция ВыполнитьДоставку(ПараметрыЖурнала, ПараметрыДоставки, Вложения) Экспорт Результат = Ложь; @@ -1470,7 +1466,7 @@ Попытка Прокси = Неопределено; - РассылкаОтчетовПереопределяемый.НастройкиПроксиНаСервере(Прокси); + СтандартныеПодсистемыПереопределяемый.РассылкаОтчетовНастройкиПрокси(Прокси); Соединение = Новый FTPСоединение( ПараметрыДоставки.Сервер, ПараметрыДоставки.Порт, @@ -1505,7 +1501,7 @@ Если ПараметрыДоставки.ИспользоватьПапку Тогда Попытка - РассылкаОтчетовПереопределяемый.ВыполнитьДоставкуВПапку(ПараметрыДоставки, Вложения); + СтандартныеПодсистемыПереопределяемый.РассылкаОтчетовДоставитьВПапку(ПараметрыДоставки, Вложения); Результат = Истина; ПараметрыДоставки.ВыполненаВПапку = Истина; Исключение @@ -1545,12 +1541,13 @@ Возврат Результат; КонецФункции -// Получает имя пользователя базы данных по ссылке справочника "Пользователи" -// +// Получает имя пользователя базы данных по ссылке справочника "Пользователи". +// // Параметры: -// Пользователь - (СправочникСсылка.Пользователи) -// -// Возвращаемое значение: (Строка) Имя пользователя +// Пользователь (СправочникСсылка.Пользователи) +// +// Возвращаемое значение: +// (Строка) Имя пользователя // Функция ПолучитьИмяПользователяИБ(Пользователь) Экспорт Если НЕ ЗначениеЗаполнено(Пользователь) Тогда @@ -1569,26 +1566,26 @@ Возврат ПользовательИБ.Имя; КонецФункции // ПолучитьИмяПользователяИБ -// Создает запись в журнале регистрации и сообщениях пользователю, -// Поддерживает до 4х параметров в комментарии при помощи функции -// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку -// Поддерживает передачу информации об обшибке, подробное представление -// ошибки добавляется в комментарий записи в журнал регистрации +// Создает запись в журнале регистрации и сообщениях пользователю; +// Поддерживает до 4х параметров в комментарии при помощи функции +// СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку. +// Поддерживает передачу информации об обшибке, подробное представление +// ошибки добавляется в комментарий записи в журнал регистрации. // // Параметры: -// ПараметрыЖурнала (Структура) Параметры записи в журнал регистрации -// |- ИмяСобытия (Строка) Имя события (или группы событий) +// ПараметрыЖурнала (Структура) Параметры записи в журнал регистрации +// |- ИмяСобытия (Строка) Имя события (или группы событий) // |- Метаданные (ОбъектМетаданных) Метаданные для привязки события журнала регистрации -// |- Данные (*) Данные для привязки события журнала регистрации -// УровеньЖурнала (УровеньЖурналаРегистрации) Уровень важности события -// КомментарийСПараметрами (Строка) Комментарий, можно передавать с параметрами %1, %2, %3 и %4 -// ИнформацияОбОшибке (...) Информация об ошибке, которая будет размещена -// |- (ИнформацияОбОшибке) в комментарии к записи журнала регистрации +// |- Данные (*) Данные для привязки события журнала регистрации +// УровеньЖурнала (УровеньЖурналаРегистрации) Важность сообщения для администратора. +// КомментарийСПараметрами (Строка) Комментарий, который может содержать параметры %1, %2, %3 и %4. +// ИнформацияОбОшибке (...) Информация об ошибке, которая будет размещена после комментария. +// |- (ИнформацияОбОшибке) // |- (Строка) -// Параметр1 (Строка) Для подстановки в комментарий вместо %1 -// Параметр2 (Строка) Для подстановки в комментарий вместо %2 -// Параметр3 (Строка) Для подстановки в комментарий вместо %3 -// Параметр4 (Строка) Для подстановки в комментарий вместо %4 +// Параметр1 (Строка) Для подстановки в КомментарийСПараметрами вместо %1. +// Параметр2 (Строка) Для подстановки в КомментарийСПараметрами вместо %2. +// Параметр3 (Строка) Для подстановки в КомментарийСПараметрами вместо %3. +// Параметр4 (Строка) Для подстановки в КомментарийСПараметрами вместо %4. // Процедура ЗаписьЖурнала(ПараметрыЖурнала, УровеньЖурнала = Неопределено, КомментарийСПараметрами = "", ИнформацияОбОшибке = Неопределено, @@ -1664,22 +1661,72 @@ КонецПроцедуры +// Добавляет команды создания рассылок в форму отчета. +// +Процедура ФормаОтчетаДобавитьКоманды(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт + + // Рассылки можно добавлять только по внутренним отчетам + Если ВРег(Лев(ЭтаФорма.ИмяФормы, 13)) = ВРег("ВнешнийОтчет.") Тогда + Возврат; + КонецЕсли; + + // Добавление команд и кнопок + КомандаСоздать = ЭтаФорма.Команды.Добавить("РассылкаОтчетовСоздатьНовую"); + КомандаСоздать.Действие = "Подключаемый_Команда"; + КомандаСоздать.Картинка = БиблиотекаКартинок.РассылкаОтчетов; + КомандаСоздать.Заголовок = НСтр("ru = 'Создать рассылку отчетов...'"); + КомандаСоздать.Подсказка = НСтр("ru = 'Создать новую рассылку отчетов и добавить в нее отчет с текущими настройками.'"); + + КомандаПрисоединить = ЭтаФорма.Команды.Добавить("РассылкаОтчетовПрисоединитьКСуществующей"); + КомандаПрисоединить.Действие = "Подключаемый_Команда"; + КомандаПрисоединить.Картинка = БиблиотекаКартинок.РассылкаОтчетов; + КомандаПрисоединить.Заголовок = НСтр("ru = 'Включить в существующую рассылку отчетов...'"); + КомандаПрисоединить.Подсказка = НСтр("ru = 'Присоединить отчет с текущими настройками к существующей рассылке отчетов.'"); + + ЭтаФорма.ПостоянныеКоманды.Добавить(КомандаСоздать.Имя); + ЭтаФорма.ПостоянныеКоманды.Добавить(КомандаПрисоединить.Имя); + + Подменю = ЭтаФорма.Элементы.Добавить("ОтправитьРассылку", Тип("ГруппаФормы"), ЭтаФорма.Элементы.Отправить); + Подменю.Вид = ВидГруппыФормы.ГруппаКнопок; + Подменю.Заголовок = НСтр("ru = 'Отправить рассылку'"); + + ЭлементСоздать = ЭтаФорма.Элементы.Добавить(КомандаСоздать.Имя, Тип("КнопкаФормы"), Подменю); + ЭлементСоздать.ИмяКоманды = КомандаСоздать.Имя; + ЭлементСоздать.ТолькоВоВсехДействиях = Ложь; + + ЭлементПрисоединить = ЭтаФорма.Элементы.Добавить(КомандаПрисоединить.Имя, Тип("КнопкаФормы"), Подменю); + ЭлементПрисоединить.ИмяКоманды = КомандаПрисоединить.Имя; + ЭлементПрисоединить.ТолькоВоВсехДействиях = Ложь; + + ПодменюВсеДействия = ЭтаФорма.Элементы.Добавить(Подменю.Имя + "ВсеДействия", Тип("ГруппаФормы"), ЭтаФорма.Элементы.ОтправитьВсеДействия); + ЗаполнитьЗначенияСвойств(ПодменюВсеДействия, Подменю, "Вид, Заголовок"); + + ЭлементСоздать = ЭтаФорма.Элементы.Добавить(КомандаСоздать.Имя + "ВсеДействия", Тип("КнопкаФормы"), ПодменюВсеДействия); + ЭлементСоздать.ИмяКоманды = КомандаСоздать.Имя; + ЭлементСоздать.ТолькоВоВсехДействиях = Истина; + + ЭлементПрисоединить = ЭтаФорма.Элементы.Добавить(КомандаПрисоединить.Имя + "ВсеДействия", Тип("КнопкаФормы"), ПодменюВсеДействия); + ЭлементПрисоединить.ИмяКоманды = КомандаПрисоединить.Имя; + ЭлементПрисоединить.ТолькоВоВсехДействиях = Истина; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции // Помимо формирования отчетов выполняет персонализацию отчетов по списку получателей // и формирует отчеты в разрезах получателей (если это необходимо) -// +// // Параметры: -// ПараметрыЖурнала (Структура) - Параметры записи в журнал регистрации -// |- Префикс (Строка) - Префикс для имени события журнала регистрации -// |- Метаданные (ОбъектМетаданных) - Метаданные для записи в журнал регистрации -// |- Данные (*) - Данные для записи в журнал регистрации -// ПараметрыОтчета (Структура) - см. функцию ВыполнитьРассылку, параметр ТаблицаОтчетов -// ДеревоОтчетов (ТаблицаЗначений) - Список отчетов с результатом формирования в виде табличных документов -// ПараметрыДоставки (Структура) - см. функцию ВыполнитьРассылку -// Получатель (СправочникСсылка.*) - ... -// +// ПараметрыЖурнала (Структура) Параметры записи в журнал регистрации +// |- Префикс (Строка) Префикс для имени события журнала регистрации +// |- Метаданные (ОбъектМетаданных) Метаданные для записи в журнал регистрации +// |- Данные (*) Данные для записи в журнал регистрации +// ПараметрыОтчета (Структура) см. функцию ВыполнитьРассылку, параметр ТаблицаОтчетов +// ДеревоОтчетов (ТаблицаЗначений) Список отчетов с результатом формирования в виде табличных документов +// ПараметрыДоставки (Структура) см. функцию ВыполнитьРассылку +// Получатель (СправочникСсылка.*) +// // Результат выполнения записывается в ДеревоОтчетов // Ошибки записываются в журнал регистрации и в сообщения сеанса пользователя // @@ -1897,7 +1944,7 @@ ); Иначе ПравоДоступа = Истина; - РассылкаОтчетовПереопределяемый.ПравоИзмененияПапкиИФайлов(ПараметрыДоставки.Папка, ПравоДоступа); + СтандартныеПодсистемыПереопределяемый.РассылкаОтчетовПравоИзмененияПапкиИФайлов(ПараметрыДоставки.Папка, ПравоДоступа); Если НЕ ПравоДоступа Тогда ПараметрыДоставки.ИспользоватьПапку = Ложь; УстановитьПривилегированныйРежим(Истина); @@ -2779,3 +2826,4 @@ Возврат Ложь; КонецФункции + diff --git a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl index 98ec66b85..11050e9d3 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовВызовСервера/Module.bsl @@ -8,7 +8,7 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Для внутреннего использования -// +// Функция СформироватьСписокПолучателейРассылки(Знач Параметры) Экспорт ПараметрыЖурнала = Новый Структура("ИмяСобытия, Метаданные, Данные, МассивОшибок, БылиОшибки"); ПараметрыЖурнала.ИмяСобытия = НСтр("ru = 'Рассылка отчетов. Формирование списка получателей'"); @@ -29,7 +29,7 @@ // Обновляет состояние фонового задания и получает результат его выполняния из // временного хранилища. -// +// Функция ПроверитьВыполнениеФоновогоЗадания(ИдентификаторЗадания, АдресХранилища) Экспорт Результат = Новый Структура("Статус, Детали"); Попытка diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl index f3288a926..9e245efe0 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиент/Module.bsl @@ -10,7 +10,7 @@ // Формирует список получателей рассылки, предлагает пользователю выбрать // конкретного получателя или всех получателей рассылки и возвращает // результат выбора пользователя. -// +// Функция ВыбратьПолучателя(Объект, МножественныйВыбор = Истина, ВозвращатьСоответствие = Истина, ЗаголовокДляОшибок = "") Экспорт Если Объект.Личная = Истина Тогда @@ -70,7 +70,7 @@ // Выводит пользователю результат выполнения какой-либо операции, при необходимости // оповещает об изменении типа или ссылки. -// +// Процедура ПоказатьРезультат(Результат) Экспорт Если ТипЗнч(Результат) <> Тип("Структура") Тогда Возврат; @@ -113,7 +113,7 @@ КонецПроцедуры // Контролирует состояние фонового задания и выводит пользователю его результат -// +// Процедура ПроверитьВыполнениеФоновогоЗадания(ЭтаФорма) Экспорт ИдентификаторЗадания = ЭтаФорма.ПараметрыФоновогоЗадания[0].Значение; @@ -125,6 +125,7 @@ Если Результат.Статус = "ВыполненоУспешно" Тогда ДлительныеОперацииКлиент.ЗакрытьФормуДлительнойОперации(ФормаДлительнойОперации); ПоказатьРезультат(Результат.Детали); + ЭтаФорма.ПараметрыФоновогоЗадания.Очистить(); ИначеЕсли Результат.Статус = "Исключение" Тогда Предупреждение( НСтр("ru = 'Рассылки не выполнены из-за ошибки, @@ -137,3 +138,83 @@ КонецПроцедуры +// Обработчик команды формы отчета. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) Форма отчета. +// Команда (КомандаФормы) Команда, которая была вызвана. +// Результат (Булево) Истина, если вызов команды обработан. +// +Процедура ФормаОтчетаОбработчикКоманды(ЭтаФорма, Команда, Результат) Экспорт + + Если Результат = Истина Тогда + + // Действие не требуется + + ИначеЕсли Команда.Имя = "РассылкаОтчетовСоздатьНовую" Тогда + + ФормаОтчетаОткрытьРассылку(ЭтаФорма); + + Результат = Истина; + + ИначеЕсли Команда.Имя = "РассылкаОтчетовПрисоединитьКСуществующей" Тогда + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("РежимВыбора", Истина); + ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.Элементы); + ПараметрыФормы.Вставить("МножественныйВыбор", Ложь); + + ОткрытьФорму("Справочник.РассылкиОтчетов.ФормаВыбора", ПараметрыФормы, ЭтаФорма); + + Результат = Истина; + + КонецЕсли; + +КонецПроцедуры + +// Обработчик выбора формы отчета. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) Форма отчета. +// ВыбранноеЗначение (*) Результат выбора в подчиненной форме. +// ИсточникВыбора (УправляемаяФорма) Форма, где осуществлен выбор. +// Результат (Булево) Истина, если результат выбора обработан. +// +Процедура ФормаОтчетаОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат) Экспорт + + Если Результат = Истина Тогда + Возврат; + КонецЕсли; + + Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.РассылкиОтчетов") Тогда + + ФормаОтчетаОткрытьРассылку(ЭтаФорма, ВыбранноеЗначение); + + Результат = Истина; + + КонецЕсли; + +КонецПроцедуры + +// Открывает рассылку отчетов из формы отчета. +// +Процедура ФормаОтчетаОткрытьРассылку(ЭтаФорма, Ссылка = Неопределено) + + СтрокаОтчетыПараметры = Новый Структура; + СтрокаОтчетыПараметры.Вставить("ОтчетПолноеИмя", ЭтаФорма.КлючОбъекта); + СтрокаОтчетыПараметры.Вставить("КлючВарианта", ЭтаФорма.КлючТекущегоВарианта); + СтрокаОтчетыПараметры.Вставить("ВариантСсылка", ЭтаФорма.ВариантСсылка); + СтрокаОтчетыПараметры.Вставить("Настройки", ЭтаФорма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + + ПрисоединяемыеОтчеты = Новый Массив; + ПрисоединяемыеОтчеты.Добавить(СтрокаОтчетыПараметры); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ПрисоединяемыеОтчеты", ПрисоединяемыеОтчеты); + Если Ссылка <> Неопределено Тогда + ПараметрыФормы.Вставить("Ключ", Ссылка); + КонецЕсли; + + ОткрытьФорму("Справочник.РассылкиОтчетов.ФормаОбъекта", ПараметрыФормы, , Строка(ЭтаФорма.УникальныйИдентификатор) + ".ОткрытьРассылкуОтчетов"); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl deleted file mode 100644 index c51cfd0a6..000000000 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиентПереопределяемый/Module.bsl +++ /dev/null @@ -1,52 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Рассылка отчетов" (клиент, переопределяемый) -// -// Выполняется на клиенте, изменяется под специфику прикладной конфигурации, -// но предназначен для использования только данной подсистемой. -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -//////////////////////////////////////////////////////////////////////////////// -// Опциональные связи с другими подсистемами - -// Если подсистема "Дополнительные отчеты и обработки" недоступна, то содержимое -// процедуры необходимо удалить или закомментировать. -// Открывает форму подбора дополнительных отчетов. -// -Процедура ПодборДопОтчетов(ЭлементФормы) Экспорт - - // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки - ДополнительныйОтчет = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет"); - Отчет = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.Отчет"); - - ОтборПоВиду = Новый СписокЗначений; - ОтборПоВиду.Добавить(ДополнительныйОтчет, ДополнительныйОтчет); - ОтборПоВиду.Добавить(Отчет, Отчет); - - ПараметрыФормыВыбора = Новый Структура; - ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.Независимый); - ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); - ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); - ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); - ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура("Вид", ОтборПоВиду)); - - ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.ФормаВыбора", ПараметрыФормыВыбора, ЭлементФормы); - // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки - -КонецПроцедуры // ОткрытьПодборДопОтчетов - -// Если подсистема "Работа с файлами" недоступна, то содержимое процедуры -// необходимо удалить или закомментировать. -// Открывает форму папки со списком файлов. -// -Процедура ОткрытьФормуПапки(СтандартнаяОбработка, Папка) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - СтандартнаяОбработка = Ложь; - ПараметрыФормы = Новый Структура("Папка", Папка); - ОткрытьФорму("Справочник.Файлы.Форма.ХранилищеФайлов", ПараметрыФормы, , Папка); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры // ОткрытьФормуПапки diff --git a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl index b51b271c6..4ecb821bd 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовКлиентСервер/Module.bsl @@ -10,10 +10,10 @@ // Разбирает строку FTP адреса на Логин, Пароль, Сервер, Порт и Каталог // Подробнее - см. RFC 1738 (http://tools.ietf.org/html/rfc1738#section-3.1) // Шаблон: ftp://:@:/ -// +// // Параметры: // FTPАдрес (Строка) -// +// // Возвращаемое значение: // Результат (Структура) // |- Логин (Строка) @@ -68,7 +68,7 @@ // Заполняет шаблон из структуры параметров, поддерживает форматирование, может оставлять обрамление шаблона // Ограничение: должны присутствовать и левый и правый элементы обрамления -// +// // Параметры: // Шаблон (Строка) - Исходный шаблон // Параметры (Структура) - Набор параметров, которые необходимо подставить в шаблон @@ -77,7 +77,7 @@ // ФорматЛевый (Строка) - Начало обрамления формата параметра // ФорматПравый (Строка) - Конец обрамления формата параметра // ВырезатьОбрамление (Булево) - Ложь означает, что обрамление параметра будет убрано из результата -// +// // Возвращаемое значение: // Результат (Строка) - Результат заполнения // @@ -116,33 +116,34 @@ КонецФункции // Возвращает шаблон темы по умолчанию для доставки по электронной почте -// +// Функция ШаблонТемы() Экспорт Возврат НСтр("ru = '[НаименованиеРассылки] от [ДатаВыполнения(ДЛФ=''D'')]'"); КонецФункции // Возвращает шаблон тела сообщения по умолчанию для доставки по электронной почте -// +// Функция ШаблонТекста() Экспорт - Возврат НСтр("ru = 'Сформированы отчеты: - | - |[СформированныеОтчеты] - | - |[СпособДоставки] - | - |[ЗаголовокСистемы] - |[ДатаВыполнения(ДЛФ=''DD'')]'"); - // + Возврат НСтр( + "ru = 'Сформированы отчеты: + | + |[СформированныеОтчеты] + | + |[СпособДоставки] + | + |[ЗаголовокСистемы] + |[ДатаВыполнения(ДЛФ=''DD'')]'" + ); КонецФункции // Возвращает шаблон наименования архива по умолчанию -// +// Функция ШаблонИмениАрхива() Экспорт - Возврат НСтр("ru = '[НаименованиеРассылки]_[ДатаВыполнения(ДФ=''yyyy-MM-dd'')]'"); // Формат даты не локализуется + Возврат НСтр("ru = '[НаименованиеРассылки]_[ДатаВыполнения(ДФ=''yyyy-MM-dd'')]'"); // Для формата даты локализация не требуется КонецФункции // Возвращает набор шаблонов заполнения расписаний регламентного задания -// +// Функция СписокВариантовЗаполненияРасписаний() Экспорт СписокВариантов = Новый СписокЗначений; @@ -163,7 +164,7 @@ КонецФункции // Преобразует массив сообщений пользователю в одну строку -// +// Функция СтрокаСообщенийПользователю(МассивОшибок = Неопределено, ДобавитьДежурнуюФразу = Истина) Экспорт Если МассивОшибок = Неопределено Тогда МассивОшибокПолучен = Ложь; @@ -191,7 +192,7 @@ // Превращает строку в число без вызова исключений. Стандартная функция преобразования // Число() строго контролирует отсутствие каких либо символов кроме числовых. -// +// Функция СтрокуВЧисло(ИсходнаяСтрока, ЗначениеПоУмолчанию = 0) СтрокаВЧисло = Новый Соответствие; Для Значение = 0 По 9 Цикл diff --git a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl index d29a02ff0..adef64506 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПереопределяемый/Module.bsl @@ -1,16 +1,13 @@ //////////////////////////////////////////////////////////////////////////////// // Подсистема "Рассылка отчетов" (сервер, переопределяемый) // -// Выполняется на клиенте, изменяется под специфику прикладной конфигурации, +// Выполняется на сервере, изменяется под специфику прикладной конфигурации, // но предназначен для использования только данной подсистемой. //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -//////////////////////////////////////////////////////////////////////////////// -// Механизмы расширения - // Позволяет изменить форматы по умолчанию и установить картинки // // Параметры: @@ -21,7 +18,7 @@ // |- Картинка - (Картинка) Картинка формата // // Изменить настройки формата можно при помощи процедуры "РассылкаОтчетов.УстановитьПараметрыФормата": -// +// // РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, ФорматСсылка, Картинка, ИспользоватьПоУмолчанию); // Обязательные параметры: // |- СписокФорматов (...) Передается из параметров процедуры "как есть" @@ -29,9 +26,9 @@ // Необязательные параметры: // |- Картинка (Картинка) Картинка формата // |- ИспользоватьПоУмолчанию (Булево) Признак того, что формат используется по умолчанию. -// +// // Например: -// +// // РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "HTML4", , Ложь); // РассылкаОтчетов.УстановитьПараметрыФормата(СписокФорматов, "XLS" , , Истина); // @@ -122,193 +119,3 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Опциональные связи с другими подсистемами - -// Если подсистема "Дополнительные отчеты и обработки" недоступна, то содержимое -// процедуры необходимо удалить или закомментировать. -// Обработка исключений производится управляющим кодом. -// -// Параметры: -// ДопОтчет (СправочникСсылка.ДополнительныеОтчетыИОбработки) Отчет, который необходимо инициализировать -// ПараметрыОтчета (Структура) Набор параметров, получаемый в процессе проверки и подключения отчета -// см. описание функции "ИнициализироватьОтчет" модуля "РассылкаОтчетов" -// Результат (Булево, Неопределено) -// |- Истина - Удалось подключить дополнительный отчет -// |- Ложь - Не удалось подключить дополнительный отчет -// |- Неопределено - По умолчанию. Подсистема доп. отчетов недоступна. -// -Процедура ПодключитьДополнительныйОтчет(ДопОтчет, ПараметрыОтчета, Результат) Экспорт - - // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки - Если ДопОтчет.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет - ИЛИ ДопОтчет.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда - - ПараметрыОтчета.Имя = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ДопОтчет); - ПараметрыОтчета.Объект = ВнешниеОтчеты.Создать(ПараметрыОтчета.Имя); - ПараметрыОтчета.Метаданные = ПараметрыОтчета.Объект.Метаданные(); - - Результат = Истина; - - Иначе - - ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Элемент %1 не является дополнительным отчетом'"), - "'"+ Строка(ДопОтчет) +"'" - ); - - Результат = Ложь; - - КонецЕсли; - // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки - -КонецПроцедуры - -// Если подсистема "Работа с файлами" недоступна, то содержимое процедуры -// необходимо удалить или закомментировать, -// -// Параметры: см. описание процедуры "ВыполнитьДоставку" модуля "РассылкаОтчетов" -// -Процедура ВыполнитьДоставкуВПапку(ПараметрыДоставки, Вложения) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - - // Перенос вложений в таблицу - УстановитьПривилегированныйРежим(Истина); - - ТаблицаВложений = Новый ТаблицаЗначений; - ТаблицаВложений.Колонки.Добавить("ИмяФайла", Новый ОписаниеТипов("Строка")); - ТаблицаВложений.Колонки.Добавить("ПолныйПутьКФайлу", Новый ОписаниеТипов("Строка")); - ТаблицаВложений.Колонки.Добавить("Файл", Новый ОписаниеТипов("Файл")); - ТаблицаВложений.Колонки.Добавить("ФайлСсылка", Новый ОписаниеТипов("СправочникСсылка.Файлы")); - ТаблицаВложений.Колонки.Добавить("ИмяФайлаБезРасширения", Метаданные.Справочники.Файлы.Реквизиты.ПолноеНаименование.Тип); - - УстановитьПривилегированныйРежим(Ложь); - - Для Каждого Вложение Из Вложения Цикл - СтрокаТаблицы = ТаблицаВложений.Добавить(); - СтрокаТаблицы.ИмяФайла = Вложение.Ключ; - СтрокаТаблицы.ПолныйПутьКФайлу = Вложение.Значение; - СтрокаТаблицы.Файл = Новый Файл(СтрокаТаблицы.ПолныйПутьКФайлу); - СтрокаТаблицы.ИмяФайлаБезРасширения = СтрокаТаблицы.Файл.ИмяБезРасширения; - КонецЦикла; - - // Поиск существующих файлов - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | Файлы.Ссылка, - | Файлы.ПолноеНаименование - |ИЗ - | Справочник.Файлы КАК Файлы - |ГДЕ - | Файлы.ВладелецФайла = &ВладелецФайла - | И Файлы.ПолноеНаименование В(&МассивИменФайлов)"; - - Запрос.УстановитьПараметр("ВладелецФайла", ПараметрыДоставки.Папка); - Запрос.УстановитьПараметр("МассивИменФайлов", ТаблицаВложений.ВыгрузитьКолонку("ИмяФайлаБезРасширения")); - - СуществующиеФайлы = Запрос.Выполнить().Выгрузить(); - Для Каждого Файл Из СуществующиеФайлы Цикл - СтрокаТаблицы = ТаблицаВложений.Найти(Файл.ПолноеНаименование, "ИмяФайлаБезРасширения"); - СтрокаТаблицы.ФайлСсылка = Файл.Ссылка; - КонецЦикла; - - // Постоянные переменные - Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Рассылка отчетов %1 от %2'"), - "'"+ ПараметрыДоставки.Рассылка +"'", - Формат(ПараметрыДоставки.ДатаВыполнения, "ДЛФ=DT") - ); - ХранитьВерсии = Истина; - ЭтоВебКлиент = Ложь; - АдресВременногоХранилищаТекста = ""; - Пользователь = Пользователи.ТекущийПользователь(); - ЗаписатьВИсторию = Истина; - ВладелецФайла = ПараметрыДоставки.Папка; - - Для Каждого Вложение Из ТаблицаВложений Цикл - // Временные переменные - АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Вложение.ПолныйПутьКФайлу)); - ВремяИзменения = Вложение.Файл.ПолучитьВремяИзменения(); - ВремяИзмененияУниверсальное = Вложение.Файл.ПолучитьУниверсальноеВремяИзменения(); - Размер = Вложение.Файл.Размер(); - РасширениеБезТочки = СтрЗаменить(Вложение.Файл.Расширение, ".", ""); - ИмяБезРасширения = Вложение.ИмяФайлаБезРасширения; - - // Запись - Если ЗначениеЗаполнено(Вложение.ФайлСсылка) Тогда - РаботаСФайламиВызовСервера.СоздатьВерсиюИОбновитьВерсиюВФайле( - ВремяИзменения, - ВремяИзмененияУниверсальное, - Вложение.ФайлСсылка, - ИмяБезРасширения, - Размер, - РасширениеБезТочки, - АдресВременногоХранилищаФайла, - АдресВременногоХранилищаТекста, - ЭтоВебКлиент, - Пользователь - ); - Иначе - Вложение.ФайлСсылка = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией( - ВладелецФайла, - ИмяБезРасширения, - РасширениеБезТочки, - ВремяИзменения, - ВремяИзмененияУниверсальное, - Размер, - АдресВременногоХранилищаФайла, - АдресВременногоХранилищаТекста, - ЭтоВебКлиент, - Пользователь, - Комментарий, - ЗаписатьВИсторию - ); - КонецЕсли; - - // Заполнение ссылки на файл - Если ПараметрыДоставки.ДобавлятьСсылки <> "" Тогда - ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( - ПараметрыДоставки.ПредставлениеОтчетовПолучателя, - Вложение.ПолныйПутьКФайлу, - ПолучитьНавигационнуюСсылкуИнформационнойБазы() +"#"+ ПолучитьНавигационнуюСсылку(Вложение.ФайлСсылка) - ); - КонецЕсли; - - // Очистка - УдалитьИзВременногоХранилища(АдресВременногоХранилищаФайла); - КонецЦикла; - - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры - -// Если подсистемы "Управление доступом" или "Работа с файлами" недоступны, то -// содержимое процедуры необходимо удалить или закомментировать, -// -// Параметры: см. описание процедуры "ВыполнитьДоставку" модуля "РассылкаОтчетов" -// -Процедура ПравоИзмененияПапкиИФайлов(Папка, Результат) Экспорт - - // СтандартныеПодсистемы.УправлениеДоступом - Результат = УправлениеДоступом.ЕстьПравоПоЗначениюДоступа("ИзменениеПапокИФайлов", Папка); - // Конец СтандартныеПодсистемы.УправлениеДоступом - -КонецПроцедуры - -// Если подсистема "Получение файлов из Интернета" недоступна, то содержимое -// процедуры необходимо удалить или закомментировать, -// -Процедура НастройкиПроксиНаСервере(Прокси) Экспорт - - // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.ПолучитьНастройкиПроксиНаСервере1СПредприятие(); - Если НастройкаПроксиСервера <> Неопределено Тогда - Прокси = Новый ИнтернетПрокси(); - Прокси.Установить("ftp", НастройкаПроксиСервера["Сервер"], НастройкаПроксиСервера["Порт"]); - ЗаполнитьЗначенияСвойств(Прокси, НастройкаПроксиСервера); - КонецЕсли; - // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - -КонецПроцедуры diff --git a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl index e6735f4ae..129bfbcd0 100644 --- a/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/РассылкаОтчетовПовтИсп/Module.bsl @@ -8,13 +8,13 @@ // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Возвращает список значений перечисления "ФорматыСохраненияОтчетов" -// +// // Возвращаемое значение: -// СписокФорматов - (СписокЗначений) Список форматов, с пометками на системных форматах по умолчанию -// |- Значение - (ПеречислениеСсылка.ФорматыСохраненияОтчетов) Ссылка на описываемый формат -// |- Представление - (Строка) Пользовательское представление описываемого формата -// |- Пометка - (Булево) Признак использования как формата по умолчанию -// |- Картинка - (Картинка) Картинка формата +// СписокФорматов (СписокЗначений) Список форматов, с пометками на системных форматах по умолчанию +// |- Значение (ПеречислениеСсылка.ФорматыСохраненияОтчетов) Ссылка на описываемый формат +// |- Представление (Строка) Пользовательское представление описываемого формата +// |- Пометка (Булево) Признак использования как формата по умолчанию +// |- Картинка (Картинка) Картинка формата // Функция СписокФорматов() Экспорт СписокФорматов = Новый СписокЗначений; @@ -50,15 +50,15 @@ КонецФункции // Возвращает типы получателей в разрезах хранения и пользовательского представления этих типов -// +// // Возвращаемое значение: -// ТаблицаТипов - (ТаблицаЗначений) Таблица типов получателей -// |- ИОМД - (СправочникСсылка.ИдентификаторыОбъектовМетаданных) Ссылка, которая хранится в базе данных -// |- ТипПолучателей - (ОписаниеТипов) Тип, которым ограничиваются значения списков получателей и исключенных -// |- Представление - (Строка) Представление типа для пользователей -// |- ОсновнойВидКИ - (СправочникСсылка.ВидыКонтактнойИнформации) вид контактной информации: e-mail, по умолчанию -// |- ГруппаКИ - (СправочникСсылка.ВидыКонтактнойИнформации) группа вида контактной информации -// |- ПутьФормыВыбора - (Строка) +// ТаблицаТипов (ТаблицаЗначений) Таблица типов получателей +// |- ИОМД (СправочникСсылка.ИдентификаторыОбъектовМетаданных) Ссылка, которая хранится в базе данных +// |- ТипПолучателей (ОписаниеТипов) Тип, которым ограничиваются значения списков получателей и исключенных +// |- Представление (Строка) Представление типа для пользователей +// |- ОсновнойВидКИ (СправочникСсылка.ВидыКонтактнойИнформации) вид контактной информации: e-mail, по умолчанию +// |- ГруппаКИ (СправочникСсылка.ВидыКонтактнойИнформации) группа вида контактной информации +// |- ПутьФормыВыбора (Строка) // Функция ТаблицаТиповПолучателей() Экспорт ТаблицаТипов = Новый ТаблицаЗначений; @@ -76,9 +76,9 @@ ДоступныеТипы = Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.Получатели.Реквизиты.Получатель.Тип.Типы(); // Параметры справочников "Пользователи" + "Группы пользователей" - РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы, - Новый Структура("ОсновнойТип, ДополнительныйТип", - Тип("СправочникСсылка.Пользователи"), + РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ДоступныеТипы, + Новый Структура("ОсновнойТип, ДополнительныйТип", + Тип("СправочникСсылка.Пользователи"), Тип("СправочникСсылка.ГруппыПользователей") ) ); @@ -89,7 +89,7 @@ // Параметры остальных справочников ПустойМассив = Новый Массив; Для Каждого НеиспользованныйТип Из ДоступныеТипы Цикл - РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ПустойМассив, + РассылкаОтчетов.ДобавитьЭлементВТаблицуТиповПолучателей(ТаблицаТипов, ПустойМассив, Новый Структура("ОсновнойТип", НеиспользованныйТип) ); КонецЦикла; @@ -98,14 +98,14 @@ КонецФункции // Получает пустое значение для поиска по таблице "Отчеты" или "ФорматыОтчетов" справочника "РассылкиОтчетов" -// +// Функция ПустоеЗначениеОтчета() Экспорт УстановитьПривилегированныйРежим(Истина); Возврат Метаданные.Справочники.РассылкиОтчетов.ТабличныеЧасти.ФорматыОтчетов.Реквизиты.Отчет.Тип.ПривестиЗначение(); КонецФункции // Получает заголовок системы, а если он не задан - синоним метаданных конфигурации -// +// Функция ИмяЭтойИнформационнойБазы() Экспорт УстановитьПривилегированныйРежим(Истина); diff --git a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl index dbcb38888..8bcb0d7e9 100644 --- a/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентированныеДанныеКлиентСервер/Module.bsl @@ -298,11 +298,17 @@ КонтрольнаяСумма = 0; - ДлинаКода = ?(ЭтоЮрЛицо,8,10); + Если ЭтоЮрЛицо Тогда + КодПоОКПОДляРасчета = КодПоОКПО; + Иначе + КодПоОКПОДляРасчета = СтроковыеФункцииКлиентСервер.УдалитьПовторяющиесяСимволы(КодПоОКПО, "0"); + КонецЕсли; + + ДлинаКода = СтрДлина(КодПоОКПОДляРасчета); Для инд = 1 По (ДлинаКода-1) Цикл - КонтрольнаяСумма = КонтрольнаяСумма + Сред(КодПоОКПО,инд,1) * инд; + КонтрольнаяСумма = КонтрольнаяСумма + Сред(КодПоОКПОДляРасчета,инд,1) * инд; КонецЦикла; @@ -313,7 +319,7 @@ КонтрольнаяСумма = 0; Для инд = 1 По (ДлинаКода-1) Цикл - КонтрольнаяСумма = КонтрольнаяСумма + Сред(КодПоОКПО,инд,1) * (инд + 2); + КонтрольнаяСумма = КонтрольнаяСумма + Сред(КодПоОКПОДляРасчета,инд,1) * (инд + 2); КонецЦикла; @@ -322,7 +328,7 @@ КонецЕсли; - Если Число(Сред(КодПоОКПО,ДлинаКода,1)) <> КонтрольнаяЦифра Тогда + Если Число(Сред(КодПоОКПОДляРасчета,ДлинаКода,1)) <> КонтрольнаяЦифра Тогда СоответствуетТребованиям = ЛОЖЬ; ТекстСообщения = НСтр("ru = 'Контрольное число для кода по ОКПО не совпадает с рассчитанным.'"); diff --git a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl index 410473599..429116241 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияКлиент/Module.bsl @@ -15,234 +15,15 @@ // ОписаниеОшибки - Строка. // Функция ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий() Экспорт - - Параметры = РегламентныеЗаданияСервер.ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Ложь); + + Параметры = РегламентныеЗаданияСлужебныйВызовСервера + .ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Ложь); Если НЕ Параметры.Отказ И Параметры.ТребуетсяОткрытьОтдельныйСеанс Тогда - ПопыткаЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий(Параметры); + РегламентныеЗаданияСлужебныйКлиент. + ПопыткаЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий(Параметры); КонецЕсли; Возврат Параметры; КонецФункции - -// Возвращает расписание регламентного задания по идентификатору. -// -// Параметры: -// Идентификатор - Строка уникального идентификатора РегламентногоЗадания -// -// Возвращаемое значение: -// РасписаниеРегламентногоЗадания. -// -Функция ПолучитьРасписаниеРегламентногоЗадания(Знач Идентификатор) Экспорт - - Возврат ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(РегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗаданияВСтруктуре(Идентификатор)); - -КонецФункции - -// Устанавливает расписание регламентного задания по идентификатору. -// -// Параметры: -// Идентификатор - Строка уникального идентификатора РегламентногоЗадания. -// Расписание - РасписаниеРегламентногоЗадания. -// -Процедура УстановитьРасписаниеРегламентногоЗадания(Знач Идентификатор, Знач Расписание) Экспорт - - РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗаданияИзСтруктуры(Идентификатор, ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Расписание)); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Обработчик события ПриНачалеРаботыСистемы вызывается -// для выполнения действий, требуемых для подсистемы РегламентныеЗадания. -// -Процедура ПриНачалеРаботыСистемы() Экспорт - - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() - ИЛИ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - - Возврат; - КонецЕсли; - - Если Найти(ПараметрЗапуска, "DoScheduledJobs") <> 0 Тогда - Предупреждать = (Найти(ПараметрЗапуска, "SkipMessageBox") = 0); - ОтдельныйСеанс = (Найти(ПараметрЗапуска, "AloneIBSession") <> 0); - #Если ВебКлиент Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь); - #КонецЕсли - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда - ЗаданияВыполняютсяНормально = Неопределено; - ОписаниеОшибки = ""; - Если РегламентныеЗаданияСервер.ТекущийСеансВыполняетРегламентныеЗадания(ЗаданияВыполняютсяНормально, Истина, ОписаниеОшибки) Тогда - УстановитьЗаголовокПриложения(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Выполнение регламентных заданий: %1'"), - ПолучитьЗаголовокПриложения() )); - Если ОтдельныйСеанс Тогда - // Выполнять в отдельном сеансе. - ОсновноеОкно = ОсновноеОкно(); - - ИзПрограммы = (Найти(ПараметрЗапуска, "From1C") <> 0); - ПараметрыВФорму = Новый Структура("ЗаголовокНадписи", - ?(ИзПрограммы, НСтр("ru = 'Сеанс закроется автоматически при закрытии основного сеанса.'"), "")); - - Если ОсновноеОкно = Неопределено Тогда - ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма.РабочийСтолОтдельногоСеансаВыполненияРегламентныхЗаданий",ПараметрыВФорму ); - Иначе - ОткрытьФорму("Обработка.РегламентныеИФоновыеЗадания.Форма.РабочийСтолОтдельногоСеансаВыполненияРегламентныхЗаданий",ПараметрыВФорму,,, ОсновноеОкно); - КонецЕсли; - - Если ОткрытьФормуМодально("Обработка.РегламентныеИФоновыеЗадания.Форма.ВыполнениеРегламентныхЗаданий") = "Перезапустить" Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь, Истина, " /C""" + ПараметрЗапуска + """"); - КонецЕсли; - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь); - Иначе - // Выполнять в этом сеансе. - ПодключитьОбработчикОжидания("ВыполнениеРегламентныхЗаданийВОсновномСеансе", 1, Истина); - КонецЕсли; - Иначе - Если Предупреждать Тогда - - Если ЗаданияВыполняютсяНормально Тогда - ТекстСообщения = НСтр("ru = 'Сеанс, обрабатывающий регламентные задания, уже открыт.'"); - Иначе - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Сеанс, выполняющий регламентные задания, уже открыт. - | - |%1'"), ОписаниеОшибки); - Предупреждение(ТекстСообщения); - КонецЕсли; - КонецЕсли; - Если ОтдельныйСеанс Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь); - КонецЕсли; - КонецЕсли; - Иначе - Если Предупреждать Тогда - Предупреждение(НСтр("ru = 'Регламентные задания выполняются на сервере.'")); - КонецЕсли; - Если ОтдельныйСеанс Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; - ЗавершитьРаботуСистемы(Ложь); - КонецЕсли; - КонецЕсли; - - ИначеЕсли СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая Тогда - - ПараметрыТолькоЧтение = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий; - - Если ПараметрыТолькоЧтение.Отказ Тогда - ПриОшибкеВыполненияРегламентныхЗаданий(ПараметрыТолькоЧтение.ОписаниеОшибки); - ИначеЕсли ПараметрыТолькоЧтение.ТребуетсяОткрытьОтдельныйСеанс Тогда - ПодключитьОбработчикОжидания("ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания", 1, Истина); - КонецЕсли; - - Если ПараметрыТолькоЧтение.УведомлятьОНекорректномВыполнении Тогда - ПодключитьОбработчикОжидания("УведомлятьОНекорректномВыполненииРегламентныхЗаданий", ПараметрыТолькоЧтение.ПериодУведомления * 60, Истина); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Выполняет попытку открытия нового сеанса, обрабатывающего регламентные задания. -// -// Параметры: -// Параметры - Структура, используемые свойства: -// ДополнительныеПараметрыКоманднойСтроки - Строка. -// Отказ - Булево, выходной параметр. -// ОписаниеОшибки - Строка, выходной параметр. -// -Процедура ПопыткаЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий(Знач Параметры) Экспорт - - #Если НЕ ВебКлиент Тогда - Попытка - Параметры.ВыполненаПопыткаОткрытия = Истина; - ЗапуститьСистему( - ?(Найти(ВРег(ПараметрЗапуска), "/DEBUG") = 0, "", "/DEBUG ") - + Параметры.ДополнительныеПараметрыКоманднойСтроки); - Исключение - Параметры.ОписаниеОшибки = ОписаниеОшибки(); - Параметры.Отказ = Истина; - КонецПопытки; - #Иначе - Параметры.Отказ = Истина; - Параметры.ОписаниеОшибки = НСтр("ru = 'Выполнение регламентных заданий в отдельном сеансе веб-клиента невозможна. - | - |Для выполнения регламентных заданий, необходимо, чтобы администратор настроил запуск обычного - |или тонкого клиента на веб-сервере.'"); - #КонецЕсли - Параметры.ОписаниеОшибки = - ?(ПустаяСтрока(Параметры.ОписаниеОшибки), - "", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка открытия сеанса для выполнения регламентных заданий: - | - |%1'"), - Параметры.ОписаниеОшибки)); - -КонецПроцедуры - -// Оповещает пользователя об ошибке выполнения регламентных заданий. -// -// Вызывается из процедуры РегламентныеЗаданияГлобальный.УведомлятьОНекорректномВыполненииРегламентныхЗаданий() и -// РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(). -// -// Вызов происходит, если обнаружено, что нет сеанса выполнения или -// сеанс есть, но "висит" (долго "не работает"). -// -// Параметры: -// ОписаниеОшибки - Строка. -// -Процедура ПриОшибкеВыполненияРегламентныхЗаданий(ОписаниеОшибки) Экспорт - - Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий.ТекущийПользовательАдминистратор Тогда - ПоказатьОповещениеПользователя( - НСтр("ru = 'Регламентные задания не выполняются.'"), - "e1cib/app/Обработка.РегламентныеИФоновыеЗадания", - ОписаниеОшибки, - БиблиотекаКартинок.ОшибкаВыполненияРегламентныхЗаданий); - Иначе - ПоказатьОповещениеПользователя( - НСтр("ru = 'Регламентные задания не выполняются.'"), - , - ОписаниеОшибки + Символы.ПС + НСтр("ru = 'Обратитесь к администратору.'"), - БиблиотекаКартинок.ОшибкаВыполненияРегламентныхЗаданий); - КонецЕсли; - -КонецПроцедуры - -// Подключает глобальный обработчик ожидания в форме. -Процедура ПодключитьГлобальныйОбработчикОжидания(ИмяПроцедуры, Интервал, Однократно = Ложь) Экспорт - - ПодключитьОбработчикОжидания(ИмяПроцедуры, Интервал, Однократно); - -КонецПроцедуры - -// Отключает глобальный обработчик ожидания в форме. -Процедура ОтключитьГлобальныйОбработчикОжидания(ИмяПроцедуры) Экспорт - - ОтключитьОбработчикОжидания(ИмяПроцедуры); - -КонецПроцедуры - -Функция ОсновноеОкно() Экспорт - - ОсновноеОкно = Неопределено; - - Окна = ПолучитьОкна(); - Если Окна <> Неопределено Тогда - Для каждого Окно Из Окна Цикл - Если Окно.Основное Тогда - ОсновноеОкно = Окно; - Прервать; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Возврат ОсновноеОкно; - -КонецФункции diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl index 7c7de2d58..f224f2ab4 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/Module.bsl @@ -4,1235 +4,162 @@ //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. +// Возвращает использование регламентного задания. +// Перед вызовом требуется иметь право Администрирования +// или УстановитьПривилегированныйРежим. // // Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.2.2.2"; - Обработчик.Процедура = "РегламентныеЗаданияСервер.КонвертироватьНастройкиВыполненияРегламентныхЗаданий_1_2_2_2"; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для контроля выполнения - -// Определяет, что текущий сеанс выполняет регламентные задания, -// если это не так и указано установить текущий сеанс в этом качестве, -// то производится попытка установки. -// -// Параметры: -// ЗаданияВыполняютсяНормально - Булево - Истина, если нет отклонений в выполнении заданий. -// УстановитьТекущийСеансКакСеансВыполняющийРегламентныеЗадания - Булево - Истина, -// если требуется установить текущий сеанс, -// как сеанс в котором будет происходить выполнение регламентных заданий, -// если не удалось установить, тогда функция вернет Ложь. -// ОписаниеОшибки - Строка - Если НЕ ЗаданияВыполняютсяНормально, тогда описание отклонения: -// либо выполнение долго не начинается, либо выполнение слишком затянулось. +// Идентификатор - ОбъектМетаданных регламентного задания для поиска +// предопределенного регламентного задания. +// - УникальныйИдентификатор регламентного задания. +// - Строка уникального идентификатора регламентного задания. +// - РегламентноеЗадание. // // Возвращаемое значение: // Булево. -// -Функция ТекущийСеансВыполняетРегламентныеЗадания(ЗаданияВыполняютсяНормально = Неопределено, - Знач УстановитьТекущийСеансКакСеансВыполняющийРегламентныеЗадания = Ложь, - ОписаниеОшибки = "") Экспорт - - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ЗаданияВыполняютсяНормально = Истина; - ОписаниеОшибки = НСтр("ru = 'Задания выполняются на сервере.'"); - Возврат Ложь; - КонецЕсли; +// +Функция ПолучитьИспользованиеРегламентногоЗадания(Знач Идентификатор) Экспорт + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); - Состояние = ПолучитьСостояниеВыполненияРегламентныхЗаданий(); + Задание = ПолучитьРегламентноеЗадание(Идентификатор); - Сеансы = ПолучитьСеансыИнформационнойБазы(); - НайденСеансВыполняющийЗадания = Ложь; - ТекущийСеансВыполняетРегламентныеЗадания = Ложь; - ЗаданияВыполняютсяНормально = Истина; - - // Поиск сеанса выполняющего регламентные задания, - // установленного в структуре СостояниеВыполненияРегламентныхЗаданий, - // среди активных сеансов - // Поиск текущего сеанса (начало текущего сеанса может понадобится - // для инициализации Структуры). - Для каждого Сеанс Из Сеансы Цикл - Если Сеанс.НомерСеанса = НомерСеансаИнформационнойБазы() Тогда - ТекущийСеанс = Сеанс; - КонецЕсли; - Если Сеанс.НомерСеанса = Состояние.НомерСеанса - И Сеанс.НачалоСеанса = Состояние.НачалоСеанса Тогда - // - НайденныйСеанс = Сеанс; - НайденСеансВыполняющийЗадания = Истина; - ТекущийСеансВыполняетРегламентныеЗадания = (Сеанс.НомерСеанса = НомерСеансаИнформационнойБазы()); - КонецЕсли; - КонецЦикла; - - Если НЕ НайденСеансВыполняющийЗадания И УстановитьТекущийСеансКакСеансВыполняющийРегламентныеЗадания Тогда - МоментТекущегоВремени = ТекущаяДатаСеанса(); - Состояние.НомерСеанса = ТекущийСеанс.НомерСеанса; - Состояние.НачалоСеанса = ТекущийСеанс.НачалоСеанса; - Состояние.ИмяКомпьютера = ИмяКомпьютера(); - Состояние.ИмяПриложения = ТекущийСеанс.ИмяПриложения; - Состояние.ИмяПользователя = ИмяПользователя(); - Состояние.ИдентификаторОчередногоЗадания = Неопределено; - Состояние.НачалоВыполненияОчередногоЗадания = МоментТекущегоВремени; - Состояние.ОкончаниеВыполненияОчередногоЗадания = МоментТекущегоВремени; - СохранитьСостояниеВыполненияРегламентныхЗаданий(Состояние); - НайденСеансВыполняющийЗадания = Истина; - ТекущийСеансВыполняетРегламентныеЗадания = Истина; - КонецЕсли; - - Если НЕ НайденСеансВыполняющийЗадания Тогда - ОписаниеОшибки = НСтр("ru = 'Нет сеанса, выполняющего регламентные задания.'"); - ЗаданияВыполняютсяНормально = Ложь; - // - ИначеЕсли НЕ ЗначениеЗаполнено(Состояние.ОкончаниеВыполненияОчередногоЗадания) Тогда - // Если после завершения очередного задания прошло более часа, значит задержка запуска. - Если ТекущаяДатаСеанса() - 3600 > Состояние.ОкончаниеВыполненияОчередногоЗадания Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполнение регламентных заданий не начинается уже более 1 часа. - |Возможно, требуется проверка и перезапуск сеанса. Выполнение ожидается - | на компьютере: %1, - | в приложении: %2, - | от имени пользователя: %3, - | в сеансе номер: %4.'"), - Строка(Состояние.ИмяКомпьютера), - Строка(Состояние.ИмяПриложения), - Строка(Состояние.ИмяПользователя), - Строка(Состояние.НомерСеанса) ); - ЗаданияВыполняютсяНормально = Ложь; - КонецЕсли; - Иначе - // Если выполнение продолжается более 1 часа, значить она слишком затянулось. - Если ТекущаяДатаСеанса() - 3600 > Состояние.НачалоВыполненияОчередногоЗадания Тогда - ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Выполнение регламентного задания происходит непрерывно более 1 часа. - |Возможно, требуется проверка и перезапуск сеанса. Выполнение происходит - | на компьютере: %1, - | в приложении: %2, - | от имени пользователя: %3, - | в сеансе номер: %4.'"), - Строка(Состояние.ИмяКомпьютера), - Строка(Состояние.ИмяПриложения), - Строка(Состояние.ИмяПользователя), - Строка(Состояние.НомерСеанса)); - ЗаданияВыполняютсяНормально = Ложь; - КонецЕсли; - КонецЕсли; - - Возврат ТекущийСеансВыполняетРегламентныеЗадания; + Возврат Задание.Использование; КонецФункции -// Проверяет, что сеанс открывший этот дополнительный сеанс для выполнения -// регламентных заданий завершен, если задан. +// Устанавливает использование регламентного задания. +// Перед вызовом требуется иметь право Администрирования +// или УстановитьПривилегированныйРежим. // // Параметры: -// ПараметрЗапуска - Строка - значение глобального свойства ПараметрЗапуска, -// требуется указывать, т.к. свойство недоступно на сервере. -// РодительскийСеансЗадан - Булево - возвращает Истина, если родительский сеанс задан, -// иначе возвращает Ложь. +// Идентификатор - ОбъектМетаданных регламентного задания для поиска +// предопределенного регламентного задания. +// - УникальныйИдентификатор регламентного задания. +// - Строка уникального идентификатора регламентного задания. +// - РегламентноеЗадание. // -// Возвращаемое значение: -// Булево. -// -Функция РодительскийСеансЗаданИЗавершен(Знач ПараметрЗапуска) Экспорт - - РодительскийСеансЗадан = Ложь; - Если Найти(ПараметрЗапуска, "DoScheduledJobs") <> 0 Тогда - ИндексНомераСеанса = Найти(ПараметрЗапуска, "SessionNumber="); - ИндексНачалаСеанса = Найти(ПараметрЗапуска, "SessionStarted="); - Если ИндексНомераСеанса <> 0 И - ИндексНачалаСеанса <> 0 И - ИндексНомераСеанса < ИндексНачалаСеанса Тогда - РодительскийСеансЗадан = Истина; - Сеансы = ПолучитьСеансыИнформационнойБазы(); - Для каждого Сеанс Из Сеансы Цикл - Если Найти(ПараметрЗапуска, "SessionNumber=" + Сеанс.НомерСеанса) <> 0 И - Найти(ПараметрЗапуска, "SessionStarted=" + Сеанс.НачалоСеанса) <> 0 Тогда - Возврат Ложь; - КонецЕсли; - КонецЦикла; - Возврат Истина; - КонецЕсли; - КонецЕсли; - Возврат Ложь; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с регламентными заданиями - +// Использование - Булево. +// Процедура УстановитьИспользованиеРегламентногоЗадания(Знач Идентификатор, Знач Использование) Экспорт + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Задание = ПолучитьРегламентноеЗадание(Идентификатор); - Задание.Использование = Использование; + + Если Задание.Использование <> Использование Тогда + Задание.Использование = Использование; + КонецЕсли; + Задание.Записать(); КонецПроцедуры -Функция ПолучитьРасписаниеРегламентногоЗаданияВСтруктуре(Знач Идентификатор) Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - Возврат ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(ПолучитьРегламентноеЗадание(Идентификатор).Расписание); - -КонецФункции - -Процедура УстановитьРасписаниеРегламентногоЗаданияИзСтруктуры(Знач Идентификатор, Знач РасписаниеВСтруктуре) Экспорт +// Возвращает расписание регламентного задания. +// Перед вызовом требуется иметь право Администрирования +// или УстановитьПривилегированныйРежим. +// +// Параметры: +// Идентификатор - ОбъектМетаданных регламентного задания для поиска +// предопределенного регламентного задания. +// - УникальныйИдентификатор регламентного задания. +// - Строка уникального идентификатора регламентного задания. +// - РегламентноеЗадание. +// +// ВСтруктуре - Булево, если Истина, тогда расписание будет преобразовано +// в структуру, которую можно передать на клиент. +// +// Возвращаемое значение: +// Булево. +// +Функция ПолучитьРасписаниеРегламентногоЗадания(Знач Идентификатор, Знач ВСтруктуре = Ложь) Экспорт + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); Задание = ПолучитьРегламентноеЗадание(Идентификатор); - Задание.Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(РасписаниеВСтруктуре); + + Если ВСтруктуре Тогда + Возврат ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Задание.Расписание); + КонецЕсли; + + Возврат Задание.Расписание; + +КонецФункции + +// Устанавливает расписание регламентного задания. +// Перед вызовом требуется иметь право Администрирования +// или УстановитьПривилегированныйРежим. +// +// Параметры: +// Идентификатор - ОбъектМетаданных регламентного задания для поиска +// предопределенного регламентного задания. +// - УникальныйИдентификатор регламентного задания. +// - Строка уникального идентификатора регламентного задания. +// - РегламентноеЗадание. +// +// Расписание - РасписаниеРегламентногоЗадания. +// - Структура расписания, как возвращает функция +// ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру. +// +Процедура УстановитьРасписаниеРегламентногоЗадания(Знач Идентификатор, Знач Расписание) Экспорт + + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Задание = ПолучитьРегламентноеЗадание(Идентификатор); + + Если ТипЗнч(Расписание) = Тип("РасписаниеРегламентногоЗадания") Тогда + Задание.Расписание = Расписание; + Иначе + Задание.Расписание = ОбщегоНазначенияКлиентСервер.СтруктураВРасписание(Расписание); + КонецЕсли; + Задание.Записать(); КонецПроцедуры -// Возвращает настройки выполнения регламентных заданий для файлового режима. +// Возвращает РегламентноеЗадание из информационной базы. +// +// Параметры: +// Идентификатор - ОбъектМетаданных регламентного задания для поиска +// предопределенного регламентного задания. +// - УникальныйИдентификатор регламентного задания. +// - Строка уникального идентификатора регламентного задания. +// - РегламентноеЗадание из которого нужно получить уникальный +// идентификатор для получения свежей копии регламентного задания. // // Возвращаемое значение: -// Настройки - Структура. -// -Функция ПолучитьНастройкиВыполненияРегламентныхЗаданий() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Настройки = Константы.НастройкиВыполненияРегламентныхЗаданий.Получить(); - Настройки = ?(ТипЗнч(Настройки) = Тип("ХранилищеЗначения"), Настройки.Получить(), Неопределено); - - Возврат ПроверитьНастройки(Настройки); - -КонецФункции - -// Устанавливает настройки выполнения регламентных заданий для файлового режима. -// -// Параметры: -// Настройки - Структура. -// -Процедура УстановитьНастройкиВыполненияРегламентныхЗаданий(Настройки) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Настройки = ПроверитьНастройки(Настройки); - - Константы.НастройкиВыполненияРегламентныхЗаданий.Установить(Новый ХранилищеЗначения(Настройки)); - -КонецПроцедуры - -// Эмулирует в тонком клиенте системную процедуру ВыполнитьОбработкуЗаданий(), -// но может применяться и в толстом клиенте. -// -// Место хранения экземпляров фоновых заданий - ВременноеХранилище. -// Время хранения экземпляров - до закрытия сеанса клиента, выполняющего регламентные задания. -// Максимальное количество одновременно хранимых фоновых заданий: 1000. -// -// Идентификатор сеанса, выполняющего регламентные задания находится в структуре -// СостояниеВыполненияРегламентныхЗаданий (ХранилищеЗначения), содержащее структуру -// со свойствами: -// НомерСеанса, НачалоСеанса, ИдентификаторОчередногоЗадания, -// НачалоВыполненияОчередногоЗадания, ОкончаниеВыполненияОчередногоЗадания и др. -// Логика проверки выполнения регламентных заданий в текущем сеансе: -// Если <НомерСеанса> и <НачалоСеанса> совпадают с текущим, -// тогда выполнение в текущем сеансе, если нет, -// тогда проверяется существует ли сеанс в списке сеансов, -// если не существует, тогда выполнение в текущем сеансе, -// если существует тогда нет выполнения в текущем сеансе, а вместо этого -// проверятся период выполнения/простоя. Если "выполняется"/"простаивает" дольше -// 1 час происходит уведомление пользователя (ошибка с соответствующим описанием). -// Логика порядка выполнения заданий. Задания выполняются последовательно, -// регистрируется последнее начатое задание. При новой проверке, проверятся -// задание, следующее за заданием, начатым в прошлый раз, -// чтобы получился эффект параллельности выполнения. -// Логика проверки расписания. Если произошла ошибка тогда используется аварийное -// расписание, иначе - основное. -// -// Параметры: -// ВремяВыполнения - Число(10.0) - время (в секундах) выполнения очередной -// порции регламентных заданий. Если время не задано, будет выполнен -// только один цикл выполнения (до завершения одного фонового -// задания или выполнения всех регламентных заданий без фоновых, -// т.е. только проверка расписания). -// -Процедура ВыполнитьРегламентныеЗадания(ВремяВыполнения = 0) Экспорт - - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Возврат; - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - - Если НЕ ТекущийСеансВыполняетРегламентныеЗадания() Тогда - Возврат; - КонецЕсли; - - Состояние = ПолучитьСостояниеВыполненияРегламентныхЗаданий(); - - ВремяВыполнения = ?(ТипЗнч(ВремяВыполнения) = Тип("Число"), ВремяВыполнения, 0); - - Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); - ВыполнениеЗавершено = Ложь; // Определяет, что ВремяВыполнения закончилось, или - // все возможные регламентные задания выполнены. - НачалоВыполнения = ТекущаяДатаСеанса(); - КоличествоВыполненныхЗаданий = 0; - ФоновоеЗаданиеВыполнялось = Ложь; - ИдентификаторПоследнегоЗадания = Состояние.ИдентификаторОчередногоЗадания; - - // Количество заданий проверяется каждый раз при начале выполнения, - // т.к. задания могут быть удалены в другом сеансе, а тогда будет зацикливание. - Пока НЕ ВыполнениеЗавершено И Задания.Количество() > 0 Цикл - ПервоеЗаданиеНайдено = (ИдентификаторПоследнегоЗадания = Неопределено); - ОчередноеЗаданиеНайдено = Ложь; - Для каждого Задание ИЗ Задания Цикл - // Завершение выполнения, если: - // а) время задано и вышло; - // б) время не задано и хоть одно фоновое задание выполнено; - // в) время не задано и все регламентные задания выполнены по количеству. - Если ( ВремяВыполнения = 0 И - ( ФоновоеЗаданиеВыполнялось ИЛИ - КоличествоВыполненныхЗаданий >= Задания.Количество() ) ) ИЛИ - ( ВремяВыполнения <> 0 И - НачалоВыполнения + ВремяВыполнения <= ТекущаяДатаСеанса() ) Тогда - ВыполнениеЗавершено = Истина; - Прервать; - КонецЕсли; - Если НЕ ПервоеЗаданиеНайдено Тогда - Если Строка(Задание.УникальныйИдентификатор) = ИдентификаторПоследнегоЗадания Тогда - // Найдено последнее выполненное регламентное задание, значит следующее - // регламентное задание нужно проверять на необходимость выполнения фонового задания. - ПервоеЗаданиеНайдено = Истина; - КонецЕсли; - // Если первое регламентное задание, которое нужно проверить на необходимость - // выполнения фонового задания ещё не найдено, тогда текущее задание пропускается. - Продолжить; - КонецЕсли; - ОчередноеЗаданиеНайдено = Истина; - КоличествоВыполненныхЗаданий = КоличествоВыполненныхЗаданий + 1; - Состояние.ИдентификаторОчередногоЗадания = Строка(Задание.УникальныйИдентификатор); - Состояние.НачалоВыполненияОчередногоЗадания = ТекущаяДатаСеанса(); - Состояние.ОкончаниеВыполненияОчередногоЗадания = '00010101'; - СохранитьСостояниеВыполненияРегламентныхЗаданий(Состояние, - "ИдентификаторОчередногоЗадания, - |НачалоВыполненияОчередногоЗадания, - |ОкончаниеВыполненияОчередногоЗадания"); - Если Задание.Использование Тогда - ВыполнитьРегламентноеЗадание = Ложь; - СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); - - Если СвойстваПоследнегоФоновогоЗадания <> Неопределено И - СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда - // Проверка аварийного расписания. - Если СвойстваПоследнегоФоновогоЗадания.ПопыткаЗапуска <= Задание.КоличествоПовторовПриАварийномЗавершении Тогда - Если СвойстваПоследнегоФоновогоЗадания.Конец + Задание.ИнтервалПовтораПриАварийномЗавершении <= ТекущаяДатаСеанса() Тогда - // Повторный запуск фонового задания по регламентному заданию. - ВыполнитьРегламентноеЗадание = Истина; - КонецЕсли; - КонецЕсли; - Иначе - // Проверяем стандартное расписание. - ВыполнитьРегламентноеЗадание = Задание.Расписание.ТребуетсяВыполнение( - ТекущаяДатаСеанса(), - ?(СвойстваПоследнегоФоновогоЗадания = Неопределено, '00010101', СвойстваПоследнегоФоновогоЗадания.Начало), - ?(СвойстваПоследнегоФоновогоЗадания = Неопределено, '00010101', СвойстваПоследнегоФоновогоЗадания.Конец )); - КонецЕсли; - Если ВыполнитьРегламентноеЗадание Тогда - ФоновоеЗаданиеВыполнялось = ВыполнитьРегламентноеЗадание(Задание); - КонецЕсли; - КонецЕсли; - Состояние.ОкончаниеВыполненияОчередногоЗадания = ТекущаяДатаСеанса(); - СохранитьСостояниеВыполненияРегламентныхЗаданий(Состояние, "ОкончаниеВыполненияОчередногоЗадания"); - КонецЦикла; - // Если последнее выполненное задание найти не удалось, тогда - // его Идентификатор сбрасывается, - // чтобы начать проверку регламентных заданий, начиная с первого. - ИдентификаторПоследнегоЗадания = Неопределено; - КонецЦикла; - -КонецПроцедуры - -// Возвращает РегламентноеЗадание из информационной -// базы по строке уникального идентификатора. -// -// Параметры: -// Идентификатор - Строка уникального идентификатора РегламентногоЗадания. -// -// Возвращаемое значение: -// РегламентноеЗадание. +// РегламентноеЗадание, прочитанное из базы данных. // Функция ПолучитьРегламентноеЗадание(Знач Идентификатор) Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); + + РегламентныеЗаданияСлужебный.ВызватьИсключениеЕслиНетПраваАдминистрирования(); УстановитьПривилегированныйРежим(Истина); - РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Идентификатор)); + Если ТипЗнч(Идентификатор) = Тип("РегламентноеЗадание") Тогда + Идентификатор = Идентификатор.УникальныйИдентификатор; + КонецЕсли; + + Если ТипЗнч(Идентификатор) = Тип("Строка") Тогда + Идентификатор = Новый УникальныйИдентификатор(Идентификатор); + КонецЕсли; + + Если ТипЗнч(Идентификатор) = Тип("ОбъектМетаданных") Тогда + РегламентноеЗадание = РегламентныеЗадания.НайтиПредопределенное(Идентификатор); + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Идентификатор); + КонецЕсли; Если РегламентноеЗадание = Неопределено Тогда - ВызватьИсключение( НСтр("ru = 'Задание не найдено в списке. + ВызватьИсключение( НСтр("ru = 'Регламентное задание не найдено. |Возможно, оно удалено другим пользователем.'") ); КонецЕсли; Возврат РегламентноеЗадание; КонецФункции - -// Предназначена для "ручного" немедленного выполнения процедуры регламентного задания -// либо в сеансе клиента (в файловой ИБ), либо в фоновом задании на сервере (в серверной ИБ) -// Применяется в любом режиме соединения -// "Ручной" режим запуска не влияет на выполнение регламентного задания по аварийному -// и основному расписаниям, т.к. не указывается ссылка на регламентное задание у фонового задания -// Тип ФоновоеЗадание не допускает установки такой ссылки, поэтому для файлового режима применяется -// тоже правило -// -// Параметры: -// Задание - РегламентноеЗадание, Строка - уникального идентификатора РегламентногоЗадания -// МоментЗапуска - Неопределено, Дата -// Для файловой ИБ устанавливает переданный момент, как момент запуска -// метода регламентного задания -// Для серверной ИБ - возвращает момент запуска фонового задания по факту -// ИдентификаторФоновогоЗадания - Строка -// Для серверной ИБ возвращает идентификатор запущенного фонового задания -// МоментОкончания - Неопределено, Дата -// Для файловой ИБ возвращает момент завершения метода регламентного задания -// -Функция ВыполнитьРегламентноеЗаданиеВручную(Знач Задание, - МоментЗапуска = Неопределено, - ИдентификаторФоновогоЗадания = "", - МоментОкончания = Неопределено, - НомерСеанса = Неопределено, - НачалоСеанса = Неопределено, - ПредставлениеФоновогоЗадания = "", - ПроцедураУжеВыполняется = Неопределено) Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - ПроцедураУжеВыполняется = Ложь; - Задание = ?(ТипЗнч(Задание) = Тип("РегламентноеЗадание"), Задание, ПолучитьРегламентноеЗадание(Задание)); - - Запуск = Ложь; - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Запуск = ВыполнитьРегламентноеЗадание(Задание, Истина, МоментЗапуска, МоментОкончания, НомерСеанса, НачалоСеанса); - Иначе - СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); - Если СвойстваПоследнегоФоновогоЗадания <> Неопределено - И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно Тогда - // - МоментЗапуска = СвойстваПоследнегоФоновогоЗадания.Начало; - Если ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Наименование) Тогда - ПредставлениеФоновогоЗадания = СвойстваПоследнегоФоновогоЗадания.Наименование; - Иначе - ПредставлениеФоновогоЗадания = ПредставлениеРегламентногоЗадания(Задание); - КонецЕсли; - Иначе - НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), ПредставлениеРегламентногоЗадания(Задание)); - ФоновоеЗадание = ФоновыеЗадания.Выполнить(Задание.Метаданные.ИмяМетода, Задание.Параметры, Строка(Задание.УникальныйИдентификатор), НаименованиеФоновогоЗадания); - ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.УникальныйИдентификатор); - МоментЗапуска = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор).Начало; - Запуск = Истина; - КонецЕсли; - КонецЕсли; - - ПроцедураУжеВыполняется = НЕ Запуск; - - Возврат Запуск; - -КонецФункции - -// Возвращает представление регламентного задания, -// это по порядку исключения незаполненных реквизитов: -// Наименование, Метаданные.Синоним, Метаданные.Имя. -// -// Параметры: -// Задание - РегламентноеЗадание, Строка - если строка, тогда УникальныйИдентификатор строкой. -// -// Возвращаемое значение: -// Строка. -// -Функция ПредставлениеРегламентногоЗадания(Знач Задание) Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - Если ТипЗнч(Задание) = Тип("РегламентноеЗадание") Тогда - РегламентноеЗадание = Задание; - Иначе - РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Задание)); - КонецЕсли; - - Если РегламентноеЗадание <> Неопределено Тогда - Представление = РегламентноеЗадание.Наименование; - - Если ПустаяСтрока(РегламентноеЗадание.Наименование) Тогда - Представление = РегламентноеЗадание.Метаданные.Синоним; - - Если ПустаяСтрока(Представление) Тогда - Представление = РегламентноеЗадание.Метаданные.Имя; - КонецЕсли - КонецЕсли; - Иначе - Представление = ТекстНеОпределено(); - КонецЕсли; - - Возврат Представление; - -КонецФункции - -// Возвращает текст "<не определено>". -Функция ТекстНеОпределено() Экспорт - - Возврат НСтр("ru = '<не определено>'"); - -КонецФункции - -// Возвращает значение флажка настройки выполнения регламентных заданий. -// -// Возвращаемое значение: -// Булево. -// -Функция НужноУведомлятьОНекорректномВыполненииРегламентныхЗаданий(ПериодУведомления) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - УведомлятьОНекорректномСостоянии = Ложь; - - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Настройки = ПолучитьНастройкиВыполненияРегламентныхЗаданий(); - ПериодУведомления = Настройки.ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий; - ПериодУведомления = ?(ПериодУведомления <= 0, 1, ПериодУведомления); - УведомлятьОНекорректномСостоянии = Настройки.УведомлятьОНекорректномВыполненииРегламентныхЗаданий; - Иначе - ПериодУведомления = 1; - КонецЕсли; - - Возврат УведомлятьОНекорректномСостоянии; - -КонецФункции - -// Возвращает многострочную Строку содержащую Сообщения и ОписаниеИнформацииОбОшибке, -// последнее фоновое задание найдено по идентификатору регламентного задания -// и сообщения/ошибки есть. -// -// Параметры: -// Задание - РегламентноеЗадание, Строка - УникальныйИдентификатор -// РегламентногоЗадания строкой. -// -// Возвращаемое значение: -// Строка. -// -Функция СообщенияИОписанияОшибокРегламентногоЗадания(Знач Задание) Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - ИдентификаторРегламентногоЗадания = ?(ТипЗнч(Задание) = Тип("РегламентноеЗадание"), Строка(Задание.УникальныйИдентификатор), Задание); - СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(ИдентификаторРегламентногоЗадания); - Возврат ?(СвойстваПоследнегоФоновогоЗадания = Неопределено, - "", - СообщенияИОписанияОшибокФоновогоЗадания(СвойстваПоследнегоФоновогоЗадания.Идентификатор) ); - -КонецФункции - -// Возвращает параметры запуска отдельного сеанса выполнения регламентных заданий. -// -// Параметры: -// ПоНастройкеАвтоОткрытия - Булево - открывать сеанс, если настроен -// автоматический запуск отдельного сеанса и не серверная ИБ и не Веб-клиент и -// сеанс уже не открыт. В других случаях устанавливается Отказ. -// -// Возвращаемое значение: -// Структура - ТребуетсяОткрытьОтдельныйСеанс - Булево - Истина. -// ДополнительныеПараметрыКоманднойСтроки - Строка - дополнительные параметры командной строки для -// запуска сеанса выполнения регламентных заданий. -// ВыполненаПопыткаОткрытия - Булево - Ложь, для использования в вызывающей процедуре. -// УведомлятьОНекорректномВыполнении - Булево. -// ПериодУведомления - Число. -// Отказ - Булево. -// ОписаниеОшибки - Строка. -// -Функция ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Знач ПоНастройкеАвтоОткрытия = Ложь) Экспорт - - Результат = Новый Структура; - Результат.Вставить("ТребуетсяОткрытьОтдельныйСеанс", Ложь); - Результат.Вставить("ВыполненаПопыткаОткрытия", Ложь); - Результат.Вставить("ДополнительныеПараметрыКоманднойСтроки", ""); - Результат.Вставить("УведомлятьОНекорректномВыполнении", Ложь); - Результат.Вставить("ПериодУведомления", Неопределено); - Результат.Вставить("Отказ", Ложь); - Результат.Вставить("ОписаниеОшибки", ""); - - Если ПоНастройкеАвтоОткрытия Тогда - Результат.Вставить("ТекущийПользовательАдминистратор", Пользователи.ЭтоПолноправныйПользователь(, Истина)); - КонецЕсли; - - УстановитьПривилегированныйРежим(Истина); - Результат.УведомлятьОНекорректномВыполнении = НужноУведомлятьОНекорректномВыполненииРегламентныхЗаданий(Результат.ПериодУведомления); - - Настройки = ПолучитьНастройкиВыполненияРегламентныхЗаданий(); - Если ПоНастройкеАвтоОткрытия И НЕ Настройки.АвтоматическиЗапускатьОтдельныйСеансДляВыполненияРегламентныхЗаданий Тогда - Возврат Результат; - КонецЕсли; - - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Если ПоНастройкеАвтоОткрытия Тогда - Возврат Результат; - Иначе - Результат.Отказ = Истина; - Результат.ОписаниеОшибки = НСтр("ru = 'Регламентные задания выполняются на сервере.'"); - Возврат Результат; - КонецЕсли; - КонецЕсли; - - ЗаданияВыполняютсяНормально = Неопределено; - ТекущийСеансВыполняетРегламентныеЗадания(ЗаданияВыполняютсяНормально); - Если ЗаданияВыполняютсяНормально Тогда - Если ПоНастройкеАвтоОткрытия Тогда - Возврат Результат; - Иначе - Результат.Отказ = Истина; - Результат.ОписаниеОшибки = НСтр("ru = 'Сеанс, выполняющий регламентные задания, уже открыт.'"); - Возврат Результат; - КонецЕсли; - КонецЕсли; - - НомерТекущегоСеанса = НомерСеансаИнформационнойБазы(); - // Определение начала текущего сеанса. - НачалоТекущегоСеанса = '00010101'; - Сеансы = ПолучитьСеансыИнформационнойБазы(); - Для каждого Сеанс Из Сеансы Цикл - Если Сеанс.НомерСеанса = НомерТекущегоСеанса Тогда - НачалоТекущегоСеанса = Сеанс.НачалоСеанса; - Прервать; - КонецЕсли; - КонецЦикла; - Результат.ДополнительныеПараметрыКоманднойСтроки = """" - + " /C""DoScheduledJobs SkipMessageBox AloneIBSession From1C" - + "SessionNumber=" + НомерТекущегоСеанса + " SessionStarted=" + НачалоТекущегоСеанса + """"; - - Результат.ТребуетсяОткрытьОтдельныйСеанс = Истина; - - Возврат Результат; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с фоновыми заданиями - -// Отменяет фоновое задание, если это возможно, а именно, если оно выполняется на сервере, и активно. -// -// Параметры: -// Идентификатор - Строка уникального идентификатора ФоновогоЗадания. -// -Процедура ОтменитьФоновоеЗадание(Идентификатор) Экспорт - - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ВызватьИсключение( НСтр("ru ='Фоновые задания не используются - |в файловой информационной базе.'")); - КонецЕсли; - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - Отбор = Новый Структура("УникальныйИдентификатор", Новый УникальныйИдентификатор(Идентификатор)); - МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - Если МассивФоновыхЗаданий.Количество() = 1 Тогда - ФоновоеЗадание = МассивФоновыхЗаданий[0]; - Иначе - ВызватьИсключение( НСтр("ru = 'Фоновое задание не найдено на сервере.'") ); - КонецЕсли; - - Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда - ВызватьИсключение( НСтр("ru = 'Задание не выполняется, его нельзя отменить.'") ); - КонецЕсли; - - ФоновоеЗадание.Отменить(); - -КонецПроцедуры - -// "Эмулирует" функцию ФоновыеЗадания.ПолучитьФоновыеЗадания() для файловой ИБ. -// Структуру таблицы смотри в функции ПустаяТаблицаСвойствФоновыхЗаданий(). -// -// Параметры: -// Отбор - Структура - допустимые поля: -// Идентификатор, Ключ, Состояние, Начало, Конец, -// Наименование, ИмяМетода, РегламентноеЗадание. -// ВсегоЗаданий - Число - возвращает общее количество заданий без учета отбора. -// ПрочитанноеСостояние - Неопределено, только для внутреннего использования. -// -// Возвращаемое значение: -// ТаблицаЗначений - возвращается таблица после отбора. -// -Функция ПолучитьТаблицуСвойствФоновыхЗаданий(Отбор = Неопределено, ВсегоЗаданий = 0) Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - Таблица = ПустаяТаблицаСвойствФоновыхЗаданий(); - - Если Отбор <> Неопределено И Отбор.Свойство("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания") Тогда - Отбор.Удалить("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания"); - ПолучитьПоследнее = Истина; - Иначе - ПолучитьПоследнее = Ложь; - КонецЕсли; - - РегламентноеЗадание = Неопределено; - - // Добавление истории фоновых заданий, полученных с сервера. - Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Если Отбор <> Неопределено И Отбор.Свойство("ИдентификаторРегламентногоЗадания") Тогда - РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Отбор.ИдентификаторРегламентногоЗадания)); - МассивФоновыхЗаданий = Новый Массив; - Если РегламентноеЗадание <> Неопределено Тогда - ПоследнееФоновоеЗадание = РегламентноеЗадание.ПоследнееЗадание; - Если ПолучитьПоследнее И ПоследнееФоновоеЗадание <> Неопределено Тогда - МассивФоновыхЗаданий.Добавить(ПоследнееФоновоеЗадание); - ДобавитьСвойстваФоновыхЗаданий(МассивФоновыхЗаданий, Таблица); - Иначе - ПервыйОтбор = Новый Структура("РегламентноеЗадание", РегламентноеЗадание); - МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(ПервыйОтбор); - ДобавитьСвойстваФоновыхЗаданий(МассивФоновыхЗаданий, Таблица); - КонецЕсли; - КонецЕсли; - Если НЕ ПолучитьПоследнее ИЛИ МассивФоновыхЗаданий.Количество() = 0 Тогда - ВторойОтбор = Новый Структура("Ключ", Отбор.ИдентификаторРегламентногоЗадания); - ДобавитьСвойстваФоновыхЗаданий(ФоновыеЗадания.ПолучитьФоновыеЗадания(ВторойОтбор), Таблица); - КонецЕсли; - Если ПолучитьПоследнее Тогда - Возврат Таблица; - КонецЕсли; - Иначе - Если Отбор = Неопределено Тогда - МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(); - Иначе - Если Отбор.Свойство("Идентификатор") Тогда - Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(Отбор.Идентификатор)); - Отбор.Удалить("Идентификатор"); - КонецЕсли; - МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); - Если Отбор.Свойство("УникальныйИдентификатор") Тогда - Отбор.Вставить("Идентификатор", Строка(Отбор.УникальныйИдентификатор)); - Отбор.Удалить("УникальныйИдентификатор"); - КонецЕсли; - КонецЕсли; - ДобавитьСвойстваФоновыхЗаданий(МассивФоновыхЗаданий, Таблица); - КонецЕсли; - КонецЕсли; - - Если Отбор <> Неопределено И Отбор.Свойство("ИдентификаторРегламентногоЗадания") Тогда - РегламентныеЗаданияДляОбработки = Новый Массив; - Если РегламентноеЗадание = Неопределено Тогда - РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Отбор.ИдентификаторРегламентногоЗадания)); - КонецЕсли; - Если РегламентноеЗадание <> Неопределено Тогда - РегламентныеЗаданияДляОбработки.Добавить(РегламентноеЗадание); - КонецЕсли; - Иначе - РегламентныеЗаданияДляОбработки = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); - КонецЕсли; - - // Добавление и сохранение состояний регламентных заданий - Для каждого РегламентноеЗадание Из РегламентныеЗаданияДляОбработки Цикл - ИдентификаторРегламентногоЗадания = Строка(РегламентноеЗадание.УникальныйИдентификатор); - Свойства = ХранилищеОбщихНастроек.Загрузить("СостояниеРегламентногоЗадания_" + ИдентификаторРегламентногоЗадания, , , ""); - Свойства = ?(ТипЗнч(Свойства) = Тип("ХранилищеЗначения"), Свойства.Получить(), Неопределено); - - Если ТипЗнч(Свойства) = Тип("Структура") - И Свойства.ИдентификаторРегламентногоЗадания = ИдентификаторРегламентногоЗадания - И Таблица.НайтиСтроки(Новый Структура("Идентификатор, НаСервере", Свойства.Идентификатор, Свойства.НаСервере)).Количество() = 0 Тогда - - Если Свойства.НаСервере Тогда - ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + ИдентификаторРегламентногоЗадания, , Неопределено, , ""); - Иначе - Если Свойства.Состояние = СостояниеФоновогоЗадания.Активно Тогда - НайденСеансВыполняющийЗадания = Ложь; - Для каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл - Если Сеанс.НомерСеанса = Свойства.НомерСеанса - И Сеанс.НачалоСеанса = Свойства.НачалоСеанса Тогда - НайденСеансВыполняющийЗадания = НомерСеансаИнформационнойБазы() <> Сеанс.НомерСеанса; - Прервать; - КонецЕсли; - КонецЦикла; - Если НЕ НайденСеансВыполняющийЗадания Тогда - Свойства.Конец = ТекущаяДатаСеанса(); - Свойства.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно; - Свойства.ОписаниеИнформацииОбОшибке = НСтр("ru = 'Не найден сеанс, выполняющий процедуру регламентного задания.'"); - КонецЕсли; - КонецЕсли; - ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Свойства); - КонецЕсли; - КонецЕсли; - КонецЦикла; - Таблица.Сортировать("Начало Убыв, Конец Убыв"); - - ВсегоЗаданий = Таблица.Количество(); - - // Отбор фоновых заданий. - Если Отбор <> Неопределено Тогда - Начало = Неопределено; - Конец = Неопределено; - Состояние = Неопределено; - Если Отбор.Свойство("Начало") Тогда - Начало = ?(ЗначениеЗаполнено(Отбор.Начало), Отбор.Начало, Неопределено); - Отбор.Удалить("Начало"); - КонецЕсли; - Если Отбор.Свойство("Конец") Тогда - Конец = ?(ЗначениеЗаполнено(Отбор.Конец), Отбор.Конец, Неопределено); - Отбор.Удалить("Конец"); - КонецЕсли; - Если Отбор.Свойство("Состояние") Тогда - Если ТипЗнч(Отбор.Состояние) = Тип("Массив") Тогда - Состояние = Отбор.Состояние; - Отбор.Удалить("Состояние"); - КонецЕсли; - КонецЕсли; - - Если Отбор.Количество() <> 0 Тогда - Строки = Таблица.НайтиСтроки(Отбор); - Иначе - Строки = Таблица; - КонецЕсли; - // Выполнение дополнительной фильтрации по периоду и состоянию (если отбор определен). - НомерЭлемента = Строки.Количество() - 1; - Пока НомерЭлемента >= 0 Цикл - Если Начало <> Неопределено И Начало > Строки[НомерЭлемента].Начало ИЛИ - Конец <> Неопределено И Конец < ?(ЗначениеЗаполнено(Строки[НомерЭлемента].Конец), Строки[НомерЭлемента].Конец, ТекущаяДатаСеанса()) ИЛИ - Состояние <> Неопределено И Состояние.Найти(Строки[НомерЭлемента].Состояние) = Неопределено Тогда - Строки.Удалить(НомерЭлемента); - КонецЕсли; - НомерЭлемента = НомерЭлемента - 1; - КонецЦикла; - // Удаление лишних строк из таблицы. - Если ТипЗнч(Строки) = Тип("Массив") Тогда - НомерСтроки = ВсегоЗаданий - 1; - Пока НомерСтроки >= 0 Цикл - Если Строки.Найти(Таблица[НомерСтроки]) = Неопределено Тогда - Таблица.Удалить(Таблица[НомерСтроки]); - КонецЕсли; - НомерСтроки = НомерСтроки - 1; - КонецЦикла; - КонецЕсли; - КонецЕсли; - - Возврат Таблица; - -КонецФункции - -// Возвращает свойства ФоновогоЗадания по строке уникального идентификатора. -// -// Параметры: -// Идентификатор - Строка - уникального идентификатора ФоновогоЗадания. -// ИменаСвойств - Строка, если заполнено, возвращается структура с указанными свойствами. -// -// Возвращаемое значение: -// СтрокаТаблицыЗначений, Структура - свойства ФоновогоЗадания. -// -Функция ПолучитьСвойстваФоновогоЗадания(Идентификатор, ИменаСвойств = "") Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - Отбор = Новый Структура("Идентификатор", Идентификатор); - ТаблицаСвойствФоновыхЗаданий = ПолучитьТаблицуСвойствФоновыхЗаданий(Отбор); - - Если ТаблицаСвойствФоновыхЗаданий.Количество() > 0 Тогда - Если ЗначениеЗаполнено(ИменаСвойств) Тогда - Результат = Новый Структура(ИменаСвойств); - ЗаполнитьЗначенияСвойств(Результат, ТаблицаСвойствФоновыхЗаданий[0]); - Иначе - Результат = ТаблицаСвойствФоновыхЗаданий[0]; - КонецЕсли; - Иначе - Результат = Неопределено; - КонецЕсли; - - Возврат Результат; - -КонецФункции - -// Возвращает свойства последнего фонового задания выполненного при выполнении регламентного задания, если оно есть. -// Процедура работает, как в файл-серверном, так и в клиент-серверном режимах. -// -// Параметры: -// РегламентноеЗадание - РегламентноеЗадание, Строка - строка уникального идентификатора РегламентногоЗадания. -// -// Возвращаемое значение: -// СтрокаТаблицыЗначений, Неопределено. -// -Функция ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(РегламентноеЗадание) Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - ИдентификаторРегламентногоЗадания = ?(ТипЗнч(РегламентноеЗадание) = Тип("РегламентноеЗадание"), Строка(РегламентноеЗадание.УникальныйИдентификатор), РегламентноеЗадание); - Отбор = Новый Структура; - Отбор.Вставить("ИдентификаторРегламентногоЗадания", ИдентификаторРегламентногоЗадания); - Отбор.Вставить("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания"); - ТаблицаСвойствФоновыхЗаданий = ПолучитьТаблицуСвойствФоновыхЗаданий(Отбор); - ТаблицаСвойствФоновыхЗаданий.Сортировать("Конец Возр"); - - Если ТаблицаСвойствФоновыхЗаданий.Количество() = 0 Тогда - СвойстваФоновогоЗадания = Неопределено; - ИначеЕсли НЕ ЗначениеЗаполнено(ТаблицаСвойствФоновыхЗаданий[0].Конец) Тогда - СвойстваФоновогоЗадания = ТаблицаСвойствФоновыхЗаданий[0]; - Иначе - СвойстваФоновогоЗадания = ТаблицаСвойствФоновыхЗаданий[ТаблицаСвойствФоновыхЗаданий.Количество()-1]; - КонецЕсли; - - СохраняемоеЗначение = Новый ХранилищеЗначения(?(СвойстваФоновогоЗадания = Неопределено, Неопределено, ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СвойстваФоновогоЗадания))); - ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + ИдентификаторРегламентногоЗадания, , СохраняемоеЗначение, , ""); - - Возврат СвойстваФоновогоЗадания; - -КонецФункции - -// Возвращает многострочную Строку содержащую Сообщения и ОписаниеИнформацииОбОшибке, -// если фоновое задание найдено по идентификатору и сообщения/ошибки есть. -// -// Параметры: -// Задание - Строка - УникальныйИдентификатор ФоновогоЗадания строкой. -// -// Возвращаемое значение: -// Строка. -// -Функция СообщенияИОписанияОшибокФоновогоЗадания(Идентификатор, СвойстваФоновогоЗадания = Неопределено) Экспорт - - ВызватьИсключениеЕслиНетПраваАдминистрирования(); - УстановитьПривилегированныйРежим(Истина); - - Если СвойстваФоновогоЗадания = Неопределено Тогда - СвойстваФоновогоЗадания = ПолучитьСвойстваФоновогоЗадания(Идентификатор); - КонецЕсли; - - Строка = ""; - Если СвойстваФоновогоЗадания <> Неопределено Тогда - Для каждого Сообщение Из СвойстваФоновогоЗадания.СообщенияПользователю Цикл - Строка = Строка + ?(Строка = "", - "", - " - | - |") + Сообщение.Текст; - КонецЦикла; - Если ЗначениеЗаполнено(СвойстваФоновогоЗадания.ОписаниеИнформацииОбОшибке) Тогда - Строка = Строка + ?(Строка = "", - СвойстваФоновогоЗадания.ОписаниеИнформацииОбОшибке, - " - | - |" + СвойстваФоновогоЗадания.ОписаниеИнформацииОбОшибке); - КонецЕсли; - КонецЕсли; - - Возврат Строка; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции - -// Вызывает исключение, если у пользователя нет права администрирования. -Процедура ВызватьИсключениеЕслиНетПраваАдминистрирования() - - Если НЕ ПривилегированныйРежим() Тогда - ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); - КонецЕсли; - -КонецПроцедуры - -// Возвращает новую таблицу свойств фоновых заданий. -// -// Возвращаемое значение: -// ТаблицаЗначений. -// -Функция ПустаяТаблицаСвойствФоновыхЗаданий() - - НоваяТаблица = Новый ТаблицаЗначений; - НоваяТаблица.Колонки.Добавить("НаСервере", Новый ОписаниеТипов("Булево")); - НоваяТаблица.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); - НоваяТаблица.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка")); - НоваяТаблица.Колонки.Добавить("Ключ", Новый ОписаниеТипов("Строка")); - НоваяТаблица.Колонки.Добавить("Начало", Новый ОписаниеТипов("Дата")); - НоваяТаблица.Колонки.Добавить("Конец", Новый ОписаниеТипов("Дата")); - НоваяТаблица.Колонки.Добавить("ИдентификаторРегламентногоЗадания", Новый ОписаниеТипов("Строка")); - НоваяТаблица.Колонки.Добавить("Состояние", Новый ОписаниеТипов("СостояниеФоновогоЗадания")); - НоваяТаблица.Колонки.Добавить("ИмяМетода", Новый ОписаниеТипов("Строка")); - НоваяТаблица.Колонки.Добавить("Расположение", Новый ОписаниеТипов("Строка")); - НоваяТаблица.Колонки.Добавить("ОписаниеИнформацииОбОшибке", Новый ОписаниеТипов("Строка")); - НоваяТаблица.Колонки.Добавить("ПопыткаЗапуска", Новый ОписаниеТипов("Число")); - НоваяТаблица.Колонки.Добавить("СообщенияПользователю", Новый ОписаниеТипов("Массив")); - НоваяТаблица.Колонки.Добавить("НомерСеанса", Новый ОписаниеТипов("Число")); - НоваяТаблица.Колонки.Добавить("НачалоСеанса", Новый ОписаниеТипов("Дата")); - НоваяТаблица.Индексы.Добавить("Идентификатор, Начало"); - - Возврат НоваяТаблица; - -КонецФункции - -// Предназначена для заполнения/восстановления структуры свойств -// настроек, хранимых в структуре "Состояние" свойства Настройки. -// -// Параметры: -// Настройки - Неопределено, Структура. -// -// Возвращаемое значение: -// Структура - обновленные настройки. -// -Функция ПроверитьНастройки(Знач Настройки = Неопределено) - - НоваяСтруктураНастроек = Новый Структура(); - // Если нужно и можно, то при запуске клиентского приложения автоматически открывать сеанс выполнения регламентных заданий. - НоваяСтруктураНастроек.Вставить("АвтоматическиЗапускатьОтдельныйСеансДляВыполненияРегламентныхЗаданий", Ложь); - // Если задания не выполняются или выполнение "висит", уведомлять пользователя. - НоваяСтруктураНастроек.Вставить("УведомлятьОНекорректномВыполненииРегламентныхЗаданий", Ложь); - // Период, минут. - НоваяСтруктураНастроек.Вставить("ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий", 15); - - // Копирование существующих свойств. - Если ТипЗнч(Настройки) = Тип("Структура") Тогда - Для каждого КлючИзначение Из НоваяСтруктураНастроек Цикл - Если Настройки.Свойство(КлючИзначение.Ключ) Тогда - Если ТипЗнч(НоваяСтруктураНастроек[КлючИзначение.Ключ]) = ТипЗнч(Настройки[КлючИзначение.Ключ]) Тогда - НоваяСтруктураНастроек[КлючИзначение.Ключ] = Настройки[КлючИзначение.Ключ]; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если НЕ (НоваяСтруктураНастроек.ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий >= 1 И - НоваяСтруктураНастроек.ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий <= 99 ) Тогда - - НоваяСтруктураНастроек.ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий = 15; - КонецЕсли; - - Возврат НоваяСтруктураНастроек; - -КонецФункции - -// Возвращает структуру, описывающую состояние выполнения регламентных заданий. -Функция ПолучитьСостояниеВыполненияРегламентныхЗаданий(Заблокировать = Ложь) - - // Подготовка данных для проверки или начальной установки свойств прочитанного состояния. - НоваяСтруктура = Новый Структура(); - // Хранение истории выполнения фоновых заданий. - НоваяСтруктура.Вставить("НомерСеанса", 0); - НоваяСтруктура.Вставить("НачалоСеанса", '00010101'); - НоваяСтруктура.Вставить("ИмяКомпьютера", ""); - НоваяСтруктура.Вставить("ИмяПриложения", ""); - НоваяСтруктура.Вставить("ИмяПользователя", ""); - НоваяСтруктура.Вставить("ИдентификаторОчередногоЗадания", ""); - НоваяСтруктура.Вставить("НачалоВыполненияОчередногоЗадания", '00010101'); - НоваяСтруктура.Вставить("ОкончаниеВыполненияОчередногоЗадания", '00010101'); - - Состояние = ХранилищеОбщихНастроек.Загрузить("СостояниеВыполненияРегламентныхЗаданий", , , ""); - Состояние = ?(ТипЗнч(Состояние) = Тип("ХранилищеЗначения"), Состояние.Получить(), Неопределено); - - // Копирование существующих свойств. - Если ТипЗнч(Состояние) = Тип(НоваяСтруктура) Тогда - Для каждого КлючИзначение Из НоваяСтруктура Цикл - Если Состояние.Свойство(КлючИзначение.Ключ) Тогда - Если ТипЗнч(НоваяСтруктура[КлючИзначение.Ключ]) = ТипЗнч(Состояние[КлючИзначение.Ключ]) Тогда - НоваяСтруктура[КлючИзначение.Ключ] = Состояние[КлючИзначение.Ключ]; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Возврат НоваяСтруктура; - -КонецФункции - -// Сохраняет в структуре СостояниеВыполненияРегламентныхЗаданий переданное состояние. -// -// Параметры: -// Состояние - Структура - изменённое значение функции ПолучитьСостояниеВыполненияРегламентныхЗаданий(). -// -// ИзмененныеСвойства - Неопределено - требуется записать состояние, иначе сохранить только указанные свойства. -// Строка - список имен свойств, разделенный запятыми, -// которые необходимо сохранить. -// -Процедура СохранитьСостояниеВыполненияРегламентныхЗаданий(Состояние, Знач ИзмененныеСвойства = Неопределено) - - Если ИзмененныеСвойства <> Неопределено Тогда - ТекущееСостояние = ПолучитьСостояниеВыполненияРегламентныхЗаданий(); - ЗаполнитьЗначенияСвойств(ТекущееСостояние, Состояние, ИзмененныеСвойства); - Состояние = ТекущееСостояние; - КонецЕсли; - - ХранилищеОбщихНастроек.Сохранить("СостояниеВыполненияРегламентныхЗаданий", , Новый ХранилищеЗначения(Состояние), , ""); - -КонецПроцедуры - -// Выполняет регламентное задание в режиме файловой информационной базе. -// Используется в процедуре ВыполнитьРегламентныеЗадания(). -// -// Параметры: -// Состояние - Структура. -// Задание - РегламентноеЗадание. -// ЗапускВручную - Булево. -// МоментЗапуска - Неопределено, Дата - устанавливает момент запуска или возвращает момент запуска. -// МоментОкончания - Неопределено, Дата - возвращает момент окончание. -// -// Возвращаемое значение -// Булево. Если Ложь, значит процедура регламентного задания уже выполняется. -// -Функция ВыполнитьРегламентноеЗадание(Знач Задание, - Знач ЗапускВручную = Ложь, - МоментЗапуска = Неопределено, - МоментОкончания = Неопределено, - НомерСеанса = Неопределено, - НачалоСеанса = Неопределено) - - СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); - - Если СвойстваПоследнегоФоновогоЗадания <> Неопределено - И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно Тогда - - НомерСеанса = СвойстваПоследнегоФоновогоЗадания.НомерСеанса; - НачалоСеанса = СвойстваПоследнегоФоновогоЗадания.НачалоСеанса; - Возврат Ложь; - КонецЕсли; - - ИмяМетода = Задание.Метаданные.ИмяМетода; - НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ?(ЗапускВручную, - НСтр("ru = 'Запуск вручную: %1'"), - НСтр("ru = 'Автозапуск: %1'")), - ПредставлениеРегламентногоЗадания(Задание)); - - МоментЗапуска = ?(ТипЗнч(МоментЗапуска) <> Тип("Дата") ИЛИ НЕ ЗначениеЗаполнено(МоментЗапуска), ТекущаяДатаСеанса(), МоментЗапуска); - - // Создание свойств нового фонового псевдо-задания. - СвойстваФоновогоЗадания = ПустаяТаблицаСвойствФоновыхЗаданий().Добавить(); - СвойстваФоновогоЗадания.Идентификатор = Строка(Новый УникальныйИдентификатор()); - СвойстваФоновогоЗадания.ПопыткаЗапуска = ?( - СвойстваПоследнегоФоновогоЗадания <> Неопределено - И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно, - СвойстваПоследнегоФоновогоЗадания.ПопыткаЗапуска + 1, - 1); - СвойстваФоновогоЗадания.Наименование = НаименованиеФоновогоЗадания; - СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания = Строка(Задание.УникальныйИдентификатор); - СвойстваФоновогоЗадания.Расположение = "\\" + ИмяКомпьютера(); - СвойстваФоновогоЗадания.ИмяМетода = ИмяМетода; - СвойстваФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно; - СвойстваФоновогоЗадания.Начало = МоментЗапуска; - СвойстваФоновогоЗадания.НомерСеанса = НомерСеансаИнформационнойБазы(); - - Для каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл - Если Сеанс.НомерСеанса = СвойстваФоновогоЗадания.НомерСеанса Тогда - СвойстваФоновогоЗадания.НачалоСеанса = Сеанс.НачалоСеанса; - Прервать; - КонецЕсли; - КонецЦикла; - - // Подготовка команды для выполнения метода вместо фонового задания. - СтрокаПараметров = ""; - Индекс = 0; - Пока Индекс < Задание.Параметры.Количество() Цикл - СтрокаПараметров = СтрокаПараметров + "Задание.Параметры[" + Индекс + "]"; - Если Индекс < (Задание.Параметры.Количество()-1) Тогда - СтрокаПараметров = СтрокаПараметров + ","; - КонецЕсли; - Индекс = Индекс + 1; - КонецЦикла; - - // Сохранение информации о запуске. - СохраняемоеЗначение = Новый ХранилищеЗначения(ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СвойстваФоновогоЗадания)); - ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + Строка(Задание.УникальныйИдентификатор), , СохраняемоеЗначение, , ""); - - ПолучитьСообщенияПользователю(Истина); - Попытка - Выполнить("" + ИмяМетода + "(" + СтрокаПараметров + ");"); - СвойстваФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Завершено; - Исключение - СвойстваФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно; - СвойстваФоновогоЗадания.ОписаниеИнформацииОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - КонецПопытки; - - // Фиксация окончания выполнения метода. - МоментОкончания = ТекущаяДатаСеанса(); - СвойстваФоновогоЗадания.Конец = МоментОкончания; - СвойстваФоновогоЗадания.СообщенияПользователю = Новый Массив; - Для каждого Сообщение Из ПолучитьСообщенияПользователю() Цикл - СвойстваФоновогоЗадания.СообщенияПользователю.Добавить(Сообщение); - КонецЦикла; - ПолучитьСообщенияПользователю(Истина); - - Свойства = ХранилищеОбщихНастроек.Загрузить("СостояниеРегламентногоЗадания_" + Строка(Задание.УникальныйИдентификатор), , , ""); - Свойства = ?(ТипЗнч(Свойства) = Тип("ХранилищеЗначения"), Свойства.Получить(), Неопределено); - - Если Свойства.НомерСеанса = СвойстваФоновогоЗадания.НомерСеанса - И Свойства.НачалоСеанса = СвойстваФоновогоЗадания.НачалоСеанса Тогда - // Маловероятной перезаписи из-за отсутствия блокировки не произошло, поэтому можно записать свойства. - СохраняемоеЗначение = Новый ХранилищеЗначения(ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СвойстваФоновогоЗадания)); - ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + Строка(Задание.УникальныйИдентификатор), , СохраняемоеЗначение, , ""); - КонецЕсли; - - Возврат Истина; - -КонецФункции - -Процедура ДобавитьСвойстваФоновыхЗаданий(Знач МассивФоновыхЗаданий, Знач ТаблицаСвойствФоновыхЗаданий) - - Индекс = МассивФоновыхЗаданий.Количество() - 1; - Пока Индекс >= 0 Цикл - ФоновоеЗадание = МассивФоновыхЗаданий[Индекс]; - Строка = ТаблицаСвойствФоновыхЗаданий.Добавить(); - ЗаполнитьЗначенияСвойств(Строка, ФоновоеЗадание); - Строка.НаСервере = Истина; - Строка.Идентификатор = ФоновоеЗадание.УникальныйИдентификатор; - РегламентноеЗадание = ФоновоеЗадание.РегламентноеЗадание; - - Если РегламентноеЗадание = Неопределено - И СтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(ФоновоеЗадание.Ключ) Тогда - - РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ФоновоеЗадание.Ключ)); - КонецЕсли; - Строка.ИдентификаторРегламентногоЗадания = ?( - РегламентноеЗадание = Неопределено, - "", - РегламентноеЗадание.УникальныйИдентификатор); - - Строка.ОписаниеИнформацииОбОшибке = ?( - ФоновоеЗадание.ИнформацияОбОшибке = Неопределено, - "", - ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке)); - - Индекс = Индекс - 1; - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы - -// Обработчик обновления настроек выполнения регламентных заданий в новом размещении. -Процедура КонвертироватьНастройкиВыполненияРегламентныхЗаданий_1_2_2_2() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Настройки = ХранилищеОбщихНастроек.Загрузить("НастройкиВыполненияРегламентныхЗаданий", , , ""); - Настройки = ?(ТипЗнч(Настройки) = Тип("ХранилищеЗначения"), Настройки.Получить(), Неопределено); - - Если Настройки <> Неопределено Тогда - Настройки = ПроверитьНастройки(Настройки); - Константы.НастройкиВыполненияРегламентныхЗаданий.Установить(Настройки); - КонецЕсли; - - ХранилищеОбщихНастроек.Удалить("НастройкиВыполненияРегламентныхЗаданий", Неопределено, ""); - -КонецПроцедуры - diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСервер/РегламентныеЗаданияСервер.mdo b/SSL/src/CommonModules/РегламентныеЗаданияСервер/РегламентныеЗаданияСервер.mdo index 5ddde11dd..049d18b22 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияСервер/РегламентныеЗаданияСервер.mdo +++ b/SSL/src/CommonModules/РегламентныеЗаданияСервер/РегламентныеЗаданияСервер.mdo @@ -6,5 +6,6 @@ Регламентные задания сервер true - true + true + true diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl new file mode 100644 index 000000000..7fb25909f --- /dev/null +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/Module.bsl @@ -0,0 +1,1229 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Регламентные задания". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.2.2.2"; + Обработчик.Процедура = "РегламентныеЗаданияСлужебный.КонвертироватьНастройкиВыполненияРегламентныхЗаданий_1_2_2_2"; + +КонецПроцедуры + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// при запуске конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Параметры.Вставить("ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий", + Новый ФиксированнаяСтруктура(ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Истина))); + КонецЕсли; + +КонецПроцедуры + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Параметры.Вставить("ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий", + Новый ФиксированнаяСтруктура(ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Истина))); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Вызывает исключение, если у пользователя нет права администрирования. +Процедура ВызватьИсключениеЕслиНетПраваАдминистрирования() Экспорт + + Если НЕ ПривилегированныйРежим() Тогда + ВыполнитьПроверкуПравДоступа("Администрирование", Метаданные); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для контроля выполнения + +// Определяет, что текущий сеанс выполняет регламентные задания, +// если это не так и указано установить текущий сеанс в этом качестве, +// то производится попытка установки. +// +// Параметры: +// ЗаданияВыполняютсяНормально - Булево - Истина, если нет отклонений в выполнении заданий. +// УстановитьТекущийСеансКакСеансВыполняющийРегламентныеЗадания - Булево - Истина, +// если требуется установить текущий сеанс, +// как сеанс в котором будет происходить выполнение регламентных заданий, +// если не удалось установить, тогда функция вернет Ложь. +// ОписаниеОшибки - Строка - Если НЕ ЗаданияВыполняютсяНормально, тогда описание отклонения: +// либо выполнение долго не начинается, либо выполнение слишком затянулось. +// +// Возвращаемое значение: +// Булево. +// +Функция ТекущийСеансВыполняетРегламентныеЗадания(ЗаданияВыполняютсяНормально = Неопределено, + Знач УстановитьТекущийСеансКакСеансВыполняющийРегламентныеЗадания = Ложь, + ОписаниеОшибки = "") Экспорт + + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ЗаданияВыполняютсяНормально = Истина; + ОписаниеОшибки = НСтр("ru = 'Задания выполняются на сервере.'"); + Возврат Ложь; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Состояние = ПолучитьСостояниеВыполненияРегламентныхЗаданий(); + + Сеансы = ПолучитьСеансыИнформационнойБазы(); + НайденСеансВыполняющийЗадания = Ложь; + ТекущийСеансВыполняетРегламентныеЗадания = Ложь; + ЗаданияВыполняютсяНормально = Истина; + + // Поиск сеанса выполняющего регламентные задания, + // установленного в структуре СостояниеВыполненияРегламентныхЗаданий, + // среди активных сеансов + // Поиск текущего сеанса (начало текущего сеанса может понадобится + // для инициализации Структуры). + Для каждого Сеанс Из Сеансы Цикл + Если Сеанс.НомерСеанса = НомерСеансаИнформационнойБазы() Тогда + ТекущийСеанс = Сеанс; + КонецЕсли; + Если Сеанс.НомерСеанса = Состояние.НомерСеанса + И Сеанс.НачалоСеанса = Состояние.НачалоСеанса Тогда + // + НайденныйСеанс = Сеанс; + НайденСеансВыполняющийЗадания = Истина; + ТекущийСеансВыполняетРегламентныеЗадания = (Сеанс.НомерСеанса = НомерСеансаИнформационнойБазы()); + КонецЕсли; + КонецЦикла; + + Если НЕ НайденСеансВыполняющийЗадания И УстановитьТекущийСеансКакСеансВыполняющийРегламентныеЗадания Тогда + МоментТекущегоВремени = ТекущаяДатаСеанса(); + Состояние.НомерСеанса = ТекущийСеанс.НомерСеанса; + Состояние.НачалоСеанса = ТекущийСеанс.НачалоСеанса; + Состояние.ИмяКомпьютера = ИмяКомпьютера(); + Состояние.ИмяПриложения = ТекущийСеанс.ИмяПриложения; + Состояние.ИмяПользователя = ИмяПользователя(); + Состояние.ИдентификаторОчередногоЗадания = Неопределено; + Состояние.НачалоВыполненияОчередногоЗадания = МоментТекущегоВремени; + Состояние.ОкончаниеВыполненияОчередногоЗадания = МоментТекущегоВремени; + СохранитьСостояниеВыполненияРегламентныхЗаданий(Состояние); + НайденСеансВыполняющийЗадания = Истина; + ТекущийСеансВыполняетРегламентныеЗадания = Истина; + КонецЕсли; + + Если НЕ НайденСеансВыполняющийЗадания Тогда + ОписаниеОшибки = НСтр("ru = 'Нет сеанса, выполняющего регламентные задания.'"); + ЗаданияВыполняютсяНормально = Ложь; + // + ИначеЕсли НЕ ЗначениеЗаполнено(Состояние.ОкончаниеВыполненияОчередногоЗадания) Тогда + // Если после завершения очередного задания прошло более часа, значит задержка запуска. + Если ТекущаяДатаСеанса() - 3600 > Состояние.ОкончаниеВыполненияОчередногоЗадания Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнение регламентных заданий не начинается уже более 1 часа. + |Возможно, требуется проверка и перезапуск сеанса. Выполнение ожидается + | на компьютере: %1, + | в приложении: %2, + | от имени пользователя: %3, + | в сеансе номер: %4.'"), + Строка(Состояние.ИмяКомпьютера), + Строка(Состояние.ИмяПриложения), + Строка(Состояние.ИмяПользователя), + Строка(Состояние.НомерСеанса) ); + ЗаданияВыполняютсяНормально = Ложь; + КонецЕсли; + Иначе + // Если выполнение продолжается более 1 часа, значить она слишком затянулось. + Если ТекущаяДатаСеанса() - 3600 > Состояние.НачалоВыполненияОчередногоЗадания Тогда + ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнение регламентного задания происходит непрерывно более 1 часа. + |Возможно, требуется проверка и перезапуск сеанса. Выполнение происходит + | на компьютере: %1, + | в приложении: %2, + | от имени пользователя: %3, + | в сеансе номер: %4.'"), + Строка(Состояние.ИмяКомпьютера), + Строка(Состояние.ИмяПриложения), + Строка(Состояние.ИмяПользователя), + Строка(Состояние.НомерСеанса)); + ЗаданияВыполняютсяНормально = Ложь; + КонецЕсли; + КонецЕсли; + + Возврат ТекущийСеансВыполняетРегламентныеЗадания; + +КонецФункции + +// Проверяет, что сеанс открывший этот дополнительный сеанс для выполнения +// регламентных заданий завершен, если задан. +// +// Параметры: +// ПараметрЗапуска - Строка - значение глобального свойства ПараметрЗапуска, +// требуется указывать, т.к. свойство недоступно на сервере. +// РодительскийСеансЗадан - Булево - возвращает Истина, если родительский сеанс задан, +// иначе возвращает Ложь. +// +// Возвращаемое значение: +// Булево. +// +Функция РодительскийСеансЗаданИЗавершен(Знач ПараметрЗапуска) Экспорт + + РодительскийСеансЗадан = Ложь; + Если Найти(ПараметрЗапуска, "DoScheduledJobs") <> 0 Тогда + ИндексНомераСеанса = Найти(ПараметрЗапуска, "SessionNumber="); + ИндексНачалаСеанса = Найти(ПараметрЗапуска, "SessionStarted="); + Если ИндексНомераСеанса <> 0 И + ИндексНачалаСеанса <> 0 И + ИндексНомераСеанса < ИндексНачалаСеанса Тогда + РодительскийСеансЗадан = Истина; + Сеансы = ПолучитьСеансыИнформационнойБазы(); + Для каждого Сеанс Из Сеансы Цикл + Если Найти(ПараметрЗапуска, "SessionNumber=" + Сеанс.НомерСеанса) <> 0 И + Найти(ПараметрЗапуска, "SessionStarted=" + Сеанс.НачалоСеанса) <> 0 Тогда + Возврат Ложь; + КонецЕсли; + КонецЦикла; + Возврат Истина; + КонецЕсли; + КонецЕсли; + Возврат Ложь; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с регламентными заданиями + +// Возвращает настройки выполнения регламентных заданий для файлового режима. +// +// Возвращаемое значение: +// Настройки - Структура. +// +Функция ПолучитьНастройкиВыполненияРегламентныхЗаданий() Экспорт + + Настройки = Константы.НастройкиВыполненияРегламентныхЗаданий.Получить(); + Настройки = ?(ТипЗнч(Настройки) = Тип("ХранилищеЗначения"), Настройки.Получить(), Неопределено); + + Возврат ПроверитьНастройки(Настройки); + +КонецФункции + +// Устанавливает настройки выполнения регламентных заданий для файлового режима. +// +// Параметры: +// Настройки - Структура. +// +Процедура УстановитьНастройкиВыполненияРегламентныхЗаданий(Настройки) Экспорт + + Настройки = ПроверитьНастройки(Настройки); + + Константы.НастройкиВыполненияРегламентныхЗаданий.Установить(Новый ХранилищеЗначения(Настройки)); + +КонецПроцедуры + +// Эмулирует в тонком клиенте системную процедуру ВыполнитьОбработкуЗаданий(), +// но может применяться и в толстом клиенте. +// +// Место хранения экземпляров фоновых заданий - ВременноеХранилище. +// Время хранения экземпляров - до закрытия сеанса клиента, выполняющего регламентные задания. +// Максимальное количество одновременно хранимых фоновых заданий: 1000. +// +// Идентификатор сеанса, выполняющего регламентные задания находится в структуре +// СостояниеВыполненияРегламентныхЗаданий (ХранилищеЗначения), содержащее структуру +// со свойствами: +// НомерСеанса, НачалоСеанса, ИдентификаторОчередногоЗадания, +// НачалоВыполненияОчередногоЗадания, ОкончаниеВыполненияОчередногоЗадания и др. +// Логика проверки выполнения регламентных заданий в текущем сеансе: +// Если <НомерСеанса> и <НачалоСеанса> совпадают с текущим, +// тогда выполнение в текущем сеансе, если нет, +// тогда проверяется существует ли сеанс в списке сеансов, +// если не существует, тогда выполнение в текущем сеансе, +// если существует тогда нет выполнения в текущем сеансе, а вместо этого +// проверятся период выполнения/простоя. Если "выполняется"/"простаивает" дольше +// 1 час происходит уведомление пользователя (ошибка с соответствующим описанием). +// Логика порядка выполнения заданий. Задания выполняются последовательно, +// регистрируется последнее начатое задание. При новой проверке, проверятся +// задание, следующее за заданием, начатым в прошлый раз, +// чтобы получился эффект параллельности выполнения. +// Логика проверки расписания. Если произошла ошибка тогда используется аварийное +// расписание, иначе - основное. +// +// Параметры: +// ВремяВыполнения - Число(10.0) - время (в секундах) выполнения очередной +// порции регламентных заданий. Если время не задано, будет выполнен +// только один цикл выполнения (до завершения одного фонового +// задания или выполнения всех регламентных заданий без фоновых, +// т.е. только проверка расписания). +// +Процедура ВыполнитьРегламентныеЗадания(ВремяВыполнения = 0) Экспорт + + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ ТекущийСеансВыполняетРегламентныеЗадания() Тогда + Возврат; + КонецЕсли; + + Состояние = ПолучитьСостояниеВыполненияРегламентныхЗаданий(); + + ВремяВыполнения = ?(ТипЗнч(ВремяВыполнения) = Тип("Число"), ВремяВыполнения, 0); + + Задания = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); + ВыполнениеЗавершено = Ложь; // Определяет, что ВремяВыполнения закончилось, или + // все возможные регламентные задания выполнены. + НачалоВыполнения = ТекущаяДатаСеанса(); + КоличествоВыполненныхЗаданий = 0; + ФоновоеЗаданиеВыполнялось = Ложь; + ИдентификаторПоследнегоЗадания = Состояние.ИдентификаторОчередногоЗадания; + + // Количество заданий проверяется каждый раз при начале выполнения, + // т.к. задания могут быть удалены в другом сеансе, а тогда будет зацикливание. + Пока НЕ ВыполнениеЗавершено И Задания.Количество() > 0 Цикл + ПервоеЗаданиеНайдено = (ИдентификаторПоследнегоЗадания = Неопределено); + ОчередноеЗаданиеНайдено = Ложь; + Для каждого Задание ИЗ Задания Цикл + // Завершение выполнения, если: + // а) время задано и вышло; + // б) время не задано и хоть одно фоновое задание выполнено; + // в) время не задано и все регламентные задания выполнены по количеству. + Если ( ВремяВыполнения = 0 И + ( ФоновоеЗаданиеВыполнялось ИЛИ + КоличествоВыполненныхЗаданий >= Задания.Количество() ) ) ИЛИ + ( ВремяВыполнения <> 0 И + НачалоВыполнения + ВремяВыполнения <= ТекущаяДатаСеанса() ) Тогда + ВыполнениеЗавершено = Истина; + Прервать; + КонецЕсли; + Если НЕ ПервоеЗаданиеНайдено Тогда + Если Строка(Задание.УникальныйИдентификатор) = ИдентификаторПоследнегоЗадания Тогда + // Найдено последнее выполненное регламентное задание, значит следующее + // регламентное задание нужно проверять на необходимость выполнения фонового задания. + ПервоеЗаданиеНайдено = Истина; + КонецЕсли; + // Если первое регламентное задание, которое нужно проверить на необходимость + // выполнения фонового задания ещё не найдено, тогда текущее задание пропускается. + Продолжить; + КонецЕсли; + ОчередноеЗаданиеНайдено = Истина; + КоличествоВыполненныхЗаданий = КоличествоВыполненныхЗаданий + 1; + Состояние.ИдентификаторОчередногоЗадания = Строка(Задание.УникальныйИдентификатор); + Состояние.НачалоВыполненияОчередногоЗадания = ТекущаяДатаСеанса(); + Состояние.ОкончаниеВыполненияОчередногоЗадания = '00010101'; + СохранитьСостояниеВыполненияРегламентныхЗаданий(Состояние, + "ИдентификаторОчередногоЗадания, + |НачалоВыполненияОчередногоЗадания, + |ОкончаниеВыполненияОчередногоЗадания"); + Если Задание.Использование Тогда + ВыполнитьРегламентноеЗадание = Ложь; + СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); + + Если СвойстваПоследнегоФоновогоЗадания <> Неопределено И + СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда + // Проверка аварийного расписания. + Если СвойстваПоследнегоФоновогоЗадания.ПопыткаЗапуска <= Задание.КоличествоПовторовПриАварийномЗавершении Тогда + Если СвойстваПоследнегоФоновогоЗадания.Конец + Задание.ИнтервалПовтораПриАварийномЗавершении <= ТекущаяДатаСеанса() Тогда + // Повторный запуск фонового задания по регламентному заданию. + ВыполнитьРегламентноеЗадание = Истина; + КонецЕсли; + КонецЕсли; + Иначе + // Проверяем стандартное расписание. + ВыполнитьРегламентноеЗадание = Задание.Расписание.ТребуетсяВыполнение( + ТекущаяДатаСеанса(), + ?(СвойстваПоследнегоФоновогоЗадания = Неопределено, '00010101', СвойстваПоследнегоФоновогоЗадания.Начало), + ?(СвойстваПоследнегоФоновогоЗадания = Неопределено, '00010101', СвойстваПоследнегоФоновогоЗадания.Конец )); + КонецЕсли; + Если ВыполнитьРегламентноеЗадание Тогда + ФоновоеЗаданиеВыполнялось = ВыполнитьРегламентноеЗадание(Задание); + КонецЕсли; + КонецЕсли; + Состояние.ОкончаниеВыполненияОчередногоЗадания = ТекущаяДатаСеанса(); + СохранитьСостояниеВыполненияРегламентныхЗаданий(Состояние, "ОкончаниеВыполненияОчередногоЗадания"); + КонецЦикла; + // Если последнее выполненное задание найти не удалось, тогда + // его Идентификатор сбрасывается, + // чтобы начать проверку регламентных заданий, начиная с первого. + ИдентификаторПоследнегоЗадания = Неопределено; + КонецЦикла; + +КонецПроцедуры + +// Предназначена для "ручного" немедленного выполнения процедуры регламентного задания +// либо в сеансе клиента (в файловой ИБ), либо в фоновом задании на сервере (в серверной ИБ) +// Применяется в любом режиме соединения +// "Ручной" режим запуска не влияет на выполнение регламентного задания по аварийному +// и основному расписаниям, т.к. не указывается ссылка на регламентное задание у фонового задания +// Тип ФоновоеЗадание не допускает установки такой ссылки, поэтому для файлового режима применяется +// тоже правило +// +// Параметры: +// Задание - РегламентноеЗадание, Строка - уникального идентификатора РегламентногоЗадания +// МоментЗапуска - Неопределено, Дата +// Для файловой ИБ устанавливает переданный момент, как момент запуска +// метода регламентного задания +// Для серверной ИБ - возвращает момент запуска фонового задания по факту +// ИдентификаторФоновогоЗадания - Строка +// Для серверной ИБ возвращает идентификатор запущенного фонового задания +// МоментОкончания - Неопределено, Дата +// Для файловой ИБ возвращает момент завершения метода регламентного задания +// +Функция ВыполнитьРегламентноеЗаданиеВручную(Знач Задание, + МоментЗапуска = Неопределено, + ИдентификаторФоновогоЗадания = "", + МоментОкончания = Неопределено, + НомерСеанса = Неопределено, + НачалоСеанса = Неопределено, + ПредставлениеФоновогоЗадания = "", + ПроцедураУжеВыполняется = Неопределено) Экспорт + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + ПроцедураУжеВыполняется = Ложь; + Задание = РегламентныеЗаданияСервер.ПолучитьРегламентноеЗадание(Задание); + + Запуск = Ложь; + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Запуск = ВыполнитьРегламентноеЗадание(Задание, Истина, МоментЗапуска, МоментОкончания, НомерСеанса, НачалоСеанса); + Иначе + СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); + Если СвойстваПоследнегоФоновогоЗадания <> Неопределено + И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно Тогда + // + МоментЗапуска = СвойстваПоследнегоФоновогоЗадания.Начало; + Если ЗначениеЗаполнено(СвойстваПоследнегоФоновогоЗадания.Наименование) Тогда + ПредставлениеФоновогоЗадания = СвойстваПоследнегоФоновогоЗадания.Наименование; + Иначе + ПредставлениеФоновогоЗадания = ПредставлениеРегламентногоЗадания(Задание); + КонецЕсли; + Иначе + НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Запуск вручную: %1'"), ПредставлениеРегламентногоЗадания(Задание)); + ФоновоеЗадание = ФоновыеЗадания.Выполнить(Задание.Метаданные.ИмяМетода, Задание.Параметры, Строка(Задание.УникальныйИдентификатор), НаименованиеФоновогоЗадания); + ИдентификаторФоновогоЗадания = Строка(ФоновоеЗадание.УникальныйИдентификатор); + МоментЗапуска = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЗадание.УникальныйИдентификатор).Начало; + Запуск = Истина; + КонецЕсли; + КонецЕсли; + + ПроцедураУжеВыполняется = НЕ Запуск; + + Возврат Запуск; + +КонецФункции + +// Возвращает представление регламентного задания, +// это по порядку исключения незаполненных реквизитов: +// Наименование, Метаданные.Синоним, Метаданные.Имя. +// +// Параметры: +// Задание - РегламентноеЗадание, Строка - если строка, тогда УникальныйИдентификатор строкой. +// +// Возвращаемое значение: +// Строка. +// +Функция ПредставлениеРегламентногоЗадания(Знач Задание) Экспорт + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Если ТипЗнч(Задание) = Тип("РегламентноеЗадание") Тогда + РегламентноеЗадание = Задание; + Иначе + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Задание)); + КонецЕсли; + + Если РегламентноеЗадание <> Неопределено Тогда + Представление = РегламентноеЗадание.Наименование; + + Если ПустаяСтрока(РегламентноеЗадание.Наименование) Тогда + Представление = РегламентноеЗадание.Метаданные.Синоним; + + Если ПустаяСтрока(Представление) Тогда + Представление = РегламентноеЗадание.Метаданные.Имя; + КонецЕсли + КонецЕсли; + Иначе + Представление = ТекстНеОпределено(); + КонецЕсли; + + Возврат Представление; + +КонецФункции + +// Возвращает текст "<не определено>". +Функция ТекстНеОпределено() Экспорт + + Возврат НСтр("ru = '<не определено>'"); + +КонецФункции + +// Возвращает значение флажка настройки выполнения регламентных заданий. +// +// Возвращаемое значение: +// Булево. +// +Функция НужноУведомлятьОНекорректномВыполненииРегламентныхЗаданий(ПериодУведомления) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + УведомлятьОНекорректномСостоянии = Ложь; + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Настройки = ПолучитьНастройкиВыполненияРегламентныхЗаданий(); + ПериодУведомления = Настройки.ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий; + ПериодУведомления = ?(ПериодУведомления <= 0, 1, ПериодУведомления); + УведомлятьОНекорректномСостоянии = Настройки.УведомлятьОНекорректномВыполненииРегламентныхЗаданий; + Иначе + ПериодУведомления = 1; + КонецЕсли; + + Возврат УведомлятьОНекорректномСостоянии; + +КонецФункции + +// Возвращает многострочную Строку содержащую Сообщения и ОписаниеИнформацииОбОшибке, +// последнее фоновое задание найдено по идентификатору регламентного задания +// и сообщения/ошибки есть. +// +// Параметры: +// Задание - РегламентноеЗадание, Строка - УникальныйИдентификатор +// РегламентногоЗадания строкой. +// +// Возвращаемое значение: +// Строка. +// +Функция СообщенияИОписанияОшибокРегламентногоЗадания(Знач Задание) Экспорт + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторРегламентногоЗадания = ?(ТипЗнч(Задание) = Тип("РегламентноеЗадание"), Строка(Задание.УникальныйИдентификатор), Задание); + СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(ИдентификаторРегламентногоЗадания); + Возврат ?(СвойстваПоследнегоФоновогоЗадания = Неопределено, + "", + СообщенияИОписанияОшибокФоновогоЗадания(СвойстваПоследнегоФоновогоЗадания.Идентификатор) ); + +КонецФункции + +// Возвращает параметры запуска отдельного сеанса выполнения регламентных заданий. +// +// Параметры: +// ПоНастройкеАвтоОткрытия - Булево - открывать сеанс, если настроен +// автоматический запуск отдельного сеанса и не серверная ИБ и не Веб-клиент и +// сеанс уже не открыт. В других случаях устанавливается Отказ. +// +// Возвращаемое значение: +// Структура - ТребуетсяОткрытьОтдельныйСеанс - Булево - Истина. +// ДополнительныеПараметрыКоманднойСтроки - Строка - дополнительные параметры командной строки для +// запуска сеанса выполнения регламентных заданий. +// ВыполненаПопыткаОткрытия - Булево - Ложь, для использования в вызывающей процедуре. +// УведомлятьОНекорректномВыполнении - Булево. +// ПериодУведомления - Число. +// Отказ - Булево. +// ОписаниеОшибки - Строка. +// +Функция ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Знач ПоНастройкеАвтоОткрытия = Ложь) Экспорт + + Результат = Новый Структура; + Результат.Вставить("ТребуетсяОткрытьОтдельныйСеанс", Ложь); + Результат.Вставить("ВыполненаПопыткаОткрытия", Ложь); + Результат.Вставить("ДополнительныеПараметрыКоманднойСтроки", ""); + Результат.Вставить("УведомлятьОНекорректномВыполнении", Ложь); + Результат.Вставить("ПериодУведомления", Неопределено); + Результат.Вставить("Отказ", Ложь); + Результат.Вставить("ОписаниеОшибки", ""); + + Если ПоНастройкеАвтоОткрытия Тогда + Результат.Вставить("ТекущийПользовательАдминистратор", Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь)); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + Результат.УведомлятьОНекорректномВыполнении = НужноУведомлятьОНекорректномВыполненииРегламентныхЗаданий(Результат.ПериодУведомления); + + Настройки = ПолучитьНастройкиВыполненияРегламентныхЗаданий(); + Если ПоНастройкеАвтоОткрытия И НЕ Настройки.АвтоматическиЗапускатьОтдельныйСеансДляВыполненияРегламентныхЗаданий Тогда + Возврат Результат; + КонецЕсли; + + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если ПоНастройкеАвтоОткрытия Тогда + Возврат Результат; + Иначе + Результат.Отказ = Истина; + Результат.ОписаниеОшибки = НСтр("ru = 'Регламентные задания выполняются на сервере.'"); + Возврат Результат; + КонецЕсли; + КонецЕсли; + + ЗаданияВыполняютсяНормально = Неопределено; + ТекущийСеансВыполняетРегламентныеЗадания(ЗаданияВыполняютсяНормально); + Если ЗаданияВыполняютсяНормально Тогда + Если ПоНастройкеАвтоОткрытия Тогда + Возврат Результат; + Иначе + Результат.Отказ = Истина; + Результат.ОписаниеОшибки = НСтр("ru = 'Сеанс, выполняющий регламентные задания, уже открыт.'"); + Возврат Результат; + КонецЕсли; + КонецЕсли; + + НомерТекущегоСеанса = НомерСеансаИнформационнойБазы(); + // Определение начала текущего сеанса. + НачалоТекущегоСеанса = '00010101'; + Сеансы = ПолучитьСеансыИнформационнойБазы(); + Для каждого Сеанс Из Сеансы Цикл + Если Сеанс.НомерСеанса = НомерТекущегоСеанса Тогда + НачалоТекущегоСеанса = Сеанс.НачалоСеанса; + Прервать; + КонецЕсли; + КонецЦикла; + Результат.ДополнительныеПараметрыКоманднойСтроки = """" + + " /C""DoScheduledJobs SkipMessageBox AloneIBSession From1C" + + "SessionNumber=" + НомерТекущегоСеанса + " SessionStarted=" + НачалоТекущегоСеанса + """"; + + Результат.ТребуетсяОткрытьОтдельныйСеанс = Истина; + + Возврат Результат; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с фоновыми заданиями + +// Отменяет фоновое задание, если это возможно, а именно, если оно выполняется на сервере, и активно. +// +// Параметры: +// Идентификатор - Строка уникального идентификатора ФоновогоЗадания. +// +Процедура ОтменитьФоновоеЗадание(Идентификатор) Экспорт + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + ВызватьИсключение( НСтр("ru ='Фоновые задания не используются + |в файловой информационной базе.'")); + КонецЕсли; + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Отбор = Новый Структура("УникальныйИдентификатор", Новый УникальныйИдентификатор(Идентификатор)); + МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если МассивФоновыхЗаданий.Количество() = 1 Тогда + ФоновоеЗадание = МассивФоновыхЗаданий[0]; + Иначе + ВызватьИсключение( НСтр("ru = 'Фоновое задание не найдено на сервере.'") ); + КонецЕсли; + + Если ФоновоеЗадание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда + ВызватьИсключение( НСтр("ru = 'Задание не выполняется, его нельзя отменить.'") ); + КонецЕсли; + + ФоновоеЗадание.Отменить(); + +КонецПроцедуры + +// "Эмулирует" функцию ФоновыеЗадания.ПолучитьФоновыеЗадания() для файловой ИБ. +// Структуру таблицы смотри в функции ПустаяТаблицаСвойствФоновыхЗаданий(). +// +// Параметры: +// Отбор - Структура - допустимые поля: +// Идентификатор, Ключ, Состояние, Начало, Конец, +// Наименование, ИмяМетода, РегламентноеЗадание. +// ВсегоЗаданий - Число - возвращает общее количество заданий без учета отбора. +// ПрочитанноеСостояние - Неопределено, только для внутреннего использования. +// +// Возвращаемое значение: +// ТаблицаЗначений - возвращается таблица после отбора. +// +Функция ПолучитьТаблицуСвойствФоновыхЗаданий(Отбор = Неопределено, ВсегоЗаданий = 0) Экспорт + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Таблица = ПустаяТаблицаСвойствФоновыхЗаданий(); + + Если Отбор <> Неопределено И Отбор.Свойство("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания") Тогда + Отбор.Удалить("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания"); + ПолучитьПоследнее = Истина; + Иначе + ПолучитьПоследнее = Ложь; + КонецЕсли; + + РегламентноеЗадание = Неопределено; + + // Добавление истории фоновых заданий, полученных с сервера. + Если НЕ ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + Если Отбор <> Неопределено И Отбор.Свойство("ИдентификаторРегламентногоЗадания") Тогда + МассивФоновыхЗаданий = Новый Массив; + Если Отбор.ИдентификаторРегламентногоЗадания <> "" Тогда + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Отбор.ИдентификаторРегламентногоЗадания)); + Если РегламентноеЗадание <> Неопределено Тогда + ПоследнееФоновоеЗадание = РегламентноеЗадание.ПоследнееЗадание; + Если ПолучитьПоследнее И ПоследнееФоновоеЗадание <> Неопределено Тогда + МассивФоновыхЗаданий.Добавить(ПоследнееФоновоеЗадание); + ДобавитьСвойстваФоновыхЗаданий(МассивФоновыхЗаданий, Таблица); + Иначе + ПервыйОтбор = Новый Структура("РегламентноеЗадание", РегламентноеЗадание); + МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(ПервыйОтбор); + ДобавитьСвойстваФоновыхЗаданий(МассивФоновыхЗаданий, Таблица); + КонецЕсли; + КонецЕсли; + Если НЕ ПолучитьПоследнее ИЛИ МассивФоновыхЗаданий.Количество() = 0 Тогда + ВторойОтбор = Новый Структура("Ключ", Отбор.ИдентификаторРегламентногоЗадания); + ДобавитьСвойстваФоновыхЗаданий(ФоновыеЗадания.ПолучитьФоновыеЗадания(ВторойОтбор), Таблица); + КонецЕсли; + Если ПолучитьПоследнее Тогда + Возврат Таблица; + КонецЕсли; + Иначе + ВсеИдентификаторыРегламентныхЗаданий = Новый Соответствие; + Для каждого ТекущееЗадание Из РегламентныеЗадания.ПолучитьРегламентныеЗадания() Цикл + ВсеИдентификаторыРегламентныхЗаданий.Вставить( + Строка(ТекущееЗадание.УникальныйИдентификатор), Истина); + КонецЦикла; + Для каждого ТекущееЗадание Из ФоновыеЗадания.ПолучитьФоновыеЗадания() Цикл + Если ТекущееЗадание.РегламентноеЗадание = Неопределено + И ВсеИдентификаторыРегламентныхЗаданий[ТекущееЗадание.Ключ] = Неопределено Тогда + + МассивФоновыхЗаданий.Добавить(ТекущееЗадание); + КонецЕсли; + КонецЦикла; + КонецЕсли; + Иначе + Если Отбор = Неопределено Тогда + МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(); + Иначе + Если Отбор.Свойство("Идентификатор") Тогда + Отбор.Вставить("УникальныйИдентификатор", Новый УникальныйИдентификатор(Отбор.Идентификатор)); + Отбор.Удалить("Идентификатор"); + КонецЕсли; + МассивФоновыхЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Если Отбор.Свойство("УникальныйИдентификатор") Тогда + Отбор.Вставить("Идентификатор", Строка(Отбор.УникальныйИдентификатор)); + Отбор.Удалить("УникальныйИдентификатор"); + КонецЕсли; + КонецЕсли; + ДобавитьСвойстваФоновыхЗаданий(МассивФоновыхЗаданий, Таблица); + КонецЕсли; + КонецЕсли; + + Если Отбор <> Неопределено И Отбор.Свойство("ИдентификаторРегламентногоЗадания") Тогда + РегламентныеЗаданияДляОбработки = Новый Массив; + Если Отбор.ИдентификаторРегламентногоЗадания <> "" Тогда + Если РегламентноеЗадание = Неопределено Тогда + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(Отбор.ИдентификаторРегламентногоЗадания)); + КонецЕсли; + Если РегламентноеЗадание <> Неопределено Тогда + РегламентныеЗаданияДляОбработки.Добавить(РегламентноеЗадание); + КонецЕсли; + КонецЕсли; + Иначе + РегламентныеЗаданияДляОбработки = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); + КонецЕсли; + + // Добавление и сохранение состояний регламентных заданий + Для каждого РегламентноеЗадание Из РегламентныеЗаданияДляОбработки Цикл + ИдентификаторРегламентногоЗадания = Строка(РегламентноеЗадание.УникальныйИдентификатор); + Свойства = ХранилищеОбщихНастроек.Загрузить("СостояниеРегламентногоЗадания_" + ИдентификаторРегламентногоЗадания, , , ""); + Свойства = ?(ТипЗнч(Свойства) = Тип("ХранилищеЗначения"), Свойства.Получить(), Неопределено); + + Если ТипЗнч(Свойства) = Тип("Структура") + И Свойства.ИдентификаторРегламентногоЗадания = ИдентификаторРегламентногоЗадания + И Таблица.НайтиСтроки(Новый Структура("Идентификатор, НаСервере", Свойства.Идентификатор, Свойства.НаСервере)).Количество() = 0 Тогда + + Если Свойства.НаСервере Тогда + ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + ИдентификаторРегламентногоЗадания, , Неопределено, , ""); + Иначе + Если Свойства.Состояние = СостояниеФоновогоЗадания.Активно Тогда + НайденСеансВыполняющийЗадания = Ложь; + Для каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл + Если Сеанс.НомерСеанса = Свойства.НомерСеанса + И Сеанс.НачалоСеанса = Свойства.НачалоСеанса Тогда + НайденСеансВыполняющийЗадания = НомерСеансаИнформационнойБазы() <> Сеанс.НомерСеанса; + Прервать; + КонецЕсли; + КонецЦикла; + Если НЕ НайденСеансВыполняющийЗадания Тогда + Свойства.Конец = ТекущаяДатаСеанса(); + Свойства.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно; + Свойства.ОписаниеИнформацииОбОшибке = НСтр("ru = 'Не найден сеанс, выполняющий процедуру регламентного задания.'"); + КонецЕсли; + КонецЕсли; + ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Свойства); + КонецЕсли; + КонецЕсли; + КонецЦикла; + Таблица.Сортировать("Начало Убыв, Конец Убыв"); + + ВсегоЗаданий = Таблица.Количество(); + + // Отбор фоновых заданий. + Если Отбор <> Неопределено Тогда + Начало = Неопределено; + Конец = Неопределено; + Состояние = Неопределено; + Если Отбор.Свойство("Начало") Тогда + Начало = ?(ЗначениеЗаполнено(Отбор.Начало), Отбор.Начало, Неопределено); + Отбор.Удалить("Начало"); + КонецЕсли; + Если Отбор.Свойство("Конец") Тогда + Конец = ?(ЗначениеЗаполнено(Отбор.Конец), Отбор.Конец, Неопределено); + Отбор.Удалить("Конец"); + КонецЕсли; + Если Отбор.Свойство("Состояние") Тогда + Если ТипЗнч(Отбор.Состояние) = Тип("Массив") Тогда + Состояние = Отбор.Состояние; + Отбор.Удалить("Состояние"); + КонецЕсли; + КонецЕсли; + + Если Отбор.Количество() <> 0 Тогда + Строки = Таблица.НайтиСтроки(Отбор); + Иначе + Строки = Таблица; + КонецЕсли; + // Выполнение дополнительной фильтрации по периоду и состоянию (если отбор определен). + НомерЭлемента = Строки.Количество() - 1; + Пока НомерЭлемента >= 0 Цикл + Если Начало <> Неопределено И Начало > Строки[НомерЭлемента].Начало ИЛИ + Конец <> Неопределено И Конец < ?(ЗначениеЗаполнено(Строки[НомерЭлемента].Конец), Строки[НомерЭлемента].Конец, ТекущаяДатаСеанса()) ИЛИ + Состояние <> Неопределено И Состояние.Найти(Строки[НомерЭлемента].Состояние) = Неопределено Тогда + Строки.Удалить(НомерЭлемента); + КонецЕсли; + НомерЭлемента = НомерЭлемента - 1; + КонецЦикла; + // Удаление лишних строк из таблицы. + Если ТипЗнч(Строки) = Тип("Массив") Тогда + НомерСтроки = ВсегоЗаданий - 1; + Пока НомерСтроки >= 0 Цикл + Если Строки.Найти(Таблица[НомерСтроки]) = Неопределено Тогда + Таблица.Удалить(Таблица[НомерСтроки]); + КонецЕсли; + НомерСтроки = НомерСтроки - 1; + КонецЦикла; + КонецЕсли; + КонецЕсли; + + Возврат Таблица; + +КонецФункции + +// Возвращает свойства ФоновогоЗадания по строке уникального идентификатора. +// +// Параметры: +// Идентификатор - Строка - уникального идентификатора ФоновогоЗадания. +// ИменаСвойств - Строка, если заполнено, возвращается структура с указанными свойствами. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Структура - свойства ФоновогоЗадания. +// +Функция ПолучитьСвойстваФоновогоЗадания(Идентификатор, ИменаСвойств = "") Экспорт + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Отбор = Новый Структура("Идентификатор", Идентификатор); + ТаблицаСвойствФоновыхЗаданий = ПолучитьТаблицуСвойствФоновыхЗаданий(Отбор); + + Если ТаблицаСвойствФоновыхЗаданий.Количество() > 0 Тогда + Если ЗначениеЗаполнено(ИменаСвойств) Тогда + Результат = Новый Структура(ИменаСвойств); + ЗаполнитьЗначенияСвойств(Результат, ТаблицаСвойствФоновыхЗаданий[0]); + Иначе + Результат = ТаблицаСвойствФоновыхЗаданий[0]; + КонецЕсли; + Иначе + Результат = Неопределено; + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Возвращает свойства последнего фонового задания выполненного при выполнении регламентного задания, если оно есть. +// Процедура работает, как в файл-серверном, так и в клиент-серверном режимах. +// +// Параметры: +// РегламентноеЗадание - РегламентноеЗадание, Строка - строка уникального идентификатора РегламентногоЗадания. +// +// Возвращаемое значение: +// СтрокаТаблицыЗначений, Неопределено. +// +Функция ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(РегламентноеЗадание) Экспорт + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + ИдентификаторРегламентногоЗадания = ?(ТипЗнч(РегламентноеЗадание) = Тип("РегламентноеЗадание"), Строка(РегламентноеЗадание.УникальныйИдентификатор), РегламентноеЗадание); + Отбор = Новый Структура; + Отбор.Вставить("ИдентификаторРегламентногоЗадания", ИдентификаторРегламентногоЗадания); + Отбор.Вставить("ПолучитьПоследнееФоновоеЗаданиеРегламентногоЗадания"); + ТаблицаСвойствФоновыхЗаданий = ПолучитьТаблицуСвойствФоновыхЗаданий(Отбор); + ТаблицаСвойствФоновыхЗаданий.Сортировать("Конец Возр"); + + Если ТаблицаСвойствФоновыхЗаданий.Количество() = 0 Тогда + СвойстваФоновогоЗадания = Неопределено; + ИначеЕсли НЕ ЗначениеЗаполнено(ТаблицаСвойствФоновыхЗаданий[0].Конец) Тогда + СвойстваФоновогоЗадания = ТаблицаСвойствФоновыхЗаданий[0]; + Иначе + СвойстваФоновогоЗадания = ТаблицаСвойствФоновыхЗаданий[ТаблицаСвойствФоновыхЗаданий.Количество()-1]; + КонецЕсли; + + СохраняемоеЗначение = Новый ХранилищеЗначения(?(СвойстваФоновогоЗадания = Неопределено, Неопределено, ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СвойстваФоновогоЗадания))); + ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + ИдентификаторРегламентногоЗадания, , СохраняемоеЗначение, , ""); + + Возврат СвойстваФоновогоЗадания; + +КонецФункции + +// Возвращает многострочную Строку содержащую Сообщения и ОписаниеИнформацииОбОшибке, +// если фоновое задание найдено по идентификатору и сообщения/ошибки есть. +// +// Параметры: +// Задание - Строка - УникальныйИдентификатор ФоновогоЗадания строкой. +// +// Возвращаемое значение: +// Строка. +// +Функция СообщенияИОписанияОшибокФоновогоЗадания(Идентификатор, СвойстваФоновогоЗадания = Неопределено) Экспорт + + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + УстановитьПривилегированныйРежим(Истина); + + Если СвойстваФоновогоЗадания = Неопределено Тогда + СвойстваФоновогоЗадания = ПолучитьСвойстваФоновогоЗадания(Идентификатор); + КонецЕсли; + + Строка = ""; + Если СвойстваФоновогоЗадания <> Неопределено Тогда + Для каждого Сообщение Из СвойстваФоновогоЗадания.СообщенияПользователю Цикл + Строка = Строка + ?(Строка = "", + "", + " + | + |") + Сообщение.Текст; + КонецЦикла; + Если ЗначениеЗаполнено(СвойстваФоновогоЗадания.ОписаниеИнформацииОбОшибке) Тогда + Строка = Строка + ?(Строка = "", + СвойстваФоновогоЗадания.ОписаниеИнформацииОбОшибке, + " + | + |" + СвойстваФоновогоЗадания.ОписаниеИнформацииОбОшибке); + КонецЕсли; + КонецЕсли; + + Возврат Строка; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +// Возвращает новую таблицу свойств фоновых заданий. +// +// Возвращаемое значение: +// ТаблицаЗначений. +// +Функция ПустаяТаблицаСвойствФоновыхЗаданий() + + НоваяТаблица = Новый ТаблицаЗначений; + НоваяТаблица.Колонки.Добавить("НаСервере", Новый ОписаниеТипов("Булево")); + НоваяТаблица.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); + НоваяТаблица.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка")); + НоваяТаблица.Колонки.Добавить("Ключ", Новый ОписаниеТипов("Строка")); + НоваяТаблица.Колонки.Добавить("Начало", Новый ОписаниеТипов("Дата")); + НоваяТаблица.Колонки.Добавить("Конец", Новый ОписаниеТипов("Дата")); + НоваяТаблица.Колонки.Добавить("ИдентификаторРегламентногоЗадания", Новый ОписаниеТипов("Строка")); + НоваяТаблица.Колонки.Добавить("Состояние", Новый ОписаниеТипов("СостояниеФоновогоЗадания")); + НоваяТаблица.Колонки.Добавить("ИмяМетода", Новый ОписаниеТипов("Строка")); + НоваяТаблица.Колонки.Добавить("Расположение", Новый ОписаниеТипов("Строка")); + НоваяТаблица.Колонки.Добавить("ОписаниеИнформацииОбОшибке", Новый ОписаниеТипов("Строка")); + НоваяТаблица.Колонки.Добавить("ПопыткаЗапуска", Новый ОписаниеТипов("Число")); + НоваяТаблица.Колонки.Добавить("СообщенияПользователю", Новый ОписаниеТипов("Массив")); + НоваяТаблица.Колонки.Добавить("НомерСеанса", Новый ОписаниеТипов("Число")); + НоваяТаблица.Колонки.Добавить("НачалоСеанса", Новый ОписаниеТипов("Дата")); + НоваяТаблица.Индексы.Добавить("Идентификатор, Начало"); + + Возврат НоваяТаблица; + +КонецФункции + +// Предназначена для заполнения/восстановления структуры свойств +// настроек, хранимых в структуре "Состояние" свойства Настройки. +// +// Параметры: +// Настройки - Неопределено, Структура. +// +// Возвращаемое значение: +// Структура - обновленные настройки. +// +Функция ПроверитьНастройки(Знач Настройки = Неопределено) + + НоваяСтруктураНастроек = Новый Структура(); + // Если нужно и можно, то при запуске клиентского приложения автоматически открывать сеанс выполнения регламентных заданий. + НоваяСтруктураНастроек.Вставить("АвтоматическиЗапускатьОтдельныйСеансДляВыполненияРегламентныхЗаданий", Ложь); + // Если задания не выполняются или выполнение "висит", уведомлять пользователя. + НоваяСтруктураНастроек.Вставить("УведомлятьОНекорректномВыполненииРегламентныхЗаданий", Ложь); + // Период, минут. + НоваяСтруктураНастроек.Вставить("ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий", 15); + + // Копирование существующих свойств. + Если ТипЗнч(Настройки) = Тип("Структура") Тогда + Для каждого КлючИзначение Из НоваяСтруктураНастроек Цикл + Если Настройки.Свойство(КлючИзначение.Ключ) Тогда + Если ТипЗнч(НоваяСтруктураНастроек[КлючИзначение.Ключ]) = ТипЗнч(Настройки[КлючИзначение.Ключ]) Тогда + НоваяСтруктураНастроек[КлючИзначение.Ключ] = Настройки[КлючИзначение.Ключ]; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если НЕ (НоваяСтруктураНастроек.ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий >= 1 И + НоваяСтруктураНастроек.ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий <= 99 ) Тогда + + НоваяСтруктураНастроек.ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий = 15; + КонецЕсли; + + Возврат НоваяСтруктураНастроек; + +КонецФункции + +// Возвращает структуру, описывающую состояние выполнения регламентных заданий. +Функция ПолучитьСостояниеВыполненияРегламентныхЗаданий(Заблокировать = Ложь) + + // Подготовка данных для проверки или начальной установки свойств прочитанного состояния. + НоваяСтруктура = Новый Структура(); + // Хранение истории выполнения фоновых заданий. + НоваяСтруктура.Вставить("НомерСеанса", 0); + НоваяСтруктура.Вставить("НачалоСеанса", '00010101'); + НоваяСтруктура.Вставить("ИмяКомпьютера", ""); + НоваяСтруктура.Вставить("ИмяПриложения", ""); + НоваяСтруктура.Вставить("ИмяПользователя", ""); + НоваяСтруктура.Вставить("ИдентификаторОчередногоЗадания", ""); + НоваяСтруктура.Вставить("НачалоВыполненияОчередногоЗадания", '00010101'); + НоваяСтруктура.Вставить("ОкончаниеВыполненияОчередногоЗадания", '00010101'); + + Состояние = ХранилищеОбщихНастроек.Загрузить("СостояниеВыполненияРегламентныхЗаданий", , , ""); + Состояние = ?(ТипЗнч(Состояние) = Тип("ХранилищеЗначения"), Состояние.Получить(), Неопределено); + + // Копирование существующих свойств. + Если ТипЗнч(Состояние) = Тип(НоваяСтруктура) Тогда + Для каждого КлючИзначение Из НоваяСтруктура Цикл + Если Состояние.Свойство(КлючИзначение.Ключ) Тогда + Если ТипЗнч(НоваяСтруктура[КлючИзначение.Ключ]) = ТипЗнч(Состояние[КлючИзначение.Ключ]) Тогда + НоваяСтруктура[КлючИзначение.Ключ] = Состояние[КлючИзначение.Ключ]; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат НоваяСтруктура; + +КонецФункции + +// Сохраняет в структуре СостояниеВыполненияРегламентныхЗаданий переданное состояние. +// +// Параметры: +// Состояние - Структура - изменённое значение функции ПолучитьСостояниеВыполненияРегламентныхЗаданий(). +// +// ИзмененныеСвойства - Неопределено - требуется записать состояние, иначе сохранить только указанные свойства. +// Строка - список имен свойств, разделенный запятыми, +// которые необходимо сохранить. +// +Процедура СохранитьСостояниеВыполненияРегламентныхЗаданий(Состояние, Знач ИзмененныеСвойства = Неопределено) + + Если ИзмененныеСвойства <> Неопределено Тогда + ТекущееСостояние = ПолучитьСостояниеВыполненияРегламентныхЗаданий(); + ЗаполнитьЗначенияСвойств(ТекущееСостояние, Состояние, ИзмененныеСвойства); + Состояние = ТекущееСостояние; + КонецЕсли; + + ХранилищеОбщихНастроек.Сохранить("СостояниеВыполненияРегламентныхЗаданий", , Новый ХранилищеЗначения(Состояние), , ""); + +КонецПроцедуры + +// Выполняет регламентное задание в режиме файловой информационной базе. +// Используется в процедуре ВыполнитьРегламентныеЗадания(). +// +// Параметры: +// Состояние - Структура. +// Задание - РегламентноеЗадание. +// ЗапускВручную - Булево. +// МоментЗапуска - Неопределено, Дата - устанавливает момент запуска или возвращает момент запуска. +// МоментОкончания - Неопределено, Дата - возвращает момент окончание. +// +// Возвращаемое значение +// Булево. Если Ложь, значит процедура регламентного задания уже выполняется. +// +Функция ВыполнитьРегламентноеЗадание(Знач Задание, + Знач ЗапускВручную = Ложь, + МоментЗапуска = Неопределено, + МоментОкончания = Неопределено, + НомерСеанса = Неопределено, + НачалоСеанса = Неопределено) + + СвойстваПоследнегоФоновогоЗадания = ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); + + Если СвойстваПоследнегоФоновогоЗадания <> Неопределено + И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно Тогда + + НомерСеанса = СвойстваПоследнегоФоновогоЗадания.НомерСеанса; + НачалоСеанса = СвойстваПоследнегоФоновогоЗадания.НачалоСеанса; + Возврат Ложь; + КонецЕсли; + + ИмяМетода = Задание.Метаданные.ИмяМетода; + НаименованиеФоновогоЗадания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ?(ЗапускВручную, + НСтр("ru = 'Запуск вручную: %1'"), + НСтр("ru = 'Автозапуск: %1'")), + ПредставлениеРегламентногоЗадания(Задание)); + + МоментЗапуска = ?(ТипЗнч(МоментЗапуска) <> Тип("Дата") ИЛИ НЕ ЗначениеЗаполнено(МоментЗапуска), ТекущаяДатаСеанса(), МоментЗапуска); + + // Создание свойств нового фонового псевдо-задания. + СвойстваФоновогоЗадания = ПустаяТаблицаСвойствФоновыхЗаданий().Добавить(); + СвойстваФоновогоЗадания.Идентификатор = Строка(Новый УникальныйИдентификатор()); + СвойстваФоновогоЗадания.ПопыткаЗапуска = ?( + СвойстваПоследнегоФоновогоЗадания <> Неопределено + И СвойстваПоследнегоФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно, + СвойстваПоследнегоФоновогоЗадания.ПопыткаЗапуска + 1, + 1); + СвойстваФоновогоЗадания.Наименование = НаименованиеФоновогоЗадания; + СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания = Строка(Задание.УникальныйИдентификатор); + СвойстваФоновогоЗадания.Расположение = "\\" + ИмяКомпьютера(); + СвойстваФоновогоЗадания.ИмяМетода = ИмяМетода; + СвойстваФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Активно; + СвойстваФоновогоЗадания.Начало = МоментЗапуска; + СвойстваФоновогоЗадания.НомерСеанса = НомерСеансаИнформационнойБазы(); + + Для каждого Сеанс Из ПолучитьСеансыИнформационнойБазы() Цикл + Если Сеанс.НомерСеанса = СвойстваФоновогоЗадания.НомерСеанса Тогда + СвойстваФоновогоЗадания.НачалоСеанса = Сеанс.НачалоСеанса; + Прервать; + КонецЕсли; + КонецЦикла; + + // Подготовка команды для выполнения метода вместо фонового задания. + СтрокаПараметров = ""; + Индекс = 0; + Пока Индекс < Задание.Параметры.Количество() Цикл + СтрокаПараметров = СтрокаПараметров + "Задание.Параметры[" + Индекс + "]"; + Если Индекс < (Задание.Параметры.Количество()-1) Тогда + СтрокаПараметров = СтрокаПараметров + ","; + КонецЕсли; + Индекс = Индекс + 1; + КонецЦикла; + + // Сохранение информации о запуске. + СохраняемоеЗначение = Новый ХранилищеЗначения(ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СвойстваФоновогоЗадания)); + ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + Строка(Задание.УникальныйИдентификатор), , СохраняемоеЗначение, , ""); + + ПолучитьСообщенияПользователю(Истина); + Попытка + // Здесь нет возможности выполнения произвольного кода, т.к. метод берется из метаданных регламентного задания. + Выполнить("" + ИмяМетода + "(" + СтрокаПараметров + ");"); + СвойстваФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.Завершено; + Исключение + СвойстваФоновогоЗадания.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно; + СвойстваФоновогоЗадания.ОписаниеИнформацииОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КонецПопытки; + + // Фиксация окончания выполнения метода. + МоментОкончания = ТекущаяДатаСеанса(); + СвойстваФоновогоЗадания.Конец = МоментОкончания; + СвойстваФоновогоЗадания.СообщенияПользователю = Новый Массив; + Для каждого Сообщение Из ПолучитьСообщенияПользователю() Цикл + СвойстваФоновогоЗадания.СообщенияПользователю.Добавить(Сообщение); + КонецЦикла; + ПолучитьСообщенияПользователю(Истина); + + Свойства = ХранилищеОбщихНастроек.Загрузить("СостояниеРегламентногоЗадания_" + Строка(Задание.УникальныйИдентификатор), , , ""); + Свойства = ?(ТипЗнч(Свойства) = Тип("ХранилищеЗначения"), Свойства.Получить(), Неопределено); + + Если Свойства.НомерСеанса = СвойстваФоновогоЗадания.НомерСеанса + И Свойства.НачалоСеанса = СвойстваФоновогоЗадания.НачалоСеанса Тогда + // Маловероятной перезаписи из-за отсутствия блокировки не произошло, поэтому можно записать свойства. + СохраняемоеЗначение = Новый ХранилищеЗначения(ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СвойстваФоновогоЗадания)); + ХранилищеОбщихНастроек.Сохранить("СостояниеРегламентногоЗадания_" + Строка(Задание.УникальныйИдентификатор), , СохраняемоеЗначение, , ""); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +Процедура ДобавитьСвойстваФоновыхЗаданий(Знач МассивФоновыхЗаданий, Знач ТаблицаСвойствФоновыхЗаданий) + + Индекс = МассивФоновыхЗаданий.Количество() - 1; + Пока Индекс >= 0 Цикл + ФоновоеЗадание = МассивФоновыхЗаданий[Индекс]; + Строка = ТаблицаСвойствФоновыхЗаданий.Добавить(); + ЗаполнитьЗначенияСвойств(Строка, ФоновоеЗадание); + Строка.НаСервере = Истина; + Строка.Идентификатор = ФоновоеЗадание.УникальныйИдентификатор; + РегламентноеЗадание = ФоновоеЗадание.РегламентноеЗадание; + + Если РегламентноеЗадание = Неопределено + И СтроковыеФункцииКлиентСервер.ЭтоУникальныйИдентификатор(ФоновоеЗадание.Ключ) Тогда + + РегламентноеЗадание = РегламентныеЗадания.НайтиПоУникальномуИдентификатору(Новый УникальныйИдентификатор(ФоновоеЗадание.Ключ)); + КонецЕсли; + Строка.ИдентификаторРегламентногоЗадания = ?( + РегламентноеЗадание = Неопределено, + "", + РегламентноеЗадание.УникальныйИдентификатор); + + Строка.ОписаниеИнформацииОбОшибке = ?( + ФоновоеЗадание.ИнформацияОбОшибке = Неопределено, + "", + ПодробноеПредставлениеОшибки(ФоновоеЗадание.ИнформацияОбОшибке)); + + Индекс = Индекс - 1; + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Обработчик обновления настроек выполнения регламентных заданий в новом размещении. +Процедура КонвертироватьНастройкиВыполненияРегламентныхЗаданий_1_2_2_2() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ВызватьИсключениеЕслиНетПраваАдминистрирования(); + + Настройки = ХранилищеОбщихНастроек.Загрузить("НастройкиВыполненияРегламентныхЗаданий", , , ""); + Настройки = ?(ТипЗнч(Настройки) = Тип("ХранилищеЗначения"), Настройки.Получить(), Неопределено); + + Если Настройки <> Неопределено Тогда + Настройки = ПроверитьНастройки(Настройки); + Константы.НастройкиВыполненияРегламентныхЗаданий.Установить(Настройки); + КонецЕсли; + + ХранилищеОбщихНастроек.Удалить("НастройкиВыполненияРегламентныхЗаданий", Неопределено, ""); + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/РегламентныеЗаданияСлужебный.mdo b/SSL/src/CommonModules/РегламентныеЗаданияСлужебный/РегламентныеЗаданияСлужебный.mdo new file mode 100644 index 000000000..7fb62e4dc --- /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..f13aa585a --- /dev/null +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,45 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Регламентные задания". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// См. эту функцию в модуле РегламентныеЗаданияСлужебный. +Функция ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий( + Знач ПоНастройкеАвтоОткрытия = Ложь) Экспорт + + Возврат РегламентныеЗаданияСлужебный + .ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий( + ПоНастройкеАвтоОткрытия); + +КонецФункции + +// См. эту функцию в модуле РегламентныеЗаданияСлужебный. +Функция НужноУведомлятьОНекорректномВыполненииРегламентныхЗаданий(ПериодУведомления) Экспорт + + Возврат РегламентныеЗаданияСлужебный + .НужноУведомлятьОНекорректномВыполненииРегламентныхЗаданий(ПериодУведомления); + +КонецФункции + +// См. эту функцию в модуле РегламентныеЗаданияСлужебный. +Функция ТекущийСеансВыполняетРегламентныеЗадания( + ЗаданияВыполняютсяНормально = Неопределено, + Знач УстановитьТекущийСеансКакСеансВыполняющийРегламентныеЗадания = Ложь, + ОписаниеОшибки = "") Экспорт + + Возврат РегламентныеЗаданияСлужебный.ТекущийСеансВыполняетРегламентныеЗадания( + ЗаданияВыполняютсяНормально, + УстановитьТекущийСеансКакСеансВыполняющийРегламентныеЗадания, + ОписаниеОшибки); + +КонецФункции + +// См. эту процедуру в модуле РегламентныеЗаданияСлужебный. +Процедура ВыполнитьРегламентныеЗадания(ВремяВыполнения = 0) Экспорт + + РегламентныеЗаданияСлужебный.ВыполнитьРегламентныеЗадания(ВремяВыполнения); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйВызовСервера/РегламентныеЗаданияСлужебныйВызовСервера.mdo b/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйВызовСервера/РегламентныеЗаданияСлужебныйВызовСервера.mdo new file mode 100644 index 000000000..482c9454e --- /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 similarity index 74% rename from SSL/src/CommonModules/РегламентныеЗаданияГлобальный/Module.bsl rename to SSL/src/CommonModules/РегламентныеЗаданияСлужебныйГлобальный/Module.bsl index 8faca4146..471229686 100644 --- a/SSL/src/CommonModules/РегламентныеЗаданияГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйГлобальный/Module.bsl @@ -11,17 +11,23 @@ // Процедура работает только если информационная база файловая. // Для серверной ИБ регламентные задания выполняются сервером 1С:Предприятия. // -// Подключается в процедуре РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(). +// Подключается в процедуре РегламентныеЗаданияСлужебныйКлиент.ПриНачалеРаботыСистемы(). // Процедура УведомлятьОНекорректномВыполненииРегламентныхЗаданий() Экспорт ПериодУведомления = Неопределено; // Минут. - Если РегламентныеЗаданияСервер.НужноУведомлятьОНекорректномВыполненииРегламентныхЗаданий(ПериодУведомления) Тогда + + Если РегламентныеЗаданияСлужебныйВызовСервера + .НужноУведомлятьОНекорректномВыполненииРегламентныхЗаданий(ПериодУведомления) Тогда + ОписаниеОшибки = ""; ЗаданияВыполняютсяНормально = Неопределено; - РегламентныеЗаданияСервер.ТекущийСеансВыполняетРегламентныеЗадания(ЗаданияВыполняютсяНормально, , ОписаниеОшибки); + + РегламентныеЗаданияСлужебныйВызовСервера.ТекущийСеансВыполняетРегламентныеЗадания( + ЗаданияВыполняютсяНормально, , ОписаниеОшибки); + Если НЕ ЗаданияВыполняютсяНормально Тогда - РегламентныеЗаданияКлиент.ПриОшибкеВыполненияРегламентныхЗаданий(ОписаниеОшибки); + РегламентныеЗаданияСлужебныйКлиент.ПриОшибкеВыполненияРегламентныхЗаданий(ОписаниеОшибки); КонецЕсли; ПодключитьОбработчикОжидания("УведомлятьОНекорректномВыполненииРегламентныхЗаданий", ПериодУведомления * 60, Истина); КонецЕсли; @@ -31,15 +37,15 @@ // Выполняет очередное регламентное задание в основном сеансе. // // Вызывается обработчиком ожидания, который подключается в -// РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(). +// РегламентныеЗаданияСлужебныйКлиент.ПриНачалеРаботыСистемы(). // // Для выполнения в отдельном сеансе применяется форма // Обработки.РегламентныеИФоновыеЗадания.Форма.ВыполнениеРегламентныхЗаданий. // Процедура ВыполнениеРегламентныхЗаданийВОсновномСеансе() Экспорт - Если РегламентныеЗаданияСервер.ТекущийСеансВыполняетРегламентныеЗадания() Тогда - РегламентныеЗаданияСервер.ВыполнитьРегламентныеЗадания(); + Если РегламентныеЗаданияСлужебныйВызовСервера.ТекущийСеансВыполняетРегламентныеЗадания() Тогда + РегламентныеЗаданияСлужебныйВызовСервера.ВыполнитьРегламентныеЗадания(); ПодключитьОбработчикОжидания("ВыполнениеРегламентныхЗаданийВОсновномСеансе", 60, Истина); КонецЕсли; @@ -61,7 +67,7 @@ Процедура АктивизироватьГлавноеОкноТекущегоСеансаПослеЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий() Экспорт - ОсновноеОкно = РегламентныеЗаданияКлиент.ОсновноеОкно(); + ОсновноеОкно = РегламентныеЗаданияСлужебныйКлиент.ОсновноеОкно(); Если ОсновноеОкно <> Неопределено Тогда ОсновноеОкно.Активизировать(); КонецЕсли; 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 c2771dbba..0af1bcdd5 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..9df7ddd7f --- /dev/null +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйКлиент/Module.bsl @@ -0,0 +1,222 @@ +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Обработчик события ПриНачалеРаботыСистемы вызывается +// для выполнения действий, требуемых для подсистемы РегламентныеЗадания. +// +Процедура ПриНачалеРаботыСистемы() Экспорт + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если Не ПараметрыРаботыКлиента.ДоступноИспользованиеРазделенныхДанных Или ПараметрыРаботыКлиента.РазделениеВключено Тогда + Возврат; + КонецЕсли; + + Если Найти(ПараметрЗапуска, "DoScheduledJobs") <> 0 Тогда + + ОбработатьПараметрыЗапуска(); + + ИначеЕсли ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда + + ПараметрыТолькоЧтение = ПараметрыРаботыКлиента.ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий; + + Если ПараметрыТолькоЧтение.Отказ Тогда + ПриОшибкеВыполненияРегламентныхЗаданий(ПараметрыТолькоЧтение.ОписаниеОшибки); + ИначеЕсли ПараметрыТолькоЧтение.ТребуетсяОткрытьОтдельныйСеанс Тогда + ПодключитьОбработчикОжидания("ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданийЧерезОбработчикОжидания", 1, Истина); + КонецЕсли; + + Если ПараметрыТолькоЧтение.УведомлятьОНекорректномВыполнении Тогда + ПодключитьОбработчикОжидания("УведомлятьОНекорректномВыполненииРегламентныхЗаданий", ПараметрыТолькоЧтение.ПериодУведомления * 60, Истина); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработатьПараметрыЗапуска() + + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Предупреждать = (Найти(ПараметрЗапуска, "SkipMessageBox") = 0); + ОтдельныйСеанс = (Найти(ПараметрЗапуска, "AloneIBSession") <> 0); + // В веб-клиенте обработка регламентных заданий в отдельном сеансе недоступно. +#Если ВебКлиент Тогда + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + ЗавершитьРаботуСистемы(Ложь); +#КонецЕсли + + // Для клиент-серверной базы. + Если Не ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда + Если Предупреждать Тогда + Предупреждение(НСтр("ru = 'Регламентные задания выполняются на сервере.'")); + КонецЕсли; + Если ОтдельныйСеанс Тогда + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + ЗавершитьРаботуСистемы(Ложь); + КонецЕсли; + Возврат; + КонецЕсли; + + // Для файл-серверной базы. + ЗаданияВыполняютсяНормально = Неопределено; + ОписаниеОшибки = ""; + Если РегламентныеЗаданияСлужебныйВызовСервера.ТекущийСеансВыполняетРегламентныеЗадания( + ЗаданияВыполняютсяНормально, Истина, ОписаниеОшибки) Тогда + + УстановитьЗаголовокПриложения(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнение регламентных заданий: %1'"), + ПолучитьЗаголовокПриложения() )); + + Если ОтдельныйСеанс Тогда + // Выполнять в отдельном сеансе. + ОсновноеОкно = ОсновноеОкно(); + + ИзПрограммы = (Найти(ПараметрЗапуска, "From1C") <> 0); + ПараметрыВФорму = Новый Структура("ЗаголовокНадписи", + ?(ИзПрограммы, НСтр("ru = 'Сеанс закроется автоматически при закрытии основного сеанса.'"), "")); + + Если ОсновноеОкно = Неопределено Тогда + ОткрытьФорму( + "Обработка.РегламентныеИФоновыеЗадания.Форма.РабочийСтолОтдельногоСеансаВыполненияРегламентныхЗаданий", + ПараметрыВФорму); + Иначе + ОткрытьФорму( + "Обработка.РегламентныеИФоновыеЗадания.Форма.РабочийСтолОтдельногоСеансаВыполненияРегламентныхЗаданий", + ПараметрыВФорму, + , + , + ОсновноеОкно); + КонецЕсли; + + Результат = ОткрытьФормуМодально( + "Обработка.РегламентныеИФоновыеЗадания.Форма.ВыполнениеРегламентныхЗаданий"); + + Если Результат = "Перезапустить" Тогда + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + ЗавершитьРаботуСистемы(Ложь, Истина, " /C""" + ПараметрЗапуска + """"); + КонецЕсли; + + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + ЗавершитьРаботуСистемы(Ложь); + Иначе + // Выполнять в этом сеансе. + ПодключитьОбработчикОжидания("ВыполнениеРегламентныхЗаданийВОсновномСеансе", 1, Истина); + КонецЕсли; + Иначе + Если Предупреждать Тогда + + Если ЗаданияВыполняютсяНормально Тогда + ТекстСообщения = НСтр("ru = 'Сеанс, обрабатывающий регламентные задания, уже открыт.'"); + Иначе + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Сеанс, выполняющий регламентные задания, уже открыт. + | + |%1'"), ОписаниеОшибки); + Предупреждение(ТекстСообщения); + КонецЕсли; + КонецЕсли; + Если ОтдельныйСеанс Тогда + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + ЗавершитьРаботуСистемы(Ложь); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Выполняет попытку открытия нового сеанса, обрабатывающего регламентные задания. +// +// Параметры: +// Параметры - Структура, используемые свойства: +// ДополнительныеПараметрыКоманднойСтроки - Строка. +// Отказ - Булево, выходной параметр. +// ОписаниеОшибки - Строка, выходной параметр. +// +Процедура ПопыткаЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий(Знач Параметры) Экспорт + + #Если НЕ ВебКлиент Тогда + Попытка + Параметры.ВыполненаПопыткаОткрытия = Истина; + ЗапуститьСистему( + ?(Найти(ВРег(ПараметрЗапуска), "/DEBUG") = 0, "", "/DEBUG ") + + Параметры.ДополнительныеПараметрыКоманднойСтроки); + Исключение + Параметры.ОписаниеОшибки = ОписаниеОшибки(); + Параметры.Отказ = Истина; + КонецПопытки; + #Иначе + Параметры.Отказ = Истина; + Параметры.ОписаниеОшибки = + НСтр("ru = 'Выполнение регламентных заданий в отдельном сеансе веб-клиента невозможна. + | + |Для выполнения регламентных заданий, необходимо, чтобы администратор настроил запуск обычного + |или тонкого клиента на веб-сервере.'"); + #КонецЕсли + Параметры.ОписаниеОшибки = + ?(ПустаяСтрока(Параметры.ОписаниеОшибки), + "", + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка открытия сеанса для выполнения регламентных заданий: + | + |%1'"), + Параметры.ОписаниеОшибки)); + +КонецПроцедуры + +// Оповещает пользователя об ошибке выполнения регламентных заданий. +// +// Вызывается из процедуры РегламентныеЗаданияСлужебныйГлобальный.УведомлятьОНекорректномВыполненииРегламентныхЗаданий() и +// РегламентныеЗаданияСлужебныйКлиент.ПриНачалеРаботыСистемы(). +// +// Вызов происходит, если обнаружено, что нет сеанса выполнения или +// сеанс есть, но "висит" (долго "не работает"). +// +// Параметры: +// ОписаниеОшибки - Строка. +// +Процедура ПриОшибкеВыполненияРегламентныхЗаданий(ОписаниеОшибки) Экспорт + + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий.ТекущийПользовательАдминистратор Тогда + ПоказатьОповещениеПользователя( + НСтр("ru = 'Регламентные задания не выполняются.'"), + "e1cib/app/Обработка.РегламентныеИФоновыеЗадания", + ОписаниеОшибки, + БиблиотекаКартинок.ОшибкаВыполненияРегламентныхЗаданий); + Иначе + ПоказатьОповещениеПользователя( + НСтр("ru = 'Регламентные задания не выполняются.'"), + , + ОписаниеОшибки + Символы.ПС + НСтр("ru = 'Обратитесь к администратору.'"), + БиблиотекаКартинок.ОшибкаВыполненияРегламентныхЗаданий); + КонецЕсли; + +КонецПроцедуры + +// Подключает глобальный обработчик ожидания в форме. +Процедура ПодключитьГлобальныйОбработчикОжидания(ИмяПроцедуры, Интервал, Однократно = Ложь) Экспорт + + ПодключитьОбработчикОжидания(ИмяПроцедуры, Интервал, Однократно); + +КонецПроцедуры + +// Отключает глобальный обработчик ожидания в форме. +Процедура ОтключитьГлобальныйОбработчикОжидания(ИмяПроцедуры) Экспорт + + ОтключитьОбработчикОжидания(ИмяПроцедуры); + +КонецПроцедуры + +Функция ОсновноеОкно() Экспорт + + ОсновноеОкно = Неопределено; + + Окна = ПолучитьОкна(); + Если Окна <> Неопределено Тогда + Для каждого Окно Из Окна Цикл + Если Окно.Основное Тогда + ОсновноеОкно = Окно; + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат ОсновноеОкно; + +КонецФункции diff --git a/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйКлиент/РегламентныеЗаданияСлужебныйКлиент.mdo b/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйКлиент/РегламентныеЗаданияСлужебныйКлиент.mdo new file mode 100644 index 000000000..ee68a3af3 --- /dev/null +++ b/SSL/src/CommonModules/РегламентныеЗаданияСлужебныйКлиент/РегламентныеЗаданияСлужебныйКлиент.mdo @@ -0,0 +1,10 @@ + + + РегламентныеЗаданияСлужебныйКлиент + + ru + Регламентные задания служебный клиент + + true + true + diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl new file mode 100644 index 000000000..8fdffb7e0 --- /dev/null +++ b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/Module.bsl @@ -0,0 +1,112 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Резервное копирование ИБ". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Устанавливает настройку в параметры резервного копирования. +// +// Параметры: +// ИмяЭлемента - Строка - имя параметра. +// ЗначениеЭлемента - Произвольный тип - значение параметра. +// +Процедура УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт + + РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки(ИмяЭлемента, ЗначениеЭлемента, ПараметрыРезервногоКопированияИБНаКлиенте); + +КонецПроцедуры + +// Устанавливает значение ближайшего следующего автоматического резервного копирования в соответствии с расписанием. +// +// Параметры: +// НачальнаяНастройка - Булево - признак начальной настройки. +// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. +// +Процедура УстановитьДатуСледующегоАвтоматическогоКопирования(НачальнаяНастройка = Ложь, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт + + РезервноеКопированиеИБСервер.УстановитьДатуСледующегоАвтоматическогоКопирования(НачальнаяНастройка = Ложь, ПараметрыРезервногоКопированияИБНаКлиенте); + +КонецПроцедуры + +// Устанавливает дату последнего оповещения пользователя. +// +// Параметры: +// ДатаНапоминания - Дата - дата и время последнего оповещения пользователя о необходимости проведения резервного копирования. +// +Процедура УстановитьДатуПоследнегоНапоминания(ДатаНапоминания) Экспорт + + РезервноеКопированиеИБСервер.УстановитьДатуПоследнегоНапоминания(ДатаНапоминания); + +КонецПроцедуры + +// Возвращает признак доступности роли "ПолучениеНапоминанийОРезервномКопировании". +// +// Возвращаемое значение - Булево - доступность роли. +// +Функция ПолучитьДоступностьРолейОповещения() Экспорт + + Возврат РезервноеКопированиеИБСервер.ПолучитьДоступностьРолейОповещения(); + +КонецФункции + +// Возвращает количество работающих с ИБ пользователей. +// +// Параметры: +// ТолькоАдминистраторы - Булево - признак того, что учитываются только работающие пользователи с административными правами. +// +// Возвращаемое значение - Число - количество работающих пользователей. +// +Функция ПолучитьКоличествоАктивныхПользователей(ТолькоАдминистраторы = Ложь) Экспорт + + Возврат РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей(ТолькоАдминистраторы); + +КонецФункции + +// Останавливает механизм автоматического резервного копирования. +// Устанавливает пустое расписание и минимальную дату копирования в будущее время. +// +// Параметры: +// ПроводитьПриЗавершении - Булево - признак проведения резервного копирования при завершении работы. +// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. +// +Процедура ОстановитьАвтоматическоеРезервноеКопирование(ПроводитьПриЗавершении = Ложь, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт + + РезервноеКопированиеИБСервер.ОстановитьАвтоматическоеРезервноеКопирование(ПроводитьПриЗавершении, ПараметрыРезервногоКопированияИБНаКлиенте); + +КонецПроцедуры + +// Устанавливает элемент "Код выбора" настроек резервного копирования. +// +// Параметры: +// КодПереключателя - Число - код переключателя. +// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервного копирования. +// +Процедура УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт + + РезервноеКопированиеИБСервер.УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБНаКлиенте); + +КонецПроцедуры + +// Останавливает оповещения о резервном копировании. +// +// Параметры: +// ПараметрыРезервногоКопированияИБНаКлиенте - Структура - параметры резервногот копирования. +// +Процедура ОстановитьСервисОповещения(ПараметрыРезервногоКопированияИБНаКлиенте) Экспорт + + РезервноеКопированиеИБСервер.ОстановитьСервисОповещения(ПараметрыРезервногоКопированияИБНаКлиенте); + +КонецПроцедуры + +// Сохраняет параметры резервного копирования. +// +// Параметры: +// СтруктураПараметров - Структура - параметры резервного копирования. +// +Процедура УстановитьПараметрыРезервногоКопирования(СтруктураПараметров) Экспорт + + РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(СтруктураПараметров); + +КонецПроцедуры \ No newline at end of file diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/РезервноеКопированиеИБВызовСервера.mdo b/SSL/src/CommonModules/РезервноеКопированиеИБВызовСервера/РезервноеКопированиеИБВызовСервера.mdo new file mode 100644 index 000000000..5f083965d --- /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 c64c1fea0..4019b2a85 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиент/Module.bsl @@ -10,11 +10,12 @@ // или показа пользователю необходимого информационного сообщения. Процедура ПриНачалеРаботыСистемы() Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если ПараметрыРаботы.РазделениеВключено Тогда Возврат; КонецЕсли; - ПараметрыНастроек = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПараметрыРезервногоКопированияИБ; + ПараметрыНастроек = ПараметрыРаботы.ПараметрыРезервногоКопированияИБ; // настройки не определены только в том случае, если у пользователя нет доступа к подсистеме Если ПараметрыНастроек = Неопределено Тогда @@ -33,7 +34,7 @@ ДатаОтложенногоРезервногоКопирования = Дата('00010101'); ПодключитьОбработчикОжидания("ОбработчикДействийРезервногоКопирования", 60); ВариантОповещения = ПараметрыНастроек.ПараметрОповещения; - Если ВариантОповещения = "Просрочено" Или ВариантОповещения = "Напомнить" Или ВариантОповещения = "ЕщеНеНастроено" Тогда + Если ВариантОповещения = "Просрочено" Или ВариантОповещения = "Напомнить" Или ВариантОповещения = "ЕщеНеНастроено" Тогда ОповеститьПользователяОРезервномКопировании(ВариантОповещения); КонецЕсли; @@ -48,7 +49,9 @@ // Подключает обработчик ожидания начала резервного копирования. Процедура ПодключитьОжиданиеРезервногоКопирования() Экспорт - РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Истина, ПараметрыРезервногоКопированияИБ); + + РезервноеКопированиеИБВызовСервера.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Истина, ПараметрыРезервногоКопированияИБ); + КонецПроцедуры @@ -120,7 +123,7 @@ КонецЕсли; // резервное копирование - РезервноеКопированиеИБСервер.УстановитьДатуСледующегоАвтоматическогоКопирования( , ПараметрыРезервногоКопированияИБ); + РезервноеКопированиеИБВызовСервера.УстановитьДатуСледующегоАвтоматическогоКопирования( , ПараметрыРезервногоКопированияИБ); ПараметрыФормы = Новый Структура("ТипВызова, ТекущаяСтраница", 2, "СтраницаИнформацииИВыполненияРезервногоКопирования"); ОткрытьФорму("Обработка.РезервноеКопированиеИБ.Форма.РезервноеКопированиеИнформационнойБазы", ПараметрыФормы); @@ -136,14 +139,10 @@ ЗначениеНастройкиРезервногоКопирования = ПараметрыРезервногоКопирования; - ЗначениеНастройкиРезервногоКопирования.АвтоматическоеРезервноеКопирование = Истина; - ПараметрыРезервногоКопированияИБ = ЗначениеНастройкиРезервногоКопирования; - РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ЗначениеНастройкиРезервногоКопирования); - Если ЗначениеНастройкиРезервногоКопирования.ПроведеноКопирование Тогда ПараметрыФормы = Новый Структура("ТипВызова", 2); - НазваниеТекущейСтраницы = ""; + НазваниеТекущейСтраницы = ""; Если ЗначениеНастройкиРезервногоКопирования.РезультатКопирования Тогда НазваниеТекущейСтраницы = "СтраницаУспешногоВыполненияКопирования"; @@ -174,7 +173,7 @@ ИначеЕсли ВариантОповещения = "Напомнить" Тогда - НастройкаОповещения = РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования(Истина).ДатаПоследнегоРезервногоКопирования; + НастройкаОповещения = ПараметрыРезервногоКопированияИБ.ДатаПоследнегоРезервногоКопирования; ТекстПояснения = НСтр("ru = 'Резервное копирование не выполнялось с %1.'"); МассивЗамены = Новый Массив; @@ -190,8 +189,8 @@ ТекстПояснения = НСтр("ru = 'Рекомендуется настроить резервное копирование информационной базы.'"); ПоказатьОповещениеПользователя(НСтр("ru = 'Резервное копирование.'"), "e1cib/app/Обработка.НастройкаРезервногоКопированияИБ", ТекстПояснения, БиблиотекаКартинок.Предупреждение32); - ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); - РезервноеКопированиеИБСервер.УстановитьДатуПоследнегоНапоминания(ТекущаяДата); + ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); + РезервноеКопированиеИБВызовСервера.УстановитьДатуПоследнегоНапоминания(ТекущаяДата); КонецЕсли; КонецПроцедуры @@ -349,13 +348,13 @@ Возврат Неопределено; #КонецЕсли - Если Не РезервноеКопированиеИБСервер.ПолучитьДоступностьРолейОповещения() Тогда + Если Не РезервноеКопированиеИБВызовСервера.ПолучитьДоступностьРолейОповещения() Тогда Возврат Неопределено; КонецЕсли; ОповещатьПостоянно = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПараметрыРезервногоКопированияИБ.ПроводитьРезервноеКопированиеПриЗавершенииРаботы; ОповещатьПостоянно = ?(ОповещатьПостоянно = Неопределено, Ложь, ОповещатьПостоянно); - КоличествоАктивныхАдминистраторов = РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей(Истина); + КоличествоАктивныхАдминистраторов = РезервноеКопированиеИБВызовСервера.ПолучитьКоличествоАктивныхПользователей(Истина); // Переменная ОповещатьОРезервномКопированииПриЗавершенииСеанса сравнивается явно с Истина, // так как может быть не проинициализирована при аварийном завершении. Если ОповещатьОРезервномКопированииПриЗавершенииСеанса = Истина ИЛИ (ОповещатьПостоянно И КоличествоАктивныхАдминистраторов = 1) Тогда diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl index 0b5262baf..9c452c3b0 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБКлиентГлобальный/Module.bsl @@ -11,7 +11,7 @@ // Процедура ОбработчикДействийРезервногоКопирования() Экспорт - ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); + ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); ПроводитьАвтоматическоеРезервноеКопирование = РезервноеКопированиеИБКлиент.НеобходимостьАвтоматическогоРезервногоКопирования(); Если ПроводитьАвтоматическоеРезервноеКопирование Тогда @@ -44,8 +44,8 @@ ДатаКопирования = РезервноеКопированиеИБКлиент.ПолучитьДатуКопирования(); ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); Если ТекущаяДата > ДатаКопирования Тогда - ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); - РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Ложь, ПараметрыРезервногоКопированияИБНаКлиенте); + ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); + ПараметрыРезервногоКопированияИБНаКлиенте.ОтложенноеРезервноеКопирование = Ложь; РезервноеКопированиеИБКлиент.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте); НачатьРезервноеКопирование(); @@ -58,10 +58,10 @@ Нстр("ru = 'Провести резервное копирование прямо сейчас'"), КодВозвратаДиалога.Да); Если Ответ = КодВозвратаДиалога.Да ИЛИ Ответ = КодВозвратаДиалога.Таймаут Тогда - ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); - РезервноеКопированиеИБСервер.УстановитьЗначениеНастройки("ОтложенноеРезервноеКопирование", Ложь, ПараметрыРезервногоКопированияИБНаКлиенте); + ПараметрыРезервногоКопированияИБНаКлиенте = РезервноеКопированиеИБКлиент.ПолучитьПараметрыРезервногоКопированияИБ(); + ПараметрыРезервногоКопированияИБНаКлиенте.ОтложенноеРезервноеКопирование = Ложь; РезервноеКопированиеИБКлиент.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБНаКлиенте); - + НачатьРезервноеКопирование(); КонецЕсли; КонецЕсли; diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl index 110e22f78..44da15a55 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/Module.bsl @@ -3,6 +3,25 @@ // //////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Параметры.Вставить("ПараметрыРезервногоКопированияИБ", ПолучитьНастройкиРезервногоКопирования()); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -75,13 +94,52 @@ // Возвращаемое значение - Структура - параметры резервного копирования. // Функция ПолучитьПараметрыРезервногоКопирования() Экспорт + Параметры = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПараметрыРезервногоКопирования"); Если Параметры = Неопределено ИЛИ Не Параметры.Свойство("ОтложенноеРезервноеКопирование") Тогда - Параметры = НачальноеЗаполнениеНастроекРезервногоКопирования(); + Параметры = НачальноеЗаполнениеНастроекРезервногоКопирования(); + Иначе + ПривестиПараметрыРезервногоКопирования(Параметры); КонецЕсли; Возврат Параметры; + КонецФункции +// Приводит параметры резервного копирования. +// Если в текущих параметреах резервного копирования нет параемтра, который есть в +// функции "НачальноеЗаполнениеНастроекРезервногоКопирования", то он добавляется со значением по умолчанию. +// +// Параметры: +// ПараметрыРезервногоКопирования - Структура - параметры резервного копирования ИБ. +// +Процедура ПривестиПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования) + + ПараметрыИзменены = Ложь; + + Параметры = НачальноеЗаполнениеНастроекРезервногоКопирования(Ложь); + Для Каждого ЭлементСтруктуры из Параметры Цикл + НайденноеЗначение = Неопределено; + Если ПараметрыРезервногоКопирования.Свойство(ЭлементСтруктуры.Ключ, НайденноеЗначение) Тогда + Если НайденноеЗначение = Неопределено и ЭлементСтруктуры.Значение <> Неопределено Тогда + ПараметрыРезервногоКопирования.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); + ПараметрыИзменены = Истина; + КонецЕсли; + Иначе + Если ЭлементСтруктуры.Значение <> Неопределено Тогда + ПараметрыРезервногоКопирования.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Значение); + ПараметрыИзменены = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если Не ПараметрыИзменены Тогда + Возврат; + КонецЕсли; + + УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопирования); + +КонецПроцедуры + // Сохраняет параметры резервного копирования. // // Параметры: @@ -207,6 +265,10 @@ Продолжить; КонецЕсли; + Если Сеанс.ИмяПриложения = "Designer" Тогда + Продолжить; + КонецЕсли; + Если Сеанс.Пользователь.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда КоличествоАдминистраторов = КоличествоАдминистраторов + 1; КонецЕсли; @@ -224,7 +286,7 @@ // Процедура УстановитьДатуПоследнегоНапоминания(ДатаНапоминания) Экспорт ПараметрыОповещений = ПолучитьПараметрыРезервногоКопирования(); - ПараметрыОповещений.ДатаПоследнегоОповещения = ДатаНапоминания; + ПараметрыОповещений.ДатаПоследнегоОповещения = ДатаНапоминания; УстановитьПараметрыРезервногоКопирования(ПараметрыОповещений); КонецПроцедуры @@ -358,9 +420,12 @@ // Возвращает начальное заполнение настроек автоматического резервного копирования. // +// Параметры: +// СохранятьПараметры - сохранять или нет параметры в хранилище настроек. +// // Возвращаемое значение - Структура - начальное заполнение параметров резервного копирования. // -Функция НачальноеЗаполнениеНастроекРезервногоКопирования() Экспорт +Функция НачальноеЗаполнениеНастроекРезервногоКопирования(СохранятьПараметры = Истина) Экспорт ТекущаяДата = ТекущаяДатаСеанса(); Параметры = Новый Структура; Параметры.Вставить("ПериодОповещения", 24*3600); // раз в сутки @@ -389,8 +454,12 @@ Параметры.Вставить("АвтоматическоеРезервноеКопирование", Ложь); Параметры.Вставить("ОтложенноеРезервноеКопирование", Ложь); - УстановитьПараметрыРезервногоКопирования(Параметры); + Если СохранятьПараметры Тогда + УстановитьПараметрыРезервногоКопирования(Параметры); + КонецЕсли; + Возврат Параметры; + КонецФункции // Возвращает признак доступности роли "ПолучениеНапоминанийОРезервномКопировании". @@ -461,23 +530,6 @@ УстановитьПараметрыРезервногоКопирования(СтруктураРезультата); КонецПроцедуры -// Возвращает настройки обработчиков ожидания. -// -// Возвращаемое значение - Структура - параметры резервного копирования. -// -Функция ПолучитьНастройкиОбработчиковОжидания() Экспорт - СтруктураВозврата = Новый Структура; - ПараметрыКопирования = ПолучитьНастройкиРезервногоКопирования(); - ПроводитьАвтоматическоеРезервноеКопирование = НеобходимостьАвтоматическогоРезервногоКопирования(); - - СтруктураВозврата.Вставить("ПараметрОповещения", ПараметрыКопирования.ПараметрОповещения); - СтруктураВозврата.Вставить("ОтложенноеРезервноеКопирование", ПараметрыКопирования.ОтложенноеРезервноеКопирование); - СтруктураВозврата.Вставить("ПроводитьАвтоматическоеРезервноеКопирование", ПроводитьАвтоматическоеРезервноеКопирование И ПараметрыКопирования.АвтоматическоеРезервноеКопирование); - СтруктураВозврата.Вставить("КоличествоПользователей", ПолучитьКоличествоАктивныхПользователей()); - СтруктураВозврата.Вставить("ПараметрыКопирования", ПараметрыКопирования); - Возврат СтруктураВозврата; -КонецФункции - // Возвращает размер файла в килобайтах. // // Параметры: diff --git a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/РезервноеКопированиеИБСервер.mdo b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/РезервноеКопированиеИБСервер.mdo index b8d52406e..8ecbe30a1 100644 --- a/SSL/src/CommonModules/РезервноеКопированиеИБСервер/РезервноеКопированиеИБСервер.mdo +++ b/SSL/src/CommonModules/РезервноеКопированиеИБСервер/РезервноеКопированиеИБСервер.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl new file mode 100644 index 000000000..66648c9ed --- /dev/null +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанных/Module.bsl @@ -0,0 +1,472 @@ + +//////////////////////////////////////////////////////////////////////////////// +// РезервноеКопированиеОбластейДанных. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Обмен сообщениями + +// Сообщить об успешной архивации текущей области. +// +Функция ОтправитьСообщениеРезервнаяКопияОбластиСоздана(Знач ПараметрыСообщения) Экспорт + + НачатьТранзакцию(); + Попытка + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + РезервноеКопированиеОбластейДанныхПовтИсп.СообщениеРезервнаяКопияОбластиСоздана()); + + Сообщение.Body.Zone = ПараметрыСообщения.ОбластьДанных; + Сообщение.Body.BackupId = ПараметрыСообщения.ИДКопии; + Сообщение.Body.FileId = ПараметрыСообщения.ИДФайла; + Сообщение.Body.Date = ТекущаяУниверсальнаяДата(); + + СообщенияВМоделиСервиса.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецФункции + +// Планировать архивацию области в прикладной базе. +// +Функция ОтправитьСообщениеОшибкаАрхивацииОбласти(Знач ПараметрыСообщения) Экспорт + + НачатьТранзакцию(); + Попытка + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + РезервноеКопированиеОбластейДанныхПовтИсп.СообщениеОшибкаАрхивацииОбласти()); + + Сообщение.Body.Zone = ПараметрыСообщения.ОбластьДанных; + Сообщение.Body.BackupId = ПараметрыСообщения.ИДКопии; + + СообщенияВМоделиСервиса.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецФункции + +// Планировать архивацию области в прикладной базе. +// +Функция ОтправитьСообщениеАрхивацияОбластиПропущена(Знач ПараметрыСообщения) Экспорт + + НачатьТранзакцию(); + Попытка + Сообщение = СообщенияВМоделиСервиса.НовоеСообщение( + РезервноеКопированиеОбластейДанныхПовтИсп.СообщениеАрхивацияОбластиПропущена()); + + Сообщение.Body.Zone = ПараметрыСообщения.ОбластьДанных; + Сообщение.Body.BackupId = ПараметрыСообщения.ИДКопии; + + СообщенияВМоделиСервиса.ОтправитьСообщение( + Сообщение, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Версионирование интерфейсов + +// Взводит либо сбрасывает константу-флаг ПоддержкаРезервногоКопирования наличия в Менеджере сервиса функциональности резервного копирования. +// К флагу привязана одноименная функциональная опция, обслуживающая доступность соответствующего пользовательского интерфейса. +// Возвращает новое значение константы. +// +// Возвращаемое значение: +// Булево - новое значение константы. +// +Функция УстановитьСтатусРезервногоКопирования() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ЕстьПоддержка = РезервноеКопированиеОбластейДанныхПовтИсп.МенеджерСервисаПоддерживаетРезервноеКопирование(); + Константы.ПоддержкаРезервногоКопирования.Установить(ЕстьПоддержка); + Возврат ЕстьПоддержка; + +КонецФункции + +// Активность пользователей в области данных + +// Устанавливает признак активности пользователя в текущей области. +// Признаком является наличие записи по данной области в регистре ОбластиКРезервнромуКопированию. +// +Процедура УстановитьФлагАктивностиПользователяВОбласти() Экспорт + + Если ПолучитьФункциональнуюОпцию("ПоддержкаРезервногоКопирования") Тогда + УстановитьФлагАктивностиВОбласти(); + КонецЕсли; + +КонецПроцедуры + +// Устанавливает либо снимает признак активности пользователя в текущей области. +// Признаком является наличие записи по данной области в регистре ОбластиКРезервнромуКопированию. +// Снятие признака - удаление записи. +// +// Параметры: +// ОбластьДанных - Число; Неопределено - Значение разделителя. Неопределено означает значение разделителя текущей области данных. +// Состояние - Булево - Истина, если признак надо установить; Ложь, если снять. +// +Процедура УстановитьФлагАктивностиВОбласти(Знач ОбластьДанных = Неопределено, Знач Состояние = Истина) + + УстановитьПривилегированныйРежим(Истина); + + Если ОбластьДанных = Неопределено Тогда + ОбластьДанных = ОбщегоНазначения.ЗначениеРазделителяСеанса(); + КонецЕсли; + + МенеджерЗаписи = РегистрыСведений.ОбластиКРезервномуКопированию.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ОбластьДанных; + + Если Состояние Тогда + МенеджерЗаписи.Записать(); + Иначе + МенеджерЗаписи.Удалить(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Выгрузка областей данных. + +Процедура ЗапланироватьАрхивациюВОчереди(Знач ПараметрыВыгрузки) Экспорт + + ПараметрыМетода = Новый Массив; + ПараметрыМетода.Добавить(ПараметрыВыгрузки); + ПараметрыМетода.Добавить(Неопределено); + + ПараметрыЗадания = Новый Структура; + ПараметрыЗадания.Вставить("ИмяМетода", РезервноеКопированиеОбластейДанныхПовтИсп.ИмяМетодаФоновогоРезервногоКопирования()); + ПараметрыЗадания.Вставить("Ключ", "" + ПараметрыВыгрузки.ИДКопии); + + // Поиск активных заданий с тем же ключом. + АктивныеЗадания = ОчередьЗаданий.ПолучитьЗадание(ПараметрыЗадания, ПараметрыВыгрузки.ОбластьДанных); // Возвращает массив ИД заданий или один ИД. + + Если АктивныеЗадания = Неопределено Тогда + ПараметрыЗадания.Вставить("Использование", Истина); + ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода); + ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", ПараметрыВыгрузки.МоментЗапуска); + + ОчередьЗаданий.ДобавитьЗадание(ПараметрыЗадания, ПараметрыВыгрузки.ОбластьДанных); + Иначе + ПараметрыЗадания.Вставить("СостояниеЗадания", Перечисления.СостоянияЗаданий.Запланировано); + АктивныеЗадания = ОчередьЗаданий.ПолучитьЗадание(ПараметрыЗадания, ПараметрыВыгрузки.ОбластьДанных); + Если АктивныеЗадания = Неопределено Тогда // Нет запланированных. + Возврат; + КонецЕсли; + ПараметрыЗадания.Удалить("СостояниеЗадания"); + + Если ТипЗнч(АктивныеЗадания) = Тип("Массив") Тогда + Задание = АктивныеЗадания[0]; + Иначе + Задание = АктивныеЗадания; + КонецЕсли; + + ПараметрыЗадания.Вставить("Использование", Истина); + ПараметрыЗадания.Вставить("Параметры", ПараметрыМетода); + ПараметрыЗадания.Вставить("ЗапланированныйМоментЗапуска", ПараметрыВыгрузки.МоментЗапуска); + + ОчередьЗаданий.ИзменитьЗадание(Задание, ПараметрыЗадания, ПараметрыВыгрузки.ОбластьДанных); + КонецЕсли; + +КонецПроцедуры + +// Создает файл выгрузки заданной области и помещает его в хранилище Менеджера сервиса. +// +// Параметры: +// ПараметрыВыгрузки - Структура: +// - ОбластьДанных - Число. +// - ИДКопии - УникальныйИдентификатор; Неопределено. +// - МоментЗапуска - Дата - момент запуска архивирования области. +// - Принудительно - Булево - Флаг из МС: необходимость создавать копию вне зависимости от активности пользователей. +// - ПоТребованию - Булево - флаг интерактивного запуска архивирования. Если из МС - всегда Ложь. +// - ИДФайла - УникальныйИдентификатор - ИД файла выгрузки в хранилище МС. +// - НомерПопытки - Число - Счетчик попыток. Начальное значение: 1. +// +Процедура ВыгрузитьОбластьВХранилищеМС(Знач ПараметрыВыгрузки, АдресХранилища = Неопределено) Экспорт + + Если НЕ Пользователи.ЭтоПолноправныйПользователь() Тогда + ВызватьИсключение(НСтр("ru = 'Нарушение прав доступа'")); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Если Не ТребуетсяВыгрузка(ПараметрыВыгрузки) Тогда + ОтправитьСообщениеАрхивацияОбластиПропущена(ПараметрыВыгрузки); + Возврат; + КонецЕсли; + + ИмяАрхива = Неопределено; + + НачатьТранзакцию(); + Попытка + РаботаВМоделиСервиса.ЗаблокироватьТекущуюОбластьДанных(, Истина); + ИмяАрхива = ВыгрузкаЗагрузкаДанных.ВыгрузитьТекущуюОбластьВАрхив(); + ИДФайла = РаботаВМоделиСервиса.ПоместитьФайлВХранилищеМенеджераСервиса(Новый Файл(ИмяАрхива)); + ПараметрыВыгрузки.Вставить("ИДФайла", ИДФайла); + ОтправитьСообщениеРезервнаяКопияОбластиСоздана(ПараметрыВыгрузки); + Если ЗначениеЗаполнено(АдресХранилища) Тогда + ПоместитьВоВременноеХранилище(ИДФайла, АдресХранилища); + КонецЕсли; + УстановитьФлагАктивностиВОбласти(ПараметрыВыгрузки.ОбластьДанных, Ложь); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Создание резервной копии области данных'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + Если ИмяАрхива <> Неопределено И НайтиФайлы(ИмяАрхива).Количество() > 0 Тогда + Попытка + УдалитьФайлы(ИмяАрхива); + Исключение + КонецПопытки; + КонецЕсли; + Если ПараметрыВыгрузки.ПоТребованию Тогда + ВызватьИсключение; + Иначе + Если ПараметрыВыгрузки.НомерПопытки > 3 Тогда + ОтправитьСообщениеОшибкаАрхивацииОбласти(ПараметрыВыгрузки); + Иначе + // Перепланировать: текущее время области + 10 минут. + ПараметрыВыгрузки.НомерПопытки = ПараметрыВыгрузки.НомерПопытки + 1; + МоментПовторногоЗапуска = ТекущаяДатаОбласти(ПараметрыВыгрузки.ОбластьДанных); // Сейчас в области. + МоментПовторногоЗапуска = МоментПовторногоЗапуска + 10 * 60; // На 10 минут позже. + ПараметрыВыгрузки.Вставить("МоментЗапуска", МоментПовторногоЗапуска); + ЗапланироватьАрхивациюВОчереди(ПараметрыВыгрузки); + КонецЕсли; + КонецЕсли; + КонецПопытки; + +КонецПроцедуры + +Функция ТекущаяДатаОбласти(Знач ОбластьДанных) + + ЧасовойПояс = ПолучитьЧасовойПоясОбластиДанных(ОбластьДанных); + Возврат МестноеВремя(ТекущаяУниверсальнаяДата(), ЧасовойПояс); + +КонецФункции + +Функция ТребуетсяВыгрузка(Знач ПараметрыВыгрузки) + + Результат = ПараметрыВыгрузки.Принудительно; + + Если Не Результат Тогда + МенеджерЗаписи = РегистрыСведений.ОбластиКРезервномуКопированию.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.ОбластьДанных = ПараметрыВыгрузки.ОбластьДанных; + МенеджерЗаписи.Прочитать(); + Результат = МенеджерЗаписи.Выбран(); + КонецЕсли; + + Возврат Результат; + +КонецФункции + +// Создает незаполненную структуру нужного формата. +// +// Возвращаемое значение: +// Структура: +// - ОбластьДанных - Число. +// - ИДКопии - УникальныйИдентификатор; Неопределено. +// - МоментЗапуска - Дата - момент запуска архивирования области. +// - Принудительно - Булево - Флаг из МС: необходимость создавать копию вне зависимости от активности пользователей. +// - ПоТребованию - Булево - флаг интерактивного запуска архивирования. Если из МС - всегда Ложь. +// - ИДФайла - УникальныйИдентификатор - ИД файла выгрузки в хранилище МС. +// - НомерПопытки - Число - Счетчик попыток. Начальное значение: 1. +// +Функция СоздатьПустыеПараметрыВыгрузки() Экспорт + + ПараметрыВыгрузки = Новый Структура; + ПараметрыВыгрузки.Вставить("ОбластьДанных"); + ПараметрыВыгрузки.Вставить("ИДКопии"); + ПараметрыВыгрузки.Вставить("МоментЗапуска"); + ПараметрыВыгрузки.Вставить("Принудительно"); + ПараметрыВыгрузки.Вставить("ПоТребованию"); + ПараметрыВыгрузки.Вставить("ИДФайла"); + ПараметрыВыгрузки.Вставить("НомерПопытки", 1); + Возврат ПараметрыВыгрузки; + +КонецФункции + +Процедура ОтменитьСозданиеРезервнойКопииОбласти(Знач ПараметрыОтмены) Экспорт + + Если Не Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + ВызватьИсключение(НСтр("ru = 'Не достаточно прав для выполнения операции'")); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + ИмяМетода = РезервноеКопированиеОбластейДанныхПовтИсп.ИмяМетодаФоновогоРезервногоКопирования(); + + Отбор = Новый Структура("ИмяМетода, Ключ", ИмяМетода, "" + ПараметрыОтмены.ИДКопии); + Задания = ОчередьЗаданий.ПолучитьЗадание(Отбор, ПараметрыОтмены.ОбластьДанных); + + Если ТипЗнч(Задания) = Тип("Строка") Тогда + ОчередьЗаданий.УдалитьЗадание(Задания, ПараметрыОтмены.ОбластьДанных); + ИначеЕсли ТипЗнч(Задания) = Тип("Массив") Тогда + Для Каждого Задание Из Задания Цикл + ОчередьЗаданий.УдалитьЗадание(Задание, ПараметрыОтмены.ОбластьДанных); + КонецЦикла; + КонецЕсли; + + // Отменить активные фоновые задания. + Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор); + Попытка + Для Каждого Задание Из Задания Цикл + Задание.Отменить(); + КонецЦикла; + ФоновыеЗадания.ОжидатьЗавершения(Задания, 3); + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Отмена архивации области данных.'"), + УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + КонецПопытки; + +КонецПроцедуры + +// Возвращает часовой пояс заданной области. +// +// Параметры: +// ОбластьДанных - Число. +// +// Возвращаемое значение: +// Строка; Неопределено - Часовой пояс области. +// +Функция ПолучитьЧасовойПоясОбластиДанных(Знач ОбластьДанных) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ОбластиДанных.ЧасовойПояс + |ИЗ + | РегистрСведений.ОбластиДанных КАК ОбластиДанных + |ГДЕ + | ОбластиДанных.ОбластьДанных = &ОбластьДанных"; + Запрос.УстановитьПараметр("ОбластьДанных", ОбластьДанных); + Результат = Запрос.Выполнить(); + + Если Результат.Пустой() Тогда + ЧасовойПояс = ""; + Иначе + ЧасовойПояс = Результат.Выгрузить().Получить(0).ЧасовойПояс; + КонецЕсли; + + Если ЗначениеЗаполнено(ЧасовойПояс) Тогда + Возврат ЧасовойПояс; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с настройками резервного копирования + +// Возвращает структуру настроек резервного копирования области данных. +// +// Параметры: +// ОбластьДанных - Число; Неопределено - Если Неопределено, возвращаются системные настройки. +// +// Возвращаемое значение: +// Структура - структура настроек. +// См. РезервноеКопированиеОбластейДанныхПовтИсп.СоответствиеРусскихИменПолейНастроекАнглийским(). +// +Функция ПолучитьНастройкиРезервногоКопированияОбласти(Знач ОбластьДанных = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Прокси = РезервноеКопированиеОбластейДанныхПовтИсп.ПроксиКонтроляРезервногоКопирования(); + + НастройкиXDTO = Неопределено; + СообщениеОбОшибке = Неопределено; + Если ОбластьДанных = Неопределено тогда + ОперацияВыполнена = Прокси.GetDefaultSettings(НастройкиXDTO, СообщениеОбОшибке); + Иначе + ОперацияВыполнена = Прокси.GetSettings(ОбластьДанных, НастройкиXDTO, СообщениеОбОшибке); + КонецЕсли; + + Если НЕ ОперацияВыполнена Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при получении настроек резервного копирования: + |%1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СообщениеОбОшибке); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + + Возврат НастройкиXDTOВСтруктуру(НастройкиXDTO); + +КонецФункции + +// Записывает настройки резервного копирования области данных в хранилище менеджера сервиса. +// +// Параметры: +// ОбластьДанных - Число. +// НастройкиРезервногоКопирования - Структура. +// +// Возвращаемое значение: +// Булево - успешность записи. +// +Процедура УстановитьНастройкиРезервногоКопированияОбласти(Знач ОбластьДанных, Знач НастройкиРезервногоКопирования) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Прокси = РезервноеКопированиеОбластейДанныхПовтИсп.ПроксиКонтроляРезервногоКопирования(); + + Тип = Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/SaaS/1.0/XMLSchema/ZoneBackupControl", "Settings"); + НастройкиXDTO = Прокси.ФабрикаXDTO.Создать(Тип); + + СоответствиеИмен = РезервноеКопированиеОбластейДанныхПовтИсп.СоответствиеРусскихИменПолейНастроекАнглийским(); + Для Каждого ПараИменНастроек Из СоответствиеИмен Цикл + НастройкиXDTO[ПараИменНастроек.Ключ] = НастройкиРезервногоКопирования[ПараИменНастроек.Значение]; + КонецЦикла; + + СообщениеОбОшибке = Неопределено; + Если НЕ Прокси.SetSettings(ОбластьДанных, НастройкиXDTO, СообщениеОбОшибке) Тогда + ШаблонСообщения = НСтр("ru = 'Ошибка при сохранении настроек резервного копирования: + |%1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, СообщениеОбОшибке); + ВызватьИсключение(ТекстСообщения); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Преобразования типов + +Функция НастройкиXDTOВСтруктуру(Знач НастройкиXDTO) + + Если НастройкиXDTO = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + Результат = Новый Структура; + СоответствиеИмен = РезервноеКопированиеОбластейДанныхПовтИсп.СоответствиеРусскихИменПолейНастроекАнглийским(); + Для Каждого ПараИменНастроек Из СоответствиеИмен Цикл + Если НастройкиXDTO.Установлено(ПараИменНастроек.Ключ) Тогда + Результат.Вставить(ПараИменНастроек.Значение, НастройкиXDTO[ПараИменНастроек.Ключ]); + КонецЕсли; + КонецЦикла; + Возврат Результат; + +КонецФункции + 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 968725b10..dd58dc34a 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..8d05b3bc5 --- /dev/null +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/Module.bsl @@ -0,0 +1,184 @@ + +//////////////////////////////////////////////////////////////////////////////// +// РезервноеКопированиеОбластейДанныхПовтИсп. +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает соответствие русских названий полей программных системных настроек +// английским из XDTO-пакета ZoneBackupControl Менеджера сервиса +// (тип: {http://www.1c.ru/SaaS/1.0/XMLSchema/ZoneBackupControl}Settings). +// +// Возвращаемое значение: +// ФиксированноеСоответствие. +// +Функция СоответствиеРусскихИменПолейНастроекАнглийским() Экспорт + + Результат = Новый Соответствие; + + Результат.Вставить("CreateDailyBackup", "ФормироватьЕжедневныеКопии"); + Результат.Вставить("CreateMonthlyBackup", "ФормироватьЕжемесячныеКопии"); + Результат.Вставить("CreateYearlyBackup", "ФормироватьЕжегодныеКопии"); + Результат.Вставить("BackupCreationTime", "ВремяФормированияКопий"); + Результат.Вставить("MonthlyBackupCreationDay", "ЧислоМесяцаФормированияЕжемесячныхКопий"); + Результат.Вставить("YearlyBackupCreationMonth", "МесяцФормированияЕжегодныхКопий"); + Результат.Вставить("YearlyBackupCreationDay", "ЧислоМесяцаФормированияЕжегодныхКопий"); + Результат.Вставить("KeepDailyBackups", "КоличествоЕжедневныхКопий"); + Результат.Вставить("KeepMonthlyBackups", "КоличествоЕжемесячныхКопий"); + Результат.Вставить("KeepYearlyBackups", "КоличествоЕжегодныхКопий"); + Результат.Вставить("CreateDailyBackupOnUserWorkDaysOnly", "ФормироватьЕжедневныеКопииТолькоВДниРаботыПользователей"); + + Возврат Новый ФиксированноеСоответствие(Результат); + +КонецФункции + +// Определяет, поддерживает ли приложение функциональность резервного копирования. +// +// Возвращаемое значение: +// Булево - Истина, если приложение поддерживает функциональность резервного копирования. +// +Функция МенеджерСервисаПоддерживаетРезервноеКопирование() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ПоддерживаемыеВерсии = ОбщегоНазначения.ПолучитьВерсииИнтерфейса( + Константы.ВнутреннийАдресМенеджераСервиса.Получить(), + Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(), + Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(), + "РезервноеКопированиеОбластейДанных"); + + Возврат ПоддерживаемыеВерсии.Найти("1.0.1.1") <> Неопределено; + +КонецФункции + +// Возвращает прокси web-сервиса контроля резервного копирования. +// +// Возвращаемое значение: +// WSПрокси. +// Прокси менеджера сервиса. +// +Функция ПроксиКонтроляРезервногоКопирования() Экспорт + + АдресМенеджераСервиса = Константы.ВнутреннийАдресМенеджераСервиса.Получить(); + Если Не ЗначениеЗаполнено(АдресМенеджераСервиса) Тогда + ВызватьИсключение(НСтр("ru = 'Не установлены параметры связи с менеджером сервиса.'")); + КонецЕсли; + + АдресСервиса = АдресМенеджераСервиса + "/ws/ZoneBackupControl?wsdl"; + ИмяПользователя = Константы.ИмяСлужебногоПользователяМенеджераСервиса.Получить(); + ПарольПользователя = Константы.ПарольСлужебногоПользователяМенеджераСервиса.Получить(); + + Прокси = ОбщегоНазначения.WSПрокси(АдресСервиса, "http://www.1c.ru/SaaS/1.0/WS", + "ZoneBackupControl", , ИмяПользователя, ПарольПользователя, 10); + + Возврат Прокси; + +КонецФункции + + +//////////////////////////////////////////////////////////////////////////////// +// Обмен сообщениями + +// Возвращает URI пространство имен XDTO-пакета УправлениеРезервнымКопированиемОбластейДанных. +// +// Возвращаемое значение: +// Строка. +// +Функция ПакетУправлениеРезервнымКопированиемОбластейДанных() Экспорт + + Возврат "http://www.1c.ru/SaaS/ManageZonesBackup/1.0.2.1"; + +КонецФункции + +// Возвращает URI пространство имен XDTO-пакета КонтрольРезервногоКопированияОбластейДанных. +// +// Возвращаемое значение: +// Строка. +// +Функция ПакетКонтрольРезервногоКопированияОбластейДанных() Экспорт + + Возврат "http://www.1c.ru/SaaS/ControlZonesBackup/1.0.2.1"; + +КонецФункции + +// Возвращает тип объекта XDTO-пакета УправлениеРезервнымКопированиемОбластейДанных по его имени. +// +// Возвращаемое значение: +// ТипОбъектаXDTO. +// +Функция СообщениеПланироватьАрхивациюОбласти() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУправлениеРезервнымКопированиемОбластейДанных(), "PlanZoneBackup"); + +КонецФункции + +// Возвращает тип объекта XDTO-пакета УправлениеРезервнымКопированиемОбластейДанных по его имени. +// +// Возвращаемое значение: +// ТипОбъектаXDTO. +// +Функция СообщениеОтменитьАрхивациюОбласти() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетУправлениеРезервнымКопированиемОбластейДанных(), "CancelZoneBackup"); + +КонецФункции + +// Возвращает тип объекта XDTO-пакета КонтрольРезервногоКопированияОбластейДанных по его имени. +// +// Возвращаемое значение: +// ТипОбъектаXDTO. +// +Функция СообщениеРезервнаяКопияОбластиСоздана() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольРезервногоКопированияОбластейДанных(), "ZoneBackupSuccessfull"); + +КонецФункции + +// Возвращает тип объекта XDTO-пакета КонтрольРезервногоКопированияОбластейДанных по его имени. +// +// Возвращаемое значение: +// ТипОбъектаXDTO. +// +Функция СообщениеОшибкаАрхивацииОбласти() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольРезервногоКопированияОбластейДанных(), "ZoneBackupFailed"); + +КонецФункции + +// Возвращает тип объекта XDTO-пакета КонтрольРезервногоКопированияОбластейДанных по его имени. +// +// Возвращаемое значение: +// ТипОбъектаXDTO. +// +Функция СообщениеАрхивацияОбластиПропущена() Экспорт + + Возврат ФабрикаXDTO.Тип(ПакетКонтрольРезервногоКопированияОбластейДанных(), "ZoneBackupSkipped"); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Фоновые задания + +// Возвращает имя метода фонового задания выгрузки области в файл. +// +// Возвращаемое значение: +// Строка. +// +Функция ИмяМетодаФоновогоРезервногоКопирования() Экспорт + + Возврат "РезервноеКопированиеОбластейДанных.ВыгрузитьОбластьВХранилищеМС"; + +КонецФункции + +// Возвращает наименование фонового задания выгрузки области в файл. +// +// Возвращаемое значение: +// Строка. +// +Функция НаименованиеФоновогоРезервногоКопирования() Экспорт + + Возврат НСтр("ru = 'Резервное копирование области данных'"); + +КонецФункции diff --git a/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/РезервноеКопированиеОбластейДанныхПовтИсп.mdo b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/РезервноеКопированиеОбластейДанныхПовтИсп.mdo new file mode 100644 index 000000000..88147187e --- /dev/null +++ b/SSL/src/CommonModules/РезервноеКопированиеОбластейДанныхПовтИсп/РезервноеКопированиеОбластейДанныхПовтИсп.mdo @@ -0,0 +1,13 @@ + + + РезервноеКопированиеОбластейДанныхПовтИсп + + ru + Резервное копирование областей данных повт исп + + true + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/СоединенияИБ/Module.bsl b/SSL/src/CommonModules/СоединенияИБ/Module.bsl index 7023d59fa..28c3ec07e 100644 --- a/SSL/src/CommonModules/СоединенияИБ/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБ/Module.bsl @@ -31,7 +31,7 @@ Функция УстановитьБлокировкуСоединений(Знач ТекстСообщения = "", Знач КодРазрешения = "КодРазрешения") Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда Возврат Ложь; @@ -132,7 +132,7 @@ // Функция РазрешитьРаботуПользователей() Экспорт - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Если Не Пользователи.ЭтоПолноправныйПользователь() Тогда Возврат Ложь; @@ -274,7 +274,7 @@ Функция ПолучитьБлокировкуСеансовОбластиДанных(Знач ПоМестномуВремени = Истина) Экспорт Результат = НовыеПараметрыБлокировкиСоединений(); - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Или Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат Результат; КонецЕсли; @@ -306,6 +306,9 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + // Заполнить структуру параметров, необходимых для работы клиентского кода // данной подсистемы при запуске конфигурации, т.е. в обработчиках событий // - ПередНачаломРаботыСистемы, @@ -314,12 +317,9 @@ // Параметры: // Параметры - Структура - структура параметров запуска. // -Процедура ПроверитьБлокировкуСоединенийОбластиДанных(Параметры) Экспорт - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; +Процедура ДобавитьПараметрыРаботыКлиентскойЛогикиПриЗапуске(Параметры) Экспорт + Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(СоединенияИБ.ПараметрыБлокировкиСеансов())); УстановитьПривилегированныйРежим(Истина); Если Не УстановленаБлокировкаСоединений() Тогда Возврат; @@ -360,6 +360,16 @@ КонецПроцедуры +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(СоединенияИБ.ПараметрыБлокировкиСеансов())); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -463,7 +473,7 @@ ТекстСообщения = Сообщение + Символы.ПС + Символы.ПС; КонецЕсли; - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда ТекстСообщения = ТекстСообщения + НСтр("ru = '%1 |Для разрешения работы пользователей можно открыть приложение с параметром РазрешитьРаботуПользователей. Например: diff --git a/SSL/src/CommonModules/СоединенияИБ/СоединенияИБ.mdo b/SSL/src/CommonModules/СоединенияИБ/СоединенияИБ.mdo index c33032c24..c4ff0326c 100644 --- a/SSL/src/CommonModules/СоединенияИБ/СоединенияИБ.mdo +++ b/SSL/src/CommonModules/СоединенияИБ/СоединенияИБ.mdo @@ -6,5 +6,6 @@ Соединения ИБ true - true + true + true diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl new file mode 100644 index 000000000..75fc47f49 --- /dev/null +++ b/SSL/src/CommonModules/СоединенияИБВызовСервера/Module.bsl @@ -0,0 +1,194 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Завершение работы пользователей". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Получить параметры блокировки соединений ИБ для использования на стороне клиента. +// +// Параметры: +// ПолучитьКоличествоСеансов - Булево - если Истина, то в возвращаемой структуре +// заполняется поле КоличествоСеансов. +// +// Возвращаемое значение: +// Структура – с полями: +// Установлена - Булево - Истина, если установлена блокировка, Ложь - Иначе. +// Начало - Дата - дата начала блокировки. +// Конец - Дата - дата окончания блокировки. +// Сообщение - Строка - сообщение пользователю. +// ИнтервалОжиданияЗавершенияРаботыПользователей - Число - интервал в секундах. +// КоличествоСеансов - 0, если параметр ПолучитьКоличествоСеансов = Ложь +// ТекущаяДатаСеанса - Дата - текщая дата сеанса. +// +Функция ПараметрыБлокировкиСеансов(ПолучитьКоличествоСеансов = Ложь) Экспорт + + Возврат СоединенияИБ.ПараметрыБлокировкиСеансов(ПолучитьКоличествоСеансов); + +КонецФункции + +// Устанавливает блокировку соединений ИБ. +// Если вызывается из сеанса с установленными значениями разделителей, +// то устанавливает блокировку сеансов области данных. +// +// Параметры +// ТекстСообщения – Строка – текст, который будет частью сообщения об ошибке +// при попытке установки соединения с заблокированной +// информационной базой. +// +// КодРазрешения - Строка - строка, которая должна быть добавлена к параметру +// командной строки "/uc" или к параметру строки +// соединения "uc", чтобы установить соединение с +// информационной базой несмотря на блокировку. +// Не применимо для блокировки сеансов области данных. +// +// Возвращаемое значение: +// Булево – Истина, если блокировка установлена успешно. +// Ложь, если для выполнения блокировки недостаточно прав. +// +Функция УстановитьБлокировкуСоединений(ТекстСообщения = "", + КодРазрешения = "КодРазрешения") Экспорт + + Возврат СоединенияИБ.УстановитьБлокировкуСоединений(ТекстСообщения, КодРазрешения); + +КонецФункции + +// Установить блокировку сеансов области данных. +// +// Параметры: +// Параметры – Структура – см. НовыеПараметрыБлокировкиСоединений +// ПоМестномуВремени - Булево - время начала и окончания блокировки указаны в местном (поясном) времени сеанса. +// Если Ложь, то в универсальном времени. +// +Процедура УстановитьБлокировкуСеансовОбластиДанных(Параметры, ПоМестномуВремени = Истина) Экспорт + + СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(Параметры, ПоМестномуВремени); + +КонецПроцедуры + +// Снять блокировку информационной базы. +// +// Возвращаемое значение: +// Булево – Истина, если операция выполнена успешно. +// Ложь, если для выполнения операции недостаточно прав. +// +Функция РазрешитьРаботуПользователей() Экспорт + + Возврат СоединенияИБ.РазрешитьРаботуПользователей(); + +КонецФункции + +// Получить число активных сеансов ИБ. +// +// Параметры: +// УчитыватьКонсоль - Булево - если Ложь, то исключить сеансы консоли кластера серверов. +// сеансы консоли кластера серверов не препятствуют выполнению +// административных операций (установке монопольного режима и т.п.). +// СообщенияДляЖурналаРегистрации - СписокЗначений - пакета сообщения для журнала регистрации +// сформированных на клиенте. +// +// Возвращаемое значение: +// Число – количество активных сеансов ИБ. +// +Функция КоличествоСеансовИнформационнойБазы(УчитыватьКонсоль = Истина, + СообщенияДляЖурналаРегистрации = Неопределено) Экспорт + + Возврат СоединенияИБ.КоличествоСеансовИнформационнойБазы(УчитыватьКонсоль, СообщенияДляЖурналаРегистрации); + +КонецФункции + +// Записать в журнал регистрации список сеансов ИБ. +// +// Параметры: +// ТекстСообщения - Строка - опциональный текст с пояснениями. +// +Процедура ЗаписатьНазванияСоединенийИБ(ТекстСообщения) Экспорт + + СоединенияИБ.ЗаписатьНазванияСоединенийИБ(ТекстСообщения); + +КонецПроцедуры + +// Отключает сеанс по номеру сеанса. +// +// Параметры +// НомерСеанса - Число - номер сеанса для отключения +// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи +// +// Возвращаемое значение: +// Булево – результат отключения сеанса. +// +Функция ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке) Экспорт + + Возврат СоединенияИБ.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); + +КонецФункции + +// Отключить все активные соединения ИБ (кроме текущего сеанса). +// +// Параметры +// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ. +// +// Возвращаемое значение: +// Булево – результат отключения соединений. +// +Функция ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ) Экспорт + + Возврат СоединенияИБ.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); + +КонецФункции + +// Осуществляет попытку подключиться к кластеру серверов и получить список +// активных соединений к ИБ и использованием указанных параметров администрирования. +// +// Параметры +// ПараметрыАдминистрированияИБ – Структура – параметры администрирования ИБ +// ВыдаватьСообщения – Булево – разрешить вывод интерактивных сообщений. +// +// Возвращаемое значение: +// Булево – Истина, если проверка завершена успешно. +// +Процедура ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, + ПодробноеСообщениеОбОшибке = Ложь) Экспорт + + СоединенияИБ.ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, ПодробноеСообщениеОбОшибке); + +КонецПроцедуры + +// Установить или снять блокировку регламентных заданий. +// +// Параметры +// Значение – Булево - Истина, если устанавливать, Ложь - Иначе. +// +Процедура УстановитьБлокировкуРегламентныхЗаданий(Значение) Экспорт + + СоединенияИБ.УстановитьБлокировкуРегламентныхЗаданий(Значение); + +КонецПроцедуры + +// Получить текущее состояние блокировки регламентных заданий. +// +// Возвращаемое значение: +// Булево – Истина, если блокировка установлена. +// +Функция БлокировкаРегламентныхЗаданийУстановлена() Экспорт + + Возврат СоединенияИБ.БлокировкаРегламентныхЗаданийУстановлена(); + +КонецФункции + +// Получить информацию о блокировке сеансов области данных. +// +// Параметры: +// ПоМестномуВремени - Булево - время начала и окончания блокировки необходимо вернуть +// в местном (поясном) времени сеанса. Если Ложь, то +// возвращается в универсальном времени. +// +// Возвращаемое значение: +// Структура – см. НовыеПараметрыБлокировкиСоединений +// +Функция ПолучитьБлокировкуСеансовОбластиДанных(ПоМестномуВремени = Истина) Экспорт + + Возврат СоединенияИБ.ПолучитьБлокировкуСеансовОбластиДанных(ПоМестномуВремени); + +КонецФункции \ No newline at end of file diff --git a/SSL/src/CommonModules/СоединенияИБВызовСервера/СоединенияИБВызовСервера.mdo b/SSL/src/CommonModules/СоединенияИБВызовСервера/СоединенияИБВызовСервера.mdo new file mode 100644 index 000000000..34bc3c272 --- /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 b15395a93..2ec008c14 100644 --- a/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБГлобальный/Module.bsl @@ -12,7 +12,7 @@ Процедура КонтрольРежимаЗавершенияРаботыПользователей() Экспорт // Получим текущее значение параметров блокировки - ТекущийРежим = СоединенияИБ.ПараметрыБлокировкиСеансов(); + ТекущийРежим = СоединенияИБВызовСервера.ПараметрыБлокировкиСеансов(); БлокировкаУстановлена = ТекущийРежим.Установлена; Если НЕ БлокировкаУстановлена Тогда @@ -22,6 +22,9 @@ ВремяНачалаБлокировки = ТекущийРежим.Начало; ВремяОкончанияБлокировки = ТекущийРежим.Конец; + // ИнтервалЗакрытьБезЗапроса и ИнтервалПрекратить имеют отрицательное значение, + // по этому, когда идет сравнение этих параметров с разницей (ВремяНачалаБлокировки - ТекущийМомент), + // то используется "<=", так как данная разница постоянно уменьшается. ИнтервалПредупреждения = ТекущийРежим.ИнтервалОжиданияЗавершенияРаботыПользователей; ИнтервалЗакрытьСЗапросом = 0; ИнтервалЗакрытьБезЗапроса = - ИнтервалПредупреждения / 5; @@ -73,7 +76,7 @@ Процедура ЗавершитьРаботуПользователей() Экспорт // Получим текущее значение параметров блокировки - ТекущийРежим = СоединенияИБ.ПараметрыБлокировкиСеансов(Истина); + ТекущийРежим = СоединенияИБВызовСервера.ПараметрыБлокировкиСеансов(Истина); КоличествоСеансов = ТекущийРежим.КоличествоСеансов; Если КоличествоСеансов <= 1 Тогда @@ -81,7 +84,7 @@ // В последнюю очередь предлагаем завершить сеанс, запущенный с параметром "ЗавершитьРаботуПользователей". // Такой порядок отключений необходим для обновления конфигурации с помощью пакетного файла СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(Ложь); - Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус,КоличествоСеансов", "Готово", КоличествоСеансов)); + Оповестить("ЗавершениеРаботыПользователей", Новый Структура("Статус, КоличествоСеансов", "Готово", КоличествоСеансов)); ЗавершитьРаботуЭтогоСеанса(); Возврат; КонецЕсли; @@ -134,9 +137,15 @@ // Завершает работу (последнего) сеанса администратора, который инициировал завершение работы пользователей. // -Процедура ЗавершитьРаботуЭтогоСеанса() +Процедура ЗавершитьРаботуЭтогоСеанса(ВыводитьВопрос = Истина) Экспорт СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Ложь); + + Если Не ВыводитьВопрос Тогда + ЗавершитьРаботуСистемы(Ложь); + Возврат; + КонецЕсли; + ТекстСообщения = НСтр("ru = 'Работа пользователей с программой запрещена. Завершить работу этого сеанса?'"); Если Вопрос(ТекстСообщения, РежимДиалогаВопрос.ОКОтмена, 60) = КодВозвратаДиалога.OK Тогда СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); diff --git a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl index 24a52dd56..93d2cd05e 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиент/Module.bsl @@ -26,7 +26,7 @@ Если Ответ = КодВозвратаДиалога.Да Тогда // входим в заблокированное приложение Возврат; ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда // снимаем блокировку и входим в приложение - СоединенияИБ.УстановитьБлокировкуСеансовОбластиДанных(Новый Структура("Установлена", Ложь)); + СоединенияИБВызовСервера.УстановитьБлокировкуСеансовОбластиДанных(Новый Структура("Установлена", Ложь)); Возврат; Иначе ЗавершитьРаботуСистемы(Ложь); // выход без перезапуска @@ -44,7 +44,8 @@ // Процедура ПриНачалеРаботыСистемы() Экспорт - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если НЕ ПараметрыРаботы.ДоступноИспользованиеРазделенныхДанных Тогда Возврат; КонецЕсли; @@ -52,7 +53,7 @@ Возврат; КонецЕсли; - РежимБлокировки = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПараметрыБлокировкиСеансов; + РежимБлокировки = ПараметрыРаботы.ПараметрыБлокировкиСеансов; ТекущееВремя = РежимБлокировки.ТекущаяДатаСеанса; Если РежимБлокировки.Установлена И (НЕ ЗначениеЗаполнено(РежимБлокировки.Начало) ИЛИ ТекущееВремя >= РежимБлокировки.Начало) @@ -78,7 +79,8 @@ // Функция ОбработатьПараметрыЗапуска(Знач ЗначениеПараметраЗапуска, Знач ПараметрыЗапуска) Экспорт - Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если НЕ ПараметрыРаботы.ДоступноИспользованиеРазделенныхДанных Тогда Возврат Ложь; КонецЕсли; @@ -86,7 +88,7 @@ // ЗапретитьРаботуПользователей и РазрешитьРаботуПользователей Если ЗначениеПараметраЗапуска = Врег("РазрешитьРаботуПользователей") Тогда - Если НЕ СоединенияИБ.РазрешитьРаботуПользователей() Тогда + Если НЕ СоединенияИБВызовСервера.РазрешитьРаботуПользователей() Тогда ТекстСообщения = НСтр("ru = 'Параметр запуска РазрешитьРаботуПользователей не отработан. Нет прав на администрирование информационной базы.'"); Предупреждение(ТекстСообщения); Возврат Ложь; @@ -109,7 +111,7 @@ // должен быть отключен последним. ОтключитьОбработчикОжидания("КонтрольРежимаЗавершенияРаботыПользователей"); - Если НЕ СоединенияИБ.УстановитьБлокировкуСоединений() Тогда + Если НЕ СоединенияИБВызовСервера.УстановитьБлокировкуСоединений() Тогда ТекстСообщения = НСтр("ru = 'Параметр запуска ЗавершитьРаботуПользователей не отработан. Нет прав на администрирование информационной базы.'"); Предупреждение(ТекстСообщения); Возврат Ложь; diff --git a/SSL/src/CommonModules/СоединенияИБКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/СоединенияИБКлиентПереопределяемый/Module.bsl new file mode 100644 index 000000000..e27caea86 --- /dev/null +++ b/SSL/src/CommonModules/СоединенияИБКлиентПереопределяемый/Module.bsl @@ -0,0 +1,21 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Завершение работы пользователей" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработчик открытия формы активных пользователей для последующей установки блокировки на работу пользователей с ИБ. +// +// Параметры: +// СтандартнаяОбработка – Булево. Флаг стандартной обработки. Стандартная обработка не подразумевает никаких действий. +// Владелец – Форма. Форма, которая является владельцем по отношению к открываемой форме монитора активных пользователей. +// +Процедура ПриОткрытииФормыАктивныхПользователей(СтандартнаяОбработка, Владелец) Экспорт + + СтандартнаяОбработка = Ложь; + ОткрытьФорму("Обработка.БлокировкаРаботыПользователей.Форма",, Владелец); + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/СоединенияИБКлиентПереопределяемый/СоединенияИБКлиентПереопределяемый.mdo b/SSL/src/CommonModules/СоединенияИБКлиентПереопределяемый/СоединенияИБКлиентПереопределяемый.mdo new file mode 100644 index 000000000..36c5509c7 --- /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 47ea95c86..e6abef984 100644 --- a/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СоединенияИБКлиентСервер/Module.bsl @@ -20,21 +20,21 @@ // Функция ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке) Экспорт - Если СоединенияИБ.КоличествоСеансовИнформационнойБазы() <= 1 Тогда + Если СоединенияИБВызовСервера.КоличествоСеансовИнформационнойБазы() <= 1 Тогда Возврат Истина; // Отключены все пользователи, кроме текущего сеанса КонецЕсли; // Невозможно принудительно отсоединить сеансы в файловом режиме работы Если ИнформационнаяБазаФайловая() Тогда Сообщение = НСтр("ru = 'Невозможно принудительно завершить сеанс в файловом режиме работы'"); - СоединенияИБ.ЗаписатьНазванияСоединенийИБ(СообщениеОбОшибке); + СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ(СообщениеОбОшибке); Возврат Ложь; КонецЕсли; #Если НаКлиенте Тогда Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда // Передаем управление на Windows-сервер - Возврат СоединенияИБ.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); + Возврат СоединенияИБВызовСервера.ОтключитьСеанс(НомерСеанса, СообщениеОбОшибке); КонецЕсли; #КонецЕсли @@ -66,13 +66,13 @@ // Функция ОтключитьСоединенияИБ(Знач ПараметрыАдминистрированияИБ = Неопределено) Экспорт - Если СоединенияИБ.КоличествоСеансовИнформационнойБазы() <= 1 Тогда + Если СоединенияИБВызовСервера.КоличествоСеансовИнформационнойБазы() <= 1 Тогда Возврат Истина; // Отключены все пользователи, кроме текущего сеанса КонецЕсли; // Невозможно принудительно отсоединить сеансы в файловом режиме работы Если ИнформационнаяБазаФайловая() Тогда - СоединенияИБ.ЗаписатьНазванияСоединенийИБ(НСтр("ru = 'Невозможно принудительно завершить сеансы в файловом режиме работы'")); + СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ(НСтр("ru = 'Невозможно принудительно завершить сеансы в файловом режиме работы'")); Возврат Ложь; КонецЕсли; @@ -80,9 +80,9 @@ Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда // Передаем управление на сервер - Возврат СоединенияИБ.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); + Возврат СоединенияИБВызовСервера.ОтключитьСоединенияИБ(ПараметрыАдминистрированияИБ); КонецЕсли; - СоединенияИБ.ЗаписатьНазванияСоединенийИБ(НСтр("ru = 'Невозможно принудительно завершить сеансы при работе с клиента через веб-сервер, + СоединенияИБВызовСервера.ЗаписатьНазванияСоединенийИБ(НСтр("ru = 'Невозможно принудительно завершить сеансы при работе с клиента через веб-сервер, | если на сервере не установлена ОС Microsoft Windows'")); Возврат Ложь; КонецЕсли; @@ -108,7 +108,7 @@ #Иначе КлиентскиеСообщения = Неопределено; #КонецЕсли - Возврат СоединенияИБ.КоличествоСеансовИнформационнойБазы(КлиентскиеСообщения) <= 1; + Возврат СоединенияИБВызовСервера.КоличествоСеансовИнформационнойБазы(КлиентскиеСообщения) <= 1; Исключение ЗаписатьСобытие(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), "Ошибка"); Возврат Ложь; @@ -139,7 +139,7 @@ Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда // Передаем управление на сервер - СоединенияИБ.ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, ПодробноеСообщениеОбОшибке); + СоединенияИБВызовСервера.ПроверитьПараметрыАдминистрированияИБ(ПараметрыАдминистрированияИБ, ПодробноеСообщениеОбОшибке); КонецЕсли; // Невозможно выполнить операцию при работе с клиента через веб-сервер, // если на сервере не установлена ОС Microsoft Windows @@ -177,7 +177,7 @@ Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда // Передаем управление на сервер - СоединенияИБ.УстановитьБлокировкуРегламентныхЗаданий(Значение); + СоединенияИБВызовСервера.УстановитьБлокировкуРегламентныхЗаданий(Значение); КонецЕсли; ВызватьИсключение НСтр("ru = 'Невозможно установить блокировку регламентных и фоновых заданий при работе с клиента через веб-сервер, | если на сервере не установлена ОС Microsoft Windows'"); @@ -205,7 +205,7 @@ Если ОбщегоНазначенияКлиент.КлиентПодключенЧерезВебСервер() Тогда Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда // Передаем управление на сервер - Возврат СоединенияИБ.БлокировкаРегламентныхЗаданийУстановлена(); + Возврат СоединенияИБВызовСервера.БлокировкаРегламентныхЗаданийУстановлена(); КонецЕсли; Возврат Ложь; КонецЕсли; diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl new file mode 100644 index 000000000..dff3f07ba --- /dev/null +++ b/SSL/src/CommonModules/СообщенияВМоделиСервиса/Module.bsl @@ -0,0 +1,416 @@ + +// Возвращает новое сообщение. +// +// Параметры: +// ТипТелаСообщения - ТипОбъектаXDTO - тип тела сообщения которое требуется создать +// +// Возвращаемое значение: +// ОбъектXDTO - объект требуемого типа +Функция НовоеСообщение(Знач ТипТелаСообщения) Экспорт + + Сообщение = ФабрикаXDTO.Создать(СообщенияВМоделиСервисаПовтИсп.ТипСообщение()); + + Сообщение.Header = ФабрикаXDTO.Создать(СообщенияВМоделиСервисаПовтИсп.ТипЗаголовокСообщения()); + Сообщение.Header.Id = Новый УникальныйИдентификатор; + Сообщение.Header.Created = ТекущаяУниверсальнаяДата(); + + Сообщение.Body = ФабрикаXDTO.Создать(ТипТелаСообщения); + + Возврат Сообщение; + +КонецФункции + +// Отправвляет сообщени +// +// Параметры: +// Сообщение - ОбъектXDTO - сообщение +// Получатель - ПланОбменаСсылка.ОбменСообщениями - получатель сообщения +// Сейчас - Булево - отправить сообщений через механизм быстрых сообщений +// +Процедура ОтправитьСообщение(Знач Сообщение, Знач Получатель = Неопределено, Знач Сейчас = Ложь) Экспорт + + Сообщение.Header.Sender = ОписаниеУзлаОбменаСообщениями(ПланыОбмена.ОбменСообщениями.ЭтотУзел()); + + Если ЗначениеЗаполнено(Получатель) Тогда + Сообщение.Header.Recipient = ОписаниеУзлаОбменаСообщениями(Получатель); + КонецЕсли; + + НетипизированноеТело = ЗаписатьСообщениеВНетипизированноеТело(Сообщение); + + КаналСообщений = ИмяКаналаПоТипуСообщения(Сообщение.Body.Тип()); + + Если Сейчас Тогда + ОбменСообщениями.ОтправитьСообщениеСейчас(КаналСообщений, НетипизированноеТело, Получатель); + Иначе + ОбменСообщениями.ОтправитьСообщение(КаналСообщений, НетипизированноеТело, Получатель); + КонецЕсли; + +КонецПроцедуры + +// Получает список обработчиков сообщений по пространству имен +// +// Параметры: +// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений +// ПространствоИмен - Строка - uri пространства имен в котором определены типы тел сообщений +// ОбщийМодуль - общий модуль в котором содержаться обработчики сообщений +// +Процедура ПолучитьОбработчикиКаналовСообщений(Знач Обработчики, Знач ПространствоИмен, Знач ОбщийМодуль) Экспорт + + ИменаКаналов = СообщенияВМоделиСервисаПовтИсп.ПолучитьКаналыПакета(ПространствоИмен); + + Для каждого ИмяКанала Из ИменаКаналов Цикл + Обработчик = Обработчики.Добавить(); + Обработчик.Канал = ИмяКанала; + Обработчик.Обработчик = ОбщийМодуль; + КонецЦикла; + +КонецПроцедуры + +// Возвращает имя канала сообщений соответствующего типу сообщения. +// +// Параметры: +// ТипСообщения - ТипОбъектаXDTO - тип сообщения удаленного администрирования +// +// Возвращаемое значение: +// Строка - имя канала сообщений соответствующее переданному типу сообщения +// +Функция ИмяКаналаПоТипуСообщения(Знач ТипСообщения) Экспорт + + Возврат СериализаторXDTO.XMLСтрока(Новый РасширенноеИмяXML(ТипСообщения.URIПространстваИмен, ТипСообщения.Имя)); + +КонецФункции + +// Возвращает тип сообщений удаленного администрирования по +// имени канала сообщений +// +// Параметры: +// ИмяКанала - Строка - имя канала сообщений соответствующее переданному типу сообщения +// +// Возвращаемое значение: +// ТипОбъектаXDTO - тип сообщения удаленного администрирования +// +Функция ТипСообщенияПоИмениКанала(Знач ИмяКанала) Экспорт + + Возврат ФабрикаXDTO.Тип(СериализаторXDTO.XMLЗначение(Тип("РасширенноеИмяXML"), ИмяКанала)); + +КонецФункции + +// Вызывает исключение при получении сообщения в неизвестный канал. +// +// Параметры: +// КаналСообщений - Строка - имя неизвестного канала сообщений. +// +Процедура ОшибкаНеизвестноеИмяКанала(Знач КаналСообщений) Экспорт + + ШаблонСообщения = НСтр("ru = 'Неизвестное имя канала сообщений %1'"); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КаналСообщений); + ВызватьИсключение(ТекстСообщения); + +КонецПроцедуры + +// Читает сообщение из нетипизированного тела сообщения +// +// Параметры: +// НетипизированноеТело - Строка - нетипизированное тело сообщения +// +// Возвращаемое значение: +// {http://www.1c.ru/SaaS/Messages}Message - сообщение +// +Функция ПрочитатьСообщениеИзНетипизированногоТела(Знач НетипизированноеТело) Экспорт + + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(НетипизированноеТело); + + Сообщение = ФабрикаXDTO.ПрочитатьXML(Чтение, СообщенияВМоделиСервисаПовтИсп.ТипСообщение()); + + Чтение.Закрыть(); + + Возврат Сообщение; + +КонецФункции + +// Записывает сообщение в нетипизированное тело сообщения +// +// Параметры: +// Сообщение - {http://www.1c.ru/SaaS/Messages}Message - сообщение +// +// Возвращаемое значение: +// Строка - нетипизированное тело сообщения +// +Функция ЗаписатьСообщениеВНетипизированноеТело(Знач Сообщение) Экспорт + + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + ФабрикаXDTO.ЗаписатьXML(Запись, Сообщение, , , , НазначениеТипаXML.Явное); + + Возврат Запись.Закрыть(); + +КонецФункции + +// Обработчик события при отправке сообщения. +// Обработчик данного события вызывается перед помещением сообщения в XML-поток. +// Обработчик вызывается для каждого отправляемого сообщения. +// +// Параметры: +// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, в который отправляется сообщение. +// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело отправляемого сообщения. +// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// +Процедура ПриОтправкеСообщения(КаналСообщений, ТелоСообщения) Экспорт + + Сообщение = Неопределено; + Если ТелоСодержитТипизированноеСообщение(ТелоСообщения, Сообщение) Тогда + + Сообщение.Header.Sent = ТекущаяУниверсальнаяДата(); + + Если СообщенияВМоделиСервисаПовтИсп.ТипАутентифицированноеТелоОбласти().ЭтоПотомок(Сообщение.Body.Тип()) Тогда + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Сообщение.Body.Zone); + Сообщение.Body.ZoneKey = Константы.КлючОбластиДанных.Получить(); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + + КонецЕсли; + + ТелоСообщения = ЗаписатьСообщениеВНетипизированноеТело(Сообщение); + + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Отправка'"), + УровеньЖурналаРегистрации.Информация, + , + , + ПредставлениеСообщенияДляЖурнала(Сообщение)); + КонецЕсли; + +КонецПроцедуры + +// Обработчик события при получении сообщения. +// Обработчик данного события вызывается при получении сообщения из XML-потока. +// Обработчик вызывается для каждого получаемого сообщения. +// +// Параметры: +// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело полученного сообщения. +// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// +Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения) Экспорт + + // Обработка ZoneKey + Если КаналСообщений = ИмяКаналаПоТипуСообщения( + РаботаВМоделиСервисаПовтИсп.СообщениеУстановитьПараметрыОбластиДанных()) Тогда + + Сообщение = ПрочитатьСообщениеИзНетипизированногоТела(ТелоСообщения); + + Если Сообщение.Body.Установлено("ZoneKey") Тогда + + УстановитьПривилегированныйРежим(Истина); + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Сообщение.Body.Zone); + Константы.КлючОбластиДанных.Установить(Сообщение.Body.ZoneKey); + ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); + + Сообщение.Body.Сбросить("ZoneKey"); + ТелоСообщения = ЗаписатьСообщениеВНетипизированноеТело(Сообщение); + + КонецЕсли; + + КонецЕсли; + + Сообщение = Неопределено; + Если ТелоСодержитТипизированноеСообщение(ТелоСообщения, Сообщение) Тогда + + Сообщение.Header.Delivered = ТекущаяУниверсальнаяДата(); + + ТелоСообщения = ЗаписатьСообщениеВНетипизированноеТело(Сообщение); + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Получение'"), + УровеньЖурналаРегистрации.Информация, + , + , + ПредставлениеСообщенияДляЖурнала(Сообщение)); + КонецЕсли; + +КонецПроцедуры + +// Записывает в журнал регистрации событие начала обработки сообщения +// +// Параметры: +// Сообщение - {http://www.1c.ru/SaaS/Messages}Message - сообщение +// +Процедура ЗаписатьСобытиеНачалоОбработки(Знач Сообщение) Экспорт + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Начало обработки'"), + УровеньЖурналаРегистрации.Информация, + , + , + ПредставлениеСообщенияДляЖурнала(Сообщение)); + +КонецПроцедуры + +// Записывает в журнал регистрации событие окончания обработки сообщения +// +// Параметры: +// Сообщение - {http://www.1c.ru/SaaS/Messages}Message - сообщение +// +Процедура ЗаписатьСобытиеОкончаниеОбработки(Знач Сообщение) Экспорт + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Окончание обработки'"), + УровеньЖурналаРегистрации.Информация, + , + , + ПредставлениеСообщенияДляЖурнала(Сообщение)); + +КонецПроцедуры + +// Обработчик события перед отпрвкой сообщения. +// Обработчик данного события вызывается перед запись сообщения для последующей отправки +// Обработчик вызывается для каждого отправляемого сообщения. +// +// Параметры: +// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело записываемого сообщения. +// +Процедура ПередОтправкойСообщения(Знач КаналСообщений, Знач ТелоСообщения) Экспорт + + Если НЕ ОбщегоНазначения.ИспользованиеРазделителяСеанса() Тогда + Возврат; + КонецЕсли; + + Сообщение = Неопределено; + Если ТелоСодержитТипизированноеСообщение(ТелоСообщения, Сообщение) Тогда + Если СообщенияВМоделиСервисаПовтИсп.ТипТелоОбласти().ЭтоПотомок(Сообщение.Body.Тип()) Тогда + Если ОбщегоНазначения.ЗначениеРазделителяСеанса() <> Сообщение.Body.Zone Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Сообщения в модели сервиса. Отправка сообщения'"), + УровеньЖурналаРегистрации.Ошибка, + , + , + ПредставлениеСообщенияДляЖурнала(Сообщение)); + + ШаблонОшибки = НСтр("ru = 'Ошибка при отправке сообщения. Область данных %1 не совпадает с текущей (%2).'"); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонОшибки, + Сообщение.Body.Zone, ОбщегоНазначения.ЗначениеРазделителяСеанса()); + + ВызватьИсключение(ТекстОшибки); + КонецЕсли; + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Выполняет доставку быстрых сообщений. +// +Процедура ДоставитьБыстрыеСообщения() Экспорт + + Если ТранзакцияАктивна() Тогда + ВызватьИсключение(НСтр("ru = 'Доставка быстрых сообщений невозможна в транзакции'")); + КонецЕсли; + + ИмяМетодаЗадания = "ОбменСообщениями.ДоставитьСообщения"; + КлючЗадания = 1; + + УстановитьПривилегированныйРежим(Истина); + + ОтборЗаданий = Новый Структура; + ОтборЗаданий.Вставить("ИмяМетода", ИмяМетодаЗадания); + ОтборЗаданий.Вставить("Ключ", КлючЗадания); + ОтборЗаданий.Вставить("Состояние", СостояниеФоновогоЗадания.Активно); + + НомерПопытки = 0; + КоличествоПопыток = 2; + + Пока НомерПопытки < КоличествоПопыток Цикл + + НомерПопытки = НомерПопытки + 1; + + Задания = ФоновыеЗадания.ПолучитьФоновыеЗадания(ОтборЗаданий); + Если Задания.Количество() > 0 Тогда + Попытка + Задания[0].ОжидатьЗавершения(3); + Исключение + + Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задания[0].УникальныйИдентификатор); + Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно + И Задание.ИнформацияОбОшибке <> Неопределено Тогда + + ВызватьИсключение(ПодробноеПредставлениеОшибки(Задание.ИнформацияОбОшибке)); + КонецЕсли; + + Возврат; + КонецПопытки; + КонецЕсли; + + Попытка + ФоновыеЗадания.Выполнить(ИмяМетодаЗадания, , КлючЗадания, НСтр("ru = 'Доставка быстрых сообщений'")) + Исключение + // Дополнительная обработка исключения не требуется + // ожидаемое исключение - дублирвоание задание с таким же ключом + Возврат; + КонецПопытки; + КонецЦикла; + +КонецПроцедуры + +Функция ОписаниеУзлаОбменаСообщениями(Знач Узел) + + Реквизиты = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + Узел, + Новый Структура("Код, Наименование")); + + Описание = ФабрикаXDTO.Создать(СообщенияВМоделиСервисаПовтИсп.ТипУзелОбменаСообщениями()); + Описание.Code = Реквизиты.Код; + Описание.Presentation = Реквизиты.Наименование; + + Возврат Описание; + +КонецФункции + +Функция ТелоСодержитТипизированноеСообщение(Знач НетипизированноеТело, Сообщение) + + Если ТипЗнч(НетипизированноеТело) <> Тип("Строка") Тогда + Возврат Ложь; + КонецЕсли; + + Если Лев(НетипизированноеТело, 1) <> "<" ИЛИ Прав(НетипизированноеТело, 1) <> ">" Тогда + Возврат Ложь; + КонецЕсли; + + Попытка + Чтение = Новый ЧтениеXML; + Чтение.УстановитьСтроку(НетипизированноеТело); + + Сообщение = ФабрикаXDTO.ПрочитатьXML(Чтение); + + Чтение.Закрыть(); + + Исключение + Возврат Ложь; + КонецПопытки; + + Возврат Сообщение.Тип() = СообщенияВМоделиСервисаПовтИсп.ТипСообщение(); + +КонецФункции + +Функция ПредставлениеСообщенияДляЖурнала(Знач Сообщение) + + Шаблон = НСтр("ru = 'Канал: %1'"); + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, + ИмяКаналаПоТипуСообщения(Сообщение.Body.Тип())); + + Запись = Новый ЗаписьXML; + Запись.УстановитьСтроку(); + ФабрикаXDTO.ЗаписатьXML(Запись, Сообщение.Header, , , , НазначениеТипаXML.Явное); + + Шаблон = НСтр("ru = 'Заголовок: + |%1'"); + Представление = Представление + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, + Запись.Закрыть()); + + Если СообщенияВМоделиСервисаПовтИсп.ТипТелоОбласти().ЭтоПотомок(Сообщение.Body.Тип()) Тогда + Шаблон = НСтр("ru = 'Область данных: %1'"); + Представление = Представление + Символы.ПС + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, + Сообщение.Body.Zone); + КонецЕсли; + + Возврат Представление; + +КонецФункции + diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервиса/СообщенияВМоделиСервиса.mdo b/SSL/src/CommonModules/СообщенияВМоделиСервиса/СообщенияВМоделиСервиса.mdo new file mode 100644 index 000000000..a2db7138c --- /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..321a59f00 --- /dev/null +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/Module.bsl @@ -0,0 +1,140 @@ + +// Возвращает XDTO тип - сообщение +// +// Возвращаемое значение: +// ТипОбъектаXDTO - тип сообщения +// +Функция ТипСообщение() Экспорт + + Возврат ФабрикаXDTO.Тип(СообщенияВМоделиСервисаПовтИсп.ПакетСообщения(), "Message"); + +КонецФункции + +// Возвращает тип, являющийся базовым для всех типов тел сообщений +// в модели сервиса +// +// Возвращаемое значение: +// ТипОбъектаXDTO - базовый тип тел сообщений в модели сервиса +// +Функция ТипТело() Экспорт + + Возврат ФабрикаXDTO.Тип(СообщенияВМоделиСервисаПовтИсп.ПакетСообщения(), "Body"); + +КонецФункции + +// Возвращает тип, являющийся базовым для всех типов тел сообщений, +// относящихся к областям данных в модели сервиса +// +// Возвращаемое значение: +// ТипОбъектаXDTO - базовый тип тел сообщений областей данных в модели сервиса +// +Функция ТипТелоОбласти() Экспорт + + Возврат ФабрикаXDTO.Тип(СообщенияВМоделиСервисаПовтИсп.ПакетСообщения(), "ZoneBody"); + +КонецФункции + +// Возвращает тип, являющийся базовым для всех типов тел сообщений, +// отправляемых из областей данных с аутентификацией области в модели сервиса +// +// Возвращаемое значение: +// ТипОбъектаXDTO - базовый тип тел сообщений областей данных с аутентфикацией +// в модели сервиса +// +Функция ТипАутентифицированноеТелоОбласти() Экспорт + + Возврат ФабрикаXDTO.Тип(СообщенияВМоделиСервисаПовтИсп.ПакетСообщения(), "AuthenticatedZoneBody"); + +КонецФункции + +// Возвращает тип - заголовок сообщения +// +// Возвращаемое значение: +// ТипОбъектаXDTO - тип заголовок сообщения в модели сервиса +// +Функция ТипЗаголовокСообщения() Экспорт + + Возврат ФабрикаXDTO.Тип(СообщенияВМоделиСервисаПовтИсп.ПакетСообщения(), "Header"); + +КонецФункции + +// Возвращает тип - узел обмена сообщениями в модели сервиса +// +// Возвращаемое значение: +// ТипОбъектаXDTO - тип узел обмена сообщениями в модели сервиса +// +Функция ТипУзелОбменаСообщениями() Экспорт + + Возврат ФабрикаXDTO.Тип(СообщенияВМоделиСервисаПовтИсп.ПакетСообщения(), "Node"); + +КонецФункции + +// Возвращает типы объектов XDTO содержащихся в заданном +// пакете, являющиеся типа сообщений удаленного администрирования +// +// Параметры: +// URIПакета - Строка - URI пакета XDTO, типы сообщений из которого +// требуется получить +// +// Возвращаемое значение: +// ФиксированныйМассив(ТипОбъектаXDTO) - типы сообщений найденные в пакете +// +Функция ПолучитьТипыСообщенийПакета(Знач URIПакета) Экспорт + + Результат = Новый Массив; + + МоделиПакетов = ФабрикаXDTO.ЭкспортМоделиXDTO(URIПакета); + + БазовыйТип = СообщенияВМоделиСервисаПовтИсп.ТипТело(); + + Для каждого МодельПакета Из МоделиПакетов.package Цикл + Для каждого МодельОбъектногоТипа из МодельПакета.objectType Цикл + ТипОбъекта = ФабрикаXDTO.Тип(URIПакета, МодельОбъектногоТипа.name); + Если НЕ ТипОбъекта.Абстрактный + И БазовыйТип.ЭтоПотомок(ТипОбъекта) Тогда + + Результат.Добавить(ТипОбъекта); + КонецЕсли; + КонецЦикла; + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + +// Возвращает имена каналов сообщений из заданного пакета +// +// Параметры: +// URIПакета - Строка - URI пакета XDTO, типы сообщений из которого +// требуется получить +// +// Возвращаемое значение: +// ФиксированныйМассив(Строка) - имена каналов найденные в пакете +// +Функция ПолучитьКаналыПакета(Знач URIПакета) Экспорт + + Результат = Новый Массив; + + ТипыСообщенийПакета = + СообщенияВМоделиСервисаПовтИсп.ПолучитьТипыСообщенийПакета(URIПакета); + + Для каждого ТипСообщения Из ТипыСообщенийПакета Цикл + Результат.Добавить(СообщенияВМоделиСервиса.ИмяКаналаПоТипуСообщения(ТипСообщения)); + КонецЦикла; + + Возврат Новый ФиксированныйМассив(Результат); + +КонецФункции + + +// Возвращает uri пакета сообщений с базовыми типами +// +// Возвращаемое значение: +// Строка. +// +Функция ПакетСообщения() Экспорт + + Возврат "http://www.1c.ru/SaaS/Messages"; + +КонецФункции + diff --git a/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/СообщенияВМоделиСервисаПовтИсп.mdo b/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/СообщенияВМоделиСервисаПовтИсп.mdo new file mode 100644 index 000000000..521e6094b --- /dev/null +++ b/SSL/src/CommonModules/СообщенияВМоделиСервисаПовтИсп/СообщенияВМоделиСервисаПовтИсп.mdo @@ -0,0 +1,12 @@ + + + СообщенияВМоделиСервисаПовтИсп + + ru + Сообщения в модели сервиса повт исп + + true + true + true + DuringSession + diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/Module.bsl b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/Module.bsl deleted file mode 100644 index 5cc722d9d..000000000 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/Module.bsl +++ /dev/null @@ -1,110 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -// СообщенияУдаленногоАдминистрирования. -// -/////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Возвращает новое сообщение удаленного администрирования для отправки в менеджер сервиса. -// -// Параметры: -// ТипСообщения - ТипОбъектаXDTO - тип сообщения которое требуется создать -// -// Возвращаемое значение: -// ОбъектXDTO - объект требуемого типа -Функция НовоеСообщение(Знач ТипСообщения) Экспорт - - Возврат ФабрикаXDTO.Создать(ТипСообщения); - -КонецФункции - -// Отправвляет сообщение удаленного администрирования -// -// Параметры: -// Содержимое - ОбъектXDTO - содержимое сообщения -// Получатель - ПланОбменаСсылка.ОбменСообщениями - получатель сообщения -// Сейчас - Булево - отправить сообщений через механизм быстрых сообщений -// -Процедура ОтправитьСообщение(Знач Содержимое, Знач Получатель = Неопределено, Знач Сейчас = Ложь) Экспорт - - Запись = Новый ЗаписьXML; - Запись.УстановитьСтроку(); - - ФабрикаXDTO.ЗаписатьXML(Запись, Содержимое, , , , НазначениеТипаXML.Явное); - - КаналСообщений = ИмяКаналаПоТипуСообщения(Содержимое.Тип()); - - Если Сейчас Тогда - ОбменСообщениями.ОтправитьСообщениеСейчас(КаналСообщений, Запись.Закрыть(), Получатель); - Иначе - ОбменСообщениями.ОтправитьСообщение(КаналСообщений, Запись.Закрыть(), Получатель); - КонецЕсли; - -КонецПроцедуры - -// Получате содержимое сообщения удаленного администрирования из тела -// сообщения -// -// Параметры: -// ТелоСообщения - ХранилищеЗначения - тело сообщения -// -// Возвращаемое значение: -// ОбъектXDTO - содержимое сообщения удаленного администрирования -// полученное из тело сообщения -// -Функция ПолучитьСодержимоеСообщения(Знач ТелоСообщения) Экспорт - - Чтение = Новый ЧтениеXML; - Чтение.УстановитьСтроку(ТелоСообщения); - - Содержимое = ФабрикаXDTO.ПрочитатьXML(Чтение); - - Чтение.Закрыть(); - - Возврат Содержимое; - -КонецФункции - -// Возвращает имя канала сообщений удаленного администрирования соответствующего -// типу сообщения. -// -// Параметры: -// ТипСообщения - ТипОбъектаXDTO - тип сообщения удаленного администрирования -// -// Возвращаемое значение: -// Строка - имя канала сообщений соответствующее переданному типу сообщения -// -Функция ИмяКаналаПоТипуСообщения(Знач ТипСообщения) Экспорт - - Возврат СериализаторXDTO.XMLСтрока(Новый РасширенноеИмяXML(ТипСообщения.URIПространстваИмен, ТипСообщения.Имя)); - -КонецФункции - -// Возвращает тип сообщений удаленного администрирования по -// имени канала сообщений -// -// Параметры: -// ИмяКанала - Строка - имя канала сообщений соответствующее переданному типу сообщения -// -// Возвращаемое значение: -// ТипОбъектаXDTO - тип сообщения удаленного администрирования -// -Функция ТипСообщенияПоИмениКанала(Знач ИмяКанала) Экспорт - - Возврат ФабрикаXDTO.Тип(СериализаторXDTO.XMLЗначение(Тип("РасширенноеИмяXML"), ИмяКанала)); - -КонецФункции - -// Вызывает исключение при получении сообщения в неизвестный канал. -// -// Параметры: -// КаналСообщений - Строка - имя неизвестного канала сообщений. -// -Процедура ОшибкаНеизвестноеИмяКанала(Знач КаналСообщений) Экспорт - - ШаблонСообщения = НСтр("ru = 'Неизвестное имя канала сообщений %1'"); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, КаналСообщений); - ВызватьИсключение(ТекстСообщения); - -КонецПроцедуры diff --git a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/СообщенияУдаленногоАдминистрирования.mdo b/SSL/src/CommonModules/СообщенияУдаленногоАдминистрирования/СообщенияУдаленногоАдминистрирования.mdo deleted file mode 100644 index 667ee9528..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 9abac3d60..000000000 --- a/SSL/src/CommonModules/СообщенияУдаленногоАдминистрированияПовтИсп/Module.bsl +++ /dev/null @@ -1,255 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////////// -// СообщенияУдаленногоАдминистрированияПовтИсп. -// -/////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Возврвщает тип, являющийся базовым для всех типов сообщений -// удаленного администрирования -// -// Возвращаемое значение: -// ТипОбъектаXDTO - базовый тип сообщений удаленного администрирования -// -Функция АбстрактноеСообщение() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетСообщенияУдаленногоАдминистрирования(), "Сообщение"); - -КонецФункции - -// Возвращает типы объектов XDTO содержащихся в заданном -// пакете, являющиеся типа сообщений удаленного администрирования -// -// Параметры: -// URIПакета - Строка - URI пакета XDTO, типы сообщений из которого -// требуется получить -// -// Возвращаемое значение: -// ФиксированныйМассив(ТипОбъектаXDTO) - типы сообщений найденные в пакете -// -Функция ПолучитьТипыСообщенийПакета(Знач URIПакета) Экспорт - - Результат = Новый Массив; - - МоделиПакетов = ФабрикаXDTO.ЭкспортМоделиXDTO(URIПакета); - - БазовыйТип = АбстрактноеСообщение(); - - Для каждого МодельПакета Из МоделиПакетов.package Цикл - Для каждого МодельОбъектногоТипа из МодельПакета.objectType Цикл - ТипОбъекта = ФабрикаXDTO.Тип(URIПакета, МодельОбъектногоТипа.name); - Если НЕ ТипОбъекта.Абстрактный - И БазовыйТип.ЭтоПотомок(ТипОбъекта) Тогда - - Результат.Добавить(ТипОбъекта); - КонецЕсли; - КонецЦикла; - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Результат); - -КонецФункции - -// Возвращает имена каналов сообщений из заданного пакета -// -// Параметры: -// URIПакета - Строка - URI пакета XDTO, типы сообщений из которого -// требуется получить -// -// Возвращаемое значение: -// ФиксированныйМассив(Строка) - имена каналов найденные в пакете -// -Функция ПолучитьКаналыПакета(Знач URIПакета) Экспорт - - Результат = Новый Массив; - - ТипыСообщенийПакета = - СообщенияУдаленногоАдминистрированияПовтИсп.ПолучитьТипыСообщенийПакета(URIПакета); - - Для каждого ТипСообщения Из ТипыСообщенийПакета Цикл - Результат.Добавить(СообщенияУдаленногоАдминистрирования.ИмяКаналаПоТипуСообщения(ТипСообщения)); - КонецЦикла; - - Возврат Новый ФиксированныйМассив(Результат); - -КонецФункции - -/////////////////////////////////////////////////////////////////////////////////// -// Функции, возвращающие типы сообщений и имена содержащих их пакетов - -// Возвращает имя пакета удаленного администрирования. -// -// Возвращаемое значение: -// Строка. -// -Функция ПакетУдаленноеАдминистрирование() Экспорт - - Возврат "http://www.1c.ru/SaaS/RemoteAdministration/App"; - -КонецФункции - -// Возвращает имя пакета контроля удаленного администрирования. -// -// Возвращаемое значение: -// Строка. -// -Функция ПакетКонтрольУдаленногоАдминистрирования() Экспорт - - Возврат "http://www.1c.ru/SaaS/RemoteAdministration/Control"; - -КонецФункции - -// Возвращает имя пакета сообщения удаленного администрирования. -// -// Возвращаемое значение: -// Строка. -// -Функция ПакетСообщенияУдаленногоАдминистрирования() Экспорт - - Возврат "http://www.1c.ru/SaaS/RemoteAdministration/Messages"; - -КонецФункции - -// Возвращает тип сообщения ОбновитьПользователя. -// -// Возвращаемое значение: -// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.ОбновитьПользователя -// -Функция СообщениеОбновитьПользователя() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "ОбновитьПользователя"); - -КонецФункции - -// Возвращает тип сообщения УстановитьПолныеПраваОбластиДанных. -// -// Возвращаемое значение: -// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПолныеПраваОбластиДанных -// -Функция СообщениеУстановитьПолныеПраваОбластиДанных() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьПолныеПраваОбластиДанных"); - -КонецФункции - -// Возвращает тип сообщения УстановитьДоступКОбластиДанных. -// -// Возвращаемое значение: -// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьДоступКОбластиДанных -// -Функция СообщениеУстановитьДоступКОбластиДанных() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьДоступКОбластиДанных"); - -КонецФункции - -// Возвращает тип сообщения УстановитьПраваПользователяПоУмолчанию. -// -// Возвращаемое значение: -// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПраваПользователяПоУмолчанию -// -Функция СообщениеУстановитьПраваПользователяПоУмолчанию() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьПраваПользователяПоУмолчанию"); - -КонецФункции - -// Возвращает тип сообщения ПодготовитьОбластьДанных. -// -// Возвращаемое значение: -// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.ПодготовитьОбластьДанных -// -Функция СообщениеПодготовитьОбластьДанных() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "ПодготовитьОбластьДанных"); - -КонецФункции - -// Возвращает тип сообщения УдалитьОбластьДанных. -// -// Возвращаемое значение: -// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УдалитьОбластьДанных -// -Функция СообщениеУдалитьОбластьДанных() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УдалитьОбластьДанных"); - -КонецФункции - -// Возвращает тип сообщения УстановитьПараметрыОбластиДанных. -// -// Возвращаемое значение: -// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПараметрыОбластиДанных -// -Функция СообщениеУстановитьПараметрыОбластиДанных() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьПараметрыОбластиДанных"); - -КонецФункции - -// Возвращает тип сообщения ОбластьДанныхПодготовлена. -// -// Возвращаемое значение: -// XDTO-пакеты.КонтрольУдаленногоАдминистрирования.ОбластьДанныхПодготовлена -// -Функция СообщениеОбластьДанныхПодготовлена() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ОбластьДанныхПодготовлена"); - -КонецФункции - -// Возвращает тип сообщения ОбластьДанныхУдалена. -// -// Возвращаемое значение: -// XDTO-пакеты.КонтрольУдаленногоАдминистрирования.ОбластьДанныхУдалена -// -Функция СообщениеОбластьДанныхУдалена() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ОбластьДанныхУдалена"); - -КонецФункции - -// Возвращает тип сообщения ОшибкаПодготовкиОбластиДанных.ОшибкаПодготовкиОбластиДанных -// -// Возвращаемое значение: -// XDTO-пакеты.КонтрольУдаленногоАдминистрирования. -// -Функция СообщениеОшибкаПодготовкиОбластиДанных() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ОшибкаПодготовкиОбластиДанных"); - -КонецФункции - -// Возвращает тип сообщения ОшибкаУдаленияОбластиДанных. -// -// Возвращаемое значение: -// XDTO-пакеты.КонтрольУдаленногоАдминистрирования.ОшибкаУдаленияОбластиДанных -// -Функция СообщениеОшибкаУдаленияОбластиДанных() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетКонтрольУдаленногоАдминистрирования(), "ОшибкаУдаленияОбластиДанных"); - -КонецФункции - -// Возвращает тип сообщения УстановитьПараметрыИБ. -// -// Возвращаемое значение: -// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьПараметрыИБ -// -Функция СообщениеУстановитьПараметрыИБ() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьПараметрыИБ"); - -КонецФункции - -// Возвращает тип сообщения УстановитьКонечнуюТочкуМенеджераСервиса. -// -// Возвращаемое значение: -// XDTO-пакеты.УдаленноеАдминистрированиеВМоделиСервиса.УстановитьКонечнуюТочкуМенеджераСервиса -// -Функция СообщениеУстановитьКонечнуюТочкуМенеджераСервиса() Экспорт - - Возврат ФабрикаXDTO.Тип(ПакетУдаленноеАдминистрирование(), "УстановитьКонечнуюТочкуМенеджераСервиса"); - -КонецФункции diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl index ab3649b09..3cc206881 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервера/Module.bsl @@ -4,7 +4,7 @@ //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС // Записать настройку подтверждения завершения работы программы // для текущего пользователя. @@ -31,3 +31,60 @@ КонецФункции +// Возвращает структуру параметров, необходимых для работы клиентского кода +// при запуске конфигурации, т.е. в обработчиках событий +// - ПередНачаломРаботыСистемы, +// - ПриНачалеРаботыСистемы +// +// Подробнее см. ПараметрыРаботыКлиентаПриЗапуске в общем модуле СтандартныеПодсистемыВызовСервераПереопределяемый. +// +Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт + + Параметры = Новый Структура(); + + Если НЕ СтандартныеПодсистемыВызовСервераПереопределяемый.ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Тогда + Возврат Новый ФиксированнаяСтруктура(Параметры); + КонецЕсли; + + ПрикладныеПараметры = ОбщегоНазначенияВызовСервераПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске(); + Для Каждого Параметр Из ПрикладныеПараметры Цикл + Параметры.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + + Возврат Новый ФиксированнаяСтруктура(Параметры); + +КонецФункции + +// Возвращает структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Подробнее см. ПараметрыРаботыКлиента в общем модуле СтандартныеПодсистемыВызовСервераПереопределяемый. +// +Функция ПараметрыРаботыКлиента() Экспорт + + Параметры = Новый Структура(); + СтандартныеПодсистемыВызовСервераПереопределяемый.ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры); + + ПрикладныеПараметры = ОбщегоНазначенияВызовСервераПереопределяемый.ПараметрыРаботыКлиента(); + Для Каждого Параметр Из ПрикладныеПараметры Цикл + Параметры.Вставить(Параметр.Ключ, Параметр.Значение); + КонецЦикла; + Возврат Новый ФиксированнаяСтруктура(Параметры); + +КонецФункции + +// Подбора поставляемых данных из классификатора. +// Запускается в фоне механизмом длительных операций. +// +// Параметры: +// Параметры - Структура +// Ссылки - Массив - Ссылки на элементы справочников. +// ИгнорироватьРучноеИзменение - Булево. +// АдресХранилища - Строка; Неопределено. +// +Процедура ПодобратьПоставляемыеДанныеИзКлассификатора(Знач Параметры, АдресХранилища = Неопределено) Экспорт + + СтандартныеПодсистемыВызовСервераПереопределяемый.ПодобратьПоставляемыеДанныеИзКлассификатора( + Параметры.Ссылки, Параметры.ИгнорироватьРучноеИзменение); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервераПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервераПереопределяемый/Module.bsl index d414c777b..b235d4ef8 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервераПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыВызовСервераПереопределяемый/Module.bsl @@ -1,82 +1,15 @@ //////////////////////////////////////////////////////////////////////////////// // Подсистема "Базовая функциональность". +// Переопределяемые процедуры и функции для интеграции между собой подсистем библиотеки БСП. // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Возвращает структуру параметров, необходимых для работы клиентского кода -// при запуске конфигурации, т.е. в обработчиках событий -// - ПередНачаломРаботыСистемы, -// - ПриНачалеРаботыСистемы +///////////////////////////////////////////////////////////////////////////////// +// Базовая функциональность // -// Важно: при запуске недопустимо использовать команды сброса кэша -// повторно используемых модулей, иначе запуск может привести -// к непредсказуемым ошибкам и лишним серверным вызовам -// -// Не предназначена для прямого вызова из клиентского кода. -// Вместо нее следует использовать одноименную функцию из -// модуля СтандартныеПодсистемыКлиентПовтИсп. -// -// Реализация: -// Для установки параметров работы клиента можно использовать шаблон: -// -// Параметры.Вставить(<ИмяПараметра>, <код получения значения параметра>); -// -// Возвращаемое значение: -// Структура - структура параметров работы клиента при запуске. -// -Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт - - Параметры = Новый Структура(); - - // СтандартныеПодсистемы - Если НЕ ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Тогда - Возврат Новый ФиксированнаяСтруктура(Параметры); - КонецЕсли; - // Конец СтандартныеПодсистемы - - // Для установки параметров инициализации системы можно использовать шаблон: - // - // Параметры.Вставить(<ИмяПараметра>, <код получения значения параметра>); - // - - Возврат Новый ФиксированнаяСтруктура(Параметры); - -КонецФункции - -// Возвращает структуру параметров, необходимых для работы клиентского кода -// конфигурации. -// -// Не предназначена для прямого вызова из клиентского кода. -// Вместо нее следует использовать одноименную функцию из -// модуля СтандартныеПодсистемыКлиентПовтИсп. -// -// Реализация: -// Для установки параметров работы клиента можно использовать шаблон: -// -// Параметры.Вставить(<ИмяПараметра>, <код получения значения параметра>); -// -// Возвращаемое значение: -// Структура - структура параметров работы клиента. -// -Функция ПараметрыРаботыКлиента() Экспорт - - Параметры = Новый Структура(); - - // СтандартныеПодсистемы - ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры); - // Конец СтандартныеПодсистемы - - // Для установки параметров инициализации системы можно использовать шаблон: - // - // Параметры.Вставить(<ИмяПараметра>, <код получения значения параметра>); - // - - Возврат Новый ФиксированнаяСтруктура(Параметры); - -КонецФункции // Заполняет структуру параметров, необходимых для работы клиентского кода // при запуске конфигурации, т.е. в обработчиках событий @@ -93,7 +26,7 @@ // Возвращаемое значение: // Булево - Ложь, если дальнейшее заполнение параметров необходимо прервать. // -Функция ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) +Функция ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистемПриЗапуске(Параметры) Экспорт // СтандартныеПодсистемы.БазоваяФункциональность Если НЕ СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Тогда @@ -101,8 +34,47 @@ КонецЕсли; // Конец СтандартныеПодсистемы.БазоваяФункциональность + // СтандартныеПодсистемы.НапоминанияПользователя + НапоминанияПользователяСервер.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры); + // Конец СтандартныеПодсистемы.НапоминанияПользователя + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + ОбменДаннымиВМоделиСервиса.ДобавитьПараметрыРаботыКлиентскойЛогикиПриЗапуске(Параметры); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // СтандартныеПодсистемы.ОбменДанными + ОбменДаннымиСервер.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры); + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + ОбновлениеИнформационнойБазы.ДобавитьПараметрыРаботыКлиентскойЛогикиПриЗапуске(Параметры); + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + + // СтандартныеПодсистемы.ОбновлениеКонфигурации + ОбновлениеКонфигурации.ДобавитьПараметрыРаботыКлиента(Параметры); + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + РаботаВМоделиСервиса.ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Параметры); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + + // СтандартныеПодсистемы.РегламентныеЗадания + РегламентныеЗаданияСлужебный.ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры); + // Конец СтандартныеПодсистемы.РегламентныеЗадания + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + // Параметры не возвращаются, устанавливается флаг признака входа пользователя в + // область данных после создания последней резервной копии. Возможный вызов + // несколько раз за сеанс не является проблемой. + РезервноеКопированиеОбластейДанных.УстановитьФлагАктивностиПользователяВОбласти(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + + // СтандартныеПодсистемы.РезервноеКопированиеИБ + РезервноеКопированиеИБСервер.ДобавитьПараметрыРаботыКлиента(Параметры); + // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей - СоединенияИБ.ПроверитьБлокировкуСоединенийОбластиДанных(Параметры); + СоединенияИБ.ДобавитьПараметрыРаботыКлиентскойЛогикиПриЗапуске(Параметры); // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей Возврат Истина; @@ -115,73 +87,71 @@ // Параметры: // Параметры - Структура - структура параметров. // -Процедура ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) +Процедура ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры) Экспорт // СтандартныеПодсистемы.БазоваяФункциональность СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиента(Параметры); // Конец СтандартныеПодсистемы.БазоваяФункциональность // СтандартныеПодсистемы.Взаимодействия - Параметры.Вставить("ИспользоватьПочтовыйКлиент", ПолучитьФункциональнуюОпцию("ИспользоватьПочтовыйКлиент")); - Параметры.Вставить("ИспользоватьПрочиеВзаимодействия", ПолучитьФункциональнуюОпцию("ИспользоватьПрочиеВзаимодействия")); + Взаимодействия.ДобавитьПараметрыРаботыКлиента(Параметры); // Конец СтандартныеПодсистемы.Взаимодействия // СтандартныеПодсистемы.ЗавершениеРаботыПользователей - Параметры.Вставить("ПараметрыБлокировкиСеансов", Новый ФиксированнаяСтруктура(СоединенияИБ.ПараметрыБлокировкиСеансов())); + СоединенияИБ.ДобавитьПараметрыРаботыКлиента(Параметры); // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + // СтандартныеПодсистемы.НапоминанияПользователя + НапоминанияПользователяСервер.ДобавитьПараметрыРаботыКлиента(Параметры); + // Конец СтандартныеПодсистемы.НапоминанияПользователя + + // СтандартныеПодсистемы.ОбменДанными + ОбменДаннымиСервер.ДобавитьПараметрыРаботыКлиента(Параметры); + // Конец СтандартныеПодсистемы.ОбменДанными + // СтандартныеПодсистемы.ОбновлениеВерсииИБ - Параметры.Вставить("ПервыйЗапуск", ОбновлениеИнформационнойБазы.ПервыйЗапуск()); - Параметры.Вставить("ПервыйВходВОбластьДанных", ОбновлениеИнформационнойБазы.ПервыйВходВОбластьДанных()); - Параметры.Вставить("ЭтоГлавныйУзел", ПланыОбмена.ГлавныйУзел() = Неопределено); + ОбновлениеИнформационнойБазы.ДобавитьПараметрыРаботыКлиента(Параметры); // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ // СтандартныеПодсистемы.ОбновлениеКонфигурации - Параметры.Вставить("НастройкиОбновления", - Новый ФиксированнаяСтруктура(ОбновлениеКонфигурации.ПолучитьНастройкиОбновления())); + ОбновлениеКонфигурации.ДобавитьПараметрыРаботыКлиента(Параметры); // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации - // СтандартныеПодсистемы.ОбменДанными - ОбменДаннымиСервер.ДобавитьПараметрыРаботыКлиентскойЛогикиСтандартныхПодсистем(Параметры); - // Конец СтандартныеПодсистемы.ОбменДанными - // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - Параметры.Вставить("НастройкиПроксиСервера", ПолучениеФайловИзИнтернета.ПолучитьНастройкуПроксиСервера()); + ПолучениеФайловИзИнтернета.ДобавитьПараметрыРаботыКлиента(Параметры); // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + РаботаВМоделиСервиса.ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Параметры); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + ОбменДаннымиВМоделиСервиса.ДобавитьПараметрыРаботыКлиента(Параметры); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // СтандартныеПодсистемы.РегламентныеЗадания + РегламентныеЗаданияСлужебный.ДобавитьПараметрыРаботыКлиента(Параметры); + // Конец СтандартныеПодсистемы.РегламентныеЗадания + + // СтандартныеПодсистемы.РезервноеКопированиеИБ + РезервноеКопированиеИБСервер.ДобавитьПараметрыРаботыКлиента(Параметры); + // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ + + // СтандартныеПодсистемы.УправлениеДоступом + УправлениеДоступомСлужебный.ДобавитьПараметрыРаботыКлиента(Параметры); + // Конец СтандартныеПодсистемы.УправлениеДоступом + // СтандартныеПодсистемы.ФайловыеФункции - Параметры.Вставить("ПерсональныеНастройкиРаботыСФайлами", - Новый ФиксированнаяСтруктура(ФайловыеФункции.ПолучитьПерсональныеНастройкиРаботыСФайлами())); + ФайловыеФункцииСлужебный.ДобавитьПараметрыРаботыКлиента(Параметры); // Конец СтандартныеПодсистемы.ФайловыеФункции // СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись - Параметры.Вставить("ПерсональныеНастройкиРаботыСЭЦП", - Новый ФиксированнаяСтруктура(ЭлектроннаяЦифроваяПодпись.ПолучитьПерсональныеНастройкиРаботыСЭЦПСервер())); + ЭлектроннаяЦифроваяПодпись.ДобавитьПараметрыРаботыКлиента(Параметры); // Конец СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись - // СтандартныеПодсистемы.РегламентныеЗадания - Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - Параметры.Вставить("ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий", - Новый ФиксированнаяСтруктура(РегламентныеЗаданияСервер.ПараметрыЗапускаОтдельногоСеансаВыполненияРегламентныхЗаданий(Истина))); - КонецЕсли; - // Конец СтандартныеПодсистемы.РегламентныеЗадания - - // СтандартныеПодсистемы.УправлениеДоступом - Параметры.Вставить("УпрощенныйИнтерфейсНастройкиПравДоступа", УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа()); - // Конец СтандартныеПодсистемы.УправлениеДоступом - - // СтандартныеПодсистемы.РезервноеКопированиеИБ - Параметры.Вставить("ПараметрыРезервногоКопированияИБ", РезервноеКопированиеИБСервер.ПолучитьНастройкиРезервногоКопирования()); - // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ - - // СтандартныеПодсистемы.НапоминанияПользователя - Параметры.Вставить("НастройкиНапоминаний", - Новый ФиксированнаяСтруктура(НапоминанияПользователяСервер.ПолучитьНастройкиНапоминаний())); - // Конец СтандартныеПодсистемы.НапоминанияПользователя - КонецПроцедуры -// Процедура осуществляет копирование общих данных в разделенные +// Осуществляет копирование общих данных в разделенные. // Процедура ПодобратьПоставляемыеДанныеИзКлассификатора(Знач Ссылки, Знач ИгнорироватьРучноеИзменение = Ложь) Экспорт diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl index ea48039cc..b810cf850 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиент/Module.bsl @@ -9,183 +9,47 @@ // Устанавливает заголовок главного окна приложения, используя представление текущего пользователя, // значение константы ЗаголовокПриложения и заголовок приложения по умолчанию. // -Процедура УстановитьРасширенныйЗаголовокПриложения() Экспорт +// Параметры: +// ПриЗапуске - Булево - Истина, если вызывыется при начале работы программы. +// +Процедура УстановитьРасширенныйЗаголовокПриложения(ПриЗапуске = Ложь) Экспорт - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); - ПредставлениеЗаголовка = ПараметрыКлиента.ЗаголовокПриложения; - ПредставлениеПользователя = ПараметрыКлиента.АвторизованныйПользователь; - ПредставлениеКонфигурации = ПараметрыКлиента.ПодробнаяИнформация; + ПараметрыКлиента = ?(ПриЗапуске, СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(), + СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента()); + Если ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + ПредставлениеЗаголовка = ПараметрыКлиента.ЗаголовокПриложения; + ПредставлениеПользователя = ПараметрыКлиента.ПредставлениеПользователя; + ПредставлениеКонфигурации = ПараметрыКлиента.ПодробнаяИнформация; Если ПустаяСтрока(СокрЛП(ПредставлениеЗаголовка)) Тогда Если ПараметрыКлиента.Свойство("ПредставлениеОбластиДанных") Тогда - ШаблонЗаголовка = "%1 / %2 / %3 / "; + ШаблонЗаголовка = "%1 / %2 / %3"; ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, - ПараметрыКлиента.ПредставлениеОбластиДанных, ПараметрыКлиента.ПодробнаяИнформация, + ПараметрыКлиента.ПредставлениеОбластиДанных, ПредставлениеКонфигурации, ПредставлениеПользователя); Иначе - ШаблонЗаголовка = "%1 / %2 / "; + ШаблонЗаголовка = "%1 / %2"; ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, - ПараметрыКлиента.ПодробнаяИнформация, ПредставлениеПользователя); + ПредставлениеКонфигурации, ПредставлениеПользователя); КонецЕсли; Иначе - ШаблонЗаголовка = "%1 / %2 / %3 / "; + ШаблонЗаголовка = "%1 / %2 / %3"; ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, СокрЛП(ПредставлениеЗаголовка), ПредставлениеПользователя, ПредставлениеКонфигурации); КонецЕсли; УстановитьЗаголовокПриложения(ЗаголовокПриложения); Иначе - ШаблонЗаголовка = "%1 / %2 / "; + ШаблонЗаголовка = "%1 / %2"; ЗаголовокПриложения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, - НСтр("ru = 'Не установлены разделители'"), ОбщегоНазначения.ПолучитьПодробнуюИнформациюКонфигурации()); + НСтр("ru = 'Не установлены разделители'"), ПараметрыКлиента.ПодробнаяИнформация); УстановитьЗаголовокПриложения(ЗаголовокПриложения); КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Стандартные действия выполняемые перед началом работы системы. -// -// Параметры: -// Отказ - Булево - флаг отказа от выполнения операции. -// В случае установки в Истина вход в систему осуществлен не будет. -// -Процедура ДействияПередНачаломРаботыСистемы(Отказ) Экспорт - - Если ОбновлениеИнформационнойБазы.ПервыйЗапуск() Тогда - - Если Найти(ПараметрЗапуска, "ИнициализироватьРазделеннуюИБ") <> 0 - ИЛИ Найти(ПараметрЗапуска, "InitializeSeparatedIB") <> 0 Тогда - - ОбщегоНазначения.УстановитьПараметрыРазделенияИнформационныйБазы(Истина); - - ПрекратитьРаботуСистемы(Истина); - КонецЕсли; - - КонецЕсли; - - ДоступноИспользованиеРазделенныхДанных = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); - - Если НЕ ДоступноИспользованиеРазделенныхДанных Тогда - ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); - КонецЕсли; - - Если НЕ ПустаяСтрока(ПараметрЗапуска) Тогда - ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); - ЗначениеПараметраЗапуска = Врег(ПараметрыЗапуска[0]); - - Если ЗначениеПараметраЗапуска = ВРег("ВойтиВОбластьДанных") Тогда - Если ПараметрыЗапуска.Количество() < 2 Тогда - ВызватьИсключение(НСтр("ru = 'При указании параметра запуска ВойтиВОбластьДанных, - |дополнительным параметром необходимо указать значение разделителя.'")); - КонецЕсли; - - Попытка - ЗначениеРазделителя = Число(ПараметрыЗапуска[1]); - Исключение - ВызватьИсключение(НСтр("ru = 'Значением разделителя должно быть число.'")); - КонецПопытки; - - ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ЗначениеРазделителя); - ДоступноИспользованиеРазделенныхДанных = Истина; - КонецЕсли; - КонецЕсли; - - Если ДоступноИспользованиеРазделенныхДанных Тогда - - СтандартныеПодсистемыКлиентПереопределяемый.ПередНачаломРаботыСистемы(Отказ); - - Если Отказ Тогда - Возврат; - КонецЕсли; - - ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы(Отказ); - - КонецЕсли; - -КонецПроцедуры - -// Стандартные действия выполняемые при начале работы системы. -// -// Параметры -// ОбрабатыватьПараметрыЗапуска - Булево - Истина, если обработчик вызван при -// непосредсвенном входе пользователя в систему и должен обработать параметры -// запуска (если это предусмотрено его логикой). Ложь, если обработчик вызван -// при интерактивном входе неразделенного пользователя в область данных и -// обрабатывать параметры запуска не следует. -// -Процедура ДействияПриНачалеРаботыСистемы(ОбрабатыватьПараметрыЗапуска = Истина) Экспорт - - СтандартныеПодсистемыКлиентПереопределяемый.ПриНачалеРаботыСистемы(ОбрабатыватьПараметрыЗапуска); - ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы(ОбрабатыватьПараметрыЗапуска); - -КонецПроцедуры - -// Соответствует обработчику ПередЗавершениемРаботыСистемы -// -// Параметры: -// Отказ - Булево - признак отказа от завершения работы системы. -// -Процедура ДействияПередЗавершениемРаботыСистемы(Отказ) Экспорт - - СтандартныеПодсистемыКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(Отказ); - - Если Отказ = Истина Тогда - Возврат; - КонецЕсли; - - ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(Отказ); - -КонецПроцедуры - -// Показывает пользователю диалог подтверждения выхода из программы. -// -// Параметры: -// Отказ - Булево - признак отказа от завершения работы системы. -// -// Возвращаемое значение: -// Булево - Истина, если пользователь отказался от закрытия программы; -// Ложь, если пользователь согласился закрыть программу, или диалог закрытия не вызывался. -// -Функция ВопросПользователюПередЗавершениемРаботыСистемы(Отказ) Экспорт - - // Если программно не отключено предупреждение, то зачитываем из настроек - Если ПропуститьПредупреждениеПередЗавершениемРаботыСистемы <> Истина Тогда - ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Не СтандартныеПодсистемыВызовСервера.ЗагрузитьНастройкуПодтвержденияПриЗавершенииПрограммы(); - КонецЕсли; - Если ПропуститьПредупреждениеПередЗавершениемРаботыСистемы Тогда - Возврат Ложь; - КонецЕсли; - - БольшеНеЗадаватьЭтотВопрос = Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; - Если БольшеНеЗадаватьЭтотВопрос Тогда - Возврат Ложь; - КонецЕсли; - - Кнопки = Новый СписокЗначений; - Кнопки.Добавить("КодВозвратаДиалога.Да", НСтр("ru = 'Завершить'")); - Кнопки.Добавить("КодВозвратаДиалога.Нет", НСтр("ru = 'Не завершать'")); - - Результат = ВопросПользователю(НСтр("ru = 'Завершить работу с программой?'"), Кнопки, , КодВозвратаДиалога.Да, НСтр("ru = 'Завершение работы'"), - КодВозвратаДиалога.Нет, БольшеНеЗадаватьЭтотВопрос); - Если БольшеНеЗадаватьЭтотВопрос Тогда - СтандартныеПодсистемыВызовСервера.СохранитьНастройкуПодтвержденияПриЗавершенииПрограммы(НЕ БольшеНеЗадаватьЭтотВопрос); - КонецЕсли; - - Если Результат <> КодВозвратаДиалога.Да Тогда - Отказ = Истина; - Возврат Истина; - КонецЕсли; - - Возврат Ложь - -КонецФункции - // Отключает выдачу предупреждения пользователю при завершении работы программы. // Процедура ПропуститьПредупреждениеПередЗавершениемРаботыСистемы() Экспорт @@ -194,87 +58,6 @@ КонецПроцедуры -// Проверяет версию платформы, в зависмости от места вызова и возвращает Истина, -// если она подходит для запуска конфигурации. -// -// Параметры: -// МестоВызова - Строка - место, из которого вызывается процедура. -// Варианты: "ПередНачаломРаботы" - если вызывается из обработчика ПередНачаломРаботыСистемы() -// "ПриНачалеРаботы" - если вызывается из обработчика ПриНачалеРаботыСистемы() -// -// Возвращаемое значение - Булево - Если версия актуальна, тогда Истина, иначе - Ложь. -// -Функция ПроверитьВерсиюПлатформыПриЗапуске(МестоВызова) Экспорт - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат Истина; - КонецЕсли; - - // Для Обычного режима проверка выполняется в обработчике "ПриНачалеРаботыСистемы". - // Для Управляемого режима проверка выполняется в обработчике "ПередНачаломРаботыСистемы". - #Если ТолстыйКлиентОбычноеПриложение Тогда - Если МестоВызова = "ПередНачаломРаботы" Тогда - Возврат Истина; - КонецЕсли; - #Иначе - Если МестоВызова = "ПриНачалеРаботы" Тогда - Возврат Истина; - КонецЕсли; - #КонецЕсли - - ПараметрыПроверки = Новый ФиксированнаяСтруктура("ВерсияПлатформы, РаботаВПрограммеЗапрещена", "8.2.15.310", Ложь); - СтандартныеПодсистемыКлиентПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы(ПараметрыПроверки); - - Возврат ПроверитьВерсиюПлатформы(ПараметрыПроверки.ВерсияПлатформы, ПараметрыПроверки.РаботаВПрограммеЗапрещена); - -КонецФункции - -// Проверяет минимально допустимую версию платформы для запуска. -// Если версия платформы более поздняя, чем РекомендуемаяВерсияПлатформы, то пользователю будет -// показано оповещение. Работа программы будет прекращена, если ЗавершитьРаботу = Истина. -// -// Параметры: -// РекомендуемаяВерсияПлатформы - Строка - версия платформы рекомендуемая для работы; -// РаботаВПрограммеЗапрещена - Булево - если Истина и текущая версия платформы меньше рекомендуемой, -// то продолжение работы в программе невозможно. -// -// Возвращаемое значение: -// Булево - Истина, если версия платформы подходит для работы. -// -Функция ПроверитьВерсиюПлатформы(знач РекомендуемаяВерсияПлатформы, знач РаботаВПрограммеЗапрещена = Ложь) Экспорт - - СистемнаяИнформация = Новый СистемнаяИнформация; - Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, РекомендуемаяВерсияПлатформы) >= 0 Тогда - Возврат Истина; - КонецЕсли; - - Если РаботаВПрограммеЗапрещена Тогда - ТекстСообщения = НСтр("ru='Продолжение невозможно, работа программы будет завершена. - |Необходимо обновить версию платформы 1С:Предприятие.'"); - Иначе - ТекстСообщения = - НСтр("ru='Рекомендуется прекратить работу программы и обновить версию платформы 1С:Предприятие. - |В противном случае некоторые возможности программы будут недоступны или будут работать некорректно. - | - |Прекратить работу программы?'"); - КонецЕсли; - Параметры = Новый Структура; - Параметры.Вставить("ТекстСообщения", ТекстСообщения); - Параметры.Вставить("ЗавершитьРаботу", РаботаВПрограммеЗапрещена); - Параметры.Вставить("РекомендуемаяВерсияПлатформы", РекомендуемаяВерсияПлатформы); - Результат = ОткрытьФормуМодально("ОбщаяФорма.НерекомендуемаяВерсияПлатформы", Параметры); - Если РаботаВПрограммеЗапрещена Тогда - ПрекратитьРаботуСистемы(); - Возврат Ложь; - ИначеЕсли Результат = КодВозвратаДиалога.OK Тогда - ПрекратитьРаботуСистемы(); - Возврат Ложь; - КонецЕсли; - - Возврат Истина; - -КонецФункции - // Вызывает форму вопроса. // // Параметры: @@ -345,6 +128,287 @@ КонецФункции +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Стандартные действия выполняемые перед началом работы системы. +// +// Параметры: +// Отказ - Булево - флаг отказа от выполнения операции. +// В случае установки в Истина вход в систему осуществлен не будет. +// +Процедура ДействияПередНачаломРаботыСистемы(Отказ) Экспорт + + УстановитьПараметрыРазделенияИнформационныйБазы(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если НЕ ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(); + КонецЕсли; + + УстановитьРазделениеСеанса(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + + Если Не ПараметрыКлиента.ДоступноИспользованиеРазделенныхДанных Тогда + Возврат; + КонецЕсли; + + СтандартныеПодсистемыКлиентПереопределяемый.ПередНачаломРаботыСистемы(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентПереопределяемый.ПередНачаломРаботыСистемы(Отказ); + +КонецПроцедуры + +// Установить параметры разделения информационный базы при запуске программы. +// +// Параметры: +// Отказ - Булево - если Истина, то запуск программы должен быть прекращен. +// +Процедура УстановитьПараметрыРазделенияИнформационныйБазы(Отказ) + + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Если Не ПараметрыКлиента.ПервыйЗапускИнформационнойБазы Тогда + Возврат; + КонецЕсли; + + Если Найти(ПараметрЗапуска, "ИнициализироватьРазделеннуюИБ") <> 0 + ИЛИ Найти(ПараметрЗапуска, "InitializeSeparatedIB") <> 0 Тогда + + ОбщегоНазначения.УстановитьПараметрыРазделенияИнформационныйБазы(Истина); + Отказ = Истина; + ПрекратитьРаботуСистемы(Истина); + КонецЕсли; + +КонецПроцедуры + +// Установить разделения сеанса при запуске программы. +// +// Параметры: +// Отказ - Булево - если Истина, то запуск программы должен быть прекращен. +// +Процедура УстановитьРазделениеСеанса(Отказ) + + Если ПустаяСтрока(ПараметрЗапуска) Тогда + Возврат; + КонецЕсли; + + ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); + ЗначениеПараметраЗапуска = Врег(ПараметрыЗапуска[0]); + + Если ЗначениеПараметраЗапуска <> ВРег("ВойтиВОбластьДанных") Тогда + Возврат; + КонецЕсли; + + Если ПараметрыЗапуска.Количество() < 2 Тогда + ВызватьИсключение(НСтр("ru = 'При указании параметра запуска ВойтиВОбластьДанных, + |дополнительным параметром необходимо указать значение разделителя.'")); + КонецЕсли; + + Попытка + ЗначениеРазделителя = Число(ПараметрыЗапуска[1]); + Исключение + ВызватьИсключение(НСтр("ru = 'Значением разделителя в параметре ВойтиВОбластьДанных должно быть число.'")); + КонецПопытки; + + ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, ЗначениеРазделителя); + +КонецПроцедуры + +// Стандартные действия выполняемые при начале работы системы. +// +// Параметры +// ОбрабатыватьПараметрыЗапуска - Булево - Истина, если обработчик вызван при +// непосредсвенном входе пользователя в систему и должен обработать параметры +// запуска (если это предусмотрено его логикой). Ложь, если обработчик вызван +// при интерактивном входе неразделенного пользователя в область данных и +// обрабатывать параметры запуска не следует. +// +Процедура ДействияПриНачалеРаботыСистемы(ОбрабатыватьПараметрыЗапуска = Истина) Экспорт + + СтандартныеПодсистемыКлиентПереопределяемый.ПриНачалеРаботыСистемы(ОбрабатыватьПараметрыЗапуска); + ОбщегоНазначенияКлиентПереопределяемый.ПриНачалеРаботыСистемы(ОбрабатыватьПараметрыЗапуска); + +КонецПроцедуры + +// Обработать параметры запуска программы. +// +// Параметры +// ОбрабатыватьПараметрыЗапуска – Булево +// +// Возвращаемое значение: +// Булево – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. +// +Функция ОбработатьПараметрыЗапуска(ОбрабатыватьПараметрыЗапуска) Экспорт + + Результат = Ложь; + + // Есть ли параметры запуска + Если Не ОбрабатыватьПараметрыЗапуска Или ПустаяСтрока(ПараметрЗапуска) Тогда + Возврат Результат; + КонецЕсли; + + // Параметр может состоять из частей, разделенных символом ";". + // Первая часть - главное значение параметра запуска. + // Наличие дополнительных частей определяется логикой обработки главного параметра. + ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); + ЗначениеПараметраЗапуска = Врег(ПараметрыЗапуска[0]); + + Результат = СтандартныеПодсистемыКлиентПереопределяемый.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска); + Результат = ОбщегоНазначенияКлиентПереопределяемый.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска) Или Результат; + Возврат Результат; + +КонецФункции + +// Соответствует обработчику ПередЗавершениемРаботыСистемы +// +// Параметры: +// Отказ - Булево - признак отказа от завершения работы системы. +// +Процедура ДействияПередЗавершениемРаботыСистемы(Отказ) Экспорт + + СтандартныеПодсистемыКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(Отказ); + + Если Отказ = Истина Тогда + Возврат; + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + ОткрытьФормуПредупрежденийПриЗавершенииРаботы(Отказ); + КонецЕсли; + + ОбщегоНазначенияКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(Отказ); + +КонецПроцедуры + +// Показывает пользователю диалог подтверждения выхода из программы. +// +// Параметры: +// Отказ - Булево - признак отказа от завершения работы системы. +// +// Возвращаемое значение: +// Булево - Истина, если пользователь отказался от закрытия программы; +// Ложь, если пользователь согласился закрыть программу, или диалог закрытия не вызывался. +// +Функция ВопросПользователюПередЗавершениемРаботыСистемы(Отказ) Экспорт + + // Если программно не отключено предупреждение, то зачитываем из настроек + Если ПропуститьПредупреждениеПередЗавершениемРаботыСистемы <> Истина Тогда + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Не СтандартныеПодсистемыВызовСервера.ЗагрузитьНастройкуПодтвержденияПриЗавершенииПрограммы(); + КонецЕсли; + Если ПропуститьПредупреждениеПередЗавершениемРаботыСистемы Тогда + Возврат Ложь; + КонецЕсли; + + БольшеНеЗадаватьЭтотВопрос = Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЗапрашиватьПодтверждениеПриЗавершенииПрограммы; + Если БольшеНеЗадаватьЭтотВопрос Тогда + Возврат Ложь; + КонецЕсли; + + Кнопки = Новый СписокЗначений; + Кнопки.Добавить("КодВозвратаДиалога.Да", НСтр("ru = 'Завершить'")); + Кнопки.Добавить("КодВозвратаДиалога.Нет", НСтр("ru = 'Не завершать'")); + + Результат = ВопросПользователю(НСтр("ru = 'Завершить работу с программой?'"), Кнопки, , КодВозвратаДиалога.Да, НСтр("ru = 'Завершение работы'"), + КодВозвратаДиалога.Нет, БольшеНеЗадаватьЭтотВопрос); + Если БольшеНеЗадаватьЭтотВопрос Тогда + СтандартныеПодсистемыВызовСервера.СохранитьНастройкуПодтвержденияПриЗавершенииПрограммы(НЕ БольшеНеЗадаватьЭтотВопрос); + КонецЕсли; + + Если Результат <> КодВозвратаДиалога.Да Тогда + Отказ = Истина; + Возврат Истина; + КонецЕсли; + + Возврат Ложь + +КонецФункции + +// Проверяет версию платформы, в зависмости от места вызова и возвращает Истина, +// если она подходит для запуска конфигурации. +// +// Возвращаемое значение +// Булево - если версия актуальна, тогда Истина, иначе - Ложь. +// +Функция ПроверитьВерсиюПлатформыПриЗапуске() Экспорт + + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().РазделениеВключено Тогда + Возврат Истина; + КонецЕсли; + + // Определяем минимальную версию платформы для запуска и логику входа в программу + ПараметрыРаботы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске(); + Возврат ПроверитьВерсиюПлатформы(ПараметрыРаботы.МинимальноНеобходимаяВерсияПлатформы, ПараметрыРаботы.РаботаВПрограммеЗапрещена); + +КонецФункции + +// Проверяет минимально допустимую версию платформы для запуска. +// Если версия платформы более поздняя, чем РекомендуемаяВерсияПлатформы, то пользователю будет +// показано оповещение. Работа программы будет прекращена, если ЗавершитьРаботу = Истина. +// +// Параметры: +// РекомендуемаяВерсияПлатформы - Строка - версия платформы рекомендуемая для работы; +// РаботаВПрограммеЗапрещена - Булево - если Истина и текущая версия платформы меньше рекомендуемой, +// то продолжение работы в программе невозможно. +// +// Возвращаемое значение: +// Булево - Истина, если версия платформы подходит для работы. +// +Функция ПроверитьВерсиюПлатформы(знач РекомендуемаяВерсияПлатформы, знач РаботаВПрограммеЗапрещена = Ложь) Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, РекомендуемаяВерсияПлатформы) >= 0 Тогда + Возврат Истина; + КонецЕсли; + + ЕстьДоступДляОбновленияВерсииПлатформы = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ЕстьДоступДляОбновленияВерсииПлатформы; + Если РаботаВПрограммеЗапрещена Тогда + Если ЕстьДоступДляОбновленияВерсииПлатформы Тогда + ТекстСообщения = НСтр("ru = 'Вход в программу невозможен. + |Необходимо предварительно обновить версию платформы 1С:Предприятие.'"); + Иначе + ТекстСообщения = НСтр("ru = 'Вход в программу невозможен. + |Необходимо обратиться к администратору для обновления версии платформы 1С:Предприятие.'"); + КонецЕсли; + Иначе + Если ЕстьДоступДляОбновленияВерсииПлатформы Тогда + ТекстСообщения = + НСтр("ru='Рекомендуется прекратить работу программы и обновить версию платформы 1С:Предприятие. + |В противном случае некоторые возможности программы будут недоступны или будут работать некорректно. + | + |Прекратить работу программы?'"); + Иначе + ТекстСообщения = + НСтр("ru='Рекомендуется прекратить работу программы и обратиться к администратору для обновления версии платформы 1С:Предприятие. + |В противном случае некоторые возможности программы будут недоступны или будут работать некорректно. + | + |Прекратить работу программы?'"); + КонецЕсли; + КонецЕсли; + Параметры = Новый Структура; + Параметры.Вставить("ТекстСообщения", ТекстСообщения); + Параметры.Вставить("ЗавершитьРаботу", РаботаВПрограммеЗапрещена); + Параметры.Вставить("РекомендуемаяВерсияПлатформы", РекомендуемаяВерсияПлатформы); + Результат = ОткрытьФормуМодально("ОбщаяФорма.НерекомендуемаяВерсияПлатформы", Параметры); + Если РаботаВПрограммеЗапрещена Тогда + ПрекратитьРаботуСистемы(); + Возврат Ложь; + ИначеЕсли Результат = КодВозвратаДиалога.OK Тогда + ПрекратитьРаботуСистемы(); + Возврат Ложь; + КонецЕсли; + + Возврат Истина; + +КонецФункции + // Возвращает строковое представление значения типа КодВозвратаДиалога Функция КодВозвратаДиалогаВСтроку(Значение) @@ -369,7 +433,7 @@ Возврат Результат; КонецФункции - + // Выводит форму сообщений пользователю при закрытии программы, // либо выводит сообщение. // diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПереопределяемый/Module.bsl index 9d92c5268..2be94e6f1 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПереопределяемый/Module.bsl @@ -1,12 +1,64 @@ //////////////////////////////////////////////////////////////////////////////// // Подсистема "Базовая функциональность". +// Переопределяемые процедуры и функции для интеграции между собой подсистем библиотеки БСП. // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Соответствует обработчику ПриНачалеРаботыСистемы +///////////////////////////////////////////////////////////////////////////////// +// Базовая функциональность + +// Выполняется перед началом работы пользователя с областью данных, +// либо в локальном режиме работы. +// Соответствует обработчику ПередНачаломРаботыСистемы +// +// Параметры: +// Отказ - Булево - отказ в от начала работы. Если параметр установить в Истина, +// начало работы с областью осуществлено не будет. +// +Процедура ПередНачаломРаботыСистемы(Отказ) Экспорт + + // СтандартныеПодсистемы.Пользователи + ПользователиСлужебныйКлиент.ПроверитьАвторизациюПользователя(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + // Конец СтандартныеПодсистемы.Пользователи + + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(Истина); + + // Для толстого клиента в режиме обычного приложения проверка выполняется в обработчике "ПриНачалеРаботыСистемы". + // В остальных случаях - в обработчике "ПередНачаломРаботыСистемы". +#Если НЕ ТолстыйКлиентОбычноеПриложение Тогда + ВерсияАктуальна = СтандартныеПодсистемыКлиент.ПроверитьВерсиюПлатформыПриЗапуске(); + Если Не ВерсияАктуальна Тогда + Отказ = Истина; + Возврат; + КонецЕсли; +#КонецЕсли + + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей + СоединенияИБКлиент.ПередНачаломРаботыСистемы(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + ОбновлениеИнформационнойБазыКлиент.ПередНачаломРаботыСистемы(Отказ); + Если Отказ Тогда + Возврат; + КонецЕсли; + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + +КонецПроцедуры + +// Выполняется при начале работы пользователя с областью данных, +// либо в локальном режиме работы. +// Соответствует обработчику ПриНачалеРаботыСистемы. +// Последовательность вызовов должна быть строго определенной (не по алфавиту). // // Параметры // ОбрабатыватьПараметрыЗапуска - Булево - Истина, если обработчик вызван при @@ -17,37 +69,35 @@ // Процедура ПриНачалеРаботыСистемы(Знач ОбрабатыватьПараметрыЗапуска = Ложь) Экспорт - Если ОбновлениеИнформационнойБазы.ПервыйЗапуск() Тогда - + Если СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ПервыйЗапускИнформационнойБазы Тогда ОбщегоНазначения.УстановитьПараметрыРазделенияИнформационныйБазы(Ложь); - КонецЕсли; - СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); + СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(Истина); + + // Для толстого клиента в режиме обычного приложения проверка выполняется в обработчике "ПриНачалеРаботыСистемы". + // В остальных случаях - в обработчике "ПередНачаломРаботыСистемы". +#Если ТолстыйКлиентОбычноеПриложение Тогда + ВерсияАктуальна = СтандартныеПодсистемыКлиент.ПроверитьВерсиюПлатформыПриЗапуске(); + Если Не ВерсияАктуальна Тогда + Отказ = Истина; + Возврат; + КонецЕсли; +#КонецЕсли // СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления - Если НЕ ПроверкаЛегальностиПолученияОбновленияКлиент.ПодтвердитьЛегальностьПолученияОбновления() Тогда + Если НЕ ПроверкаЛегальностиПолученияОбновленияКлиент.ПриНачалеРаботыСистемы() Тогда Возврат; КонецЕсли; // Конец СтандартныеПодсистемы.ПроверкаЛегальностиПолученияОбновления - // СтандартныеПодсистемы.ОбменДанными - Если НЕ ОбменДаннымиКлиент.ПроверитьЗагрузкуСообщенияОбменаСИзменениямиКонфигурацииДляПодчиненногоУзла() Тогда - Возврат; - КонецЕсли; - // Конец СтандартныеПодсистемы.ОбменДанными - // СтандартныеПодсистемы.ОбновлениеВерсииИБ ОбновлениеИнформационнойБазыКлиент.ВыполнитьОбновлениеИнформационнойБазы(); - - ОбновлениеИнформационнойБазыКлиент.ПоказатьОписаниеИзмененийСистемы(); // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ - // отработка параметров запуска системы - Если ОбрабатыватьПараметрыЗапуска Тогда - Если ОбработатьПараметрыЗапуска() Тогда - Возврат; - КонецЕсли; + // Обработка параметров запуска системы. + Если СтандартныеПодсистемыКлиент.ОбработатьПараметрыЗапуска(ОбрабатыватьПараметрыЗапуска) Тогда + Возврат; КонецЕсли; // СтандартныеПодсистемы.ЗавершениеРаботыПользователей @@ -58,6 +108,10 @@ ОбменДаннымиКлиент.ПриНачалеРаботыСистемы(); // Конец СтандартныеПодсистемы.ОбменДанными + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + ОбменДаннымиВМоделиСервисаКлиент.ПриНачалеРаботыСистемы(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + // СтандартныеПодсистемы.ОбновлениеКонфигурации ОбновлениеКонфигурацииКлиент.ПроверитьОбновлениеКонфигурации(); // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации @@ -66,7 +120,7 @@ // Прим.: подсистема КонтрольДинамическогоОбновленияКонфигурации // должна настраиваться после подсистемы РегламентныеЗадания, т.к. в режиме запуска отдельного // сеанса обработки регламентных заданий, управление не будет и не должно быть передано далее. - РегламентныеЗаданияКлиент.ПриНачалеРаботыСистемы(); + РегламентныеЗаданияСлужебныйКлиент.ПриНачалеРаботыСистемы(); // Конец СтандартныеПодсистемы.РегламентныеЗадания // СтандартныеПодсистемы.РезервноеКопированиеИБ @@ -83,108 +137,40 @@ КонецПроцедуры -// Обработать параметр запуска программы. +// Обработать параметры запуска программы. // Реализация функции может быть расширена для обработки новых параметров. // // Параметры -// ПараметрЗапуска – Строка – параметр запуска, переданный в конфигурацию -// с помощью ключа командной строки /C. +// ЗначениеПараметраЗапуска - Строка - первое значение параметра запуска, +// до первого символа ";" +// ПараметрыЗапуска – Строка – параметр запуска, переданный в конфигурацию +// с помощью ключа командной строки /C. // // Возвращаемое значение: // Булево – Истина, если необходимо прервать выполнение процедуры ПриНачалеРаботыСистемы. // -Функция ОбработатьПараметрыЗапуска() +Функция ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска) Экспорт - Перем Результат; - Результат = Ложь; - // СтандартныеПодсистемы - - // Есть ли параметры запуска - Если ПустаяСтрока(ПараметрЗапуска) Тогда - Возврат Результат; - КонецЕсли; - - // Параметр может состоять из частей, разделенных символом ";". - // Первая часть - главное значение параметра запуска. - // Наличие дополнительных частей определяется логикой обработки главного параметра. - ПараметрыЗапуска = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ПараметрЗапуска, ";"); - ЗначениеПараметраЗапуска = Врег(ПараметрыЗапуска[0]); + // СтандартныеПодсистемы.ОбменДанными + Результат = ОбменДаннымиКлиент.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска); + // Конец СтандартныеПодсистемы.ОбменДанными // СтандартныеПодсистемы.ЗавершениеРаботыПользователей - Результат = СоединенияИБКлиент.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска); + Результат = СоединенияИБКлиент.ОбработатьПараметрыЗапуска(ЗначениеПараметраЗапуска, ПараметрыЗапуска) Или Результат; // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей - // Конец СтандартныеПодсистемы - - // Код конфигурации - // ... - // Конец кода конфигурации - - - // СтандартныеПодсистемы Возврат Результат; - // Конец СтандартныеПодсистемы КонецФункции -// Выполняется перед интерактивном началом работы пользователя с областью данных. -// Соответствует обработчику ПередНачаломРаботыСистемы -// -// Параметры: -// Отказ - Булево - отказ в от начала работы. Если параметр установить в Истина, -// начало работы с областью осуществлено не будет. -// -Процедура ПередНачаломРаботыСистемы(Отказ) Экспорт - - // СтандартныеПодсистемы - - // СтандартныеПодсистемы.Пользователи - ОшибкаАвторизации = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиентаПриЗапуске().ОшибкаАвторизации; - Если ЗначениеЗаполнено(ОшибкаАвторизации) Тогда - Предупреждение(ОшибкаАвторизации); - Отказ = Истина; - Возврат; - КонецЕсли; - // Конец СтандартныеПодсистемы.Пользователи - - СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); - ВерсияАктуальна = СтандартныеПодсистемыКлиент.ПроверитьВерсиюПлатформыПриЗапуске("ПередНачаломРаботы"); - Если Не ВерсияАктуальна Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - - // СтандартныеПодсистемы.ЗавершениеРаботыПользователей - СоединенияИБКлиент.ПередНачаломРаботыСистемы(Отказ); - Если Отказ Тогда - Возврат; - КонецЕсли; - // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей - - // СтандартныеПодсистемы.ОбновлениеВерсииИБ - Отказ = НЕ ОбновлениеИнформационнойБазыКлиент.ВозможноВыполнитьОбновлениеИнформационнойБазы(); - // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ - - // Конец СтандартныеПодсистемы - -КонецПроцедуры - // Соответствует обработчику ПередЗавершениемРаботыСистемы // Процедура ПередЗавершениемРаботыСистемы(Отказ) Экспорт - Если ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - СтандартныеПодсистемыКлиент.ОткрытьФормуПредупрежденийПриЗавершенииРаботы(Отказ); - КонецЕсли; - КонецПроцедуры -///////////////////////////////////////////////////////////////////////////////// -// БазоваяФункциональность -// - // Вызывается при завершении работы системы, чтобы запросить список предупреждений, // выводимых пользователю. // @@ -206,13 +192,24 @@ Процедура ПолучитьСписокПредупреждений(Предупреждения) Экспорт // СтандартныеПодсистемы.РезервноеКопированиеИБ - РезервноеКопированиеИБКлиент.ПриЗавершенииРаботыСистемы(Предупреждения); + РезервноеКопированиеИБКлиент.ПриЗавершенииРаботыСистемы(Предупреждения); // Конец СтандартныеПодсистемы.РезервноеКопированиеИБ + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + ОбменДаннымиВМоделиСервисаКлиент.ПриЗавершенииРаботыСистемы(Предупреждения); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // СтандартныеПодсистемы.ОбновлениеКонфигурации + // Предупреждение: при выставлении своего флажка подсистема "Обновление конфигурации" очищает список + // всех ранее добавленных предупреждений. + ОбновлениеКонфигурацииКлиент.ПриЗавершенииРаботыСистемы(Предупреждения); + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиКлиент.ПриЗавершенииРаботыСистемы(Предупреждения); // Конец СтандартныеПодсистемы.РаботаСФайлами - + + КонецПроцедуры // Вызывается при необходимости открыть форму списка активных пользователей, @@ -226,33 +223,25 @@ // СтандартныеПодсистемы.ЗавершениеРаботыПользователей ОткрытьФорму("Обработка.АктивныеПользователи.Форма.ФормаСпискаАктивныхПользователей"); + Возврат; // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + Предупреждение(НСтр("ru='Для того чтобы открыть список активных пользователей, перейдите в меню + |Все функции - Стандартные - Активные пользователи.'")); + КонецПроцедуры -// Вызывается при необходимости определить минимально необходимую версию платформы для запуска. -// -// -// Параметры: ПараметрыПроверки - ФиксированнаяСтруктура - список полей совпадает со списком параметров -// функции СтандартныеПодсистемыКлиент.ПроверитьВерсиюПлатформы(). -// -Процедура ПолучитьМинимальноНеобходимуюВерсиюПлатформы(ПараметрыПроверки) Экспорт - - -КонецПроцедуры - ///////////////////////////////////////////////////////////////////////////////// // Поставляемые данные -// // Выдает пользователю вопрос об обновлении из общих данных. // В случае утвердительного ответа, возвращает Истина. // Функция ОбновитьЭлементИзОбщихДанных(Знач Форма) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные Возврат ПоставляемыеДанныеКлиентСервер.ОбновитьЭлементИзОбщихДанных(Форма); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные КонецФункции @@ -261,18 +250,207 @@ // Процедура ИзменитьРазделенныйЭлемент(Знач Форма) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные ПоставляемыеДанныеКлиентСервер.ИзменитьРазделенныйЭлемент(Форма); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные КонецПроцедуры -Функция ИмяФормыВыбораКлассификатораВалют() Экспорт +// СтандартныеПодсистемы.ВариантыОтчетов + +///////////////////////////////////////////////////////////////////////////////// +// Варианты отчетов + +// Открывает форму дополнительного отчета с заданным вариантом. +// +// Параметры +// Вариант (Структура) +// |- Ссылка (СправочникСсылка.ВариантыОтчетов) +// |- Отчет (*) см. тип реквизита Отчет справочника ВариантыОтчетов. +// |- КлючВарианта (Строка) +// +Процедура ОткрытьВариантДополнительногоОтчета(Вариант) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса - Возврат "Справочник.КлассификаторВалют.ФормаВыбора"; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + Если ТипЗнч(Вариант.Отчет) = Тип("СправочникСсылка.ДополнительныеОтчетыИОбработки") Тогда + ДополнительныеОтчетыИОбработкиКлиент.ОткрытьВариантДополнительногоОтчета(Вариант.Отчет, Вариант.КлючВарианта); + КонецЕсли; + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки - ВызватьИсключение(НСтр("ru = 'Подсистема ""Валюты (в модели сервиса)"" не доступна'")) +КонецПроцедуры + +// Обработчик команд, добавленных динамически. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) Форма отчета. +// Команда (КомандаФормы) Команда, которая была вызвана. +// Результат (Булево) Истина, если вызов команды обработан. +// +Процедура ФормаОтчетаОбработчикКоманды(ЭтаФорма, Команда, Результат) Экспорт -КонецФункции + // СтандартныеПодсистемы.РассылкаОтчетов + РассылкаОтчетовКлиент.ФормаОтчетаОбработчикКоманды(ЭтаФорма, Команда, Результат); + // Конец СтандартныеПодсистемы.РассылкаОтчетов + +КонецПроцедуры + +// Обработчик результата выбора подчиненной формы. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) Форма отчета. +// ВыбранноеЗначение (*) Результат выбора в подчиненной форме. +// ИсточникВыбора (УправляемаяФорма) Форма, где осуществлен выбор. +// Результат (Булево) Истина, если результат выбора обработан. +// +Процедура ФормаОтчетаОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат) Экспорт + + // СтандартныеПодсистемы.РассылкаОтчетов + РассылкаОтчетовКлиент.ФормаОтчетаОбработкаВыбора(ЭтаФорма, ВыбранноеЗначение, ИсточникВыбора, Результат); + // Конец СтандартныеПодсистемы.РассылкаОтчетов + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ВариантыОтчетов + +// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +///////////////////////////////////////////////////////////////////////////////// +// Дополнительные отчеты и обработки + +// Открывает форму размещения нескольких вариантов отчетов по разделам КИ. +// +// Параметры +// МассивВариантов (Массив) См. описание вызываемых процедур и функций. +// +Процедура ОткрытьДиалогРамещенияВариантовДопольнительныхОтчетовВРазделах(МассивВариантов) Экспорт + + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетовКлиент.ОткрытьДиалогРамещенияВариантовВРазделах(МассивВариантов); + // Конец СтандартныеПодсистемы.ВариантыОтчетов + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +// СтандартныеПодсистемы.ПолнотекстовыйПоиск + +///////////////////////////////////////////////////////////////////////////////// +// Полнотекстовый поиск + +// Вызывается при открытии объекта из полнотекстового поиска +// Функция ПриОткрытииОбъекта позволяет настроить +// поведение при открытии результата из списка найденного в полнотекстовом поиске +// Например, это необходимо при использовании подсистемы "Бизнес-процессы и задачи". +// +// Параметры +// Значение - объект, найденный в полнотекстовом поиске, например СправочникСсылка +// СтандартнаяОбработка - Булево - по умолчанию Истина. +// Если поведение изменено (по собственной механике делается открытие формы для Значение), +// то СтандартнаяОбработка надо установить в Ложь +// +// При использовании подсистемы "Бизнес-процессы и задачи" нужно +// вписать следующий код: +// +//Если ТипЗнч(Значение) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда +// Если БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Значение) Тогда +// СтандартнаяОбработка = Ложь; +// КонецЕсли; +//КонецЕсли; +// +Процедура ПолнотекстовыйПоискПриОткрытииОбъекта(Значение, СтандартнаяОбработка) Экспорт + + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи + Если ТипЗнч(Значение) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда + Если БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Значение) Тогда + СтандартнаяОбработка = Ложь; + КонецЕсли; + КонецЕсли; + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск + +// СтандартныеПодсистемы.ПрефиксацияОбъектов + +///////////////////////////////////////////////////////////////////////////////// +// Префиксация объектов + +// Обработчик открытия формы активных пользователей для последующей установки блокировки на работу пользователей с ИБ. +// +// Параметры: +// СтандартнаяОбработка – Булево. Флаг стандартной обработки. Стандартная обработка не подразумевает никаких действий. +// Владелец – Форма. Форма, которая является владельцем по отношению к открываемой форме монитора активных пользователей. +// +Процедура ПриОткрытииФормыАктивныхПользователей(СтандартнаяОбработка, Владелец) Экспорт + + // СтандартныеПодсистемы.ЗавершениеРаботыПользователей + СоединенияИБКлиентПереопределяемый.ПриОткрытииФормыАктивныхПользователей(СтандартнаяОбработка, Владелец); + // Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ПрефиксацияОбъектов + + +// СтандартныеПодсистемы.РассылкаОтчетов + +///////////////////////////////////////////////////////////////////////////////// +// Рассылка отчетов + +// Открывает форму подбора дополнительных отчетов. +// +Процедура РассылкаОтчетовПодборДопОтчета(ЭлементФормы) Экспорт + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + ДополнительныйОтчет = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет"); + Отчет = ПредопределенноеЗначение("Перечисление.ВидыДополнительныхОтчетовИОбработок.Отчет"); + + ОтборПоВиду = Новый СписокЗначений; + ОтборПоВиду.Добавить(ДополнительныйОтчет, ДополнительныйОтчет); + ОтборПоВиду.Добавить(Отчет, Отчет); + + ПараметрыФормыВыбора = Новый Структура; + ПараметрыФормыВыбора.Вставить("РежимОткрытияОкна", РежимОткрытияОкнаФормы.Независимый); + ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина); + ПараметрыФормыВыбора.Вставить("ЗакрыватьПриВыборе", Ложь); + ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина); + ПараметрыФормыВыбора.Вставить("Отбор", Новый Структура("Вид", ОтборПоВиду)); + + ОткрытьФорму("Справочник.ДополнительныеОтчетыИОбработки.ФормаВыбора", ПараметрыФормыВыбора, ЭлементФормы); + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +КонецПроцедуры + +// Открывает форму папки со списком файлов. +// +Процедура РассылкаОтчетовПросмотрПапки(СтандартнаяОбработка, Папка) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + СтандартнаяОбработка = Ложь; + ПараметрыФормы = Новый Структура("Папка", Папка); + ОткрытьФорму("Справочник.Файлы.Форма.ХранилищеФайлов", ПараметрыФормы, , Папка); + // Конец СтандартныеПодсистемы.РаботаСФайлами + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.РассылкаОтчетов + +// СтандартныеПодсистемы.ОбменДанными + +///////////////////////////////////////////////////////////////////////////////// +// Обмен данными + +// Обновляет конфигурацию базы данных. +// +// Параметры: +// СтандартнаяОбработка - Булево - если в процедуре установить данному параметру значение Ложь, то инструкция по +// "ручному" обновлению показана не будет. +Процедура ВыполнитьОбновлениеИнформационнойБазы(СтандартнаяОбработка) Экспорт + // СтандартныеПодсистемы.ОбновлениеКонфигурации + СтандартнаяОбработка = Ложь; + ОткрытьФорму("Обработка.ОбновлениеКонфигурации.Форма.Форма"); + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ОбменДанными diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl index bb6b4be95..43a319a59 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентПовтИсп/Module.bsl @@ -15,19 +15,28 @@ // повторно используемых модулей, иначе запуск может привести // к непредсказуемым ошибкам и лишним серверным вызовам // +// Возвращаемое значение: +// ФиксированнаяСтруктура - структура параметров работы клиента при запуске. +// Функция ПараметрыРаботыКлиентаПриЗапуске() Экспорт - Возврат СтандартныеПодсистемыВызовСервераПереопределяемый.ПараметрыРаботыКлиентаПриЗапуске(); + Возврат СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиентаПриЗапуске(); КонецФункции // Возвращает структуру параметров, необходимых для работы // конфигурации на клиенте. // +// Возвращаемое значение: +// ФиксированнаяСтруктура - структура параметров работы клиента при запуске. +// Функция ПараметрыРаботыКлиента() Экспорт + ТекущаяДата = ТекущаяДата(); // текущая дата клиентского компьютера + ПараметрыРаботыКлиента = Новый Структура; - Для Каждого Параметр Из СтандартныеПодсистемыВызовСервераПереопределяемый.ПараметрыРаботыКлиента() Цикл + ПараметрыРаботы = СтандартныеПодсистемыВызовСервера.ПараметрыРаботыКлиента(); + Для Каждого Параметр Из ПараметрыРаботы Цикл ПараметрыРаботыКлиента.Вставить(Параметр.Ключ, Параметр.Значение); КонецЦикла; ПараметрыРаботыКлиента.ПоправкаКВремениСеанса = ПараметрыРаботыКлиента.ПоправкаКВремениСеанса - ТекущаяДата; diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверПереопределяемый/Module.bsl index c82f2b274..d665dd893 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыКлиентСерверПереопределяемый/Module.bsl @@ -1,10 +1,15 @@ //////////////////////////////////////////////////////////////////////////////// // Подсистема "Базовая функциональность". +// Переопределяемые процедуры и функции для интеграции между собой подсистем библиотеки БСП. // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +///////////////////////////////////////////////////////////////////////////////// +// Базовая функциональность +// // Вызывается при необходимости получить номер документа для вывода на печать. // diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыПереопределяемый/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыПереопределяемый/Module.bsl index 3ecbed86d..52050c3bb 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыПереопределяемый/Module.bsl @@ -1,10 +1,14 @@ //////////////////////////////////////////////////////////////////////////////// // Подсистема "Базовая функциональность". -// +// Переопределяемые процедуры и функции для интеграции между собой подсистем библиотеки БСП. +// //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +///////////////////////////////////////////////////////////////////////////////// +// Базовая функциональность // Возвращает признак, является ли конфигурация базовой. // @@ -39,22 +43,22 @@ Обработчики = Новый Соответствие; // СтандартныеПодсистемы.ОбменДанными - Обработчики.Вставить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); - Обработчики.Вставить("ОбменДаннымиВключен", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); - Обработчики.Вставить("ИспользуемыеПланыОбмена", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); - Обработчики.Вставить("ПравилаВыборочнойРегистрацииОбъектов", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); - Обработчики.Вставить("ПравилаРегистрацииОбъектов", "ОбменДаннымиСервер.УстановкаПараметровСеанса"); + Обработчики.Вставить("ДатаОбновленияПовторноИспользуемыхЗначенийМРО", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); + Обработчики.Вставить("ОбменДаннымиВключен", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); + Обработчики.Вставить("ИспользуемыеПланыОбмена", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); + Обработчики.Вставить("ПравилаВыборочнойРегистрацииОбъектов", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); + Обработчики.Вставить("ПравилаРегистрацииОбъектов", "ОбменДаннымиВызовСервера.УстановкаПараметровСеанса"); // Конец СтандартныеПодсистемы.ОбменДанными // СтандартныеПодсистемы.УправлениеДоступом - Обработчики.Вставить("ОграничиватьДоступПоВиду*", "УправлениеДоступом.УстановкаПараметровСеанса"); - Обработчики.Вставить("ВидыДоступа*", "УправлениеДоступом.УстановкаПараметровСеанса"); - Обработчики.Вставить("ДобавлятьРуководителямДоступПодчиненных", "УправлениеДоступом.УстановкаПараметровСеанса"); + Обработчики.Вставить("ОграничиватьДоступПоВиду*", "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ВидыДоступа*", "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ДобавлятьРуководителямДоступПодчиненных", "УправлениеДоступомСлужебный.УстановкаПараметровСеанса"); // Конец СтандартныеПодсистемы.УправлениеДоступом // СтандартныеПодсистемы.Пользователи - Обработчики.Вставить("ТекущийПользователь", "Пользователи.УстановкаПараметровСеанса"); - Обработчики.Вставить("ТекущийВнешнийПользователь", "Пользователи.УстановкаПараметровСеанса"); + Обработчики.Вставить("ТекущийПользователь", "ПользователиСлужебный.УстановкаПараметровСеанса"); + Обработчики.Вставить("ТекущийВнешнийПользователь", "ПользователиСлужебный.УстановкаПараметровСеанса"); // Конец СтандартныеПодсистемы.Пользователи // СтандартныеПодсистемы.ОценкаПроизводительности @@ -65,6 +69,149 @@ КонецФункции +// Возвращает список процедур-обработчиков обновления библиотеки. +// +// Здесь в алфавитном порядке размещаются только процедуры-обработчики обновления +// библиотечных подсистем, которые используются в данной конфигурации. +// Процедуры-обработчики обновления самой конфигурации следует размещать в функции +// ОбработчикиОбновления общего модуля ОбновлениеИнформационнойБазыПереопределяемый. +// +// Возвращаемое значение: +// ТаблицаЗначений - описание полей структуры см. в функции +// ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления() +// +Функция ОбработчикиОбновленияСтандартныхПодсистем() Экспорт + + Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); + + // Подключаются процедуры-обработчики обновления библиотеки + + // СтандартныеПодсистемы.АдресныйКлассификатор + АдресныйКлассификатор.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + СтандартныеПодсистемыСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); + + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи + БизнесПроцессыИЗадачиСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи + + // СтандартныеПодсистемы.ВариантыОтчетов + ВариантыОтчетов.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ВариантыОтчетов + + // СтандартныеПодсистемы.Взаимодействия + Взаимодействия.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.Взаимодействия + + // СтандартныеПодсистемы.Валюты + РаботаСКурсамиВалют.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.Валюты + + // СтандартныеПодсистемы.ДатыЗапретаИзменения + ДатыЗапретаИзмененияСлужебный.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + + // СтандартныеПодсистемы.КалендарныеГрафики + КалендарныеГрафики.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.КалендарныеГрафики + + // СтандартныеПодсистемы.КонтактнаяИнформация + УправлениеКонтактнойИнформацией.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.КонтактнаяИнформация + + // СтандартныеПодсистемы.ОбменДанными + ОбменДаннымиСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + ОбменДаннымиВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + ОбменСообщениямиВнутренний.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + + // СтандартныеПодсистемы.ОбновлениеКонфигурации + ОбновлениеКонфигурации.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса + ОбновлениеИнформационнойБазыВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса + + // СтандартныеПодсистемы.ПолнотекстовыйПоиск + ПолнотекстовыйПоискСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск + + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + ПолучениеФайловИзИнтернета.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + + // СтандартныеПодсистемы.Пользователи + ПользователиСлужебный.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.Пользователи + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + + // СтандартныеПодсистемы.РаботаСПочтовымиСообщениями + ЭлектроннаяПочта.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаСПочтовымиСообщениями + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ФайловыеФункции + ФайловыеФункцииСлужебный.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ФайловыеФункции + + // СтандартныеПодсистемы.РегламентныеЗадания + РегламентныеЗаданияСлужебный.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РегламентныеЗадания + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + ОчередьЗаданий.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.Свойства + + // СтандартныеПодсистемы.УправлениеДоступом + УправлениеДоступомСлужебный.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.УправлениеДоступом + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + УправлениеДоступомВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + + // СтандартныеПодсистемы.ФизическиеЛица + ФизическиеЛица.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ФизическиеЛица + + // СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись + ЭлектроннаяЦифроваяПодпись.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + КурсыВалютВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + + Возврат Обработчики; + +КонецФункции + // Возвращает список имен объектов метаданных, данные которых могут содержать ссылки на различные объекты метаданных, // но при этом эти ссылки не должны учитываться в бизнес-логике приложения. // @@ -130,6 +277,1525 @@ КонецФункции +// Возвращает флаг доступности подсистемы ПолучениеФайловИзИнтернета. +// +// ВозвращаемоеЗначение - Булево - +// Истина - подсистема доступна, любое другое значение - подсистемв +// не доступна +// +Процедура ДоступноПолучениеФайловИзИнтернета(ВозвращаемоеЗначение) Экспорт + + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + ВозвращаемоеЗначение = Истина; + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + +КонецПроцедуры + +// Получить файл из Интернета по протоколу http(s), либо ftp и сохранить его во временный файл. +// +// Параметры: +// URL - Строка - url файла в формате +// [Протокол://]<Сервер>/<Путь к файлу на сервере> +// ПараметрыПолучения - Структура со свойствами +// ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла +// Пользователь - Строка - пользователь от имени которого установлено соединение +// Пароль - Строка - пароль пользователя от которого установлено соединение +// Порт - Число - порт сервера с которым установлено соединение +// ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, +// что соединение должно производиться через https +// ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, +// что соединение должно пассивным (или активным) +// ВозвращаемоеЗначение - (выходной параметр) +// Структура, со свойствами +// Статус - Булево - ключ присутствует в структуре всегда, значения +// Истина - вызов функции успешно завершен +// Ложь - вызов функции завершен неудачно +// Путь - Строка - путь к файлу на сервере, ключ используется только +// если статус Истина +// СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь +// +Процедура СкачатьФайлНаСервере(Знач Адрес, Знач ПараметрыПолучения, ВозвращаемоеЗначение) Экспорт + + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + ВозвращаемоеЗначение = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(Адрес, ПараметрыПолучения); + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + +КонецПроцедуры + +// Заполняет переименования тех объектов метаданных, которые невозможно +// автоматически найти по типу, но ссылки на которые требуется сохранять +// в базе данных (например: подсистемы, роли). +// +// Подробнее: см. ОбщегоНазначения.ДобавитьПереименование(). +// +Процедура ЗаполнитьТаблицуПереименованияОбъектовМетаданных(Итог) Экспорт + + Библиотека = "СтандартныеПодсистемы"; + + // СтандартныеПодсистемы.АнализЖурналаРегистрации + ОбщегоНазначения.ДобавитьПереименование(Итог, + "2.1.0.1", + "Подсистема.СтандартныеПодсистемы.Подсистема.КонтрольЖурналаРегистрации", + "Подсистема.СтандартныеПодсистемы.Подсистема.АнализЖурналаРегистрации", + Библиотека); + // Конец СтандартныеПодсистемы.АнализЖурналаРегистрации + + ОбщегоНазначения.ДобавитьПереименование(Итог, + "2.0.1.2", + "Роль.ДобавлениеИзменениеОбщихПоставляемыхДанных", + "Роль.ДобавлениеИзменениеОбщейБазовойНСИ", + Библиотека); + + // СтандартныеПодсистемы.ВариантыОтчетов + ОбщегоНазначения.ДобавитьПереименование( + Итог, "2.1.0.2", "Роль.ЧтениеВариантовОтчетов", "Роль.ИспользованиеВариантовОтчетов", Библиотека); + // Конец СтандартныеПодсистемы.ВариантыОтчетов + +КонецПроцедуры + +// Устанавливает текстовое описание предмета +// +// Параметры +// СсылкаНаПредмет – ЛюбаяСсылка – объект ссылочного типа. +// Представление - Строка - сюда необходимо поместить текстовое описание. +Процедура УстановитьПредставлениеПредмета(СсылкаНаПредмет, Представление) Экспорт + + // СтандартныеПодсистемы.БизнесПроцессыИЗадачи + Если ТипЗнч(СсылкаНаПредмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда + ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; + Если ПустаяСтрока(ПредставлениеОбъекта) Тогда + ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); + КонецЕсли; + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "%1 (%2)", СсылкаНаПредмет.Наименование, ПредставлениеОбъекта); + КонецЕсли; + // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи + + // СтандартныеПодсистемы.Взаимодействия + Если ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ + ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") ИЛИ + ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ТелефонныйЗвонок") ИЛИ + ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.Встреча") ИЛИ + ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда + + ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; + Если ПустаяСтрока(ПредставлениеОбъекта) Тогда + ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); + КонецЕсли; + Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + "%1 (%2)", СсылкаНаПредмет.Тема, ПредставлениеОбъекта); + + КонецЕсли; + // Конец СтандартныеПодсистемы.Взаимодействия + +КонецПроцедуры + +// Функция создает таблицу соответствия разделенных типов данных общим данным +// +// Возвращаемое значение: +// ТаблицаЗначений - соответствия типов данных +// +Функция ТаблицаСоответствияРазделенныхДанныхОбщим() Экспорт + + ТаблицаЗначений = Новый ТаблицаЗначений; + + ТаблицаЗначений.Колонки.Добавить("ВидПоставляемыхДанных"); + ТаблицаЗначений.Колонки.Добавить("ТипОбщихДанных"); + ТаблицаЗначений.Колонки.Добавить("ТипРазделенныхДанных"); + ТаблицаЗначений.Колонки.Добавить("КопироватьВоВсеОбластиДанных"); + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаЗначений); + ПоставляемыеДанныеПереопределяемый.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаЗначений); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + Возврат ТаблицаЗначений; + +КонецФункции + +// Блокирует текущую область, начиная транзакцию и накладывая исключительную блокировку +// на все разделяемые объекты метаданных области. +// +// Параметры: +// ПроверитьОтсутствиеДругихСеансов - Булево - проверить отсутствие других +// пользовательских сеансов со значением разделителя равным текущему. +// В случае обнаружения других сеансов будет выдано исключение. +// +Процедура ЗаблокироватьТекущуюОбластьДанных(Знач ПроверитьОтсутствиеДругихСеансов = Истина) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + НачатьТранзакцию(); + РаботаВМоделиСервиса.ЗаблокироватьТекущуюОбластьДанных(ПроверитьОтсутствиеДругихСеансов); + + Возврат; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); + +КонецПроцедуры + +// Снимает блокировки с текущей области, фиксируя (или, в случае ошибки, откатывая) транзакцию. +// +Процедура РазблокироватьТекущуюОбластьДанных() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + // Если ИнформацияОбОшибке().Описание заполнено - код выполняется + // из Исключение ... + Если ПустаяСтрока(ИнформацияОбОшибке().Описание) Тогда + ЗафиксироватьТранзакцию(); + Иначе + ОтменитьТранзакцию(); + КонецЕсли; + + Возврат; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); + +КонецПроцедуры + +// Вызывается при включении разделения данных по областям данных. +// +Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + ОчередьЗаданий.ОбновитьРазделенныеРегламентныеЗадания(); + + Если Константы.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.Получить() = 0 Тогда + Константы.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.Установить(600); + КонецЕсли; + + Если Константы.МаксимальноеКоличествоИсполняющихФоновыхЗаданий.Получить() = 0 Тогда + Константы.МаксимальноеКоличествоИсполняющихФоновыхЗаданий.Установить(1); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + + // СтандартныеПодсистемы.КонтактнаяИнформация + УправлениеКонтактнойИнформацией.УдалитьЭлементыСправочникаСтраныМира(); + // Конец СтандартныеПодсистемы.КонтактнаяИнформация + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + РаботаВМоделиСервисаПереопределяемый.ПриВключенииРазделенияПоОбластямДанных(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +///////////////////////////////////////////////////////////////////////////////// +// Обмен данными РИБ + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриОтправкеДанныхПодчиненному() в синтаксис-помощнике. +// +Процедура ПриОтправкеДанныхПодчиненному(Источник = Неопределено, ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза) Экспорт + + // СтандартныеПодсистемы.ОбменДанными + // Вставка кода от подсистемы обмена данными должна быть первой. + ОбменДаннымиСобытия.ПриОтправкеДанныхКорреспонденту(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Источник); + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиСлужебный.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Источник); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Источник); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + ОбновлениеИнформационнойБазыСобытия.ПриОтправкеВерсийПодсистем(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза); + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + + // СтандартныеПодсистемы.Пользователи + ПользователиСлужебный.ПриОтправкеПользователя(ЭлементДанных, ОтправкаЭлемента); + // Конец СтандартныеПодсистемы.Пользователи + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + // Вставка кода от подсистемы обмена данными в модели сервиса должна быть последней. + ОбменДаннымиВМоделиСервиса.ПриОтправкеДанныхПодчиненному(ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза, Источник); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриОтправкеДанныхГлавному() в синтаксис-помощнике. +// +Процедура ПриОтправкеДанныхГлавному(Источник = Неопределено, ЭлементДанных, ОтправкаЭлемента) Экспорт + + // Вставка кода от подсистемы обмена данными должна быть первой. + // При отправке данных главному обработчик не вызываем, + // т.к. ограничение миграции "снизу-вверх" в РИБ по умолчанию не предусмотрено. + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиСлужебный.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + + // СтандартныеПодсистемы.ОбновлениеВерсииИБ + ОбновлениеИнформационнойБазыСобытия.ПриОтправкеВерсийПодсистем(ЭлементДанных, ОтправкаЭлемента); + // Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + + // СтандартныеПодсистемы.Пользователи + ПользователиСлужебный.ПриОтправкеПользователя(ЭлементДанных, ОтправкаЭлемента); + // Конец СтандартныеПодсистемы.Пользователи + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриПолученииДанныхОтПодчиненного() в синтаксис-помощнике. +// +Процедура ПриПолученииДанныхОтПодчиненного(Источник = Неопределено, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиСлужебный.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + ДополнительныеОтчетыИОбработки.ПриПолученииДополнительнойОбработки(ЭлементДанных, ПолучениеЭлемента); + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + + // СтандартныеПодсистемы.Пользователи + ПользователиСлужебный.ПриПолученииПользователя(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад); + // Конец СтандартныеПодсистемы.Пользователи + + // СтандартныеПодсистемы.УправлениеДоступом + УправлениеДоступомСлужебный.ПриПолученииДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад); + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +// Процедура является обработчиком одноименного события, возникающего при обмене данными в распределенной информационной базе. +// +// Параметры: +// см. описание обработчика события ПриПолученииДанныхОтГлавного() в синтаксис-помощнике. +// +Процедура ПриПолученииДанныхОтГлавного(Источник = Неопределено, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиСлужебный.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + ДополнительныеОтчетыИОбработки.ПриПолученииДополнительнойОбработки(ЭлементДанных, ПолучениеЭлемента); + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + + // СтандартныеПодсистемы.Пользователи + ПользователиСлужебный.ПриПолученииПользователя(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад); + // Конец СтандартныеПодсистемы.Пользователи + +КонецПроцедуры + +///////////////////////////////////////////////////////////////////////////////// +// Разделение данных + +// Устанавливает разделение сеанса. +// +// Параметры: +// Использование - Булево - Использование разделителя ОбластьДанных в сеансе +// ОбластьДанных - Число - Значение разделителя ОбластьДанных +// +Процедура УстановитьРазделениеСеанса(Знач Использование, Знач ОбластьДанных = Неопределено) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Использование, ОбластьДанных); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Возвращает значение разделителя текущей области данных. +// В случае если значение не установлено выдается ошибка. +// +// Возвращаемое значение: +// Тип значения разделителя. +// Значение разделителя текущей области данных. +// +Функция ЗначениеРазделителяСеанса() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + Возврат РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); + +КонецФункции + +// Возвращает флаг использования разделителя ОбластьДанных для текущего сеанса. +// +// Возвращаемое значение: +// Булево - Истина разделение используется, иначе нет. +// +Функция ИспользованиеРазделителяСеанса() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + Возврат РаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + + ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); + +КонецФункции + +///////////////////////////////////////////////////////////////////////////////// +// Поставляемые данные + +// Процедура копирует список элементов общего справочника в новую область данных +// +// Параметры: +// СписокКодовСправочника - массив - массив кодов справочника +// ТипИсточника - тип - тип общего справочника, +// откуда будут скопированы элементы +// +Процедура СкопироватьЭлементыСправочникаПоставляемыхДанных(СписокКодовСправочника, ТипИсточника) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.СкопироватьЭлементыСправочника(СписокКодовСправочника, ТипИсточника); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Считывает текущее состояние разделенного объекта и приводит форму +// в соответстие с ним +// +Процедура СчитатьФлагРучногоИзмененияПоставляемыхДанных(Знач Форма) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.СчитатьФлагРучногоИзменения(Форма); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Записывает состояние разделенного объекта +// +Процедура ЗаписатьФлагРучногоИзменениеПоставляемыхДанных(Знач Форма) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.ЗаписатьФлагРучногоИзменение(Форма); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Копирует данные общего объекта в разделенный и изменяет +// состояние разделенного объекта +// +Процедура ВосстановитьЭлементИзОбщихДанных(Знач Форма) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.ВосстановитьЭлементИзОбщихДанных(Форма); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +///////////////////////////////////////////////////////////////////////////////// +// Версионирование программных интерфейсов + +// Заполняет структуру массивами поддерживаемых версий всех подлежащих версионированию подсистем, +// используя в качестве ключей названия подсистем. +// Обеспечивает функциональность Web-сервиса InterfaceVersion. +// При внедрении надо поменять тело процедуры так, чтобы она возвращала актуальные наборы версий (см. пример.ниже). +// +// Параметры: +// СтруктураПоддерживаемыхВерсий - Структура: +// - Ключи = Названия подсистем. +// - Значения = Массивы названий поддерживаемых версий. +// +// Пример реализации: +// +// // СервисПередачиФайлов +// МассивВерсий = Новый Массив; +// МассивВерсий.Добавить("1.0.1.1"); +// МассивВерсий.Добавить("1.0.2.1"); +// СтруктураПоддерживаемыхВерсий.Вставить("СервисПередачиФайлов", МассивВерсий); +// // Конец СервисПередачиФайлов +// +Процедура ПолучитьПоддерживаемыеВерсииПрограммныхИнтерфейсов(Знач СтруктураПоддерживаемыхВерсий) Экспорт + + // СтандартныеПодсистемы.ОбменДанными + МассивВерсий = Новый Массив; + МассивВерсий.Добавить("2.0.1.6"); + МассивВерсий.Добавить("2.1.1.7"); + СтруктураПоддерживаемыхВерсий.Вставить("ОбменДанными", МассивВерсий); + // Конец СтандартныеПодсистемы.ОбменДанными + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + МассивВерсий = Новый Массив; + МассивВерсий.Добавить("2.0.1.6"); + МассивВерсий.Добавить("2.1.1.7"); + СтруктураПоддерживаемыхВерсий.Вставить("ОбменДаннымиВМоделиСервиса", МассивВерсий); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + МассивВерсий = Новый Массив; + МассивВерсий.Добавить("2.0.1.6"); + МассивВерсий.Добавить("2.1.1.7"); + СтруктураПоддерживаемыхВерсий.Вставить("ОбменСообщениями", МассивВерсий); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + МассивВерсий = Новый Массив; + МассивВерсий.Добавить("1.0.1.1"); + СтруктураПоддерживаемыхВерсий.Вставить("РезервноеКопированиеОбластейДанных", МассивВерсий); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + +КонецПроцедуры + +// СтандартныеПодсистемы.БизнесПроцессыИЗадачи + +///////////////////////////////////////////////////////////////////////////////// +// Бизнес-процессы и задачи + +// Возвращает адрес электронной почты пользователя Получатель для рассылки уведомлений о задачах. +// +// Параметры +// Получатель – СправочникСсылка.Пользователи +// Адрес - Строка – возвращаемый адрес электронной почты. +// +// +Процедура ПолучитьАдресЭлектроннойПочты(Знач Получатель, Адрес) Экспорт + + // СтандартныеПодсистемы.КонтактнаяИнформация + Адрес = УправлениеКонтактнойИнформацией.ПолучитьКонтактнуюИнформацияОбъекта( + Получатель, Справочники.ВидыКонтактнойИнформации.EmailПользователя); + // Конец СтандартныеПодсистемы.КонтактнаяИнформация + +КонецПроцедуры + +// Возвращает Истина, если используется подсистема ВнешниеЗадачиИБизнесПроцессы +Функция ИспользоватьВнешниеЗадачиИБизнесПроцессы() Экспорт + + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + Возврат Истина; + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + Возврат Ложь; + +КонецФункции + +// Возвращает содержание переданного объекта для передачи в другую информационную систему. +// +// Параметры +// ПредметЗадачи - объект, представление которого надо сформировать +// Представление - Строка - содержание в виде HTML или MXL документа +// +Процедура ПолучитьПредставлениеПредметаВнешнейЗадачи(ПредметЗадачи, Представление) Экспорт + + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + Представление = ВнешниеЗадачиВызовСервера.ПолучитьПредставлениеПредметаВнешнейЗадачи(ПредметЗадачи); + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + +КонецПроцедуры + +// Возвращает массив объектов типа ОписаниеПередаваемогоФайла или Неопределено. +// +// Параметры +// ПредметЗадачи - объект, список файлов которого надо вернуть +// СписокФайлов - Массив - список файлов предмета +// +Процедура ПолучитьСписокФайлов(ПредметЗадачи, СписокФайлов) Экспорт + + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + СписокФайлов = ВнешниеЗадачиВызовСервера.ПолучитьСписокФайлов(ПредметЗадачи); + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + +КонецПроцедуры + +// Возвращает Истина, если задача является внешней. +// +// Параметры +// ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя +// +Функция ЭтоВнешняяЗадача(ЗадачаСсылка) Экспорт + + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + Возврат ВнешниеЗадачиВызовСервера.ЭтоВнешняяЗадача(ЗадачаСсылка); + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + Возврат Ложь; + +КонецФункции + +// Помечает задачу-источник бизнес-процесса БизнесПроцесс как выполненную. +// +// Параметры +// БизнесПроцесс - БизнесПроцессОбъект.Задание +// +Процедура ВыполнитьЗадачуИсточник(БизнесПроцесс) Экспорт + + // СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + ВнешниеЗадачиВызовСервера.ВыполнитьЗадачуИсточник(БизнесПроцесс); + // Конец СтандартныеПодсистемы.ВнешниеБизнесПроцессыИЗадачи + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи + + +// СтандартныеПодсистемы.ВариантыОтчетов + +///////////////////////////////////////////////////////////////////////////////// +// Варианты отчетов + +// Заменяет тип и ссылку внешнего отчета для дополнительных отчетов, подключенных +// к хранилищу подсистемы. +// +// Параметры: +// Результат (Структура) см. ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени() +// +Процедура ЗаменитьТипИСсылкуЕслиОтчетДополнительный(Результат) Экспорт + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + + ТекстЗапроса = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ДопОтчет.Ссылка + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчет + |ГДЕ + | ДопОтчет.ИмяОбъекта = &ИмяОбъекта + | И ДопОтчет.ПометкаУдаления = ЛОЖЬ + | И ДопОтчет.ИспользуетХранилищеВариантов = ИСТИНА + | И ДопОтчет.Публикация = &Публикация"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ИмяОбъекта", Результат.ОтчетИмя); + Если ВариантыОтчетов.ПодключеныВсеОтчеты() Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И ДопОтчет.ИспользуетХранилищеВариантов = ИСТИНА", ""); + КонецЕсли; + Запрос.Текст = ТекстЗапроса; + + // Привелегированный режим необходим для целостности формируемых данных. + // Права доступа будут применяться на этапе их использования. + УстановитьПривилегированныйРежим(Истина); + + ОтчетНайден = Истина; + + Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Используется); + Выборка = Запрос.Выполнить().Выбрать(); + + Если НЕ Выборка.Следующий() Тогда + + Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки); + Выборка = Запрос.Выполнить().Выбрать(); + + Если НЕ Выборка.Следующий() Тогда + + Запрос.УстановитьПараметр("Публикация", Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена); + Выборка = Запрос.Выполнить().Выбрать(); + + Если НЕ Выборка.Следующий() Тогда + + ОтчетНайден = Ложь; + + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Если ОтчетНайден Тогда + Результат.Отчет = Выборка.Ссылка; + Результат.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный; + КонецЕсли; + + УстановитьПривилегированныйРежим(Ложь); + + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +КонецПроцедуры // ЗаменитьТипИСсылкуЕслиОтчетДополнительный + +// Дополняет массив ссылкам дополнительных отчетов, доступных текущему пользователю. +// +// Параметры: +// Результат (Массив) из (*) см. тип реквизита Отчет справочника ВариантыОтчетов. +// Ссылки отчетов, доступных текущему пользователю. +// +Процедура ДобавитьДополнительныеОтчетыДоступныеТекущемуПользователю(Результат) Экспорт + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + + Если ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ДопОтчеты.Ссылка + |ИЗ + | Справочник.ДополнительныеОтчетыИОбработки КАК ДопОтчеты + |ГДЕ + | ДопОтчеты.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет) + | И ДопОтчеты.ИспользуетХранилищеВариантов + | И НЕ ДопОтчеты.Ссылка В (&МассивСсылок)"; + Запрос.УстановитьПараметр("МассивСсылок", Результат); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + Результат.Добавить(Выборка.Ссылка); + КонецЦикла; + КонецЕсли; + + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +КонецПроцедуры // ДополнитьОтчетыТекущегоПользователя + +// Вызывается в одноименном обработчике формы отчета после выполнения кода формы. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) +// Остальные параметры передаются из параметров обработчика "как есть", +// см. события для "УправляемаяФорма" в справке. +// +Процедура ФормаОтчетаПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт + + // СтандартныеПодсистемы.РассылкаОтчетов + РассылкаОтчетов.ФормаОтчетаДобавитьКоманды(ЭтаФорма, Отказ, СтандартнаяОбработка); + // Конец СтандартныеПодсистемы.РассылкаОтчетов + +КонецПроцедуры + +// Обновляет переименовывает роли в данных конфигурации. +// +Процедура ОбновитьПереименованныеРоли(ТаблицаПереименований) Экспорт + + // СтандартныеПодсистемы.УправлениеДоступом + УправлениеДоступом.ОбновитьПереименованныеРоли(ТаблицаПереименований) + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ВариантыОтчетов + +// СтандартныеПодсистемы.ДатыЗапретаИзменения + +///////////////////////////////////////////////////////////////////////////////// +// Даты запрета изменения + +// Позволяет пропустить проверку запретов по произвольному условию. +// Подробнее см. ДатыЗапретаИзмененияПереопределяемый.ПередПроверкойЗапретаИзменения. +// +Процедура ПередПроверкойЗапретаИзменения(Объект, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете) Экспорт + + // СтандартныеПодсистемы.ОбменДанными + ОбменДаннымиСобытия.ПередПроверкойЗапретаИзменения(Объект, СтандартнаяОбработка, УзелПланаОбмена, СообщитьОЗапрете); + // Конец СтандартныеПодсистемы.ОбменДанными + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ДатыЗапретаИзменения + +// СтандартныеПодсистемы.Валюты + +///////////////////////////////////////////////////////////////////////////////// +// Валюты + +// Обновляет связи между справочником валют и файлом поставляемых курсов +// в зависимости от флажка ЗагружаетсяИзИнтернета +// +// Параметры: +// Валюта - СправочникОбъект.Валюты +// +Функция ОбновитьКурсыВалютВМоделиСервиса(Валюта) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + КурсыВалютВМоделиСервиса.ЗапланироватьКопированиеКурсовВалюты(Валюта); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + +КонецФункции + +// Конец СтандартныеПодсистемы.Валюты + +// СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +///////////////////////////////////////////////////////////////////////////////// +// Дополнительные отчеты и обработки + +// Обновляет варианты дополнительного отчета при его записи. +// +// Параметры: +// ТекущийОбъект (*) См. Источник подписки ОбработкаВариантовДополнительногоОтчета. +// Отказ (Булево) +// +Процедура ОбработкаВариантовДополнительногоОтчета(ТекущийОбъект, Отказ) Экспорт + + // СтандартныеПодсистемы.ВариантыОтчетов + + Если Отказ ИЛИ ТекущийОбъект.ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + + Если ТекущийОбъект.Вид <> Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет + И ТекущийОбъект.Вид <> Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + Возврат; + КонецЕслИ; + + Если НЕ ПравоДоступа("Чтение", Метаданные.Справочники.ВариантыОтчетов) Тогда + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав доступа для записи вариантов дополнительного отчета ""%1"".'"), + ТекущийОбъект.Наименование + ); + ВариантыОтчетов.ОшибкаПоВарианту(ТекущийОбъект.Ссылка, ТекстОшибки); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки); + Возврат; + КонецЕсли; + + Если ТекущийОбъект.ЭтоНовый() Тогда + ВнешнийОбъект = ВнешниеОтчеты.Создать(ТекущийОбъект.ИмяОбъекта); + Иначе + ВнешнийОбъект = ДополнительныеОтчетыИОбработки.ПолучитьОбъектВнешнейОбработки(ТекущийОбъект.Ссылка); + КонецЕсли; + + ПометкаУдаления = ТекущийОбъект.ПометкаУдаления; + Если НЕ ТекущийОбъект.ИспользуетХранилищеВариантов + ИЛИ ТекущийОбъект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.Отключена + ИЛИ ТекущийОбъект.Публикация = Перечисления.ВариантыПубликацииДополнительныхОтчетовИОбработок.РежимОтладки Тогда + ПометкаУдаления = Истина; + КонецЕсли; + + ПредопределенныеВарианты = Новый СписокЗначений; + Если ТекущийОбъект.ИспользуетХранилищеВариантов Тогда + ОтчетМетаданные = ВнешнийОбъект.Метаданные(); + СхемаКДМетаданные = ОтчетМетаданные.ОсновнаяСхемаКомпоновкиДанных; + Если СхемаКДМетаданные <> Неопределено Тогда + СхемаКД = ВнешнийОбъект.ПолучитьМакет(СхемаКДМетаданные.Имя); + Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл + ПредопределенныеВарианты.Добавить(ВариантНастроекКД.Имя, ВариантНастроекКД.Представление); + КонецЦикла; + Иначе + ПредопределенныеВарианты.Добавить("", ОтчетМетаданные.Представление()); + КонецЕсли; + КонецЕсли; + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.КлючВарианта, + | ВариантыОтчетов.Пользовательский, + | ВариантыОтчетов.ПометкаУдаления, + | ВариантыОтчетов.Наименование + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Отчет", ТекущийОбъект.Ссылка); + Запрос.УстановитьПараметр("ПометкаУдаления", ПометкаУдаления); + Запрос.Текст = ТекстЗапроса; + + // Установить пометки удаления существующих + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ПометкаУдаленияВарианта = ПометкаУдаления; + ЭлементСписка = ПредопределенныеВарианты.НайтиПоЗначению(Выборка.КлючВарианта); + Если НЕ ПометкаУдаленияВарианта И НЕ Выборка.Пользовательский И ЭлементСписка = Неопределено Тогда + // Предопределенный вариант, который не найден в списке предопределенных для данного отчета + ПометкаУдаленияВарианта = Истина; + КонецЕсли; + + Если Выборка.ПометкаУдаления <> ПометкаУдаленияВарианта Тогда + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.ДополнительныеСвойства.Вставить("ЗаполнениеПредопределенных", Истина); + ВариантОбъект.УстановитьПометкуУдаления(ПометкаУдаленияВарианта); + КонецЕсли; + + Если ЭлементСписка <> Неопределено Тогда + ПредопределенныеВарианты.Удалить(ЭлементСписка); + Если Выборка.Наименование <> ЭлементСписка.Представление Тогда + ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ВариантОбъект.Наименование = ЭлементСписка.Представление; + ВариантОбъект.Записать(); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если НЕ ПометкаУдаления Тогда + // Зарегистрировать новые + Для Каждого ЭлементСписка Из ПредопределенныеВарианты Цикл + ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); + ВариантОбъект.Отчет = ТекущийОбъект.Ссылка; + ВариантОбъект.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный; + ВариантОбъект.КлючВарианта = ЭлементСписка.Значение; + ВариантОбъект.Наименование = ЭлементСписка.Представление; + ВариантОбъект.Пользовательский = Ложь; + ВариантОбъект.ВидимостьПоУмолчанию = Истина; + ВариантОбъект.Записать(); + КонецЦикла; + КонецЕсли; + + // Конец СтандартныеПодсистемы.ВариантыОтчетов + +КонецПроцедуры // ОбработкаВариантовДополнительногоОтчета + +// Обработчик, вызываемый при записи регламентного задания по выполнению дополнительной обработки. +// +// Параметры: +// РегламентноеЗадание - РегламентноеЗадание - записываемое регламентное задание. +// Использование - Булево - флаг использования задания. +// +Процедура ПриЗаписиЗаданияДополнительнойОбработки(РегламентноеЗадание, Использование) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса + ДополнительныеОтчетыИОбработкиВМоделиСервиса.УточнитьПараметрыЗаданияВОчереди(РегламентноеЗадание, Использование); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса + +КонецПроцедуры + +// Формирует ссылку варианта дополнительного отчета. +// +// Параметры: +// Отчет (СправочникСсылка.ДополнительныеОтчетыИОбработки) +// КлючВарианта (Строка) +// Результат (*) См. описание вызываемых процедур и функций. +// +Процедура СсылкаВариантаДополнительногоОтчета(Отчет, КлючВарианта, Результат) Экспорт + + // СтандартныеПодсистемы.ВариантыОтчетов + Результат = ВариантыОтчетов.ПолучитьСсылку(Отчет, КлючВарианта); + // Конец СтандартныеПодсистемы.ВариантыОтчетов + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + + +// СтандартныеПодсистемы.ЗавершениеРаботыПользователей + +///////////////////////////////////////////////////////////////////////////////// +// Завершение работы пользователей + +// Вызывается при отключении сеанса на стороне сервера 1С:Предприятия. +// +// Параметры +// НомерСеанса - Число - номер сеанса для отключения. +// Результат - Булево – результат отключения сеанса. +// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи. +// СтандартнаяОбработка - Булево - вернуть Ложь, если необходимо запретить стандартную обработку отключения сеанса. +// +Процедура ПриОтключенииСеанса(НомерСеанса, Результат, СообщениеОбОшибке, СтандартнаяОбработка) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + Возврат; + КонецЕсли; + + // Если сервер работает не под управлением ОС Microsoft Windows, то передаем управление Агенту сервиса. + СтандартнаяОбработка = Ложь; + УстановитьПривилегированныйРежим(Истина); + Параметры = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); + Попытка + Результат = РаботаВМоделиСервиса.УдалитьСеансыИРазорватьСоединенияЧерезАгентСервиса(НомерСеанса, Параметры); + Исключение + СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + Результат = Ложь; + КонецПопытки; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей + + +// СтандартныеПодсистемы.ЗащитаПерсональныхДанных + +///////////////////////////////////////////////////////////////////////////////// +// Защита персональных данных + +// Процедура обеспечивает сбор сведений о хранении данных, +// относящихся к персональным +// +// Параметры: +// ТаблицаСведений - таблица значений с полями: +// Объект - строка, содержащая полное имя объекта метаданных, +// ПоляРегистрации - строка, в которой перечислены имена полей регистрации, +// отдельные поля регистрации отделяются запятой, +// альтернативные - символом "|", +// ПоляДоступа - строка, в которой перечислены через запятую имена полей доступа +// ОбластьДанных - строка с идентификатором области данных, необязательно для заполнения +// +Процедура ЗаполнитьСведенияОПерсональныхДанных(ТаблицаСведений) Экспорт + + + +КонецПроцедуры + +// Процедура обеспечивает составление коллекции областей персональных данных +// +// Параметры: +// ОбластиПерсональныхДанных - таблица значений с полями: +// Имя - идентификатор области данных +// Представление - пользовательское представление области данных +// Родитель - идентификатор родительской области данных +// +Процедура ЗаполнитьОбластиПерсональныхДанных(ОбластиПерсональныхДанных) Экспорт + + + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ЗащитаПерсональныхДанных + + +// СтандартныеПодсистемы.ИнформационныйЦентр + +///////////////////////////////////////////////////////////////////////////////// +// Информационный центр + +// Определяет заголовок общей формы "ИнформационныйЦентрРабочийСтол". +// +// Параметры: +// ЗаголовокФормы - Строка - заголовок формы. +// +Процедура ОпределитьЗаголовокОсновнойФормыИнформационныйЦентр(ЗаголовокФормы) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + ПолученныйЗаголовок = РаботаВМоделиСервиса.ПолучитьИмяПриложения(); + Если Не ПустаяСтрока(ПолученныйЗаголовок) Тогда + ЗаголовокФормы = ПолученныйЗаголовок; + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Отпаврляет сообщение пользователя. +// +// Параметры: +// ПараметрыСообщения - Структура - параметры сообщения. +// Результат - Булево - Истина, если сообщение отправлено, Ложь - Иначе. +// +Процедура ОтправитьСообщениеПользователяВТехподдержку(ПараметрыСообщения, Результат) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + УстановитьПривилегированныйРежим(Истина); + + НачатьТранзакцию(); + Попытка + ОбменСообщениями.ОтправитьСообщение("ИнформационныйЦентр\ОтправкаСообщения\Техподдержка", + ПараметрыСообщения, + РаботаВМоделиСервисаПовтИсп.КонечнаяТочкаМенеджераСервиса()); + ЗафиксироватьТранзакцию(); + Результат = Истина; + Возврат; + Исключение + ОтменитьТранзакцию(); + Результат = Ложь; + Возврат; + КонецПопытки; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ИнформационныйЦентр + + +// СтандартныеПодсистемы.КалендарныеГрафики + +///////////////////////////////////////////////////////////////////////////////// +// Календарные графики + +// Процедура выполняет необходимые действия перед записью набора записей +// регистра сведений ДанныеПроизводственногоКалендаря. +// В частности, формирует в переданном объекте Запрос временную таблицу +// ВТ_СтарыеКлючи, содержащую данные набора записей +// +// Параметры: +// Запрос - объект запрос, в менеджере временных таблиц которого формируется таблица данных регистра +// НаборЗаписей - набор записей регистра сведений +// +Процедура ДанныеПроизводственногоКалендаряПередЗаписьюНабораЗаписей(Отказ, Замещение, НаборЗаписей, Запрос) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.СформироватьВременнуюТаблицуДанныхНабораЗаписей(Запрос, НаборЗаписей, "ПроизводственныйКалендарь, Дата, Год"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Процедура выполняет необходимые действия при записи набора записей +// регистра сведений ДанныеПроизводственногоКалендаря. +// В частности, регистрирует изменения данных набора записей регистра сведений +// в плане обмена "Поставляемые данные". +// +// Параметры: +// Запрос - объект запрос, в менеджере временных таблиц которого сформирована временная таблица данных регистра до изменения +// НаборЗаписей - набор записей регистра сведений +// +Процедура ДанныеПроизводственногоКалендаряПриЗаписиНабораЗаписей(Отказ, Замещение, НаборЗаписей, Запрос) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхНабораЗаписей(Запрос, НаборЗаписей, "ПроизводственныйКалендарь", "ПроизводственныйКалендарь, Дата, Год"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.КалендарныеГрафики + + +// СтандартныеПодсистемы.ОбменДанными + +///////////////////////////////////////////////////////////////////////////////// +// Обмен данными + +// Обработчик при выгрузке данных. +// Используется для переопределения стандартной обработки выгрузки данных. +// В данном обработчике должна быть реализована логика выгрузки данных: +// выборка данных для выгрузки, сериализация данных в файл сообщения или сериализация данных в поток. +// После выполнения обработчика выгруженные данные будут отправлены получателю подсистемой обмена данными. +// Формат сообщения для выгрузки может быть произвольным. +// В случае ошибок при отправке данных следует прерывать выполнение обработчика +// методом ВызватьИсключение с описанием ошибки. +// +// Параметры: +// +// СтандартнаяОбработка. Тип: Булево. +// В данный параметр передается признак выполнения стандартной (системной) обработки события. +// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная +// обработка события производиться не будет. Отказ от стандартной обработки не отменяет действие. +// Значение по умолчанию: Истина. +// +// Получатель (только для чтения). Тип: ПланОбменаСсылка. +// Узел плана обмена, для которого выполняется выгрузка данных. +// +// ИмяФайлаСообщения (только для чтения). Тип: Строка. +// Имя файла, в который необходимо выполнить выгрузку данных. Если этот параметр заполнен, то система ожидает, +// что данные будут выгружены в файл. После выгрузки система выполнит отправку данных из этого файла. +// Если параметр пустой, то система ожидает, что данные будут выгружены в параметр ДанныеСообщения. +// +// ДанныеСообщения. Тип: Произвольный. +// Если параметр ИмяФайлаСообщения пустой, то система ожидает, что данные будут выгружены в этот параметр. +// +// КоличествоЭлементовВТранзакции (только для чтения). Тип: Число. +// Определяет максимальное число элементов данных, которые помещаются в сообщение в рамках одной транзакции базы данных. +// При необходимости в обработчике следует реализовать логику установки транзакционных блокировок на выгружаемые данные. +// Значение параметра задается в настройках подсистемы обмена данными. +// +// ИмяСобытияЖурналаРегистрации (только для чтения). Тип: Строка. +// Имя события журнала регистрации текущего сеанса обмена данными. Используется для записи в журнал регистрации +// данных (ошибок, предупреждений, информации) с заданным именем события. +// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. +// +// КоличествоОтправленныхОбъектов. Тип: Число. +// Счетчик отправленных объектов. Используется для определения количества отправленных объектов +// для последующей фиксации в протоколе обмена. +// +Процедура ПриВыгрузкеДанных(СтандартнаяОбработка, + Получатель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоОтправленныхОбъектов + ) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + ОбменСообщениямиВнутренний.ПриВыгрузкеДанных(СтандартнаяОбработка, + Получатель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоОтправленныхОбъектов + ); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + +КонецПроцедуры + +// Обработчик при загрузке данных. +// Используется для переопределения стандартной обработки загрузки данных. +// В данном обработчике должна быть реализована логика загрузки данных: +// необходимые проверки перед загрузкой данных, сериализация данных из файла сообщения или сериализация данных из потока. +// Формат сообщения для загрузки может быть произвольным. +// В случае ошибок при получении данных следует прерывать выполнение обработчика +// методом ВызватьИсключение с описанием ошибки. +// +// Параметры: +// +// СтандартнаяОбработка. Тип: Булево. +// В данный параметр передается признак выполнения стандартной (системной) обработки события. +// Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. +// Отказ от стандартной обработки не отменяет действие. +// Значение по умолчанию: Истина. +// +// Отправитель (только для чтения). Тип: ПланОбменаСсылка. +// Узел плана обмена, для которого выполняется загрузка данных. +// +// ИмяФайлаСообщения (только для чтения). Тип: Строка. +// Имя файла, из которого требуется выполнить загрузку данных. Если параметр не заполнен, то данные для загрузки +// передаются через параметр ДанныеСообщения. +// +// ДанныеСообщения. Тип: Произвольный. +// Параметр содержит данные, которые необходимо загрузить. Если параметр ИмяФайлаСообщения пустой, +// то данные для загрузки передаются через этот параметр. +// +// КоличествоЭлементовВТранзакции (только для чтения). Тип: Число. +// Определяет максимальное число элементов данных, которые читаются из сообщения и записываются в базу данных +// в рамках одной транзакции. При необходимости в обработчике следует реализовать логику записи данных в транзакции. +// Значение параметра задается в настройках подсистемы обмена данными. +// +// ИмяСобытияЖурналаРегистрации (только для чтения). Тип: Строка. +// Имя события журнала регистрации текущего сеанса обмена данными. Используется для записи в журнал регистрации +// данных (ошибок, предупреждений, информации) с заданным именем события. +// Соответствует параметру ИмяСобытия метода глобального контекста ЗаписьЖурналаРегистрации. +// +// КоличествоПолученныхОбъектов. Тип: Число. +// Счетчик полученных объектов. Используется для определения количества загруженных объектов +// для последующей фиксации в протоколе обмена. +// +Процедура ПриЗагрузкеДанных(СтандартнаяОбработка, + Отправитель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоПолученныхОбъектов + ) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + ОбменСообщениямиВнутренний.ПриЗагрузкеДанных(СтандартнаяОбработка, + Отправитель, + ИмяФайлаСообщения, + ДанныеСообщения, + КоличествоЭлементовВТранзакции, + ИмяСобытияЖурналаРегистрации, + КоличествоПолученныхОбъектов + ); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ОбменДанными + + +// СтандартныеПодсистемы.ОбновлениеВерсииИБ + +///////////////////////////////////////////////////////////////////////////////// +// Обновление версии ИБ + +// Вызывается перед обработчиками обновления данных ИБ. +// +Процедура ПередОбновлениемИнформационнойБазы() Экспорт + + // СтандартныеПодсистемы.ОбменДанными + ОбменДаннымиСервер.ПередОбновлениемИнформационнойБазы(); + // Конец СтандартныеПодсистемы.ОбменДанными + +КонецПроцедуры + +// Вызывается после завершении обновления данных ИБ. +// Подробнее см. ОбновлениеИнформационнойБазыПереопределяемый.ПослеОбновленияИнформационнойБазы +// +Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсияИБ, Знач ТекущаяВерсияИБ, + Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений) Экспорт + + // СтандартныеПодсистемы.ОбменДанными + ОбменДаннымиСервер.ПослеОбновленияИнформационнойБазы(); + // Конец СтандартныеПодсистемы.ОбменДанными + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ОбновлениеВерсииИБ + + +// СтандартныеПодсистемы.ОбновлениеКонфигурации + +///////////////////////////////////////////////////////////////////////////////// +// Обновление конфигурации + +// Вызывается при выполнении скрипта обновления из процедуры ОбновлениеКонфигурации.ЗавершитьОбновление(). +Процедура ПослеЗавершенияОбновления() Экспорт + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.ОбновлениеКонфигурации + + +// СтандартныеПодсистемы.Печать + +///////////////////////////////////////////////////////////////////////////////// +// Печать + +// Присоединяет файл печатной формы к объекту. +// Вызывается из общей формы ПечатьДокументов. +// +// Параметры: +// СсылкаНаОбъект - ЛюбаяСсылка - объект, к которому надо присоединить файл печатной формы; +// ИмяФайла - Строка - имя присоединяемого файла с расширением; +// АдресВоВременномХранилище - Строка - адрес двоичных данных файла во временном хранилище. +// +Процедура ПриПрисоединенииПечатнойФормыКОбъекту(СсылкаНаОбъект, ИмяФайла, АдресВоВременномХранилище) Экспорт + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлы.ДобавитьФайл(СсылкаНаОбъект, ИмяФайла, , , , АдресВоВременномХранилище, , НСтр("ru = 'Печатная форма'")); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Определяет возможность сохранения печатной формы при объекте. +// Вызывается из общей формы СохранениеПечатнойФормы. +// +// Параметры: +// СсылкаНаОбъект - ЛюбаяСсылка - объект, к которому надо присоединить файл печатной формы; +// МожноПрисоединять - Булево - (возвращаемый) признак возможности присоединения файлов к объекту. +// +Процедура ПриПроверкеВозможностиПрисоединенияФайловКОбъекту(СсылкаНаОбъект, МожноПрисоединять) Экспорт + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + МожноПрисоединять = ПрисоединенныеФайлы.КОбъектуМожноПрисоединятьФайлы(СсылкаНаОбъект); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Заполняет список печатных форм из внешних источников. +// +// Параметры: +// ВнешниеПечатныеФормы - СписокЗначений: +// Значение - Строка - идентификатор печатной формы; +// Представление - Строка - название печатной формы. +// ПолноеИмяОбъектаМетаданных - Строка - полное имя объекта метаданных, для которого требуется получить список печатных форм. +// +Процедура ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных) Экспорт + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + ДополнительныеОтчетыИОбработки.ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных); + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +КонецПроцедуры + +// Возвращает ссылку на объект внешней печатной формы. +// +Процедура ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка) Экспорт + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + ДополнительныеОтчетыИОбработки.ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка); + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.Печать + + +// СтандартныеПодсистемы.Пользователи + +///////////////////////////////////////////////////////////////////////////////// +// Пользователи + +// Обработчики записи администратора. + +// Переопределяет текст вопроса перед записью первого администратора. +// Вызывается из обработчика ПередЗаписью формы пользователя. +// Вызов выполняется если установлен ЗапретРедактированияРолей() и +// количество пользователей информационной базы равно нулю. +// +Процедура ТекстВопросаПередЗаписьюПервогоАдминистратора(ТекстВопроса) Экспорт + + // СтандартныеПодсистемы.УправлениеДоступом + ТекстВопроса = НСтр("ru = 'В список пользователей программы добавляется первый пользователь, + |поэтому он будет автоматически включен в группу доступа Администраторы. + |Продолжить?'") + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +// Доопределяет действия при записи пользователя, когда он записывается +// совместно с пользователем ИБ, у которого есть роль ПолныеПрава. +// +// Параметры: +// Пользователь - СправочникСсылка.Пользователи (изменение объекта запрещено). +// +Процедура ПриЗаписиАдминистратора(Пользователь) Экспорт + + // СтандартныеПодсистемы.УправлениеДоступом + + // Администраторы автоматически добавляются в группу доступа Администраторы. + Объект = Справочники.ГруппыДоступа.Администраторы.ПолучитьОбъект(); + Если Объект.Пользователи.Найти(Пользователь, "Пользователь") = Неопределено Тогда + Объект.Пользователи.Добавить().Пользователь = Пользователь; + Объект.ОбменДанными.Загрузка = Истина; + Объект.Записать(); + КонецЕсли; + + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +// Переопределяет текст комментария при авторизации пользователя ИБ, +// созданного в конфигураторе с административными правами. +// Вызывается из Пользователи.АвторизоватьТекущегоПользователя(). +// Комментарий записывается в журнал регистрации. +// +// Параметры: +// Комментарий - Строка - начальное значение задано. +// +Процедура ПослеЗаписиАдминистратораПриАвторизации(Комментарий) Экспорт + + // СтандартныеПодсистемы.УправлениеДоступом + Комментарий = НСтр("ru = 'Обнаружено, что пользователь информационной базы + |с ролью ""Полные права"" был создан в Конфигураторе: + | + |- пользователь не найден в справочнике Пользователи, + |- пользователь зарегистрирован в справочнике Пользователи, + |- пользователь добавлен в группу доступа Администраторы. + | + |Пользователей информационной базы следует создавать в режиме 1С:Предприятия.'"); + // Конец СтандартныеПодсистемы.УправлениеДоступом + +КонецПроцедуры + +// Переопределяет действие перед авторизацией пользователя, +// выполняемой при начале работы системы (в процессе получения +// параметров работы клиента при запуске). +// +// Можно заполнить состав пользователей и выполнить перезапуск. +// +// Требуется, например, при настройке автономного рабочего места. +// +// Параметры: +// Перезапустить - Булево, начальное значение Ложь. Если указать +// Истина, тогда работа системы будет прекращена. +// +// ДополнительныеПараметрыКомаднойСтроки - Строка, которая может +// быть заполнена для передачи во второй параметр +// метода ПрекратитьРаботуСистемы. +// +Процедура ПередАвторизациейТекущегоПользователяПриНачалеРаботыСистемы( + Перезапустить, ДополнительныеПараметрыКомаднойСтроки) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + Если АвтономнаяРаботаСлужебный.НеобходимоВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске() Тогда + АвтономнаяРаботаВызовСервераСлужебный.ВыполнитьНастройкуАвтономногоРабочегоМестаПриПервомЗапуске(); + Перезапустить = Истина; + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + +КонецПроцедуры + +// Для поддержки работы в модели сервиса. + +// Обработчик, вызываемый перед записью пользователя. +// +// Параметры: +// ПользовательОбъект - СправочникОбъект.Пользователи - записываемый пользователь +// +Процедура ПередЗаписьюПользователя(ПользовательОбъект) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + ПользователиВМоделиСервиса.ПередЗаписьюПользователя(ПользовательОбъект); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Обработчик, вызываемый при записи пользователя. +// +// Параметры: +// ПользовательОбъект - СправочникОбъект.Пользователи - записываемый пользователь +// ОписаниеПользователя - Объект XDTO: {"http://www.1c.ru/SaaS/1.0/XMLSchema/ManageApplication"}UserInfo - +// описание пользователя менеджера сервиса +// ПользовательСуществует - Булево - пользователь существовал до начала транзакции записи +// ДоступРазрешен - Булево - после записи пользователя, доступ к ИБ должен быть разрешен +// СоздатьПользователяСервиса - Булево - требуется создать нового пользователя сервиса +// +Процедура ПриЗаписиПользователя(ПользовательОбъект, + ОписаниеПользователя, + ПользовательСуществует, + ДоступРазрешен, + СоздатьПользователяСервиса) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + ПользователиВМоделиСервиса.ПриЗаписиПользователя( + ПользовательОбъект, + ОписаниеПользователя, + ПользовательСуществует, + ДоступРазрешен, + СоздатьПользователяСервиса); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Обработчик, вызываемый при получении формы справочника Пользователи +// +// Параметры: +// См. параметры платформенного обработчика ОбработкаПолученияФормы +// +Процедура ОбработкаПолученияФормыПользователя(ВидФормы, + Параметры, + ВыбраннаяФорма, + ДополнительнаяИнформация, + СтандартнаяОбработка) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса + ПользователиВМоделиСервиса.ОбработкаПолученияФормыПользователя( + ВидФормы, + Параметры, + ВыбраннаяФорма, + ДополнительнаяИнформация, + СтандартнаяОбработка); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + +КонецПроцедуры + +// Проверяет содержится ли пользователь ИБ с заданным идентификатором +// в списке неразделенных пользователей. +// +// Параметры: +// ИдентификаторПользователяИБ - УникальныйИдентификатор - идентификатор +// пользователя ИБ принадлежность которого к неразделенным пользователям +// требуется проверить. +// +Функция ЭтоНеразделенныйПользовательИБ(Знач ИдентификаторПользователяИБ) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + Возврат ПользователиВМоделиСервиса.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + + Возврат Ложь; + +КонецФункции + +// При работе в модели сервиса, заносит текущего пользователя в список неразделенных, +// если у него не установлено использование разделителей. +// +Процедура ЗарегистрироватьНеразделенногоПользователя() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + ПользователиВМоделиСервиса.ЗарегистрироватьНеразделенногоПользователя(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + +КонецПроцедуры + +// Возвращает флаг доступности действий изменения пользователей. +// +// Возвращаемое значение: +// Булево - Истина, если изменение пользователей доступно, иначе Ложь. +// +Функция ДоступноИзменениеПользователей() Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + Возврат ПользователиВМоделиСервиса.ДоступноИзменениеПользователей(); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + + Возврат Истина; + +КонецФункции + +// Конец СтандартныеПодсистемы.Пользователи + + +// СтандартныеПодсистемы.РаботаВМоделиСервиса + +///////////////////////////////////////////////////////////////////////////////// +// Работа в модели сервиса + // Формирует список имен неразделенных регистров сведений, хранящих разделенные данные. // // Параметры: @@ -218,9 +1884,7 @@ Процедура ПриУдаленииОбластиДанных(Знач ОбластьДанных) Экспорт // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - Удаление = Новый УдалениеОбъекта(ПоставляемыеДанныеПовтИсп.ПолучитьУзелОбластиДанных(ОбластьДанных)); - Удаление.ОбменДанными.Загрузка = Истина; - Удаление.Записать(); + ПоставляемыеДанные.ПриУдаленииОбластиДанных(ОбластьДанных); // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные КонецПроцедуры @@ -233,7 +1897,6 @@ // Процедура ПолучитьТаблицуПараметровИБ(Знач ТаблицаПараметров) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса Если ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация() Тогда РаботаВМоделиСервиса.ДобавитьКонстантуВТаблицуПараметровИБ(ТаблицаПараметров, "ИспользоватьРазделениеПоОбластямДанных"); @@ -293,8 +1956,6 @@ СтрокаПараметра.Имя = "URLСервисаОбмена"; // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - КонецПроцедуры // Вызывается перед попыткой получения значений параметров ИБ из одноименных @@ -308,8 +1969,6 @@ // Процедура ПриПолученииЗначенийПараметровИБ(Знач ИменаПараметров, Знач ЗначенияПараметров) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса - // ВерсияКонфигурации Индекс = ИменаПараметров.Найти("ВерсияКонфигурации"); Если Индекс <> Неопределено Тогда @@ -331,8 +1990,6 @@ ИменаПараметров.Удалить(Индекс); КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса // URLСервисаОбмена @@ -355,8 +2012,7 @@ // Процедура ПриУстановкеЗначенийПараметровИБ(Знач ЗначенияПараметров) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса - + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование Если ЗначенияПараметров.Свойство("URLСервиса") Тогда Константы.ВнутреннийАдресМенеджераСервиса.Установить(ЗначенияПараметров.URLСервиса); ЗначенияПараметров.Удалить("URLСервиса"); @@ -371,8 +2027,7 @@ Константы.ПарольСлужебногоПользователяМенеджераСервиса.Установить(ЗначенияПараметров.ПарольСлужебногоПользователяСервиса); ЗначенияПараметров.Удалить("ПарольСлужебногоПользователяСервиса"); КонецЕсли; - - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса @@ -385,755 +2040,161 @@ КонецПроцедуры -// Вызывается при включении разделения данных по областям данных. -// -Процедура ПриВключенииРазделенияПоОбластямДанных() Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий - ОчередьЗаданий.ОбновитьРазделенныеРегламентныеЗадания(); - - Если Константы.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.Получить() = 0 Тогда - Константы.МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.Установить(600); - КонецЕсли; - - Если Константы.МаксимальноеКоличествоИсполняющихФоновыхЗаданий.Получить() = 0 Тогда - Константы.МаксимальноеКоличествоИсполняющихФоновыхЗаданий.Установить(1); - КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий - - // СтандартныеПодсистемы.КонтактнаяИнформация - УправлениеКонтактнойИнформацией.УдалитьЭлементыСправочникаСтраныМира(); - // Конец СтандартныеПодсистемы.КонтактнаяИнформация - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - РаботаВМоделиСервисаПереопределяемый.ПриВключенииРазделенияПоОбластямДанных(); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - -КонецПроцедуры - // Вызывается после окончания загрузки данных из локальной версии // в область данных сервиса или наооборот. // Процедура ПослеЗагрузкиДанныхИзДругойМодели() Экспорт + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + //Создаем связи между разделенными и неразделенными валютами, копируем курсы + КурсыВалютВМоделиСервиса.ОбновитьКурсыВалют(); + + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса УправлениеДоступом.ОбновитьПоставляемыеПрофилиИГруппыДоступа(); - УправлениеДоступом.ОбновитьТаблицыРолейПрофилейГруппДоступа(); - УправлениеДоступом.ОбновитьЗависимостиПравДоступа(); - УправлениеДоступом.ОбновитьТаблицыПравПоЗначениямДоступа(); + УправлениеДоступомСлужебный.ОбновитьТаблицыРолейПрофилейГруппДоступа(); + УправлениеДоступомСлужебный.ОбновитьЗависимостиПравДоступа(); + УправлениеДоступомСлужебный.ОбновитьТаблицыПравПоЗначениямДоступа(); // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса КонецПроцедуры -// Блокирует текущую область, начиная транзакцию и накладывая исключительную блокировку -// на все разделяемые объекты метаданных области. -// -Процедура ЗаблокироватьТекущуюОбластьДанных() Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - НачатьТранзакцию(); - РаботаВМоделиСервиса.ЗаблокироватьТекущуюОбластьДанных(Истина); - - Возврат; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - - ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); - -КонецПроцедуры - -// Снимает блокировки с текущей области, фиксируя (или, в случае ошибки, откатывая) транзакцию. -// -Процедура РазблокироватьТекущуюОбластьДанных() Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - // Если ИнформацияОбОшибке().Описание заполнено - код выполняется - // из Исключение ... - Если ПустаяСтрока(ИнформацияОбОшибке().Описание) Тогда - ЗафиксироватьТранзакцию(); - Иначе - ОтменитьТранзакцию(); - КонецЕсли; - - Возврат; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - - ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); - -КонецПроцедуры - // Дополнительные действия, выполняемые при изменении разделения сеанса. // Процедура ПриИзмененииОбластиДанных() Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса РаботаВМоделиСервиса.ОчиститьВсеПараметрыСеансаКромеРазделителей(); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса КонецПроцедуры -// Устанавливает разделение сеанса. -// -// Параметры: -// Использование - Булево - Использование разделителя ОбластьДанных в сеансе -// ОбластьДанных - Число - Значение разделителя ОбластьДанных -// -Процедура УстановитьРазделениеСеанса(Знач Использование, Знач ОбластьДанных = Неопределено) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - РаботаВМоделиСервиса.УстановитьРазделениеСеанса(Использование, ОбластьДанных); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - -КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаВМоделиСервиса -// Возвращает значение разделителя текущей области данных. -// В случае если значение не установлено выдается ошибка. -// -// Возвращаемое значение: -// Тип значения разделителя. -// Значение разделителя текущей области данных. -// -Функция ЗначениеРазделителяСеанса() Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - Возврат РаботаВМоделиСервиса.ЗначениеРазделителяСеанса(); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - - ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); - -КонецФункции -// Возвращает флаг использования разделителя ОбластьДанных для текущего сеанса. -// -// Возвращаемое значение: -// Булево - Истина разделение используется, иначе нет. -// -Функция ИспользованиеРазделителяСеанса() Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - Возврат РаботаВМоделиСервиса.ИспользованиеРазделителяСеанса(); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - - ВызватьИсключение(НСтр("ru = 'Подсистема ""Работа в модели сервиса"" не доступна'")); - -КонецФункции - -// Переопределяемый обработчик, вызываемый перед записью пользователя. -// -// Параметры: -// ПользовательОбъект - СправочникОбъект.Пользователи - записываемый пользователь -// -Процедура ПередЗаписьюПользователя(ПользовательОбъект) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - ПользователиВМоделиСервиса.ПередЗаписьюПользователя(ПользовательОбъект); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - -КонецПроцедуры - -// Переопределяемый обработчик, вызываемый при записи пользователя. -// -// Параметры: -// ПользовательОбъект - СправочникОбъект.Пользователи - записываемый пользователь -// ОписаниеПользователя - Объект XDTO: {"http://www.1c.ru/SaaS/1.0/XMLSchema/ManageApplication"}UserInfo - -// описание пользователя менеджера сервиса -// ПользовательСуществует - Булево - пользователь существовал до начала транзакции записи -// ДоступРазрешен - Булево - после записи пользователя, доступ к ИБ должен быть разрешен -// СоздатьПользователяСервиса - Булево - требуется создать нового пользователя сервиса -// -Процедура ПриЗаписиПользователя(ПользовательОбъект, ОписаниеПользователя, ПользовательСуществует, ДоступРазрешен, СоздатьПользователяСервиса) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - ПользователиВМоделиСервиса.ПриЗаписиПользователя(ПользовательОбъект, ОписаниеПользователя, ПользовательСуществует, - ДоступРазрешен, СоздатьПользователяСервиса); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - -КонецПроцедуры - -// Переопределяемый обработчик, вызываемый при получении формы справочника Пользователи -// -// Параметры: -// См. параметры платформенного обработчика ОбработкаПолученияФормы -// -Процедура ОбработкаПолученияФормыПользователя(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - ПользователиВМоделиСервиса.ОбработкаПолученияФормыПользователя(ВидФормы, Параметры, ВыбраннаяФорма, - ДополнительнаяИнформация, СтандартнаяОбработка); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - -КонецПроцедуры - -// Переопределяемый обработчик, вызываемый при записи задания дополнительной обработки. -// -// Параметры: -// РегламентноеЗадание - РегламентноеЗадание - записываемое регламентное задание. -// Использование - Булево - флаг использования задания. -// -Процедура ПриЗаписиЗаданияДопОбработки(РегламентноеЗадание, Использование) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса - ДополнительныеОтчетыИОбработкиВМоделиСервиса.УточнитьПараметрыЗаданияВОчереди(РегламентноеЗадание, Использование); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ДополнительныеОтчетыИОбработкиВМоделиСервиса - -КонецПроцедуры - -// Устанавливает использование регламентного задания заполнения данных управления доступом. -// -// Параметры: -// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. -// -Процедура УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Знач Использование) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса - УправлениеДоступомВМоделиСервиса.УстановитьИспользованиеЗаданияЗаполненияДанных(Использование); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса - -КонецПроцедуры - -// Добавляет дополнительные параметры работы клиента при работе в модели сервиса. -// -// Параметры: -// Параметры - Структура - структура параметров. -// -Процедура ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Знач Параметры) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса - РаботаВМоделиСервиса.ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Параметры); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса - -КонецПроцедуры +// СтандартныеПодсистемы.РаботаВМоделиСервиса.ВыгрузкаЗагрузкаДанных ///////////////////////////////////////////////////////////////////////////////// -// Базовая функциональность -// +// Выгрузка и загрузка данных -// Возвращает список процедур-обработчиков обновления библиотеки. +// Обработчик, вызываемый для данных перед их записью в файл при выгрузке областей. // -// Здесь в алфавитном порядке размещаются только процедуры-обработчики обновления -// библиотечных подсистем, которые используются в данной конфигурации. -// Процедуры-обработчики обновления самой конфигурации следует размещать в функции -// ОбработчикиОбновления общего модуля ОбновлениеИнформационнойБазыПереопределяемый. +// Параметры: +// ЭлементДанных - КонстантаМенеджер.<Имя>; СправочникОбъект.<Имя>; Регистр<Вид>НаборЗаписей.<Имя>. // -// Возвращаемое значение: -// ТаблицаЗначений - описание полей структуры см. в функции -// ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления() -// -Функция ОбработчикиОбновленияСтандартныхПодсистем() Экспорт - - Обработчики = ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления(); - - // Подключаются процедуры-обработчики обновления библиотеки - - // СтандартныеПодсистемы.АдресныйКлассификатор - АдресныйКлассификатор.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.АдресныйКлассификатор - - // СтандартныеПодсистемы.БазоваяФункциональность - СтандартныеПодсистемыСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.БазоваяФункциональность - - // СтандартныеПодсистемы.БизнесПроцессыИЗадачи - БизнесПроцессыИЗадачиСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи - - // СтандартныеПодсистемы.ВариантыОтчетов - ВариантыОтчетов.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ВариантыОтчетов - - // СтандартныеПодсистемы.Взаимодействия - Взаимодействия.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.Взаимодействия - - // СтандартныеПодсистемы.Валюты - РаботаСКурсамиВалют.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.Валюты - - // СтандартныеПодсистемы.ДатыЗапретаИзменения - ДатыЗапретаИзмененияСлужебный.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ДатыЗапретаИзменения - - // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки - ДополнительныеОтчетыИОбработки.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки - - // СтандартныеПодсистемы.КалендарныеГрафики - КалендарныеГрафики.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.КалендарныеГрафики - - // СтандартныеПодсистемы.КонтактнаяИнформация - УправлениеКонтактнойИнформацией.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.КонтактнаяИнформация - - // СтандартныеПодсистемы.ОбменДанными - ОбменДаннымиСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ОбменДанными - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса - ОбменДаннымиВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями - ОбменСообщениямиВнутренний.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями - - // СтандартныеПодсистемы.ОбновлениеКонфигурации - ОбновлениеКонфигурации.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса - ОбновлениеИнформационнойБазыВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбновлениеВерсииИБВМоделиСервиса - - // СтандартныеПодсистемы.ПолнотекстовыйПоиск - ПолнотекстовыйПоискСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ПолнотекстовыйПоиск - - // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - ПолучениеФайловИзИнтернета.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - - // СтандартныеПодсистемы.Пользователи - Пользователи.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.Пользователи - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса - ПользователиВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса - - // СтандартныеПодсистемы.РаботаСПочтовымиСообщениями - ЭлектроннаяПочта.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.РаботаСПочтовымиСообщениями +Процедура ПередВыгрузкойДанных(ЭлементДанных) Экспорт // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.ЗарегистрироватьОбработчикиОбновления(Обработчики); + ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; + РаботаСФайламиСлужебный.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента); // Конец СтандартныеПодсистемы.РаботаСФайлами - // СтандартныеПодсистемы.РегламентныеЗадания - РегламентныеЗаданияСервер.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.РегламентныеЗадания + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; + ПрисоединенныеФайлыСлужебный.ПриОтправкеФайла(ЭлементДанных, ОтправкаЭлемента); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - // СтандартныеПодсистемы.ОчередьЗаданий - ОчередьЗаданий.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ОчередьЗаданий - - // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.Свойства - - // СтандартныеПодсистемы.УправлениеДоступом - УправлениеДоступом.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.УправлениеДоступом - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса - УправлениеДоступомВМоделиСервиса.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса - - // СтандартныеПодсистемы.ФизическиеЛица - ФизическиеЛица.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ФизическиеЛица - - // СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись - ЭлектроннаяЦифроваяПодпись.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.ЭлектроннаяЦифроваяПодпись - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - ПоставляемыеДанные.ЗарегистрироватьОбработчикиОбновления(Обработчики); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - - Возврат Обработчики; - -КонецФункции +КонецПроцедуры -// Проверяет содержится ли пользователь ИБ с заданным идентификатором -// в списке неразделенных пользователей. +// Обработчик, вызываемый для считанных из файла данных перед их записью в ИБ при загрузке областей. // // Параметры: -// ИдентификаторПользователяИБ - УникальныйИдентификатор - идентификатор -// пользователя ИБ принадлежность которого к неразделенным пользователям -// требуется проверить. +// ЭлементДанных - КонстантаМенеджер.<Имя>; СправочникОбъект.<Имя>; Регистр<Вид>НаборЗаписей.<Имя>. // -Функция ЭтоНеразделенныйПользовательИБ(Знач ИдентификаторПользователяИБ) Экспорт +Процедура ПередЗагрузкойДанных(ЭлементДанных) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса - Возврат ПользователиВМоделиСервиса.ЭтоНеразделенныйПользовательИБ(ИдентификаторПользователяИБ); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса - Возврат Ложь; + // СтандартныеПодсистемы.РаботаСФайлами + ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; + РаботаСФайламиСлужебный.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); + // Конец СтандартныеПодсистемы.РаботаСФайлами -КонецФункции - -// При работе в модели сервиса, заносит текущего пользователя в список неразделенных, -// если у него не установлено использование разделителей. -// -Процедура ЗарегистрироватьНеразделенногоПользователя() Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса - ПользователиВМоделиСервиса.ЗарегистрироватьНеразделенногоПользователя(); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; + ПрисоединенныеФайлыСлужебный.ПриПолученииФайла(ЭлементДанных, ПолучениеЭлемента); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы КонецПроцедуры -// Возвращает флаг доступности действий изменения пользователей. -// -// Возвращаемое значение: -// Булево - Истина, если изменение пользователей доступно, иначе Ложь. -// -Функция ДоступноИзменениеПользователей() Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса - Возврат ПользователиВМоделиСервиса.ДоступноИзменениеПользователей(); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПользователиВМоделиСервиса - Возврат Истина; - -КонецФункции +// Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВыгрузкаЗагрузкаДанных -// Возвращает флаг доступности подсистемы ПолучениеФайловИзИнтернета. -// -// ВозвращаемоеЗначение - Булево - -// Истина - подсистема доступна, любое другое значение - подсистемв -// не доступна -// -Процедура ДоступноПолучениеФайловИзИнтернета(ВозвращаемоеЗначение) Экспорт - - // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - ВозвращаемоеЗначение = Истина; - // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - -КонецПроцедуры -// Получить файл из Интернета по протоколу http(s), либо ftp и сохранить его во временный файл. -// -// Параметры: -// URL - Строка - url файла в формате -// [Протокол://]<Сервер>/<Путь к файлу на сервере> -// ПараметрыПолучения - Структура со свойствами -// ПутьДляСохранения - Строка - путь на сервере (включая имя файла), для сохранения скачанного файла -// Пользователь - Строка - пользователь от имени которого установлено соединение -// Пароль - Строка - пароль пользователя от которого установлено соединение -// Порт - Число - порт сервера с которым установлено соединение -// ЗащищенноеСоединение - Булево - для случая http загрузки флаг указывает, -// что соединение должно производиться через https -// ПассивноеСоединение - Булево - для случая ftp загрузки флаг указывает, -// что соединение должно пассивным (или активным) -// ВозвращаемоеЗначение - (выходной параметр) -// Структура, со свойствами -// Статус - Булево - ключ присутствует в структуре всегда, значения -// Истина - вызов функции успешно завершен -// Ложь - вызов функции завершен неудачно -// Путь - Строка - путь к файлу на сервере, ключ используется только -// если статус Истина -// СообщениеОбОшибке - Строка - сообщение об ошибке, если статус Ложь -// -Процедура СкачатьФайлНаСервере(Знач Адрес, Знач ПараметрыПолучения, ВозвращаемоеЗначение) Экспорт - - // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - ВозвращаемоеЗначение = ПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(Адрес, ПараметрыПолучения); - // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета - -КонецПроцедуры +// СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями ///////////////////////////////////////////////////////////////////////////////// -// Поставляемые данные -// +// Обмен сообщениями -// Функция создает таблицу соответствия разделенных типов данных общим данным -// -// Возвращаемое значение: -// ТаблицаЗначений - соответствия типов данных -// -Функция ТаблицаСоответствияРазделенныхДанныхОбщим() Экспорт - - ТаблицаЗначений = Новый ТаблицаЗначений; - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - ТаблицаЗначений.Колонки.Добавить("ВидПоставляемыхДанных"); - ТаблицаЗначений.Колонки.Добавить("ТипОбщихДанных"); - ТаблицаЗначений.Колонки.Добавить("ТипРазделенныхДанных"); - ТаблицаЗначений.Колонки.Добавить("КопироватьВоВсеОбластиДанных"); - - ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаЗначений); - ПоставляемыеДанныеПереопределяемый.ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаЗначений); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - - Возврат ТаблицаЗначений; - -КонецФункции - -// Процедура формирует таблицу соответствия разделенных типов данных -// общим данным библиотеки -// +// Получает список обработчиков сообщений, которые обрабатывают подсистемы библиотеки. +// // Параметры: -// ТаблицаСоответствия - ТаблицаЗначений - таблица, которую необходимо -// заполнить соответствиями типов -// -Процедура ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаСоответствия) Экспорт +// Обработчики - ТаблицаЗначений - состав полей см. в ОбменСообщениями.НоваяТаблицаОбработчиковСообщений +// +Процедура ПолучитьОбработчикиКаналовСообщений(Обработчики) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса.ПолучитьОбработчикиКаналовСообщений(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + + // СтандартныеПодсистемы.ИнформационныйЦентр + ОбработчикКаналовСообщенийИнформационногоЦентра.ПолучитьОбработчикиКаналовСообщений(Обработчики); + // Конец СтандартныеПодсистемы.ИнформационныйЦентр + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование + ОбработчикКаналовСообщенийУдаленногоАдминистрирования.ПолучитьОбработчикиКаналовСообщений(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УдаленноеАдминистрирование + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + ОбработчикКаналовСообщенийУправлениеРезервнымКопированием.ПолучитьОбработчикиКаналовСообщений(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса - НоваяСтрока = ТаблицаСоответствия.Добавить(); - НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.Справочник_Валюты; - НоваяСтрока.ТипОбщихДанных = Тип("СправочникСсылка.КлассификаторВалют"); - НоваяСтрока.ТипРазделенныхДанных = Тип("СправочникСсылка.Валюты"); - НоваяСтрока.КопироватьВоВсеОбластиДанных = Ложь; - - НоваяСтрока = ТаблицаСоответствия.Добавить(); - НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_КурсыВалют; - НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийКлючЗаписи.КурсыВалютПоКлассификатору"); - НоваяСтрока.ТипРазделенныхДанных = Тип("РегистрСведенийКлючЗаписи.КурсыВалют"); - НоваяСтрока.КопироватьВоВсеОбластиДанных = Неопределено; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса - - // СтандартныеПодсистемы.КонтактнаяИнформация - НоваяСтрока = ТаблицаСоответствия.Добавить(); - НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.Справочник_СтраныМира; - НоваяСтрока.ТипОбщихДанных = Тип("СправочникСсылка.СтраныМира"); - НоваяСтрока.КопироватьВоВсеОбластиДанных = Ложь; - // Конец СтандартныеПодсистемы.КонтактнаяИнформация - - // СтандартныеПодсистемы.АдресныйКлассификатор - НоваяСтрока = ТаблицаСоответствия.Добавить(); - НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_АдресныйКлассификатор; - НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийНаборЗаписей.АдресныйКлассификатор"); - - НоваяСтрока = ТаблицаСоответствия.Добавить(); - НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_АдресныеСокращения; - НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийНаборЗаписей.АдресныеСокращения"); - // Конец СтандартныеПодсистемы.АдресныйКлассификатор - - // СтандартныеПодсистемы.КалендарныеГрафики - НоваяСтрока = ТаблицаСоответствия.Добавить(); - НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.Справочник_ПроизводственныеКалендари; - НоваяСтрока.ТипОбщихДанных = Тип("СправочникСсылка.ПроизводственныеКалендари"); - НоваяСтрока.ТипРазделенныхДанных = Тип("СправочникСсылка.Календари"); - НоваяСтрока.КопироватьВоВсеОбластиДанных = Ложь; - - НоваяСтрока = ТаблицаСоответствия.Добавить(); - НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_ДанныеПроизводственногоКалендаря; - НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийКлючЗаписи.ДанныеПроизводственногоКалендаря"); - НоваяСтрока.ТипРазделенныхДанных = Тип("РегистрСведенийКлючЗаписи.КалендарныеГрафики"); - НоваяСтрока.КопироватьВоВсеОбластиДанных = Неопределено; - // Конец СтандартныеПодсистемы.КалендарныеГрафики - + ОбработчикКаналовСообщенийПоставляемыхДанных.ПолучитьОбработчикиКаналовСообщений(Обработчики); // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + +КонецПроцедуры + +// Обработчик события при отправке сообщения. +// Обработчик данного события вызывается перед помещением сообщения в XML-поток. +// Обработчик вызывается для каждого отправляемого сообщения. +// +// Параметры: +// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, в который отправляется сообщение. +// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело отправляемого сообщения. +// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. +// +Процедура ПриОтправкеСообщения(КаналСообщений, ТелоСообщения) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + СообщенияВМоделиСервиса.ПриОтправкеСообщения(КаналСообщений, ТелоСообщения); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса КонецПроцедуры -// Процедура переопределяет действия при подборе поставляемых данных в область данных -// для библиотечных поставляемых данных +// Обработчик события при получении сообщения. +// Обработчик данного события вызывается при получении сообщения из XML-потока. +// Обработчик вызывается для каждого получаемого сообщения. // -// Параметры: -// СсылкаОбщихДанных - Ссылка - ссылка на элемент подбираемый в область данных +// Параметры: +// КаналСообщений (только чтение) Тип: Строка. Идентификатор канала сообщений, из которого получено сообщение. +// ТелоСообщения (чтение и запись) Тип: Произвольный. Тело полученного сообщения. +// В обработчике события тело сообщения может быть изменено, например, дополнено информацией. // -Процедура ПриПодбореПоставляемыхДанныхВОбласть(СсылкаОбщихДанных) Экспорт +Процедура ПриПолученииСообщения(КаналСообщений, ТелоСообщения) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса - Если ТипЗнч(СсылкаОбщихДанных) = Тип("СправочникСсылка.КлассификаторВалют") Тогда - ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхРегистраСведений(СсылкаОбщихДанных, "КурсыВалютПоКлассификатору", "Валюта", "Период,Валюта"); - КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса - - // СтандартныеПодсистемы.КалендарныеГрафики - Если ТипЗнч(СсылкаОбщихДанных) = Тип("СправочникСсылка.ПроизводственныеКалендари") Тогда - ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхРегистраСведений(СсылкаОбщихДанных, "ДанныеПроизводственногоКалендаря", "ПроизводственныйКалендарь", "ПроизводственныйКалендарь,Дата,Год"); - КонецЕсли; - // Конец СтандартныеПодсистемы.КалендарныеГрафики - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + СообщенияВМоделиСервиса.ПриПолученииСообщения(КаналСообщений, ТелоСообщения); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса КонецПроцедуры -// Вызывается при необходимости обновления разделенного набора записей из неразделенного. -// -// Параметры: -// Эталон - РегистрСведенийНаборЗаписей - неразделенный набор записей по которому необходимо -// обновить разделенный. -// ОбъектМД - ОбъектМетаданных - метаданные неразделенного регистра сведений -// Менеджер - РегистрСведенийМенеджер - менджер разделенного регистра сведений -// ТипИсточника - Тип - тип ключа записи неразделенного регистра -// ТипПриемник - Тип - тип ключа записи разделенного регистра -// ОбъектПриемник - РегистрСведенийНаборЗаписей - в случае если в процедуре выполнено -// переопределение стандартного поведения обновления, необходимо присвоить незаписанный -// набор записей этому параметру. -// СтандартнаяОбработка - Булево - в случае если в процедуре выполнено -// переопределение стандартного поведения обновления, необходимо присвоить этому -// параметру значение Ложь. -// -Процедура ПередКопированиемНабораЗаписейИзЭталона(Эталон, МетаданныеОбъекта, Менеджер, ТипИсточника, - ТипПриемника, ОбъектПриемник, СтандартаяОбработка) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - // СтандартныеПодсистемы.КалендарныеГрафики - Если МетаданныеОбъекта.Имя = "ДанныеПроизводственногоКалендаря" Тогда - - СтандартаяОбработка = Ложь; - - СоответствиеИменРеквизитов = Новый Соответствие; - СоответствиеИменРеквизитов.Вставить("ПроизводственныйКалендарь", "Календарь"); - СоответствиеИменРеквизитов.Вставить("Дата", "ДатаГрафика"); - - ВключаемыеВидыДней = Новый Массив; - ВключаемыеВидыДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий); - ВключаемыеВидыДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный); - - Результат = Менеджер.СоздатьНаборЗаписей(); - - Для Каждого ЭлементОтбора Из Эталон.Отбор Цикл - Если НЕ ЭлементОтбора.Использование Тогда - Продолжить; - КонецЕсли; - - Если СоответствиеИменРеквизитов[ЭлементОтбора.Имя] <> Неопределено Тогда - Результат.Отбор[СоответствиеИменРеквизитов[ЭлементОтбора.Имя]].Установить(ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(ЭлементОтбора.Значение)); - Иначе - Результат.Отбор[ЭлементОтбора.Имя].Установить(ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(ЭлементОтбора.Значение)); - КонецЕсли; - КонецЦикла; - - Результат.ОбменДанными.Загрузка = Истина; - - МетаданныеПриемника = Результат.Метаданные(); - - Для Каждого СтрокаЭталона Из Эталон Цикл - СтрокаРезультата = Результат.Добавить(); - СтрокаРезультата.Календарь = ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(СтрокаЭталона.ПроизводственныйКалендарь); - СтрокаРезультата.Год = СтрокаЭталона.Год; - СтрокаРезультата.ДатаГрафика = СтрокаЭталона.Дата; - СтрокаРезультата.ДеньВключенВГрафик = ВключаемыеВидыДней.Найти(СтрокаЭталона.ВидДня) <> Неопределено; - КонецЦикла; - - ОбъектПриемник = Результат; - - КонецЕсли; - // Конец СтандартныеПодсистемы.КалендарныеГрафики - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - -КонецПроцедуры - -// Вызывается при необходимости обновления разделенного элемента из неразделенного. -// -// Параметры: -// Эталон - СправочникОбъект - неразделенный объект по которому необходимо -// обновить разделенный. -// ОбъектМД - ОбъектМетаданных - метаданные неразделенного справочника -// Менеджер - СправочникМенеджер - менджер разделенного регистра сведений -// ТипИсточника - Тип - тип ссылки неразделенного справочника -// ТипПриемник - Тип - тип ссылки разделенного справочника -// ОбъектПриемник - СправочникОбъект - в случае если в процедуре выполнено -// переопределение стандартного поведения обновления, необходимо присвоить незаписанный -// объект этому параметру. -// СтандартнаяОбработка - Булево - в случае если в процедуре выполнено -// переопределение стандартного поведения обновления, необходимо присвоить этому -// параметру значение Ложь. -// -Процедура ПередКопированиемОбъектаИзЭталона(Эталон, МетаданныеИсточника, Менеджер, ТипИсточника, - ТипПриемника, ОбъектПриемник, СтандартаяОбработка) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - // СтандартныеПодсистемы.КалендарныеГрафики - Если МетаданныеИсточника.Имя = "ПроизводственныеКалендари" Тогда - - СоответствиеИменРеквизитов = Новый Соответствие; - СоответствиеИменРеквизитов.Вставить("ПроизводственныйКалендарь", "Ссылка"); - - СтандартаяОбработка = Ложь; - - СсылкаРезультата = ПоставляемыеДанные.РазделеннаяСсылкаПоОбщей(Эталон.Ссылка); - - МетаданныеПриемника = СсылкаРезультата.Метаданные(); - - ИерархическийСправочник = МетаданныеПриемника.Иерархический И МетаданныеИсточника.Иерархический; - - Результат = СсылкаРезультата.ПолучитьОбъект(); - Если Результат = Неопределено Тогда - Результат = Менеджер.СоздатьЭлемент(); - Результат.УстановитьСсылкуНового(СсылкаРезультата); - КонецЕсли; - Результат.ОбменДанными.Загрузка = Истина; - - Результат.Наименование = Эталон.Наименование; - - Если ИерархическийСправочник Тогда - Результат.Родитель = ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(Эталон.Родитель); - КонецЕсли; - - ИерархияГрупп = МетаданныеПриемника.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; - - Результат["ПроизводственныйКалендарь"] = Эталон["Ссылка"]; - Результат["ВидКалендаря"] = Перечисления.ВидыКалендарей.Пятидневка; - - ОбъектПриемник = Результат; - - КонецЕсли; - // Конец СтандартныеПодсистемы.КалендарныеГрафики - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - -КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями -// Процедура копирует список элементов общего справочника в новую область данных -// -// Параметры: -// СписокКодовСправочника - массив - массив кодов справочника -// ТипИсточника - тип - тип общего справочника, -// откуда будут скопированы элементы -// -Процедура СкопироватьЭлементыСправочникаПоставляемыхДанных(СписокКодовСправочника, ТипИсточника) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - ПоставляемыеДанные.СкопироватьЭлементыСправочника(СписокКодовСправочника, ТипИсточника); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - -КонецПроцедуры -// Считывает текущее состояние разделенного объекта и приводит форму -// в соответстие с ним -// -Процедура СчитатьФлагРучногоИзмененияПоставляемыхДанных(Знач Форма) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - ПоставляемыеДанные.СчитатьФлагРучногоИзменения(Форма); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - -КонецПроцедуры - -// Записывает состояние разделенного объекта -// -Процедура ЗаписатьФлагРучногоИзменениеПоставляемыхДанных(Знач Форма) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - ПоставляемыеДанные.ЗаписатьФлагРучногоИзменение(Форма); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - -КонецПроцедуры - -// Копирует данные общего объекта в разделенный и изменяет -// состояние разделенного объекта -// -Процедура ВосстановитьЭлементИзОбщихДанных(Знач Форма) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - ПоставляемыеДанные.ВосстановитьЭлементИзОбщихДанных(Форма); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - -КонецПроцедуры - -// При необходимости создает узел для области данных с переданным значеним -// разделителя. -// -// Параметры: -// ОбластьДанных - Число - значение разделеителя области данных для которой -// требуется создать узел. -// -Процедура СоздатьУзелОбластиДанных(Знач ОбластьДанных) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - ПоставляемыеДанные.СоздатьУзелОбластиДанных(ОбластьДанных); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - -КонецПроцедуры +// СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий ///////////////////////////////////////////////////////////////////////////////// // Очередь заданий -// // Заполняет список имен неразделенных регламентных заданий, которые // должны выполняться в разделенном режиме. @@ -1208,43 +2269,6 @@ КонецПроцедуры -// Устанавливает текстовое описание предмета -// -// Параметры -// СсылкаНаПредмет – ЛюбаяСсылка – объект ссылочного типа. -// Представление - Строка - сюда необходимо поместить текстовое описание. -Процедура УстановитьПредставлениеПредмета(СсылкаНаПредмет, Представление) Экспорт - - // СтандартныеПодсистемы.БизнесПроцессыИЗадачи - Если ТипЗнч(СсылкаНаПредмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; - Если ПустаяСтрока(ПредставлениеОбъекта) Тогда - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); - КонецЕсли; - Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "%1 (%2)", СсылкаНаПредмет.Наименование, ПредставлениеОбъекта); - КонецЕсли; - // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи - - // СтандартныеПодсистемы.Взаимодействия - Если ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") ИЛИ - ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") ИЛИ - ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ТелефонныйЗвонок") ИЛИ - ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.Встреча") ИЛИ - ТипЗнч(СсылкаНаПредмет) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда - - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().ПредставлениеОбъекта; - Если ПустаяСтрока(ПредставлениеОбъекта) Тогда - ПредставлениеОбъекта = СсылкаНаПредмет.Метаданные().Представление(); - КонецЕсли; - Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - "%1 (%2)", СсылкаНаПредмет.Тема, ПредставлениеОбъекта); - - КонецЕсли; - // Конец СтандартныеПодсистемы.Взаимодействия - -КонецПроцедуры - // Формирует список методов разрешенных к вызову через механизм очереди заданий // // Параметры: @@ -1277,9 +2301,21 @@ // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса - РазрешенныеМетоды.Добавить("УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания"); + РазрешенныеМетоды.Добавить("УправлениеДоступомСлужебный.ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания"); // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + // СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + РазрешенныеМетоды.Добавить("РезервноеКопированиеОбластейДанных.ВыгрузитьОбластьВХранилищеМС"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.РезервноеКопированиеОбластейДанных + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + РазрешенныеМетоды.Добавить("ОбработчикКаналовСообщенийПоставляемыхДанных.ЗагрузитьДанные"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + РазрешенныеМетоды.Добавить("КурсыВалютВМоделиСервиса.КопироватьКурсыВалюты"); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + КонецПроцедуры // Переопределяет массив реквизитов объекта, относительно которых разрешается устанавливать время напоминания. @@ -1308,154 +2344,695 @@ КонецПроцедуры +// Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОчередьЗаданий + + +// СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + ///////////////////////////////////////////////////////////////////////////////// -// Завершение работы пользователей +// Поставляемые данные + +// Зарегистрировать обработчики поставляемых данных // +// При получении уведомления о доступности новых общих данных, вызывается процедуры +// ДоступныНовыеДанные модулей, зарегистрированнных через ПолучитьОбработчикиПоставляемыхДанных. +// В процедуру передается Дескриптор - ОбъектXDTO Descriptor. +// +// В случае, если ДоступныНовыеДанные устанавливает аргумент Загружать в значение Истина, +// данные загружаются, дескриптор и путь к файлу с данными передаются в процедуру +// ОбработатьНовыеДанные. Файл будет автоматически удален после завершения процедуры. +// +// Параметры: +// Обработчики, ТаблицаЗначений - таблица для добавления обработчиков. +// Колонки: +// ВидДанных, строка - код вида данных, обрабатываемый обработчиком +// КодОбработчика, строка(20) - будет использоваться при восстановлении обработки данных после сбоя +// Обработчик, ОбщийМодуль - модуль, содержащий следующие процедуры: +// ДоступныНовыеДанные(Дескриптор, Загружать) Экспорт +// ОбработатьНовыеДанные(Дескриптор, ПутьКФайлу) Экспорт +// ОбработкаДанныхОтменена(Дескриптор) Экспорт +// +Процедура ПолучитьОбработчикиПоставляемыхДанных(Обработчики) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + КурсыВалютВМоделиСервиса.ЗарегистрироватьОбработчикиПоставляемыхДанных(Обработчики); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + +КонецПроцедуры -// СтандартныеПодсистемы.ЗавершениеРаботыПользователей +// Процедура формирует таблицу соответствия разделенных типов данных +// общим данным библиотеки +// +// Параметры: +// ТаблицаСоответствия - ТаблицаЗначений - таблица, которую необходимо +// заполнить соответствиями типов +// +Процедура ПолучитьТаблицуСоответствияРазделенныхДанныхОбщим(ТаблицаСоответствия) Экспорт + + // СтандартныеПодсистемы.КонтактнаяИнформация + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.Справочник_СтраныМира; + НоваяСтрока.ТипОбщихДанных = Тип("СправочникСсылка.СтраныМира"); + НоваяСтрока.КопироватьВоВсеОбластиДанных = Ложь; + // Конец СтандартныеПодсистемы.КонтактнаяИнформация + + // СтандартныеПодсистемы.АдресныйКлассификатор + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_АдресныйКлассификатор; + НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийНаборЗаписей.АдресныйКлассификатор"); + + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_АдресныеСокращения; + НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийНаборЗаписей.АдресныеСокращения"); + // Конец СтандартныеПодсистемы.АдресныйКлассификатор + + // СтандартныеПодсистемы.КалендарныеГрафики + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.Справочник_ПроизводственныеКалендари; + НоваяСтрока.ТипОбщихДанных = Тип("СправочникСсылка.ПроизводственныеКалендари"); + НоваяСтрока.ТипРазделенныхДанных = Тип("СправочникСсылка.Календари"); + НоваяСтрока.КопироватьВоВсеОбластиДанных = Ложь; + + НоваяСтрока = ТаблицаСоответствия.Добавить(); + НоваяСтрока.ВидПоставляемыхДанных = Перечисления.ВидыПоставляемыхДанных.РегистрСведений_ДанныеПроизводственногоКалендаря; + НоваяСтрока.ТипОбщихДанных = Тип("РегистрСведенийКлючЗаписи.ДанныеПроизводственногоКалендаря"); + НоваяСтрока.ТипРазделенныхДанных = Тип("РегистрСведенийКлючЗаписи.КалендарныеГрафики"); + НоваяСтрока.КопироватьВоВсеОбластиДанных = Неопределено; + // Конец СтандартныеПодсистемы.КалендарныеГрафики + +КонецПроцедуры -// Вызывается при отключении сеанса на стороне сервера 1С:Предприятия. +// Процедура переопределяет действия при подборе поставляемых данных в область данных +// для библиотечных поставляемых данных +// +// Параметры: +// СсылкаОбщихДанных - Ссылка - ссылка на элемент подбираемый в область данных +// +Процедура ПриПодбореПоставляемыхДанныхВОбласть(СсылкаОбщихДанных, ТипОбщихДанных = "") Экспорт + + // СтандартныеПодсистемы.КалендарныеГрафики + Если ТипЗнч(СсылкаОбщихДанных) = Тип("СправочникСсылка.ПроизводственныеКалендари") Тогда + ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхРегистраСведений(СсылкаОбщихДанных, "ДанныеПроизводственногоКалендаря", "ПроизводственныйКалендарь", "ПроизводственныйКалендарь,Дата,Год"); + КонецЕсли; + // Конец СтандартныеПодсистемы.КалендарныеГрафики + +КонецПроцедуры + +// Вызывается при необходимости обновления разделенного набора записей из неразделенного. +// +// Параметры: +// Эталон - РегистрСведенийНаборЗаписей - неразделенный набор записей по которому необходимо +// обновить разделенный. +// ОбъектМД - ОбъектМетаданных - метаданные неразделенного регистра сведений +// Менеджер - РегистрСведенийМенеджер - менджер разделенного регистра сведений +// ТипИсточника - Тип - тип ключа записи неразделенного регистра +// ТипПриемник - Тип - тип ключа записи разделенного регистра +// ОбъектПриемник - РегистрСведенийНаборЗаписей - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить незаписанный +// набор записей этому параметру. +// СтандартнаяОбработка - Булево - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить этому +// параметру значение Ложь. +// +Процедура ПередКопированиемНабораЗаписейИзЭталона(Эталон, МетаданныеОбъекта, Менеджер, ТипИсточника, + ТипПриемника, ОбъектПриемник, СтандартаяОбработка) Экспорт + + // СтандартныеПодсистемы.КалендарныеГрафики + Если МетаданныеОбъекта.Имя = "ДанныеПроизводственногоКалендаря" Тогда + + СтандартаяОбработка = Ложь; + + СоответствиеИменРеквизитов = Новый Соответствие; + СоответствиеИменРеквизитов.Вставить("ПроизводственныйКалендарь", "Календарь"); + СоответствиеИменРеквизитов.Вставить("Дата", "ДатаГрафика"); + + ВключаемыеВидыДней = Новый Массив; + ВключаемыеВидыДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий); + ВключаемыеВидыДней.Добавить(Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный); + + Результат = Менеджер.СоздатьНаборЗаписей(); + + Для Каждого ЭлементОтбора Из Эталон.Отбор Цикл + Если НЕ ЭлементОтбора.Использование Тогда + Продолжить; + КонецЕсли; + + Если СоответствиеИменРеквизитов[ЭлементОтбора.Имя] <> Неопределено Тогда + Результат.Отбор[СоответствиеИменРеквизитов[ЭлементОтбора.Имя]].Установить(ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(ЭлементОтбора.Значение)); + Иначе + Результат.Отбор[ЭлементОтбора.Имя].Установить(ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(ЭлементОтбора.Значение)); + КонецЕсли; + КонецЦикла; + + Результат.ОбменДанными.Загрузка = Истина; + + МетаданныеПриемника = Результат.Метаданные(); + + Для Каждого СтрокаЭталона Из Эталон Цикл + СтрокаРезультата = Результат.Добавить(); + СтрокаРезультата.Календарь = ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(СтрокаЭталона.ПроизводственныйКалендарь); + СтрокаРезультата.Год = СтрокаЭталона.Год; + СтрокаРезультата.ДатаГрафика = СтрокаЭталона.Дата; + СтрокаРезультата.ДеньВключенВГрафик = ВключаемыеВидыДней.Найти(СтрокаЭталона.ВидДня) <> Неопределено; + КонецЦикла; + + ОбъектПриемник = Результат; + + КонецЕсли; + // Конец СтандартныеПодсистемы.КалендарныеГрафики + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + Если МетаданныеОбъекта.Имя = "ПоставляемыеКурсыВалют" Тогда + + Результат = Менеджер.СоздатьНаборЗаписей(); + + Для Каждого ЭлементОтбора Из Эталон.Отбор Цикл + Если НЕ ЭлементОтбора.Использование Тогда + Продолжить; + КонецЕсли; + + Результат.Отбор[ЭлементОтбора.Имя].Установить(?(ЭлементОтбора.Имя="Валюта", + ПоставляемыеДанные.РазделеннаяСсылкаПоОбщей(ЭлементОтбора.Значение, "КодВалюты"), + ЭлементОтбора.Значение)); + КонецЦикла; + + Результат.ОбменДанными.Загрузка = Истина; + + Результат.Загрузить(Эталон.Выгрузить()); + + Для каждого Строка Из Результат Цикл + Строка.Валюта = Результат.Отбор.Валюта.Значение; + КонецЦикла; + + ОбъектПриемник = Результат; + СтандартаяОбработка = Ложь; + + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса + +КонецПроцедуры + +// Вызывается при необходимости обновления разделенного элемента из неразделенного. +// +// Параметры: +// Эталон - СправочникОбъект - неразделенный объект по которому необходимо +// обновить разделенный. +// ОбъектМД - ОбъектМетаданных - метаданные неразделенного справочника +// Менеджер - СправочникМенеджер - менджер разделенного регистра сведений +// ТипИсточника - Тип - тип ссылки неразделенного справочника +// ТипПриемник - Тип - тип ссылки разделенного справочника +// ОбъектПриемник - СправочникОбъект - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить незаписанный +// объект этому параметру. +// СтандартнаяОбработка - Булево - в случае если в процедуре выполнено +// переопределение стандартного поведения обновления, необходимо присвоить этому +// параметру значение Ложь. +// +Процедура ПередКопированиемОбъектаИзЭталона(Эталон, МетаданныеИсточника, Менеджер, ТипИсточника, + ТипПриемника, ОбъектПриемник, СтандартаяОбработка) Экспорт + + // СтандартныеПодсистемы.КалендарныеГрафики + Если МетаданныеИсточника.Имя = "ПроизводственныеКалендари" Тогда + + СоответствиеИменРеквизитов = Новый Соответствие; + СоответствиеИменРеквизитов.Вставить("ПроизводственныйКалендарь", "Ссылка"); + + СтандартаяОбработка = Ложь; + + СсылкаРезультата = ПоставляемыеДанные.РазделеннаяСсылкаПоОбщей(Эталон.Ссылка); + + МетаданныеПриемника = СсылкаРезультата.Метаданные(); + + ИерархическийСправочник = МетаданныеПриемника.Иерархический И МетаданныеИсточника.Иерархический; + + Результат = СсылкаРезультата.ПолучитьОбъект(); + Если Результат = Неопределено Тогда + Результат = Менеджер.СоздатьЭлемент(); + Результат.УстановитьСсылкуНового(СсылкаРезультата); + КонецЕсли; + Результат.ОбменДанными.Загрузка = Истина; + + Результат.Наименование = Эталон.Наименование; + + Если ИерархическийСправочник Тогда + Результат.Родитель = ПоставляемыеДанные.ПреобразоватьОбщееЗначениеВРазделенное(Эталон.Родитель); + КонецЕсли; + + ИерархияГрупп = МетаданныеПриемника.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов; + + Результат["ПроизводственныйКалендарь"] = Эталон["Ссылка"]; + Результат["ВидКалендаря"] = Перечисления.ВидыКалендарей.Пятидневка; + + ОбъектПриемник = Результат; + + КонецЕсли; + // Конец СтандартныеПодсистемы.КалендарныеГрафики + +КонецПроцедуры + +// При необходимости создает узел для области данных с переданным значеним +// разделителя. +// +// Параметры: +// ОбластьДанных - Число - значение разделеителя области данных для которой +// требуется создать узел. +// +Процедура СоздатьУзелОбластиДанных(Знач ОбластьДанных) Экспорт + + ПоставляемыеДанные.СоздатьУзелОбластиДанных(ОбластьДанных); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные + + +// СтандартныеПодсистемы.РассылкаОтчетов + +///////////////////////////////////////////////////////////////////////////////// +// Рассылка отчетов + +// Подключает отчет подсистемы "Дополнительные отчеты и обработки". +// Обработка исключений производится управляющим кодом. +// +// Параметры: +// ДопОтчет (СправочникСсылка.ДополнительныеОтчетыИОбработки) Отчет, который необходимо инициализировать +// ПараметрыОтчета (Структура) Набор параметров, получаемый в процессе проверки и подключения отчета +// см. описание функции "ИнициализироватьОтчет" модуля "РассылкаОтчетов" +// Результат (Булево, Неопределено) +// |- Истина - Удалось подключить дополнительный отчет +// |- Ложь - Не удалось подключить дополнительный отчет +// |- Неопределено - По умолчанию. Подсистема доп. отчетов недоступна. +// +Процедура РассылкаОтчетовПодключитьДопОтчет(ДопОтчет, ПараметрыОтчета, Результат) Экспорт + + // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + Если ДопОтчет.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.Отчет + ИЛИ ДопОтчет.Вид = Перечисления.ВидыДополнительныхОтчетовИОбработок.ДополнительныйОтчет Тогда + + ПараметрыОтчета.Имя = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(ДопОтчет); + ПараметрыОтчета.Объект = ВнешниеОтчеты.Создать(ПараметрыОтчета.Имя); + ПараметрыОтчета.Метаданные = ПараметрыОтчета.Объект.Метаданные(); + + Результат = Истина; + + Иначе + + ПараметрыОтчета.Ошибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Элемент %1 не является дополнительным отчетом'"), + "'"+ Строка(ДопОтчет) +"'" + ); + + Результат = Ложь; + + КонецЕсли; + // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки + +КонецПроцедуры + +// Записывает вложения в папку. +// +// Параметры: см. описание процедуры "ВыполнитьДоставку" модуля "РассылкаОтчетов" +// +Процедура РассылкаОтчетовДоставитьВПапку(ПараметрыДоставки, Вложения) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + + // Перенос вложений в таблицу + УстановитьПривилегированныйРежим(Истина); + + ТаблицаВложений = Новый ТаблицаЗначений; + ТаблицаВложений.Колонки.Добавить("ИмяФайла", Новый ОписаниеТипов("Строка")); + ТаблицаВложений.Колонки.Добавить("ПолныйПутьКФайлу", Новый ОписаниеТипов("Строка")); + ТаблицаВложений.Колонки.Добавить("Файл", Новый ОписаниеТипов("Файл")); + ТаблицаВложений.Колонки.Добавить("ФайлСсылка", Новый ОписаниеТипов("СправочникСсылка.Файлы")); + ТаблицаВложений.Колонки.Добавить("ИмяФайлаБезРасширения", Метаданные.Справочники.Файлы.Реквизиты.ПолноеНаименование.Тип); + + УстановитьПривилегированныйРежим(Ложь); + + Для Каждого Вложение Из Вложения Цикл + СтрокаТаблицы = ТаблицаВложений.Добавить(); + СтрокаТаблицы.ИмяФайла = Вложение.Ключ; + СтрокаТаблицы.ПолныйПутьКФайлу = Вложение.Значение; + СтрокаТаблицы.Файл = Новый Файл(СтрокаТаблицы.ПолныйПутьКФайлу); + СтрокаТаблицы.ИмяФайлаБезРасширения = СтрокаТаблицы.Файл.ИмяБезРасширения; + КонецЦикла; + + // Поиск существующих файлов + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | Файлы.Ссылка, + | Файлы.ПолноеНаименование + |ИЗ + | Справочник.Файлы КАК Файлы + |ГДЕ + | Файлы.ВладелецФайла = &ВладелецФайла + | И Файлы.ПолноеНаименование В(&МассивИменФайлов)"; + + Запрос.УстановитьПараметр("ВладелецФайла", ПараметрыДоставки.Папка); + Запрос.УстановитьПараметр("МассивИменФайлов", ТаблицаВложений.ВыгрузитьКолонку("ИмяФайлаБезРасширения")); + + СуществующиеФайлы = Запрос.Выполнить().Выгрузить(); + Для Каждого Файл Из СуществующиеФайлы Цикл + СтрокаТаблицы = ТаблицаВложений.Найти(Файл.ПолноеНаименование, "ИмяФайлаБезРасширения"); + СтрокаТаблицы.ФайлСсылка = Файл.Ссылка; + КонецЦикла; + + // Постоянные переменные + Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Рассылка отчетов %1 от %2'"), + "'"+ ПараметрыДоставки.Рассылка +"'", + Формат(ПараметрыДоставки.ДатаВыполнения, "ДЛФ=DT") + ); + ХранитьВерсии = Истина; + ЭтоВебКлиент = Ложь; + АдресВременногоХранилищаТекста = ""; + Пользователь = Пользователи.ТекущийПользователь(); + ЗаписатьВИсторию = Истина; + ВладелецФайла = ПараметрыДоставки.Папка; + + Для Каждого Вложение Из ТаблицаВложений Цикл + // Временные переменные + АдресВременногоХранилищаФайла = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Вложение.ПолныйПутьКФайлу)); + ВремяИзменения = Вложение.Файл.ПолучитьВремяИзменения(); + ВремяИзмененияУниверсальное = Вложение.Файл.ПолучитьУниверсальноеВремяИзменения(); + Размер = Вложение.Файл.Размер(); + РасширениеБезТочки = СтрЗаменить(Вложение.Файл.Расширение, ".", ""); + ИмяБезРасширения = Вложение.ИмяФайлаБезРасширения; + + // Запись + Если ЗначениеЗаполнено(Вложение.ФайлСсылка) Тогда + РаботаСФайламиВызовСервера.СоздатьВерсиюИОбновитьВерсиюВФайле( + ВремяИзменения, + ВремяИзмененияУниверсальное, + Вложение.ФайлСсылка, + ИмяБезРасширения, + Размер, + РасширениеБезТочки, + АдресВременногоХранилищаФайла, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент, + Пользователь + ); + Иначе + Вложение.ФайлСсылка = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией( + ВладелецФайла, + ИмяБезРасширения, + РасширениеБезТочки, + ВремяИзменения, + ВремяИзмененияУниверсальное, + Размер, + АдресВременногоХранилищаФайла, + АдресВременногоХранилищаТекста, + ЭтоВебКлиент, + Пользователь, + Комментарий, + ЗаписатьВИсторию + ); + КонецЕсли; + + // Заполнение ссылки на файл + Если ПараметрыДоставки.ДобавлятьСсылки <> "" Тогда + ПараметрыДоставки.ПредставлениеОтчетовПолучателя = СтрЗаменить( + ПараметрыДоставки.ПредставлениеОтчетовПолучателя, + Вложение.ПолныйПутьКФайлу, + ПолучитьНавигационнуюСсылкуИнформационнойБазы() +"#"+ ПолучитьНавигационнуюСсылку(Вложение.ФайлСсылка) + ); + КонецЕсли; + + // Очистка + УдалитьИзВременногоХранилища(АдресВременногоХранилищаФайла); + КонецЦикла; + + // Конец СтандартныеПодсистемы.РаботаСФайлами + +КонецПроцедуры + +// Проверяет право изменения папки. +// +// Параметры: см. описание процедуры "ВыполнитьДоставку" модуля "РассылкаОтчетов" +// +Процедура РассылкаОтчетовПравоИзмененияПапкиИФайлов(Папка, Результат) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + // СтандартныеПодсистемы.УправлениеДоступом + Результат = УправлениеДоступом.ЕстьПравоПоЗначениюДоступа("ИзменениеПапокИФайлов", Папка); + // Конец СтандартныеПодсистемы.УправлениеДоступом + // Конец СтандартныеПодсистемы.РаботаСФайлами + +КонецПроцедуры + +// Получает настройки прокси на сервере. +// +Процедура РассылкаОтчетовНастройкиПрокси(Прокси) Экспорт + + // СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + НастройкаПроксиСервера = ПолучениеФайловИзИнтернета.ПолучитьНастройкиПроксиНаСервере1СПредприятие(); + Если НастройкаПроксиСервера <> Неопределено Тогда + Прокси = Новый ИнтернетПрокси(); + Прокси.Установить("ftp", НастройкаПроксиСервера["Сервер"], НастройкаПроксиСервера["Порт"]); + ЗаполнитьЗначенияСвойств(Прокси, НастройкаПроксиСервера); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПолучениеФайловИзИнтернета + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.РассылкаОтчетов + + +// СтандартныеПодсистемы.УправлениеДоступом + +///////////////////////////////////////////////////////////////////////////////// +// Управление доступом + +// Устанавливает использование регламентного задания заполнения данных управления доступом. +// +// Параметры: +// Использование - Булево - Истина, если задание нужно включить, иначе Ложь. +// +Процедура УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Знач Использование) Экспорт + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + УправлениеДоступомВМоделиСервиса.УстановитьИспользованиеЗаданияЗаполненияДанных(Использование); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.УправлениеДоступомВМоделиСервиса + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.УправлениеДоступом + + +// СтандартныеПодсистемы.ФайловыеФункции + +///////////////////////////////////////////////////////////////////////////////// +// Файловые функции + +// Возвращает структуру, содержащую различные персональные настройки +// по работе с файлами +Процедура ПолучитьПерсональныеНастройкиРаботыСФайлами(Настройки) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.ПолучитьПерсональныеНастройкиФайловыхФункций(Настройки); + // Конец СтандартныеПодсистемы.РаботаСФайлами + +КонецПроцедуры + +// Добавляет файл на том при "Разместить файлы начального образа" +// +Процедура ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ХранитьФайлыВТомахНаДиске, ПрисоединяемыеФайлы) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ХранитьФайлыВТомахНаДиске); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ХранитьФайлыВТомахНаДиске, ПрисоединяемыеФайлы); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Удаляет регистрацию изменений после "Разместить файлы начального образа" +// +Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка, ПрисоединяемыеФайлы) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.УдалитьРегистрациюИзменений(ПланОбменаСсылка); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.УдалитьРегистрациюИзменений(ПланОбменаСсылка, ПрисоединяемыеФайлы); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Возвращает структуру с двоичными данными файла и подписи. +Функция ПолучитьДвоичныеДанныеФайлаИПодписи(ДанныеСтроки) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + Если РаботаСФайламиСлужебный.ЭтоЭлементРаботаСФайлами(ДанныеСтроки.Объект) Тогда + + Возврат РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаИДвоичныеДанные( + , ДанныеСтроки.Объект, ДанныеСтроки.АдресПодписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + Если ПрисоединенныеФайлыСлужебный.ЭтоЭлементПрисоединенныеФайлы(ДанныеСтроки.Объект) Тогда + + Возврат ПрисоединенныеФайлыСлужебный.ПолучитьДвоичныеДанныеФайлаИПодписи( + ДанныеСтроки.Объект, ДанныеСтроки.АдресПодписи); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + + Возврат Неопределено; + +КонецФункции + +// Возвращает текст запроса для извлечения текста +// +Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы = Ложь) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Возвращает число файлов с неизвлеченным текстом +// +Процедура ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(ЧислоВерсий) Экспорт + + ЧислоВерсий = 0; + + // СтандартныеПодсистемы.РаботаСФайлами + ЧислоВерсий = ЧислоВерсий + РаботаСФайламиВызовСервера.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ЧислоВерсий = ЧислоВерсий + ПрисоединенныеФайлыСлужебный.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +Процедура ПодсчитатьРазмерФайловНаТоме(СсылкаТома, РазмерФайлов) Экспорт + + РазмерФайлов = 0; + + // СтандартныеПодсистемы.РаботаСФайлами + РазмерФайлов = РазмерФайлов + РаботаСФайламиВызовСервера.ПодсчитатьРазмерФайловНаТоме(СсылкаТома); + // Конец СтандартныеПодсистемы.РаботаСФайлами + +КонецПроцедуры + +// Получает полный путь к файлу на диске +Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + Если РаботаСФайламиСлужебный.ЭтоЭлементРаботаСФайлами(ФайлСсылка) Тогда + Возврат РаботаСФайламиВызовСервера.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + Если ПрисоединенныеФайлыСлужебный.ЭтоЭлементПрисоединенныеФайлы(ФайлСсылка) Тогда + Возврат ПрисоединенныеФайлыСлужебный.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецФункции + +// Записывает извлеченный текст +Процедура ЗаписатьИзвлеченныйТекст(ФайлОбъект) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + Если РаботаСФайламиСлужебный.ЭтоЭлементРаботаСФайлами(ФайлОбъект) Тогда + РаботаСФайламиВызовСервера.ЗаписатьИзвлеченныйТекст(ФайлОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + Если ПрисоединенныеФайлыСлужебный.ЭтоЭлементПрисоединенныеФайлы(ФайлОбъект) Тогда + ПрисоединенныеФайлыСлужебный.ЗаписатьИзвлеченныйТекст(ФайлОбъект); + КонецЕсли; + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Возвращает навигационную ссылку на файл (на реквизит или во временное хранилище) +Функция ПолучитьНавигационнуюСсылкуФайла(ФайлСсылка, УникальныйИдентификатор) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + Если РаботаСФайламиСлужебный.ЭтоЭлементРаботаСФайлами(ФайлСсылка) Тогда + Возврат РаботаСФайламиВызовСервера.ПолучитьНавигационнуюСсылкуДляОткрытия(ФайлСсылка, УникальныйИдентификатор); + КонецЕсли; + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + Если ПрисоединенныеФайлыСлужебный.ЭтоЭлементПрисоединенныеФайлы(ФайлСсылка) Тогда + Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлСсылка, УникальныйИдентификатор).СсылкаНаДвоичныеДанныеФайла; + КонецЕсли; + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецФункции + +// Возвращает в параметре КоличествоФайловВТомах количество файлов в томах. +// +Процедура ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Возвращает Истина в параметре ЕстьХранимыеФайлы, если есть хранимые файлы к объекту ВнешнийОбъект. +// +Процедура ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Возвращает в параметре ХранимыеФайлы массив хранимых файлов к объекту ВнешнийОбъект. +// +Процедура ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы) Экспорт + + // СтандартныеПодсистемы.РаботаСФайлами + РаботаСФайламиВызовСервера.ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы); + // Конец СтандартныеПодсистемы.РаботаСФайлами + + // СтандартныеПодсистемы.ПрисоединенныеФайлы + ПрисоединенныеФайлыСлужебный.ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы); + // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы + +КонецПроцедуры + +// Читает кодировку версии файла // // Параметры -// НомерСеанса - Число - номер сеанса для отключения. -// Результат - Булево – результат отключения сеанса. -// СообщениеОбОшибке - Строка - в этом параметре возвращается текст сообщения об ошибке в случае неудачи. -// СтандартнаяОбработка - Булево - вернуть Ложь, если необходимо запретить стандартную обработку отключения сеанса. +// ВерсияСсылка - ссылка на версию файла // -Процедура ПриОтключенииСеанса(НомерСеанса, Результат, СообщениеОбОшибке, СтандартнаяОбработка) Экспорт +// Возвращаемое значение: +// Строка кодировки +Процедура ПолучитьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) Экспорт - // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса - Если СоединенияИБПовтИсп.ПараметрыОтключенияСеансов().WindowsПлатформаНаСервере Тогда - Возврат; - КонецЕсли; - - Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - Возврат; - КонецЕсли; - - // Если сервер работает не под управлением ОС Microsoft Windows, то передаем управление Агенту сервиса. - СтандартнаяОбработка = Ложь; - УстановитьПривилегированныйРежим(Истина); - Параметры = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); - Попытка - Результат = РаботаВМоделиСервиса.УдалитьСеансыИРазорватьСоединенияЧерезАгентСервиса(НомерСеанса, Параметры); - Исключение - СообщениеОбОшибке = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - Результат = Ложь; - КонецПопытки; - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + // СтандартныеПодсистемы.РаботаСФайлами + Кодировка = РаботаСФайламиВызовСервера.ПолучитьКодировкуВерсииФайла(ВерсияСсылка); + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры -// Конец СтандартныеПодсистемы.ЗавершениеРаботыПользователей - -// СтандартныеПодсистемы.КалендарныеГрафики - -///////////////////////////////////////////////////////////////////////////////// -// Календарные графики -// - -// Процедура выполняет необходимые действия перед записью набора записей -// регистра сведений ДанныеПроизводственногоКалендаря. -// В частности, формирует в переданном объекте Запрос временную таблицу -// ВТ_СтарыеКлючи, содержащую данные набора записей -// -// Параметры: -// Запрос - объект запрос, в менеджере временных таблиц которого формируется таблица данных регистра -// НаборЗаписей - набор записей регистра сведений -// -Процедура ДанныеПроизводственногоКалендаряПередЗаписьюНабораЗаписей(Отказ, Замещение, НаборЗаписей, Запрос) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - ПоставляемыеДанные.СформироватьВременнуюТаблицуДанныхНабораЗаписей(Запрос, НаборЗаписей, "ПроизводственныйКалендарь, Дата, Год"); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - -КонецПроцедуры - -// Процедура выполняет необходимые действия при записи набора записей -// регистра сведений ДанныеПроизводственногоКалендаря. -// В частности, регистрирует изменения данных набора записей регистра сведений -// в плане обмена "Поставляемые данные". -// -// Параметры: -// Запрос - объект запрос, в менеджере временных таблиц которого сформирована временная таблица данных регистра до изменения -// НаборЗаписей - набор записей регистра сведений -// -Процедура ДанныеПроизводственногоКалендаряПриЗаписиНабораЗаписей(Отказ, Замещение, НаборЗаписей, Запрос) Экспорт - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхНабораЗаписей(Запрос, НаборЗаписей, "ПроизводственныйКалендарь", "ПроизводственныйКалендарь, Дата, Год"); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ПоставляемыеДанные - -КонецПроцедуры - -// Конец СтандартныеПодсистемы.КалендарныеГрафики - - -///////////////////////////////////////////////////////////////////////////////// -// Версионирование интерфейсов -// - -// Заполняет структуру массивами поддерживаемых версий всех подлежащих версионированию подсистем, -// используя в качестве ключей названия подсистем. -// Обеспечивает функциональность Web-сервиса InterfaceVersion. -// При внедрении надо поменять тело процедуры так, чтобы она возвращала актуальные наборы версий (см. пример.ниже). -// -// Параметры: -// СтруктураПоддерживаемыхВерсий - Структура: -// - Ключи = Названия подсистем. -// - Значения = Массивы названий поддерживаемых версий. -// -// Пример реализации: -// -// // СервисПередачиФайлов -// МассивВерсий = Новый Массив; -// МассивВерсий.Добавить("1.0.1.1"); -// МассивВерсий.Добавить("1.0.2.1"); -// СтруктураПоддерживаемыхВерсий.Вставить("СервисПередачиФайлов", МассивВерсий); -// // Конец СервисПередачиФайлов -// -Процедура ПолучитьПоддерживаемыеВерсии(Знач СтруктураПоддерживаемыхВерсий) Экспорт - - // СтандартныеПодсистемы.ОбменДанными - МассивВерсий = Новый Массив; - МассивВерсий.Добавить("2.0.1.6"); - СтруктураПоддерживаемыхВерсий.Вставить("ОбменДанными", МассивВерсий); - // Конец СтандартныеПодсистемы.ОбменДанными - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса - МассивВерсий = Новый Массив; - МассивВерсий.Добавить("2.0.1.6"); - СтруктураПоддерживаемыхВерсий.Вставить("ОбменДаннымиВМоделиСервиса", МассивВерсий); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса - - // СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями - МассивВерсий = Новый Массив; - МассивВерсий.Добавить("2.0.1.6"); - СтруктураПоддерживаемыхВерсий.Вставить("ОбменСообщениями", МассивВерсий); - // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменСообщениями - -КонецПроцедуры - -// Выполняет дополнительные преобразования параметров подключения. -// -// Параметры: -// СтруктураПараметровПодключения - Структура: -// - URL - Строка - Адрес опубликованного приложения. -// - UserName - Строка - Имя пользователя сервиса. -// - Password - Строка - Пароль пользователя сервиса. -// ИмяИнтерфейса - Строка. -// -// Пример реализации: -// // Перед подключением к сервису надо декодировать пароль из base64-представления: -// Если СтруктураПараметровПодключения.Свойство("Password") -// И ЗначениеЗаполнено(СтруктураПараметровПодключения.Password) Тогда -// -// СтруктураПараметровПодключения.password = Base64ВСтроку(СтруктураПараметровПодключения.password); -// -// КонецЕсли; -// -Процедура ПреобразоватьПараметрыПодключенияКСервису(Знач СтруктураПараметровПодключения, Знач ИмяИнтерфейса = Неопределено) Экспорт - - -КонецПроцедуры +// Конец СтандартныеПодсистемы.ФайловыеФункции diff --git a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl index 7299182ab..3fa947dd3 100644 --- a/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl +++ b/SSL/src/CommonModules/СтандартныеПодсистемыСервер/Module.bsl @@ -3,6 +3,20 @@ // //////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает признак, является ли конфигурация базовой. +// +// Возвращаемое значение: +// Булево - Истина, если конфигурация - базовая. +// +Функция ЭтоБазоваяВерсияКонфигурации() Экспорт + + Возврат СтандартныеПодсистемыПереопределяемый.ЭтоБазоваяВерсияКонфигурации(); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -20,7 +34,7 @@ // Функция ВерсияБиблиотеки() Экспорт - Возврат "2.0.1.19"; + Возврат "2.1.1.22"; КонецФункции @@ -41,11 +55,41 @@ // Функция ДобавитьПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт - Параметры.Вставить("ОшибкаАвторизации", Пользователи.АвторизоватьТекущегоПользователя()); - Если ЗначениеЗаполнено(Параметры.ОшибкаАвторизации) Тогда + // Обязательные параметры для всех режимов работы + Параметры.Вставить("ДоступноИспользованиеРазделенныхДанных", + ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()); + + Параметры.Вставить("ПервыйЗапускИнформационнойБазы", + ОбновлениеИнформационнойБазы.ПервыйЗапускИнформационнойБазы()); + + Параметры.Вставить("РазделениеВключено", ОбщегоНазначенияПовтИсп.РазделениеВключено()); + Параметры.Вставить("ПодробнаяИнформация", Метаданные.ПодробнаяИнформация); + + Если Параметры.РазделениеВключено И Не Параметры.ДоступноИспользованиеРазделенныхДанных Тогда Возврат Ложь; КонецЕсли; + // Параметры для работы в локальном режиме или в сеансе с установленными значениями разделителей в модели сервиса + Параметры.Вставить("ОшибкаАвторизации", ПользователиСлужебный.АвторизоватьТекущегоПользователя(Истина)); + Если Параметры.ОшибкаАвторизации <> "" Тогда + Возврат Ложь; + КонецЕсли; + + Параметры.Вставить("ИнформационнаяБазаЗаблокированаДляОбновления", + ОбновлениеИнформационнойБазы.ПроверитьНевозможностьОбновленияИнформационнойБазы()); + Параметры.Вставить("НеобходимоОбновлениеИнформационнойБазы", + ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы()); + Параметры.Вставить("ЭтоРазделеннаяКонфигурация", ОбщегоНазначенияПовтИсп.ЭтоРазделеннаяКонфигурация()); + + ПараметрыПроверки = Новый ФиксированнаяСтруктура("МинимальноНеобходимаяВерсияПлатформы,РаботаВПрограммеЗапрещена", + "8.2.15.318", Ложь); + ОбщегоНазначенияВызовСервераПереопределяемый.ПолучитьМинимальноНеобходимуюВерсиюПлатформы(ПараметрыПроверки); + Параметры.Вставить("МинимальноНеобходимаяВерсияПлатформы", ПараметрыПроверки.МинимальноНеобходимаяВерсияПлатформы); + Параметры.Вставить("РаботаВПрограммеЗапрещена", ПараметрыПроверки.РаботаВПрограммеЗапрещена); + Параметры.Вставить("ЕстьДоступДляОбновленияВерсииПлатформы", ПравоДоступа("Администрирование", Метаданные)); + + ДобавитьОбщиеПараметрыРаботыКлиента(Параметры); + Возврат Истина; КонецФункции @@ -58,29 +102,53 @@ // Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт - Параметры.Вставить("ИнформационнаяБазаЗаблокированаДляОбновления", - ОбновлениеИнформационнойБазы.ПроверитьНевозможностьОбновленияИнформационнойБазы()); - Параметры.Вставить("НеобходимоОбновлениеИнформационнойБазы", - ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы()); - Параметры.Вставить("АвторизованныйПользователь", Пользователи.АвторизованныйПользователь()); - Параметры.Вставить("ЭтоБазоваяВерсияКонфигурации", СтандартныеПодсистемыПереопределяемый.ЭтоБазоваяВерсияКонфигурации()); + Параметры.Вставить("ДоступноИспользованиеРазделенныхДанных", + ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()); + Параметры.Вставить("РазделениеВключено", ОбщегоНазначенияПовтИсп.РазделениеВключено()); + + ДобавитьОбщиеПараметрыРаботыКлиента(Параметры); - УстановитьПривилегированныйРежим(Истина); - Параметры.Вставить("ЗаголовокПриложения", СокрЛП(Константы.ЗаголовокСистемы.Получить())); - УстановитьПривилегированныйРежим(Ложь); - Параметры.Вставить("ИмяКонфигурации", Метаданные.Имя); + Параметры.Вставить("ЭтоБазоваяВерсияКонфигурации", ЭтоБазоваяВерсияКонфигурации()); + + Параметры.Вставить("ИмяКонфигурации", Метаданные.Имя); Параметры.Вставить("СинонимКонфигурации", Метаданные.Синоним); - Параметры.Вставить("ВерсияКонфигурации", Метаданные.Версия); + Параметры.Вставить("ВерсияКонфигурации", Метаданные.Версия); Параметры.Вставить("ПодробнаяИнформация", Метаданные.ПодробнаяИнформация); - Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); - Параметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", ЗапрашиватьПодтверждениеПриЗавершенииПрограммы()); - Параметры.Вставить("ТекущийПользователь", Пользователи.ТекущийПользователь()); + + Параметры.Вставить("ЗапрашиватьПодтверждениеПриЗавершенииПрограммы", + ЗапрашиватьПодтверждениеПриЗавершенииПрограммы()); + // Параметры для внешних подключений пользователей Параметры.Вставить("ИнформацияОПользователе", ПолучитьИнформациюОПользователе()); Параметры.Вставить("ИмяCOMСоединителя", ОбщегоНазначения.ИмяCOMСоединителя()); Параметры.Вставить("ПоправкаКВремениСеанса", ТекущаяДатаСеанса()); // записываем серверное время для последующей замены его на разницу с клиентом. - СтандартныеПодсистемыПереопределяемый.ДобавитьПараметрыРаботыКлиентаВМоделиСервиса(Параметры); + +КонецПроцедуры + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// при запуске конфигурации и в дальнейшем во время работы с ней. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьОбщиеПараметрыРаботыКлиента(Параметры) + + Если Не Параметры.РазделениеВключено Или Параметры.ДоступноИспользованиеРазделенныхДанных Тогда + + Параметры.Вставить("АвторизованныйПользователь", Пользователи.АвторизованныйПользователь()); + Параметры.Вставить("ПредставлениеПользователя", Строка(Параметры.АвторизованныйПользователь)); + + УстановитьПривилегированныйРежим(Истина); + Параметры.Вставить("ЗаголовокПриложения", СокрЛП(Константы.ЗаголовокСистемы.Получить())); + УстановитьПривилегированныйРежим(Ложь); + + КонецЕсли; + + Параметры.Вставить("ЭтоГлавныйУзел", ПланыОбмена.ГлавныйУзел() = Неопределено); + Параметры.Вставить("ИнформационнаяБазаФайловая", ОбщегоНазначения.ИнформационнаяБазаФайловая()); + Параметры.Вставить("ТребуетсяОбновлениеКонфигурацииУзлаРИБ", + ОбновлениеИнформационнойБазы.ТребуетсяОбновлениеКонфигурацииУзлаРИБ()); КонецПроцедуры @@ -97,7 +165,7 @@ МассивВерсий = Неопределено; СтруктураПоддерживаемыхВерсий = Новый Структура; - СтандартныеПодсистемыПереопределяемый.ПолучитьПоддерживаемыеВерсии(СтруктураПоддерживаемыхВерсий); + СтандартныеПодсистемыПереопределяемый.ПолучитьПоддерживаемыеВерсииПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий); СтруктураПоддерживаемыхВерсий.Свойство(ИмяПодсистемы, МассивВерсий); @@ -213,7 +281,22 @@ // Процедура УстановитьКонстантуНеИспользоватьРазделениеПоОбластямДанных() Экспорт - Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(НЕ Константы.ИспользоватьРазделениеПоОбластямДанных.Получить()); + УстановитьПривилегированныйРежим(Истина); + + Если Константы.ИспользоватьРазделениеПоОбластямДанных.Получить() Тогда + + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Ложь); + Константы.ЭтоАвтономноеРабочееМесто.Установить(Ложь); + + ИначеЕсли Константы.ЭтоАвтономноеРабочееМесто.Получить() Тогда + + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Ложь); + + Иначе + + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина); + + КонецЕсли; КонецПроцедуры @@ -243,7 +326,7 @@ ТекущийПользователь = ПользователиИнформационнойБазы.ТекущийПользователь(); - Если ПользователиСерверПовтИсп.АутентификацияOpenIDНастраивается() Тогда + Если ПользователиСлужебныйПовтИсп.АутентификацияOpenIDНастраивается() Тогда АутентификацияOpenID = ТекущийПользователь.АутентификацияOpenID; Иначе АутентификацияOpenID = Истина; diff --git a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl index 61e553624..fd4eaae3f 100644 --- a/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/СтроковыеФункцииКлиентСервер/Module.bsl @@ -353,10 +353,11 @@ КонецЕсли; - Попытка + Если Не ПустаяСтрока(ИмяПараметра) Тогда + Результат.Вставить(ИмяПараметра, ЗначениеПараметра); - Исключение - КонецПопытки; + + КонецЕсли; КонецЦикла; @@ -616,10 +617,6 @@ // Функция ДополнитьСтроку(Знач Строка, Знач ДлинаСтроки, Знач Символ = "0", Знач Режим = "Слева") Экспорт - Если ПустаяСтрока(Символ) Тогда - Символ = "0"; - КонецЕсли; - // длина символа не должна превышать единицы Символ = Лев(Символ, 1); diff --git a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl index d22d68ec1..468dc6b8b 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступом/Module.bsl @@ -60,7 +60,7 @@ // Проверка, что роль назначается пользователю через группу доступа по профилю с разрешенными наборами значений доступа. Запрос.УстановитьПараметр("НаборыЗначенийДоступа", НаборыЗначенийДоступа); - Запрос.УстановитьПараметр("СвойстваВидовДоступа", СвойстваВидаДоступа()); + Запрос.УстановитьПараметр("СвойстваВидовДоступа", УправлениеДоступомСлужебный.СвойстваВидаДоступа()); Запрос.УстановитьПараметр("ДобавлятьРуководителямДоступПодчиненных", ДобавлятьРуководителямДоступПодчиненных()); Запрос.УстановитьПараметр("ВидДоступаПользователи", ?(ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи"), ПланыВидовХарактеристик.ВидыДоступа.Пользователи, @@ -334,8 +334,11 @@ КонецЕсли; УстановитьПривилегированныйРежим(Истина); + // Подготовка массива ролей, хотя бы одна из которых требуется для права по значению доступа. - ОписаниеПрава = ВозможныеПраваПоЗначениюДоступа(ЗначениеДоступа.Метаданные().ПолноеИмя()).Найти(Право, "Имя"); + ОписаниеПрава = УправлениеДоступомСлужебный.ВозможныеПраваПоЗначениюДоступа( + ЗначениеДоступа.Метаданные().ПолноеИмя()).Найти(Право, "Имя"); + Если ОписаниеПрава = Неопределено Тогда ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не найдено право ""%1"" таблицы ""%2""'"), Право, ЗначениеДоступа.Метаданные().ПолноеИмя())); КонецЕсли; @@ -386,7 +389,10 @@ | ПО ГруппыДоступаПользователя.ГруппаДоступа = ЗначенияГруппДоступа.ГруппаДоступа | И (ЗначенияГруппДоступа.ВидДоступа = &ВидДоступа) | И (ЗначенияГруппДоступа.ТолькоВидДоступа)"; - Запрос.УстановитьПараметр("ВидДоступа", ВидыДоступаТаблицы(ЗначениеДоступа.Метаданные().ПолноеИмя())[0]); + + Запрос.УстановитьПараметр("ВидДоступа", УправлениеДоступомСлужебный.ВидыДоступаТаблицы( + ЗначениеДоступа.Метаданные().ПолноеИмя())[0]); + Выборка = Запрос.Выполнить().Выбрать(); Выборка.Следующий(); @@ -494,9 +500,9 @@ УстановитьПривилегированныйРежим(Истина); - Возврат(ПараметрыСеанса.ОграничиватьДоступПоВиду <> ""); + Возврат ПараметрыСеанса.ОграничиватьДоступПоВиду <> ""; -КонецФункции // ОграничиватьДоступНаУровнеЗаписей() +КонецФункции // Возвращает значение константы ДобавлятьРуководителямДоступПодчиненных. Функция ДобавлятьРуководителямДоступПодчиненных() Экспорт @@ -725,13 +731,55 @@ НаборыПравДляУмножения = Таблица.Скопировать(); НаборыОграниченийДляУмножения = Таблица.Скопировать(); - ДобавитьНаборыДляПрава("Чтение", ЗависимостиПрав, Таблица, НаборыПравДляУмножения, НаборыОграниченийДляУмножения, НаборыЧтения, НаборыДобавления, НаборыИзменения, СсылкаНаОбъект); - ДобавитьНаборыДляПрава("Добавление", ЗависимостиПрав, Таблица, НаборыПравДляУмножения, НаборыОграниченийДляУмножения, НаборыЧтения, НаборыДобавления, НаборыИзменения, СсылкаНаОбъект); - ДобавитьНаборыДляПрава("Изменение", ЗависимостиПрав, Таблица, НаборыПравДляУмножения, НаборыОграниченийДляУмножения, НаборыЧтения, НаборыДобавления, НаборыИзменения, СсылкаНаОбъект); - ДобавитьНаборыДляПрава("Удаление", ЗависимостиПрав, Таблица, НаборыПравДляУмножения, НаборыОграниченийДляУмножения, НаборыЧтения, НаборыДобавления, НаборыИзменения, СсылкаНаОбъект); + ДобавитьНаборыДляПрава( + "Чтение", + ЗависимостиПрав, + Таблица, + НаборыПравДляУмножения, + НаборыОграниченийДляУмножения, + НаборыЧтения, + НаборыДобавления, + НаборыИзменения, + СсылкаНаОбъект); + + ДобавитьНаборыДляПрава( + "Добавление", + ЗависимостиПрав, + Таблица, + НаборыПравДляУмножения, + НаборыОграниченийДляУмножения, + НаборыЧтения, + НаборыДобавления, + НаборыИзменения, + СсылкаНаОбъект); + + ДобавитьНаборыДляПрава( + "Изменение", + ЗависимостиПрав, + Таблица, + НаборыПравДляУмножения, + НаборыОграниченийДляУмножения, + НаборыЧтения, + НаборыДобавления, + НаборыИзменения, + СсылкаНаОбъект); + + ДобавитьНаборыДляПрава( + "Удаление", + ЗависимостиПрав, + Таблица, + НаборыПравДляУмножения, + НаборыОграниченийДляУмножения, + НаборыЧтения, + НаборыДобавления, + НаборыИзменения, + СсылкаНаОбъект); Если НаборыПравДляУмножения.Количество() > 0 Тогда - ДобавитьНаборыЗначенийДоступа(НаборыПравДляУмножения, НаборыОграниченийДляУмножения, Истина); + + ДобавитьНаборыЗначенийДоступа( + НаборыПравДляУмножения, НаборыОграниченийДляУмножения, Истина); + Если НаборыПравДляУмножения.Количество() > 0 Тогда ДобавитьНаборыЗначенийДоступа(Таблица, НаборыПравДляУмножения); КонецЕсли; @@ -1502,7 +1550,7 @@ ОбъектыРучногоОбновления.Колонки.Добавить("Ссылка"); КонецЕсли; - КлючСеанса = УправлениеДоступомСерверПовтИсп.КлючСеанса(); + КлючСеанса = УправлениеДоступомСлужебныйПовтИсп.КлючСеанса(); Индекс = ОбъектыРучногоОбновления.Количество()-1; РегистрацияНеНайдена = Истина; @@ -1510,9 +1558,9 @@ Пока Индекс >= 0 Цикл Если ОбъектыРучногоОбновления[Индекс].КлючСеанса <> КлючСеанса Тогда ОбъектыРучногоОбновления.Удалить(Индекс); - // + ИначеЕсли ОбъектыРучногоОбновления[Индекс].Ссылка = Ссылка Тогда - // + Если Зарегистрировать Тогда РегистрацияНеНайдена = Ложь; Иначе @@ -1569,11 +1617,14 @@ Если СсылкаНаОбъект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда // Изменение объекта не требуется - ЗаписатьНаборыЗначенийДоступа(Объект); + УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступа(Объект); Иначе // Изменение объекта требуется - Таблица = УправлениеДоступомСобытия.ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект); - Если НаборыЗначенийДоступаТабличнойЧастиИзменены(СсылкаНаОбъект, Таблица) Тогда + Таблица = УправлениеДоступомСлужебный.ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект); + + Если УправлениеДоступомСлужебный.НаборыЗначенийДоступаТабличнойЧастиИзменены( + СсылкаНаОбъект, Таблица) Тогда + Объект.ОбменДанными.Загрузка = Истина; Объект.ДополнительныеСвойства.Вставить("ЗаписатьНаборыЗначенийДоступа"); Объект.ДополнительныеСвойства.Вставить("ЗаписатьЗависимыеНаборыЗначенийДоступа"); @@ -1585,41 +1636,72 @@ КонецПроцедуры +// Обработчик подписок ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей* на событие ПередЗаписью +// вызывает заполнение значений доступа табличной части объекта НаборыЗначенийДоступа, +// когда для ограничения доступа к самому объекту используется шаблон #ПоНаборамЗначений. +// Возможен случай использования подсистемы Управление доступом, когда +// указанной подписки не существует, если для указанной цели наборы не применяются. +// +// Обработчик подписки на событие ПередЗаписью для типов: +// СправочникОбъект +// ДокументОбъект +// ПланВидовХарактеристикОбъект +// ПланСчетовОбъект +// ПланВидовРасчетаОбъект +// БизнесПроцессОбъект +// ЗадачаОбъект +// ПланОбменаОбъект +// +Процедура ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей(Объект, Отказ = Неопределено, РежимЗаписи = Неопределено, РежимПроведения = Неопределено) Экспорт + + Если Объект.ОбменДанными.Загрузка + И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьНаборыЗначенийДоступа") Тогда + + Возврат; + КонецЕсли; + + Если НЕ ( ПривилегированныйРежим() + И Объект.ДополнительныеСвойства.Свойство( + "НаборыЗначенийДоступаТабличнойЧастиЗаполнены")) Тогда + + Объект.НаборыЗначенийДоступа.Загрузить( + УправлениеДоступомСлужебный.ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект)); + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции, используемые в переопределяемом модуле -// Возвращает структуру для удобства описания начальных профилей. +// Возвращает структуру для удобства описания поставляемых профилей. // -// Чтобы задать предустановленный вид доступа, +// Чтобы указать предустановленный вид доступа, // нужно в представлении задать строку Предустановленный. // -// Чтобы добавить значение доступа нужно задать +// Чтобы добавить значение доступа нужно указать // полное имя предопределенного элемента, например, // "Справочник.ГруппыПользователей.ВсеПользователи". // Функция НовоеОписаниеПрофиляГруппДоступа() Экспорт - Возврат( Новый Структура("Идентификатор, - |Наименование, - |Описание, - |Роли, - |ВидыДоступа, - |ЗначенияДоступа", - "", - "", - "", - Новый Массив, - Новый СписокЗначений, - Новый СписокЗначений) ); + НовоеОписание = Новый Структура; + НовоеОписание.Вставить("Идентификатор", ""); + НовоеОписание.Вставить("Наименование", ""); + НовоеОписание.Вставить("Описание", ""); + НовоеОписание.Вставить("Роли", Новый Массив); + НовоеОписание.Вставить("ВидыДоступа", Новый СписокЗначений); + НовоеОписание.Вставить("ЗначенияДоступа", Новый СписокЗначений); + + Возврат НовоеОписание; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции, используемые для обновления вторичных данных +// Процедуры и функции, используемые для обновления вспомогательных данных // Перезаписывает группы значения доступа и виды доступа значения доступа // в РегистрСведений.ГруппыЗначенийДоступа, используя объект или ссылку на объект. -// Вызывается из УправлениеДоступомСобытия.ЗаписатьГруппыДоступа(), но может быть вызвана +// Вызывается из УправлениеДоступомСлужебный.ЗаписатьГруппыИВидыДоступа(), но может быть вызвана // из любого места, например, при включении ограничения доступа на уровне записи. // // В частности используется для обновления группировок пользователей, @@ -1804,7 +1886,8 @@ |УНИЧТОЖИТЬ ТаблицаПодчиненностиПользователей"; Запрос.Выполнить(); - Запрос.УстановитьПараметр("ВсеПустыеСсылки", УправлениеДоступомСерверПовтИсп.ВсеПустыеСсылки()); + Запрос.УстановитьПараметр("ВсеПустыеСсылки", + УправлениеДоступомСлужебныйПовтИсп.ВсеПустыеСсылки()); // 2. Подготовка данных для работы ограничений по видам доступа Пользователи и ВнешниеПользователи // (данные не учитывают подчиненность пользователей) @@ -2218,7 +2301,7 @@ // 3. Подготовка данных для работы ограничений по видам доступа Пользователи и ВнешниеПользователи // когда ДобавлятьРуководителямДоступПодчиненных для проверки текущих пользователей // (ТекущиеПользователи = ТекущийПользователь + ПодчиненныеПользователиПроверяемойГруппыДоступа) - ОбновитьПодчиненныхПользователейГруппДоступа(); + УправлениеДоступомСлужебный.ОбновитьПодчиненныхПользователейГруппДоступа(); // Обновление ролей пользователей, для которых роли могли быть изменены. Если СсылкаНаОбъект = Справочники.ГруппыПользователей.ВсеПользователи ИЛИ @@ -2239,8 +2322,13 @@ ОбновитьРолиПользователей(ИзмененныеПользователи); Иначе - ВидыДоступа = ВидыДоступаТаблицы(СсылкаНаОбъект.Метаданные().ПолноеИмя()); - ВидДоступаЧерезПраваПоЗначениямДоступа = (ВидыДоступа.Количество() = 1) И СвойстваВидаДоступа(ВидыДоступа[0]).ВидДоступаЧерезПраваПоЗначениямДоступа; + ВидыДоступа = УправлениеДоступомСлужебный.ВидыДоступаТаблицы( + СсылкаНаОбъект.Метаданные().ПолноеИмя()); + + ВидДоступаЧерезПраваПоЗначениямДоступа = + (ВидыДоступа.Количество() = 1) + И УправлениеДоступомСлужебный.СвойстваВидаДоступа( + ВидыДоступа[0]).ВидДоступаЧерезПраваПоЗначениямДоступа; Если ВидДоступаЧерезПраваПоЗначениямДоступа Тогда @@ -2336,7 +2424,7 @@ Если ОграничиватьДоступНаУровнеЗаписей() Тогда // Заполнение группы значений для каждого вида доступа. Для каждого ВидДоступа Из ВидыДоступа Цикл - Свойства = СвойстваВидаДоступа(ВидДоступа); + Свойства = УправлениеДоступомСлужебный.СвойстваВидаДоступа(ВидДоступа); ПостфиксИмени = ?(Свойства.ВидДоступаЕдинственныйДляТипаЗначенияДоступа, "", ПланыВидовХарактеристик.ВидыДоступа.ПолучитьИмяПредопределенного(ВидДоступа)); Если НЕ Свойства.ВидДоступаЕдинственныйДляТипаЗначенияДоступа И Объект["ВидДоступа" + ПостфиксИмени] <> Истина Тогда @@ -2383,7 +2471,8 @@ // Пользователи с ролью "ПолныеПрава" игнорируется. // // Параметры: -// МассивПользователей - Массив элементов СправочникСсылка.Пользователи, СправочникСсылка.ВнешниеПользователи. +// МассивПользователей - Массив элементов СправочникСсылка.Пользователи, +// СправочникСсылка.ВнешниеПользователи. // Процедура ОбновитьРолиПользователей(Знач МассивПользователей) Экспорт @@ -2400,7 +2489,7 @@ Пользователи.НайтиНеоднозначныхПользователейИБ(); - // Все пользователи, внешние пользователи и администраторы + // Все не служебные пользователи, администраторы и внешние пользователи. Запрос = Новый Запрос( "ВЫБРАТЬ | Пользователи.Ссылка КАК Пользователь @@ -2409,6 +2498,7 @@ | Справочник.Пользователи КАК Пользователи |ГДЕ | Пользователи.Ссылка В(&Пользователи) + | И Пользователи.Служебный = ЛОЖЬ | |ОБЪЕДИНИТЬ | @@ -2433,9 +2523,9 @@ |ВЫБРАТЬ | ВсеПользователи.Пользователь, | ВЫБОР - | КОГДА (НЕ Пользователи.Ссылка ЕСТЬ NULL ) + | КОГДА НЕ Пользователи.Ссылка ЕСТЬ NULL | ТОГДА Пользователи.ИдентификаторПользователяИБ - | КОГДА (НЕ ВнешниеПользователи.Ссылка ЕСТЬ NULL ) + | КОГДА НЕ ВнешниеПользователи.Ссылка ЕСТЬ NULL | ТОГДА ВнешниеПользователи.ИдентификаторПользователяИБ | ИНАЧЕ НЕОПРЕДЕЛЕНО | КОНЕЦ КАК ИдентификаторПользователяИБ @@ -2646,7 +2736,7 @@ | ГДЕ | ВсеДоступныеРоли.Имя = ВсеНовыеРолиПользователей.Роль)"; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.УстановитьПараметр("ВсеДоступныеРоли", ПользователиСерверПовтИсп.ВсеРоли()); + Запрос.УстановитьПараметр("ВсеДоступныеРоли", ПользователиСлужебныйПовтИсп.ВсеРоли()); Запрос.УстановитьПараметр("ОбновляемыеПользователи", ОбновляемыеПользователи); Запрос.УстановитьПараметр("СтарыеРолиПользователей", СтарыеРолиПользователей); @@ -2739,16 +2829,20 @@ Пока Выборка.Следующий() Цикл Если НЕ ЗначениеЗаполнено(Выборка.Роль) Тогда Если ПользовательИБ <> Неопределено Тогда - ПользовательИБ.Записать(); + ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); КонецЕсли; - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ОбновляемыеПользователи.Найти(Выборка.Пользователь, "Пользователь").ИдентификаторПользователяИБ); + + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( + ОбновляемыеПользователи.Найти( + Выборка.Пользователь, "Пользователь").ИдентификаторПользователяИБ); + ПользовательИБ.Роли.Очистить(); Иначе ПользовательИБ.Роли.Добавить(Метаданные.Роли[Выборка.Роль]); КонецЕсли; КонецЦикла; Если ПользовательИБ <> Неопределено Тогда - Пользователи.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); + ПользователиСлужебный.ЗаписатьПользователяИнформационнойБазы(ПользовательИБ); КонецЕсли; КонецПроцедуры @@ -2780,7 +2874,9 @@ | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа"); ТекущиеПрофили = Запрос.Выполнить().Выгрузить(); - ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + ОписанияПрофилей = УправлениеДоступомСлужебныйПовтИсп + .ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + ОбновленныеПрофили = Новый Массив; ОбновленныеГруппыДоступа = Новый Массив; @@ -2792,14 +2888,20 @@ Если СтрокаТекущегоПрофиля = Неопределено Тогда // Создание нового поставляемого профиля. - ОбновитьПрофильГруппДоступа(ОписаниеПрофиля); - ИначеЕсли НЕ СтрокаТекущегоПрофиля.ПоставляемыйПрофильИзменен ИЛИ НЕ ТолькоНеИзмененные Тогда + УправлениеДоступомСлужебный.ОбновитьПрофильГруппДоступа(ОписаниеПрофиля); + + ИначеЕсли НЕ СтрокаТекущегоПрофиля.ПоставляемыйПрофильИзменен + ИЛИ НЕ ТолькоНеИзмененные Тогда + // Обновление поставляемого профиля. - ПрофильОбновлен = ОбновитьПрофильГруппДоступа(ОписаниеПрофиля, Истина); + ПрофильОбновлен = УправлениеДоступомСлужебный.ОбновитьПрофильГруппДоступа( + ОписаниеПрофиля, Истина); КонецЕсли; Если ОбновлятьГруппыДоступа Тогда - ГруппыДоступаПрофиляОбновлены = ОбновитьГруппыДоступаПрофиля(Профиль, УдаляемыеВидыДоступаБезНастройки); + ГруппыДоступаПрофиляОбновлены = УправлениеДоступомСлужебный.ОбновитьГруппыДоступаПрофиля( + Профиль, УдаляемыеВидыДоступаБезНастройки); + ПрофильОбновлен = ПрофильОбновлен ИЛИ ГруппыДоступаПрофиляОбновлены; КонецЕсли; @@ -2870,2387 +2972,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС - -// Устанавливает параметры сеанса по текущим настройкам констант и -// настройкам групп доступа пользователей. -// Вызывается ПриНачалеРаботыСистемы. -// -Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если НЕ Константы.ОграничиватьДоступНаУровнеЗаписей.Получить() Тогда - // Для корректной работы препроцессора в ограничениях доступа, требуется инициализации всех - // параметров сеанса, которые могут быть востребованы в работе препроцессора. - Если ИмяПараметра = "ВидыДоступаЕдинственныеДляТипаЗначенияДоступа" ИЛИ - ИмяПараметра = "ВидыДоступаБезГруппЗначенияДоступа" Тогда - ПараметрыСеанса[ИмяПараметра] = Новый ФиксированныйМассив(Новый Массив); - // - ИначеЕсли ИмяПараметра = "ДобавлятьРуководителямДоступПодчиненных" Тогда - ПараметрыСеанса[ИмяПараметра] = Ложь; - Иначе - ПараметрыСеанса[ИмяПараметра] = ""; - КонецЕсли; - УстановленныеПараметры.Добавить(ИмяПараметра); - Возврат; - КонецЕсли; - - ПараметрыСеанса.ДобавлятьРуководителямДоступПодчиненных = Константы.ДобавлятьРуководителямДоступПодчиненных.Получить(); - УстановленныеПараметры.Добавить("ДобавлятьРуководителямДоступПодчиненных"); - - // Следующие виды доступа не самостоятельные, - // поэтому не учитываются при расчете необходимости ограничения в целом. - // В стандартных шаблонах проверка по этим видам доступа всегда выполняется, - // а в препроцессоре проверка использования не выполнятся. - ПараметрыСеанса.ОграничиватьДоступПоВидуУсловие = ""; - ПараметрыСеанса.ОграничиватьДоступПоВидуОбъект = ""; - УстановленныеПараметры.Добавить("ОграничиватьДоступПоВидуУсловие"); - УстановленныеПараметры.Добавить("ОграничиватьДоступПоВидуОбъект"); - - Запрос = Новый Запрос( - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ВидыДоступаПрофилейГруппДоступа.ВидДоступа - |ИЗ - | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофилейГруппДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) - | И (ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь) - | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) - | И (ПользователиИГруппыПользователей.ГруппаДоступа = ГруппыДоступаПользователи.Пользователь) - | ПО ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка - | И ((НЕ ГруппыДоступа.ПометкаУдаления)) - | ПО (ГруппыДоступа.Профиль = ВидыДоступаПрофилейГруппДоступа.Ссылка) - | И ((НЕ ВидыДоступаПрофилейГруппДоступа.Ссылка.ПометкаУдаления))"); - Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); - ОграничиваемыеВидыДоступа = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидДоступа"); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ВидыДоступа.Ссылка КАК ВидДоступа - |ИЗ - | ПланВидовХарактеристик.ВидыДоступа КАК ВидыДоступа - |ГДЕ - | ВидыДоступа.Предопределенный"); - Выборка = Запрос.Выполнить().Выбрать(); - - КаждыйВидЕдинственный = Истина; - КаждыйВидБезГрупп = Истина; - - ВидыДоступаБезОграничения = Новый Массив; - ВидыДоступаЕдинственныеДляТипаЗначенияДоступа = Новый Массив; - ВидыДоступаБезГруппЗначенияДоступа = Новый Массив; - ВидыДоступаЧерезПраваПоЗначениямДоступа = Новый Массив; - - Пока Выборка.Следующий() Цикл - - СвойстваВидаДоступа = СвойстваВидаДоступа(Выборка.ВидДоступа); - - Если СвойстваВидаДоступа.ВидДоступаИспользуетсяВсегда Тогда - // Такие виды доступа не самостоятельные, поэтому не учитываются при расчете - // необходимости ограничения в целом. - // В стандартных шаблонах проверка по этим видам доступа всегда выполняется, - // а в препроцессоре проверка использования не выполнятся. - ОписаниеВидаДоступа = ""; - - ИначеЕсли НЕ СвойстваВидаДоступа.ВидДоступаИспользуется Тогда - ОписаниеВидаДоступа = ""; - ВидыДоступаБезОграничения.Добавить(Выборка.ВидДоступа); - - ИначеЕсли ОграничиваемыеВидыДоступа.Найти(Выборка.ВидДоступа) = Неопределено Тогда - ОписаниеВидаДоступа = ""; - ВидыДоступаБезОграничения.Добавить(Выборка.ВидДоступа); - - ИначеЕсли СвойстваВидаДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа Тогда - ОписаниеВидаДоступа = "ЧерезПраваПоЗначениямДоступа"; - ВидыДоступаЧерезПраваПоЗначениямДоступа.Добавить(Выборка.ВидДоступа); - Иначе - Если СвойстваВидаДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа Тогда - ОписаниеВидаДоступа = "ЕдинственныйВид, "; - ВидыДоступаЕдинственныеДляТипаЗначенияДоступа.Добавить(Выборка.ВидДоступа); - Иначе - ОписаниеВидаДоступа = "ОдинИзМногихВидов,"; - КаждыйВидЕдинственный = Ложь; - КонецЕсли; - Если СвойстваВидаДоступа.ВидДоступаБезГруппЗначенияДоступа Тогда - ОписаниеГрупп = "БезГрупп"; - ВидыДоступаБезГруппЗначенияДоступа.Добавить(Выборка.ВидДоступа); - Иначе - ОписаниеГрупп = ?(СвойстваВидаДоступа.ВидДоступаСОднойГруппойЗначенияДоступа, "ОднаГруппа", "МножествоГрупп"); - КаждыйВидБезГрупп = Ложь; - КонецЕсли; - ОписаниеВидаДоступа = ОписаниеВидаДоступа + ОписаниеГрупп; - КонецЕсли; - ИмяВидаДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПолучитьИмяПредопределенного(Выборка.ВидДоступа); - ПараметрыСеанса["ОграничиватьДоступПоВиду" + ИмяВидаДоступа] = ОписаниеВидаДоступа; - УстановленныеПараметры.Добавить("ОграничиватьДоступПоВиду" + ИмяВидаДоступа); - КонецЦикла; - - ПараметрыСеанса.ВидыДоступаБезОграничения = Новый ФиксированныйМассив(ВидыДоступаБезОграничения); - УстановленныеПараметры.Добавить("ВидыДоступаБезОграничения"); - - ПараметрыСеанса.ВидыДоступаЕдинственныеДляТипаЗначенияДоступа = Новый ФиксированныйМассив(ВидыДоступаЕдинственныеДляТипаЗначенияДоступа); - УстановленныеПараметры.Добавить("ВидыДоступаЕдинственныеДляТипаЗначенияДоступа"); - - ПараметрыСеанса.ВидыДоступаБезГруппЗначенияДоступа = Новый ФиксированныйМассив(ВидыДоступаБезГруппЗначенияДоступа); - УстановленныеПараметры.Добавить("ВидыДоступаБезГруппЗначенияДоступа"); - - ПараметрыСеанса.ВидыДоступаЧерезПраваПоЗначениямДоступа = ?(ВидыДоступаЧерезПраваПоЗначениямДоступа.Количество() = 0, - "", - Новый ФиксированныйМассив(ВидыДоступаЧерезПраваПоЗначениямДоступа)); - УстановленныеПараметры.Добавить("ВидыДоступаЧерезПраваПоЗначениямДоступа"); - - Если КаждыйВидЕдинственный И КаждыйВидБезГрупп Тогда - ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп"; - ИначеЕсли КаждыйВидЕдинственный Тогда - ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный"; - ИначеЕсли КаждыйВидБезГрупп Тогда - ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп"; - Иначе - ПараметрыСеанса.ОграничиватьДоступПоВиду = "Да"; - КонецЕсли; - УстановленныеПараметры.Добавить("ОграничиватьДоступПоВиду"); - -КонецПроцедуры // УстановитьПараметрыСеансаОграниченияДоступа() - -// Добавляет в список Обработчики процедуры-обработчики обновления, -// необходимые данной подсистеме. -// -// Параметры: -// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления -// общего модуля ОбновлениеИнформационнойБазы. -// -Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьПоставляемыеПрофилиИГруппыДоступа"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьТаблицыРолейПрофилейГруппДоступа"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьЗависимостиПравДоступа"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "*"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьТаблицыПравПоЗначениямДоступа"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.2.3"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьПодчиненностьПользователей_1_1_2_3"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.3.3"; - Обработчик.Процедура = "УправлениеДоступом.ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных"; - - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.1.3.4"; - Обработчик.Процедура = "УправлениеДоступом.ОбновитьПодчиненностьПользователей_1_1"; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события - -// Перезаписывает наборы значений доступа проверяемого объекта -// в РегистрСведений.НаборыЗначенийДоступа, используя процедуру -// УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(). -// -// Процедура вызывается из УправлениеДоступомСобытия.ЗаписатьНаборыЗначенийДоступа(), -// но может быть вызвана из любого места, например, при включении ограничения доступа на уровне записей. -// -// Вызывает процедуру прикладного разработчика -// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), -// которая используется для перезаписи зависимых наборов значений доступа. -// -// Параметры: -// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... -// В случае вызова с клиента можно передать только ссылку, а нужен объект. -// Если получена ссылка, то по ней будет получен объект. -// -Процедура ЗаписатьНаборыЗначенийДоступа(Знач Объект) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Если передача параметра Объект производилась с клиента на сервер, - // то передавалась ссылка, и объект требуется получить. - Объект = ?(Объект = Объект.Ссылка, Объект.ПолучитьОбъект(), Объект); - СсылкаНаОбъект = Объект.Ссылка; - ТипЗначенияОбъект = ТипЗнч(Объект); - - Если НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверные параметры. - |Тип объекта ""%1"" - |не найден в подписке на события - |""Записать наборы значений доступа"".'"), - ТипЗначенияОбъект)); - КонецЕсли; - - Если Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект.Тип.Типы().Найти(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка при записи наборов значений доступа: - |в регистре сведений НаборыЗначенийДоступа в измерении Объект - |не задан тип %1'"), - СсылкаНаОбъект.Метаданные().ПолноеИмя())); - КонецЕсли; - - НаборЗаписей = РегистрыСведений.НаборыЗначенийДоступа.СоздатьНаборЗаписей(); - - Если ОграничиватьДоступНаУровнеЗаписей() Тогда - - Если Метаданные.НайтиПоТипу(ТипЗначенияОбъект).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда - ЗаполнитьНаборыЗначенийДоступа(Объект, НаборЗаписей); - ДобавитьНаборыЗначенийДоступа(НаборЗаписей, ТаблицаНаборыЗначенийДоступа(), Ложь, Истина); - Иначе - // Записан объект с уже заполненной табличной частью НаборыЗначенийДоступа - НаборЗаписей.Загрузить(Объект.НаборыЗначенийДоступа.Выгрузить()); - КонецЕсли; - - НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); - ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, НаборЗаписей); - Если НаборыЗначенийДоступаРегистраИзменены(СсылкаНаОбъект, НаборЗаписей) Тогда - НаборЗаписей.Записать(); - ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект); - КонецЕсли; - Иначе - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа - |ГДЕ - | НаборыЗначенийДоступа.Объект = &СсылкаНаОбъект"); - - Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект); - - Если НЕ Запрос.Выполнить().Пустой() Тогда - // Очистка устаревшего набора. - // Запись нового набора будет выполнена регламентным заданием, - // после включения ограничения на уровне записей. - НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); - НаборЗаписей.Записать(); - - // Очистка устаревших зависимых наборов. - ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -// Перезаписывает наборы значений доступа зависимых объектов. -// -// Процедура вызывается из УправлениеДоступомСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа(), -// состав типов подписки дополняет (без пересечения) состав типов подписки ЗаписатьНаборыЗначенийДоступа, -// теми типами, для которых выполнять запись наборов в регистр сведений НаборыЗначенийДоступа -// не требуется, но сами наборы входят в состав других наборов, например, наборы некоторых файлов -// из справочника "Файлы" могут входить в состав некоторых бизнес-процессов "Задание", созданных -// на основании файлов, при этом наборы файлов записывать в регистр не требуется. -// -// Вызывает процедуру прикладного разработчика -// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), -// которая используется для перезаписи зависимых наборов значений доступа, -// то есть организуется рекурсия. -// -// Параметры: -// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... -// В случае вызова с клиента можно передать только ссылку, а нужен объект. -// Если получена ссылка, то по ней будет получен объект. -// -Процедура ЗаписатьЗависимыеНаборыЗначенийДоступа(Знач Объект) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Если передача параметра Объект производилась с клиента на сервер, - // то передавалась ссылка, и объект требуется получить. - Объект = ?(Объект = Объект.Ссылка, Объект.ПолучитьОбъект(), Объект); - СсылкаНаОбъект = Объект.Ссылка; - ТипЗначенияОбъект = ТипЗнч(Объект); - - Если НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверные параметры. - |Тип объекта ""%1"" - |не найден в подписке на события - |""Записать зависимые наборы значений доступа"".'"), - ТипЗначенияОбъект)); - КонецЕсли; - - ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект); - -КонецПроцедуры - -// Обработчик регламентного задания ЗаполнениеДанныхДляОграниченияДоступа. -Процедура ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания() Экспорт - - ЗаполнениеДанныхДляОграниченияДоступа(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики регламентных заданий - -// Выполняет последовательное заполнение и обновление данных, необходимых для работы -// подсистемы УправленияДоступом в режиме ограничения доступа на уровне записей. -// -// При включенном режиме ограничения доступа на уровне записей заполняет наборы -// значений доступа. Заполнение выполняется частями при каждом запуске, пока все -// наборы значений доступа не будут заполнены. -// При отключении режима ограничения доступа на уровне записей наборы значений доступа -// (заполненные ранее) удаляются при перезаписи объектов, а не все сразу. -// Независимо от режима ограничения доступа на уровне записей обновляет вторичные -// данные: группы значений доступа и дополнительные поля в существующих наборах значений доступа. -// После завершения всех обновлений и заполнений отключает использование регламентного -// задания. -// -// Сведения о состоянии работы записываются в журнал регистрации. -// -// Возможно вызывать программно, например, при обновлении информационной базы. -// Также для целей обновления есть форма Справочник.ГруппыДоступа.ОбновлениеДанныхОграниченияДоступа, -// с помощью которой можно сделать интерактивное обновление данных ограничения доступа -// при обновлении информационной базы. -// -Процедура ЗаполнениеДанныхДляОграниченияДоступа(КоличествоДанных = 0) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОграничиватьДоступНаУровнеЗаписей() Тогда - - ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); - - // Заполнение РегистрСведений.ГруппыЗначенийДоступа. - Для каждого Тип Из Метаданные.ПодпискиНаСобытия.ЗаписатьГруппыИВидыДоступа.Источник.Типы() Цикл - - Если Тип = Тип("ПланВидовХарактеристикОбъект.ВидыДоступа") Тогда - Продолжить; - КонецЕсли; - - Таблица = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); - - ВидыДоступа = ВидыДоступаТаблицы(Таблица); - Если ВидыДоступа.Количество() = 1 И - ( ВидыДоступа[0] = ПланыВидовХарактеристик.ВидыДоступа.Пользователи ИЛИ - ВидыДоступа[0] = ПланыВидовХарактеристик.ВидыДоступа.ВнешниеПользователи ) Тогда - Продолжить; - КонецЕсли; - - Если КоличествоДанных < 1000 И Тип <> Тип("Строка") Тогда - - Запрос = Новый Запрос(СтрЗаменить( - "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 - | Таблица.Ссылка - |ИЗ - | ПодставляемаяТаблица КАК Таблица - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК РегистрСведенийГруппыЗначенийДоступа - | ПО Таблица.Ссылка = РегистрСведенийГруппыЗначенийДоступа.ЗначениеДоступа - |ГДЕ - | РегистрСведенийГруппыЗначенийДоступа.ЗначениеДоступа ЕСТЬ NULL ", "ПодставляемаяТаблица", Таблица)); - Выгрузка = Запрос.Выполнить().Выгрузить(); - КоличествоДанных = КоличествоДанных + Выгрузка.Количество(); - - Для каждого СтрокаТЧ Из Выгрузка Цикл - ЗаписатьГруппыИВидыДоступа(СтрокаТЧ.Ссылка); - КонецЦикла; - - КонецЕсли; - КонецЦикла; - - Если КоличествоДанных < 1000 Тогда - - // Заполнение РегистрСведений.НаборыЗначенийДоступа. - Для каждого Тип Из Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.Типы() Цикл - - Если Тип = Тип("ПланВидовХарактеристикОбъект.ВидыДоступа") Тогда - Продолжить; - КонецЕсли; - - ЗаполнитьТабличнуюЧасть = Метаданные.НайтиПоТипу(Тип).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") <> Неопределено; - - Если КоличествоДанных < 1000 И Тип <> Тип("Строка") Тогда - - Запрос = Новый Запрос(СтрЗаменить( - "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 - | Таблица.Ссылка - |ИЗ - | ПодставляемаяТаблица КАК Таблица - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаборыЗначенийДоступа КАК РегистрСведенийНаборыЗначенийДоступа - | ПО Таблица.Ссылка = РегистрСведенийНаборыЗначенийДоступа.Объект - |ГДЕ - | РегистрСведенийНаборыЗначенийДоступа.Объект ЕСТЬ NULL ", "ПодставляемаяТаблица", Метаданные.НайтиПоТипу(Тип).ПолноеИмя())); - Выгрузка = Запрос.Выполнить().Выгрузить(); - КоличествоДанных = КоличествоДанных + Выгрузка.Количество(); - - Для каждого СтрокаТЧ Из Выгрузка Цикл - Если ЗаполнитьТабличнуюЧасть Тогда - // Запись наборов табличной части и наборов регистра (без зависимых наборов). - Объект = СтрокаТЧ.Ссылка.ПолучитьОбъект(); - Объект.ОбменДанными.Загрузка = Истина; - Объект.ДополнительныеСвойства.Вставить("ЗаписатьНаборыЗначенийДоступа"); - Объект.Записать(); - Иначе - // Запись только наборов регистра (без зависимых наборов). - ЗаписатьНаборыЗначенийДоступа(СтрокаТЧ.Ссылка); - КонецЕсли; - КонецЦикла; - - КонецЕсли; - КонецЦикла; - КонецЕсли; - - КонецЕсли; - - Если КоличествоДанных < 1000 Тогда - // Обновление вторичных данных в наборах значений доступа: свойств видов доступа , и других. - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | СвойстваВидовДоступа.ВидДоступа, - | СвойстваВидовДоступа.ВидДоступаБезГруппЗначенияДоступа, - | СвойстваВидовДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа, - | СвойстваВидовДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа - |ПОМЕСТИТЬ ТаблицаСвойств - |ИЗ - | &СвойстваВидовДоступа КАК СвойстваВидовДоступа - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 - | НаборыЗначенийДоступа.Объект, - | НаборыЗначенийДоступа.НомерНабора, - | НаборыЗначенийДоступа.ВидДоступа, - | НаборыЗначенийДоступа.ЗначениеДоступа, - | НаборыЗначенийДоступа.Чтение, - | НаборыЗначенийДоступа.Добавление, - | НаборыЗначенийДоступа.Изменение, - | НаборыЗначенийДоступа.Удаление, - | ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаБезГруппЗначенияДоступа, ЛОЖЬ) КАК ВидДоступаБезГруппЗначенияДоступа, - | ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа, ЛОЖЬ) КАК ВидДоступаЕдинственныйДляТипаЗначенияДоступа, - | ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа, ЛОЖЬ) КАК ВидДоступаЧерезПраваПоЗначениямДоступа, - | ВЫБОР - | КОГДА НаборыЗначенийДоступа.Чтение - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ КАК ВидДоступаПравоЧтения, - | ВЫБОР - | КОГДА НаборыЗначенийДоступа.Добавление - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ КАК ВидДоступаПравоДобавления, - | ВЫБОР - | КОГДА НаборыЗначенийДоступа.Изменение - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ КАК ВидДоступаПравоИзменения, - | НаборыЗначенийДоступа.ТипОбъекта, - | ЕСТЬNULL(ТипыСсылок.ТипТаблицы, НЕОПРЕДЕЛЕНО) КАК ТипЗначенияДоступа - |ИЗ - | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа - | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаСвойств КАК СвойстваВидовДоступа - | ПО НаборыЗначенийДоступа.ВидДоступа = СвойстваВидовДоступа.ВидДоступа - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК ТипыСсылок - | ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТипыСсылок.ТипТаблицы)) - | И (НаборыЗначенийДоступа.ВидДоступа В (ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения))) - |ГДЕ - | (НЕ(НаборыЗначенийДоступа.ВидДоступаБезГруппЗначенияДоступа = ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаБезГруппЗначенияДоступа, ЛОЖЬ) - | И НаборыЗначенийДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа = ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа, ЛОЖЬ) - | И НаборыЗначенийДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа = ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа, ЛОЖЬ) - | И НаборыЗначенийДоступа.ТипЗначенияДоступа = ЕСТЬNULL(ТипыСсылок.ТипТаблицы, НЕОПРЕДЕЛЕНО) - | И НаборыЗначенийДоступа.ВидДоступаПравоЧтения = ВЫБОР - | КОГДА НаборыЗначенийДоступа.Чтение - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ - | И НаборыЗначенийДоступа.ВидДоступаПравоДобавления = ВЫБОР - | КОГДА НаборыЗначенийДоступа.Добавление - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ - | И НаборыЗначенийДоступа.ВидДоступаПравоИзменения = ВЫБОР - | КОГДА НаборыЗначенийДоступа.Изменение - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ))"); - Запрос.УстановитьПараметр("СвойстваВидовДоступа", СвойстваВидаДоступа()); - Выгрузка = Запрос.Выполнить().Выгрузить(); - КоличествоДанных = КоличествоДанных + Выгрузка.Количество(); - - Для каждого СтрокаТЧ Из Выгрузка Цикл - МенеджерЗаписи = РегистрыСведений.НаборыЗначенийДоступа.СоздатьМенеджерЗаписи(); - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, - СтрокаТЧ, - "Объект, - |НомерНабора, - |ВидДоступа, - |ЗначениеДоступа, - |Чтение, - |Добавление, - |Изменение, - |Удаление, - |ВидДоступаБезГруппЗначенияДоступа, - |ВидДоступаЕдинственныйДляТипаЗначенияДоступа, - |ВидДоступаЧерезПраваПоЗначениямДоступа, - |ВидДоступаПравоЧтения, - |ВидДоступаПравоДобавления, - |ВидДоступаПравоИзменения, - |ТипОбъекта, - |ТипЗначенияДоступа"); - МенеджерЗаписи.Записать(); - КонецЦикла; - КонецЕсли; - - Если КоличествоДанных < 1000 Тогда - // Обновление вторичных данных в наборах значений доступа: ТипОбъекта - - Запрос = Новый Запрос( - "ВЫБРАТЬ ПЕРВЫЕ 1000 - | ТипыОбъектов.Объект - |ИЗ - | (ВЫБРАТЬ - | НаборыЗначенийДоступа.Объект КАК Объект, - | ВЫБОР - | КОГДА НаборыЗначенийДоступа.ТипОбъекта <> НЕОПРЕДЕЛЕНО - | ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ КАК ТипЗадан, - | ВЫБОР - | КОГДА НаборыЗначенийДоступа.ТипОбъекта <> НЕОПРЕДЕЛЕНО - | И НаборыЗначенийДоступа.ТипОбъекта <> ТипыСсылок.ТипТаблицы - | ТОГДА 1 - | ИНАЧЕ 0 - | КОНЕЦ КАК НеверныйТип - | ИЗ - | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК ТипыСсылок - | ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(ТипыСсылок.ТипТаблицы))) КАК ТипыОбъектов - | - |СГРУППИРОВАТЬ ПО - | ТипыОбъектов.Объект - | - |ИМЕЮЩИЕ - | (СУММА(ТипыОбъектов.ТипЗадан) <> 1 - | ИЛИ СУММА(ТипыОбъектов.НеверныйТип) <> 0)"); - Выгрузка = Запрос.Выполнить().Выгрузить(); - КоличествоДанных = КоличествоДанных + Выгрузка.Количество(); - - НаборЗаписей = РегистрыСведений.НаборыЗначенийДоступа.СоздатьНаборЗаписей(); - Для каждого СтрокаТЧ Из Выгрузка Цикл - - НаборЗаписей.Отбор.Объект.Установить(СтрокаТЧ.Объект); - НаборЗаписей.Прочитать(); - ПерваяЗапись = Истина; - - Для каждого Запись Из НаборЗаписей Цикл - - Если ПерваяЗапись Тогда - ТипыОбъекта = Новый Массив; - ТипыОбъекта.Добавить(ТипЗнч(Запись.Объект)); - ОписаниеТипаОбъекта = Новый ОписаниеТипов(ТипыОбъекта); - - Запись.ТипОбъекта = ОписаниеТипаОбъекта.ПривестиЗначение(Неопределено); - ПерваяЗапись = Ложь; - Иначе - Запись.ТипОбъекта = Неопределено; - КонецЕсли; - КонецЦикла; - НаборЗаписей.Записать(); - КонецЦикла; - КонецЕсли; - - Если КоличествоДанных < 1000 Тогда - ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), - УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Завершено заполнение данных для ограничения доступа'"), - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - СтандартныеПодсистемыПереопределяемый.УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Ложь); - Иначе - Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); - Задание.Использование = Ложь; - Задание.Записать(); - КонецЕсли; - Иначе - ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), - УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Выполнена запись порции данных для ограничения доступа'"), - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - СтандартныеПодсистемыПереопределяемый.УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Истина); - Иначе - Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); - Задание.Использование = Истина; - Задание.Записать(); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с видами доступа - -// Возвращает свойства вида доступа, используя функцию -// УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа(). -// -// Параметры: -// ВидДоступа - ПланВидовХарактеристикСсылка.ВидыДоступа, Неопределено. -// -// Возвращаемое значение: -// Неопределено - когда для вида доступа свойств не найдено, -// ТаблицаЗначений или СтрокаТаблицыЗначений с полями: -// описание которых см. в комментарии к функции -// УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа(). -// -Функция СвойстваВидаДоступа(Знач ВидДоступа = Неопределено) Экспорт - - СвойстваВидовДоступа = УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа().Скопировать(); - - Если ВидДоступа = Неопределено Тогда - - Возврат СвойстваВидовДоступа; - Иначе - Возврат СвойстваВидовДоступа.Найти(ВидДоступа, "ВидДоступа"); - КонецЕсли; - -КонецФункции - -// Возвращает массив видов доступа для таблицы с указанным именем. -// -// Параметры: -// Таблица - Строка, как в фукнции ПолноеИмя() объекта метаданных. -// -// Возвращаемое значение: -// Массив - элементы типа ПланВидовХарактеристикСсылка.ВидыДоступа. -// -Функция ВидыДоступаТаблицы(Знач Таблица) Экспорт - - ВидыДоступа = Новый Массив; - - Для каждого СвойстваВидаДоступа Из УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа() Цикл - - Если СвойстваВидаДоступа.Таблицы.Найти(Таблица) <> Неопределено Тогда - - ВидыДоступа.Добавить(СвойстваВидаДоступа.ВидДоступа); - КонецЕсли; - КонецЦикла; - - Возврат ВидыДоступа; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с профилями групп доступа - -// Замещает имеющийся или создает новый профиль групп доступа по его начальному описанию. -// -// Параметры: -// ОписаниеПрофиля - Структура (см. функцию НовоеОписаниеПрофиляГруппДоступа()). -// -// Возвращаемое значение: -// Булево. Истина - профиль изменен. -// -Функция ОбновитьПрофильГруппДоступа(ОписаниеПрофиля, НеОбновлятьРолиПользователей = Ложь) Экспорт - - ПрофильИзменен = Ложь; - - УникальныйИдентификаторПрофиля = Новый УникальныйИдентификатор(ОписаниеПрофиля.Идентификатор); - ПрофильСсылка = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля); - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа - |ГДЕ - | ПрофилиГруппДоступа.Ссылка = &Ссылка"); - Запрос.УстановитьПараметр("Ссылка", ПрофильСсылка); - Если Запрос.Выполнить().Пустой() Тогда - // Элемента данных нет, нужно создать новый. - ПрофильОбъект = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); - ПрофильОбъект.УстановитьСсылкуНового(Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля)); - ПрофильИзменен = Истина; - Иначе - ПрофильОбъект = ПрофильСсылка.ПолучитьОбъект(); - ПрофильИзменен = УправлениеДоступомСобытия.ПоставляемыйПрофильИзменен(ПрофильОбъект); - КонецЕсли; - - - Если ПрофильИзменен Тогда - ЗаблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка, ПрофильОбъект.ВерсияДанных); - - ПрофильОбъект.Наименование = ОписаниеПрофиля.Наименование; - - ПрофильОбъект.Роли.Очистить(); - Для каждого Роль Из ОписаниеПрофиля.Роли Цикл - Строка = ПрофильОбъект.Роли.Добавить(); - Строка.Роль = Роль; - КонецЦикла; - - ПрофильОбъект.ВидыДоступа.Очистить(); - Для каждого ОписаниеВидаДоступа Из ОписаниеПрофиля.ВидыДоступа Цикл - Строка = ПрофильОбъект.ВидыДоступа.Добавить(); - Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа[ОписаниеВидаДоступа.Значение]; - Строка.Предустановленный = ОписаниеВидаДоступа.Представление = "Предустановленный"; - Строка.ДоступРазрешен = ОписаниеВидаДоступа.Представление = "ВначалеВсеРазрешены"; - КонецЦикла; - - ПрофильОбъект.ЗначенияДоступа.Очистить(); - Для каждого ОписаниеЗначенияДоступа Из ОписаниеПрофиля.ЗначенияДоступа Цикл - СтрокаЗначения = ПрофильОбъект.ЗначенияДоступа.Добавить(); - СтрокаЗначения.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа[ОписаниеЗначенияДоступа.Значение]; - Запрос = Новый Запрос(СтрЗаменить("Выбрать Значение(%1) КАК Значение", "%1", ОписаниеЗначенияДоступа.Представление)); - СтрокаЗначения.ЗначениеДоступа = Запрос.Выполнить().Выгрузить()[0].Значение; - КонецЦикла; - - Если НеОбновлятьРолиПользователей Тогда - ПрофильОбъект.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); - КонецЕсли; - ПрофильОбъект.Записать(); - РазблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка); - КонецЕсли; - - Возврат ПрофильИзменен; - -КонецФункции - -// Проверяет изменен ли поставляемый профиль по сравнению с описанием из функции -// УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(). -// -// Параметры: -// Профиль - СправочникСсылка.ПрофилиГруппДоступа. -// -// Возвращаемое значение: -// Строка. -// -Функция ОписаниеПоставляемогоПрофиля(Профиль) Экспорт - - ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); - - Текст = ""; - Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл - Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда - Текст = ОписаниеПрофиля.Описание; - КонецЕсли; - КонецЦикла; - - Возврат Текст; - -КонецФункции - -// Определяет наличие начального заполнения для профиля групп доступа в переопределяемом модуле. -// -// Параметры: -// Профиль - СправочникСсылка.ПрофилиГруппДоступа. -// -// Возвращаемое значение: -// Булево. -// -Функция ЕстьНачальноеЗаполнениеПрофиляГруппДоступа(Знач Профиль) Экспорт - - ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); - - ОписаниеНайдено = Ложь; - Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл - Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда - ОписаниеНайдено = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Возврат ОписаниеНайдено; - -КонецФункции - -// Создает элементы в справочнике ПрофилиГруппДоступа, свойственные прикладному решению, -// и позволяет восстановить ранее заполненный элемент по его уникальному идентификатору, -// если для него предусмотрено начальное заполнение. -// Поиск начального заполнения осуществляется по строке уникального идентификатора профиля. -// -// Параметры: -// Профиль - Неопределено, СправочникСсылка.ПрофилиГруппДоступа. -// Если для указанного профиля описание начального заполнения найдено, -// содержимое профиля полностью замещается. -// -// ОбновитьГруппыДоступа - Булево, если Истина, виды доступа групп доступа профиля будут обновлены. -// -// НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа - Булево, если Истина, группы доступа не будут -// обновлены, если в них есть хотя бы один удаляемый вид доступа, -// по которому заданы значения доступа. -// -Процедура НачальноеЗаполнениеПрофилейГруппДоступа(Знач Профиль = Неопределено, ОбновитьГруппыДоступа = Ложь, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа = Истина) Экспорт - - ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); - - Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл - Если Профиль = Неопределено ИЛИ ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда - ОбновитьПрофильГруппДоступа(ОписаниеПрофиля); - Если ОбновитьГруппыДоступа Тогда - ОбновитьГруппыДоступаПрофиля(Профиль, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа); - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Обновляет табличную часть ТаблицыРолей каждого профиля групп доступа. -Процедура ОбновитьТаблицыРолейПрофилейГруппДоступа() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПраваОМДРолей", УправлениеДоступомСерверПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей()); - Запрос.УстановитьПараметр("ТипыСсылок", УправлениеДоступомСерверПовтИсп.ТипыСсылок()); - - Запрос.Текст = - "ВЫБРАТЬ - | ПраваОМДРолей.Роль, - | ПраваОМДРолей.Таблица, - | ПраваОМДРолей.Добавление, - | ПраваОМДРолей.Изменение, - | ПраваОМДРолей.Удаление, - | ПраваОМДРолей.ТипТаблицы - |ПОМЕСТИТЬ ПраваОМДРолей - |ИЗ - | &ПраваОМДРолей КАК ПраваОМДРолей - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ТипыСсылок.Таблица, - | ТипыСсылок.ТипТаблицы - |ПОМЕСТИТЬ НовыеТипыСсылок - |ИЗ - | &ТипыСсылок КАК ТипыСсылок - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) КАК Профиль - |ИЗ - | Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК СтарыеТипыСсылок - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеТипыСсылок КАК НовыеТипыСсылок - | ПО (НовыеТипыСсылок.Таблица = СтарыеТипыСсылок.Таблица) - | И (НовыеТипыСсылок.ТипТаблицы = СтарыеТипыСсылок.ТипТаблицы) - |ГДЕ - | СтарыеТипыСсылок.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | И НовыеТипыСсылок.Таблица ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - |ИЗ - | НовыеТипыСсылок КАК НовыеТипыСсылок - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК СтарыеТипыСсылок - | ПО (СтарыеТипыСсылок.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) - | И НовыеТипыСсылок.Таблица = СтарыеТипыСсылок.Таблица - | И НовыеТипыСсылок.ТипТаблицы = СтарыеТипыСсылок.ТипТаблицы - |ГДЕ - | СтарыеТипыСсылок.Таблица ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ТипыСсылок.Ссылка - |ИЗ - | Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК ТипыСсылок - |ГДЕ - | ТипыСсылок.Ссылка <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - |ИЗ - | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК ТаблицыРолей - |ГДЕ - | ТаблицыРолей.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | СтарыеТаблицы.Ссылка - |ИЗ - | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК СтарыеТаблицы - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | РолиПрофиля.Ссылка КАК Профиль, - | ПраваОМДРолей.Роль КАК Роль, - | ПраваОМДРолей.Таблица КАК Таблица, - | ПраваОМДРолей.Добавление КАК Добавление, - | ПраваОМДРолей.Изменение КАК Изменение, - | ПраваОМДРолей.Удаление КАК Удаление, - | ПраваОМДРолей.ТипТаблицы КАК ТипТаблицы - | ИЗ - | ПраваОМДРолей КАК ПраваОМДРолей - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофиля - | ПО ПраваОМДРолей.Роль = РолиПрофиля.Роль) КАК НовыеТаблицы - | ПО (НовыеТаблицы.Профиль = СтарыеТаблицы.Ссылка) - | И (НовыеТаблицы.Роль = СтарыеТаблицы.Роль) - | И (НовыеТаблицы.Таблица = СтарыеТаблицы.Таблица) - | И (НовыеТаблицы.Добавление = СтарыеТаблицы.Добавление) - | И (НовыеТаблицы.Изменение = СтарыеТаблицы.Изменение) - | И (НовыеТаблицы.Удаление = СтарыеТаблицы.Удаление) - | И (НовыеТаблицы.ТипТаблицы = СтарыеТаблицы.ТипТаблицы) - |ГДЕ - | НовыеТаблицы.Роль ЕСТЬ NULL - | И СтарыеТаблицы.Ссылка <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | НовыеТаблицы.Профиль - |ИЗ - | (ВЫБРАТЬ - | РолиПрофиля.Ссылка КАК Профиль, - | ПраваОМДРолей.Роль КАК Роль, - | ПраваОМДРолей.Таблица КАК Таблица, - | ПраваОМДРолей.Добавление КАК Добавление, - | ПраваОМДРолей.Изменение КАК Изменение, - | ПраваОМДРолей.Удаление КАК Удаление, - | ПраваОМДРолей.ТипТаблицы КАК ТипТаблицы - | ИЗ - | ПраваОМДРолей КАК ПраваОМДРолей - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофиля - | ПО ПраваОМДРолей.Роль = РолиПрофиля.Роль) КАК НовыеТаблицы - | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК СтарыеТаблицы - | ПО НовыеТаблицы.Профиль = СтарыеТаблицы.Ссылка - | И НовыеТаблицы.Роль = СтарыеТаблицы.Роль - | И НовыеТаблицы.Таблица = СтарыеТаблицы.Таблица - | И НовыеТаблицы.Добавление = СтарыеТаблицы.Добавление - | И НовыеТаблицы.Изменение = СтарыеТаблицы.Изменение - | И НовыеТаблицы.Удаление = СтарыеТаблицы.Удаление - | И НовыеТаблицы.ТипТаблицы = СтарыеТаблицы.ТипТаблицы - |ГДЕ - | СтарыеТаблицы.Роль ЕСТЬ NULL - | И НовыеТаблицы.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)"; - - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - Объект = Выборка.Профиль.ПолучитьОбъект(); - ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка, Объект.ВерсияДанных); - Объект.ДополнительныеСвойства.Вставить("НеОбновлятьРеквизитПоставляемыйПрофильИзменен"); - Объект.Записать(); - РазблокироватьДанныеДляРедактирования(Объект.Ссылка); - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с группами доступа - -// Выполняет обновление видов доступа групп доступа указанного профиля. -// При этом возможно не удалять виды доступа из группы доступа, -// которые удалены в профиле этой группы доступа, в случае -// когда в группе доступа назначены значения доступа по -// удаляемому виду доступа. -// -// Параметры: -// Профиль - СправочникСсылка.ПрофилиГруппДоступа -// НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа - Булево -// -// Возвращаемое значение: -// Булево - когда Истина, группа доступа была изменена, -// когда Ложь никаких изменений не было выполнено. -// -Функция ОбновитьГруппыДоступаПрофиля(Профиль, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа) Экспорт - - ГруппаДоступаОбновлена = Ложь; - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ГруппыДоступа.Ссылка - |ИЗ - | Справочник.ГруппыДоступа КАК ГруппыДоступа - |ГДЕ - | (ГруппыДоступа.Профиль = &Профиль - | ИЛИ &Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) - | И ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы))"); - - Запрос.УстановитьПараметр("Профиль", Профиль.Ссылка); - Выборка = Запрос.Выполнить().Выбрать(); - - Пока Выборка.Следующий() Цикл - // Проверка необходимости/возможности обновления группы доступа. - ГруппаДоступа = Выборка.Ссылка.ПолучитьОбъект(); - - Если ГруппаДоступа.Ссылка = Справочники.ГруппыДоступа.Администраторы - И ГруппаДоступа.Профиль <> Справочники.ПрофилиГруппДоступа.Администратор Тогда - // Установка профиля Администратор, если не задан. - ГруппаДоступа.Профиль = Справочники.ПрофилиГруппДоступа.Администратор; - КонецЕсли; - - // Проверка состава видов доступа. - СоставВидовДоступаИзменен = Ложь; - ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Ложь; - Если ГруппаДоступа.ВидыДоступа.Количество() <> Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("Предустановленный", Ложь)).Количество() Тогда - СоставВидовДоступаИзменен = Истина; - Иначе - Для каждого СтрокаВидаДоступа Из ГруппаДоступа.ВидыДоступа Цикл - Если Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", СтрокаВидаДоступа.ВидДоступа, Ложь)).Количество() = 0 Тогда - СоставВидовДоступаИзменен = Истина; - Если ГруппаДоступа.ЗначенияДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") <> Неопределено Тогда - ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Истина; - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если СоставВидовДоступаИзменен - И ( НЕ НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа - ИЛИ НЕ ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа ) Тогда - // Обновление группы доступа. - // 1. Удаление лишних видов доступа и значений доступа (если есть). - ТекущийНомерСтроки = ГруппаДоступа.ВидыДоступа.Количество()-1; - Пока ТекущийНомерСтроки >= 0 Цикл - ТекущийВидДоступа = ГруппаДоступа.ВидыДоступа[ТекущийНомерСтроки].ВидДоступа; - Если Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", ТекущийВидДоступа, Ложь)).Количество() = 0 Тогда - СтрокиЗначенийВидаДоступа = ГруппаДоступа.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа)); - Для каждого СтрокаЗначения Из СтрокиЗначенийВидаДоступа Цикл - ГруппаДоступа.ЗначенияДоступа.Удалить(СтрокаЗначения); - КонецЦикла; - ГруппаДоступа.ВидыДоступа.Удалить(ТекущийНомерСтроки); - КонецЕсли; - ТекущийНомерСтроки = ТекущийНомерСтроки - 1; - КонецЦикла; - // 2. Добавление новых видов доступа (если есть). - Для каждого СтрокаВидаДоступа Из Профиль.ВидыДоступа Цикл - Если НЕ СтрокаВидаДоступа.Предустановленный - И ГруппаДоступа.ВидыДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") = Неопределено Тогда - - НоваяСтрока = ГруппаДоступа.ВидыДоступа.Добавить(); - НоваяСтрока.ВидДоступа = СтрокаВидаДоступа.ВидДоступа; - НоваяСтрока.ДоступРазрешен = СтрокаВидаДоступа.ДоступРазрешен; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - Если ГруппаДоступа.Модифицированность() Тогда - ЗаблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка, ГруппаДоступа.ВерсияДанных); - ГруппаДоступа.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); - ГруппаДоступа.Записать(); - ГруппаДоступаОбновлена = Истина; - РазблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка); - КонецЕсли; - КонецЦикла; - - Возврат ГруппаДоступаОбновлена; - -КонецФункции - -// Возвращает ссылку на группу-родителя персональных групп доступа. -// Если родитель не найден он будет создан. -// -// Параметры: -// НеСоздавать - Булево, если задан Истина, родитель не будет автоматически создан, -// а функция вернет Неопределено, если родитель не найден -// -// Возвращаемое значение: -// СправочникСсылка.ГруппыДоступа -// -Функция РодительПерсональныхГруппДоступа(Знач НеСоздавать = Ложь, НаименованиеГруппыЭлементов = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НаименованиеГруппыЭлементов = НСтр("ru = 'Персональные группы доступа'"); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("НаименованиеГруппыЭлементов", НаименованиеГруппыЭлементов); - Запрос.Текст = - "ВЫБРАТЬ - | ГруппыДоступа.Ссылка - |ИЗ - | Справочник.ГруппыДоступа КАК ГруппыДоступа - |ГДЕ - | ГруппыДоступа.Наименование ПОДОБНО &НаименованиеГруппыЭлементов - | И ГруппыДоступа.ЭтоГруппа"; - Выборка = Запрос.Выполнить().Выбрать(); - Если Выборка.Следующий() Тогда - ГруппаЭлементов = Выборка.Ссылка; - ИначеЕсли НеСоздавать Тогда - ГруппаЭлементов = Неопределено; - Иначе - ГруппаЭлементовОбъект = Справочники.ГруппыДоступа.СоздатьГруппу(); - ГруппаЭлементовОбъект.Наименование = НаименованиеГруппыЭлементов; - ГруппаЭлементовОбъект.Записать(); - ГруппаЭлементов = ГруппаЭлементовОбъект.Ссылка; - КонецЕсли; - - Возврат ГруппаЭлементов; - -КонецФункции - -// Только для внутреннего использования. Вызывается из обработчика ПриЗаписи группы доступа. -Процедура ОбновитьРолиПользователейПриИзмененииГруппыДоступа(ГруппаДоступа, СтарыеУчастникиГруппыДоступа) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - // Обновление ролей для добавленных, оставшихся и удаленных пользователей. - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); - Запрос.УстановитьПараметр("СтарыеУчастникиГруппыДоступа", СтарыеУчастникиГруппыДоступа); - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПользователиИГруппыПользователей.ЗначениеДоступа КАК Пользователь - |ИЗ - | РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - |ГДЕ - | ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | И ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ - | И ПользователиИГруппыПользователей.ГруппаДоступа В(&СтарыеУчастникиГруппыДоступа) - | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи)) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ПользователиИГруппыПользователей.ЗначениеДоступа - |ИЗ - | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) - | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) - | И ГруппыДоступаПользователи.Пользователь = ПользователиИГруппыПользователей.ГруппаДоступа - | И (ГруппыДоступаПользователи.Ссылка = &ГруппаДоступа) - | И (ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ПользователиИГруппыПользователей.ЗначениеДоступа) = ТИП(Справочник.ВнешниеПользователи))"; - СтарыеИНовыеПользователи = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); - - Если ГруппаДоступа = Справочники.ГруппыДоступа.Администраторы Тогда - // Добавление пользователей, связанных с пользователямиИБ, имеющих роль ПолныеПрава - Для каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл - Если ПользовательИБ.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда - Пользователь = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); - Если НЕ ЗначениеЗаполнено(Пользователь) Тогда - Пользователь = Справочники.ВнешниеПользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательИБ.УникальныйИдентификатор); - КонецЕсли; - Если ЗначениеЗаполнено(Пользователь) - И СтарыеИНовыеПользователи.Найти(Пользователь) = Неопределено Тогда - СтарыеИНовыеПользователи.Добавить(Пользователь); - КонецЕсли; - КонецЕсли; - КонецЦикла; - КонецЕсли; - - ОбновитьРолиПользователей(СтарыеИНовыеПользователи); - -КонецПроцедуры - -// Ообновляет состав РегистрСведений.ТаблицыГруппДоступа для одной или -// всех групп доступа пользователей, в которых есть пользователи. -// Процедура использует таблицу Справочник.ПрофилиГруппДоступ.ТаблицыРолей. -// -// Параметры: -// ГруппаДоступа - СправочникСсылка.ГруппыДоступа. -// -Процедура ОбновитьТаблицыГруппДоступа(Знач ГруппаДоступа) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ТаблицыРолей.Таблица КАК Таблица, - | МАКСИМУМ(ТаблицыРолей.Добавление) КАК Добавление, - | МАКСИМУМ(ТаблицыРолей.Изменение) КАК Изменение, - | МАКСИМУМ(ТаблицыРолей.Удаление) КАК Удаление, - | МАКСИМУМ(ТаблицыРолей.ТипТаблицы) КАК ТипТаблицы - |ПОМЕСТИТЬ ТаблицыПрофиля - |ИЗ - | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК ТаблицыРолей - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа - | ПО (ГруппыДоступа.Профиль = ТаблицыРолей.Ссылка) - | И (ГруппыДоступа.Ссылка = &ГруппаДоступа) - | И (НЕ ГруппыДоступа.ПометкаУдаления) - | И (НЕ ТаблицыРолей.Ссылка.ПометкаУдаления) - | - |СГРУППИРОВАТЬ ПО - | ТаблицыРолей.Таблица - | - |ИНДЕКСИРОВАТЬ ПО - | Таблица - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ТаблицыПрофиля.Таблица, - | ПользователиГрупп.Пользователь, - | ТаблицыПрофиля.Добавление КАК Добавление, - | ТаблицыПрофиля.Изменение КАК Изменение, - | ТаблицыПрофиля.Удаление КАК Удаление, - | ТаблицыПрофиля.ТипТаблицы КАК ТипТаблицы, - | ВЫБОР - | КОГДА ТаблицыПрофиля.Добавление - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ КАК ВидДоступаПравоДобавления, - | ВЫБОР - | КОГДА ТаблицыПрофиля.Изменение - | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) - | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) - | КОНЕЦ КАК ВидДоступаПравоИзменения - |ПОМЕСТИТЬ ТаблицыПользователейГруппы - |ИЗ - | ТаблицыПрофиля КАК ТаблицыПрофиля - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ПользователиГрупп - | ПО (ПользователиГрупп.Ссылка = &ГруппаДоступа) - | И (НЕ ПользователиГрупп.Ссылка.ПометкаУдаления) - | И (НЕ ПользователиГрупп.Пользователь В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка))) - | - |ИНДЕКСИРОВАТЬ ПО - | ТаблицыПрофиля.Таблица, - | ПользователиГрупп.Пользователь - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | КОЛИЧЕСТВО(*) КАК Количество - |ИЗ - | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа - | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы - | ПО (ТаблицыПользователейГруппы.Таблица = ТаблицыГруппДоступа.Таблица) - | И (ТаблицыПользователейГруппы.Пользователь = ТаблицыГруппДоступа.Пользователь) - | И (ТаблицыПользователейГруппы.Добавление = ТаблицыГруппДоступа.Добавление) - | И (ТаблицыПользователейГруппы.Изменение = ТаблицыГруппДоступа.Изменение) - | И (ТаблицыПользователейГруппы.Удаление = ТаблицыГруппДоступа.Удаление) - | И (ТаблицыПользователейГруппы.ТипТаблицы = ТаблицыГруппДоступа.ТипТаблицы) - | И (ТаблицыПользователейГруппы.ВидДоступаПравоДобавления = ТаблицыГруппДоступа.ВидДоступаПравоДобавления) - | И (ТаблицыПользователейГруппы.ВидДоступаПравоИзменения = ТаблицыГруппДоступа.ВидДоступаПравоИзменения) - |ГДЕ - | ТаблицыГруппДоступа.ГруппаДоступа = &ГруппаДоступа - | И ТаблицыПользователейГруппы.Таблица ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа - | ПО ТаблицыПользователейГруппы.Таблица = ТаблицыГруппДоступа.Таблица - | И ТаблицыПользователейГруппы.Пользователь = ТаблицыГруппДоступа.Пользователь - | И (ТаблицыГруппДоступа.ГруппаДоступа = &ГруппаДоступа) - | И ТаблицыПользователейГруппы.Добавление = ТаблицыГруппДоступа.Добавление - | И ТаблицыПользователейГруппы.Изменение = ТаблицыГруппДоступа.Изменение - | И ТаблицыПользователейГруппы.Удаление = ТаблицыГруппДоступа.Удаление - | И ТаблицыПользователейГруппы.ТипТаблицы = ТаблицыГруппДоступа.ТипТаблицы - | И ТаблицыПользователейГруппы.ВидДоступаПравоДобавления = ТаблицыГруппДоступа.ВидДоступаПравоДобавления - | И ТаблицыПользователейГруппы.ВидДоступаПравоИзменения = ТаблицыГруппДоступа.ВидДоступаПравоИзменения - |ГДЕ - | ТаблицыГруппДоступа.Таблица ЕСТЬ NULL "); - - Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - - Блокировка = Новый БлокировкаДанных; - ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ТаблицыГруппДоступа"); - ЭлементБлокировки.УстановитьЗначение("ГруппаДоступа", ГруппаДоступа); - ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; - - НачатьТранзакцию(); - Попытка - Блокировка.Заблокировать(); - РезультатыЗапросы = Запрос.ВыполнитьПакет(); - - Если НЕ РезультатыЗапросы[РезультатыЗапросы.Количество()-1].Пустой() Тогда - - Если РезультатыЗапросы[РезультатыЗапросы.Количество()-2].Выгрузить()[0].Количество < 10000 Тогда - // Запись одним набором записей. - Запрос.Текст = - "ВЫБРАТЬ - | ТаблицыПользователейГруппы.Таблица КАК Таблица, - | ТаблицыПользователейГруппы.Пользователь КАК Пользователь, - | &ГруппаДоступа КАК ГруппаДоступа, - | ТаблицыПользователейГруппы.Добавление, - | ТаблицыПользователейГруппы.Изменение, - | ТаблицыПользователейГруппы.Удаление, - | ТаблицыПользователейГруппы.ТипТаблицы, - | ТаблицыПользователейГруппы.ВидДоступаПравоДобавления, - | ТаблицыПользователейГруппы.ВидДоступаПравоИзменения - |ИЗ - | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы"; - НаборЗаписей = РегистрыСведений.ТаблицыГруппДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); - НаборЗаписей.Загрузить(Запрос.Выполнить().Выгрузить()); - НаборЗаписей.Записать(); - Иначе - // Запись несколькими наборами записей. - // Очистка записей по группе доступа. - НаборЗаписей = РегистрыСведений.ТаблицыГруппДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); - НаборЗаписей.Записать(); - Запрос.Текст = - "ВЫБРАТЬ - | ТаблицыПользователейГруппы.Таблица КАК Таблица, - | ТаблицыПользователейГруппы.Пользователь КАК Пользователь, - | ТаблицыПользователейГруппы.Добавление, - | ТаблицыПользователейГруппы.Изменение, - | ТаблицыПользователейГруппы.Удаление, - | ТаблицыПользователейГруппы.ТипТаблицы, - | ТаблицыПользователейГруппы.ВидДоступаПравоДобавления, - | ТаблицыПользователейГруппы.ВидДоступаПравоИзменения - |ИЗ - | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы - |ИТОГИ ПО - | Таблица"; - // Добавление записей по группе доступа частями по таблицам. - Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); - Пока Выборка.Следующий() Цикл - ВыборкаСтрок = Выборка.Выбрать(); - НаборЗаписей = РегистрыСведений.ТаблицыГруппДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); - НаборЗаписей.Отбор.Таблица.Установить(Выборка.Таблица); - Пока ВыборкаСтрок.Следующий() Цикл - НоваяЗапись = НаборЗаписей.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяЗапись, ВыборкаСтрок); - НоваяЗапись.ГруппаДоступа = ГруппаДоступа; - КонецЦикла; - НаборЗаписей.Записать(); - КонецЦикла; - КонецЕсли; - КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - ВызватьИсключение; - КонецПопытки; - -КонецПроцедуры - -// Обновляет записи в РегистрСведений.ЗначенияГруппДоступа для указанной группы доступа. -// -// Параметры: -// ГруппаДоступа - СправочникСсылка.ГруппыДоступа. -// -Процедура ЗаписатьЗначенияГруппДоступа(Знач ГруппаДоступа) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); - Запрос.УстановитьПараметр("ПрофильГруппыДоступа", ОбщегоНазначения.ПолучитьЗначениеРеквизита(ГруппаДоступа, "Профиль")); - Запрос.Текст = - "ВЫБРАТЬ - | ВидыДоступаПрофиля.ВидДоступа КАК ВидДоступа, - | ИСТИНА КАК ТолькоВидДоступа, - | НЕОПРЕДЕЛЕНО КАК ЗначениеДоступа - |ПОМЕСТИТЬ ЗначенияГруппы - |ИЗ - | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофиля - |ГДЕ - | (НЕ ВидыДоступаПрофиля.ДоступРазрешен) - | И ВидыДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа - | И ВидыДоступаПрофиля.Предустановленный - | И (НЕ ВидыДоступаПрофиля.Ссылка.ПометкаУдаления) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ВидыДоступа.ВидДоступа, - | ИСТИНА, - | НЕОПРЕДЕЛЕНО - |ИЗ - | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПредустановленныеВидыДоступа - | ПО ВидыДоступа.Ссылка.Профиль = ПредустановленныеВидыДоступа.Ссылка - | И ВидыДоступа.ВидДоступа = ПредустановленныеВидыДоступа.ВидДоступа - | И ((НЕ ВидыДоступа.Ссылка.ПометкаУдаления)) - | И ((НЕ ПредустановленныеВидыДоступа.Ссылка.ПометкаУдаления)) - |ГДЕ - | (НЕ ВидыДоступа.ДоступРазрешен) - | И ВидыДоступа.Ссылка = &ГруппаДоступа - | И (НЕ ПредустановленныеВидыДоступа.Предустановленный) - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ЗначенияДоступаПрофиля.ВидДоступа, - | ЛОЖЬ, - | ЗначенияДоступаПрофиля.ЗначениеДоступа - |ИЗ - | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофиля - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ЗначенияДоступаПрофиля - | ПО (ВидыДоступаПрофиля.Предустановленный) - | И ((НЕ ВидыДоступаПрофиля.Ссылка.ПометкаУдаления)) - | И (ВидыДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа) - | И (ЗначенияДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа) - | И ВидыДоступаПрофиля.ВидДоступа = ЗначенияДоступаПрофиля.ВидДоступа - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ - | ЗначенияДоступа.ВидДоступа, - | ЛОЖЬ, - | ЗначенияДоступа.ЗначениеДоступа - |ИЗ - | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПредустановленныеВидыДоступа - | ПО ВидыДоступа.Ссылка.Профиль = ПредустановленныеВидыДоступа.Ссылка - | И ВидыДоступа.ВидДоступа = ПредустановленныеВидыДоступа.ВидДоступа - | И ((НЕ ПредустановленныеВидыДоступа.Ссылка.ПометкаУдаления)) - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ЗначенияДоступа КАК ЗначенияДоступа - | ПО (ВидыДоступа.Ссылка = &ГруппаДоступа) - | И (ЗначенияДоступа.Ссылка = &ГруппаДоступа) - | И ВидыДоступа.ВидДоступа = ЗначенияДоступа.ВидДоступа - | И ((НЕ ПредустановленныеВидыДоступа.Предустановленный)) - | И ((НЕ ЗначенияДоступа.Ссылка.ПометкаУдаления)) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа - | ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияГруппы КАК ЗначенияГруппы - | ПО (ЗначенияГруппы.ВидДоступа = ЗначенияГруппДоступа.ВидДоступа) - | И (ЗначенияГруппы.ТолькоВидДоступа = ЗначенияГруппДоступа.ТолькоВидДоступа) - | И (ЗначенияГруппы.ЗначениеДоступа = ЗначенияГруппДоступа.ЗначениеДоступа) - |ГДЕ - | ЗначенияГруппДоступа.ГруппаДоступа = &ГруппаДоступа - | И ЗначенияГруппы.ВидДоступа ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | ЗначенияГруппы КАК ЗначенияГруппы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа - | ПО (ЗначенияГруппДоступа.ГруппаДоступа = &ГруппаДоступа) - | И ЗначенияГруппы.ВидДоступа = ЗначенияГруппДоступа.ВидДоступа - | И ЗначенияГруппы.ТолькоВидДоступа = ЗначенияГруппДоступа.ТолькоВидДоступа - | И ЗначенияГруппы.ЗначениеДоступа = ЗначенияГруппДоступа.ЗначениеДоступа - |ГДЕ - | ЗначенияГруппДоступа.ВидДоступа ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | &ГруппаДоступа КАК ГруппаДоступа, - | ЗначенияГруппы.ВидДоступа, - | ЗначенияГруппы.ТолькоВидДоступа, - | ЗначенияГруппы.ЗначениеДоступа - |ИЗ - | ЗначенияГруппы КАК ЗначенияГруппы"; - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - - Если НЕ РезультатыЗапроса[1].Пустой() Тогда - - НаборЗаписей = РегистрыСведений.ЗначенияГруппДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); - НаборЗаписей.Загрузить(РезультатыЗапроса[2].Выгрузить()); - НаборЗаписей.Записать(); - - КонецЕсли; - -КонецПроцедуры - -// Только для внутреннего использования. -// Вызывается при обновлении данных регистра сведений ГруппыЗначенийДоступа -// по видам доступа ПустаяСсылка, Пользователи, Внешние пользователи и -// при изменении состава участников групп доступа. -// -Процедура ОбновитьПодчиненныхПользователейГруппДоступа() Экспорт - - // Подготовка данных для работы ограничений по видам доступа Пользователи и ВнешниеПользователи - // когда ДобавлятьРуководителямДоступПодчиненных для проверки текущих пользователей - // (ТекущиеПользователи = ТекущийПользователь + ПодчиненныеПользователиПроверяемойГруппыДоступа) - // - // <состав поля Пользователь> - // - // а) для вида доступа Пользователи - // {cравнение с &ТекущийПользователь}} {cравнение с Т.<поле>} {cравнение с проверяемой группой доступа} - // - // Пользователь - тот же Пользователь Группа доступа того же пользователя - // - Подчиненный пользователь Группа доступа подчиненного пользователя - // - ГруппаИсполнителей того же пользователя Группа доступа того же пользователя - // - ГруппаИсполнителей подчиненного пользователя Группа доступа подчиненного пользователя - // - // б) для вида доступа ВнешниеПользователи - // {cравнение с &ТекущийВнешнийПользователь}} {cравнение с Т.<поле>} {cравнение с проверяемой группой доступа} - // - // Внешний пользователь - тот же Внешний пользователь Группа доступа того же внешнего пользователя - // - Подчиненный пользователь Группа доступа подчиненного внешнего пользователя - // - ГруппаИсполнителей того же внешнего пользователя Группа доступа того же внешнего пользователя - // - ГруппаИсполнителей подчиненного внешнего пользователя Группа доступа подчиненного внешнего пользователя - // - ОбъектАвторизации того же внешнего пользователя Группа доступа того же внешнего пользователя - // - ОбъектАвторизации подчиненного внешнего пользователя Группа доступа подчиненного внешнего пользователя - - // Результат получается на основании подчиненности пользователей и - // данных для ограничения по видам доступа Пользователи и ВнешниеПользователи - // подготовленных в регистре сведений ГруппыЗначенийДоступа, - // а также участников групп доступа - - // Порядок получения данных - // 1. Получить подчиненных пользователей - // 2. Получить группы доступа пользователей без учета подчиненности - // 3. Получить значения доступа пользователей по полученным группам доступа - // 4. Получить новые данные: подчиненных пользователей по группам доступа, - // где в качестве подчиненных пользователей могут быть не только пользователи, - // но и группы пользователей и группы исполнителей задач и др. - // 5. Получить строки для удаления - // 6. Получить строки для добавления - - УстановитьПривилегированныйРежим(Истина); - - Если НЕ ДобавлятьРуководителямДоступПодчиненных() Тогда - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи"; - Если НЕ Запрос.Выполнить().Пустой() Тогда - НаборЗаписей = РегистрыСведений.ПодчиненныеПользователи.СоздатьНаборЗаписей(); - НаборЗаписей.Записать(); - КонецЕсли; - Иначе - - Запрос = Новый Запрос; - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - - // Подготовка таблицы подчиненности пользователей. - Если НЕ УправлениеДоступомПереопределяемый.ТаблицаПодчиненностиПользователей(Запрос.МенеджерВременныхТаблиц) Тогда - // - Запрос.Текст = - "ВЫБРАТЬ - | Пользователи.Ссылка КАК Пользователь, - | Пользователи.Ссылка КАК ПодчиненныйПользователь - |ПОМЕСТИТЬ ТаблицаПодчиненностиПользователей - |ИЗ - | Справочник.Пользователи КАК Пользователи - |ГДЕ - | ЛОЖЬ"; - Запрос.Выполнить(); - КонецЕсли; - - Запрос.Текст = - "ВЫБРАТЬ - | ТаблицаПодчиненностиПользователей.Пользователь, - | ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь - |ПОМЕСТИТЬ ПодчиненныеПользователи - |ИЗ - | ТаблицаПодчиненностиПользователей КАК ТаблицаПодчиненностиПользователей - |ГДЕ - | ТИПЗНАЧЕНИЯ(ТаблицаПодчиненностиПользователей.Пользователь) = ТИП(Справочник.Пользователи) - | И ТаблицаПодчиненностиПользователей.Пользователь <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - | И ТИПЗНАЧЕНИЯ(ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь) = ТИП(Справочник.Пользователи) - | И ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | СоставыГруппПользователей.Пользователь, - | СоставыГруппПользователей.ГруппаПользователей - |ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - |ГДЕ - | ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.Пользователь) = ТИП(Справочник.Пользователи) - | И ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.ГруппаПользователей) = ТИП(Справочник.Пользователи) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | ТаблицаПодчиненностиПользователей.Пользователь КАК ВнешнийПользователь, - | ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь КАК ПодчиненныйВнешнийПользователь - |ПОМЕСТИТЬ ПодчиненныеВнешниеПользователи - |ИЗ - | ТаблицаПодчиненностиПользователей КАК ТаблицаПодчиненностиПользователей - |ГДЕ - | ТИПЗНАЧЕНИЯ(ТаблицаПодчиненностиПользователей.Пользователь) = ТИП(Справочник.ВнешниеПользователи) - | И ТаблицаПодчиненностиПользователей.Пользователь <> ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка) - | И ТИПЗНАЧЕНИЯ(ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь) = ТИП(Справочник.ВнешниеПользователи) - | И ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь <> ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | СоставыГруппПользователей.Пользователь, - | СоставыГруппПользователей.ГруппаПользователей - |ИЗ - | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей - |ГДЕ - | ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.Пользователь) = ТИП(Справочник.ВнешниеПользователи) - | И ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.ГруппаПользователей) = ТИП(Справочник.ВнешниеПользователи) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |УНИЧТОЖИТЬ ТаблицаПодчиненностиПользователей"; - - Запрос.Текст = Запрос.Текст + Символы.ПС+ ";" + Символы.ПС + - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПодчиненныеПользователи.Пользователь, - | ГруппыЗначенийДоступа.ЗначениеДоступа КАК ПодчиненныйПользователь, - | УчастникиГруппДоступа.Ссылка КАК ГруппаДоступа - |ПОМЕСТИТЬ НовыеДанные - |ИЗ - | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодчиненныеПользователи КАК ПодчиненныеПользователи - | ПО (ГруппыЗначенийДоступа.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.Пользователи)) - | И ГруппыЗначенийДоступа.ГруппаДоступа = ПодчиненныеПользователи.ПодчиненныйПользователь - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) - | И (ПользователиИГруппыПользователей.ЗначениеДоступа = ПодчиненныеПользователи.ПодчиненныйПользователь) - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа - | ПО (УчастникиГруппДоступа.Пользователь = ПользователиИГруппыПользователей.ГруппаДоступа) - | И ((НЕ УчастникиГруппДоступа.Ссылка.ПометкаУдаления)) - | И ((НЕ УчастникиГруппДоступа.Ссылка.Профиль.ПометкаУдаления)) - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПодчиненныеВнешниеПользователи.ВнешнийПользователь, - | ГруппыЗначенийДоступа.ЗначениеДоступа, - | УчастникиГруппДоступа.Ссылка - |ИЗ - | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодчиненныеВнешниеПользователи КАК ПодчиненныеВнешниеПользователи - | ПО (ГруппыЗначенийДоступа.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи)) - | И ГруппыЗначенийДоступа.ГруппаДоступа = ПодчиненныеВнешниеПользователи.ПодчиненныйВнешнийПользователь - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей - | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) - | И (ПользователиИГруппыПользователей.ЗначениеДоступа = ПодчиненныеВнешниеПользователи.ПодчиненныйВнешнийПользователь) - | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа - | ПО (УчастникиГруппДоступа.Пользователь = ПользователиИГруппыПользователей.ГруппаДоступа) - | И ((НЕ УчастникиГруппДоступа.Ссылка.ПометкаУдаления)) - | И ((НЕ УчастникиГруппДоступа.Ссылка.Профиль.ПометкаУдаления))"; - - Запрос.Выполнить(); - - Запрос.Текст = - "ВЫБРАТЬ - | СтарыеДанные.Пользователь, - | СтарыеДанные.ПодчиненныйПользователь, - | СтарыеДанные.ГруппаДоступа - |ИЗ - | РегистрСведений.ПодчиненныеПользователи КАК СтарыеДанные - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеДанные КАК НовыеДанные - | ПО СтарыеДанные.Пользователь = НовыеДанные.Пользователь - | И СтарыеДанные.ПодчиненныйПользователь = НовыеДанные.ПодчиненныйПользователь - | И СтарыеДанные.ГруппаДоступа = НовыеДанные.ГруппаДоступа - |ГДЕ - | НовыеДанные.Пользователь ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | НовыеДанные.Пользователь, - | НовыеДанные.ПодчиненныйПользователь, - | НовыеДанные.ГруппаДоступа - |ИЗ - | НовыеДанные КАК НовыеДанные - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПодчиненныеПользователи КАК СтарыеДанные - | ПО (СтарыеДанные.Пользователь = НовыеДанные.Пользователь) - | И (СтарыеДанные.ПодчиненныйПользователь = НовыеДанные.ПодчиненныйПользователь) - | И (СтарыеДанные.ГруппаДоступа = НовыеДанные.ГруппаДоступа) - |ГДЕ - | СтарыеДанные.Пользователь ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |УНИЧТОЖИТЬ НовыеДанные"; - - РезультатЗапроса = Запрос.ВыполнитьПакет(); - - // Удаление лишних записей - МенеджерЗаписи = РегистрыСведений.ПодчиненныеПользователи.СоздатьМенеджерЗаписи(); - УдаляемыеСтроки = РезультатЗапроса[0].Выбрать(); - // - Пока УдаляемыеСтроки.Следующий() Цикл - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, УдаляемыеСтроки); - МенеджерЗаписи.Прочитать(); - Если МенеджерЗаписи.Выбран() Тогда - МенеджерЗаписи.Удалить(); - КонецЕсли; - КонецЦикла; - - // Добавление недостающих записей - Выгрузка = РезультатЗапроса[1].Выгрузить(); - Если Выгрузка.Количество() > 0 Тогда - НаборЗаписей = РегистрыСведений.ПодчиненныеПользователи.СоздатьНаборЗаписей(); - НаборЗаписей.Загрузить(Выгрузка); - НаборЗаписей.Записать(Ложь); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы с правами по значения доступа - -// Возвращает описание возможных прав по значениям доступа. -// Подробнее о возможных правах см. в комментарии к функции -// УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(). -// -// Параметры: -// Таблица - Строка, Неопределено - полное имя таблицы значений доступа, -// для которых нужно получить описание возможных прав, -// когда Неопределено, возвращается таблица всех описаний, -// заданных прикладным разработчиком. -// -// Возвращаемое значение: -// ТаблицаЗначений с колонками, описание которых см. в комментарии к функции -// УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(). -// Если задан параметр Таблица, возвращаются только её описания. -// -Функция ВозможныеПраваПоЗначениюДоступа(Таблица = Неопределено) Экспорт - - ВозможныеПрава = УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(); - - Если Таблица = Неопределено Тогда - Строки = Неопределено; - Иначе - Строки = ВозможныеПрава.НайтиСтроки(Новый Структура("ВладелецПрав", Таблица)); - КонецЕсли; - - Возврат ВозможныеПрава.Скопировать(Строки); - -КонецФункции - -// Выполняет обновление таблиц в регистре сведений ПраваПоЗначенияДоступа, -// когда изменена процедура ЗаполнитьВозможныеПраваПоЗначениямДоступа -// модуля УправлениеДоступомПереопределяемый. -// -Процедура ОбновитьТаблицыПравПоЗначениямДоступа() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ВозможныеПрава = УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(); - - ТаблицыПрав = Новый ТаблицаЗначений; - ТаблицыПрав.Колонки.Добавить("ВладелецПрав", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.ЗначениеДоступа.Тип); - ТаблицыПрав.Колонки.Добавить("Право", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.Право.Тип); - ТаблицыПрав.Колонки.Добавить("Таблица", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.Таблица.Тип); - ТаблицыПрав.Колонки.Добавить("Чтение", Новый ОписаниеТипов("Булево")); - ТаблицыПрав.Колонки.Добавить("Добавление", Новый ОписаниеТипов("Булево")); - ТаблицыПрав.Колонки.Добавить("Изменение", Новый ОписаниеТипов("Булево")); - ТаблицыПрав.Колонки.Добавить("Удаление", Новый ОписаниеТипов("Булево")); - - Для каждого ОписаниеПрава Из ВозможныеПрава Цикл - ВладелецПрав = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОписаниеПрава.ВладелецПрав).ПустаяСсылка(); - Если ТаблицыПрав.Колонки.ВладелецПрав.ТипЗначения.СодержитТип(ТипЗнч(ВладелецПрав)) Тогда - Для каждого Таблица Из ОписаниеПрава.ЧтениеВТаблицах Цикл - НоваяТаблица = ТаблицыПрав.Добавить(); - НоваяТаблица.ВладелецПрав = ВладелецПрав; - НоваяТаблица.Право = ОписаниеПрава.Имя; - НоваяТаблица.Таблица = Таблица; - НоваяТаблица.Чтение = Истина; - КонецЦикла; - Для каждого Таблица Из ОписаниеПрава.ДобавлениеВТаблицах Цикл - НоваяТаблица = ТаблицыПрав.Добавить(); - НоваяТаблица.ВладелецПрав = ВладелецПрав; - НоваяТаблица.Право = ОписаниеПрава.Имя; - НоваяТаблица.Таблица = Таблица; - НоваяТаблица.Добавление = Истина; - КонецЦикла; - Для каждого Таблица Из ОписаниеПрава.ИзменениеВТаблицах Цикл - НоваяТаблица = ТаблицыПрав.Добавить(); - НоваяТаблица.ВладелецПрав = ВладелецПрав; - НоваяТаблица.Право = ОписаниеПрава.Имя; - НоваяТаблица.Таблица = Таблица; - НоваяТаблица.Изменение = Истина; - КонецЦикла; - Для каждого Таблица Из ОписаниеПрава.УдалениеВТаблицах Цикл - НоваяТаблица = ТаблицыПрав.Добавить(); - НоваяТаблица.ВладелецПрав = ВладелецПрав; - НоваяТаблица.Право = ОписаниеПрава.Имя; - НоваяТаблица.Таблица = Таблица; - НоваяТаблица.Удаление = Истина; - КонецЦикла; - КонецЕсли; - КонецЦикла; - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТаблицыПрав", ТаблицыПрав); - Запрос.Текст = - "ВЫБРАТЬ - | ТаблицыПрав.ВладелецПрав, - | ТаблицыПрав.Право, - | ТаблицыПрав.Таблица, - | ТаблицыПрав.Чтение, - | ТаблицыПрав.Добавление, - | ТаблицыПрав.Изменение, - | ТаблицыПрав.Удаление - |ПОМЕСТИТЬ ТаблицыПрав - |ИЗ - | &ТаблицыПрав КАК ТаблицыПрав - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | НовыеЗаписи.ЗначениеДоступа, - | НовыеЗаписи.Пользователь, - | НовыеЗаписи.Право, - | НовыеЗаписи.Таблица, - | НовыеЗаписи.Запрещено, - | НовыеЗаписи.РаспространяетсяВИерархии, - | НовыеЗаписи.Чтение, - | НовыеЗаписи.ЧтениеЗапрещено, - | НовыеЗаписи.Добавление, - | НовыеЗаписи.ДобавлениеЗапрещено, - | НовыеЗаписи.Изменение, - | НовыеЗаписи.ИзменениеЗапрещено, - | НовыеЗаписи.Удаление, - | НовыеЗаписи.УдалениеЗапрещено - |ИЗ - | (ВЫБРАТЬ - | ПраваПоЗначениям.ЗначениеДоступа КАК ЗначениеДоступа, - | ПраваПоЗначениям.Пользователь КАК Пользователь, - | ПраваПоЗначениям.Право КАК Право, - | ПраваПоЗначениям.Запрещено КАК Запрещено, - | ПраваПоЗначениям.РаспространяетсяВИерархии КАК РаспространяетсяВИерархии, - | ЕСТЬNULL(ТаблицыПрав.Таблица, """") КАК Таблица, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) - | КОНЕЦ КАК Чтение, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ЧтениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) - | КОНЕЦ КАК Добавление, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ДобавлениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) - | КОНЕЦ КАК Изменение, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ИзменениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) - | КОНЕЦ КАК Удаление, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК УдалениеЗапрещено - | ИЗ - | (ВЫБРАТЬ - | ПраваПоЗначениямДоступа.ЗначениеДоступа КАК ЗначениеДоступа, - | ПраваПоЗначениямДоступа.Пользователь КАК Пользователь, - | ПраваПоЗначениямДоступа.Право КАК Право, - | МАКСИМУМ(ПраваПоЗначениямДоступа.Запрещено) КАК Запрещено, - | МАКСИМУМ(ПраваПоЗначениямДоступа.РаспространяетсяВИерархии) КАК РаспространяетсяВИерархии - | ИЗ - | РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениямДоступа - | - | СГРУППИРОВАТЬ ПО - | ПраваПоЗначениямДоступа.ЗначениеДоступа, - | ПраваПоЗначениямДоступа.Пользователь, - | ПраваПоЗначениямДоступа.Право) КАК ПраваПоЗначениям - | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПрав КАК ТаблицыПрав - | ПО (ТИПЗНАЧЕНИЯ(ПраваПоЗначениям.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТаблицыПрав.ВладелецПрав)) - | И ПраваПоЗначениям.Право = ТаблицыПрав.Право) КАК НовыеЗаписи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваПоЗначениямДоступа КАК ТекущиеЗаписи - | ПО НовыеЗаписи.ЗначениеДоступа = ТекущиеЗаписи.ЗначениеДоступа - | И НовыеЗаписи.Пользователь = ТекущиеЗаписи.Пользователь - | И НовыеЗаписи.Право = ТекущиеЗаписи.Право - | И НовыеЗаписи.Таблица = ТекущиеЗаписи.Таблица - | И НовыеЗаписи.Запрещено = ТекущиеЗаписи.Запрещено - | И НовыеЗаписи.РаспространяетсяВИерархии = ТекущиеЗаписи.РаспространяетсяВИерархии - | И НовыеЗаписи.Чтение = ТекущиеЗаписи.Чтение - | И НовыеЗаписи.ЧтениеЗапрещено = ТекущиеЗаписи.ЧтениеЗапрещено - | И НовыеЗаписи.Добавление = ТекущиеЗаписи.Добавление - | И НовыеЗаписи.ДобавлениеЗапрещено = ТекущиеЗаписи.ДобавлениеЗапрещено - | И НовыеЗаписи.Изменение = ТекущиеЗаписи.Изменение - | И НовыеЗаписи.ИзменениеЗапрещено = ТекущиеЗаписи.ИзменениеЗапрещено - | И НовыеЗаписи.Удаление = ТекущиеЗаписи.Удаление - | И НовыеЗаписи.УдалениеЗапрещено = ТекущиеЗаписи.УдалениеЗапрещено - |ГДЕ - | ТекущиеЗаписи.ЗначениеДоступа ЕСТЬ NULL - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | НовыеЗаписи.ЗначениеДоступа, - | НовыеЗаписи.Пользователь, - | НовыеЗаписи.Право, - | НовыеЗаписи.Таблица - |ИЗ - | РегистрСведений.ПраваПоЗначениямДоступа КАК ТекущиеЗаписи - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ПраваПоЗначениям.ЗначениеДоступа КАК ЗначениеДоступа, - | ПраваПоЗначениям.Пользователь КАК Пользователь, - | ПраваПоЗначениям.Право КАК Право, - | ПраваПоЗначениям.Запрещено КАК Запрещено, - | ПраваПоЗначениям.РаспространяетсяВИерархии КАК РаспространяетсяВИерархии, - | ЕСТЬNULL(ТаблицыПрав.Таблица, """") КАК Таблица, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) - | КОНЕЦ КАК Чтение, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ЧтениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) - | КОНЕЦ КАК Добавление, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ДобавлениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) - | КОНЕЦ КАК Изменение, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ИзменениеЗапрещено, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЛОЖЬ - | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) - | КОНЕЦ КАК Удаление, - | ВЫБОР - | КОГДА ПраваПоЗначениям.Запрещено - | ТОГДА ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК УдалениеЗапрещено - | ИЗ - | (ВЫБРАТЬ - | ПраваПоЗначениямДоступа.ЗначениеДоступа КАК ЗначениеДоступа, - | ПраваПоЗначениямДоступа.Пользователь КАК Пользователь, - | ПраваПоЗначениямДоступа.Право КАК Право, - | МАКСИМУМ(ПраваПоЗначениямДоступа.Запрещено) КАК Запрещено, - | МАКСИМУМ(ПраваПоЗначениямДоступа.РаспространяетсяВИерархии) КАК РаспространяетсяВИерархии - | ИЗ - | РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениямДоступа - | - | СГРУППИРОВАТЬ ПО - | ПраваПоЗначениямДоступа.ЗначениеДоступа, - | ПраваПоЗначениямДоступа.Пользователь, - | ПраваПоЗначениямДоступа.Право) КАК ПраваПоЗначениям - | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПрав КАК ТаблицыПрав - | ПО (ТИПЗНАЧЕНИЯ(ПраваПоЗначениям.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТаблицыПрав.ВладелецПрав)) - | И ПраваПоЗначениям.Право = ТаблицыПрав.Право) КАК НовыеЗаписи - | ПО НовыеЗаписи.ЗначениеДоступа = ТекущиеЗаписи.ЗначениеДоступа - | И НовыеЗаписи.Пользователь = ТекущиеЗаписи.Пользователь - | И НовыеЗаписи.Право = ТекущиеЗаписи.Право - | И НовыеЗаписи.Таблица = ТекущиеЗаписи.Таблица - | И НовыеЗаписи.Запрещено = ТекущиеЗаписи.Запрещено - | И НовыеЗаписи.РаспространяетсяВИерархии = ТекущиеЗаписи.РаспространяетсяВИерархии - | И НовыеЗаписи.Чтение = ТекущиеЗаписи.Чтение - | И НовыеЗаписи.ЧтениеЗапрещено = ТекущиеЗаписи.ЧтениеЗапрещено - | И НовыеЗаписи.Добавление = ТекущиеЗаписи.Добавление - | И НовыеЗаписи.ДобавлениеЗапрещено = ТекущиеЗаписи.ДобавлениеЗапрещено - | И НовыеЗаписи.Изменение = ТекущиеЗаписи.Изменение - | И НовыеЗаписи.ИзменениеЗапрещено = ТекущиеЗаписи.ИзменениеЗапрещено - | И НовыеЗаписи.Удаление = ТекущиеЗаписи.Удаление - | И НовыеЗаписи.УдалениеЗапрещено = ТекущиеЗаписи.УдалениеЗапрещено - |ГДЕ - | НовыеЗаписи.ЗначениеДоступа ЕСТЬ NULL "; - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - - Для каждого ОписаниеУдаляемойЗаписи ИЗ РезультатыЗапроса[2].Выгрузить() Цикл - МенеджерЗаписи = РегистрыСведений.ПраваПоЗначениямДоступа.СоздатьМенеджерЗаписи(); - ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ОписаниеУдаляемойЗаписи); - МенеджерЗаписи.Удалить(); - КонецЦикла; - - НаборЗаписей = РегистрыСведений.ПраваПоЗначениямДоступа.СоздатьНаборЗаписей(); - НаборЗаписей.Загрузить(РезультатыЗапроса[1].Выгрузить()); - Если НаборЗаписей.Количество() > 0 Тогда - НаборЗаписей.Записать(Ложь); - КонецЕсли; - -КонецПроцедуры - -// Заполняет вторичные данные, ускоряющие работу шаблонов ограничений доступа. -// Выполняется перед записью в регистр НаборыЗначенийДоступа или -// перед записью объекта с табличной частью НаборыЗначенийДоступа. -// -// Параметры: -// СсылкаНаОбъект - СправочникСсылка.*, ДокументСсылка.*, ... -// Таблица - ТабличнаяЧасть (или ТаблицаЗначений), РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа -// -Процедура ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, Таблица) Экспорт - - ПодготовкаНабораЗаписей = ТипЗнч(Таблица) = Тип("РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа"); - - // Нормализация ресурсов Чтение, Добавление, Изменение, Удаление. - НомерНабора = -1; - Для каждого Строка Из Таблица Цикл - - Если ПодготовкаНабораЗаписей Тогда - // Установка значения измерения Объект - Строка.Объект = СсылкаНаОбъект; - // Заполнение свойств вида доступа: - // ВидДоступаБезГруппЗначенияДоступа, - // ВидДоступаЕдинственныйДляТипаЗначенияДоступа, - // ВидДоступаЧерезПраваПоЗначениямДоступа - СвойстваВидаДоступа = СвойстваВидаДоступа(Строка.ВидДоступа); - Если СвойстваВидаДоступа <> Неопределено Тогда - ЗаполнитьЗначенияСвойств(Строка, СвойстваВидаДоступа(Строка.ВидДоступа)); - КонецЕсли; - // Установка типа объекта для одной строки всех наборов (в качестве типа пустая ссылка) - Если НомерНабора = -1 Тогда - ТипыОбъекта = Новый Массив; - ТипыОбъекта.Добавить(ТипЗнч(СсылкаНаОбъект)); - ОписаниеТипаОбъекта = Новый ОписаниеТипов(ТипыОбъекта); - Строка.ТипОбъекта = ОписаниеТипаОбъекта.ПривестиЗначение(Неопределено); - КонецЕсли; - // Установка типа значения доступа для значений доступа по видам доступа - // ПравоЧтения, ПравоДобавления, ПравоИзменения (в качестве типа пустая ссылка) - Если Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения - ИЛИ Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоДобавления - ИЛИ Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения Тогда - МенеджерОбъекта = ?(Строка.ЗначениеДоступа <> Неопределено, ОбщегоНазначения.МенеджерОбъектаПоСсылке(Строка.ЗначениеДоступа), Неопределено); - Если МенеджерОбъекта <> Неопределено Тогда - Строка.ТипЗначенияДоступа = МенеджерОбъекта.ПустаяСсылка(); - КонецЕсли; - КонецЕсли; - КонецЕсли; - - // Очистка флажков прав и соответствующих им вторичных данных - // для всех строк каждого набора, кроме первой строки - Если НомерНабора = Строка.НомерНабора Тогда - Строка.Чтение = Ложь; - Строка.Добавление = Ложь; - Строка.Изменение = Ложь; - Строка.Удаление = Ложь; - Иначе - НомерНабора = Строка.НомерНабора; - КонецЕсли; - - Если ПодготовкаНабораЗаписей Тогда - // Описание прав Чтение, Добавление, Изменение через ссылки видов доступа для - // оптимизации работы механизма зависимостей по правам в шаблоне ограничения доступа - Строка.ВидДоступаПравоЧтения = ?(Строка.Чтение, ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); - Строка.ВидДоступаПравоДобавления = ?(Строка.Добавление, ПланыВидовХарактеристик.ВидыДоступа.ПравоДобавления, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); - Строка.ВидДоступаПравоИзменения = ?(Строка.Изменение, ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для действий при изменений настроек подсистемы - -// Если необходимо, включает заполнение данных для ограничения доступа и -// обновляет некоторые данные сразу. -// -// Вызывается из обработчика ПриЗаписи константы ОграничиватьДоступаНаУровнеЗаписей. -// -Процедура ПриИзмененииОграниченияДоступаНаУровнеЗаписей(ОграничениеДоступаНаУровнеЗаписейВключено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Если ОграничениеДоступаНаУровнеЗаписейВключено Тогда - - ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), - УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Начато заполнение данных для ограничения доступа'"), - РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); - - // Дополнительно обновляются таблицы прав, т.к. они будут использоваться - // в процедуре заполнения регистра сведений ТаблицыГруппДоступа. - ОбновитьТаблицыРолейПрофилейГруппДоступа(); - - // Обновление РегистрСведений.ТаблицыГруппДоступа и РегистрСведений.ЗначенияГруппДоступа. - Запрос = Новый Запрос( - "ВЫБРАТЬ - | ГруппыДоступа.Ссылка - |ИЗ - | Справочник.ГруппыДоступа КАК ГруппыДоступа - |ГДЕ - | (НЕ ГруппыДоступа.ЭтоГруппа)"); - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - ОбновитьТаблицыГруппДоступа(Выборка.Ссылка); - ЗаписатьЗначенияГруппДоступа(Выборка.Ссылка); - КонецЦикла; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - СтандартныеПодсистемыПереопределяемый.УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Истина); - Иначе - Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); - Задание.Использование = Истина; - Задание.Записать(); - КонецЕсли; - КонецЕсли; - - // Обновление параметров сеанса. - // Требуется для того, чтобы администратор не выполнял перезапуск. - УстановленныеПараметры = Новый Массив; - УстановкаПараметровСеанса("ОграничиватьДоступПоВиду", УстановленныеПараметры); - -КонецПроцедуры - -// Обновляет данные, зависимые от константы ДобавлятьРуководителямДоступПодчиненных. -// Вызывается из обработчика ПриЗаписи константы. -// -Процедура ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); - ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); - - // Обновление параметра сеанса. - // Требуется для того, чтобы администратор не выполнял перезапуск. - УстановленныеПараметры = Новый Массив; - УстановкаПараметровСеанса("ДобавлятьРуководителямДоступПодчиненных", УстановленныеПараметры); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для работы интерфейсов пользователей - -// Возвращает список значений доступа не помеченных на удаление. -// Используется в обработчиках событий ОкончаниеВводаТекста и АвтоПодбор. -// -// Параметры: -// Текст - Строка, символы введенные пользователем. -// ВключаяГруппы - Булево, если Истина, включать группы пользователей и внешних пользователей. -// ВидДоступа - ПланыВидовХарактеристикСсылка.ВидыДоступа, значения доступа которого выбираются. -// -Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина) Экспорт - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Текст", Текст + "%"); - Запрос.УстановитьПараметр("ВключаяГруппы", ВключаяГруппы); - Запрос.Текст = - "ВЫБРАТЬ - | ПредставленияПеречислений.Ссылка, - | ПредставленияПеречислений.Наименование КАК Наименование - |ПОМЕСТИТЬ ПредставленияПеречислений - |ИЗ - | &ПредставленияПеречислений КАК ПредставленияПеречислений - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НЕОПРЕДЕЛЕНО КАК Ссылка, - | """" КАК Наименование - |ГДЕ - | ЛОЖЬ"; - - ЗапросПредставленийПеречислений = Новый Запрос; - ЗапросПредставленийПеречислений.Текст = - "ВЫБРАТЬ - | """" КАК Ссылка, - | """" КАК Наименование - |ГДЕ - | ЛОЖЬ"; - - Для каждого Тип Из ВидДоступа.ТипЗначения.Типы() Цикл - - МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); - - ПолноеИмяТаблицы = МетаданныеТипа.ПолноеИмя(); - - Если ( Метаданные.Справочники.Содержит(МетаданныеТипа) - ИЛИ Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеТипа) ) - И МетаданныеТипа.Иерархический - И МетаданныеТипа.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов - И НЕ ВключаяГруппы Тогда - - УсловиеДляГруппы = "НЕ Таблица.ЭтоГруппа"; - Иначе - УсловиеДляГруппы = "Истина"; - КонецЕсли; - - Если Метаданные.Перечисления.Содержит(МетаданныеТипа) Тогда - // - ЗапросПредставленийПеречислений.Текст = ЗапросПредставленийПеречислений.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; - ЗапросПредставленийПеречислений.Текст = ЗапросПредставленийПеречислений.Текст + СтрЗаменить( - "ВЫБРАТЬ - | Таблица.Ссылка, - | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Наименование - |ИЗ - | &ПолноеИмяТаблицы КАК Таблица", "&ПолноеИмяТаблицы", ПолноеИмяТаблицы); - Иначе - Запрос.Текст = Запрос.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; - Запрос.Текст = Запрос.Текст + СтрЗаменить(СтрЗаменить( - "ВЫБРАТЬ - | Таблица.Ссылка, - | Таблица.Наименование - |ИЗ - | &ПолноеИмяТаблицы КАК Таблица - |ГДЕ - | (НЕ Таблица.ПометкаУдаления) - | И Таблица.Наименование ПОДОБНО &Текст - | И &УсловиеДляГруппы", "&ПолноеИмяТаблицы", ПолноеИмяТаблицы), "&УсловиеДляГруппы", УсловиеДляГруппы); - КонецЕсли; - КонецЦикла; - - Запрос.УстановитьПараметр("ПредставленияПеречислений", ЗапросПредставленийПеречислений.Выполнить().Выгрузить()); - Запрос.Текст = Запрос.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; - Запрос.Текст = Запрос.Текст + - "ВЫБРАТЬ - | ПредставленияПеречислений.Ссылка, - | ПредставленияПеречислений.Наименование - |ИЗ - | ПредставленияПеречислений КАК ПредставленияПеречислений - |ГДЕ - | ПредставленияПеречислений.Наименование ПОДОБНО &Текст"; - - ДанныеВыбора = Новый СписокЗначений; - - - Выборка = Запрос.Выполнить().Выбрать(); - Пока Выборка.Следующий() Цикл - - ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование); - КонецЦикла; - - Возврат ДанныеВыбора; - -КонецФункции - -// Заполняет шаблон заголовка подчиненной формы свойствами ссылки-владельца, -// например, НСтр("ru = 'Права доступа: %1 (%2)'" -> "Права доступа: Иванов (Пользователь)". -// -// Параметры: -// СсылкаНаВладельца - ссылка на объект-владелец. -// -Функция ЗаголовокПодчиненнойФормы(СтрокаЗаголовкаСПараметрами, СсылкаНаВладельца) Экспорт - - МетаданныеВладельца = СсылкаНаВладельца.Метаданные(); - НаименованиеВладельца = Строка(СсылкаНаВладельца); - - Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - СтрокаЗаголовкаСПараметрами, - НаименованиеВладельца, - НазваниеОбъектаИзМетаданных(МетаданныеВладельца) ); - -КонецФункции - -// Возвращает название объекта метаданных с учетом заданных свойств в порядке: -// - РасширенноеПредставлениеОбъекта, -// - ПредставлениеОбъекта, -// - Синоним, -// - Имя. -// -// Параметры: -// МетаданныеОбъекта - ОбъектМетаданных. -// -// Возвращаемое значение: -// Строка. -// -Функция НазваниеОбъектаИзМетаданных(МетаданныеОбъекта) Экспорт - - Если ЗначениеЗаполнено(МетаданныеОбъекта.РасширенноеПредставлениеОбъекта) Тогда - НазваниеОбъекта = МетаданныеОбъекта.РасширенноеПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.ПредставлениеОбъекта) Тогда - НазваниеОбъекта = МетаданныеОбъекта.ПредставлениеОбъекта; - ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.Синоним) Тогда - НазваниеОбъекта = МетаданныеОбъекта.Синоним; - Иначе - НазваниеОбъекта = МетаданныеОбъекта.Имя; - КонецЕсли; - - Возврат НазваниеОбъекта; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Процедуры и функции для начального заполнения - -// Обновляет содержимое регистра сведений ЗависимостиПравДоступа, -// если прикладной разработчик изменил зависимости в переопределяемом модуле. -// -Процедура ОбновитьЗависимостиПравДоступа() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - НаборЗаписей = РегистрыСведений.ЗависимостиПравДоступа.СоздатьНаборЗаписей(); - УправлениеДоступомПереопределяемый.ЗаполнитьЗависимостиПравДоступа(НаборЗаписей); - - Запрос = Новый Запрос( - "ВЫБРАТЬ - | НовыеЗаписи.ПодчиненнаяТаблица, - | НовыеЗаписи.ТипВедущейТаблицы, - | НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы, - | НовыеЗаписи.ПриПроверкеПраваЧтение, - | НовыеЗаписи.ПриПроверкеПраваДобавление, - | НовыеЗаписи.ПриПроверкеПраваИзменение, - | НовыеЗаписи.ПриПроверкеПраваУдаление - |ПОМЕСТИТЬ НовыеЗаписи - |ИЗ - | &НовыеЗаписи КАК НовыеЗаписи - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ЗависимостиПравДоступа КАК СтарыеЗаписи - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеЗаписи КАК НовыеЗаписи - | ПО СтарыеЗаписи.ПодчиненнаяТаблица = НовыеЗаписи.ПодчиненнаяТаблица - | И СтарыеЗаписи.ТипВедущейТаблицы = НовыеЗаписи.ТипВедущейТаблицы - | И СтарыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы = НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы - | И СтарыеЗаписи.ПриПроверкеПраваЧтение = НовыеЗаписи.ПриПроверкеПраваЧтение - | И СтарыеЗаписи.ПриПроверкеПраваДобавление = НовыеЗаписи.ПриПроверкеПраваДобавление - | И СтарыеЗаписи.ПриПроверкеПраваИзменение = НовыеЗаписи.ПриПроверкеПраваИзменение - | И СтарыеЗаписи.ПриПроверкеПраваУдаление = НовыеЗаписи.ПриПроверкеПраваУдаление - |ГДЕ - | НовыеЗаписи.ПодчиненнаяТаблица ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | НовыеЗаписи КАК НовыеЗаписи - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗависимостиПравДоступа КАК СтарыеЗаписи - | ПО НовыеЗаписи.ПодчиненнаяТаблица = СтарыеЗаписи.ПодчиненнаяТаблица - | И НовыеЗаписи.ТипВедущейТаблицы = СтарыеЗаписи.ТипВедущейТаблицы - | И НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы = СтарыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы - | И НовыеЗаписи.ПриПроверкеПраваЧтение = СтарыеЗаписи.ПриПроверкеПраваЧтение - | И НовыеЗаписи.ПриПроверкеПраваДобавление = СтарыеЗаписи.ПриПроверкеПраваДобавление - | И НовыеЗаписи.ПриПроверкеПраваИзменение = СтарыеЗаписи.ПриПроверкеПраваИзменение - | И НовыеЗаписи.ПриПроверкеПраваУдаление = СтарыеЗаписи.ПриПроверкеПраваУдаление - |ГДЕ - | СтарыеЗаписи.ПодчиненнаяТаблица ЕСТЬ NULL "); - Запрос.УстановитьПараметр("НовыеЗаписи", НаборЗаписей); - - Если НЕ Запрос.Выполнить().Пустой() Тогда - НаборЗаписей.Записать(); - КонецЕсли; - -КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции @@ -5359,241 +3080,3 @@ КонецПроцедуры -Процедура ПриИзмененииНаборовЗначенийДоступа(Знач СсылкаНаОбъект) - - СсылкиНаЗависимыеОбъекты = Новый Массив; - УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект, СсылкиНаЗависимыеОбъекты); - - Для каждого СсылкаНаЗависимыйОбъект Из СсылкиНаЗависимыеОбъекты Цикл - // - Если СсылкаНаЗависимыйОбъект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда - // Изменение объекта не требуется - ЗаписатьНаборыЗначенийДоступа(СсылкаНаЗависимыйОбъект); - Иначе - // Изменение объекта требуется - Объект = СсылкаНаЗависимыйОбъект.ПолучитьОбъект(); - Таблица = УправлениеДоступомСобытия.ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект); - Если НЕ НаборыЗначенийДоступаТабличнойЧастиИзменены(СсылкаНаЗависимыйОбъект, Таблица) Тогда - Продолжить; - КонецЕсли; - Если ЭтоОбъектРучногоОбновленияЗависимыхНаборовЗначенийДоступа(СсылкаНаЗависимыйОбъект) Тогда - Продолжить; - КонецЕсли; - Попытка - ЗаблокироватьДанныеДляРедактирования(СсылкаНаЗависимыйОбъект, Объект.ВерсияДанных); - Объект.ОбменДанными.Загрузка = Истина; - Объект.ДополнительныеСвойства.Вставить("ЗаписатьНаборыЗначенийДоступа"); - Объект.ДополнительныеСвойства.Вставить("ЗаписатьЗависимыеНаборыЗначенийДоступа"); - Объект.ДополнительныеСвойства.Вставить("НаборыЗначенийДоступаТабличнойЧастиЗаполнены"); - Объект.НаборыЗначенийДоступа.Загрузить(Таблица); - Объект.Записать(); - РазблокироватьДанныеДляРедактирования(СсылкаНаЗависимыйОбъект); - Исключение - КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); - ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'При обновлении зависимого набора значений доступа объекта - |""%1"" возникла ошибка: - | - |%2'"), - Строка(СсылкаНаЗависимыйОбъект), - КраткоеПредставлениеОшибки)); - КонецПопытки; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -Функция ЭтоОбъектРучногоОбновленияЗависимыхНаборовЗначенийДоступа(Ссылка) - - УстановитьПривилегированныйРежим(Истина); - - ХранилищеЗначения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбъектыРучногоОбновленияЗависимыхНаборовЗначенийДоступа"); - ОбъектыРучногоОбновления = ?(ТипЗнч(ХранилищеЗначения) = Тип("ХранилищеЗначения"), ХранилищеЗначения.Получить(), Неопределено); - - Если ОбъектыРучногоОбновления = Неопределено Тогда - Возврат Ложь; - КонецЕсли; - - КлючСеанса = УправлениеДоступомСерверПовтИсп.КлючСеанса(); - Отбор = Новый Структура("КлючСеанса, Ссылка", КлючСеанса, Ссылка); - - Возврат ОбъектыРучногоОбновления.НайтиСтроки(Отбор).Количество() > 0; - -КонецФункции - -Функция НаборыЗначенийДоступаРегистраИзменены(СсылкаНаОбъект, НаборЗаписей) - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект); - Запрос.УстановитьПараметр("НовыеНаборы", НаборЗаписей.Выгрузить()); - Запрос.Текст = - "ВЫБРАТЬ - | НовыеНаборы.Объект, - | НовыеНаборы.НомерНабора, - | НовыеНаборы.ВидДоступа, - | НовыеНаборы.ЗначениеДоступа, - | НовыеНаборы.Чтение, - | НовыеНаборы.Добавление, - | НовыеНаборы.Изменение, - | НовыеНаборы.Удаление, - | НовыеНаборы.ВидДоступаБезГруппЗначенияДоступа, - | НовыеНаборы.ВидДоступаЕдинственныйДляТипаЗначенияДоступа, - | НовыеНаборы.ВидДоступаЧерезПраваПоЗначениямДоступа, - | НовыеНаборы.ВидДоступаПравоЧтения, - | НовыеНаборы.ВидДоступаПравоДобавления, - | НовыеНаборы.ВидДоступаПравоИзменения, - | НовыеНаборы.ТипОбъекта, - | НовыеНаборы.ТипЗначенияДоступа - |ПОМЕСТИТЬ НовыеНаборы - |ИЗ - | &НовыеНаборы КАК НовыеНаборы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеНаборы КАК НовыеНаборы - | ПО НаборыЗначенийДоступа.Объект = НовыеНаборы.Объект - | И НаборыЗначенийДоступа.НомерНабора = НовыеНаборы.НомерНабора - | И НаборыЗначенийДоступа.ВидДоступа = НовыеНаборы.ВидДоступа - | И НаборыЗначенийДоступа.ЗначениеДоступа = НовыеНаборы.ЗначениеДоступа - | И НаборыЗначенийДоступа.Чтение = НовыеНаборы.Чтение - | И НаборыЗначенийДоступа.Добавление = НовыеНаборы.Добавление - | И НаборыЗначенийДоступа.Изменение = НовыеНаборы.Изменение - | И НаборыЗначенийДоступа.Удаление = НовыеНаборы.Удаление - | И НаборыЗначенийДоступа.ВидДоступаБезГруппЗначенияДоступа = НовыеНаборы.ВидДоступаБезГруппЗначенияДоступа - | И НаборыЗначенийДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа = НовыеНаборы.ВидДоступаЕдинственныйДляТипаЗначенияДоступа - | И НаборыЗначенийДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа = НовыеНаборы.ВидДоступаЧерезПраваПоЗначениямДоступа - | И НаборыЗначенийДоступа.ВидДоступаПравоЧтения = НовыеНаборы.ВидДоступаПравоЧтения - | И НаборыЗначенийДоступа.ВидДоступаПравоДобавления = НовыеНаборы.ВидДоступаПравоДобавления - | И НаборыЗначенийДоступа.ВидДоступаПравоИзменения = НовыеНаборы.ВидДоступаПравоИзменения - | И НаборыЗначенийДоступа.ТипОбъекта = НовыеНаборы.ТипОбъекта - | И НаборыЗначенийДоступа.ТипЗначенияДоступа = НовыеНаборы.ТипЗначенияДоступа - |ГДЕ - | НаборыЗначенийДоступа.Объект = &СсылкаНаОбъект - | И НовыеНаборы.Объект ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | НовыеНаборы КАК НовыеНаборы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа - | ПО (НаборыЗначенийДоступа.Объект = НовыеНаборы.Объект) - | И (НаборыЗначенийДоступа.НомерНабора = НовыеНаборы.НомерНабора) - | И (НаборыЗначенийДоступа.ВидДоступа = НовыеНаборы.ВидДоступа) - | И (НаборыЗначенийДоступа.ЗначениеДоступа = НовыеНаборы.ЗначениеДоступа) - | И (НаборыЗначенийДоступа.Чтение = НовыеНаборы.Чтение) - | И (НаборыЗначенийДоступа.Добавление = НовыеНаборы.Добавление) - | И (НаборыЗначенийДоступа.Изменение = НовыеНаборы.Изменение) - | И (НаборыЗначенийДоступа.Удаление = НовыеНаборы.Удаление) - | И (НаборыЗначенийДоступа.ВидДоступаБезГруппЗначенияДоступа = НовыеНаборы.ВидДоступаБезГруппЗначенияДоступа) - | И (НаборыЗначенийДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа = НовыеНаборы.ВидДоступаЕдинственныйДляТипаЗначенияДоступа) - | И (НаборыЗначенийДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа = НовыеНаборы.ВидДоступаЧерезПраваПоЗначениямДоступа) - | И (НаборыЗначенийДоступа.ВидДоступаПравоЧтения = НовыеНаборы.ВидДоступаПравоЧтения) - | И (НаборыЗначенийДоступа.ВидДоступаПравоДобавления = НовыеНаборы.ВидДоступаПравоДобавления) - | И (НаборыЗначенийДоступа.ВидДоступаПравоИзменения = НовыеНаборы.ВидДоступаПравоИзменения) - | И (НаборыЗначенийДоступа.ТипОбъекта = НовыеНаборы.ТипОбъекта) - | И (НаборыЗначенийДоступа.ТипЗначенияДоступа = НовыеНаборы.ТипЗначенияДоступа) - |ГДЕ - | НаборыЗначенийДоступа.Объект ЕСТЬ NULL "; - - Возврат НЕ Запрос.Выполнить().Пустой(); - -КонецФункции - -Функция НаборыЗначенийДоступаТабличнойЧастиИзменены(СсылкаНаОбъект, НовыеНаборы) - - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("СтарыеНаборы", ОбщегоНазначения.ПолучитьЗначениеРеквизита(СсылкаНаОбъект, "НаборыЗначенийДоступа")); - Запрос.УстановитьПараметр("НовыеНаборы", НовыеНаборы); - Запрос.Текст = - "ВЫБРАТЬ - | НовыеНаборы.НомерНабора, - | НовыеНаборы.ВидДоступа, - | НовыеНаборы.ЗначениеДоступа, - | НовыеНаборы.Чтение, - | НовыеНаборы.Добавление, - | НовыеНаборы.Изменение, - | НовыеНаборы.Удаление - |ПОМЕСТИТЬ НовыеНаборы - |ИЗ - | &НовыеНаборы КАК НовыеНаборы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ - | СтарыеНаборы.НомерНабора, - | СтарыеНаборы.ВидДоступа, - | СтарыеНаборы.ЗначениеДоступа, - | СтарыеНаборы.Чтение, - | СтарыеНаборы.Добавление, - | СтарыеНаборы.Изменение, - | СтарыеНаборы.Удаление - |ПОМЕСТИТЬ СтарыеНаборы - |ИЗ - | &СтарыеНаборы КАК СтарыеНаборы - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | СтарыеНаборы КАК СтарыеНаборы - | ЛЕВОЕ СОЕДИНЕНИЕ НовыеНаборы КАК НовыеНаборы - | ПО СтарыеНаборы.НомерНабора = НовыеНаборы.НомерНабора - | И СтарыеНаборы.ВидДоступа = НовыеНаборы.ВидДоступа - | И СтарыеНаборы.ЗначениеДоступа = НовыеНаборы.ЗначениеДоступа - | И СтарыеНаборы.Чтение = НовыеНаборы.Чтение - | И СтарыеНаборы.Добавление = НовыеНаборы.Добавление - | И СтарыеНаборы.Изменение = НовыеНаборы.Изменение - | И СтарыеНаборы.Удаление = НовыеНаборы.Удаление - |ГДЕ - | НовыеНаборы.НомерНабора ЕСТЬ NULL - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | НовыеНаборы КАК НовыеНаборы - | ЛЕВОЕ СОЕДИНЕНИЕ СтарыеНаборы КАК СтарыеНаборы - | ПО (СтарыеНаборы.НомерНабора = НовыеНаборы.НомерНабора) - | И (СтарыеНаборы.ВидДоступа = НовыеНаборы.ВидДоступа) - | И (СтарыеНаборы.ЗначениеДоступа = НовыеНаборы.ЗначениеДоступа) - | И (СтарыеНаборы.Чтение = НовыеНаборы.Чтение) - | И (СтарыеНаборы.Добавление = НовыеНаборы.Добавление) - | И (СтарыеНаборы.Изменение = НовыеНаборы.Изменение) - | И (СтарыеНаборы.Удаление = НовыеНаборы.Удаление) - |ГДЕ - | СтарыеНаборы.НомерНабора ЕСТЬ NULL "; - - Возврат НЕ Запрос.Выполнить().Пустой(); - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы - -// Обработчик обновления информационной базы -Процедура ОбновитьПодчиненностьПользователей_1_1_2_3() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Константы.ДобавлятьРуководителямДоступПодчиненных.Установить(Ложь); - Константы.ДобавлятьРуководителямДоступПодчиненных.Установить(Истина); - -КонецПроцедуры - -// Обработчик обновления информационной базы -Процедура ОбновитьПодчиненностьПользователей_1_1() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); - ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); - -КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступом/УправлениеДоступом.mdo b/SSL/src/CommonModules/УправлениеДоступом/УправлениеДоступом.mdo index f217f62a8..ec24d0d8e 100644 --- a/SSL/src/CommonModules/УправлениеДоступом/УправлениеДоступом.mdo +++ b/SSL/src/CommonModules/УправлениеДоступом/УправлениеДоступом.mdo @@ -6,5 +6,6 @@ Управление доступом true - true + true + true diff --git a/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/Module.bsl index f754ab89c..40ff6aa98 100644 --- a/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомВМоделиСервиса/Module.bsl @@ -14,7 +14,7 @@ // Процедура УстановитьИспользованиеЗаданияЗаполненияДанных(Знач Использование) Экспорт - ОтборДляПоиска = Новый Структура("ИмяМетода", "УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания"); + ОтборДляПоиска = Новый Структура("ИмяМетода", "УправлениеДоступомСлужебный.ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания"); МассивРегламентныеЗадания = ОчередьЗаданий.ПолучитьРегламентныеЗадания(ОтборДляПоиска); Для Каждого Задание Из МассивРегламентныеЗадания Цикл Задание.Использование = Использование; @@ -36,7 +36,7 @@ Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "2.0.1.13"; + Обработчик.Версия = "2.1.0.4"; Обработчик.Процедура = "УправлениеДоступомВМоделиСервиса.ОбновитьГруппыДоступаАдминистраторовВМоделиСервиса"; КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl index 0034781a4..b0015f4c3 100644 --- a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/Module.bsl @@ -30,12 +30,12 @@ // Заполняет свойства видов доступа, заданных прикладным разработчиком, // в виде предопределенных элементов в объекте ПланВидовХарактеристик.ВидыДоступа. // Структуру свойств см. в функции, вызывающей эту процедуру: -// УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа(). +// УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(). // // Параметры: // Свойства - СтрокаТаблицыЗначений, содержащая поля, // описание которых см. в комментарии к функции -// УправлениеДоступомСерверПовтИсп.СвойстваВидовДоступа(). +// УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(). // Процедура ЗаполнитьСвойстваВидаДоступа(Знач Свойства) Экспорт @@ -71,12 +71,12 @@ // Заполняет описания возможных прав, назначаемых по значениям доступа. // Структуру описаний см. в функции, вызывающей эту процедуру: -// УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(). +// УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваПоЗначениямДоступа(). // // Параметры: // ВозможныеПрава - ТаблицаЗначений, содержащая поля, // описание которых см. в комментарии к функции -// УправлениеДоступомСерверПовтИсп.ВозможныеПраваПоЗначениямДоступа(). +// УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваПоЗначениямДоступа(). // Процедура ЗаполнитьВозможныеПраваПоЗначениямДоступа(Знач ВозможныеПрава) Экспорт @@ -150,7 +150,7 @@ Право.ТребуемыеПрава.Добавить("ЧтениеПапокИФайлов"); // Требуемая роль (одна из указанных) Право.ТребуемаяРоль.Добавить("РаботаСПапкамиФайлов"); - + // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры @@ -224,8 +224,8 @@ // Позволяет реализовать перезапись зависимых наборов значений доступа других объектов. // // Вызывается из процедур: -// УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(), -// УправлениеДоступом.ЗаписатьЗависимыеНаборыЗначенийДоступа(). +// УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступа(), +// УправлениеДоступомСлужебный.ЗаписатьЗависимыеНаборыЗначенийДоступа(). // // Параметры: // Ссылка - СправочникСсылка, ДокументСсылка, ... - ссылка на объект для которого @@ -237,6 +237,7 @@ // Процедура ПриИзмененииНаборовЗначенийДоступа(Знач Ссылка, СсылкиНаЗависимыеОбъекты) Экспорт + КонецПроцедуры // Заполняет зависимости прав доступа "подчиненного" объекта, например, задачи ЗадачаИсполнителя, diff --git a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/УправлениеДоступомПереопределяемый.mdo b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/УправлениеДоступомПереопределяемый.mdo index 98e055bac..9532a9782 100644 --- a/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/УправлениеДоступомПереопределяемый.mdo +++ b/SSL/src/CommonModules/УправлениеДоступомПереопределяемый/УправлениеДоступомПереопределяемый.mdo @@ -6,5 +6,6 @@ Управление доступом переопределяемый true - true + true + true diff --git a/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl new file mode 100644 index 000000000..457738b63 --- /dev/null +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/Module.bsl @@ -0,0 +1,2863 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Управление доступом". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Устанавливает параметры сеанса по текущим настройкам констант и +// настройкам групп доступа пользователей. +// Вызывается ПриНачалеРаботыСистемы. +// +Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ Константы.ОграничиватьДоступНаУровнеЗаписей.Получить() Тогда + // Для корректной работы препроцессора в ограничениях доступа, требуется инициализации всех + // параметров сеанса, которые могут быть востребованы в работе препроцессора. + Если ИмяПараметра = "ВидыДоступаЕдинственныеДляТипаЗначенияДоступа" ИЛИ + ИмяПараметра = "ВидыДоступаБезГруппЗначенияДоступа" Тогда + ПараметрыСеанса[ИмяПараметра] = Новый ФиксированныйМассив(Новый Массив); + // + ИначеЕсли ИмяПараметра = "ДобавлятьРуководителямДоступПодчиненных" Тогда + ПараметрыСеанса[ИмяПараметра] = Ложь; + Иначе + ПараметрыСеанса[ИмяПараметра] = ""; + КонецЕсли; + УстановленныеПараметры.Добавить(ИмяПараметра); + Возврат; + КонецЕсли; + + ПараметрыСеанса.ДобавлятьРуководителямДоступПодчиненных = Константы.ДобавлятьРуководителямДоступПодчиненных.Получить(); + УстановленныеПараметры.Добавить("ДобавлятьРуководителямДоступПодчиненных"); + + // Следующие виды доступа не самостоятельные, + // поэтому не учитываются при расчете необходимости ограничения в целом. + // В стандартных шаблонах проверка по этим видам доступа всегда выполняется, + // а в препроцессоре проверка использования не выполнятся. + ПараметрыСеанса.ОграничиватьДоступПоВидуУсловие = ""; + ПараметрыСеанса.ОграничиватьДоступПоВидуОбъект = ""; + УстановленныеПараметры.Добавить("ОграничиватьДоступПоВидуУсловие"); + УстановленныеПараметры.Добавить("ОграничиватьДоступПоВидуОбъект"); + + Запрос = Новый Запрос( + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ВидыДоступаПрофилейГруппДоступа.ВидДоступа + |ИЗ + | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофилейГруппДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) + | И (ПользователиИГруппыПользователей.ЗначениеДоступа = &ТекущийПользователь) + | И (ПользователиИГруппыПользователей.ТолькоВидДоступа = ЛОЖЬ) + | И (ПользователиИГруппыПользователей.ГруппаДоступа = ГруппыДоступаПользователи.Пользователь) + | ПО ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка + | И ((НЕ ГруппыДоступа.ПометкаУдаления)) + | ПО (ГруппыДоступа.Профиль = ВидыДоступаПрофилейГруппДоступа.Ссылка) + | И ((НЕ ВидыДоступаПрофилейГруппДоступа.Ссылка.ПометкаУдаления))"); + Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); + ОграничиваемыеВидыДоступа = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ВидДоступа"); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ВидыДоступа.Ссылка КАК ВидДоступа + |ИЗ + | ПланВидовХарактеристик.ВидыДоступа КАК ВидыДоступа + |ГДЕ + | ВидыДоступа.Предопределенный"); + Выборка = Запрос.Выполнить().Выбрать(); + + КаждыйВидЕдинственный = Истина; + КаждыйВидБезГрупп = Истина; + + ВидыДоступаБезОграничения = Новый Массив; + ВидыДоступаЕдинственныеДляТипаЗначенияДоступа = Новый Массив; + ВидыДоступаБезГруппЗначенияДоступа = Новый Массив; + ВидыДоступаЧерезПраваПоЗначениямДоступа = Новый Массив; + + Пока Выборка.Следующий() Цикл + + СвойстваВидаДоступа = СвойстваВидаДоступа(Выборка.ВидДоступа); + + Если СвойстваВидаДоступа.ВидДоступаИспользуетсяВсегда Тогда + // Такие виды доступа не самостоятельные, поэтому не учитываются при расчете + // необходимости ограничения в целом. + // В стандартных шаблонах проверка по этим видам доступа всегда выполняется, + // а в препроцессоре проверка использования не выполнятся. + ОписаниеВидаДоступа = ""; + + ИначеЕсли НЕ СвойстваВидаДоступа.ВидДоступаИспользуется Тогда + ОписаниеВидаДоступа = ""; + ВидыДоступаБезОграничения.Добавить(Выборка.ВидДоступа); + + ИначеЕсли ОграничиваемыеВидыДоступа.Найти(Выборка.ВидДоступа) = Неопределено Тогда + ОписаниеВидаДоступа = ""; + ВидыДоступаБезОграничения.Добавить(Выборка.ВидДоступа); + + ИначеЕсли СвойстваВидаДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа Тогда + ОписаниеВидаДоступа = "ЧерезПраваПоЗначениямДоступа"; + ВидыДоступаЧерезПраваПоЗначениямДоступа.Добавить(Выборка.ВидДоступа); + Иначе + Если СвойстваВидаДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа Тогда + ОписаниеВидаДоступа = "ЕдинственныйВид, "; + ВидыДоступаЕдинственныеДляТипаЗначенияДоступа.Добавить(Выборка.ВидДоступа); + Иначе + ОписаниеВидаДоступа = "ОдинИзМногихВидов,"; + КаждыйВидЕдинственный = Ложь; + КонецЕсли; + Если СвойстваВидаДоступа.ВидДоступаБезГруппЗначенияДоступа Тогда + ОписаниеГрупп = "БезГрупп"; + ВидыДоступаБезГруппЗначенияДоступа.Добавить(Выборка.ВидДоступа); + Иначе + ОписаниеГрупп = ?(СвойстваВидаДоступа.ВидДоступаСОднойГруппойЗначенияДоступа, "ОднаГруппа", "МножествоГрупп"); + КаждыйВидБезГрупп = Ложь; + КонецЕсли; + ОписаниеВидаДоступа = ОписаниеВидаДоступа + ОписаниеГрупп; + КонецЕсли; + ИмяВидаДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПолучитьИмяПредопределенного(Выборка.ВидДоступа); + ПараметрыСеанса["ОграничиватьДоступПоВиду" + ИмяВидаДоступа] = ОписаниеВидаДоступа; + УстановленныеПараметры.Добавить("ОграничиватьДоступПоВиду" + ИмяВидаДоступа); + КонецЦикла; + + ПараметрыСеанса.ВидыДоступаБезОграничения = Новый ФиксированныйМассив(ВидыДоступаБезОграничения); + УстановленныеПараметры.Добавить("ВидыДоступаБезОграничения"); + + ПараметрыСеанса.ВидыДоступаЕдинственныеДляТипаЗначенияДоступа = Новый ФиксированныйМассив(ВидыДоступаЕдинственныеДляТипаЗначенияДоступа); + УстановленныеПараметры.Добавить("ВидыДоступаЕдинственныеДляТипаЗначенияДоступа"); + + ПараметрыСеанса.ВидыДоступаБезГруппЗначенияДоступа = Новый ФиксированныйМассив(ВидыДоступаБезГруппЗначенияДоступа); + УстановленныеПараметры.Добавить("ВидыДоступаБезГруппЗначенияДоступа"); + + ПараметрыСеанса.ВидыДоступаЧерезПраваПоЗначениямДоступа = ?(ВидыДоступаЧерезПраваПоЗначениямДоступа.Количество() = 0, + "", + Новый ФиксированныйМассив(ВидыДоступаЧерезПраваПоЗначениямДоступа)); + УстановленныеПараметры.Добавить("ВидыДоступаЧерезПраваПоЗначениямДоступа"); + + Если КаждыйВидЕдинственный И КаждыйВидБезГрупп Тогда + ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный, КаждыйВидБезГрупп"; + ИначеЕсли КаждыйВидЕдинственный Тогда + ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидЕдинственный"; + ИначеЕсли КаждыйВидБезГрупп Тогда + ПараметрыСеанса.ОграничиватьДоступПоВиду = "КаждыйВидБезГрупп"; + Иначе + ПараметрыСеанса.ОграничиватьДоступПоВиду = "Да"; + КонецЕсли; + УстановленныеПараметры.Добавить("ОграничиватьДоступПоВиду"); + +КонецПроцедуры + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеДоступом.ОбновитьПоставляемыеПрофилиИГруппыДоступа"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ОбновитьТаблицыРолейПрофилейГруппДоступа"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ОбновитьЗависимостиПравДоступа"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ОбновитьТаблицыПравПоЗначениямДоступа"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "*"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ПометитьНаУдалениеГруппыДоступаПомеченныхПрофилей"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.2.3"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ОбновитьПодчиненностьПользователей_1_1_2_3"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.3.3"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных"; + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "1.1.3.4"; + Обработчик.Процедура = "УправлениеДоступомСлужебный.ОбновитьПодчиненностьПользователей_1_1"; + +КонецПроцедуры + +// Переопределяет стандартное поведение при получении данных в распределенной ИБ. +// Игнорирует получение данных подсистемы из автономного рабочего места в сервис. +// Выполняет отправку данных подсистемы в автономное рабочее место для их синхронизации с сервисом. +// +Процедура ПриПолученииДанных(ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + + // Стандартную обработку не переопределяем + + ИначеЕсли ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ДобавлятьРуководителямДоступПодчиненных") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("КонстантаМенеджерЗначения.ОграничиватьДоступНаУровнеЗаписей") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ГруппыДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("СправочникОбъект.ПрофилиГруппДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ГруппыЗначенийДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ЗависимостиПравДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ЗначенияГруппДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ПодчиненныеПользователи") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ПраваПоЗначениямДоступа") + ИЛИ ТипЗнч(ЭлементДанных) = Тип("РегистрСведенийНаборЗаписей.ТаблицыГруппДоступа") + Тогда + + // Получение элемента из автономного рабочего места игнорируем. + // Дополнительно отправляем данные в автономное рабочее место для полной синхронизации с сервисом. + ОтправкаНазад = Истина; + ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + Параметры.Вставить("УпрощенныйИнтерфейсНастройкиПравДоступа", + УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа()); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики подписок на события + +// Обработчик подписки ЗаписатьГруппыИВидыДоступа на событие ПриЗаписи +// вызывает метод записи групп значений доступа и видов доступа +// в РегистрСведений.ГруппыЗначенийДоступа, для требуемых объектов метаданных. +// +Процедура ЗаписатьГруппыИВидыДоступаПриЗаписи(Знач Объект, Отказ) Экспорт + + Если Объект.ОбменДанными.Загрузка + И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьГруппыИВидыДоступа") Тогда + + Возврат; + КонецЕсли; + + Если ТипЗнч(Объект) = Тип("СправочникОбъект.Пользователи") + И Объект.Служебный Тогда + + Возврат; + КонецЕсли; + + #Если Сервер Тогда + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Объект); + #Иначе + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Объект.Ссылка); + #КонецЕсли + +КонецПроцедуры + +// Обработчик подписки ЗаписатьНаборыЗначенийДоступа на событие ПриЗаписи +// вызывает метод записи значений доступа объекта в РегистрСведений.НаборыЗначенийДоступа. +// Возможен случай использования подсистемы "УправлениеДоступом", когда +// указанной подписки не существует, если наборы значений доступа не применяются. +// +Процедура ЗаписатьНаборыЗначенийДоступаПриЗаписи(Знач Объект, Отказ) Экспорт + + Если Объект.ОбменДанными.Загрузка + И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьНаборыЗначенийДоступа") Тогда + + Возврат; + КонецЕсли; + + #Если Сервер Тогда + ЗаписатьНаборыЗначенийДоступа(Объект); + #Иначе + ЗаписатьНаборыЗначенийДоступа(Объект.Ссылка); + #КонецЕсли + +КонецПроцедуры + +// Обработчик подписки ЗаписатьЗависимыеНаборыЗначенийДоступа события ПриЗаписи +// вызывает перезапись зависимых наборов значений доступа в регистре сведений НаборыЗначенийДоступа. +// +// Возможен случай использования подсистемы "УправлениеДоступом", когда +// указанной подписки не существует, если зависимые наборы значений доступа не применяются. +// +Процедура ЗаписатьЗависимыеНаборыЗначенийДоступаПриЗаписи(Знач Объект, Отказ) Экспорт + + Если Объект.ОбменДанными.Загрузка + И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьЗависимыеНаборыЗначенийДоступа") Тогда + + Возврат; + КонецЕсли; + + #Если Сервер Тогда + ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект); + #Иначе + ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект.Ссылка); + #КонецЕсли + +КонецПроцедуры + +// Обработчик регламентного задания ЗаполнениеДанныхДляОграниченияДоступа. +Процедура ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания() Экспорт + + ЗаполнениеДанныхДляОграниченияДоступа(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики регламентных заданий + +// Выполняет последовательное заполнение и обновление данных, необходимых для работы +// подсистемы УправленияДоступом в режиме ограничения доступа на уровне записей. +// +// При включенном режиме ограничения доступа на уровне записей заполняет наборы +// значений доступа. Заполнение выполняется частями при каждом запуске, пока все +// наборы значений доступа не будут заполнены. +// При отключении режима ограничения доступа на уровне записей наборы значений доступа +// (заполненные ранее) удаляются при перезаписи объектов, а не все сразу. +// Независимо от режима ограничения доступа на уровне записей обновляет вторичные +// данные: группы значений доступа и дополнительные поля в существующих наборах значений доступа. +// После завершения всех обновлений и заполнений отключает использование регламентного +// задания. +// +// Сведения о состоянии работы записываются в журнал регистрации. +// +// Возможно вызывать программно, например, при обновлении информационной базы. +// Также для целей обновления есть форма Справочник.ГруппыДоступа.ОбновлениеДанныхОграниченияДоступа, +// с помощью которой можно сделать интерактивное обновление данных ограничения доступа +// при обновлении информационной базы. +// +Процедура ЗаполнениеДанныхДляОграниченияДоступа(КоличествоДанных = 0) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда + + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); + + // Заполнение РегистрСведений.ГруппыЗначенийДоступа. + Для каждого Тип Из Метаданные.ПодпискиНаСобытия.ЗаписатьГруппыИВидыДоступа.Источник.Типы() Цикл + + Если Тип = Тип("ПланВидовХарактеристикОбъект.ВидыДоступа") Тогда + Продолжить; + КонецЕсли; + + Таблица = Метаданные.НайтиПоТипу(Тип).ПолноеИмя(); + + ВидыДоступа = ВидыДоступаТаблицы(Таблица); + Если ВидыДоступа.Количество() = 1 И + ( ВидыДоступа[0] = ПланыВидовХарактеристик.ВидыДоступа.Пользователи ИЛИ + ВидыДоступа[0] = ПланыВидовХарактеристик.ВидыДоступа.ВнешниеПользователи ) Тогда + Продолжить; + КонецЕсли; + + Если КоличествоДанных < 1000 И Тип <> Тип("Строка") Тогда + + Запрос = Новый Запрос(СтрЗаменить( + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 + | Таблица.Ссылка + |ИЗ + | ПодставляемаяТаблица КАК Таблица + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК РегистрСведенийГруппыЗначенийДоступа + | ПО Таблица.Ссылка = РегистрСведенийГруппыЗначенийДоступа.ЗначениеДоступа + |ГДЕ + | РегистрСведенийГруппыЗначенийДоступа.ЗначениеДоступа ЕСТЬ NULL ", "ПодставляемаяТаблица", Таблица)); + Выгрузка = Запрос.Выполнить().Выгрузить(); + КоличествоДанных = КоличествоДанных + Выгрузка.Количество(); + + Для каждого СтрокаТЧ Из Выгрузка Цикл + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(СтрокаТЧ.Ссылка); + КонецЦикла; + + КонецЕсли; + КонецЦикла; + + Если КоличествоДанных < 1000 Тогда + + // Заполнение РегистрСведений.НаборыЗначенийДоступа. + Для каждого Тип Из Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.Типы() Цикл + + Если Тип = Тип("ПланВидовХарактеристикОбъект.ВидыДоступа") Тогда + Продолжить; + КонецЕсли; + + ЗаполнитьТабличнуюЧасть = Метаданные.НайтиПоТипу(Тип).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") <> Неопределено; + + Если КоличествоДанных < 1000 И Тип <> Тип("Строка") Тогда + + Запрос = Новый Запрос(СтрЗаменить( + "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 + | Таблица.Ссылка + |ИЗ + | ПодставляемаяТаблица КАК Таблица + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаборыЗначенийДоступа КАК РегистрСведенийНаборыЗначенийДоступа + | ПО Таблица.Ссылка = РегистрСведенийНаборыЗначенийДоступа.Объект + |ГДЕ + | РегистрСведенийНаборыЗначенийДоступа.Объект ЕСТЬ NULL ", "ПодставляемаяТаблица", Метаданные.НайтиПоТипу(Тип).ПолноеИмя())); + Выгрузка = Запрос.Выполнить().Выгрузить(); + КоличествоДанных = КоличествоДанных + Выгрузка.Количество(); + + Для каждого СтрокаТЧ Из Выгрузка Цикл + Если ЗаполнитьТабличнуюЧасть Тогда + // Запись наборов табличной части и наборов регистра (без зависимых наборов). + Объект = СтрокаТЧ.Ссылка.ПолучитьОбъект(); + Объект.ОбменДанными.Загрузка = Истина; + Объект.ДополнительныеСвойства.Вставить("ЗаписатьНаборыЗначенийДоступа"); + Объект.Записать(); + Иначе + // Запись только наборов регистра (без зависимых наборов). + ЗаписатьНаборыЗначенийДоступа(СтрокаТЧ.Ссылка); + КонецЕсли; + КонецЦикла; + + КонецЕсли; + КонецЦикла; + КонецЕсли; + + КонецЕсли; + + Если КоличествоДанных < 1000 Тогда + // Обновление вторичных данных в наборах значений доступа: свойств видов доступа , и других. + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | СвойстваВидовДоступа.ВидДоступа, + | СвойстваВидовДоступа.ВидДоступаБезГруппЗначенияДоступа, + | СвойстваВидовДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа, + | СвойстваВидовДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа + |ПОМЕСТИТЬ ТаблицаСвойств + |ИЗ + | &СвойстваВидовДоступа КАК СвойстваВидовДоступа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000 + | НаборыЗначенийДоступа.Объект, + | НаборыЗначенийДоступа.НомерНабора, + | НаборыЗначенийДоступа.ВидДоступа, + | НаборыЗначенийДоступа.ЗначениеДоступа, + | НаборыЗначенийДоступа.Чтение, + | НаборыЗначенийДоступа.Добавление, + | НаборыЗначенийДоступа.Изменение, + | НаборыЗначенийДоступа.Удаление, + | ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаБезГруппЗначенияДоступа, ЛОЖЬ) КАК ВидДоступаБезГруппЗначенияДоступа, + | ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа, ЛОЖЬ) КАК ВидДоступаЕдинственныйДляТипаЗначенияДоступа, + | ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа, ЛОЖЬ) КАК ВидДоступаЧерезПраваПоЗначениямДоступа, + | ВЫБОР + | КОГДА НаборыЗначенийДоступа.Чтение + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ КАК ВидДоступаПравоЧтения, + | ВЫБОР + | КОГДА НаборыЗначенийДоступа.Добавление + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ КАК ВидДоступаПравоДобавления, + | ВЫБОР + | КОГДА НаборыЗначенийДоступа.Изменение + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ КАК ВидДоступаПравоИзменения, + | НаборыЗначенийДоступа.ТипОбъекта, + | ЕСТЬNULL(ТипыСсылок.ТипТаблицы, НЕОПРЕДЕЛЕНО) КАК ТипЗначенияДоступа + |ИЗ + | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицаСвойств КАК СвойстваВидовДоступа + | ПО НаборыЗначенийДоступа.ВидДоступа = СвойстваВидовДоступа.ВидДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК ТипыСсылок + | ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТипыСсылок.ТипТаблицы)) + | И (НаборыЗначенийДоступа.ВидДоступа В (ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления), ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения))) + |ГДЕ + | (НЕ(НаборыЗначенийДоступа.ВидДоступаБезГруппЗначенияДоступа = ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаБезГруппЗначенияДоступа, ЛОЖЬ) + | И НаборыЗначенийДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа = ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа, ЛОЖЬ) + | И НаборыЗначенийДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа = ЕСТЬNULL(СвойстваВидовДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа, ЛОЖЬ) + | И НаборыЗначенийДоступа.ТипЗначенияДоступа = ЕСТЬNULL(ТипыСсылок.ТипТаблицы, НЕОПРЕДЕЛЕНО) + | И НаборыЗначенийДоступа.ВидДоступаПравоЧтения = ВЫБОР + | КОГДА НаборыЗначенийДоступа.Чтение + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоЧтения) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ + | И НаборыЗначенийДоступа.ВидДоступаПравоДобавления = ВЫБОР + | КОГДА НаборыЗначенийДоступа.Добавление + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ + | И НаборыЗначенийДоступа.ВидДоступаПравоИзменения = ВЫБОР + | КОГДА НаборыЗначенийДоступа.Изменение + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ))"); + Запрос.УстановитьПараметр("СвойстваВидовДоступа", СвойстваВидаДоступа()); + Выгрузка = Запрос.Выполнить().Выгрузить(); + КоличествоДанных = КоличествоДанных + Выгрузка.Количество(); + + Для каждого СтрокаТЧ Из Выгрузка Цикл + МенеджерЗаписи = РегистрыСведений.НаборыЗначенийДоступа.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, + СтрокаТЧ, + "Объект, + |НомерНабора, + |ВидДоступа, + |ЗначениеДоступа, + |Чтение, + |Добавление, + |Изменение, + |Удаление, + |ВидДоступаБезГруппЗначенияДоступа, + |ВидДоступаЕдинственныйДляТипаЗначенияДоступа, + |ВидДоступаЧерезПраваПоЗначениямДоступа, + |ВидДоступаПравоЧтения, + |ВидДоступаПравоДобавления, + |ВидДоступаПравоИзменения, + |ТипОбъекта, + |ТипЗначенияДоступа"); + МенеджерЗаписи.Записать(); + КонецЦикла; + КонецЕсли; + + Если КоличествоДанных < 1000 Тогда + // Обновление вторичных данных в наборах значений доступа: ТипОбъекта + + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1000 + | ТипыОбъектов.Объект + |ИЗ + | (ВЫБРАТЬ + | НаборыЗначенийДоступа.Объект КАК Объект, + | ВЫБОР + | КОГДА НаборыЗначенийДоступа.ТипОбъекта <> НЕОПРЕДЕЛЕНО + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК ТипЗадан, + | ВЫБОР + | КОГДА НаборыЗначенийДоступа.ТипОбъекта <> НЕОПРЕДЕЛЕНО + | И НаборыЗначенийДоступа.ТипОбъекта <> ТипыСсылок.ТипТаблицы + | ТОГДА 1 + | ИНАЧЕ 0 + | КОНЕЦ КАК НеверныйТип + | ИЗ + | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК ТипыСсылок + | ПО (ТИПЗНАЧЕНИЯ(НаборыЗначенийДоступа.Объект) = ТИПЗНАЧЕНИЯ(ТипыСсылок.ТипТаблицы))) КАК ТипыОбъектов + | + |СГРУППИРОВАТЬ ПО + | ТипыОбъектов.Объект + | + |ИМЕЮЩИЕ + | (СУММА(ТипыОбъектов.ТипЗадан) <> 1 + | ИЛИ СУММА(ТипыОбъектов.НеверныйТип) <> 0)"); + Выгрузка = Запрос.Выполнить().Выгрузить(); + КоличествоДанных = КоличествоДанных + Выгрузка.Количество(); + + НаборЗаписей = РегистрыСведений.НаборыЗначенийДоступа.СоздатьНаборЗаписей(); + Для каждого СтрокаТЧ Из Выгрузка Цикл + + НаборЗаписей.Отбор.Объект.Установить(СтрокаТЧ.Объект); + НаборЗаписей.Прочитать(); + ПерваяЗапись = Истина; + + Для каждого Запись Из НаборЗаписей Цикл + + Если ПерваяЗапись Тогда + ТипыОбъекта = Новый Массив; + ТипыОбъекта.Добавить(ТипЗнч(Запись.Объект)); + ОписаниеТипаОбъекта = Новый ОписаниеТипов(ТипыОбъекта); + + Запись.ТипОбъекта = ОписаниеТипаОбъекта.ПривестиЗначение(Неопределено); + ПерваяЗапись = Ложь; + Иначе + Запись.ТипОбъекта = Неопределено; + КонецЕсли; + КонецЦикла; + НаборЗаписей.Записать(); + КонецЦикла; + КонецЕсли; + + Если КоличествоДанных < 1000 Тогда + ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), + УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Завершено заполнение данных для ограничения доступа'"), + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СтандартныеПодсистемыПереопределяемый.УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Ложь); + Иначе + Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); + Задание.Использование = Ложь; + Задание.Записать(); + КонецЕсли; + Иначе + ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), + УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Выполнена запись порции данных для ограничения доступа'"), + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СтандартныеПодсистемыПереопределяемый.УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Истина); + Иначе + Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); + Задание.Использование = Истина; + Задание.Записать(); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с видами доступа + +// Возвращает свойства вида доступа, используя функцию +// УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(). +// +// Параметры: +// ВидДоступа - ПланВидовХарактеристикСсылка.ВидыДоступа, Неопределено. +// +// Возвращаемое значение: +// Неопределено - когда для вида доступа свойств не найдено, +// ТаблицаЗначений или СтрокаТаблицыЗначений с полями: +// описание которых см. в комментарии к функции +// УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа(). +// +Функция СвойстваВидаДоступа(Знач ВидДоступа = Неопределено) Экспорт + + СвойстваВидовДоступа = УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа().Скопировать(); + + Если ВидДоступа = Неопределено Тогда + + Возврат СвойстваВидовДоступа; + Иначе + Возврат СвойстваВидовДоступа.Найти(ВидДоступа, "ВидДоступа"); + КонецЕсли; + +КонецФункции + +// Возвращает массив видов доступа для таблицы с указанным именем. +// +// Параметры: +// Таблица - Строка, как в фукнции ПолноеИмя() объекта метаданных. +// +// Возвращаемое значение: +// Массив - элементы типа ПланВидовХарактеристикСсылка.ВидыДоступа. +// +Функция ВидыДоступаТаблицы(Знач Таблица) Экспорт + + ВидыДоступа = Новый Массив; + + Для каждого СвойстваВидаДоступа Из УправлениеДоступомСлужебныйПовтИсп.СвойстваВидовДоступа() Цикл + + Если СвойстваВидаДоступа.Таблицы.Найти(Таблица) <> Неопределено Тогда + + ВидыДоступа.Добавить(СвойстваВидаДоступа.ВидДоступа); + КонецЕсли; + КонецЦикла; + + Возврат ВидыДоступа; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с профилями групп доступа + +// Проверяет изменен ли поставляемый профиль по сравнению с описанием из функции +// УправлениеДоступомСлужебныйПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа() +// +// Параметры: +// Профиль - СправочникСсылка.ПрофилиГруппДоступа +// (возвращается реквизит ПоставляемыйПрофильИзменен), +// - СправочникОбъект.ПрофилиГруппДоступа +// (возвращается результат сравнения заполнения объекта +// с описанием в переопределяемом общем модуле). +// +// Возвращаемое значение: +// Булево. +// +Функция ПоставляемыйПрофильИзменен(Профиль) Экспорт + + Если ТипЗнч(Профиль) = Тип("СправочникСсылка.ПрофилиГруппДоступа") Тогда + Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита(Профиль, "ПоставляемыйПрофильИзменен"); + КонецЕсли; + + ОписанияПрофилей = УправлениеДоступомСлужебныйПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + + ОписаниеНайдено = Ложь; + Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.Ссылка.УникальныйИдентификатор()) Тогда + ОписаниеНайдено = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Если ОписаниеНайдено Тогда + + Если ВРег(Профиль.Наименование) <> ВРег(ОписаниеПрофиля.Наименование) Тогда + Возврат Истина; + КонецЕсли; + + Если Профиль.Роли.Количество() <> ОписаниеПрофиля.Роли.Количество() + ИЛИ Профиль.ВидыДоступа.Количество() <> ОписаниеПрофиля.ВидыДоступа.Количество() + ИЛИ Профиль.ЗначенияДоступа.Количество() <> ОписаниеПрофиля.ЗначенияДоступа.Количество() Тогда + Возврат Истина; + КонецЕсли; + + Для каждого СтрокаРоли Из ОписаниеПрофиля.Роли Цикл + Если Профиль.Роли.Найти(СтрокаРоли) = Неопределено Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Для каждого ОписаниеВидаДоступа Из ОписаниеПрофиля.ВидыДоступа Цикл + Отбор = Новый Структура; + Отбор.Вставить("ВидДоступа", ПланыВидовХарактеристик.ВидыДоступа[ОписаниеВидаДоступа.Значение]); + Отбор.Вставить("Предустановленный", ОписаниеВидаДоступа.Представление = "Предустановленный"); + Отбор.Вставить("ДоступРазрешен", ОписаниеВидаДоступа.Представление = "ВначалеВсеРазрешены"); + Если Профиль.ВидыДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + Для каждого ОписаниеЗначенияДоступа Из ОписаниеПрофиля.ЗначенияДоступа Цикл + Отбор = Новый Структура; + Отбор.Вставить("ВидДоступа", ПланыВидовХарактеристик.ВидыДоступа[ОписаниеЗначенияДоступа.Значение]); + Запрос = Новый Запрос(СтрЗаменить("Выбрать Значение(%1) КАК Значение", "%1", ОписаниеЗначенияДоступа.Представление)); + Отбор.Вставить("ЗначениеДоступа", Запрос.Выполнить().Выгрузить()[0].Значение); + Если Профиль.ЗначенияДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда + Возврат Истина; + КонецЕсли; + КонецЦикла; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +// Замещает имеющийся или создает новый профиль групп доступа по его начальному описанию. +// +// Параметры: +// ОписаниеПрофиля - Структура (см. функцию НовоеОписаниеПрофиляГруппДоступа()). +// +// Возвращаемое значение: +// Булево. Истина - профиль изменен. +// +Функция ОбновитьПрофильГруппДоступа(ОписаниеПрофиля, НеОбновлятьРолиПользователей = Ложь) Экспорт + + ПрофильИзменен = Ложь; + + УникальныйИдентификаторПрофиля = Новый УникальныйИдентификатор(ОписаниеПрофиля.Идентификатор); + ПрофильСсылка = Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля); + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | Справочник.ПрофилиГруппДоступа КАК ПрофилиГруппДоступа + |ГДЕ + | ПрофилиГруппДоступа.Ссылка = &Ссылка"); + Запрос.УстановитьПараметр("Ссылка", ПрофильСсылка); + Если Запрос.Выполнить().Пустой() Тогда + // Элемента данных нет, нужно создать новый. + ПрофильОбъект = Справочники.ПрофилиГруппДоступа.СоздатьЭлемент(); + ПрофильОбъект.УстановитьСсылкуНового(Справочники.ПрофилиГруппДоступа.ПолучитьСсылку(УникальныйИдентификаторПрофиля)); + ПрофильИзменен = Истина; + Иначе + ПрофильОбъект = ПрофильСсылка.ПолучитьОбъект(); + ПрофильИзменен = ПоставляемыйПрофильИзменен(ПрофильОбъект); + КонецЕсли; + + + Если ПрофильИзменен Тогда + ЗаблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка, ПрофильОбъект.ВерсияДанных); + + ПрофильОбъект.Наименование = ОписаниеПрофиля.Наименование; + + ПрофильОбъект.Роли.Очистить(); + Для каждого Роль Из ОписаниеПрофиля.Роли Цикл + Строка = ПрофильОбъект.Роли.Добавить(); + Строка.Роль = Роль; + КонецЦикла; + + ПрофильОбъект.ВидыДоступа.Очистить(); + Для каждого ОписаниеВидаДоступа Из ОписаниеПрофиля.ВидыДоступа Цикл + Строка = ПрофильОбъект.ВидыДоступа.Добавить(); + Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа[ОписаниеВидаДоступа.Значение]; + Строка.Предустановленный = ОписаниеВидаДоступа.Представление = "Предустановленный"; + Строка.ДоступРазрешен = ОписаниеВидаДоступа.Представление = "ВначалеВсеРазрешены"; + КонецЦикла; + + ПрофильОбъект.ЗначенияДоступа.Очистить(); + Для каждого ОписаниеЗначенияДоступа Из ОписаниеПрофиля.ЗначенияДоступа Цикл + СтрокаЗначения = ПрофильОбъект.ЗначенияДоступа.Добавить(); + СтрокаЗначения.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа[ОписаниеЗначенияДоступа.Значение]; + Запрос = Новый Запрос(СтрЗаменить("Выбрать Значение(%1) КАК Значение", "%1", ОписаниеЗначенияДоступа.Представление)); + СтрокаЗначения.ЗначениеДоступа = Запрос.Выполнить().Выгрузить()[0].Значение; + КонецЦикла; + + Если НеОбновлятьРолиПользователей Тогда + ПрофильОбъект.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); + КонецЕсли; + ПрофильОбъект.Записать(); + РазблокироватьДанныеДляРедактирования(ПрофильОбъект.Ссылка); + КонецЕсли; + + Возврат ПрофильИзменен; + +КонецФункции + +// Проверяет изменен ли поставляемый профиль по сравнению с описанием из функции +// УправлениеДоступомСлужебныйПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(). +// +// Параметры: +// Профиль - СправочникСсылка.ПрофилиГруппДоступа. +// +// Возвращаемое значение: +// Строка. +// +Функция ОписаниеПоставляемогоПрофиля(Профиль) Экспорт + + ОписанияПрофилей = УправлениеДоступомСлужебныйПовтИсп + .ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + + Текст = ""; + Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда + Текст = ОписаниеПрофиля.Описание; + КонецЕсли; + КонецЦикла; + + Возврат Текст; + +КонецФункции + +// Определяет наличие начального заполнения для профиля групп доступа в переопределяемом модуле. +// +// Параметры: +// Профиль - СправочникСсылка.ПрофилиГруппДоступа. +// +// Возвращаемое значение: +// Булево. +// +Функция ЕстьНачальноеЗаполнениеПрофиляГруппДоступа(Знач Профиль) Экспорт + + ОписанияПрофилей = УправлениеДоступомСлужебныйПовтИсп + .ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + + ОписаниеНайдено = Ложь; + Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда + ОписаниеНайдено = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + Возврат ОписаниеНайдено; + +КонецФункции + +// Создает элементы в справочнике ПрофилиГруппДоступа, свойственные прикладному решению, +// и позволяет восстановить ранее заполненный элемент по его уникальному идентификатору, +// если для него предусмотрено начальное заполнение. +// Поиск начального заполнения осуществляется по строке уникального идентификатора профиля. +// +// Параметры: +// Профиль - Неопределено, СправочникСсылка.ПрофилиГруппДоступа. +// Если для указанного профиля описание начального заполнения найдено, +// содержимое профиля полностью замещается. +// +// ОбновитьГруппыДоступа - Булево, если Истина, виды доступа групп доступа профиля будут обновлены. +// +// НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа - Булево, если Истина, группы доступа не будут +// обновлены, если в них есть хотя бы один удаляемый вид доступа, +// по которому заданы значения доступа. +// +Процедура НачальноеЗаполнениеПрофилейГруппДоступа(Знач Профиль = Неопределено, ОбновитьГруппыДоступа = Ложь, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа = Истина) Экспорт + + ОписанияПрофилей = УправлениеДоступомСлужебныйПовтИсп + .ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); + + Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл + Если Профиль = Неопределено ИЛИ ОписаниеПрофиля.Идентификатор = Строка(Профиль.УникальныйИдентификатор()) Тогда + ОбновитьПрофильГруппДоступа(ОписаниеПрофиля); + Если ОбновитьГруппыДоступа Тогда + ОбновитьГруппыДоступаПрофиля(Профиль, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Обновляет табличную часть ТаблицыРолей каждого профиля групп доступа. +Процедура ОбновитьТаблицыРолейПрофилейГруппДоступа() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + + Запрос.УстановитьПараметр("ПраваОМДРолей", + УправлениеДоступомСлужебныйПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей()); + + Запрос.УстановитьПараметр("ТипыСсылок", + УправлениеДоступомСлужебныйПовтИсп.ТипыСсылок()); + + Запрос.Текст = + "ВЫБРАТЬ + | ПраваОМДРолей.Роль, + | ПраваОМДРолей.Таблица, + | ПраваОМДРолей.Добавление, + | ПраваОМДРолей.Изменение, + | ПраваОМДРолей.Удаление, + | ПраваОМДРолей.ТипТаблицы + |ПОМЕСТИТЬ ПраваОМДРолей + |ИЗ + | &ПраваОМДРолей КАК ПраваОМДРолей + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ТипыСсылок.Таблица, + | ТипыСсылок.ТипТаблицы + |ПОМЕСТИТЬ НовыеТипыСсылок + |ИЗ + | &ТипыСсылок КАК ТипыСсылок + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) КАК Профиль + |ИЗ + | Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК СтарыеТипыСсылок + | ЛЕВОЕ СОЕДИНЕНИЕ НовыеТипыСсылок КАК НовыеТипыСсылок + | ПО (НовыеТипыСсылок.Таблица = СтарыеТипыСсылок.Таблица) + | И (НовыеТипыСсылок.ТипТаблицы = СтарыеТипыСсылок.ТипТаблицы) + |ГДЕ + | СтарыеТипыСсылок.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | И НовыеТипыСсылок.Таблица ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + |ИЗ + | НовыеТипыСсылок КАК НовыеТипыСсылок + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК СтарыеТипыСсылок + | ПО (СтарыеТипыСсылок.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)) + | И НовыеТипыСсылок.Таблица = СтарыеТипыСсылок.Таблица + | И НовыеТипыСсылок.ТипТаблицы = СтарыеТипыСсылок.ТипТаблицы + |ГДЕ + | СтарыеТипыСсылок.Таблица ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ТипыСсылок.Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа.ТипыСсылок КАК ТипыСсылок + |ГДЕ + | ТипыСсылок.Ссылка <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + |ИЗ + | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК ТаблицыРолей + |ГДЕ + | ТаблицыРолей.Ссылка = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | СтарыеТаблицы.Ссылка + |ИЗ + | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК СтарыеТаблицы + | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | РолиПрофиля.Ссылка КАК Профиль, + | ПраваОМДРолей.Роль КАК Роль, + | ПраваОМДРолей.Таблица КАК Таблица, + | ПраваОМДРолей.Добавление КАК Добавление, + | ПраваОМДРолей.Изменение КАК Изменение, + | ПраваОМДРолей.Удаление КАК Удаление, + | ПраваОМДРолей.ТипТаблицы КАК ТипТаблицы + | ИЗ + | ПраваОМДРолей КАК ПраваОМДРолей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофиля + | ПО ПраваОМДРолей.Роль = РолиПрофиля.Роль) КАК НовыеТаблицы + | ПО (НовыеТаблицы.Профиль = СтарыеТаблицы.Ссылка) + | И (НовыеТаблицы.Роль = СтарыеТаблицы.Роль) + | И (НовыеТаблицы.Таблица = СтарыеТаблицы.Таблица) + | И (НовыеТаблицы.Добавление = СтарыеТаблицы.Добавление) + | И (НовыеТаблицы.Изменение = СтарыеТаблицы.Изменение) + | И (НовыеТаблицы.Удаление = СтарыеТаблицы.Удаление) + | И (НовыеТаблицы.ТипТаблицы = СтарыеТаблицы.ТипТаблицы) + |ГДЕ + | НовыеТаблицы.Роль ЕСТЬ NULL + | И СтарыеТаблицы.Ссылка <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | НовыеТаблицы.Профиль + |ИЗ + | (ВЫБРАТЬ + | РолиПрофиля.Ссылка КАК Профиль, + | ПраваОМДРолей.Роль КАК Роль, + | ПраваОМДРолей.Таблица КАК Таблица, + | ПраваОМДРолей.Добавление КАК Добавление, + | ПраваОМДРолей.Изменение КАК Изменение, + | ПраваОМДРолей.Удаление КАК Удаление, + | ПраваОМДРолей.ТипТаблицы КАК ТипТаблицы + | ИЗ + | ПраваОМДРолей КАК ПраваОМДРолей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.Роли КАК РолиПрофиля + | ПО ПраваОМДРолей.Роль = РолиПрофиля.Роль) КАК НовыеТаблицы + | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК СтарыеТаблицы + | ПО НовыеТаблицы.Профиль = СтарыеТаблицы.Ссылка + | И НовыеТаблицы.Роль = СтарыеТаблицы.Роль + | И НовыеТаблицы.Таблица = СтарыеТаблицы.Таблица + | И НовыеТаблицы.Добавление = СтарыеТаблицы.Добавление + | И НовыеТаблицы.Изменение = СтарыеТаблицы.Изменение + | И НовыеТаблицы.Удаление = СтарыеТаблицы.Удаление + | И НовыеТаблицы.ТипТаблицы = СтарыеТаблицы.ТипТаблицы + |ГДЕ + | СтарыеТаблицы.Роль ЕСТЬ NULL + | И НовыеТаблицы.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор)"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + Объект = Выборка.Профиль.ПолучитьОбъект(); + ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка, Объект.ВерсияДанных); + Объект.ДополнительныеСвойства.Вставить("НеОбновлятьРеквизитПоставляемыйПрофильИзменен"); + Объект.Записать(); + РазблокироватьДанныеДляРедактирования(Объект.Ссылка); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с группами доступа + +// Выполняет обновление видов доступа групп доступа указанного профиля. +// При этом возможно не удалять виды доступа из группы доступа, +// которые удалены в профиле этой группы доступа, в случае +// когда в группе доступа назначены значения доступа по +// удаляемому виду доступа. +// +// Параметры: +// Профиль - СправочникСсылка.ПрофилиГруппДоступа +// НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа - Булево +// +// Возвращаемое значение: +// Булево - когда Истина, группа доступа была изменена, +// когда Ложь никаких изменений не было выполнено. +// +Функция ОбновитьГруппыДоступаПрофиля(Профиль, НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа) Экспорт + + ГруппаДоступаОбновлена = Ложь; + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | (ГруппыДоступа.Профиль = &Профиль + | ИЛИ &Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) + | И ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы))"); + + Запрос.УстановитьПараметр("Профиль", Профиль.Ссылка); + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + // Проверка необходимости/возможности обновления группы доступа. + ГруппаДоступа = Выборка.Ссылка.ПолучитьОбъект(); + + Если ГруппаДоступа.Ссылка = Справочники.ГруппыДоступа.Администраторы + И ГруппаДоступа.Профиль <> Справочники.ПрофилиГруппДоступа.Администратор Тогда + // Установка профиля Администратор, если не задан. + ГруппаДоступа.Профиль = Справочники.ПрофилиГруппДоступа.Администратор; + КонецЕсли; + + // Проверка состава видов доступа. + СоставВидовДоступаИзменен = Ложь; + ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Ложь; + Если ГруппаДоступа.ВидыДоступа.Количество() <> Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("Предустановленный", Ложь)).Количество() Тогда + СоставВидовДоступаИзменен = Истина; + Иначе + Для каждого СтрокаВидаДоступа Из ГруппаДоступа.ВидыДоступа Цикл + Если Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", СтрокаВидаДоступа.ВидДоступа, Ложь)).Количество() = 0 Тогда + СоставВидовДоступаИзменен = Истина; + Если ГруппаДоступа.ЗначенияДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") <> Неопределено Тогда + ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если СоставВидовДоступаИзменен + И ( НЕ НеУдалятьВидыДоступаКогдаЗаданыЗначенияДоступа + ИЛИ НЕ ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа ) Тогда + // Обновление группы доступа. + // 1. Удаление лишних видов доступа и значений доступа (если есть). + ТекущийНомерСтроки = ГруппаДоступа.ВидыДоступа.Количество()-1; + Пока ТекущийНомерСтроки >= 0 Цикл + ТекущийВидДоступа = ГруппаДоступа.ВидыДоступа[ТекущийНомерСтроки].ВидДоступа; + Если Профиль.ВидыДоступа.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", ТекущийВидДоступа, Ложь)).Количество() = 0 Тогда + СтрокиЗначенийВидаДоступа = ГруппаДоступа.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа)); + Для каждого СтрокаЗначения Из СтрокиЗначенийВидаДоступа Цикл + ГруппаДоступа.ЗначенияДоступа.Удалить(СтрокаЗначения); + КонецЦикла; + ГруппаДоступа.ВидыДоступа.Удалить(ТекущийНомерСтроки); + КонецЕсли; + ТекущийНомерСтроки = ТекущийНомерСтроки - 1; + КонецЦикла; + // 2. Добавление новых видов доступа (если есть). + Для каждого СтрокаВидаДоступа Из Профиль.ВидыДоступа Цикл + Если НЕ СтрокаВидаДоступа.Предустановленный + И ГруппаДоступа.ВидыДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") = Неопределено Тогда + + НоваяСтрока = ГруппаДоступа.ВидыДоступа.Добавить(); + НоваяСтрока.ВидДоступа = СтрокаВидаДоступа.ВидДоступа; + НоваяСтрока.ДоступРазрешен = СтрокаВидаДоступа.ДоступРазрешен; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Если ГруппаДоступа.Модифицированность() Тогда + ЗаблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка, ГруппаДоступа.ВерсияДанных); + ГруппаДоступа.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); + ГруппаДоступа.Записать(); + ГруппаДоступаОбновлена = Истина; + РазблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка); + КонецЕсли; + КонецЦикла; + + Возврат ГруппаДоступаОбновлена; + +КонецФункции + +// Возвращает ссылку на группу-родителя персональных групп доступа. +// Если родитель не найден он будет создан. +// +// Параметры: +// НеСоздавать - Булево, если задан Истина, родитель не будет автоматически создан, +// а функция вернет Неопределено, если родитель не найден +// +// Возвращаемое значение: +// СправочникСсылка.ГруппыДоступа +// +Функция РодительПерсональныхГруппДоступа(Знач НеСоздавать = Ложь, НаименованиеГруппыЭлементов = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НаименованиеГруппыЭлементов = НСтр("ru = 'Персональные группы доступа'"); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("НаименованиеГруппыЭлементов", НаименованиеГруппыЭлементов); + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Наименование ПОДОБНО &НаименованиеГруппыЭлементов + | И ГруппыДоступа.ЭтоГруппа"; + Выборка = Запрос.Выполнить().Выбрать(); + Если Выборка.Следующий() Тогда + ГруппаЭлементов = Выборка.Ссылка; + ИначеЕсли НеСоздавать Тогда + ГруппаЭлементов = Неопределено; + Иначе + ГруппаЭлементовОбъект = Справочники.ГруппыДоступа.СоздатьГруппу(); + ГруппаЭлементовОбъект.Наименование = НаименованиеГруппыЭлементов; + ГруппаЭлементовОбъект.Записать(); + ГруппаЭлементов = ГруппаЭлементовОбъект.Ссылка; + КонецЕсли; + + Возврат ГруппаЭлементов; + +КонецФункции + +// Ообновляет состав РегистрСведений.ТаблицыГруппДоступа для одной или +// всех групп доступа пользователей, в которых есть пользователи. +// Процедура использует таблицу Справочник.ПрофилиГруппДоступ.ТаблицыРолей. +// +// Параметры: +// ГруппаДоступа - СправочникСсылка.ГруппыДоступа. +// +Процедура ОбновитьТаблицыГруппДоступа(Знач ГруппаДоступа) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ТаблицыРолей.Таблица КАК Таблица, + | МАКСИМУМ(ТаблицыРолей.Добавление) КАК Добавление, + | МАКСИМУМ(ТаблицыРолей.Изменение) КАК Изменение, + | МАКСИМУМ(ТаблицыРолей.Удаление) КАК Удаление, + | МАКСИМУМ(ТаблицыРолей.ТипТаблицы) КАК ТипТаблицы + |ПОМЕСТИТЬ ТаблицыПрофиля + |ИЗ + | Справочник.ПрофилиГруппДоступа.ТаблицыРолей КАК ТаблицыРолей + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа + | ПО (ГруппыДоступа.Профиль = ТаблицыРолей.Ссылка) + | И (ГруппыДоступа.Ссылка = &ГруппаДоступа) + | И (НЕ ГруппыДоступа.ПометкаУдаления) + | И (НЕ ТаблицыРолей.Ссылка.ПометкаУдаления) + | + |СГРУППИРОВАТЬ ПО + | ТаблицыРолей.Таблица + | + |ИНДЕКСИРОВАТЬ ПО + | Таблица + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ТаблицыПрофиля.Таблица, + | ПользователиГрупп.Пользователь, + | ТаблицыПрофиля.Добавление КАК Добавление, + | ТаблицыПрофиля.Изменение КАК Изменение, + | ТаблицыПрофиля.Удаление КАК Удаление, + | ТаблицыПрофиля.ТипТаблицы КАК ТипТаблицы, + | ВЫБОР + | КОГДА ТаблицыПрофиля.Добавление + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоДобавления) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ КАК ВидДоступаПравоДобавления, + | ВЫБОР + | КОГДА ТаблицыПрофиля.Изменение + | ТОГДА ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПравоИзменения) + | ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка) + | КОНЕЦ КАК ВидДоступаПравоИзменения + |ПОМЕСТИТЬ ТаблицыПользователейГруппы + |ИЗ + | ТаблицыПрофиля КАК ТаблицыПрофиля + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ПользователиГрупп + | ПО (ПользователиГрупп.Ссылка = &ГруппаДоступа) + | И (НЕ ПользователиГрупп.Ссылка.ПометкаУдаления) + | И (НЕ ПользователиГрупп.Пользователь В (НЕОПРЕДЕЛЕНО, ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка), ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка))) + | + |ИНДЕКСИРОВАТЬ ПО + | ТаблицыПрофиля.Таблица, + | ПользователиГрупп.Пользователь + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | КОЛИЧЕСТВО(*) КАК Количество + |ИЗ + | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы + | ПО (ТаблицыПользователейГруппы.Таблица = ТаблицыГруппДоступа.Таблица) + | И (ТаблицыПользователейГруппы.Пользователь = ТаблицыГруппДоступа.Пользователь) + | И (ТаблицыПользователейГруппы.Добавление = ТаблицыГруппДоступа.Добавление) + | И (ТаблицыПользователейГруппы.Изменение = ТаблицыГруппДоступа.Изменение) + | И (ТаблицыПользователейГруппы.Удаление = ТаблицыГруппДоступа.Удаление) + | И (ТаблицыПользователейГруппы.ТипТаблицы = ТаблицыГруппДоступа.ТипТаблицы) + | И (ТаблицыПользователейГруппы.ВидДоступаПравоДобавления = ТаблицыГруппДоступа.ВидДоступаПравоДобавления) + | И (ТаблицыПользователейГруппы.ВидДоступаПравоИзменения = ТаблицыГруппДоступа.ВидДоступаПравоИзменения) + |ГДЕ + | ТаблицыГруппДоступа.ГруппаДоступа = &ГруппаДоступа + | И ТаблицыПользователейГруппы.Таблица ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТаблицыГруппДоступа КАК ТаблицыГруппДоступа + | ПО ТаблицыПользователейГруппы.Таблица = ТаблицыГруппДоступа.Таблица + | И ТаблицыПользователейГруппы.Пользователь = ТаблицыГруппДоступа.Пользователь + | И (ТаблицыГруппДоступа.ГруппаДоступа = &ГруппаДоступа) + | И ТаблицыПользователейГруппы.Добавление = ТаблицыГруппДоступа.Добавление + | И ТаблицыПользователейГруппы.Изменение = ТаблицыГруппДоступа.Изменение + | И ТаблицыПользователейГруппы.Удаление = ТаблицыГруппДоступа.Удаление + | И ТаблицыПользователейГруппы.ТипТаблицы = ТаблицыГруппДоступа.ТипТаблицы + | И ТаблицыПользователейГруппы.ВидДоступаПравоДобавления = ТаблицыГруппДоступа.ВидДоступаПравоДобавления + | И ТаблицыПользователейГруппы.ВидДоступаПравоИзменения = ТаблицыГруппДоступа.ВидДоступаПравоИзменения + |ГДЕ + | ТаблицыГруппДоступа.Таблица ЕСТЬ NULL "); + + Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.ТаблицыГруппДоступа"); + ЭлементБлокировки.УстановитьЗначение("ГруппаДоступа", ГруппаДоступа); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; + + НачатьТранзакцию(); + Попытка + Блокировка.Заблокировать(); + РезультатыЗапросы = Запрос.ВыполнитьПакет(); + + Если НЕ РезультатыЗапросы[РезультатыЗапросы.Количество()-1].Пустой() Тогда + + Если РезультатыЗапросы[РезультатыЗапросы.Количество()-2].Выгрузить()[0].Количество < 10000 Тогда + // Запись одним набором записей. + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицыПользователейГруппы.Таблица КАК Таблица, + | ТаблицыПользователейГруппы.Пользователь КАК Пользователь, + | &ГруппаДоступа КАК ГруппаДоступа, + | ТаблицыПользователейГруппы.Добавление, + | ТаблицыПользователейГруппы.Изменение, + | ТаблицыПользователейГруппы.Удаление, + | ТаблицыПользователейГруппы.ТипТаблицы, + | ТаблицыПользователейГруппы.ВидДоступаПравоДобавления, + | ТаблицыПользователейГруппы.ВидДоступаПравоИзменения + |ИЗ + | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы"; + НаборЗаписей = РегистрыСведений.ТаблицыГруппДоступа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); + НаборЗаписей.Загрузить(Запрос.Выполнить().Выгрузить()); + НаборЗаписей.Записать(); + Иначе + // Запись несколькими наборами записей. + // Очистка записей по группе доступа. + НаборЗаписей = РегистрыСведений.ТаблицыГруппДоступа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); + НаборЗаписей.Записать(); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицыПользователейГруппы.Таблица КАК Таблица, + | ТаблицыПользователейГруппы.Пользователь КАК Пользователь, + | ТаблицыПользователейГруппы.Добавление, + | ТаблицыПользователейГруппы.Изменение, + | ТаблицыПользователейГруппы.Удаление, + | ТаблицыПользователейГруппы.ТипТаблицы, + | ТаблицыПользователейГруппы.ВидДоступаПравоДобавления, + | ТаблицыПользователейГруппы.ВидДоступаПравоИзменения + |ИЗ + | ТаблицыПользователейГруппы КАК ТаблицыПользователейГруппы + |ИТОГИ ПО + | Таблица"; + // Добавление записей по группе доступа частями по таблицам. + Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Пока Выборка.Следующий() Цикл + ВыборкаСтрок = Выборка.Выбрать(); + НаборЗаписей = РегистрыСведений.ТаблицыГруппДоступа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); + НаборЗаписей.Отбор.Таблица.Установить(Выборка.Таблица); + Пока ВыборкаСтрок.Следующий() Цикл + НоваяЗапись = НаборЗаписей.Добавить(); + ЗаполнитьЗначенияСвойств(НоваяЗапись, ВыборкаСтрок); + НоваяЗапись.ГруппаДоступа = ГруппаДоступа; + КонецЦикла; + НаборЗаписей.Записать(); + КонецЦикла; + КонецЕсли; + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + +КонецПроцедуры + +// Обновляет записи в РегистрСведений.ЗначенияГруппДоступа для указанной группы доступа. +// +// Параметры: +// ГруппаДоступа - СправочникСсылка.ГруппыДоступа. +// +Процедура ЗаписатьЗначенияГруппДоступа(Знач ГруппаДоступа) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ГруппаДоступа", ГруппаДоступа); + Запрос.УстановитьПараметр("ПрофильГруппыДоступа", ОбщегоНазначения.ПолучитьЗначениеРеквизита(ГруппаДоступа, "Профиль")); + Запрос.Текст = + "ВЫБРАТЬ + | ВидыДоступаПрофиля.ВидДоступа КАК ВидДоступа, + | ИСТИНА КАК ТолькоВидДоступа, + | НЕОПРЕДЕЛЕНО КАК ЗначениеДоступа + |ПОМЕСТИТЬ ЗначенияГруппы + |ИЗ + | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофиля + |ГДЕ + | (НЕ ВидыДоступаПрофиля.ДоступРазрешен) + | И ВидыДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа + | И ВидыДоступаПрофиля.Предустановленный + | И (НЕ ВидыДоступаПрофиля.Ссылка.ПометкаУдаления) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ВидыДоступа.ВидДоступа, + | ИСТИНА, + | НЕОПРЕДЕЛЕНО + |ИЗ + | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПредустановленныеВидыДоступа + | ПО ВидыДоступа.Ссылка.Профиль = ПредустановленныеВидыДоступа.Ссылка + | И ВидыДоступа.ВидДоступа = ПредустановленныеВидыДоступа.ВидДоступа + | И ((НЕ ВидыДоступа.Ссылка.ПометкаУдаления)) + | И ((НЕ ПредустановленныеВидыДоступа.Ссылка.ПометкаУдаления)) + |ГДЕ + | (НЕ ВидыДоступа.ДоступРазрешен) + | И ВидыДоступа.Ссылка = &ГруппаДоступа + | И (НЕ ПредустановленныеВидыДоступа.Предустановленный) + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ЗначенияДоступаПрофиля.ВидДоступа, + | ЛОЖЬ, + | ЗначенияДоступаПрофиля.ЗначениеДоступа + |ИЗ + | Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ВидыДоступаПрофиля + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ЗначенияДоступа КАК ЗначенияДоступаПрофиля + | ПО (ВидыДоступаПрофиля.Предустановленный) + | И ((НЕ ВидыДоступаПрофиля.Ссылка.ПометкаУдаления)) + | И (ВидыДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа) + | И (ЗначенияДоступаПрофиля.Ссылка = &ПрофильГруппыДоступа) + | И ВидыДоступаПрофиля.ВидДоступа = ЗначенияДоступаПрофиля.ВидДоступа + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ + | ЗначенияДоступа.ВидДоступа, + | ЛОЖЬ, + | ЗначенияДоступа.ЗначениеДоступа + |ИЗ + | Справочник.ГруппыДоступа.ВидыДоступа КАК ВидыДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа.ВидыДоступа КАК ПредустановленныеВидыДоступа + | ПО ВидыДоступа.Ссылка.Профиль = ПредустановленныеВидыДоступа.Ссылка + | И ВидыДоступа.ВидДоступа = ПредустановленныеВидыДоступа.ВидДоступа + | И ((НЕ ПредустановленныеВидыДоступа.Ссылка.ПометкаУдаления)) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ЗначенияДоступа КАК ЗначенияДоступа + | ПО (ВидыДоступа.Ссылка = &ГруппаДоступа) + | И (ЗначенияДоступа.Ссылка = &ГруппаДоступа) + | И ВидыДоступа.ВидДоступа = ЗначенияДоступа.ВидДоступа + | И ((НЕ ПредустановленныеВидыДоступа.Предустановленный)) + | И ((НЕ ЗначенияДоступа.Ссылка.ПометкаУдаления)) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияГруппы КАК ЗначенияГруппы + | ПО (ЗначенияГруппы.ВидДоступа = ЗначенияГруппДоступа.ВидДоступа) + | И (ЗначенияГруппы.ТолькоВидДоступа = ЗначенияГруппДоступа.ТолькоВидДоступа) + | И (ЗначенияГруппы.ЗначениеДоступа = ЗначенияГруппДоступа.ЗначениеДоступа) + |ГДЕ + | ЗначенияГруппДоступа.ГруппаДоступа = &ГруппаДоступа + | И ЗначенияГруппы.ВидДоступа ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | ЗначенияГруппы КАК ЗначенияГруппы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияГруппДоступа КАК ЗначенияГруппДоступа + | ПО (ЗначенияГруппДоступа.ГруппаДоступа = &ГруппаДоступа) + | И ЗначенияГруппы.ВидДоступа = ЗначенияГруппДоступа.ВидДоступа + | И ЗначенияГруппы.ТолькоВидДоступа = ЗначенияГруппДоступа.ТолькоВидДоступа + | И ЗначенияГруппы.ЗначениеДоступа = ЗначенияГруппДоступа.ЗначениеДоступа + |ГДЕ + | ЗначенияГруппДоступа.ВидДоступа ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | &ГруппаДоступа КАК ГруппаДоступа, + | ЗначенияГруппы.ВидДоступа, + | ЗначенияГруппы.ТолькоВидДоступа, + | ЗначенияГруппы.ЗначениеДоступа + |ИЗ + | ЗначенияГруппы КАК ЗначенияГруппы"; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Если НЕ РезультатыЗапроса[1].Пустой() Тогда + + НаборЗаписей = РегистрыСведений.ЗначенияГруппДоступа.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.ГруппаДоступа.Установить(ГруппаДоступа); + НаборЗаписей.Загрузить(РезультатыЗапроса[2].Выгрузить()); + НаборЗаписей.Записать(); + + КонецЕсли; + +КонецПроцедуры + +// Только для внутреннего использования. +// Вызывается при обновлении данных регистра сведений ГруппыЗначенийДоступа +// по видам доступа ПустаяСсылка, Пользователи, Внешние пользователи и +// при изменении состава участников групп доступа. +// +Процедура ОбновитьПодчиненныхПользователейГруппДоступа() Экспорт + + // Подготовка данных для работы ограничений по видам доступа Пользователи и ВнешниеПользователи + // когда ДобавлятьРуководителямДоступПодчиненных для проверки текущих пользователей + // (ТекущиеПользователи = ТекущийПользователь + ПодчиненныеПользователиПроверяемойГруппыДоступа) + // + // <состав поля Пользователь> + // + // а) для вида доступа Пользователи + // {cравнение с &ТекущийПользователь}} {cравнение с Т.<поле>} {cравнение с проверяемой группой доступа} + // + // Пользователь - тот же Пользователь Группа доступа того же пользователя + // - Подчиненный пользователь Группа доступа подчиненного пользователя + // - ГруппаИсполнителей того же пользователя Группа доступа того же пользователя + // - ГруппаИсполнителей подчиненного пользователя Группа доступа подчиненного пользователя + // + // б) для вида доступа ВнешниеПользователи + // {cравнение с &ТекущийВнешнийПользователь}} {cравнение с Т.<поле>} {cравнение с проверяемой группой доступа} + // + // Внешний пользователь - тот же Внешний пользователь Группа доступа того же внешнего пользователя + // - Подчиненный пользователь Группа доступа подчиненного внешнего пользователя + // - ГруппаИсполнителей того же внешнего пользователя Группа доступа того же внешнего пользователя + // - ГруппаИсполнителей подчиненного внешнего пользователя Группа доступа подчиненного внешнего пользователя + // - ОбъектАвторизации того же внешнего пользователя Группа доступа того же внешнего пользователя + // - ОбъектАвторизации подчиненного внешнего пользователя Группа доступа подчиненного внешнего пользователя + + // Результат получается на основании подчиненности пользователей и + // данных для ограничения по видам доступа Пользователи и ВнешниеПользователи + // подготовленных в регистре сведений ГруппыЗначенийДоступа, + // а также участников групп доступа + + // Порядок получения данных + // 1. Получить подчиненных пользователей + // 2. Получить группы доступа пользователей без учета подчиненности + // 3. Получить значения доступа пользователей по полученным группам доступа + // 4. Получить новые данные: подчиненных пользователей по группам доступа, + // где в качестве подчиненных пользователей могут быть не только пользователи, + // но и группы пользователей и группы исполнителей задач и др. + // 5. Получить строки для удаления + // 6. Получить строки для добавления + + УстановитьПривилегированныйРежим(Истина); + + Если НЕ УправлениеДоступом.ДобавлятьРуководителямДоступПодчиненных() Тогда + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ПодчиненныеПользователи КАК ПодчиненныеПользователи"; + Если НЕ Запрос.Выполнить().Пустой() Тогда + НаборЗаписей = РегистрыСведений.ПодчиненныеПользователи.СоздатьНаборЗаписей(); + НаборЗаписей.Записать(); + КонецЕсли; + Иначе + + Запрос = Новый Запрос; + Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; + + // Подготовка таблицы подчиненности пользователей. + Если НЕ УправлениеДоступомПереопределяемый.ТаблицаПодчиненностиПользователей(Запрос.МенеджерВременныхТаблиц) Тогда + // + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь, + | Пользователи.Ссылка КАК ПодчиненныйПользователь + |ПОМЕСТИТЬ ТаблицаПодчиненностиПользователей + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | ЛОЖЬ"; + Запрос.Выполнить(); + КонецЕсли; + + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицаПодчиненностиПользователей.Пользователь, + | ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь + |ПОМЕСТИТЬ ПодчиненныеПользователи + |ИЗ + | ТаблицаПодчиненностиПользователей КАК ТаблицаПодчиненностиПользователей + |ГДЕ + | ТИПЗНАЧЕНИЯ(ТаблицаПодчиненностиПользователей.Пользователь) = ТИП(Справочник.Пользователи) + | И ТаблицаПодчиненностиПользователей.Пользователь <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | И ТИПЗНАЧЕНИЯ(ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь) = ТИП(Справочник.Пользователи) + | И ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь <> ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | СоставыГруппПользователей.Пользователь, + | СоставыГруппПользователей.ГруппаПользователей + |ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + |ГДЕ + | ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.Пользователь) = ТИП(Справочник.Пользователи) + | И ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.ГруппаПользователей) = ТИП(Справочник.Пользователи) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | ТаблицаПодчиненностиПользователей.Пользователь КАК ВнешнийПользователь, + | ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь КАК ПодчиненныйВнешнийПользователь + |ПОМЕСТИТЬ ПодчиненныеВнешниеПользователи + |ИЗ + | ТаблицаПодчиненностиПользователей КАК ТаблицаПодчиненностиПользователей + |ГДЕ + | ТИПЗНАЧЕНИЯ(ТаблицаПодчиненностиПользователей.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | И ТаблицаПодчиненностиПользователей.Пользователь <> ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка) + | И ТИПЗНАЧЕНИЯ(ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь) = ТИП(Справочник.ВнешниеПользователи) + | И ТаблицаПодчиненностиПользователей.ПодчиненныйПользователь <> ЗНАЧЕНИЕ(Справочник.ВнешниеПользователи.ПустаяСсылка) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | СоставыГруппПользователей.Пользователь, + | СоставыГруппПользователей.ГруппаПользователей + |ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + |ГДЕ + | ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | И ТИПЗНАЧЕНИЯ(СоставыГруппПользователей.ГруппаПользователей) = ТИП(Справочник.ВнешниеПользователи) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ ТаблицаПодчиненностиПользователей"; + + Запрос.Текст = Запрос.Текст + Символы.ПС+ ";" + Символы.ПС + + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПодчиненныеПользователи.Пользователь, + | ГруппыЗначенийДоступа.ЗначениеДоступа КАК ПодчиненныйПользователь, + | УчастникиГруппДоступа.Ссылка КАК ГруппаДоступа + |ПОМЕСТИТЬ НовыеДанные + |ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодчиненныеПользователи КАК ПодчиненныеПользователи + | ПО (ГруппыЗначенийДоступа.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.Пользователи)) + | И ГруппыЗначенийДоступа.ГруппаДоступа = ПодчиненныеПользователи.ПодчиненныйПользователь + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) + | И (ПользователиИГруппыПользователей.ЗначениеДоступа = ПодчиненныеПользователи.ПодчиненныйПользователь) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ПО (УчастникиГруппДоступа.Пользователь = ПользователиИГруппыПользователей.ГруппаДоступа) + | И ((НЕ УчастникиГруппДоступа.Ссылка.ПометкаУдаления)) + | И ((НЕ УчастникиГруппДоступа.Ссылка.Профиль.ПометкаУдаления)) + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПодчиненныеВнешниеПользователи.ВнешнийПользователь, + | ГруппыЗначенийДоступа.ЗначениеДоступа, + | УчастникиГруппДоступа.Ссылка + |ИЗ + | РегистрСведений.ГруппыЗначенийДоступа КАК ГруппыЗначенийДоступа + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПодчиненныеВнешниеПользователи КАК ПодчиненныеВнешниеПользователи + | ПО (ГруппыЗначенийДоступа.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ВнешниеПользователи)) + | И ГруппыЗначенийДоступа.ГруппаДоступа = ПодчиненныеВнешниеПользователи.ПодчиненныйВнешнийПользователь + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГруппыЗначенийДоступа КАК ПользователиИГруппыПользователей + | ПО (ПользователиИГруппыПользователей.ВидДоступа = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыДоступа.ПустаяСсылка)) + | И (ПользователиИГруппыПользователей.ЗначениеДоступа = ПодчиненныеВнешниеПользователи.ПодчиненныйВнешнийПользователь) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК УчастникиГруппДоступа + | ПО (УчастникиГруппДоступа.Пользователь = ПользователиИГруппыПользователей.ГруппаДоступа) + | И ((НЕ УчастникиГруппДоступа.Ссылка.ПометкаУдаления)) + | И ((НЕ УчастникиГруппДоступа.Ссылка.Профиль.ПометкаУдаления))"; + + Запрос.Выполнить(); + + Запрос.Текст = + "ВЫБРАТЬ + | СтарыеДанные.Пользователь, + | СтарыеДанные.ПодчиненныйПользователь, + | СтарыеДанные.ГруппаДоступа + |ИЗ + | РегистрСведений.ПодчиненныеПользователи КАК СтарыеДанные + | ЛЕВОЕ СОЕДИНЕНИЕ НовыеДанные КАК НовыеДанные + | ПО СтарыеДанные.Пользователь = НовыеДанные.Пользователь + | И СтарыеДанные.ПодчиненныйПользователь = НовыеДанные.ПодчиненныйПользователь + | И СтарыеДанные.ГруппаДоступа = НовыеДанные.ГруппаДоступа + |ГДЕ + | НовыеДанные.Пользователь ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НовыеДанные.Пользователь, + | НовыеДанные.ПодчиненныйПользователь, + | НовыеДанные.ГруппаДоступа + |ИЗ + | НовыеДанные КАК НовыеДанные + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПодчиненныеПользователи КАК СтарыеДанные + | ПО (СтарыеДанные.Пользователь = НовыеДанные.Пользователь) + | И (СтарыеДанные.ПодчиненныйПользователь = НовыеДанные.ПодчиненныйПользователь) + | И (СтарыеДанные.ГруппаДоступа = НовыеДанные.ГруппаДоступа) + |ГДЕ + | СтарыеДанные.Пользователь ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |УНИЧТОЖИТЬ НовыеДанные"; + + РезультатЗапроса = Запрос.ВыполнитьПакет(); + + // Удаление лишних записей + МенеджерЗаписи = РегистрыСведений.ПодчиненныеПользователи.СоздатьМенеджерЗаписи(); + УдаляемыеСтроки = РезультатЗапроса[0].Выбрать(); + // + Пока УдаляемыеСтроки.Следующий() Цикл + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, УдаляемыеСтроки); + МенеджерЗаписи.Прочитать(); + Если МенеджерЗаписи.Выбран() Тогда + МенеджерЗаписи.Удалить(); + КонецЕсли; + КонецЦикла; + + // Добавление недостающих записей + Выгрузка = РезультатЗапроса[1].Выгрузить(); + Если Выгрузка.Количество() > 0 Тогда + НаборЗаписей = РегистрыСведений.ПодчиненныеПользователи.СоздатьНаборЗаписей(); + НаборЗаписей.Загрузить(Выгрузка); + НаборЗаписей.Записать(Ложь); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с правами по значения доступа + +// Возвращает описание возможных прав по значениям доступа. +// Подробнее о возможных правах см. в комментарии к функции +// УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваПоЗначениямДоступа(). +// +// Параметры: +// Таблица - Строка, Неопределено - полное имя таблицы значений доступа, +// для которых нужно получить описание возможных прав, +// когда Неопределено, возвращается таблица всех описаний, +// заданных прикладным разработчиком. +// +// Возвращаемое значение: +// ТаблицаЗначений с колонками, описание которых см. в комментарии к функции +// УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваПоЗначениямДоступа(). +// Если задан параметр Таблица, возвращаются только её описания. +// +Функция ВозможныеПраваПоЗначениюДоступа(Таблица = Неопределено) Экспорт + + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваПоЗначениямДоступа(); + + Если Таблица = Неопределено Тогда + Строки = Неопределено; + Иначе + Строки = ВозможныеПрава.НайтиСтроки(Новый Структура("ВладелецПрав", Таблица)); + КонецЕсли; + + Возврат ВозможныеПрава.Скопировать(Строки); + +КонецФункции + +// Выполняет обновление таблиц в регистре сведений ПраваПоЗначенияДоступа, +// когда изменена процедура ЗаполнитьВозможныеПраваПоЗначениямДоступа +// модуля УправлениеДоступомПереопределяемый. +// +Процедура ОбновитьТаблицыПравПоЗначениямДоступа() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ВозможныеПрава = УправлениеДоступомСлужебныйПовтИсп.ВозможныеПраваПоЗначениямДоступа(); + + ТаблицыПрав = Новый ТаблицаЗначений; + ТаблицыПрав.Колонки.Добавить("ВладелецПрав", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.ЗначениеДоступа.Тип); + ТаблицыПрав.Колонки.Добавить("Право", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.Право.Тип); + ТаблицыПрав.Колонки.Добавить("Таблица", Метаданные.РегистрыСведений.ПраваПоЗначениямДоступа.Измерения.Таблица.Тип); + ТаблицыПрав.Колонки.Добавить("Чтение", Новый ОписаниеТипов("Булево")); + ТаблицыПрав.Колонки.Добавить("Добавление", Новый ОписаниеТипов("Булево")); + ТаблицыПрав.Колонки.Добавить("Изменение", Новый ОписаниеТипов("Булево")); + ТаблицыПрав.Колонки.Добавить("Удаление", Новый ОписаниеТипов("Булево")); + + Для каждого ОписаниеПрава Из ВозможныеПрава Цикл + ВладелецПрав = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ОписаниеПрава.ВладелецПрав).ПустаяСсылка(); + Если ТаблицыПрав.Колонки.ВладелецПрав.ТипЗначения.СодержитТип(ТипЗнч(ВладелецПрав)) Тогда + Для каждого Таблица Из ОписаниеПрава.ЧтениеВТаблицах Цикл + НоваяТаблица = ТаблицыПрав.Добавить(); + НоваяТаблица.ВладелецПрав = ВладелецПрав; + НоваяТаблица.Право = ОписаниеПрава.Имя; + НоваяТаблица.Таблица = Таблица; + НоваяТаблица.Чтение = Истина; + КонецЦикла; + Для каждого Таблица Из ОписаниеПрава.ДобавлениеВТаблицах Цикл + НоваяТаблица = ТаблицыПрав.Добавить(); + НоваяТаблица.ВладелецПрав = ВладелецПрав; + НоваяТаблица.Право = ОписаниеПрава.Имя; + НоваяТаблица.Таблица = Таблица; + НоваяТаблица.Добавление = Истина; + КонецЦикла; + Для каждого Таблица Из ОписаниеПрава.ИзменениеВТаблицах Цикл + НоваяТаблица = ТаблицыПрав.Добавить(); + НоваяТаблица.ВладелецПрав = ВладелецПрав; + НоваяТаблица.Право = ОписаниеПрава.Имя; + НоваяТаблица.Таблица = Таблица; + НоваяТаблица.Изменение = Истина; + КонецЦикла; + Для каждого Таблица Из ОписаниеПрава.УдалениеВТаблицах Цикл + НоваяТаблица = ТаблицыПрав.Добавить(); + НоваяТаблица.ВладелецПрав = ВладелецПрав; + НоваяТаблица.Право = ОписаниеПрава.Имя; + НоваяТаблица.Таблица = Таблица; + НоваяТаблица.Удаление = Истина; + КонецЦикла; + КонецЕсли; + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ТаблицыПрав", ТаблицыПрав); + Запрос.Текст = + "ВЫБРАТЬ + | ТаблицыПрав.ВладелецПрав, + | ТаблицыПрав.Право, + | ТаблицыПрав.Таблица, + | ТаблицыПрав.Чтение, + | ТаблицыПрав.Добавление, + | ТаблицыПрав.Изменение, + | ТаблицыПрав.Удаление + |ПОМЕСТИТЬ ТаблицыПрав + |ИЗ + | &ТаблицыПрав КАК ТаблицыПрав + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НовыеЗаписи.ЗначениеДоступа, + | НовыеЗаписи.Пользователь, + | НовыеЗаписи.Право, + | НовыеЗаписи.Таблица, + | НовыеЗаписи.Запрещено, + | НовыеЗаписи.РаспространяетсяВИерархии, + | НовыеЗаписи.Чтение, + | НовыеЗаписи.ЧтениеЗапрещено, + | НовыеЗаписи.Добавление, + | НовыеЗаписи.ДобавлениеЗапрещено, + | НовыеЗаписи.Изменение, + | НовыеЗаписи.ИзменениеЗапрещено, + | НовыеЗаписи.Удаление, + | НовыеЗаписи.УдалениеЗапрещено + |ИЗ + | (ВЫБРАТЬ + | ПраваПоЗначениям.ЗначениеДоступа КАК ЗначениеДоступа, + | ПраваПоЗначениям.Пользователь КАК Пользователь, + | ПраваПоЗначениям.Право КАК Право, + | ПраваПоЗначениям.Запрещено КАК Запрещено, + | ПраваПоЗначениям.РаспространяетсяВИерархии КАК РаспространяетсяВИерархии, + | ЕСТЬNULL(ТаблицыПрав.Таблица, """") КАК Таблица, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) + | КОНЕЦ КАК Чтение, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЧтениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) + | КОНЕЦ КАК Добавление, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ДобавлениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) + | КОНЕЦ КАК Изменение, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ИзменениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) + | КОНЕЦ КАК Удаление, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК УдалениеЗапрещено + | ИЗ + | (ВЫБРАТЬ + | ПраваПоЗначениямДоступа.ЗначениеДоступа КАК ЗначениеДоступа, + | ПраваПоЗначениямДоступа.Пользователь КАК Пользователь, + | ПраваПоЗначениямДоступа.Право КАК Право, + | МАКСИМУМ(ПраваПоЗначениямДоступа.Запрещено) КАК Запрещено, + | МАКСИМУМ(ПраваПоЗначениямДоступа.РаспространяетсяВИерархии) КАК РаспространяетсяВИерархии + | ИЗ + | РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениямДоступа + | + | СГРУППИРОВАТЬ ПО + | ПраваПоЗначениямДоступа.ЗначениеДоступа, + | ПраваПоЗначениямДоступа.Пользователь, + | ПраваПоЗначениямДоступа.Право) КАК ПраваПоЗначениям + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПрав КАК ТаблицыПрав + | ПО (ТИПЗНАЧЕНИЯ(ПраваПоЗначениям.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТаблицыПрав.ВладелецПрав)) + | И ПраваПоЗначениям.Право = ТаблицыПрав.Право) КАК НовыеЗаписи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПраваПоЗначениямДоступа КАК ТекущиеЗаписи + | ПО НовыеЗаписи.ЗначениеДоступа = ТекущиеЗаписи.ЗначениеДоступа + | И НовыеЗаписи.Пользователь = ТекущиеЗаписи.Пользователь + | И НовыеЗаписи.Право = ТекущиеЗаписи.Право + | И НовыеЗаписи.Таблица = ТекущиеЗаписи.Таблица + | И НовыеЗаписи.Запрещено = ТекущиеЗаписи.Запрещено + | И НовыеЗаписи.РаспространяетсяВИерархии = ТекущиеЗаписи.РаспространяетсяВИерархии + | И НовыеЗаписи.Чтение = ТекущиеЗаписи.Чтение + | И НовыеЗаписи.ЧтениеЗапрещено = ТекущиеЗаписи.ЧтениеЗапрещено + | И НовыеЗаписи.Добавление = ТекущиеЗаписи.Добавление + | И НовыеЗаписи.ДобавлениеЗапрещено = ТекущиеЗаписи.ДобавлениеЗапрещено + | И НовыеЗаписи.Изменение = ТекущиеЗаписи.Изменение + | И НовыеЗаписи.ИзменениеЗапрещено = ТекущиеЗаписи.ИзменениеЗапрещено + | И НовыеЗаписи.Удаление = ТекущиеЗаписи.Удаление + | И НовыеЗаписи.УдалениеЗапрещено = ТекущиеЗаписи.УдалениеЗапрещено + |ГДЕ + | ТекущиеЗаписи.ЗначениеДоступа ЕСТЬ NULL + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | НовыеЗаписи.ЗначениеДоступа, + | НовыеЗаписи.Пользователь, + | НовыеЗаписи.Право, + | НовыеЗаписи.Таблица + |ИЗ + | РегистрСведений.ПраваПоЗначениямДоступа КАК ТекущиеЗаписи + | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | ПраваПоЗначениям.ЗначениеДоступа КАК ЗначениеДоступа, + | ПраваПоЗначениям.Пользователь КАК Пользователь, + | ПраваПоЗначениям.Право КАК Право, + | ПраваПоЗначениям.Запрещено КАК Запрещено, + | ПраваПоЗначениям.РаспространяетсяВИерархии КАК РаспространяетсяВИерархии, + | ЕСТЬNULL(ТаблицыПрав.Таблица, """") КАК Таблица, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) + | КОНЕЦ КАК Чтение, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Чтение, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЧтениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) + | КОНЕЦ КАК Добавление, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Добавление, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ДобавлениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) + | КОНЕЦ КАК Изменение, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Изменение, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ИзменениеЗапрещено, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЛОЖЬ + | ИНАЧЕ ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) + | КОНЕЦ КАК Удаление, + | ВЫБОР + | КОГДА ПраваПоЗначениям.Запрещено + | ТОГДА ЕСТЬNULL(ТаблицыПрав.Удаление, ЛОЖЬ) + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК УдалениеЗапрещено + | ИЗ + | (ВЫБРАТЬ + | ПраваПоЗначениямДоступа.ЗначениеДоступа КАК ЗначениеДоступа, + | ПраваПоЗначениямДоступа.Пользователь КАК Пользователь, + | ПраваПоЗначениямДоступа.Право КАК Право, + | МАКСИМУМ(ПраваПоЗначениямДоступа.Запрещено) КАК Запрещено, + | МАКСИМУМ(ПраваПоЗначениямДоступа.РаспространяетсяВИерархии) КАК РаспространяетсяВИерархии + | ИЗ + | РегистрСведений.ПраваПоЗначениямДоступа КАК ПраваПоЗначениямДоступа + | + | СГРУППИРОВАТЬ ПО + | ПраваПоЗначениямДоступа.ЗначениеДоступа, + | ПраваПоЗначениямДоступа.Пользователь, + | ПраваПоЗначениямДоступа.Право) КАК ПраваПоЗначениям + | ЛЕВОЕ СОЕДИНЕНИЕ ТаблицыПрав КАК ТаблицыПрав + | ПО (ТИПЗНАЧЕНИЯ(ПраваПоЗначениям.ЗначениеДоступа) = ТИПЗНАЧЕНИЯ(ТаблицыПрав.ВладелецПрав)) + | И ПраваПоЗначениям.Право = ТаблицыПрав.Право) КАК НовыеЗаписи + | ПО НовыеЗаписи.ЗначениеДоступа = ТекущиеЗаписи.ЗначениеДоступа + | И НовыеЗаписи.Пользователь = ТекущиеЗаписи.Пользователь + | И НовыеЗаписи.Право = ТекущиеЗаписи.Право + | И НовыеЗаписи.Таблица = ТекущиеЗаписи.Таблица + | И НовыеЗаписи.Запрещено = ТекущиеЗаписи.Запрещено + | И НовыеЗаписи.РаспространяетсяВИерархии = ТекущиеЗаписи.РаспространяетсяВИерархии + | И НовыеЗаписи.Чтение = ТекущиеЗаписи.Чтение + | И НовыеЗаписи.ЧтениеЗапрещено = ТекущиеЗаписи.ЧтениеЗапрещено + | И НовыеЗаписи.Добавление = ТекущиеЗаписи.Добавление + | И НовыеЗаписи.ДобавлениеЗапрещено = ТекущиеЗаписи.ДобавлениеЗапрещено + | И НовыеЗаписи.Изменение = ТекущиеЗаписи.Изменение + | И НовыеЗаписи.ИзменениеЗапрещено = ТекущиеЗаписи.ИзменениеЗапрещено + | И НовыеЗаписи.Удаление = ТекущиеЗаписи.Удаление + | И НовыеЗаписи.УдалениеЗапрещено = ТекущиеЗаписи.УдалениеЗапрещено + |ГДЕ + | НовыеЗаписи.ЗначениеДоступа ЕСТЬ NULL "; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + Для каждого ОписаниеУдаляемойЗаписи ИЗ РезультатыЗапроса[2].Выгрузить() Цикл + МенеджерЗаписи = РегистрыСведений.ПраваПоЗначениямДоступа.СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ОписаниеУдаляемойЗаписи); + МенеджерЗаписи.Удалить(); + КонецЦикла; + + НаборЗаписей = РегистрыСведений.ПраваПоЗначениямДоступа.СоздатьНаборЗаписей(); + НаборЗаписей.Загрузить(РезультатыЗапроса[1].Выгрузить()); + Если НаборЗаписей.Количество() > 0 Тогда + НаборЗаписей.Записать(Ложь); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы с наборами значений доступа + +// Заполняет вспомогательные данные, ускоряющие работу шаблонов ограничений доступа. +// Выполняется перед записью в регистр НаборыЗначенийДоступа или +// перед записью объекта с табличной частью НаборыЗначенийДоступа. +// +// Параметры: +// СсылкаНаОбъект - СправочникСсылка.*, ДокументСсылка.*, ... +// Таблица - ТабличнаяЧасть (или ТаблицаЗначений), РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа +// +Процедура ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, Таблица) Экспорт + + ПодготовкаНабораЗаписей = ТипЗнч(Таблица) = Тип("РегистрСведенийНаборЗаписей.НаборыЗначенийДоступа"); + + // Нормализация ресурсов Чтение, Добавление, Изменение, Удаление. + НомерНабора = -1; + Для каждого Строка Из Таблица Цикл + + Если ПодготовкаНабораЗаписей Тогда + // Установка значения измерения Объект + Строка.Объект = СсылкаНаОбъект; + // Заполнение свойств вида доступа: + // ВидДоступаБезГруппЗначенияДоступа, + // ВидДоступаЕдинственныйДляТипаЗначенияДоступа, + // ВидДоступаЧерезПраваПоЗначениямДоступа + СвойстваВидаДоступа = СвойстваВидаДоступа(Строка.ВидДоступа); + Если СвойстваВидаДоступа <> Неопределено Тогда + ЗаполнитьЗначенияСвойств(Строка, СвойстваВидаДоступа(Строка.ВидДоступа)); + КонецЕсли; + // Установка типа объекта для одной строки всех наборов (в качестве типа пустая ссылка) + Если НомерНабора = -1 Тогда + ТипыОбъекта = Новый Массив; + ТипыОбъекта.Добавить(ТипЗнч(СсылкаНаОбъект)); + ОписаниеТипаОбъекта = Новый ОписаниеТипов(ТипыОбъекта); + Строка.ТипОбъекта = ОписаниеТипаОбъекта.ПривестиЗначение(Неопределено); + КонецЕсли; + // Установка типа значения доступа для значений доступа по видам доступа + // ПравоЧтения, ПравоДобавления, ПравоИзменения (в качестве типа пустая ссылка) + Если Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения + ИЛИ Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоДобавления + ИЛИ Строка.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения Тогда + МенеджерОбъекта = ?(Строка.ЗначениеДоступа <> Неопределено, ОбщегоНазначения.МенеджерОбъектаПоСсылке(Строка.ЗначениеДоступа), Неопределено); + Если МенеджерОбъекта <> Неопределено Тогда + Строка.ТипЗначенияДоступа = МенеджерОбъекта.ПустаяСсылка(); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Очистка флажков прав и соответствующих им вторичных данных + // для всех строк каждого набора, кроме первой строки + Если НомерНабора = Строка.НомерНабора Тогда + Строка.Чтение = Ложь; + Строка.Добавление = Ложь; + Строка.Изменение = Ложь; + Строка.Удаление = Ложь; + Иначе + НомерНабора = Строка.НомерНабора; + КонецЕсли; + + Если ПодготовкаНабораЗаписей Тогда + // Описание прав Чтение, Добавление, Изменение через ссылки видов доступа для + // оптимизации работы механизма зависимостей по правам в шаблоне ограничения доступа + Строка.ВидДоступаПравоЧтения = ?(Строка.Чтение, ПланыВидовХарактеристик.ВидыДоступа.ПравоЧтения, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); + Строка.ВидДоступаПравоДобавления = ?(Строка.Добавление, ПланыВидовХарактеристик.ВидыДоступа.ПравоДобавления, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); + Строка.ВидДоступаПравоИзменения = ?(Строка.Изменение, ПланыВидовХарактеристик.ВидыДоступа.ПравоИзменения, ПланыВидовХарактеристик.ВидыДоступа.ПустаяСсылка()); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект) Экспорт + + СсылкаНаОбъект = Объект.Ссылка; + ТипЗначенияОбъект = ТипЗнч(Объект); + + Если Объект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда + ВызватьИсключение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверные параметры. + |Тип объекта ""%1"" + |не найдена табличная часть ""Наборы значений доступа"".'"), + ТипЗначенияОбъект)); + КонецЕсли; + + Таблица = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); + + Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда + + Если НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) И + НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) Тогда + ВызватьИсключение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверные параметры. + |Тип объекта ""%1"" + |не найден ни в одной из подписок на события + |""Записать наборы значений доступа"", + |""Записать зависимые наборы значений доступа"".'"), + ТипЗначенияОбъект)); + КонецЕсли; + + Объект.ЗаполнитьНаборыЗначенийДоступа(Таблица); + + Если Таблица.Количество() = 0 Тогда + // Если это условие отключить, тогда зациклится регламентное задание + // заполнения данных для ограничения доступа. + ВызватьИсключение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Объект ""%1"" сформировал пустой набор значений доступа.'"), + ТипЗначенияОбъект)); + КонецЕсли; + + УправлениеДоступом.ДобавитьНаборыЗначенийДоступа(Таблица, УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(), Ложь, Истина); + + ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, Таблица); + + КонецЕсли; + + Возврат Таблица; + +КонецФункции + +// Перезаписывает наборы значений доступа проверяемого объекта +// в РегистрСведений.НаборыЗначенийДоступа, используя процедуру +// УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(). +// +// Процедура вызывается из УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступа(), +// но может быть вызвана из любого места, например, +// при включении ограничения доступа на уровне записей. +// +// Вызывает процедуру прикладного разработчика +// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), +// которая используется для перезаписи зависимых наборов значений доступа. +// +// Параметры: +// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... +// В случае вызова с клиента можно передать только ссылку, а нужен объект. +// Если получена ссылка, то по ней будет получен объект. +// +Процедура ЗаписатьНаборыЗначенийДоступа(Знач Объект) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Если передача параметра Объект производилась с клиента на сервер, + // то передавалась ссылка, и объект требуется получить. + Объект = ?(Объект = Объект.Ссылка, Объект.ПолучитьОбъект(), Объект); + СсылкаНаОбъект = Объект.Ссылка; + ТипЗначенияОбъект = ТипЗнч(Объект); + + Если НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) Тогда + ВызватьИсключение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверные параметры. + |Тип объекта ""%1"" + |не найден в подписке на события + |""Записать наборы значений доступа"".'"), + ТипЗначенияОбъект)); + КонецЕсли; + + Если Метаданные.РегистрыСведений.НаборыЗначенийДоступа.Измерения.Объект.Тип.Типы().Найти(ТипЗнч(СсылкаНаОбъект)) = Неопределено Тогда + ВызватьИсключение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка при записи наборов значений доступа: + |в регистре сведений НаборыЗначенийДоступа в измерении Объект + |не задан тип %1'"), + СсылкаНаОбъект.Метаданные().ПолноеИмя())); + КонецЕсли; + + НаборЗаписей = РегистрыСведений.НаборыЗначенийДоступа.СоздатьНаборЗаписей(); + + Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда + + Если Метаданные.НайтиПоТипу(ТипЗначенияОбъект).ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда + + УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(Объект, НаборЗаписей); + + УправлениеДоступом.ДобавитьНаборыЗначенийДоступа( + НаборЗаписей, УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(), Ложь, Истина); + Иначе + // Записан объект с уже заполненной табличной частью НаборыЗначенийДоступа + НаборЗаписей.Загрузить(Объект.НаборыЗначенийДоступа.Выгрузить()); + КонецЕсли; + + НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); + ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, НаборЗаписей); + Если НаборыЗначенийДоступаРегистраИзменены(СсылкаНаОбъект, НаборЗаписей) Тогда + НаборЗаписей.Записать(); + ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект); + КонецЕсли; + Иначе + Запрос = Новый Запрос( + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа + |ГДЕ + | НаборыЗначенийДоступа.Объект = &СсылкаНаОбъект"); + + Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект); + + Если НЕ Запрос.Выполнить().Пустой() Тогда + // Очистка устаревшего набора. + // Запись нового набора будет выполнена регламентным заданием, + // после включения ограничения на уровне записей. + НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект); + НаборЗаписей.Записать(); + + // Очистка устаревших зависимых наборов. + ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + +// Перезаписывает наборы значений доступа зависимых объектов. +// +// Процедура вызывается из УправлениеДоступомСлужебный.ЗаписатьЗависимыеНаборыЗначенийДоступа(), +// состав типов подписки дополняет (без пересечения) состав типов подписки ЗаписатьНаборыЗначенийДоступа, +// теми типами, для которых выполнять запись наборов в регистр сведений НаборыЗначенийДоступа +// не требуется, но сами наборы входят в состав других наборов, например, наборы некоторых файлов +// из справочника "Файлы" могут входить в состав некоторых бизнес-процессов "Задание", созданных +// на основании файлов, при этом наборы файлов записывать в регистр не требуется. +// +// Вызывает процедуру прикладного разработчика +// УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(), +// которая используется для перезаписи зависимых наборов значений доступа, +// то есть организуется рекурсия. +// +// Параметры: +// Объект - СправочникОбъект, ДокументОбъект, ..., или СправочникСсылка, ДокументСсылка, ... +// В случае вызова с клиента можно передать только ссылку, а нужен объект. +// Если получена ссылка, то по ней будет получен объект. +// +Процедура ЗаписатьЗависимыеНаборыЗначенийДоступа(Знач Объект) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + // Если передача параметра Объект производилась с клиента на сервер, + // то передавалась ссылка, и объект требуется получить. + Объект = ?(Объект = Объект.Ссылка, Объект.ПолучитьОбъект(), Объект); + СсылкаНаОбъект = Объект.Ссылка; + ТипЗначенияОбъект = ТипЗнч(Объект); + + Если НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) Тогда + ВызватьИсключение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Неверные параметры. + |Тип объекта ""%1"" + |не найден в подписке на события + |""Записать зависимые наборы значений доступа"".'"), + ТипЗначенияОбъект)); + КонецЕсли; + + ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект); + +КонецПроцедуры + +Функция НаборыЗначенийДоступаТабличнойЧастиИзменены(СсылкаНаОбъект, НовыеНаборы) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("СтарыеНаборы", ОбщегоНазначения.ПолучитьЗначениеРеквизита(СсылкаНаОбъект, "НаборыЗначенийДоступа")); + Запрос.УстановитьПараметр("НовыеНаборы", НовыеНаборы); + Запрос.Текст = + "ВЫБРАТЬ + | НовыеНаборы.НомерНабора, + | НовыеНаборы.ВидДоступа, + | НовыеНаборы.ЗначениеДоступа, + | НовыеНаборы.Чтение, + | НовыеНаборы.Добавление, + | НовыеНаборы.Изменение, + | НовыеНаборы.Удаление + |ПОМЕСТИТЬ НовыеНаборы + |ИЗ + | &НовыеНаборы КАК НовыеНаборы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СтарыеНаборы.НомерНабора, + | СтарыеНаборы.ВидДоступа, + | СтарыеНаборы.ЗначениеДоступа, + | СтарыеНаборы.Чтение, + | СтарыеНаборы.Добавление, + | СтарыеНаборы.Изменение, + | СтарыеНаборы.Удаление + |ПОМЕСТИТЬ СтарыеНаборы + |ИЗ + | &СтарыеНаборы КАК СтарыеНаборы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | СтарыеНаборы КАК СтарыеНаборы + | ЛЕВОЕ СОЕДИНЕНИЕ НовыеНаборы КАК НовыеНаборы + | ПО СтарыеНаборы.НомерНабора = НовыеНаборы.НомерНабора + | И СтарыеНаборы.ВидДоступа = НовыеНаборы.ВидДоступа + | И СтарыеНаборы.ЗначениеДоступа = НовыеНаборы.ЗначениеДоступа + | И СтарыеНаборы.Чтение = НовыеНаборы.Чтение + | И СтарыеНаборы.Добавление = НовыеНаборы.Добавление + | И СтарыеНаборы.Изменение = НовыеНаборы.Изменение + | И СтарыеНаборы.Удаление = НовыеНаборы.Удаление + |ГДЕ + | НовыеНаборы.НомерНабора ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | НовыеНаборы КАК НовыеНаборы + | ЛЕВОЕ СОЕДИНЕНИЕ СтарыеНаборы КАК СтарыеНаборы + | ПО (СтарыеНаборы.НомерНабора = НовыеНаборы.НомерНабора) + | И (СтарыеНаборы.ВидДоступа = НовыеНаборы.ВидДоступа) + | И (СтарыеНаборы.ЗначениеДоступа = НовыеНаборы.ЗначениеДоступа) + | И (СтарыеНаборы.Чтение = НовыеНаборы.Чтение) + | И (СтарыеНаборы.Добавление = НовыеНаборы.Добавление) + | И (СтарыеНаборы.Изменение = НовыеНаборы.Изменение) + | И (СтарыеНаборы.Удаление = НовыеНаборы.Удаление) + |ГДЕ + | СтарыеНаборы.НомерНабора ЕСТЬ NULL "; + + Возврат НЕ Запрос.Выполнить().Пустой(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для действий при изменений настроек подсистемы + +// Если необходимо, включает заполнение данных для ограничения доступа и +// обновляет некоторые данные сразу. +// +// Вызывается из обработчика ПриЗаписи константы ОграничиватьДоступаНаУровнеЗаписей. +// +Процедура ПриИзмененииОграниченияДоступаНаУровнеЗаписей(ОграничениеДоступаНаУровнеЗаписейВключено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если ОграничениеДоступаНаУровнеЗаписейВключено Тогда + + ЗаписьЖурналаРегистрации(НСтр("ru = 'Управление доступом.Заполнение данных для ограничения доступа'"), + УровеньЖурналаРегистрации.Информация, , , НСтр("ru = 'Начато заполнение данных для ограничения доступа'"), + РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная); + + // Дополнительно обновляются таблицы прав, т.к. они будут использоваться + // в процедуре заполнения регистра сведений ТаблицыГруппДоступа. + ОбновитьТаблицыРолейПрофилейГруппДоступа(); + + // Обновление РегистрСведений.ТаблицыГруппДоступа и РегистрСведений.ЗначенияГруппДоступа. + Запрос = Новый Запрос( + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | (НЕ ГруппыДоступа.ЭтоГруппа)"); + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + ОбновитьТаблицыГруппДоступа(Выборка.Ссылка); + ЗаписатьЗначенияГруппДоступа(Выборка.Ссылка); + КонецЦикла; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + СтандартныеПодсистемыПереопределяемый.УстановитьИспользованиеЗаданияЗаполненияДанныхУправленияДоступом(Истина); + Иначе + Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания.ЗаполнениеДанныхДляОграниченияДоступа); + Задание.Использование = Истина; + Задание.Записать(); + КонецЕсли; + КонецЕсли; + + // Обновление параметров сеанса. + // Требуется для того, чтобы администратор не выполнял перезапуск. + УстановленныеПараметры = Новый Массив; + УстановкаПараметровСеанса("ОграничиватьДоступПоВиду", УстановленныеПараметры); + +КонецПроцедуры + +// Обновляет данные, зависимые от константы ДобавлятьРуководителямДоступПодчиненных. +// Вызывается из обработчика ПриЗаписи константы. +// +Процедура ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + + // Обновление параметра сеанса. + // Требуется для того, чтобы администратор не выполнял перезапуск. + УстановленныеПараметры = Новый Массив; + УстановкаПараметровСеанса("ДобавлятьРуководителямДоступПодчиненных", УстановленныеПараметры); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для работы интерфейсов пользователей + +// Возвращает список значений доступа не помеченных на удаление. +// Используется в обработчиках событий ОкончаниеВводаТекста и АвтоПодбор. +// +// Параметры: +// Текст - Строка, символы введенные пользователем. +// ВключаяГруппы - Булево, если Истина, включать группы пользователей и внешних пользователей. +// ВидДоступа - ПланыВидовХарактеристикСсылка.ВидыДоступа, значения доступа которого выбираются. +// +Функция СформироватьДанныеВыбораЗначенияДоступа(Знач Текст, Знач ВидДоступа, ВключаяГруппы = Истина) Экспорт + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Текст", Текст + "%"); + Запрос.УстановитьПараметр("ВключаяГруппы", ВключаяГруппы); + Запрос.Текст = + "ВЫБРАТЬ + | ПредставленияПеречислений.Ссылка, + | ПредставленияПеречислений.Наименование КАК Наименование + |ПОМЕСТИТЬ ПредставленияПеречислений + |ИЗ + | &ПредставленияПеречислений КАК ПредставленияПеречислений + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | НЕОПРЕДЕЛЕНО КАК Ссылка, + | """" КАК Наименование + |ГДЕ + | ЛОЖЬ"; + + ЗапросПредставленийПеречислений = Новый Запрос; + ЗапросПредставленийПеречислений.Текст = + "ВЫБРАТЬ + | """" КАК Ссылка, + | """" КАК Наименование + |ГДЕ + | ЛОЖЬ"; + + Для каждого Тип Из ВидДоступа.ТипЗначения.Типы() Цикл + + МетаданныеТипа = Метаданные.НайтиПоТипу(Тип); + + ПолноеИмяТаблицы = МетаданныеТипа.ПолноеИмя(); + + Если ( Метаданные.Справочники.Содержит(МетаданныеТипа) + ИЛИ Метаданные.ПланыВидовХарактеристик.Содержит(МетаданныеТипа) ) + И МетаданныеТипа.Иерархический + И МетаданныеТипа.ВидИерархии = Метаданные.СвойстваОбъектов.ВидИерархии.ИерархияГруппИЭлементов + И НЕ ВключаяГруппы Тогда + + УсловиеДляГруппы = "НЕ Таблица.ЭтоГруппа"; + Иначе + УсловиеДляГруппы = "Истина"; + КонецЕсли; + + Если Метаданные.Перечисления.Содержит(МетаданныеТипа) Тогда + // + ЗапросПредставленийПеречислений.Текст = ЗапросПредставленийПеречислений.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; + ЗапросПредставленийПеречислений.Текст = ЗапросПредставленийПеречислений.Текст + СтрЗаменить( + "ВЫБРАТЬ + | Таблица.Ссылка, + | ПРЕДСТАВЛЕНИЕ(Таблица.Ссылка) КАК Наименование + |ИЗ + | &ПолноеИмяТаблицы КАК Таблица", "&ПолноеИмяТаблицы", ПолноеИмяТаблицы); + Иначе + Запрос.Текст = Запрос.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; + Запрос.Текст = Запрос.Текст + СтрЗаменить(СтрЗаменить( + "ВЫБРАТЬ + | Таблица.Ссылка, + | Таблица.Наименование + |ИЗ + | &ПолноеИмяТаблицы КАК Таблица + |ГДЕ + | (НЕ Таблица.ПометкаУдаления) + | И Таблица.Наименование ПОДОБНО &Текст + | И &УсловиеДляГруппы", "&ПолноеИмяТаблицы", ПолноеИмяТаблицы), "&УсловиеДляГруппы", УсловиеДляГруппы); + КонецЕсли; + КонецЦикла; + + Запрос.УстановитьПараметр("ПредставленияПеречислений", ЗапросПредставленийПеречислений.Выполнить().Выгрузить()); + Запрос.Текст = Запрос.Текст + Символы.ПС + Символы.ПС + " ОБЪЕДИНИТЬ ВСЕ " + Символы.ПС + Символы.ПС; + Запрос.Текст = Запрос.Текст + + "ВЫБРАТЬ + | ПредставленияПеречислений.Ссылка, + | ПредставленияПеречислений.Наименование + |ИЗ + | ПредставленияПеречислений КАК ПредставленияПеречислений + |ГДЕ + | ПредставленияПеречислений.Наименование ПОДОБНО &Текст"; + + ДанныеВыбора = Новый СписокЗначений; + + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + + ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.Наименование); + КонецЦикла; + + Возврат ДанныеВыбора; + +КонецФункции + +// Заполняет шаблон заголовка подчиненной формы свойствами ссылки-владельца, +// например, НСтр("ru = 'Права доступа: %1 (%2)'" -> "Права доступа: Иванов (Пользователь)". +// +// Параметры: +// СсылкаНаВладельца - ссылка на объект-владелец. +// +Функция ЗаголовокПодчиненнойФормы(СтрокаЗаголовкаСПараметрами, СсылкаНаВладельца) Экспорт + + МетаданныеВладельца = СсылкаНаВладельца.Метаданные(); + НаименованиеВладельца = Строка(СсылкаНаВладельца); + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + СтрокаЗаголовкаСПараметрами, + НаименованиеВладельца, + НазваниеОбъектаИзМетаданных(МетаданныеВладельца) ); + +КонецФункции + +// Возвращает название объекта метаданных с учетом заданных свойств в порядке: +// - РасширенноеПредставлениеОбъекта, +// - ПредставлениеОбъекта, +// - Синоним, +// - Имя. +// +// Параметры: +// МетаданныеОбъекта - ОбъектМетаданных. +// +// Возвращаемое значение: +// Строка. +// +Функция НазваниеОбъектаИзМетаданных(МетаданныеОбъекта) Экспорт + + Если ЗначениеЗаполнено(МетаданныеОбъекта.РасширенноеПредставлениеОбъекта) Тогда + НазваниеОбъекта = МетаданныеОбъекта.РасширенноеПредставлениеОбъекта; + ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.ПредставлениеОбъекта) Тогда + НазваниеОбъекта = МетаданныеОбъекта.ПредставлениеОбъекта; + ИначеЕсли ЗначениеЗаполнено(МетаданныеОбъекта.Синоним) Тогда + НазваниеОбъекта = МетаданныеОбъекта.Синоним; + Иначе + НазваниеОбъекта = МетаданныеОбъекта.Имя; + КонецЕсли; + + Возврат НазваниеОбъекта; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для начального заполнения + +// Обновляет содержимое регистра сведений ЗависимостиПравДоступа, +// если прикладной разработчик изменил зависимости в переопределяемом модуле. +// +Процедура ОбновитьЗависимостиПравДоступа() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + НаборЗаписей = РегистрыСведений.ЗависимостиПравДоступа.СоздатьНаборЗаписей(); + УправлениеДоступомПереопределяемый.ЗаполнитьЗависимостиПравДоступа(НаборЗаписей); + + Запрос = Новый Запрос( + "ВЫБРАТЬ + | НовыеЗаписи.ПодчиненнаяТаблица, + | НовыеЗаписи.ТипВедущейТаблицы, + | НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы, + | НовыеЗаписи.ПриПроверкеПраваЧтение, + | НовыеЗаписи.ПриПроверкеПраваДобавление, + | НовыеЗаписи.ПриПроверкеПраваИзменение, + | НовыеЗаписи.ПриПроверкеПраваУдаление + |ПОМЕСТИТЬ НовыеЗаписи + |ИЗ + | &НовыеЗаписи КАК НовыеЗаписи + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ЗависимостиПравДоступа КАК СтарыеЗаписи + | ЛЕВОЕ СОЕДИНЕНИЕ НовыеЗаписи КАК НовыеЗаписи + | ПО СтарыеЗаписи.ПодчиненнаяТаблица = НовыеЗаписи.ПодчиненнаяТаблица + | И СтарыеЗаписи.ТипВедущейТаблицы = НовыеЗаписи.ТипВедущейТаблицы + | И СтарыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы = НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы + | И СтарыеЗаписи.ПриПроверкеПраваЧтение = НовыеЗаписи.ПриПроверкеПраваЧтение + | И СтарыеЗаписи.ПриПроверкеПраваДобавление = НовыеЗаписи.ПриПроверкеПраваДобавление + | И СтарыеЗаписи.ПриПроверкеПраваИзменение = НовыеЗаписи.ПриПроверкеПраваИзменение + | И СтарыеЗаписи.ПриПроверкеПраваУдаление = НовыеЗаписи.ПриПроверкеПраваУдаление + |ГДЕ + | НовыеЗаписи.ПодчиненнаяТаблица ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | НовыеЗаписи КАК НовыеЗаписи + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗависимостиПравДоступа КАК СтарыеЗаписи + | ПО НовыеЗаписи.ПодчиненнаяТаблица = СтарыеЗаписи.ПодчиненнаяТаблица + | И НовыеЗаписи.ТипВедущейТаблицы = СтарыеЗаписи.ТипВедущейТаблицы + | И НовыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы = СтарыеЗаписи.ОтключитьПроверкуПравВедущейТаблицы + | И НовыеЗаписи.ПриПроверкеПраваЧтение = СтарыеЗаписи.ПриПроверкеПраваЧтение + | И НовыеЗаписи.ПриПроверкеПраваДобавление = СтарыеЗаписи.ПриПроверкеПраваДобавление + | И НовыеЗаписи.ПриПроверкеПраваИзменение = СтарыеЗаписи.ПриПроверкеПраваИзменение + | И НовыеЗаписи.ПриПроверкеПраваУдаление = СтарыеЗаписи.ПриПроверкеПраваУдаление + |ГДЕ + | СтарыеЗаписи.ПодчиненнаяТаблица ЕСТЬ NULL "); + Запрос.УстановитьПараметр("НовыеЗаписи", НаборЗаписей); + + Если НЕ Запрос.Выполнить().Пустой() Тогда + НаборЗаписей.Записать(); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Процедура ПриИзмененииНаборовЗначенийДоступа(Знач СсылкаНаОбъект) + + СсылкиНаЗависимыеОбъекты = Новый Массив; + УправлениеДоступомПереопределяемый.ПриИзмененииНаборовЗначенийДоступа(СсылкаНаОбъект, СсылкиНаЗависимыеОбъекты); + + Для каждого СсылкаНаЗависимыйОбъект Из СсылкиНаЗависимыеОбъекты Цикл + // + Если СсылкаНаЗависимыйОбъект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда + // Изменение объекта не требуется + ЗаписатьНаборыЗначенийДоступа(СсылкаНаЗависимыйОбъект); + Иначе + // Изменение объекта требуется + Объект = СсылкаНаЗависимыйОбъект.ПолучитьОбъект(); + Таблица = ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект); + Если НЕ НаборыЗначенийДоступаТабличнойЧастиИзменены(СсылкаНаЗависимыйОбъект, Таблица) Тогда + Продолжить; + КонецЕсли; + Если ЭтоОбъектРучногоОбновленияЗависимыхНаборовЗначенийДоступа(СсылкаНаЗависимыйОбъект) Тогда + Продолжить; + КонецЕсли; + Попытка + ЗаблокироватьДанныеДляРедактирования(СсылкаНаЗависимыйОбъект, Объект.ВерсияДанных); + Объект.ОбменДанными.Загрузка = Истина; + Объект.ДополнительныеСвойства.Вставить("ЗаписатьНаборыЗначенийДоступа"); + Объект.ДополнительныеСвойства.Вставить("ЗаписатьЗависимыеНаборыЗначенийДоступа"); + Объект.ДополнительныеСвойства.Вставить("НаборыЗначенийДоступаТабличнойЧастиЗаполнены"); + Объект.НаборыЗначенийДоступа.Загрузить(Таблица); + Объект.Записать(); + РазблокироватьДанныеДляРедактирования(СсылкаНаЗависимыйОбъект); + Исключение + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ВызватьИсключение(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'При обновлении зависимого набора значений доступа объекта + |""%1"" возникла ошибка: + | + |%2'"), + Строка(СсылкаНаЗависимыйОбъект), + КраткоеПредставлениеОшибки)); + КонецПопытки; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +Функция ЭтоОбъектРучногоОбновленияЗависимыхНаборовЗначенийДоступа(Ссылка) + + УстановитьПривилегированныйРежим(Истина); + + ХранилищеЗначения = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ОбъектыРучногоОбновленияЗависимыхНаборовЗначенийДоступа"); + ОбъектыРучногоОбновления = ?(ТипЗнч(ХранилищеЗначения) = Тип("ХранилищеЗначения"), ХранилищеЗначения.Получить(), Неопределено); + + Если ОбъектыРучногоОбновления = Неопределено Тогда + Возврат Ложь; + КонецЕсли; + + КлючСеанса = УправлениеДоступомСлужебныйПовтИсп.КлючСеанса(); + Отбор = Новый Структура("КлючСеанса, Ссылка", КлючСеанса, Ссылка); + + Возврат ОбъектыРучногоОбновления.НайтиСтроки(Отбор).Количество() > 0; + +КонецФункции + +Функция НаборыЗначенийДоступаРегистраИзменены(СсылкаНаОбъект, НаборЗаписей) + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект); + Запрос.УстановитьПараметр("НовыеНаборы", НаборЗаписей.Выгрузить()); + Запрос.Текст = + "ВЫБРАТЬ + | НовыеНаборы.Объект, + | НовыеНаборы.НомерНабора, + | НовыеНаборы.ВидДоступа, + | НовыеНаборы.ЗначениеДоступа, + | НовыеНаборы.Чтение, + | НовыеНаборы.Добавление, + | НовыеНаборы.Изменение, + | НовыеНаборы.Удаление, + | НовыеНаборы.ВидДоступаБезГруппЗначенияДоступа, + | НовыеНаборы.ВидДоступаЕдинственныйДляТипаЗначенияДоступа, + | НовыеНаборы.ВидДоступаЧерезПраваПоЗначениямДоступа, + | НовыеНаборы.ВидДоступаПравоЧтения, + | НовыеНаборы.ВидДоступаПравоДобавления, + | НовыеНаборы.ВидДоступаПравоИзменения, + | НовыеНаборы.ТипОбъекта, + | НовыеНаборы.ТипЗначенияДоступа + |ПОМЕСТИТЬ НовыеНаборы + |ИЗ + | &НовыеНаборы КАК НовыеНаборы + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа + | ЛЕВОЕ СОЕДИНЕНИЕ НовыеНаборы КАК НовыеНаборы + | ПО НаборыЗначенийДоступа.Объект = НовыеНаборы.Объект + | И НаборыЗначенийДоступа.НомерНабора = НовыеНаборы.НомерНабора + | И НаборыЗначенийДоступа.ВидДоступа = НовыеНаборы.ВидДоступа + | И НаборыЗначенийДоступа.ЗначениеДоступа = НовыеНаборы.ЗначениеДоступа + | И НаборыЗначенийДоступа.Чтение = НовыеНаборы.Чтение + | И НаборыЗначенийДоступа.Добавление = НовыеНаборы.Добавление + | И НаборыЗначенийДоступа.Изменение = НовыеНаборы.Изменение + | И НаборыЗначенийДоступа.Удаление = НовыеНаборы.Удаление + | И НаборыЗначенийДоступа.ВидДоступаБезГруппЗначенияДоступа = НовыеНаборы.ВидДоступаБезГруппЗначенияДоступа + | И НаборыЗначенийДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа = НовыеНаборы.ВидДоступаЕдинственныйДляТипаЗначенияДоступа + | И НаборыЗначенийДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа = НовыеНаборы.ВидДоступаЧерезПраваПоЗначениямДоступа + | И НаборыЗначенийДоступа.ВидДоступаПравоЧтения = НовыеНаборы.ВидДоступаПравоЧтения + | И НаборыЗначенийДоступа.ВидДоступаПравоДобавления = НовыеНаборы.ВидДоступаПравоДобавления + | И НаборыЗначенийДоступа.ВидДоступаПравоИзменения = НовыеНаборы.ВидДоступаПравоИзменения + | И НаборыЗначенийДоступа.ТипОбъекта = НовыеНаборы.ТипОбъекта + | И НаборыЗначенийДоступа.ТипЗначенияДоступа = НовыеНаборы.ТипЗначенияДоступа + |ГДЕ + | НаборыЗначенийДоступа.Объект = &СсылкаНаОбъект + | И НовыеНаборы.Объект ЕСТЬ NULL + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | НовыеНаборы КАК НовыеНаборы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НаборыЗначенийДоступа КАК НаборыЗначенийДоступа + | ПО (НаборыЗначенийДоступа.Объект = НовыеНаборы.Объект) + | И (НаборыЗначенийДоступа.НомерНабора = НовыеНаборы.НомерНабора) + | И (НаборыЗначенийДоступа.ВидДоступа = НовыеНаборы.ВидДоступа) + | И (НаборыЗначенийДоступа.ЗначениеДоступа = НовыеНаборы.ЗначениеДоступа) + | И (НаборыЗначенийДоступа.Чтение = НовыеНаборы.Чтение) + | И (НаборыЗначенийДоступа.Добавление = НовыеНаборы.Добавление) + | И (НаборыЗначенийДоступа.Изменение = НовыеНаборы.Изменение) + | И (НаборыЗначенийДоступа.Удаление = НовыеНаборы.Удаление) + | И (НаборыЗначенийДоступа.ВидДоступаБезГруппЗначенияДоступа = НовыеНаборы.ВидДоступаБезГруппЗначенияДоступа) + | И (НаборыЗначенийДоступа.ВидДоступаЕдинственныйДляТипаЗначенияДоступа = НовыеНаборы.ВидДоступаЕдинственныйДляТипаЗначенияДоступа) + | И (НаборыЗначенийДоступа.ВидДоступаЧерезПраваПоЗначениямДоступа = НовыеНаборы.ВидДоступаЧерезПраваПоЗначениямДоступа) + | И (НаборыЗначенийДоступа.ВидДоступаПравоЧтения = НовыеНаборы.ВидДоступаПравоЧтения) + | И (НаборыЗначенийДоступа.ВидДоступаПравоДобавления = НовыеНаборы.ВидДоступаПравоДобавления) + | И (НаборыЗначенийДоступа.ВидДоступаПравоИзменения = НовыеНаборы.ВидДоступаПравоИзменения) + | И (НаборыЗначенийДоступа.ТипОбъекта = НовыеНаборы.ТипОбъекта) + | И (НаборыЗначенийДоступа.ТипЗначенияДоступа = НовыеНаборы.ТипЗначенияДоступа) + |ГДЕ + | НаборыЗначенийДоступа.Объект ЕСТЬ NULL "; + + Возврат НЕ Запрос.Выполнить().Пустой(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Обновление информационной базы + +// Обработчик обновления информационной базы. +// Требуется при удалении предопределенных профилей +// групп доступа, т.к. платформа не вызывает обработчики +// объектов при установке пометки удаления бывшим предопределенным +// элементам в процессе обновления конфигурации базы данных. +// +Процедура ПометитьНаУдалениеГруппыДоступаПомеченныхПрофилей() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ГруппыДоступа.Ссылка + |ИЗ + | Справочник.ГруппыДоступа КАК ГруппыДоступа + |ГДЕ + | ГруппыДоступа.Профиль.ПометкаУдаления + | И НЕ ГруппыДоступа.ПометкаУдаления"; + + Выборка = Запрос.Выполнить().Выбрать(); + + Пока Выборка.Следующий() Цикл + ГруппаДоступаОбъект = Выборка.Ссылка.ПолучитьОбъект(); + ГруппаДоступаОбъект.ПометкаУдаления = Истина; + ГруппаДоступаОбъект.Записать(); + КонецЦикла; + +КонецПроцедуры + +// Обработчик обновления информационной базы +Процедура ОбновитьПодчиненностьПользователей_1_1_2_3() Экспорт + + // См. обработчик ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных. + + УстановитьПривилегированныйРежим(Истина); + + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + +КонецПроцедуры + +// Обработчик обновления информационной базы +Процедура ОбновитьПодчиненностьПользователей_1_1() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыПользователей.ВсеПользователи); + УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи); + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/УправлениеДоступомСобытия/УправлениеДоступомСобытия.mdo b/SSL/src/CommonModules/УправлениеДоступомСлужебный/УправлениеДоступомСлужебный.mdo similarity index 68% rename from SSL/src/CommonModules/УправлениеДоступомСобытия/УправлениеДоступомСобытия.mdo rename to SSL/src/CommonModules/УправлениеДоступомСлужебный/УправлениеДоступомСлужебный.mdo index dbe35998a..1ecb2198f 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСобытия/УправлениеДоступомСобытия.mdo +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебный/УправлениеДоступомСлужебный.mdo @@ -1,12 +1,11 @@ - УправлениеДоступомСобытия + УправлениеДоступомСлужебный ru - Управление доступом события + Управление доступом служебный true true true - true diff --git a/SSL/src/CommonModules/УправлениеДоступомСерверПовтИсп/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl similarity index 99% rename from SSL/src/CommonModules/УправлениеДоступомСерверПовтИсп/Module.bsl rename to SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl index 2f140c4a9..4a9a50717 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСерверПовтИсп/Module.bsl +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/Module.bsl @@ -694,7 +694,7 @@ Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // Удаление из описаний профилей роли, содержащие права, недоступные разделенным пользователям - НедоступныеРоли = ПользователиСерверПовтИсп.НедоступныеРолиПоТипуПользователя( + НедоступныеРоли = ПользователиСлужебныйПовтИсп.НедоступныеРолиПоТипуПользователя( Перечисления.ТипыПользователей.ПользовательОбластиДанных); Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл 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 4c4ff5721..1c67c0a3b 100644 --- a/SSL/src/CommonModules/УправлениеДоступомСерверПовтИсп/УправлениеДоступомСерверПовтИсп.mdo +++ b/SSL/src/CommonModules/УправлениеДоступомСлужебныйПовтИсп/УправлениеДоступомСлужебныйПовтИсп.mdo @@ -1,11 +1,12 @@ - УправлениеДоступомСерверПовтИсп + УправлениеДоступомСлужебныйПовтИсп ru - Управление доступом сервер повт исп + Управление доступом служебный повт исп true - true + true + true DuringSession diff --git a/SSL/src/CommonModules/УправлениеДоступомСобытия/Module.bsl b/SSL/src/CommonModules/УправлениеДоступомСобытия/Module.bsl deleted file mode 100644 index 9354bf206..000000000 --- a/SSL/src/CommonModules/УправлениеДоступомСобытия/Module.bsl +++ /dev/null @@ -1,226 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Управление доступом". -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события - -// Обработчик подписок ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей<*> на событие ПередЗаписью -// вызывает метод заполнения значений доступа табличной части объекта НаборыЗначенийДоступа, -// когда для ограничения доступа к самому объекту используется шаблон #ПоНаборамЗначений. -// Возможен случай использования подсистемы "УправлениеДоступом", когда -// указанной подписки не существует, если для указанной цели наборы не применяются. -// -// Обработчик подписки на событие ПередЗаписью для типов: -// СправочникОбъект -// ДокументОбъект -// ПланВидовХарактеристикОбъект -// ПланСчетовОбъект -// ПланВидовРасчетаОбъект -// БизнесПроцессОбъект -// ЗадачаОбъект -// ПланОбменаОбъект -// -Процедура ЗаполнитьНаборыЗначенийДоступаТабличныхЧастей(Знач Объект, Отказ = Неопределено, РежимЗаписи = Неопределено, РежимПроведения = Неопределено) Экспорт - - Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьНаборыЗначенийДоступа") Тогда - Возврат; - КонецЕсли; - - Если НЕ (ПривилегированныйРежим() И Объект.ДополнительныеСвойства.Свойство("НаборыЗначенийДоступаТабличнойЧастиЗаполнены")) Тогда - Объект.НаборыЗначенийДоступа.Загрузить(ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект)); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Только для внутреннего использования -Функция ПолучитьНаборыЗначенийДоступаТабличнойЧасти(Объект) Экспорт - - СсылкаНаОбъект = Объект.Ссылка; - ТипЗначенияОбъект = ТипЗнч(Объект); - - Если Объект.Метаданные().ТабличныеЧасти.Найти("НаборыЗначенийДоступа") = Неопределено Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверные параметры. - |Тип объекта ""%1"" - |не найдена табличная часть ""Наборы значений доступа"".'"), - ТипЗначенияОбъект)); - КонецЕсли; - - Таблица = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); - - Если УправлениеДоступом.ОграничиватьДоступНаУровнеЗаписей() Тогда - - Если НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) И - НЕ Метаданные.ПодпискиНаСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа.Источник.СодержитТип(ТипЗначенияОбъект) Тогда - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Неверные параметры. - |Тип объекта ""%1"" - |не найден ни в одной из подписок на события - |""Записать наборы значений доступа"", - |""Записать зависимые наборы значений доступа"".'"), - ТипЗначенияОбъект)); - КонецЕсли; - - Объект.ЗаполнитьНаборыЗначенийДоступа(Таблица); - - Если Таблица.Количество() = 0 Тогда - // Если это условие отключить, тогда зациклится регламентное задание - // заполнения данных для ограничения доступа. - ВызватьИсключение( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Объект ""%1"" сформировал пустой набор значений доступа.'"), - ТипЗначенияОбъект)); - КонецЕсли; - - УправлениеДоступом.ДобавитьНаборыЗначенийДоступа(Таблица, УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(), Ложь, Истина); - - УправлениеДоступом.ПодготовкаНаборовЗначенийДоступаПередЗаписью(СсылкаНаОбъект, Таблица); - - КонецЕсли; - - Возврат Таблица; - -КонецФункции - -// Проверяет изменен ли поставляемый профиль по сравнению с описанием из функции -// УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа() -// -// Параметры: -// Профиль - СправочникСсылка.ПрофилиГруппДоступа -// (возвращается реквизит ПоставляемыйПрофильИзменен), -// - СправочникОбъект.ПрофилиГруппДоступа -// (возвращается результат сравнения заполнения объекта -// с описанием в переопределяемом общем модуле). -// -// Возвращаемое значение: -// Булево. -// -Функция ПоставляемыйПрофильИзменен(Профиль) Экспорт - - Если ТипЗнч(Профиль) = Тип("СправочникСсылка.ПрофилиГруппДоступа") Тогда - Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита(Профиль, "ПоставляемыйПрофильИзменен"); - КонецЕсли; - - ОписанияПрофилей = УправлениеДоступомСерверПовтИсп.ОписанияНачальногоЗаполненияПрофилейГруппДоступа(); - - ОписаниеНайдено = Ложь; - Для каждого ОписаниеПрофиля Из ОписанияПрофилей Цикл - Если ОписаниеПрофиля.Идентификатор = Строка(Профиль.Ссылка.УникальныйИдентификатор()) Тогда - ОписаниеНайдено = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - Если ОписаниеНайдено Тогда - - Если ВРег(Профиль.Наименование) <> ВРег(ОписаниеПрофиля.Наименование) Тогда - Возврат Истина; - КонецЕсли; - - Если Профиль.Роли.Количество() <> ОписаниеПрофиля.Роли.Количество() - ИЛИ Профиль.ВидыДоступа.Количество() <> ОписаниеПрофиля.ВидыДоступа.Количество() - ИЛИ Профиль.ЗначенияДоступа.Количество() <> ОписаниеПрофиля.ЗначенияДоступа.Количество() Тогда - Возврат Истина; - КонецЕсли; - - Для каждого СтрокаРоли Из ОписаниеПрофиля.Роли Цикл - Если Профиль.Роли.Найти(СтрокаРоли) = Неопределено Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Для каждого ОписаниеВидаДоступа Из ОписаниеПрофиля.ВидыДоступа Цикл - Отбор = Новый Структура; - Отбор.Вставить("ВидДоступа", ПланыВидовХарактеристик.ВидыДоступа[ОписаниеВидаДоступа.Значение]); - Отбор.Вставить("Предустановленный", ОписаниеВидаДоступа.Представление = "Предустановленный"); - Отбор.Вставить("ДоступРазрешен", ОписаниеВидаДоступа.Представление = "ВначалеВсеРазрешены"); - Если Профиль.ВидыДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Для каждого ОписаниеЗначенияДоступа Из ОписаниеПрофиля.ЗначенияДоступа Цикл - Отбор = Новый Структура; - Отбор.Вставить("ВидДоступа", ПланыВидовХарактеристик.ВидыДоступа[ОписаниеЗначенияДоступа.Значение]); - Запрос = Новый Запрос(СтрЗаменить("Выбрать Значение(%1) КАК Значение", "%1", ОписаниеЗначенияДоступа.Представление)); - Отбор.Вставить("ЗначениеДоступа", Запрос.Выполнить().Выгрузить()[0].Значение); - Если Профиль.ЗначенияДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - КонецЕсли; - - Возврат Ложь; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики подписок на события - -// Обработчик подписки ЗаписатьГруппыИВидыДоступа на событие ПриЗаписи -// вызывает метод записи групп значений доступа и видов доступа -// в РегистрСведений.ГруппыЗначенийДоступа, для требуемых объектов метаданных. -// -Процедура ЗаписатьГруппыИВидыДоступа(Знач Объект, Отказ) Экспорт - - Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьГруппыИВидыДоступа") Тогда - Возврат; - КонецЕсли; - - #Если Сервер Тогда - УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Объект); - #Иначе - УправлениеДоступом.ЗаписатьГруппыИВидыДоступа(Объект.Ссылка); - #КонецЕсли - -КонецПроцедуры - -// Обработчик подписки ЗаписатьНаборыЗначенийДоступа на событие ПриЗаписи -// вызывает метод записи значений доступа объекта в РегистрСведений.НаборыЗначенийДоступа. -// Возможен случай использования подсистемы "УправлениеДоступом", когда -// указанной подписки не существует, если наборы значений доступа не применяются. -// -Процедура ЗаписатьНаборыЗначенийДоступа(Знач Объект, Отказ) Экспорт - - Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьНаборыЗначенийДоступа") Тогда - Возврат; - КонецЕсли; - - #Если Сервер Тогда - УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(Объект); - #Иначе - УправлениеДоступом.ЗаписатьНаборыЗначенийДоступа(Объект.Ссылка); - #КонецЕсли - -КонецПроцедуры - -// Обработчик подписки ЗаписатьЗависимыеНаборыЗначенийДоступа события ПриЗаписи -// вызывает перезапись зависимых наборов значений доступа в регистре сведений НаборыЗначенийДоступа. -// -// Возможен случай использования подсистемы "УправлениеДоступом", когда -// указанной подписки не существует, если зависимые наборы значений доступа не применяются. -// -Процедура ЗаписатьЗависимыеНаборыЗначенийДоступа(Знач Объект, Отказ) Экспорт - - Если Объект.ОбменДанными.Загрузка И НЕ Объект.ДополнительныеСвойства.Свойство("ЗаписатьЗависимыеНаборыЗначенийДоступа") Тогда - Возврат; - КонецЕсли; - - #Если Сервер Тогда - УправлениеДоступом.ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект); - #Иначе - УправлениеДоступом.ЗаписатьЗависимыеНаборыЗначенийДоступа(Объект.Ссылка); - #КонецЕсли - -КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСобытия/УправлениеИтогамиИАгрегатамиСобытия.mdo b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСобытия/УправлениеИтогамиИАгрегатамиСобытия.mdo index cb5b54296..f53954f04 100644 --- a/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСобытия/УправлениеИтогамиИАгрегатамиСобытия.mdo +++ b/SSL/src/CommonModules/УправлениеИтогамиИАгрегатамиСобытия/УправлениеИтогамиИАгрегатамиСобытия.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl index 056758d9e..a733ee0c7 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/Module.bsl @@ -43,6 +43,29 @@ КонецФункции +// Обновляет поля контактной информации из ТаблицыЗначений (например объекта другого вида справочника) +// +// Параметры: +// Источник - ТаблицаЗначений - таблица значений с контактной информацией. +// Приемник - УправляемаяФорма - форма объекта. куда надо передать контактуню информацию. +// +Процедура ЗаполнитьКонтактнуюИнофрмацию(Источник, Приемник) Экспорт + + КоллекцияПолейКонтактнойИнформации = Приемник.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов; + + Для Каждого ЭлементКоллекцияПолейКонтактнойИнформации Из КоллекцияПолейКонтактнойИнформации Цикл + + СтрокаВКИ = Источник.Найти(ЭлементКоллекцияПолейКонтактнойИнформации.Вид, "Вид"); + Если СтрокаВКИ <> Неопределено Тогда + Приемник[ЭлементКоллекцияПолейКонтактнойИнформации.ИмяРеквизита] = СтрокаВКИ.Представление; + ЭлементКоллекцияПолейКонтактнойИнформации.ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(СтрокаВКИ.ЗначенияПолей); + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + + //////////////////////////////////////////////////////////////////////////////// // Обработчики событий формы и модуля объекта @@ -70,10 +93,10 @@ Запрос.Текст = "ВЫБРАТЬ | ВидыКонтактнойИнформации.Ссылка КАК Вид, - | ВидыКонтактнойИнформации.Наименование, - | ВидыКонтактнойИнформации.Тип, - | ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге, - | ВидыКонтактнойИнформации.АдресТолькоРоссийский, + | ВидыКонтактнойИнформации.Наименование КАК Наименование, + | ВидыКонтактнойИнформации.Тип КАК Тип, + | ВидыКонтактнойИнформации.РедактированиеТолькоВДиалоге КАК РедактированиеТолькоВДиалоге, + | ВидыКонтактнойИнформации.АдресТолькоРоссийский КАК АдресТолькоРоссийский, | ВидыКонтактнойИнформации.ПометкаУдаления КАК ПометкаУдаления, | ИСТИНА КАК Использовать |ИЗ @@ -143,13 +166,12 @@ Элемент.КнопкаВыбора = Истина; Если СтрокаКИ.РедактированиеТолькоВДиалоге Тогда Элемент.РедактированиеТекста = Ложь; - Элемент.ЦветФона = WebЦвета.Кремовый; + Элемент.ЦветФона = ЦветаСтиля.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет; КонецЕсли; Элемент.УстановитьДействие("НачалоВыбора", "Подключаемый_КонтактнаяИнформацияНачалоВыбора"); Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_КонтактнаяИнформацияПриИзменении"); КонецЕсли; - НоваяСтрока = Форма.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.Добавить(); НоваяСтрока.ИмяРеквизита = ИмяРеквизита; НоваяСтрока.ТолькоРоссийский = СтрокаКИ.АдресТолькоРоссийский; @@ -161,7 +183,7 @@ Если СтрокаВТаблице <> Неопределено Тогда Форма[ИмяРеквизита] = СтрокаВТаблице.Представление; - НоваяСтрока.ЗначенияПолей = ПреобразоватьСтрокуВСписокПолей(СтрокаВТаблице.ЗначенияПолей); + НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСтрокуВСписокПолей(СтрокаВТаблице.ЗначенияПолей); КонецЕсли; @@ -187,7 +209,7 @@ НоваяСтрока.Представление = Представление; Если СтрокаТаблицы.ЗначенияПолей.Количество() > 0 Тогда - НоваяСтрока.ЗначенияПолей = ПреобразоватьСписокПолейВСтроку(СтрокаТаблицы.ЗначенияПолей); + НоваяСтрока.ЗначенияПолей = УправлениеКонтактнойИнформациейКлиентСервер.ПреобразоватьСписокПолейВСтроку(СтрокаТаблицы.ЗначенияПолей); КонецЕсли; // Заполним значения дополнительных реквизитов таб. части @@ -400,62 +422,6 @@ КонецФункции -// Возвращает строку списка полей. -// -// Параметры: -// СоответствиеПолей - Соответствие - соттветствие полей. -// -// Возвращаемое значение - Строка - преобразованное соответствие в строку. -// -Функция ПреобразоватьСписокПолейВСтроку(СоответствиеПолей) Экспорт - - Результат = ""; - Для Каждого Элемент Из СоответствиеПолей Цикл - - Значение = Элемент.Значение; - Если ПустаяСтрока(Значение) Тогда - Продолжить; - КонецЕсли; - - Результат = Результат + ?(Результат = "", "", Символы.ПС) + - Элемент.Представление + "=" + СтрЗаменить(Значение, Символы.ПС, Символы.ПС + Символы.Таб); - - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Возвращает список значений. Преобразует строку полей в список значений. -// -// Параметры: -// СтрокаПолей - Строка - строка полей. -// -// Возвращаемое значение - Список значений - список значений полей. -// -Функция ПреобразоватьСтрокуВСписокПолей(СтрокаПолей) Экспорт - - Результат = Новый СписокЗначений; - ПоследнийЭлемент = Неопределено; - - Для Итерация = 1 По СтрЧислоСтрок(СтрокаПолей) Цикл - ПолученнаяСтрока = СтрПолучитьСтроку(СтрокаПолей, Итерация); - Если Лев(ПолученнаяСтрока, 1) = Символы.Таб Тогда - Если ПоследнийЭлемент <> Неопределено Тогда - ПоследнийЭлемент.Значение = ПоследнийЭлемент.Значение + Символы.ПС + Сред(ПолученнаяСтрока, 2); - КонецЕсли; - Иначе - ПозицияСимвола = Найти(ПолученнаяСтрока, "="); - Если ПозицияСимвола <> 0 Тогда - ПоследнийЭлемент = Результат.Добавить(Сред(ПолученнаяСтрока, ПозицияСимвола + 1), Лев(ПолученнаяСтрока, ПозицияСимвола - 1)); - КонецЕсли; - КонецЕсли; - КонецЦикла; - - Возврат Результат; - -КонецФункции - // Процедура удаляет элементы справочника СтраныМира. // Процедура УдалитьЭлементыСправочникаСтраныМира() Экспорт @@ -465,7 +431,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | СтраныМира.Ссылка + | СтраныМира.Ссылка КАК Ссылка |ИЗ | Справочник.СтраныМира КАК СтраныМира |ГДЕ diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/УправлениеКонтактнойИнформацией.mdo b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/УправлениеКонтактнойИнформацией.mdo index 1e375f46c..08947effa 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/УправлениеКонтактнойИнформацией.mdo +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформацией/УправлениеКонтактнойИнформацией.mdo @@ -6,5 +6,6 @@ Управление контактной информацией true - true + true + true diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl index 51f6d3788..27c6f7003 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлассификаторы/Module.bsl @@ -57,15 +57,15 @@ Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ - | АдресныйКлассификатор.ТипАдресногоЭлемента, - | АдресныйКлассификатор.Код, + | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, + | АдресныйКлассификатор.Код КАК Код, | АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение КАК Наименование, - | АдресныйКлассификатор.ПризнакАктуальности, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности, + | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, + | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, + | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде |ПОМЕСТИТЬ Адреса |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор @@ -81,9 +81,9 @@ ЗапросРегионов.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; ЗапросРегионов.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | Регионы.КодРегиона, - | Регионы.Наименование, - | Регионы.ПризнакАктуальности + | Регионы.КодРегиона КАК КодРегиона, + | Регионы.Наименование КАК Наименование, + | Регионы.ПризнакАктуальности КАК ПризнакАктуальности |ИЗ | Регионы КАК Регионы"; ВыборкаРегионов = ЗапросРегионов.Выполнить().Выбрать(); @@ -92,9 +92,9 @@ ЗапросРайонов.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; ЗапросРайонов.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ - | Районы.КодРайона, - | Районы.Наименование, - | Районы.ПризнакАктуальности + | Районы.КодРайона КАК КодРайона, + | Районы.Наименование КАК Наименование, + | Районы.ПризнакАктуальности КАК ПризнакАктуальности |ИЗ | Районы КАК Районы"; ВыборкаРайонов = ЗапросРайонов.Выполнить().Выбрать(); @@ -128,9 +128,9 @@ ЗапросАдресов.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; ЗапросАдресов.Текст = "ВЫБРАТЬ - | Адреса.ТипАдресногоЭлемента, + | Адреса.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, | Адреса.Код КАК Код, - | Адреса.ПризнакАктуальности, + | Адреса.ПризнакАктуальности КАК ПризнакАктуальности, | ЕСТЬNULL(Улицы.Наименование, """") КАК Улица, | ЕСТЬNULL(Города.Наименование, """") КАК Город, | ЕСТЬNULL(НаселенныеПункты.Наименование, """") КАК НаселенныйПункт, @@ -231,15 +231,15 @@ Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ - | АдресныйКлассификатор.ТипАдресногоЭлемента, - | АдресныйКлассификатор.Код, + | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, + | АдресныйКлассификатор.Код КАК Код, | АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение КАК Наименование, - | АдресныйКлассификатор.ПризнакАктуальности, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности, + | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, + | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, + | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде |ПОМЕСТИТЬ Адреса |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор @@ -254,13 +254,13 @@ Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ - | Адреса.Код, + | Адреса.Код КАК Код, | ЕСТЬNULL(Регионы.Наименование, """") КАК Регион, | ЕСТЬNULL(Районы.Наименование, """") КАК Район, | ЕСТЬNULL(Города.Наименование, """") КАК Город, | ЕСТЬNULL(НаселенныеПункты.Наименование, """") КАК НаселенныйПункт, | ЕСТЬNULL(Улицы.Наименование, """") КАК Улица, - | Адреса.ПризнакАктуальности + | Адреса.ПризнакАктуальности КАК ПризнакАктуальности |ИЗ | Адреса КАК Адреса | ЛЕВОЕ СОЕДИНЕНИЕ Регионы КАК Регионы @@ -457,7 +457,7 @@ КонецЕсли; КонецЕсли; КонецЕсли; - + Возврат Индекс; // Конец СтандартныеПодсистемы.АдресныйКлассификатор @@ -577,18 +577,18 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.ТипАдресногоЭлемента, - | АдресныйКлассификатор.Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде, - | АдресныйКлассификатор.Наименование, - | АдресныйКлассификатор.Сокращение, - | АдресныйКлассификатор.Индекс, - | АдресныйКлассификатор.АльтернативныеНазвания, - | АдресныйКлассификатор.ПризнакАктуальности + | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, + | АдресныйКлассификатор.Код КАК Код, + | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, + | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, + | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, + | АдресныйКлассификатор.Наименование КАК Наименование, + | АдресныйКлассификатор.Сокращение КАК Сокращение, + | АдресныйКлассификатор.Индекс КАК Индекс, + | АдресныйКлассификатор.АльтернативныеНазвания КАК АльтернативныеНазвания, + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -619,18 +619,18 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.ТипАдресногоЭлемента, - | АдресныйКлассификатор.Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде, - | АдресныйКлассификатор.Наименование, - | АдресныйКлассификатор.Сокращение, - | АдресныйКлассификатор.Индекс, - | АдресныйКлассификатор.АльтернативныеНазвания, - | АдресныйКлассификатор.ПризнакАктуальности + | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, + | АдресныйКлассификатор.Код КАК Код, + | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, + | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, + | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, + | АдресныйКлассификатор.Наименование КАК Наименование, + | АдресныйКлассификатор.Сокращение КАК Сокращение, + | АдресныйКлассификатор.Индекс КАК Индекс, + | АдресныйКлассификатор.АльтернативныеНазвания КАК АльтернативныеНазвания, + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -659,18 +659,18 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.ТипАдресногоЭлемента, - | АдресныйКлассификатор.Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде, - | АдресныйКлассификатор.Наименование, - | АдресныйКлассификатор.Сокращение, - | АдресныйКлассификатор.Индекс, - | АдресныйКлассификатор.АльтернативныеНазвания, - | АдресныйКлассификатор.ПризнакАктуальности + | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, + | АдресныйКлассификатор.Код КАК Код, + | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, + | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, + | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, + | АдресныйКлассификатор.Наименование КАК Наименование, + | АдресныйКлассификатор.Сокращение КАК Сокращение, + | АдресныйКлассификатор.Индекс КАК Индекс, + | АдресныйКлассификатор.АльтернативныеНазвания КАК АльтернативныеНазвания, + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -740,9 +740,9 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | АдресныйКлассификатор.Наименование, - | АдресныйКлассификатор.Код, - | АдресныйКлассификатор.Индекс + | АдресныйКлассификатор.Наименование КАК Наименование, + | АдресныйКлассификатор.Код КАК Код, + | АдресныйКлассификатор.Индекс КАК Индекс |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -797,17 +797,17 @@ Иначе Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.Наименование, - | АдресныйКлассификатор.Сокращение, - | АдресныйКлассификатор.Индекс, - | АдресныйКлассификатор.ТипАдресногоЭлемента, - | АдресныйКлассификатор.КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде, - | АдресныйКлассификатор.ПризнакАктуальности + | АдресныйКлассификатор.Код КАК Код, + | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | АдресныйКлассификатор.Наименование КАК Наименование, + | АдресныйКлассификатор.Сокращение КАК Сокращение, + | АдресныйКлассификатор.Индекс КАК Индекс, + | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, + | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, + | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, + | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -859,23 +859,26 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Индекс + | АдресныйКлассификатор.Индекс КАК Индекс |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ | АдресныйКлассификатор.Индекс = &УказанныйИндекс"; Запрос.УстановитьПараметр("УказанныйИндекс", УказанныйИндекс); - ИндексНеСуществует = Запрос.Выполнить().Пустой(); + ИндексНеСуществует = Запрос.Выполнить().Пустой(); - Если Не ПустаяСтрока(УказанныйИндекс) И НомерИндекса = "" Тогда - ЕстьОшибки = Истина; + Если Не ПустаяСтрока(УказанныйИндекс) Тогда Если ИндексНеСуществует Тогда + ЕстьОшибки = Истина; СообщениеОбОшибке = НСтр("ru='Индекс ""%УказанныйИндекс%"" не найден в адресном классификаторе.'"); - Иначе + ИначеЕсли НомерИндекса <> УказанныйИндекс Тогда + ЕстьОшибки = Истина; СообщениеОбОшибке = НСтр("ru='Индекс ""%УказанныйИндекс%"" не соответствует введенному адресу.'"); КонецЕсли; - СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%УказанныйИндекс%", УказанныйИндекс); - СтруктураОшибок.Вставить("Индекс", СообщениеОбОшибке); + Если ЕстьОшибки Тогда + СообщениеОбОшибке = СтрЗаменить(СообщениеОбОшибке, "%УказанныйИндекс%", УказанныйИндекс); + СтруктураОшибок.Вставить("Индекс", СообщениеОбОшибке); + КонецЕсли; КонецЕсли; СтруктураПроверки.Вставить("ЕстьОшибки", ЕстьОшибки); СтруктураПроверки.Вставить("СтруктураОшибок", СтруктураОшибок); @@ -945,7 +948,7 @@ Если Уровень = 1 Тогда Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код + | АдресныйКлассификатор.Код КАК Код |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -958,7 +961,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код + | АдресныйКлассификатор.Код КАК Код |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -971,7 +974,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код + | АдресныйКлассификатор.Код КАК Код |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -986,7 +989,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код + | АдресныйКлассификатор.Код КАК Код |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -1003,7 +1006,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код + | АдресныйКлассификатор.Код КАК Код |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -1022,7 +1025,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код + | АдресныйКлассификатор.Код КАК Код |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -1073,7 +1076,7 @@ ТекстЗапроса = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныеСокращения.Сокращение + | АдресныеСокращения.Сокращение КАК Сокращение |ИЗ | РегистрСведений.АдресныеСокращения КАК АдресныеСокращения |ГДЕ @@ -1162,7 +1165,7 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | АдресныйКлассификатор.Индекс + | АдресныйКлассификатор.Индекс КАК Индекс |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -1490,8 +1493,8 @@ | Адреса.Код КАК Код, | АдресныйКлассификатор.Код КАК КодРегиона, | АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение КАК Наименование, - | АдресныйКлассификатор.ПризнакАктуальности, - | Адреса.КодАдресногоОбъектаВКоде + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности, + | Адреса.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде |ПОМЕСТИТЬ Регионы |ИЗ | Адреса КАК Адреса @@ -1505,12 +1508,12 @@ Запрос.Текст = " |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | Адреса.Код, + | Адреса.Код КАК Код, | АдресныйКлассификатор.Код КАК КодРайона, | АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение КАК Наименование, - | АдресныйКлассификатор.ПризнакАктуальности, - | Адреса.КодРайонаВКоде, - | Адреса.КодАдресногоОбъектаВКоде + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности, + | Адреса.КодРайонаВКоде КАК КодРайонаВКоде, + | Адреса.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде |ПОМЕСТИТЬ Районы |ИЗ | Адреса КАК Адреса @@ -1525,13 +1528,13 @@ Запрос.Текст = " |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | Адреса.Код, + | Адреса.Код КАК Код, | АдресныйКлассификатор.Код КАК КодГорода, | АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение КАК Наименование, - | АдресныйКлассификатор.ПризнакАктуальности, - | Адреса.КодГородаВКоде, - | Адреса.КодРайонаВКоде, - | Адреса.КодАдресногоОбъектаВКоде + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности, + | Адреса.КодГородаВКоде КАК КодГородаВКоде, + | Адреса.КодРайонаВКоде КАК КодРайонаВКоде, + | Адреса.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде |ПОМЕСТИТЬ Города |ИЗ | Адреса КАК Адреса @@ -1547,14 +1550,14 @@ Запрос.Текст = " |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | Адреса.Код, + | Адреса.Код КАК Код, | АдресныйКлассификатор.Код КАК КодНаселенногоПункта, | АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение КАК Наименование, - | АдресныйКлассификатор.ПризнакАктуальности, - | Адреса.КодНаселенногоПунктаВКоде, - | Адреса.КодГородаВКоде, - | Адреса.КодРайонаВКоде, - | Адреса.КодАдресногоОбъектаВКоде + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности, + | Адреса.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | Адреса.КодГородаВКоде КАК КодГородаВКоде, + | Адреса.КодРайонаВКоде КАК КодРайонаВКоде, + | Адреса.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде |ПОМЕСТИТЬ НаселенныеПункты |ИЗ | Адреса КАК Адреса @@ -1571,15 +1574,15 @@ Запрос.Текст = " |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ - | Адреса.Код, + | Адреса.Код КАК Код, | АдресныйКлассификатор.Код КАК КодУлицы, | АдресныйКлассификатор.Наименование + "" "" + АдресныйКлассификатор.Сокращение КАК Наименование, - | АдресныйКлассификатор.ПризнакАктуальности, - | Адреса.КодУлицыВКоде, - | Адреса.КодНаселенногоПунктаВКоде, - | Адреса.КодГородаВКоде, - | Адреса.КодРайонаВКоде, - | Адреса.КодАдресногоОбъектаВКоде + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности, + | Адреса.КодУлицыВКоде КАК КодУлицыВКоде, + | Адреса.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | Адреса.КодГородаВКоде КАК КодГородаВКоде, + | Адреса.КодРайонаВКоде КАК КодРайонаВКоде, + | Адреса.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде |ПОМЕСТИТЬ Улицы |ИЗ | Адреса КАК Адреса @@ -1656,8 +1659,17 @@ Интервал = СтрЗаменить(Интервал, "К", ""); КонецЕсли; КонецЕсли; + Иначе + Если Не ТочноеСоответствие Тогда + //Обрезаются возможные значения "ДВЛД"(домовладение) и "ВЛД"(владение). + Если Найти(Интервал, "ДВЛД") <> 0 Тогда + Интервал = СтрЗаменить(Интервал, "ДВЛД", ""); + ИначеЕсли Найти(Интервал, "ВЛД") <> 0 Тогда + Интервал = СтрЗаменить(Интервал, "ВЛД", ""); + КонецЕсли; + КонецЕсли; КонецЕсли; - + Номер = Число(Номер); ТолькоЧислоИнтервал = СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(Интервал, Ложь); @@ -1787,8 +1799,8 @@ Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ - | АдресныйКлассификатор.Наименование, - | АдресныйКлассификатор.Индекс + | АдресныйКлассификатор.Наименование КАК Наименование, + | АдресныйКлассификатор.Индекс КАК Индекс |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор |ГДЕ @@ -1871,7 +1883,7 @@ Иначе Возврат ИндексДома; - КонецЕсли; + КонецЕсли; КонецФункции @@ -1918,7 +1930,7 @@ // Возвращаемое значение: // Найденный элемент справочника Адресный классификатор или пустая ссылка в случае неудачи // -Функция ПолучитьАдресныйЭлемент(НазваниеЭлемента, ТипЭлемента, ЭлементРодитель) +Функция ПолучитьАдресныйЭлемент(знач НазваниеЭлемента, ТипЭлемента, ЭлементРодитель) Если (СокрЛП(НазваниеЭлемента) = "") ИЛИ (ТипЭлемента = 0) Тогда Возврат ПолучитьПустуюСтруктуруАдреса(); @@ -1978,17 +1990,17 @@ Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код, - | АдресныйКлассификатор.КодАдресногоОбъектаВКоде, - | АдресныйКлассификатор.Наименование, - | АдресныйКлассификатор.Сокращение, - | АдресныйКлассификатор.Индекс, - | АдресныйКлассификатор.ТипАдресногоЭлемента, - | АдресныйКлассификатор.КодРайонаВКоде, - | АдресныйКлассификатор.КодГородаВКоде, - | АдресныйКлассификатор.КодНаселенногоПунктаВКоде, - | АдресныйКлассификатор.КодУлицыВКоде, - | АдресныйКлассификатор.ПризнакАктуальности + | АдресныйКлассификатор.Код КАК Код, + | АдресныйКлассификатор.КодАдресногоОбъектаВКоде КАК КодАдресногоОбъектаВКоде, + | АдресныйКлассификатор.Наименование КАК Наименование, + | АдресныйКлассификатор.Сокращение КАК Сокращение, + | АдресныйКлассификатор.Индекс КАК Индекс, + | АдресныйКлассификатор.ТипАдресногоЭлемента КАК ТипАдресногоЭлемента, + | АдресныйКлассификатор.КодРайонаВКоде КАК КодРайонаВКоде, + | АдресныйКлассификатор.КодГородаВКоде КАК КодГородаВКоде, + | АдресныйКлассификатор.КодНаселенногоПунктаВКоде КАК КодНаселенногоПунктаВКоде, + | АдресныйКлассификатор.КодУлицыВКоде КАК КодУлицыВКоде, + | АдресныйКлассификатор.ПризнакАктуальности КАК ПризнакАктуальности |ИЗ | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор | diff --git a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl index ccd7aed4f..9f2c23705 100644 --- a/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/УправлениеКонтактнойИнформациейКлиентСервер/Module.bsl @@ -26,14 +26,14 @@ ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("НаименованиеСтраны", СтруктураАдреса)), ", ", Представление); КонецЕсли; - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Индекс", СтруктураАдреса)), ", ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Индекс", СтруктураАдреса)), ", ", Представление); ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Регион", СтруктураАдреса)), ", ", Представление); ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Район", СтруктураАдреса)), ", ", Представление); ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Город", СтруктураАдреса)), ", ", Представление); ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("НаселенныйПункт", СтруктураАдреса)), ", ", Представление); ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Улица", СтруктураАдреса)), ", ", Представление); ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Дом", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтуктуры("ТипДома", СтруктураАдреса) + " № ", Представление); - ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтуктуры("ТипКорпуса ", СтруктураАдреса)+ " ", Представление); + ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Корпус", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтуктуры("ТипКорпуса", СтруктураАдреса)+ " ", Представление); ДополнитьПредставлениеАдреса(СокрЛП(ЗначениеПоКлючуСтуктуры("Квартира", СтруктураАдреса)), ", " + ЗначениеПоКлючуСтуктуры("ТипКвартиры", СтруктураАдреса) + " ", Представление); Если СтрДлина(Представление) > 2 Тогда @@ -84,4 +84,60 @@ Возврат ""; -КонецФункции \ No newline at end of file +КонецФункции + +// Возвращает строку списка полей. +// +// Параметры: +// СоответствиеПолей - Соответствие - соттветствие полей. +// +// Возвращаемое значение - Строка - преобразованное соответствие в строку. +// +Функция ПреобразоватьСписокПолейВСтроку(СоответствиеПолей) Экспорт + + Результат = ""; + Для Каждого Элемент Из СоответствиеПолей Цикл + + Значение = Элемент.Значение; + Если ПустаяСтрока(Значение) Тогда + Продолжить; + КонецЕсли; + + Результат = Результат + ?(Результат = "", "", Символы.ПС) + + Элемент.Представление + "=" + СтрЗаменить(Значение, Символы.ПС, Символы.ПС + Символы.Таб); + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Возвращает список значений. Преобразует строку полей в список значений. +// +// Параметры: +// СтрокаПолей - Строка - строка полей. +// +// Возвращаемое значение - Список значений - список значений полей. +// +Функция ПреобразоватьСтрокуВСписокПолей(СтрокаПолей) Экспорт + + Результат = Новый СписокЗначений; + ПоследнийЭлемент = Неопределено; + + Для Итерация = 1 По СтрЧислоСтрок(СтрокаПолей) Цикл + ПолученнаяСтрока = СтрПолучитьСтроку(СтрокаПолей, Итерация); + Если Лев(ПолученнаяСтрока, 1) = Символы.Таб Тогда + Если ПоследнийЭлемент <> Неопределено Тогда + ПоследнийЭлемент.Значение = ПоследнийЭлемент.Значение + Символы.ПС + Сред(ПолученнаяСтрока, 2); + КонецЕсли; + Иначе + ПозицияСимвола = Найти(ПолученнаяСтрока, "="); + Если ПозицияСимвола <> 0 Тогда + ПоследнийЭлемент = Результат.Добавить(Сред(ПолученнаяСтрока, ПозицияСимвола + 1), Лев(ПолученнаяСтрока, ПозицияСимвола - 1)); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции diff --git a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl index 6c3564f38..2f6caae58 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатью/Module.bsl @@ -68,6 +68,23 @@ КонецПроцедуры +// Возвращает список внешних печатных форм. +// +// Параметры: +// ПолноеИмяОбъектаМетаданных - Строка - полное имя объекта метаданных, для которого необходимо получить список печатных форм. +// +// Возвращаемое значение: +// Список: значение - Строка - идентификатор печатной формы; +// представление - Строка - представление печатной формы. +Функция СписокПечатныхФормИзВнешнихИсточников(ПолноеИмяОбъектаМетаданных) Экспорт + + ВнешниеПечатныеФормы = Новый СписокЗначений; + СтандартныеПодсистемыПереопределяемый.ПриПолученииСпискаВнешнихПечатныхФорм(ВнешниеПечатныеФормы, ПолноеИмяОбъектаМетаданных); + + Возврат ВнешниеПечатныеФормы; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Работа с шаблонами офисных документов @@ -194,43 +211,143 @@ ДвоичныеДанные.Записать(ИмяВременногоФайла); ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.Прочитать(ИмяВременногоФайла); - УдалитьФайлы(ИмяВременногоФайла); + Если Не БезопасныйРежим() Тогда + УдалитьФайлы(ИмяВременногоФайла); + КонецЕсли; Возврат ТабличныйДокумент; КонецФункции //////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает ссылку на объект-источник внешней печатной формы. +// +// Параметры: +// Идентификатор - Строка - идентификатор формы; +// ПолноеИмяОбъектаМетаданных - Строка - полное имя объекта метаданных, для которого требуется получить ссылку +// на источник внешней печатной формы. +// +// Возвращаемое значение: +// Ссылка - см. УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику, параметр ИсточникДанных. +Функция ВнешняяПечатнаяФорма(Идентификатор, ПолноеИмяОбъектаМетаданных) + ВнешняяПечатнаяФормаСсылка = Неопределено; + + СтандартныеПодсистемыПереопределяемый.ПриПолученииВнешнейПечатнойФормы(Идентификатор, ПолноеИмяОбъектаМетаданных, ВнешняяПечатнаяФормаСсылка); + + Возврат ВнешняяПечатнаяФормаСсылка; +КонецФункции // Сформировать печатные формы -Процедура СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, +Процедура СформироватьПечатныеФормы(ИмяМенеджераПечати, Знач ИменаМакетов, МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт - // Получим менеджер печати - МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяМенеджераПечати); - - // Подготовим коллекцию для формируемых печатных форм - КоллекцияПечатныхФорм = ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов); - - // Подготовим структуру параметров вывода ПараметрыВывода = ПодготовитьСтруктуруПараметровВывода(); - ОбъектыПечати = Новый СписокЗначений; + КоллекцияПечатныхФорм = ПодготовитьКоллекциюПечатныхФорм(Новый Массив); - // Сформируем печатные формы - МенеджерПечати.Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода); + Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда + ИменаМакетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаМакетов); + Иначе // Тип("Массив") + ИменаМакетов = ОбщегоНазначенияКлиентСервер.СкопироватьМассив(ИменаМакетов); + КонецЕсли; - // Проверим, все ли макеты были сформированы - Для Каждого Стр Из КоллекцияПечатныхФорм Цикл - Если Стр.ТабличныйДокумент = Неопределено Тогда + ПрефиксВнешнихПечатныхФорм = "ВнешняяПечатнаяФорма."; + ВнешниеПечатныеФормы = СписокПечатныхФормИзВнешнихИсточников(ИмяМенеджераПечати); + + // добавление внешних печатных форм в комплект + ДобавленныеВнешниеПечатныеФормы = Новый Массив; + Если ТипЗнч(ПараметрыПечати) = Тип("Структура") + И ПараметрыПечати.Свойство("ДополнитьКомплектВнешнимиПечатнымиФормами") + И ПараметрыПечати.ДополнитьКомплектВнешнимиПечатнымиФормами Тогда + + ИдентификаторыВнешнихПечатныхФорм = ВнешниеПечатныеФормы.ВыгрузитьЗначения(); + Для Каждого Идентификатор Из ИдентификаторыВнешнихПечатныхФорм Цикл + Если ИменаМакетов.Найти(Идентификатор) = Неопределено Тогда + ИменаМакетов.Добавить(ПрефиксВнешнихПечатныхФорм + Идентификатор); + ДобавленныеВнешниеПечатныеФормы.Добавить(ПрефиксВнешнихПечатныхФорм + Идентификатор); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Для Каждого ИмяМакета Из ИменаМакетов Цикл + // проверка наличия уже напечатанной формы + ПечатнаяФорма = КоллекцияПечатныхФорм.Найти(ИмяМакета, "ИмяМакета"); + Если ПечатнаяФорма <> Неопределено Тогда + ПечатнаяФорма.Экземпляров = ПечатнаяФорма.Экземпляров + 1; + Продолжить; + КонецЕсли; + + // поиск указания дополнительного менеджера печати в имени печатной формы + ИмяДополнительногоМенеджераПечати = ""; + Идентификатор = ИмяМакета; + Если Найти(Идентификатор, ПрефиксВнешнихПечатныхФорм) > 0 Тогда // это внешняя печатная форма + Идентификатор = Сред(Идентификатор, СтрДлина(ПрефиксВнешнихПечатныхФорм) + 1); + ИначеЕсли Найти(Идентификатор, ".") > 0 Тогда // указан дополнительный менеджер печати + Позиция = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(Идентификатор, "."); + ИмяДополнительногоМенеджераПечати = Лев(Идентификатор, Позиция - 1); + Идентификатор = Сред(Идентификатор, Позиция + 1); + КонецЕсли; + + // поиск внешней печатной формы + // если идентификатор внешней печатной формы совпадает с внутренним, то осуществляется подмена печатной формы на внешнюю. + ВнешняяПечатнаяФорма = ВнешниеПечатныеФормы.НайтиПоЗначению(Идентификатор); + + ВременнаяКоллекцияДляОднойПечатнойФормы = ПодготовитьКоллекциюПечатныхФорм(Идентификатор); + + Если ВнешняяПечатнаяФорма <> Неопределено Тогда + // печать внешней печатной формы + УправлениеПечатьюПереопределяемый.ПечатьПоВнешнемуИсточнику( + ВнешняяПечатнаяФорма(ВнешняяПечатнаяФорма.Значение, ИмяМенеджераПечати), + Новый Структура("ИдентификаторКоманды, ОбъектыНазначения", ВнешняяПечатнаяФорма.Значение, МассивОбъектов), + ВременнаяКоллекцияДляОднойПечатнойФормы, + ОбъектыПечати, + ПараметрыВывода); + Иначе + // выбор менеджера печати + ИспользуемыйМенеджерПечати = ИмяДополнительногоМенеджераПечати; + Если ПустаяСтрока(ИспользуемыйМенеджерПечати) Тогда + ИспользуемыйМенеджерПечати = ИмяМенеджераПечати; + КонецЕсли; + МенеджерПечати = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИспользуемыйМенеджерПечати); + + // печать внутренней печатной формы + МенеджерПечати.Печать(МассивОбъектов, ПараметрыПечати, ВременнаяКоллекцияДляОднойПечатнойФормы, ОбъектыПечати, ПараметрыВывода); + КонецЕсли; + + // обновление коллекции + Отказ = ВременнаяКоллекцияДляОднойПечатнойФормы.Количество() = 0; + // предполагается одна печатная форма, но для обратной совместимости принимается вся коллекция. + Для Каждого ВременнаяПечатнаяФорма Из ВременнаяКоллекцияДляОднойПечатнойФормы Цикл + Если ВременнаяПечатнаяФорма.ТабличныйДокумент <> Неопределено Тогда + ПечатнаяФорма = КоллекцияПечатныхФорм.Добавить(); + ЗаполнитьЗначенияСвойств(ПечатнаяФорма, ВременнаяПечатнаяФорма); + Если ВременнаяКоллекцияДляОднойПечатнойФормы.Количество() = 1 Тогда + ПечатнаяФорма.ИмяМакета = ИмяМакета; + ПечатнаяФорма.ИмяВРЕГ = ВРег(ИмяМакета); + КонецЕсли; + Иначе + // возникла ошибка при формировании печатной формы + Отказ = Истина; + КонецЕсли; + КонецЦикла; + + // вызов исключения при возникновении ошибки + Если Отказ Тогда ТекстСообщенияОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В обработчике печати не был сформирован табличный документ для: %1'"), - Стр.ИмяМакета); + НСтр("ru = 'При формировании печатной формы ""%1"" возникла ошибка. Обратитесь к администратору.'"), ИмяМакета); ВызватьИсключение(ТекстСообщенияОбОшибке); КонецЕсли; - Стр.ТабличныйДокумент.КоличествоЭкземпляров = Стр.Экземпляров; + КонецЦикла; + + // установка количества экземпляров табличным документам + Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл + Если ДобавленныеВнешниеПечатныеФормы.Найти(ПечатнаяФорма.ИмяМакета) <> Неопределено Тогда + ПечатнаяФорма.Экземпляров = 0; // для автоматически добавленных форм + КонецЕсли; + ПечатнаяФорма.ТабличныйДокумент.КоличествоЭкземпляров = ПечатнаяФорма.Экземпляров; КонецЦикла; КонецПроцедуры @@ -291,7 +408,7 @@ // Подготовить коллекцию печатных форм - таблицу значений используемые при формировании печатных форм // -Функция ПодготовитьКоллекциюПечатныхФорм(ИменаМакетов) Экспорт +Функция ПодготовитьКоллекциюПечатныхФорм(Знач ИменаМакетов) Экспорт Макеты = Новый ТаблицаЗначений; Макеты.Колонки.Добавить("ИмяМакета"); @@ -302,17 +419,19 @@ Макеты.Колонки.Добавить("Картинка"); Макеты.Колонки.Добавить("ПолныйПутьКМакету"); - СтрИмен = СтрЗаменить(ИменаМакетов, ",", Символы.ПС); - Для Сч = 1 По СтрЧислоСтрок(СтрИмен) Цикл - Имя = СтрПолучитьСтроку(СтрИмен, Сч); - Стр = Макеты.Найти(Имя, "ИмяМакета"); - Если Стр = Неопределено Тогда - Стр = Макеты.Добавить(); - Стр.ИмяМакета = Имя; - Стр.ИмяВРЕГ = ВРег(Имя); - Стр.Экземпляров = 1; + Если ТипЗнч(ИменаМакетов) = Тип("Строка") Тогда + ИменаМакетов = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаМакетов); + КонецЕсли; + + Для Каждого ИмяМакета Из ИменаМакетов Цикл + Макет = Макеты.Найти(ИмяМакета, "ИмяМакета"); + Если Макет = Неопределено Тогда + Макет = Макеты.Добавить(); + Макет.ИмяМакета = ИмяМакета; + Макет.ИмяВРЕГ = ВРег(ИмяМакета); + Макет.Экземпляров = 1; Иначе - Стр.Экземпляров = Стр.Экземпляров + 1; + Макет.Экземпляров = Макет.Экземпляров + 1; КонецЕсли; КонецЦикла; @@ -325,9 +444,10 @@ Функция ПодготовитьСтруктуруПараметровВывода() Экспорт ПараметрыВывода = Новый Структура; - ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); - ПараметрыВывода.Вставить("ПолучательЭлектронногоПисьма", Неопределено); - ПараметрыВывода.Вставить("ОтправительЭлектронногоПисьма", Неопределено); + ПараметрыВывода.Вставить("ДоступнаПечатьПоКомплектно", Ложь); + + СтруктураПараметровПисьма = Новый Структура("Получатель,Тема,Текст", Неопределено, "", ""); + ПараметрыВывода.Вставить("ПараметрыОтправки", СтруктураПараметровПисьма); Возврат ПараметрыВывода; @@ -352,3 +472,99 @@ КонецПроцедуры +// Возвращает таблицу возможных форматов для сохранения табличного документа. +// +// Возвращаемое значение +// ТаблицаЗначений: +// ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение в платформе, соответствующее формату; +// Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на метаданные, где хранится представление; +// Представление - Строка - - представление типа файла (заполняется из перечисления); +// Расширение - Строка - - тип файла для операционной системы; +// Картинка - Картинка - значок формата. +// +// Примечание: таблица форматов может быть переопределена в процедуре УправлениеПечатьюПереопределяемый.ПриЗаполненииНастроекФорматовСохранения(). +// +Функция НастройкиФорматовСохраненияТабличногоДокумента() Экспорт + + ТаблицаФорматов = Новый ТаблицаЗначений; + + ТаблицаФорматов.Колонки.Добавить("ТипФайлаТабличногоДокумента", Новый ОписаниеТипов("ТипФайлаТабличногоДокумента")); + ТаблицаФорматов.Колонки.Добавить("Ссылка", Новый ОписаниеТипов("ПеречислениеСсылка.ФорматыСохраненияОтчетов")); + ТаблицаФорматов.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); + ТаблицаФорматов.Колонки.Добавить("Расширение", Новый ОписаниеТипов("Строка")); + ТаблицаФорматов.Колонки.Добавить("Картинка", Новый ОписаниеТипов("Картинка")); + + // Документ PDF (.pdf) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.PDF; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.PDF; + НовыйФормат.Расширение = "pdf"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматPDF; + + // Лист Microsoft Excel 2007 (.xlsx) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLSX; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLSX; + НовыйФормат.Расширение = "xlsx"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel2007; + + // Лист Microsoft Excel 97-2003 (.xls) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.XLS; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.XLS; + НовыйФормат.Расширение = "xls"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматExcel; + + // Электронная таблица OpenDocument (.ods) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ODS; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ODS; + НовыйФормат.Расширение = "ods"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматOpenOfficeCalc; + + // Табличный документ (.mxl) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.MXL; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.MXL; + НовыйФормат.Расширение = "mxl"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматMXL; + + // Документ Word 2007 (.docx) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.DOCX; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.DOCX; + НовыйФормат.Расширение = "docx"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматWord2007; + + // Веб-страница (.html) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.HTML; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.HTML; + НовыйФормат.Расширение = "html"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматHTML; + + // Текстовый документ UTF-8 (.txt) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.TXT; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.TXT; + НовыйФормат.Расширение = "txt"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; + + // Текстовый документ ANSI (.txt) + НовыйФормат = ТаблицаФорматов.Добавить(); + НовыйФормат.ТипФайлаТабличногоДокумента = ТипФайлаТабличногоДокумента.ANSITXT; + НовыйФормат.Ссылка = Перечисления.ФорматыСохраненияОтчетов.ANSITXT; + НовыйФормат.Расширение = "txt"; + НовыйФормат.Картинка = БиблиотекаКартинок.ФорматTXT; + + // дополнительные форматы / изменение списка текущих + УправлениеПечатьюПереопределяемый.ПриЗаполненииНастроекФорматовСохраненияТабличногоДокумента(ТаблицаФорматов); + + Для Каждого ФорматСохранения Из ТаблицаФорматов Цикл + ФорматСохранения.Представление = Строка(ФорматСохранения.Ссылка); + КонецЦикла; + + Возврат ТаблицаФорматов; + +КонецФункции + diff --git a/SSL/src/CommonModules/УправлениеПечатью/УправлениеПечатью.mdo b/SSL/src/CommonModules/УправлениеПечатью/УправлениеПечатью.mdo index 2f17d776a..be40856f1 100644 --- a/SSL/src/CommonModules/УправлениеПечатью/УправлениеПечатью.mdo +++ b/SSL/src/CommonModules/УправлениеПечатью/УправлениеПечатью.mdo @@ -6,5 +6,6 @@ Управление печатью true - true + true + true diff --git a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl index 7474d9789..e02d7ce05 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюMSWordКлиент/Module.bsl @@ -28,7 +28,7 @@ // Создает COM соединение с COM объектом Word.Application, создает в нем // единственный документ. // -Функция ИнициализироватьПечатнуюФормуMSWord(НастройкиСтраницыМакета) Экспорт +Функция ИнициализироватьПечатнуюФормуMSWord(Макет) Экспорт Handler = Новый Структура("Тип", "DOC"); @@ -52,6 +52,16 @@ НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); КонецПопытки; + НастройкиСтраницыМакета = Макет; // для обратной совместимости (изменён тип входного параметра функции) + Если ТипЗнч(Макет) = Тип("Структура") Тогда + НастройкиСтраницыМакета = Макет.НастройкиСтраницыМакета; + // копирование стилей из макета + Макет.COMСоединение.ActiveDocument.Close(); + Handler.COMСоединение.ActiveDocument.CopyStylesFromTemplate(Макет.ИмяФайла); + Макет.COMСоединение.Documents.Open(Макет.ИмяФайла); + КонецЕсли; + + // копирование настроек страницы Если НастройкиСтраницыМакета <> Неопределено Тогда Для Каждого Настройка Из НастройкиСтраницыМакета Цикл Попытка @@ -135,9 +145,11 @@ Handler.COMСоединение = 0; + #Если Не ВебКлиент Тогда Если Handler.Свойство("ИмяФайла") Тогда УдалитьФайлы(Handler.ИмяФайла); КонецЕсли; + #КонецЕсли КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl new file mode 100644 index 000000000..a07b5a85e --- /dev/null +++ b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/Module.bsl @@ -0,0 +1,73 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Печать". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +//////////////////////////////////////////////////////////////////////////////// +// Работа с шаблонами офисных документов + +// Интерфейс для вызова из клиентских модулей печати форм по макетам офисных документов. +// +// Подробнее - см. описание УправлениеПечатью.ПолучитьМакетыИДанныеОбъектов(). +// +Функция ПолучитьМакетыИДанныеОбъектов(знач ИмяМенеджераПечати, знач ИменаМакетов, знач СоставДокументов) Экспорт + + Возврат УправлениеПечатью.ПолучитьМакетыИДанныеОбъектов(ИмяМенеджераПечати, ИменаМакетов, СоставДокументов); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Сформировать печатные формы для непосредственного вывода на принтер +// +// Подробнее - см. описание УправлениеПечатью.СформироватьПечатныеФормыДляБыстройПечати(). +// +Процедура СформироватьПечатныеФормыДляБыстройПечати(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, + ПараметрыПечати, ТабличныеДокументы, ОбъектыПечати, ПараметрыВывода, Отказ) Экспорт + + УправлениеПечатью.СформироватьПечатныеФормыДляБыстройПечати( + ИмяМенеджераПечати, + ИменаМакетов, + МассивОбъектов, + ПараметрыПечати, + ТабличныеДокументы, + ОбъектыПечати, + ПараметрыВывода, + Отказ + ); + +КонецПроцедуры + +// Сформировать печатные формы для непосредственного вывода на принтер в обычном приложении +// +// Подробнее - см. описание УправлениеПечатью.СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение(). +// +Процедура СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, + ПараметрыПечати, Адрес, ОбъектыПечати, ПараметрыВывода, Отказ) Экспорт + + УправлениеПечатью.СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение( + ИмяМенеджераПечати, + ИменаМакетов, + МассивОбъектов, + ПараметрыПечати, + Адрес, + ОбъектыПечати, + ПараметрыВывода, + Отказ + ); + +КонецПроцедуры + +// Сохраняет во временное хранилище путь к каталогу, который используется при печати. +// +// Подробнее - см. описание УправлениеПечатью.СохранитьЛокальныйКаталогФайловПечати(). +// +Процедура СохранитьЛокальныйКаталогФайловПечати(Каталог) Экспорт + + УправлениеПечатью.СохранитьЛокальныйКаталогФайловПечати(Каталог); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/УправлениеПечатьюВызовСервера.mdo b/SSL/src/CommonModules/УправлениеПечатьюВызовСервера/УправлениеПечатьюВызовСервера.mdo new file mode 100644 index 000000000..9e860be4a --- /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 93bd395f8..609b15ec6 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюКлиент/Module.bsl @@ -46,7 +46,7 @@ // Сформируем табличные документы #Если ТолстыйКлиентОбычноеПриложение Тогда - УправлениеПечатью.СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение( + УправлениеПечатьюВызовСервера.СформироватьПечатныеФормыДляБыстройПечатиОбычноеПриложение( ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ПараметрыПечати, Адрес, ОбъектыПечатиСоотв, ПараметрыВывода, Отказ); Если НЕ Отказ Тогда @@ -57,7 +57,7 @@ КонецЦикла; КонецЕсли; #Иначе - УправлениеПечатью.СформироватьПечатныеФормыДляБыстройПечати( + УправлениеПечатьюВызовСервера.СформироватьПечатныеФормыДляБыстройПечати( ИмяМенеджераПечати, ИменаМакетов, ПараметрКоманды, ПараметрыПечати, ТабличныеДокументы, ОбъектыПечати, ПараметрыВывода, Отказ); #КонецЕсли @@ -75,25 +75,27 @@ // Вывести табличные документы на принтер Процедура РаспечататьТабличныеДокументы(ТабличныеДокументы, ОбъектыПечати, - Знач ДоступнаПечатьПокомплектно) Экспорт + Знач ДоступнаПечатьПокомплектно, Знач КоличествоКопийКомплектов = 1) Экспорт #Если ВебКлиент Тогда ДоступнаПечатьПокомплектно = Ложь; #КонецЕсли Если ДоступнаПечатьПокомплектно Тогда - Для Каждого ОбъектПечати Из ОбъектыПечати Цикл - ИмяОбласти = ОбъектПечати.Представление; - Для Каждого Элемент Из ТабличныеДокументы Цикл - ТабДок = Элемент.Значение; - ОбластьПечати = ТабДок.Области.Найти(ИмяОбласти); - Если ОбластьПечати = Неопределено Тогда - Продолжить; - КонецЕсли; - ОбластьПечатиПользователя = ТабДок.ОбластьПечати; - ТабДок.ОбластьПечати = ОбластьПечати; - ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать); - ТабДок.ОбластьПечати = ОбластьПечатиПользователя; + Для НомерКопииКомплекта = 1 По КоличествоКопийКомплектов Цикл + Для Каждого ОбъектПечати Из ОбъектыПечати Цикл + ИмяОбласти = ОбъектПечати.Представление; + Для Каждого Элемент Из ТабличныеДокументы Цикл + ТабДок = Элемент.Значение; + ОбластьПечати = ТабДок.Области.Найти(ИмяОбласти); + Если ОбластьПечати = Неопределено Тогда + Продолжить; + КонецЕсли; + ОбластьПечатиПользователя = ТабДок.ОбластьПечати; + ТабДок.ОбластьПечати = ОбластьПечати; + ТабДок.Напечатать(РежимИспользованияДиалогаПечати.НеИспользовать); + ТабДок.ОбластьПечати = ОбластьПечатиПользователя; + КонецЦикла; КонецЦикла; КонецЦикла; Иначе @@ -243,7 +245,8 @@ Функция ИнициализироватьПечатнуюФорму(знач ТипДокумента, знач НастройкиСтраницыМакета = Неопределено, Макет = Неопределено) Экспорт Если ВРег(ТипДокумента) = "DOC" Тогда - ПечатнаяФорма = УправлениеПечатьюMSWordКлиент.ИнициализироватьПечатнуюФормуMSWord(НастройкиСтраницыМакета); + Параметр = ?(Макет = Неопределено, НастройкиСтраницыМакета, Макет); // для обратной совместимости + ПечатнаяФорма = УправлениеПечатьюMSWordКлиент.ИнициализироватьПечатнуюФормуMSWord(Параметр); ПечатнаяФорма.Вставить("Тип", "DOC"); ПечатнаяФорма.Вставить("ПоследняяВыведеннаяОбласть", Неопределено); Возврат ПечатнаяФорма; diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl index 830d85718..4988f08c4 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/Module.bsl @@ -30,3 +30,20 @@ Возврат Ложь; КонецФункции + +// Переопределяет таблицу возможных форматов для сохранения табличного документа. +// Вызывается из ОбщегоНазначения.НастройкиФорматовСохраненияТабличногоДокумента() +// +// Параметры +// ТаблицаФорматов - ТаблицаЗначений: +// ТипФайлаТабличногоДокумента - ТипФайлаТабличногоДокумента - значение в платформе, соответствующее формату; +// Ссылка - ПеречислениеСсылка.ФорматыСохраненияОтчетов - ссылка на метаданные, где хранится представление; +// Представление - Строка - - представление типа файла (заполняется из перечисления); +// Расширение - Строка - - тип файла для операционной системы; +// Картинка - Картинка - значок формата. +// +Процедура ПриЗаполненииНастроекФорматовСохраненияТабличногоДокумента(ТаблицаФорматов) Экспорт + +КонецПроцедуры + + diff --git a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/УправлениеПечатьюПереопределяемый.mdo b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/УправлениеПечатьюПереопределяемый.mdo index fcfc0420b..9a24769df 100644 --- a/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/УправлениеПечатьюПереопределяемый.mdo +++ b/SSL/src/CommonModules/УправлениеПечатьюПереопределяемый/УправлениеПечатьюПереопределяемый.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl index 8cfdb0fa1..e842e3233 100644 --- a/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствами/Module.bsl @@ -1,41 +1,54 @@ //////////////////////////////////////////////////////////////////////////////// -// Подсистема "Свойства" +// Подсистема "Свойства". // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Создает реквизиты и поля формы, необходимые для работы. +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для стандартной обработки дополнительных реквизитов. + +// Создает основные реквизиты и поля формы, необходимые для работы. +// Заполняет дополнительные реквизиты, если используются. // Вызывается из обработчика ПриСозданииНаСервере формы объекта со свойствами // // Параметры: -// Форма - УправляемаяФорма. -// Объект - ДанныеФормыСтруктура. -// ИмяЭлементаДляРазмещения - Строка - имя группы формы, в которой будут размещены свойства. +// Форма - УправляемаяФорма. // -Процедура ПриСозданииНаСервере(Форма, Объект, ИмяЭлементаДляРазмещения = Неопределено) Экспорт +// Объект - Неопределено - взять объект из реквизита формы Объект. +// ДанныеФормыСтруктура (по типу объекта). +// +// ИмяЭлементаДляРазмещения - Строка - имя группы формы, в которой будут размещены свойства. +// +// ПроизвольныйОбъект - Булево, если Истина, тогда в форме создается таблица описания дополнительных реквизитов +// параметр Объект игнорируется, дополнительные реквизиты не создаются и не заполняются. +// +// Это востребовано при последовательном использовании одной формы для просмотра или редактирования +// дополнительных реквизитов разных объектов (в том числе разных типов). +// +// После выполнения ПриСозданииНаСервере следует вызывать ЗаполнитьДополнительныеРеквизитыВФорме() +// для добавления и заполнения дополнительных реквизитов. +// Чтобы сохранить изменения следует вызвать ПеренестиЗначенияИзРеквизитовФормыВОбъект(), +// а для обновления состава реквизитов вызвать ОбновитьЭлементыДополнительныхРеквизитов(). +// +Процедура ПриСозданииНаСервере(Форма, Объект = Неопределено, ИмяЭлементаДляРазмещения = "", ПроизвольныйОбъект = Ложь) Экспорт - ИспользоватьДопРеквизиты = ИспользоватьДопРеквизиты(Объект.Ссылка); - - Если ЗначениеЗаполнено(Объект.Ссылка) Тогда - НаборСвойствОбъекта = ПолучитьДоступныеНаборыСвойств(Объект.Ссылка); + Если ПроизвольныйОбъект Тогда + СоздатьОписаниеДополнительныхРеквизитов = Истина; Иначе - ИмяТипа = ОбщегоНазначения.ВидОбъектаПоСсылке(Объект.Ссылка) + "Объект." + Объект.Ссылка.Метаданные().Имя; - ОбъектЗначение = ДанныеФормыВЗначение(Объект, Тип(ИмяТипа)); - НаборСвойствОбъекта = ПолучитьДоступныеНаборыСвойств(ОбъектЗначение); + Если Объект = Неопределено Тогда + ОписаниеОбъекта = Форма.Объект; + Иначе + ОписаниеОбъекта = Объект; + КонецЕсли; + СоздатьОписаниеДополнительныхРеквизитов = ИспользоватьДопРеквизиты(ОписаниеОбъекта.Ссылка); КонецЕсли; - СоздатьОсновныеОбъектыФормы(Форма, ИмяЭлементаДляРазмещения, НаборСвойствОбъекта, ИспользоватьДопРеквизиты); + СоздатьОсновныеОбъектыФормы(Форма, ИмяЭлементаДляРазмещения, СоздатьОписаниеДополнительныхРеквизитов); - Если Не Форма.Свойства_ИспользоватьСвойства Тогда - Возврат; - КонецЕсли; - - Форма.Свойства_ОсновнойНабор = НаборСвойствОбъекта; - - Если ИспользоватьДопРеквизиты Тогда - ЗаполнитьДополнительныеРеквизитыНаФорме(Форма, Объект, НаборСвойствОбъекта); + Если НЕ ПроизвольныйОбъект Тогда + ЗаполнитьДополнительныеРеквизитыВФорме(Форма, ОписаниеОбъекта); КонецЕсли; КонецПроцедуры @@ -45,19 +58,44 @@ // // Параметры: // Форма - УправляемаяФорма. -// ТекущийОбъект - Объект. +// ТекущийОбъект - <ВидОбъектаМетаданных>Объект.<ИмяОбъектаМетаданных>. // -Процедура ПередЗаписьюНаСервере(Форма, ТекущийОбъект) Экспорт +Процедура ПриЧтенииНаСервере(Форма, ТекущийОбъект) Экспорт - Если Форма.Свойства_ИспользоватьСвойства И Форма.Свойства_ИспользоватьДопРеквизиты Тогда - // Перенос значений дополнительных реквизитов из реквизитов формы в объект. - ПеренестиЗначенияСвойствИзРеквизитовФормы(Форма, ТекущийОбъект); + Структура = Новый Структура("Свойства_ИспользоватьСвойства"); + ЗаполнитьЗначенияСвойств(Структура, Форма); + + Если ТипЗнч(Структура.Свойства_ИспользоватьСвойства) = Тип("Булево") Тогда + ЗаполнитьДополнительныеРеквизитыВФорме(Форма, ТекущийОбъект); КонецЕсли; КонецПроцедуры -// Обновляет отображаемые данные на форме объекта со свойствами. -Процедура ОбновитьЭлементыДополнительныхРеквизитов(Форма, Объект) Экспорт +// Заполняет объект из реквизитов, созданных в форме. +// Вызывается из обработчика ПередЗаписьюНаСервере формы объекта со свойствами. +// +// Параметры: +// Форма - УправляемаяФорма, предварительно настроенная в процедуре +// УправлениеСвойствами.ПриСозданииНаСервере() +// +// ТекущийОбъект - Объект. +// +Процедура ПередЗаписьюНаСервере(Форма, ТекущийОбъект) Экспорт + + ПеренестиЗначенияИзРеквизитовФормыВОбъект(Форма, ТекущийОбъект); + +КонецПроцедуры + +// Проверяет заполненность реквизитов обязательных для заполнения. +// +// Параметры: +// Форма - УправляемаяФорма, предварительно настроенная в процедуре +// УправлениеСвойствами.ПриСозданииНаСервере(). +// +// Отказ - параметр обработчика ОбработкаПроверкиЗаполненияНаСервере(). +// ПроверяемыеРеквизиты - параметр обработчика ОбработкаПроверкиЗаполненияНаСервере(). +// +Процедура ОбработкаПроверкиЗаполнения(Форма, Отказ, ПроверяемыеРеквизиты) Экспорт Если НЕ Форма.Свойства_ИспользоватьСвойства ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда @@ -65,12 +103,21 @@ Возврат; КонецЕсли; - НаборСвойствОбъекта = ПолучитьДоступныеНаборыСвойств(Объект); - Форма.Свойства_ОсновнойНабор = НаборСвойствОбъекта; + Ошибки = Неопределено; - ПеренестиЗначенияСвойствИзРеквизитовФормы(Форма, Объект); + Для каждого Строка Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл + Если Строка.ЗаполнятьОбязательно Тогда + Если НЕ ЗначениеЗаполнено(Форма[Строка.ИмяРеквизитаЗначение]) Тогда + + ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, + Строка.ИмяРеквизитаЗначение, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Поле ""%1"" не заполнено.'"), Строка.Наименование)); + КонецЕсли; + КонецЕсли; + КонецЦикла; - ЗаполнитьДополнительныеРеквизитыНаФорме(Форма, Объект, НаборСвойствОбъекта) + ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); КонецПроцедуры @@ -83,16 +130,18 @@ // ВидОбъекта - Объект, запись которого выполняется. // ИмяОбъектаСоСвойствами - Строка - имя объекта со свойствами вид которого записывается. // -Процедура ПередЗаписьюВидаОбъекта(ВидОбъекта, ИмяОбъектаСоСвойствами) Экспорт +Процедура ПередЗаписьюВидаОбъекта(ВидОбъекта, + ИмяОбъектаСоСвойствами, + ИмяРеквизитаНабораСвойств = "НаборСвойств") Экспорт - Если Не ЗначениеЗаполнено(ВидОбъекта.НаборСвойств) Тогда + Если Не ЗначениеЗаполнено(ВидОбъекта[ИмяРеквизитаНабораСвойств]) Тогда ОбъектНабора = Справочники.НаборыДополнительныхРеквизитовИСведений.СоздатьЭлемент(); Иначе Если Не НаборСвойствНужноИзменить(ВидОбъекта) Тогда Возврат; КонецЕсли; - ОбъектНабора = ВидОбъекта.НаборСвойств.ПолучитьОбъект(); + ОбъектНабора = ВидОбъекта[ИмяРеквизитаНабораСвойств].ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ОбъектНабора.Ссылка); КонецЕсли; @@ -100,7 +149,312 @@ ОбъектНабора.Родитель = Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяОбъектаСоСвойствами]; ОбъектНабора.ПометкаУдаления = ВидОбъекта.ПометкаУдаления; ОбъектНабора.Записать(); - ВидОбъекта.НаборСвойств = ОбъектНабора.Ссылка; + ВидОбъекта[ИмяРеквизитаНабораСвойств] = ОбъектНабора.Ссылка; + +КонецПроцедуры + +// Обновляет отображаемые данные на форме объекта со свойствами. +// +// Параметры: +// Форма - УправляемаяФорма, предварительно настроенная в процедуре +// УправлениеСвойствами.ПриСозданииНаСервере() +// +// Объект - Неопределено - взять объект из реквизита формы Объект. +// Объект - СправочникОбъект, ДокументОбъект, ... +// ДанныеФормыСтруктура (по типу объекта). +// +Процедура ОбновитьЭлементыДополнительныхРеквизитов(Форма, Объект = Неопределено) Экспорт + + ПеренестиЗначенияИзРеквизитовФормыВОбъект(Форма, Объект); + + ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для нестандартной обработки дополнительных свойств. + +// Создает/пересоздает дополнительные реквизиты и элементы в форме владельца свойств. +// +// Параметры: +// Форма - УправляемаяФорма, предварительно настроенная в процедуре +// УправлениеСвойствами.ПриСозданииНаСервере() +// +// Объект - Неопределено - взять объект из реквизита формы Объект. +// Объект - СправочникОбъект, ДокументОбъект, ... +// ДанныеФормыСтруктура (по типу объекта). +// +Процедура ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект = Неопределено) Экспорт + + Если НЕ Форма.Свойства_ИспользоватьСвойства + ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда + Возврат; + КонецЕсли; + + Если Объект = Неопределено Тогда + ОписаниеОбъекта = Форма.Объект; + Иначе + ОписаниеОбъекта = Объект; + КонецЕсли; + + Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта = Новый СписокЗначений; + НаборыСвойствОбъекта = ПолучитьНаборыСвойствОбъекта(ОписаниеОбъекта); + + Для каждого Строка Из НаборыСвойствОбъекта Цикл + Если ВидыСвойствНабора(Строка.Набор).ДополнительныеРеквизиты Тогда + + Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта.Добавить( + Строка.Набор, Строка.Заголовок); + КонецЕсли; + КонецЦикла; + + ОписаниеСвойств = ПолучитьТаблицуЗначенийСвойств( + ОписаниеОбъекта.ДополнительныеРеквизиты.Выгрузить(), + Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта, + Ложь); + + ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаЗначение"); + ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаСвойство"); + ОписаниеСвойств.Колонки.Добавить("ИмяУникальнаяЧасть"); + ОписаниеСвойств.Колонки.Добавить("Булево"); + + УдалитьСтарыеРеквизитыИЭлементы(Форма); + + // Создание реквизитов. + ДобавляемыеРеквизиты = Новый Массив(); + Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл + + ТипЗначенияСвойства = ОписаниеСвойства.ТипЗначения; + + // Поддержка строк неограниченной длины. + Если ИспользоватьНеограниченнуюСтроку(ТипЗначенияСвойства, ОписаниеСвойства.МногострочноеПолеВвода) Тогда + ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); + КонецЕсли; + + ОписаниеСвойства.ИмяУникальнаяЧасть = + СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Набор.УникальныйИдентификатор())), "-", "x") + + "_" + + СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор())), "-", "x"); + + ОписаниеСвойства.ИмяРеквизитаЗначение = + "ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть; + + Если ОписаниеСвойства.Удалено Тогда + ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); + КонецЕсли; + + Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , ОписаниеСвойства.Наименование, Истина); + + ДобавляемыеРеквизиты.Добавить(Реквизит); + + ОписаниеСвойства.ИмяРеквизитаСвойство = ""; + Если ТипЗначенияСодержитЗначенияСвойств(ТипЗначенияСвойства) Тогда + + ОписаниеСвойства.ИмяРеквизитаСвойство = + "ДополнительныйРеквизитСвойство_" + ОписаниеСвойства.ИмяУникальнаяЧасть; + + Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаСвойство, Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), , , Истина); + ДобавляемыеРеквизиты.Добавить(Реквизит); + КонецЕсли; + + ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево")); + + КонецЦикла; + Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); + + // Создание элементов формы. + ИмяЭлементаДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения; + ЭлементРазмещения = ?(ИмяЭлементаДляРазмещения = "", Неопределено, Форма.Элементы[ИмяЭлементаДляРазмещения]); + + Для Каждого ОписаниеСвойства Из ОписаниеСвойств Цикл + + ЗаполнитьЗначенияСвойств( + Форма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить(), ОписаниеСвойства); + + Форма[ОписаниеСвойства.ИмяРеквизитаЗначение] = ОписаниеСвойства.Значение; + + Если НаборыСвойствОбъекта.Количество() > 1 Тогда + + ЭлементСписка = Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.НайтиПоЗначению( + ОписаниеСвойства.Набор); + + Если ЭлементСписка <> Неопределено Тогда + Родитель = Форма.Элементы[ЭлементСписка.Представление]; + Иначе + ОписаниеНабора = НаборыСвойствОбъекта.Найти(ОписаниеСвойства.Набор, "Набор"); + + Если ОписаниеНабора = Неопределено Тогда + ОписаниеНабора = НаборыСвойствОбъекта.Добавить(); + ОписаниеНабора.Набор = ОписаниеСвойства.Набор; + ОписаниеНабора.Заголовок = НСтр("ru = 'Удаленные реквизиты'") + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(ОписаниеНабора.Заголовок) Тогда + ОписаниеНабора.Заголовок = Строка(ОписаниеСвойства.Набор); + КонецЕсли; + + ИмяЭлементаНабора = "НаборДополнительныхРеквизитов" + ОписаниеСвойства.ИмяУникальнаяЧасть; + + Родитель = Форма.Элементы.Добавить(ИмяЭлементаНабора, Тип("ГруппаФормы"), ЭлементРазмещения); + + Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.Добавить( + ОписаниеСвойства.Набор, Родитель.Имя); + + Если ТипЗнч(ЭлементРазмещения) = Тип("ГруппаФормы") + И ЭлементРазмещения.Вид = ВидГруппыФормы.Страницы Тогда + + Родитель.Вид = ВидГруппыФормы.Страница; + Иначе + Родитель.Вид = ВидГруппыФормы.ОбычнаяГруппа; + Родитель.Отображение = ОтображениеОбычнойГруппы.Нет; + КонецЕсли; + Родитель.ОтображатьЗаголовок = Ложь; + + ЗаполненныеСвойстваГруппы = Новый Структура; + Для каждого Колонка Из НаборыСвойствОбъекта.Колонки Цикл + Если ОписаниеНабора[Колонка.Имя] <> Неопределено Тогда + ЗаполненныеСвойстваГруппы.Вставить(Колонка.Имя, ОписаниеНабора[Колонка.Имя]); + КонецЕсли; + КонецЦикла; + ЗаполнитьЗначенияСвойств(Родитель, ЗаполненныеСвойстваГруппы); + КонецЕсли; + Иначе + Родитель = ЭлементРазмещения; + КонецЕсли; + + Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель); + + Если ОписаниеСвойства.Булево И ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда + Элемент.Вид = ВидПоляФормы.ПолеФлажка + Иначе + Элемент.Вид = ВидПоляФормы.ПолеВвода; + Элемент.АвтоОтметкаНезаполненного = ОписаниеСвойства.ЗаполнятьОбязательно; + КонецЕсли; + + Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение; + Элемент.Подсказка = ОписаниеСвойства.Свойство.Подсказка; + + Если ОписаниеСвойства.Свойство.МногострочноеПолеВвода > 0 Тогда + Элемент.МногострочныйРежим = Истина; + Элемент.Высота= ОписаниеСвойства.Свойство.МногострочноеПолеВвода; + КонецЕсли; + + Если НЕ ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда + Элемент.Формат = ОписаниеСвойства.ФорматСвойства; + Элемент.ФорматРедактирования = ОписаниеСвойства.ФорматСвойства; + КонецЕсли; + + Если ОписаниеСвойства.Удалено Тогда + Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.НедоступныеДанныеЦвет; + Элемент.ШрифтЗаголовка = ШрифтыСтиля.УдаленныйДополнительныйРеквизитШрифт; + Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда + Элемент.КнопкаОчистки = Истина; + Элемент.КнопкаВыбора = Ложь; + Элемент.КнопкаОткрытия = Ложь; + Элемент.КнопкаСпискаВыбора = Ложь; + Элемент.РедактированиеТекста = Ложь; + КонецЕсли; + КонецЕсли; + + Если ОписаниеСвойства.ИмяРеквизитаСвойство <> "" Тогда + Связь = Новый СвязьПараметраВыбора("Отбор.Владелец", ОписаниеСвойства.ИмяРеквизитаСвойство); + Связи = Новый Массив; + Связи.Добавить(Связь); + Элемент.СвязиПараметровВыбора = Новый ФиксированныйМассив(Связи); + Форма[ОписаниеСвойства.ИмяРеквизитаСвойство] = ОписаниеСвойства.Свойство; + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Переносит значения свойств из реквизитов формы в табличную часть объекта. +// +// Параметры: +// Форма - УправляемаяФорма, предварительно настроенная в процедуре +// УправлениеСвойствами.ПриСозданииНаСервере() +// +// Объект - Неопределено - взять объект из реквизита формы Объект. +// Объект - СправочникОбъект, ДокументОбъект, ... +// ДанныеФормыСтруктура (по типу объекта). +// +Процедура ПеренестиЗначенияИзРеквизитовФормыВОбъект(Форма, Объект = Неопределено) Экспорт + + Если НЕ Форма.Свойства_ИспользоватьСвойства + ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда + + Возврат; + КонецЕсли; + + Если Объект = Неопределено Тогда + ОписаниеОбъекта = Форма.Объект; + Иначе + ОписаниеОбъекта = Объект; + КонецЕсли; + + СтарыеЗначения = ОписаниеОбъекта.ДополнительныеРеквизиты.Выгрузить(); + ОписаниеОбъекта.ДополнительныеРеквизиты.Очистить(); + + Для каждого Строка Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл + + Значение = Форма[Строка.ИмяРеквизитаЗначение]; + + Если ЗначениеЗаполнено(Значение) Тогда + Если ТипЗнч(Значение) = Тип("Булево") И Значение = Ложь Тогда + Продолжить; + КонецЕсли; + + Если Строка.Удалено Тогда + ЗаполнитьЗначенияСвойств( + ОписаниеОбъекта.ДополнительныеРеквизиты.Добавить(), + СтарыеЗначения.Найти(Строка.Свойство, "Свойство")); + Продолжить; + КонецЕсли; + + НоваяСтрока = ОписаниеОбъекта.ДополнительныеРеквизиты.Добавить(); + НоваяСтрока.Свойство = Строка.Свойство; + НоваяСтрока.Значение = Значение; + + // Поддержка строк неограниченной длины. + Свойство = Строка.Свойство.ПолучитьОбъект(); + Если ИспользоватьНеограниченнуюСтроку(Свойство.ТипЗначения, Свойство.МногострочноеПолеВвода) Тогда + НоваяСтрока.ТекстоваяСтрока = Значение; + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Удаляет старые реквизиты и элементы формы. +// +// Параметры: +// Форма - УправляемаяФорма, предварительно настроенная в процедуре +// УправлениеСвойствами.ПриСозданииНаСервере() +// +Процедура УдалитьСтарыеРеквизитыИЭлементы(Форма) Экспорт + + УдаляемыеРеквизиты = Новый Массив; + Для каждого ОписаниеСвойства Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл + + УдаляемыеРеквизиты.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение); + Если Не ПустаяСтрока(ОписаниеСвойства.ИмяРеквизитаСвойство) Тогда + УдаляемыеРеквизиты.Добавить(ОписаниеСвойства.ИмяРеквизитаСвойство); + КонецЕсли; + + Форма.Элементы.Удалить(Форма.Элементы[ОписаниеСвойства.ИмяРеквизитаЗначение]); + + КонецЦикла; + + Если УдаляемыеРеквизиты.Количество() > 0 Тогда + Форма.ИзменитьРеквизиты(, УдаляемыеРеквизиты); + КонецЕсли; + + Для каждого ЭлементСписка Из Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов Цикл + Форма.Элементы.Удалить(Форма.Элементы[ЭлементСписка.Представление]); + КонецЦикла; + + Форма.Свойства_ОписаниеДополнительныхРеквизитов.Очистить(); + Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.Очистить(); КонецПроцедуры @@ -120,14 +474,9 @@ Возврат Новый Массив; КонецЕсли; - НаборСвойств = ПолучитьДоступныеНаборыСвойств(ВладелецСвойств); + НаборыСвойствОбъекта = ПолучитьНаборыСвойствОбъекта(ВладелецСвойств); - Если ТипЗнч(НаборСвойств) = Тип("СписокЗначений") Тогда - МассивСвойств = НаборСвойств.ВыгрузитьЗначения(); - Иначе // элемент справочника - МассивСвойств = Новый Массив; - МассивСвойств.Добавить(НаборСвойств); - КонецЕсли; + МассивНаборовСвойствОбъекта = НаборыСвойствОбъекта.ВыгрузитьКолонку("Набор"); ТекстЗапросаДопРеквизиты = "ВЫБРАТЬ @@ -135,7 +484,7 @@ |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК ТаблицаСвойств |ГДЕ - | ТаблицаСвойств.Ссылка В (&МассивСвойств)"; + | ТаблицаСвойств.Ссылка В (&МассивНаборовСвойствОбъекта)"; ТекстЗапросаДопСведения = "ВЫБРАТЬ РАЗРЕШЕННЫЕ @@ -143,7 +492,7 @@ |ИЗ | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК ТаблицаСвойств |ГДЕ - | ТаблицаСвойств.Ссылка В (&МассивСвойств)"; + | ТаблицаСвойств.Ссылка В (&МассивНаборовСвойствОбъекта)"; Запрос = Новый Запрос; @@ -160,7 +509,7 @@ Запрос.Текст = ТекстЗапросаДопСведения; КонецЕсли; - Запрос.Параметры.Вставить("МассивСвойств", МассивСвойств); + Запрос.Параметры.Вставить("МассивНаборовСвойствОбъекта", МассивНаборовСвойствОбъекта); Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Свойство"); @@ -284,17 +633,30 @@ // Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения. // // Возвращаемое значение: -// Массив значений типа СправочникСсылка.ЗначенияСвойствОбъектов. +// Массив значений типа СправочникСсылка.ЗначенияСвойствОбъектов +// или типа СправочникСсылка.ЗначенияСвойствОбъектовИерархия. // Функция ПолучитьСписокЗначенийСвойств(Свойство) Экспорт - ТексЗапроса = - "ВЫБРАТЬ - | Ссылка КАК Ссылка - |ИЗ - | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов - |ГДЕ - | ЗначенияСвойствОбъектов.Владелец = &Свойство"; + ТипЗначения = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Свойство, "ТипЗначения"); + + Если ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")) Тогда + ТексЗапроса = + "ВЫБРАТЬ + | Ссылка КАК Ссылка + |ИЗ + | Справочник.ЗначенияСвойствОбъектовИерархия КАК ЗначенияСвойствОбъектов + |ГДЕ + | ЗначенияСвойствОбъектов.Владелец = &Свойство"; + Иначе + ТексЗапроса = + "ВЫБРАТЬ + | Ссылка КАК Ссылка + |ИЗ + | Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов + |ГДЕ + | ЗначенияСвойствОбъектов.Владелец = &Свойство"; + КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = ТексЗапроса; @@ -406,8 +768,10 @@ // Функция ИспользоватьДопСведения(ВладелецСвойств) Экспорт - Возврат Метаданные.НайтиПоПолномуИмени("ОбщаяКоманда.ДополнительныеСведения") <> Неопределено - И Метаданные.ОбщиеКоманды.ДополнительныеСведения.ТипПараметраКоманды.Типы().Найти(ТипЗнч(ВладелецСвойств)) <> Неопределено; + Возврат Метаданные.НайтиПоПолномуИмени("ОбщаяКоманда.ДополнительныеСведенияКоманднаяПанель") <> Неопределено + И Метаданные.ОбщиеКоманды.ДополнительныеСведенияКоманднаяПанель.ТипПараметраКоманды.Типы().Найти(ТипЗнч(ВладелецСвойств)) <> Неопределено + ИЛИ Метаданные.НайтиПоПолномуИмени("ОбщаяКоманда.ДополнительныеСведенияПанельНавигации") <> Неопределено + И Метаданные.ОбщиеКоманды.ДополнительныеСведенияПанельНавигации.ТипПараметраКоманды.Типы().Найти(ТипЗнч(ВладелецСвойств)) <> Неопределено; КонецФункции @@ -474,97 +838,160 @@ КонецПроцедуры -// Возвращает список наборов доступных свойств владельца. +// Возвращает таблицу наборов доступных свойств владельца. // // Параметры: -// ВладелецСвойств - Ссылка или Объект владельца свойств. +// ВладелецСвойств - Ссылка на владельца свойств. +// Объект владельца свойств. +// ДанныеФормыСтруктура (по типу объекта владельца свойств). // -Функция ПолучитьДоступныеНаборыСвойств(ВладелецСвойств) Экспорт +Функция ПолучитьНаборыСвойствОбъекта(ВладелецСвойств) Экспорт - ДоступныеНаборы = УправлениеСвойствамиПереопределяемый.ПолучитьДоступныеНаборыСвойствПоОбъекту(ВладелецСвойств); - - Если ДоступныеНаборы = Неопределено Тогда - Возврат ПолучитьОсновнойНаборСвойствДляОбъекта(ВладелецСвойств); - Иначе - Возврат ДоступныеНаборы; - КонецЕсли; + Если ТипЗнч(ВладелецСвойств) = Тип("ДанныеФормыСтруктура") Тогда + ТипСсылки = ТипЗнч(ВладелецСвойств.Ссылка) + ИначеЕсли ОбщегоНазначения.ЭтоСсылка(ТипЗнч(ВладелецСвойств)) Тогда + ТипСсылки = ТипЗнч(ВладелецСвойств); + Иначе + ТипСсылки = ТипЗнч(ВладелецСвойств.Ссылка) + КонецЕсли; + + ПолучатьОсновнойНабор = Истина; + + НаборыСвойств = Новый ТаблицаЗначений; + НаборыСвойств.Колонки.Добавить("Набор"); + НаборыСвойств.Колонки.Добавить("Высота"); + НаборыСвойств.Колонки.Добавить("Заголовок"); + НаборыСвойств.Колонки.Добавить("Подсказка"); + НаборыСвойств.Колонки.Добавить("РастягиватьПоВертикали"); + НаборыСвойств.Колонки.Добавить("РастягиватьПоГоризонтали"); + НаборыСвойств.Колонки.Добавить("ТолькоПросмотр"); + НаборыСвойств.Колонки.Добавить("ЦветТекстаЗаголовка"); + НаборыСвойств.Колонки.Добавить("Ширина"); + НаборыСвойств.Колонки.Добавить("ШрифтЗаголовка"); + НаборыСвойств.Колонки.Добавить("Группировка"); + НаборыСвойств.Колонки.Добавить("Отображение"); + НаборыСвойств.Колонки.Добавить("ШиринаПодчиненныхЭлементов"); + НаборыСвойств.Колонки.Добавить("Картинка"); + НаборыСвойств.Колонки.Добавить("ОтображатьЗаголовок"); + + УправлениеСвойствамиПереопределяемый.ЗаполнитьНаборыСвойствОбъекта(ВладелецСвойств, ТипСсылки, НаборыСвойств, ПолучатьОсновнойНабор); + + Если НаборыСвойств.Количество() = 0 + И ПолучатьОсновнойНабор = Истина Тогда + + ОсновнойНабор = ПолучитьОсновнойНаборСвойствДляОбъекта(ВладелецСвойств); + + Если ЗначениеЗаполнено(ОсновнойНабор) Тогда + НаборыСвойств.Добавить().Набор = ОсновнойНабор; + КонецЕсли; + КонецЕсли; + + Возврат НаборыСвойств; + КонецФункции // Возвращает заполненную таблицу значений свойств объекта. -Функция ПолучитьТаблицуЗначенийСвойств(ДополнительныеСвойстваОбъекта, Набор, ЭтоДополнительноеСведение) Экспорт +Функция ПолучитьТаблицуЗначенийСвойств(ДополнительныеСвойстваОбъекта, Наборы, ЭтоДополнительноеСведение) Экспорт Свойства = ДополнительныеСвойстваОбъекта.ВыгрузитьКолонку("Свойство"); - ТекстЗапроса = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ - | НаборыСвойствДополнительныеРеквизиты.Свойство КАК Свойство, - | МИНИМУМ(НаборыСвойствДополнительныеРеквизиты.НомерСтроки) КАК Порядок - |ПОМЕСТИТЬ ВсеСвойстваНабора + НаборыСвойств = Новый ТаблицаЗначений; + + НаборыСвойств.Колонки.Добавить( + "Набор", Новый ОписаниеТипов("СправочникСсылка.НаборыДополнительныхРеквизитовИСведений")); + + НаборыСвойств.Колонки.Добавить( + "ПорядокНабора", Новый ОписаниеТипов("Число")); + + Для каждого ЭлементСписка Из Наборы Цикл + НоваяСтрока = НаборыСвойств.Добавить(); + НоваяСтрока.Набор = ЭлементСписка.Значение; + НоваяСтрока.ПорядокНабора = Наборы.Индекс(ЭлементСписка); + КонецЦикла; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Свойства", Свойства); + Запрос.УстановитьПараметр("НаборыСвойств", НаборыСвойств); + + Запрос.Текст = + "ВЫБРАТЬ + | НаборыСвойств.Набор, + | НаборыСвойств.ПорядокНабора + |ПОМЕСТИТЬ НаборыСвойств |ИЗ - | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК НаборыСвойствДополнительныеРеквизиты - |ГДЕ - | НаборыСвойствДополнительныеРеквизиты.Ссылка В(&Набор) - | И (НЕ НаборыСвойствДополнительныеРеквизиты.Ссылка.ПометкаУдаления) - | И (НЕ НаборыСвойствДополнительныеРеквизиты.Ссылка.ЭтоГруппа) - | И (НЕ &ЭтоДополнительноеСведение) - | - |СГРУППИРОВАТЬ ПО - | НаборыСвойствДополнительныеРеквизиты.Свойство - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | НаборыСвойствДополнительныеСведения.Свойство, - | МИНИМУМ(НаборыСвойствДополнительныеСведения.НомерСтроки) - |ИЗ - | Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК НаборыСвойствДополнительныеСведения - |ГДЕ - | НаборыСвойствДополнительныеСведения.Ссылка В(&Набор) - | И (НЕ НаборыСвойствДополнительныеСведения.Ссылка.ПометкаУдаления) - | И (НЕ НаборыСвойствДополнительныеСведения.Ссылка.ЭтоГруппа) - | И &ЭтоДополнительноеСведение - | - |СГРУППИРОВАТЬ ПО - | НаборыСвойствДополнительныеСведения.Свойство - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | ДополнительныеРеквизитыИСведения.Ссылка КАК Свойство - |ПОМЕСТИТЬ ЗаполненныеСвойства - |ИЗ - | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения - |ГДЕ - | ДополнительныеРеквизитыИСведения.Ссылка В(&Свойства) + | &НаборыСвойств КАК НаборыСвойств |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ - | ВсеСвойстваНабора.Свойство, - | ВсеСвойстваНабора.Порядок, + | НаборыСвойств.Набор, + | НаборыСвойств.ПорядокНабора, + | СвойстваНаборов.Свойство, + | СвойстваНаборов.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно, + | СвойстваНаборов.НомерСтроки КАК ПорядокСвойства + |ПОМЕСТИТЬ СвойстваНаборов + |ИЗ + | НаборыСвойств КАК НаборыСвойств + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов + | ПО (СвойстваНаборов.Ссылка = НаборыСвойств.Набор) + | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + | ПО (СвойстваНаборов.Свойство = Свойства.Ссылка) + |ГДЕ + | НЕ Свойства.ПометкаУдаления + | И НЕ Свойства.ЭтоГруппа + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | Свойства.Ссылка КАК Свойство + |ПОМЕСТИТЬ ЗаполненныеСвойства + |ИЗ + | ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства + |ГДЕ + | Свойства.Ссылка В(&Свойства) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ + | СвойстваНаборов.Набор, + | СвойстваНаборов.ПорядокНабора, + | СвойстваНаборов.Свойство, + | СвойстваНаборов.ЗаполнятьОбязательно, + | СвойстваНаборов.ПорядокСвойства, | ЛОЖЬ КАК Удалено |ПОМЕСТИТЬ ВсеСвойства |ИЗ - | ВсеСвойстваНабора КАК ВсеСвойстваНабора + | СвойстваНаборов КАК СвойстваНаборов | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ + | ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка), + | 0, | ЗаполненныеСвойства.Свойство, | 0, + | 0, | ИСТИНА |ИЗ | ЗаполненныеСвойства КАК ЗаполненныеСвойства - | ЛЕВОЕ СОЕДИНЕНИЕ ВсеСвойстваНабора КАК ВсеСвойстваНабора - | ПО ЗаполненныеСвойства.Свойство = ВсеСвойстваНабора.Свойство + | ЛЕВОЕ СОЕДИНЕНИЕ СвойстваНаборов КАК СвойстваНаборов + | ПО ЗаполненныеСвойства.Свойство = СвойстваНаборов.Свойство |ГДЕ - | ВсеСвойстваНабора.Свойство ЕСТЬ NULL + | СвойстваНаборов.Свойство ЕСТЬ NULL |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВсеСвойства.Набор, | ВсеСвойства.Свойство, + | ВЫБОР + | КОГДА ВсеСвойства.ЗаполнятьОбязательно = 0 + | ТОГДА ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно + | КОГДА ВсеСвойства.ЗаполнятьОбязательно = 1 + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК ЗаполнятьОбязательно, | ДополнительныеРеквизитыИСведения.Наименование, | ДополнительныеРеквизитыИСведения.ТипЗначения, | ДополнительныеРеквизитыИСведения.ФорматСвойства, @@ -577,25 +1004,50 @@ | |УПОРЯДОЧИТЬ ПО | Удалено, - | ВсеСвойства.Порядок"; + | ВсеСвойства.ПорядокНабора, + | ВсеСвойства.ПорядокСвойства"; - Запрос = Новый Запрос; - Запрос.Текст = ТекстЗапроса; - Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; - Запрос.УстановитьПараметр("ЭтоДополнительноеСведение", ЭтоДополнительноеСведение); - Запрос.УстановитьПараметр("Свойства", Свойства); - Запрос.УстановитьПараметр("Набор", Набор); + Если ЭтоДополнительноеСведение Тогда + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты", + "Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения"); + + Запрос.Текст = СтрЗаменить( + Запрос.Текст, + "СвойстваНаборов.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно", + "0 КАК ЗаполнятьОбязательно"); + КонецЕсли; ОписаниеСвойств = Запрос.Выполнить().Выгрузить(); ОписаниеСвойств.Индексы.Добавить("Свойство"); ОписаниеСвойств.Колонки.Добавить("Значение"); + // Удаление дублей свойств в нижестоящих наборах свойств. + Индекс = ОписаниеСвойств.Количество()-1; + + Пока Индекс >= 0 Цикл + Строка = ОписаниеСвойств[Индекс]; + НайденнаяСтрока = ОписаниеСвойств.Найти(Строка.Свойство); + + Если НайденнаяСтрока <> Неопределено + И НайденнаяСтрока <> Строка Тогда + + ОписаниеСвойств.Удалить(Индекс); + КонецЕсли; + + Индекс = Индекс-1; + КонецЦикла; + + // Заполнение значений свойств. Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство"); Если ОписаниеСвойства <> Неопределено Тогда // Поддержка строк неограниченной длины. Если НЕ ЭтоДополнительноеСведение - И ИспользоватьНеограниченнуюСтроку(ОписаниеСвойства.ТипЗначения, ОписаниеСвойства.МногострочноеПолеВвода) + И ИспользоватьНеограниченнуюСтроку( + ОписаниеСвойства.ТипЗначения, ОписаниеСвойства.МногострочноеПолеВвода) И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока; @@ -632,7 +1084,7 @@ ВидыСвойствНабора = Новый Структура; ВидыСвойствНабора.Вставить("ДополнительныеРеквизиты", Ложь); - ВидыСвойствНабора.Вставить("ДополнительныеСведения", Ложь); + ВидыСвойствНабора.Вставить("ДополнительныеСведения", Ложь); Если НЕ ЗначениеЗаполнено(Ссылка) Тогда Возврат ВидыСвойствНабора; @@ -681,13 +1133,23 @@ ВидыСвойствНабора.Вставить( "ДополнительныеСведения", - Метаданные.ОбщиеКоманды.Найти("ДополнительныеСведения") <> Неопределено - И Метаданные.ОбщиеКоманды.ДополнительныеСведения.ТипПараметраКоманды.СодержитТип(Тип) ); + Метаданные.ОбщиеКоманды.Найти("ДополнительныеСведенияКоманднаяПанель") <> Неопределено + И Метаданные.ОбщиеКоманды.ДополнительныеСведенияКоманднаяПанель.ТипПараметраКоманды.СодержитТип(Тип) + ИЛИ Метаданные.ОбщиеКоманды.Найти("ДополнительныеСведенияПанельНавигации") <> Неопределено + И Метаданные.ОбщиеКоманды.ДополнительныеСведенияПанельНавигации.ТипПараметраКоманды.СодержитТип(Тип) ); Возврат ВидыСвойствНабора; КонецФункции +// Определяет, что тип значения содержит тип дополнительных значений свойств. +Функция ТипЗначенияСодержитЗначенияСвойств(ТипЗначения) Экспорт + + Возврат ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) + ИЛИ ТипЗначения.СодержитТип(Тип("СправочникСсылка.ЗначенияСвойствОбъектовИерархия")); + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Вспомогательные процедуры и функции @@ -711,9 +1173,6 @@ // Функция ПолучитьОсновнойНаборСвойствДляОбъекта(ВладелецСвойств) - МетаданныеОбъекта = ВладелецСвойств.Метаданные(); - ИмяОбъектаМетаданных = МетаданныеОбъекта.Имя; - ПереданОбъект = Ложь; Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ВладелецСвойств) Тогда Ссылка = ВладелецСвойств; @@ -722,6 +1181,9 @@ Ссылка = ВладелецСвойств.Ссылка; КонецЕсли; + МетаданныеОбъекта = Ссылка.Метаданные(); + ИмяОбъектаМетаданных = МетаданныеОбъекта.Имя; + ВидОбъектаМетаданных = ОбщегоНазначения.ВидОбъектаПоСсылке(Ссылка); ИмяРеквизитаВидаВладельцевСвойств = УправлениеСвойствамиПереопределяемый.ПолучитьИмяРеквизитаВидаОбъекта(Ссылка); @@ -733,12 +1195,12 @@ КонецЕсли; ИмяЭлемента = ВидОбъектаМетаданных + "_" + ИмяОбъектаМетаданных; Возврат Справочники.НаборыДополнительныхРеквизитовИСведений[ИмяЭлемента]; - Иначе Если ПереданОбъект = Истина Тогда + Возврат ОбщегоНазначения.ПолучитьЗначениеРеквизита( - ВладелецСвойств[ИмяРеквизитаВидаВладельцевСвойств], - "НаборСвойств"); + ВладелецСвойств[ИмяРеквизитаВидаВладельцевСвойств], + "НаборСвойств"); Иначе Запрос = Новый Запрос; @@ -749,13 +1211,15 @@ | " + ВидОбъектаМетаданных + "." + ИмяОбъектаМетаданных + " КАК ОбъектВладелецСвойств |ГДЕ | ОбъектВладелецСвойств.Ссылка = &Ссылка"; - + Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); Если НЕ Результат.Пустой() Тогда + Выборка = Результат.Выбрать(); Выборка.Следующий(); + Если ЗначениеЗаполнено(Выборка.Набор) Тогда Возврат Выборка.Набор; Иначе @@ -764,15 +1228,13 @@ Иначе Возврат Справочники.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка(); КонецЕсли; - КонецЕсли; - КонецЕсли; КонецФункции // Создает основные реквизиты, команды, элементы в форме владельца свойств. -Процедура СоздатьОсновныеОбъектыФормы(Форма, ИмяЭлементаДляРазмещения, НаборСвойствОбъекта, ИспользоватьДопРеквизиты) +Процедура СоздатьОсновныеОбъектыФормы(Форма, ИмяЭлементаДляРазмещения, СоздатьОписаниеДополнительныхРеквизитов) Реквизиты = Новый Массив; @@ -786,40 +1248,58 @@ РеквизитИспользоватьДопРеквизиты = Новый РеквизитФормы("Свойства_ИспользоватьДопРеквизиты", Новый ОписаниеТипов("Булево")); Реквизиты.Добавить(РеквизитИспользоватьДопРеквизиты); - // Добавление реквизита "ОсновнойНабор". - ИмяТипа = ?(ТипЗнч(НаборСвойствОбъекта) = Тип("СписокЗначений"), "СписокЗначений", "СправочникСсылка.НаборыДополнительныхРеквизитовИСведений"); - РеквизитОсновнойНабор = Новый РеквизитФормы("Свойства_ОсновнойНабор", Новый ОписаниеТипов(ИмяТипа)); - Реквизиты.Добавить(РеквизитОсновнойНабор); + Если СоздатьОписаниеДополнительныхРеквизитов Тогда - Если ИспользоватьДопРеквизиты Тогда - // Добавление реквизита таблица значений "ОписаниеДополнительныхРеквизитов" с колонками. + // Добавление реквизита содержащего используемые наборы дополнительных реквизитов. + Реквизиты.Добавить(Новый РеквизитФормы( + "Свойства_НаборыДополнительныхРеквизитовОбъекта", Новый ОписаниеТипов("СписокЗначений"))); + + // Добавление реквизита описания создаваемых реквизитов и элементов формы. ИмяОписания = "Свойства_ОписаниеДополнительныхРеквизитов"; - РеквизитОписание_0 = Новый РеквизитФормы(ИмяОписания, Новый ОписаниеТипов("ТаблицаЗначений")); - РеквизитОписание_1 = Новый РеквизитФормы("ИмяРеквизитаЗначение", Новый ОписаниеТипов("Строка"), ИмяОписания); - РеквизитОписание_2 = Новый РеквизитФормы("ИмяРеквизитаСвойство", Новый ОписаниеТипов("Строка"), ИмяОписания); - РеквизитОписание_3 = Новый РеквизитФормы("Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), ИмяОписания); - Реквизиты.Добавить(РеквизитОписание_0); - Реквизиты.Добавить(РеквизитОписание_1); - Реквизиты.Добавить(РеквизитОписание_2); - Реквизиты.Добавить(РеквизитОписание_3); + + Реквизиты.Добавить(Новый РеквизитФормы( + ИмяОписания, Новый ОписаниеТипов("ТаблицаЗначений"))); + + Реквизиты.Добавить(Новый РеквизитФормы( + "ИмяРеквизитаЗначение", Новый ОписаниеТипов("Строка"), ИмяОписания)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "ИмяРеквизитаСвойство", Новый ОписаниеТипов("Строка"), ИмяОписания)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "Свойство", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), + ИмяОписания)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "Удалено", Новый ОписаниеТипов("Булево"), ИмяОписания)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "ЗаполнятьОбязательно", Новый ОписаниеТипов("Булево"), ИмяОписания)); + + Реквизиты.Добавить(Новый РеквизитФормы( + "Наименование", Новый ОписаниеТипов("Строка"), ИмяОписания)); + + // Добавление реквизита содержащего элементы создаваемых групп дополнительных реквизитов. + Реквизиты.Добавить(Новый РеквизитФормы( + "Свойства_ЭлементыГруппДополнительныхРеквизитов", Новый ОписаниеТипов("СписокЗначений"))); // Добавление реквизита с именем элемента в котором будут размещаться поля ввода. - РеквизитИмяЭлемента = Новый РеквизитФормы("Свойства_ИмяЭлементаДляРазмещения", Новый ОписаниеТипов("Строка")); - Реквизиты.Добавить(РеквизитИмяЭлемента); - КонецЕсли; - - // Добавление команды формы, если установлена роль "ДобавлениеИзменениеБазовойНСИ" или это полноправный пользователь. - Если Пользователи.РолиДоступны("ДобавлениеИзменениеБазовойНСИ") Тогда - // Добавление команды. - Команда = Форма.Команды.Добавить("РедактироватьСоставСвойств"); - Команда.Заголовок = НСтр("ru = 'Изменить состав доп. реквизитов и сведений'"); - Команда.Действие = "Подключаемый_РедактироватьСоставСвойств"; - Команда.Подсказка = НСтр("ru = 'Изменить состав дополнительных реквизитов и сведений'"); - Команда.Картинка = БиблиотекаКартинок.НастройкаСписка; + Реквизиты.Добавить(Новый РеквизитФормы( + "Свойства_ИмяЭлементаДляРазмещения", Новый ОписаниеТипов("Строка"))); - Кнопка = Форма.Элементы.Добавить("РедактироватьСоставСвойств", Тип("КнопкаФормы"), Форма.КоманднаяПанель); - Кнопка.ТолькоВоВсехДействиях = Истина; - Кнопка.ИмяКоманды = "РедактироватьСоставСвойств"; + // Добавление команды формы, если установлена роль "ДобавлениеИзменениеБазовойНСИ" или это полноправный пользователь. + Если Пользователи.РолиДоступны("ДобавлениеИзменениеБазовойНСИ") Тогда + // Добавление команды. + Команда = Форма.Команды.Добавить("РедактироватьСоставДополнительныхРеквизитов"); + Команда.Заголовок = НСтр("ru = 'Изменить состав дополнительных реквизитов'"); + Команда.Действие = "Подключаемый_РедактироватьСоставСвойств"; + Команда.Подсказка = НСтр("ru = 'Изменить состав дополнительных реквизитов'"); + Команда.Картинка = БиблиотекаКартинок.НастройкаСписка; + + Кнопка = Форма.Элементы.Добавить("РедактироватьСоставДополнительныхРеквизитов", Тип("КнопкаФормы"), Форма.КоманднаяПанель); + Кнопка.ТолькоВоВсехДействиях = Истина; + Кнопка.ИмяКоманды = "РедактироватьСоставДополнительныхРеквизитов"; + КонецЕсли; КонецЕсли; КонецЕсли; @@ -828,178 +1308,15 @@ Форма.Свойства_ИспользоватьСвойства = ОпцияИспользоватьСвойства; Если ОпцияИспользоватьСвойства Тогда - Форма.Свойства_ИспользоватьДопРеквизиты = ИспользоватьДопРеквизиты; + Форма.Свойства_ИспользоватьДопРеквизиты = СоздатьОписаниеДополнительныхРеквизитов; КонецЕсли; - Если ОпцияИспользоватьСвойства И ИспользоватьДопРеквизиты Тогда + Если ОпцияИспользоватьСвойства И СоздатьОписаниеДополнительныхРеквизитов Тогда Форма.Свойства_ИмяЭлементаДляРазмещения = ИмяЭлементаДляРазмещения; КонецЕсли; КонецПроцедуры -// Создает дополнительные реквизиты, команды, элементы в форме владельца свойств. -Процедура ЗаполнитьДополнительныеРеквизитыНаФорме(Форма, Объект, НаборСвойствОбъекта) - - Если НаборСвойствОбъекта = Неопределено Тогда - Набор = Форма.Свойства_ОсновнойНабор; - Иначе - Набор = НаборСвойствОбъекта; - КонецЕсли; - - ОписаниеСвойств = ПолучитьТаблицуЗначенийСвойств(Объект.ДополнительныеРеквизиты.Выгрузить(), Набор, Ложь); - ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаЗначение"); - ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаСвойство"); - ОписаниеСвойств.Колонки.Добавить("Булево"); - - УдалитьСтарыеРеквизиты(Форма); - Форма.Свойства_ОписаниеДополнительныхРеквизитов.Очистить(); - - // Создание реквизитов. - Номер = 0; - ДобавляемыеРеквизиты = Новый Массив(); - Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл - - Номер = Номер + 1; - ТипЗначенияСвойства = ОписаниеСвойства.ТипЗначения; - - // Поддержка строк неограниченной длины. - Если ИспользоватьНеограниченнуюСтроку(ТипЗначенияСвойства, ОписаниеСвойства.МногострочноеПолеВвода) Тогда - ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); - КонецЕсли; - - ОписаниеСвойства.ИмяРеквизитаЗначение = "ДополнительныйРеквизитЗначение" + Формат(Номер, "ЧГ=0"); - - Если ОписаниеСвойства.Удалено Тогда - ТипЗначенияСвойства = Новый ОписаниеТипов("Строка"); - КонецЕсли; - - Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , ОписаниеСвойства.Наименование, Истина); - - ДобавляемыеРеквизиты.Добавить(Реквизит); - - ОписаниеСвойства.ИмяРеквизитаСвойство = ""; - Если ТипЗначенияСодержитЗначенияСвойств(ТипЗначенияСвойства) Тогда - ОписаниеСвойства.ИмяРеквизитаСвойство = "ДополнительныйРеквизитСвойство" + Формат(Номер, "ЧГ=0"); - Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаСвойство, Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения"), , , Истина); - ДобавляемыеРеквизиты.Добавить(Реквизит); - КонецЕсли; - - ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево")); - - КонецЦикла; - Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); - - // Создание элементов формы. - Для Каждого ОписаниеСвойства Из ОписаниеСвойств Цикл - - НоваяСтрока = Форма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить(); - НоваяСтрока.ИмяРеквизитаЗначение = ОписаниеСвойства.ИмяРеквизитаЗначение; - НоваяСтрока.ИмяРеквизитаСвойство = ОписаниеСвойства.ИмяРеквизитаСвойство; - НоваяСтрока.Свойство = ОписаниеСвойства.Свойство; - - Форма[ОписаниеСвойства.ИмяРеквизитаЗначение] = ОписаниеСвойства.Значение; - - ИмяЭлементаДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения; - Родитель = ?(ИмяЭлементаДляРазмещения = "", Неопределено, Форма.Элементы[ИмяЭлементаДляРазмещения]); - Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель); - - Если ОписаниеСвойства.Булево И ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда - Элемент.Вид = ВидПоляФормы.ПолеФлажка - Иначе - Элемент.Вид = ВидПоляФормы.ПолеВвода; - КонецЕсли; - - Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение; - Элемент.Подсказка = ОписаниеСвойства.Свойство.Подсказка; - - Если ОписаниеСвойства.Свойство.МногострочноеПолеВвода > 0 Тогда - Элемент.МногострочныйРежим = Истина; - Элемент.Высота= ОписаниеСвойства.Свойство.МногострочноеПолеВвода; - КонецЕсли; - - Если НЕ ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда - Элемент.Формат = ОписаниеСвойства.ФорматСвойства; - Элемент.ФорматРедактирования = ОписаниеСвойства.ФорматСвойства; - КонецЕсли; - - Если ОписаниеСвойства.Удалено Тогда - Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.НедоступныеДанныеЦвет; - Элемент.ШрифтЗаголовка = ШрифтыСтиля.УдаленныйДополнительныйРеквизитШрифт; - Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда - Элемент.КнопкаОчистки = Истина; - Элемент.КнопкаВыбора = Ложь; - Элемент.КнопкаОткрытия = Ложь; - Элемент.КнопкаСпискаВыбора = Ложь; - Элемент.РедактированиеТекста = Ложь; - КонецЕсли; - КонецЕсли; - - Если ОписаниеСвойства.ИмяРеквизитаСвойство <> "" Тогда - Связь = Новый СвязьПараметраВыбора("Отбор.Владелец", ОписаниеСвойства.ИмяРеквизитаСвойство); - Связи = Новый Массив; - Связи.Добавить(Связь); - Элемент.СвязиПараметровВыбора = Новый ФиксированныйМассив(Связи); - Форма[ОписаниеСвойства.ИмяРеквизитаСвойство] = ОписаниеСвойства.Свойство; - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Переносит значения свойств из реквизитов формы в табличную часть объекта. -Процедура ПеренестиЗначенияСвойствИзРеквизитовФормы(Форма, Объект) - - Объект.ДополнительныеРеквизиты.Очистить(); - - Для Каждого Строка Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл - Значение = Форма[Строка.ИмяРеквизитаЗначение]; - Если ЗначениеЗаполнено(Значение) Тогда - Если ТипЗнч(Значение) = Тип("Булево") И Значение = Ложь Тогда - Продолжить; - КонецЕсли; - - НоваяСтрока = Объект.ДополнительныеРеквизиты.Добавить(); - НоваяСтрока.Свойство = Строка.Свойство; - НоваяСтрока.Значение = Значение; - - // Поддержка строк неограниченной длины. - Свойство = Строка.Свойство.ПолучитьОбъект(); - Если ИспользоватьНеограниченнуюСтроку(Свойство.ТипЗначения, Свойство.МногострочноеПолеВвода) Тогда - НоваяСтрока.ТекстоваяСтрока = Значение; - КонецЕсли; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Удаляет старые реквизиты и элементы формы. -Процедура УдалитьСтарыеРеквизиты(Форма) - - УдаляемыеРеквизиты = Новый Массив; - Для Каждого ОписаниеСвойства Из Форма.Свойства_ОписаниеДополнительныхРеквизитов Цикл - - УдаляемыеРеквизиты.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение); - Если Не ПустаяСтрока(ОписаниеСвойства.ИмяРеквизитаСвойство) Тогда - УдаляемыеРеквизиты.Добавить(ОписаниеСвойства.ИмяРеквизитаСвойство); - КонецЕсли; - - Форма.Элементы.Удалить(Форма.Элементы[ОписаниеСвойства.ИмяРеквизитаЗначение]); - - КонецЦикла; - - Если УдаляемыеРеквизиты.Количество() Тогда - Форма.ИзменитьРеквизиты(, УдаляемыеРеквизиты); - КонецЕсли; - -КонецПроцедуры - -// Определяет, что тип значения может быть СправочникСсылка.ЗначенияСвойствОбъектов. -Функция ТипЗначенияСодержитЗначенияСвойств(ТипЗначения) - - Возврат ТипЗначения.Типы().Найти(Тип("СправочникСсылка.ЗначенияСвойствОбъектов")) <> Неопределено; - -КонецФункции - // Определяет, что изменился набор свойств у вида владельцев свойств. // Используется для обновления набора свойств во владельце свойств. // diff --git a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl index 910258bf0..de8ad8f5c 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиКлиент/Module.bsl @@ -6,34 +6,42 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Выбирает набор свойств (если нужно) и открывает форму редактирования свойств. -Процедура РедактироватьСоставСвойств(Форма, Ссылка) Экспорт +// Открывает форму редактирования набора дополнительных реквизитов. +// Если наборов несколько предлагает выбрать набор. +// +// Параметры: +// Форма - УправляемаяФорма, предварительно настроенная в процедуре +// УправлениеСвойствами.ПриСозданииНаСервере() +// +Процедура РедактироватьСоставСвойств(Форма, Ссылка = Неопределено) Экспорт - Наборы = Форма.Свойства_ОсновнойНабор; + Наборы = Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта; + + Если Наборы.Количество() = 0 Тогда + Предупреждение( + НСтр("ru = 'Не удалось получить наборы дополнительных реквизитов объекта. + | + |Возможно у объекта не заполнены необходимые реквизиты.'")); - Если ТипЗнч(Наборы) = Тип("СправочникСсылка.НаборыДополнительныхРеквизитовИСведений") Тогда - // Объект с одним набором свойств. - Если ЗначениеЗаполнено(Наборы) Тогда - ПараметрыФормыНабораСвойств = Новый Структура("Ключ", Форма.Свойства_ОсновнойНабор); - ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", ПараметрыФормыНабораСвойств); - Иначе - Предупреждение(НСтр("ru = 'Нельзя получить набор свойств объекта. Возможно не заполнены необходимые реквизиты.'")); - КонецЕсли; - Иначе - // Объект с несколькими наборами свойств. Если Наборы.Количество() = 1 Тогда Элемент = Наборы.Получить(0); - Иначе - // Выбор редактируемого набора. - Элемент = Наборы.ВыбратьЭлемент(); + Иначе + // Объект с несколькими наборами дополнительных реквизитов. + + Элемент = Наборы.ВыбратьЭлемент( + НСтр("ru = 'Выберите набор дополнительных реквизитов'")); + Если Элемент = Неопределено Тогда Возврат; КонецЕсли; - КонецЕсли; - ПараметрыФормыНабораСвойств = Новый Структура("Ключ", Элемент.Значение); - ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", ПараметрыФормыНабораСвойств); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", Элемент.Значение); + ПараметрыФормы.Вставить("СкрытьДополнительныеСведения", Истина); + + ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.ФормаЭлемента", ПараметрыФормы); КонецЕсли; @@ -47,18 +55,21 @@ // Функция ОбрабатыватьОповещения(Форма, ИмяСобытия, Параметр) Экспорт - Если (ИмяСобытия <> "Запись_НаборыДополнительныхРеквизитовИСведений") ИЛИ Не Форма.Свойства_ИспользоватьСвойства Тогда - Возврат Ложь; + Если НЕ Форма.Свойства_ИспользоватьСвойства + ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда - ИначеЕсли Форма.Свойства_ОсновнойНабор = Параметр Тогда - Возврат Истина; - - ИначеЕсли (ТипЗнч(Форма.Свойства_ОсновнойНабор) = Тип("СписокЗначений")) - И (Форма.Свойства_ОсновнойНабор.НайтиПоЗначению(Параметр) <> Неопределено) Тогда - - Возврат Истина; - Иначе Возврат Ложь; КонецЕсли; + Если ИмяСобытия = "Запись_НаборыДополнительныхРеквизитовИСведений" Тогда + Возврат Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта.НайтиПоЗначению(Параметр) <> Неопределено; + + ИначеЕсли ИмяСобытия = "Запись_ДополнительныеРеквизитыИСведения" Тогда + Отбор = Новый Структура("Свойство", Параметр.Свойство); + Возврат Форма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор).Количество() > 0; + + КонецЕсли; + + Возврат Ложь; + КонецФункции diff --git a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl index 4fa4744b4..cf249bccc 100644 --- a/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl +++ b/SSL/src/CommonModules/УправлениеСвойствамиПереопределяемый/Module.bsl @@ -6,22 +6,54 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Получить доступные наборы свойств для объекта. +// Заполняет наборы свойств объекта. Обычно требуется, если наборов более одного. // // Параметры: -// Объект - Ссылка или Объект владельца свойств. +// Объект - Ссылка на владельца свойств. +// Объект владельца свойств. +// ДанныеФормыСтруктура (по типу объекта владельца свойств). // -// Возвращаемые значения: -// Список значений (в т.ч. пустой), если объект может содержать несколько наборов свойств. -// Неопределено, если объект не может содержать несколько наборов свойств. +// ТипСсылки - Тип - тип ссылки владельца свойств. // -Функция ПолучитьДоступныеНаборыСвойствПоОбъекту(Объект) Экспорт +// НаборыСвойств - ТаблицаЗначений с колонками: +// Набор - СправочникСсылка.НаборыДополнительныхРеквизитовИСведений. +// +// // Далее свойства элемента формы типа ГруппаФормы вида обычная группа +// // или страница, которая создается, если наборов больше одного без учета +// // пустого набора, который описывает свойства группы удаленных реквизитов. +// +// // Если значение Неопределено, значит использовать значение по умолчанию. +// +// // Для любой группы управляемой формы. +// Высота - Число. +// Заголовок - Строка. +// Подсказка - Строка. +// РастягиватьПоВертикали - Булево. +// РастягиватьПоГоризонтали - Булево. +// ТолькоПросмотр - Булево. +// ЦветТекстаЗаголовка - Цвет. +// Ширина - Число. +// ШрифтЗаголовка - Шрифт. +// +// // Для обычной группы и страницы. +// Группировка - ГруппировкаПодчиненныхЭлементовФормы. +// +// // Для обычной группы. +// Отображение - ОтображениеОбычнойГруппы. +// ШиринаПодчиненныхЭлементов - ШиринаПодчиненныхЭлементовФормы. +// +// // Для страницы. +// Картинка - Картинка. +// ОтображатьЗаголовок - Булево. +// +// СтандартнаяОбработка - Булево - начальное значение Истина. Указывает получать ли +// основной набор, когда НаборыСвойств.Количество() равно нулю. +// +Процедура ЗаполнитьНаборыСвойствОбъекта(Объект, ТипСсылки, НаборыСвойств, СтандартнаяОбработка) Экспорт - Возврат Неопределено; - -КонецФункции +КонецПроцедуры // Возвращает имя реквизита, содержащего вид владельцев свойств (если есть). // Если возвращается имя реквизита, то вид владельцев свойств diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl index 84f494cf4..899b6c234 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/Module.bsl @@ -238,21 +238,6 @@ КонецПроцедуры -//Выполняет отправку писем пользователя и -// получение электронной почты по доступным для пользователя учетным записям. -// -//Параметры -// Получено - Число - в данный параметр будет возвращено количество полученных писем -// ДоступноУчетныхЗаписей - Число - в данный параметр будет возвращено количество доступных пользователю учетных записей -// масОшибок - Массив - в данных массив будут помещены ошибки, если таковые возникнут. -// -Процедура ОтправитьЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки) Экспорт - - ОтправитьПочтуПользователя(); - ЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки) - -КонецПроцедуры - //Выполняет отправку писем пользователя Процедура ОтправитьПочтуПользователя() Экспорт @@ -449,7 +434,7 @@ ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись); Получено = 0; Если ИдЗагружать.Количество() <> 0 Тогда - ОтветственныйЗаОбработкуПисем = Взаимодействия.ПолучитьОтвественногоЗаОбработкуПисьмаПоУмолчанию(УчетнаяЗапись); + ОтветственныйЗаОбработкуПисем = ПолучитьОтвественногоЗаОбработкуПисьмаПоУмолчанию(УчетнаяЗапись); // Получим нужные сообщения Сообщения = Почта.Выбрать(Ложь, ИдЗагружать); @@ -727,7 +712,7 @@ КонецЕсли; СоответствиеВложенийИПодписей = - ФайловыеФункцииКлиентСервер.ПолучитьСоответствиеФайловИПодписей(МассивИменВложений, РасширениеДляФайловПодписи); + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСоответствиеФайловИПодписей(МассивИменВложений, РасширениеДляФайловПодписи); КоличествоПустыхИменВоВложениях = 0; Для каждого ЭлементСоответствия Из СоответствиеВложенийИПодписей Цикл @@ -1201,6 +1186,40 @@ КонецПроцедуры +//Получает ответственного за обработку электронных писем по умолчанию +// +//Параметры +// УчетнаяЗапись - СправочникСсылка.УчетныеЗаписиЭлектроннойПочты - учетная запись, для которой определяется ответственный +// +// Возвращаемое значение: +// СправочникСсылка.Пользователи - ответственный за обработку электронных писем +// +Функция ПолучитьОтвественногоЗаОбработкуПисьмаПоУмолчанию(УчетнаяЗапись) + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ + | НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаОбработкуПисем + |ИЗ + | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты + |ГДЕ + | НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = &УчетнаяЗаписьЭлектроннойПочты"; + + Запрос.УстановитьПараметр("УчетнаяЗаписьЭлектроннойПочты", УчетнаяЗапись); + + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + Возврат Справочники.Пользователи.ПустаяСсылка(); + КонецЕсли; + Выборка = Результат.Выбрать(); + + Выборка.Следующий(); + Возврат Выборка.ОтветственныйЗаОбработкуПисем; + +КонецФункции + + //////////////////////////////////////////////////////////////////////////////// // Работа с вложения электронных писем @@ -1336,7 +1355,6 @@ ИмяФайлаДляРазбора = ИмяФайла; РасширениеБезТочки = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайлаДляРазбора); ИмяБезРасширения = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайлаДляРазбора); - Если ПустаяСтрока(ИмяБезРасширения) Тогда ИмяФайлаБезРасширения = @@ -1654,43 +1672,6 @@ КонецПроцедуры -//Функция возвращает таблицу имен кодировок -// -//Параметры -// НЕТ -// -//Возвращаемое значение: -// Таблица значений -// -Функция ПолучитьСписокКодировок() Экспорт - - СписокКодировок = Новый СписокЗначений; - - СписокКодировок.Добавить("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)"); - - Возврат СписокКодировок; - -КонецФункции - //Возвращает важность интернет почтового сообщения в зависимости от переданного значения //перечисления ВариантыВажностиВзаимодействия. // diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/УправлениеЭлектроннойПочтой.mdo b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/УправлениеЭлектроннойПочтой.mdo index 05aa8337d..abd01618a 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/УправлениеЭлектроннойПочтой.mdo +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтой/УправлениеЭлектроннойПочтой.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl index ad6e07fef..ea61a004b 100644 --- a/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl +++ b/SSL/src/CommonModules/УправлениеЭлектроннойПочтойКлиент/Module.bsl @@ -14,9 +14,10 @@ // Ссылка - СправочникСсылка.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы, // СправочникСсылка.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы - ссылка на файл, который необходимо открыть // -Процедура ОткрытьВложение(Ссылка,УникальныйИдентификаторФормы) Экспорт +Процедура ОткрытьВложение(Ссылка, УникальныйИдентификаторФормы) Экспорт - ПрисоединенныеФайлыКлиент.ОткрытьФайл(ПрисоединенныеФайлы.ПолучитьДанныеФайла(Ссылка,УникальныйИдентификаторФормы)); + ПрисоединенныеФайлыКлиент.ОткрытьФайл( + ПрисоединенныеФайлыКлиент.ПолучитьДанныеФайла(Ссылка, УникальныйИдентификаторФормы)); КонецПроцедуры @@ -52,7 +53,7 @@ ЕстьОшибки = Ложь; Состояние(НСтр("ru = 'Идет отправка и получение электронной почты ...'")); - УправлениеЭлектроннойПочтой.ОтправитьЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки); + ВзаимодействияВызовСервера.ОтправитьЗагрузитьПочтуПользователя(ПолученоПисем, ДоступноУчетныхЗаписей, ЕстьОшибки); Состояние(); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Получено писем: %1 '"), ПолученоПисем); diff --git a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl index e6cc4e9e3..4b6290d72 100644 --- a/SSL/src/CommonModules/ФайловыеФункции/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункции/Module.bsl @@ -1,851 +1,32 @@ -// Сохраняет путь к рабочему каталогу пользователя в настройках и параметре сеанса +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Файловые функции". // -Функция ПолучитьПутьКРабочемуКаталогуПользователя() Экспорт - Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); -КонецФункции +//////////////////////////////////////////////////////////////////////////////// -// Извлекает текст из файлов на диске -Процедура ИзвлечениеТекста() Экспорт - - ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); - - Если НЕ ЭтоПлатформаWindows() Тогда - Возврат; // извлечение текста работает только под Windows - КонецЕсли; - - ИмяСРасширениемФайла = ""; - - ЗаписьЖурналаРегистрации("Извлечение текста", - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Начато регламентное извлечение текста'")); - - ТекстЗапроса = Неопределено; - ФайловыеФункцииПереопределяемый.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса); - Запрос = Новый Запрос(ТекстЗапроса); - Результат = Запрос.Выполнить(); - - ТаблицаВыгрузки = Результат.Выгрузить(); - - Для Каждого Строка Из ТаблицаВыгрузки Цикл - - ФайлОбъект = Строка.Ссылка.ПолучитьОбъект(); - Попытка - ФайлОбъект.Заблокировать(); - Исключение - // если файл уже заблокирован - не обрабатываем его - Продолжить; - КонецПопытки; - - ИмяСРасширениемФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; - ИмяФайлаСПутем = ""; - - ИмяФайлаСПутем = ФайловыеФункцииПереопределяемый.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлОбъект.Ссылка); - - Если ПустаяСтрока(ИмяФайлаСПутем) Тогда - Продолжить; - КонецЕсли; - - Кодировка = ""; - ФайловыеФункцииПереопределяемый.ПолучитьКодировкуВерсииФайла(Строка.Ссылка, Кодировка); - - Отказ = Ложь; - Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Кодировка); - - Если Отказ = Ложь Тогда - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - Иначе - // Ничего не пишем в журнал регистрации - это нормальная ситуация - когда Текст некому извлечь - ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; - КонецЕсли; - - Если Строка.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - УдалитьФайлы(ИмяФайлаСПутем); - КонецЕсли; - - ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст, Новый СжатиеДанных); - - Попытка - ФайловыеФункцииПереопределяемый.ЗаписатьИзвлеченныйТекст(ФайлОбъект); - Исключение - - ОписаниеОшибкиИнфо = ОписаниеОшибки(); - ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время регламентного извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), - ИмяСРасширениемФайла); - ТекстСообщения = ТекстСообщения + Строка(ОписаниеОшибкиИнфо); - - ЗаписьЖурналаРегистрации("Извлечение текста", - УровеньЖурналаРегистрации.Ошибка, , , - ТекстСообщения); - - КонецПопытки; - - КонецЦикла; - - ЗаписьЖурналаРегистрации("Извлечение текста", - УровеньЖурналаРегистрации.Информация, , , - НСтр("ru = 'Закончено регламентное извлечение текста'")); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Получает строку из временного хранилища (передача с клиента на сервер, -// делается через временное хранилище) -// -Функция ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста) Экспорт +// Возвращает максимальный размер файла. +Функция МаксимальныйРазмерФайла() Экспорт - Если ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда - Возврат ""; - КонецЕсли; - - ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); - ПолучитьИзВременногоХранилища(АдресВременногоХранилищаТекста).Записать(ИмяВременногоФайла); - - ТекстовыйФайл = Новый ЧтениеТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); - Текст = ТекстовыйФайл.Прочитать(); - ТекстовыйФайл.Закрыть(); - УдалитьФайлы(ИмяВременногоФайла); - - Возврат Текст; + Возврат ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла(); КонецФункции -// Возвращает максимальный размер файла -// -Функция ПолучитьМаксимальныйРазмерФайла() Экспорт +// Возвращает максимальный размер файла провайдера. +Функция МаксимальныйРазмерФайлаОбщий() Экспорт - УстановитьПривилегированныйРежим(Истина); - - МаксимальныйРазмерФайла = Константы.МаксимальныйРазмерФайла.Получить(); - Если МаксимальныйРазмерФайла = Неопределено ИЛИ МаксимальныйРазмерФайла = 0 Тогда - МаксимальныйРазмерФайла = 50*1024*1024; // 50 мб - Константы.МаксимальныйРазмерФайла.Установить(МаксимальныйРазмерФайла); - КонецЕсли; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда - - МаксимальныйРазмерФайлаОбластиДанных = Константы.МаксимальныйРазмерФайлаОбластиДанных.Получить(); - - Если МаксимальныйРазмерФайлаОбластиДанных = Неопределено ИЛИ МаксимальныйРазмерФайлаОбластиДанных = 0 Тогда - МаксимальныйРазмерФайлаОбластиДанных = 50*1024*1024; // 50 мб - Константы.МаксимальныйРазмерФайлаОбластиДанных.Установить(МаксимальныйРазмерФайлаОбластиДанных); - КонецЕсли; - - МаксимальныйРазмерФайла = Мин(МаксимальныйРазмерФайла, МаксимальныйРазмерФайлаОбластиДанных); - - КонецЕсли; - - Возврат МаксимальныйРазмерФайла; - -КонецФункции - -// Возвращает максимальный размер файла провайдера -// -Функция ПолучитьМаксимальныйРазмерФайлаОбщий() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - МаксимальныйРазмерФайла = Константы.МаксимальныйРазмерФайла.Получить(); - Если МаксимальныйРазмерФайла = Неопределено ИЛИ МаксимальныйРазмерФайла = 0 Тогда - МаксимальныйРазмерФайла = 50*1024*1024; // 50 мб - Константы.МаксимальныйРазмерФайла.Установить(МаксимальныйРазмерФайла); - КонецЕсли; - - Возврат МаксимальныйРазмерФайла; - -КонецФункции - -// Возвращает значение константы ИзвлекатьТекстыФайловНаСервере -Функция ФоновоеИзвлечениеТекстовФайловНаСервере() Экспорт - - УстановитьПривилегированныйРежим(Истина); - Возврат Константы.ИзвлекатьТекстыФайловНаСервере.Получить(); - -КонецФункции - -// Возвращает Истина, если сервер работает под Windows -Функция ЭтоПлатформаWindows() Экспорт - - ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); - - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 - ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда - Возврат Истина; - Иначе - Возврат Ложь; - КонецЕсли; - -КонецФункции - -// Записывает на сервер результат извлечения текста - извлеченный текст и СтатусИзвлеченияТекста -Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, РезультатИзвлечения, АдресВременногоХранилищаТекста) Экспорт - - ФайлИлиВерсияОбъект = ФайлИлиВерсияСсылка.ПолучитьОбъект(); - ФайлИлиВерсияОбъект.Заблокировать(); - - Если ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда - Текст = ""; - Иначе - Текст = ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); - ФайлИлиВерсияОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); - УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); - КонецЕсли; - - Если РезультатИзвлечения = "НеИзвлечен" Тогда - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; - ИначеЕсли РезультатИзвлечения = "Извлечен" Тогда - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; - ИначеЕсли РезультатИзвлечения = "ИзвлечьНеУдалось" Тогда - ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; - КонецЕсли; - - ФайловыеФункцииПереопределяемый.ЗаписатьИзвлеченныйТекст(ФайлИлиВерсияОбъект); - -КонецПроцедуры - -// Возвращает ЗапрещатьЗагрузкуФайловПоРасширению -Функция ПолучитьЗапретЗагрузкиФайловПоРасширению() Экспорт - - УстановитьПривилегированныйРежим(Истина); - ЗапретЗагрузкиФайловПоРасширению = Константы.ЗапрещатьЗагрузкуФайловПоРасширению.Получить(); - Возврат ЗапретЗагрузкиФайловПоРасширению; - -КонецФункции - -// Возвращает СписокЗапрещенныхРасширений -Функция ПолучитьСписокЗапрещенныхРасширений() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - СписокЗапрещенныхРасширенийОбластиДанных = Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); - Если СписокЗапрещенныхРасширенийОбластиДанных = Неопределено ИЛИ СписокЗапрещенныхРасширенийОбластиДанных = "" Тогда - СписокЗапрещенныхРасширенийОбластиДанных = "COM EXE BAT CMD VBS VBE JS JSE WSF WSH SCR"; - Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокЗапрещенныхРасширенийОбластиДанных); - КонецЕсли; - - ИтоговыйСписокРасширений = ""; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - СписокЗапрещенныхРасширений = Константы.СписокЗапрещенныхРасширений.Получить(); - ИтоговыйСписокРасширений = СписокЗапрещенныхРасширений + " " + СписокЗапрещенныхРасширенийОбластиДанных; - Иначе - ИтоговыйСписокРасширений = СписокЗапрещенныхРасширенийОбластиДанных; - КонецЕсли; - - Возврат ИтоговыйСписокРасширений; + Возврат ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайлаОбщий(); КонецФункции //////////////////////////////////////////////////////////////////////////////// // Работа с томами файлов -// Добавляет файл в один из томов (где есть свободное место) -// -Процедура ДобавитьНаДиск( - ДвоичныеДанные, - ПутьКФайлуВТоме, - СсылкаНаТом, - ВремяИзменения, - НомерВерсии, - ИмяБезРасширения, - Расширение, - РазмерФайла = 0, - Зашифрован = Ложь, - ДатаДляРазмещенияВТоме = Неопределено) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - СсылкаНаТом = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); - - ОписаниеВсехОшибок = ""; // здесь соберем ошибки со всех томов - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ТомаХраненияФайлов.Ссылка - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов - |ГДЕ - | ТомаХраненияФайлов.ПометкаУдаления = &ПометкаУдаления - | - |УПОРЯДОЧИТЬ ПО - | ТомаХраненияФайлов.ПорядокЗаполнения"; - - Запрос.УстановитьПараметр("ПометкаУдаления", Ложь); - Выборка = Запрос.Выполнить().Выбрать(); - - Если Выборка.Количество() = 0 Тогда - ВызватьИсключение(НСтр("ru = 'Нет ни одного тома для размещения файла.'")); - КонецЕсли; - - Пока Выборка.Следующий() Цикл - - СсылкаНаТом = Выборка.Ссылка; - - ПутьКТому = ПолныйПутьТома(СсылкаНаТом); - // Добавляем слэш в конце, если его нет - ПутьКТому = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьКТому, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); - - // Имя файла для хранения на диске формировать следующим образом - // - имя файла.номер версии.расширение файла - Если ПустаяСтрока(НомерВерсии) Тогда - ИмяФайла = ИмяБезРасширения + "." + Расширение; - Иначе - ИмяФайла = ИмяБезРасширения + "." + НомерВерсии + "." + Расширение; - КонецЕсли; - - Если Зашифрован Тогда - ИмяФайла = ИмяФайла + "." + "p7m"; - КонецЕсли; - - Попытка - - // Если МаксимальныйРазмер = 0 - нет ограничения на размер файлов на томе - Если СсылкаНаТом.МаксимальныйРазмер <> 0 Тогда - ТекущийРазмерВБайтах = 0; - ФайловыеФункцииПереопределяемый.ПодсчитатьРазмерФайловНаТоме(СсылкаНаТом.Ссылка, ТекущийРазмерВБайтах); - НовыйРазмерВБайтах = ТекущийРазмерВБайтах + РазмерФайла; - НовыйРазмер = НовыйРазмерВБайтах / (1024 * 1024); - - Если НовыйРазмер > СсылкаНаТом.МаксимальныйРазмер Тогда - СтрокаОшибки - = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Превышен максимальный размер тома (%1 Мб).'"), - СсылкаНаТом.МаксимальныйРазмер); - ВызватьИсключение(СтрокаОшибки); - КонецЕсли; - КонецЕсли; - - Дата = ТекущаяДатаСеанса(); - Если ДатаДляРазмещенияВТоме <> Неопределено Тогда - Дата = ДатаДляРазмещенияВТоме; - КонецЕсли; - - ПутьДня = Формат(Дата, "ДФ=ггггММдд") + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); - ПутьКТому = ПутьКТому + ПутьДня; - - ИмяФайлаСПутем = ФайловыеФункцииКлиентСервер.ПолучитьУникальноеИмяСПутем(ПутьКТому, ИмяФайла, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); - ПолноеИмяФайлаСПутем = ПутьКТому + ИмяФайлаСПутем; - - Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда - ДвоичныеДанные.Записать(ПолноеИмяФайлаСПутем); - ИначеЕсли ТипЗнч(ДвоичныеДанные) = Тип("Строка") Тогда // считаем, что иначе это путь к файлу на диске - КопироватьФайл(ДвоичныеДанные, ПолноеИмяФайлаСПутем); - Иначе - СтрокаИсключения = НСтр("ru = 'Неверный тип данных для добавления на том'"); - ВызватьИсключение(СтрокаИсключения); - КонецЕсли; - - // Установим время изменения файла таким, как оно стоит в текущей версии - ФайлНаДиске = Новый Файл(ПолноеИмяФайлаСПутем); - ФайлНаДиске.УстановитьВремяИзменения(ВремяИзменения); - ФайлНаДиске.УстановитьТолькоЧтение(Истина); - - ПутьКФайлуВТоме = ПутьДня + ИмяФайлаСПутем; - Возврат; // закончили - выйдем из процедуры - - Исключение - Если ОписаниеВсехОшибок <> "" Тогда - ОписаниеВсехОшибок = ОписаниеВсехОшибок + Символы.ПС + Символы.ПС; - КонецЕсли; - - ОписаниеВсехОшибок = ОписаниеВсехОшибок + НСтр("ru = 'Ошибка при добавлении файла на том: '"); - ОписаниеВсехОшибок = ОписаниеВсехОшибок + СсылкаНаТом; - ОписаниеВсехОшибок = ОписаниеВсехОшибок + " (" + ПутьКТому + "): "; - ОписаниеВсехОшибок = ОписаниеВсехОшибок + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - - Если СсылкаНаТом.ПолныйПутьLinux = СсылкаНаТом.ПолныйПутьWindows Тогда - ОписаниеВсехОшибок = ОписаниеВсехОшибок + Символы.ПС; - ОписаниеВсехОшибок = ОписаниеВсехОшибок + НСтр("ru = 'Настройте полный путь к тому.'"); - КонецЕсли; - // надо переходить к следующему тому - Продолжить; - КонецПопытки; - - КонецЦикла; - - УстановитьПривилегированныйРежим(Ложь); - - // запись в журнал регистрации для администратора - // здесь выдадим ошибки со всех томов - СообщениеОбОшибке = НСтр("ru = 'Не удалось добавить файл ни на один из томов. Список ошибок: '") + Символы.ПС + Символы.ПС + ОписаниеВсехОшибок; - ЗаписьЖурналаРегистрации("Добавление файла", УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); - - // здесь сообщение пользователю - СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Не удалось добавить файл: ""%1.%2"". Обратитесь к администратору системы.'"), - ИмяБезРасширения, Расширение); - - Если Пользователи.ЭтоПолноправныйПользователь() Тогда - СтрокаИсключения = СообщениеОбОшибке; - КонецЕсли; - ВызватьИсключение СтрокаИсключения; - -КонецПроцедуры - -// Возвращает полный путь тома - в зависимости от ОС -Функция ПолныйПутьТома(СсылкаНаТом) Экспорт - - ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); - - Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда - Возврат СсылкаНаТом.ПолныйПутьWindows; - Иначе - Возврат СсылкаНаТом.ПолныйПутьLinux; - КонецЕсли; - -КонецФункции - -//Есть ли хоть один том хранения файлов +//Есть ли хоть один том хранения файлов. Функция ЕстьТомаХраненияФайлов() Экспорт - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов - |ГДЕ - | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ"; - - РезультатЗапроса = Запрос.Выполнить(); - Возврат Не РезультатЗапроса.Пустой(); + Возврат ФайловыеФункцииСлужебный.ЕстьТомаХраненияФайлов(); КонецФункции -// Получает хранение файлов в томах -// -Функция ПолучитьКонстантуХранитьФайлыВТомахНаДиске() Экспорт - - УстановитьПривилегированныйРежим(Истина); - ХранитьФайлыВТомахНаДиске = Константы.ХранитьФайлыВТомахНаДиске.Получить(); - Возврат ХранитьФайлыВТомахНаДиске; - -КонецФункции - -// Получает тип хранения файлов -// -Функция ПолучитьХранитьФайлыВТомахНаДиске() Экспорт - - УстановитьПривилегированныйРежим(Истина); - ХранитьФайлыВТомахНаДиске = Константы.ХранитьФайлыВТомахНаДиске.Получить(); - Возврат ХранитьФайлыВТомахНаДиске; - -КонецФункции - -// Получает тип хранения файлов как перечисление -// -Функция ПолучитьТипХраненияФайлов() Экспорт - - ХранитьФайлыВТомахНаДиске = ПолучитьХранитьФайлыВТомахНаДиске(); - - Если ХранитьФайлыВТомахНаДиске Тогда - - Если ЕстьТомаХраненияФайлов() Тогда - Возврат Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; - Иначе - Возврат Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - КонецЕсли; - - Иначе - Возврат Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; - КонецЕсли; - -КонецФункции - -// Возвращает количество файлов, хранящихся в томах. -// -Функция ПолучитьКоличествоФайловВТомах() Экспорт - - КоличествоФайловВТомах = 0; - ФайловыеФункцииПереопределяемый.ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах); - Возврат КоличествоФайловВТомах; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Настройки - -// Возвращает структуру, содержащую различные персональные настройки -// по работе с файлами -Функция ПолучитьПерсональныеНастройкиРаботыСФайлами() Экспорт - - Настройки = Новый Структура; - ФайловыеФункцииПереопределяемый.ПолучитьПерсональныеНастройкиРаботыСФайлами(Настройки); - ПолучитьПерсональныеНастройкиФайловыхФункций(Настройки); - Возврат Настройки; - -КонецФункции - -// Устанавливает персональные настройки файловых функций -Процедура ПолучитьПерсональныеНастройкиФайловыхФункций(Настройки) - - УстановитьПривилегированныйРежим(Истина); - - // МаксимальныйРазмерЛокальногоКэшаФайлов - МаксимальныйРазмерЛокальногоКэшаФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "МаксимальныйРазмерЛокальногоКэшаФайлов"); - - Если МаксимальныйРазмерЛокальногоКэшаФайлов = Неопределено Тогда - МаксимальныйРазмерЛокальногоКэшаФайлов = 100*1024*1024; // 100 мб - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ЛокальныйКэшФайлов", "МаксимальныйРазмерЛокальногоКэшаФайлов", МаксимальныйРазмерЛокальногоКэшаФайлов); - КонецЕсли; - - Настройки.Вставить("МаксимальныйРазмерЛокальногоКэшаФайлов", МаксимальныйРазмерЛокальногоКэшаФайлов); - - // ПутьКЛокальномуКэшуФайлов - ПутьКЛокальномуКэшуФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); - Настройки.Вставить("ПутьКЛокальномуКэшуФайлов", ПутьКЛокальномуКэшуФайлов); - - // УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования"); - Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Неопределено Тогда - УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; - КонецЕсли; - Настройки.Вставить("УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования", УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования); - - // ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЛокальныйКэшФайлов", "ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов"); - Если ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Неопределено Тогда - ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Ложь; - КонецЕсли; - Настройки.Вставить("ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов", ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов); - - // ИзвлекатьТекстыФайловНаСервере - ИзвлекатьТекстыФайловНаСервере = Константы.ИзвлекатьТекстыФайловНаСервере.Получить(); - Если ИзвлекатьТекстыФайловНаСервере = Неопределено Тогда - ИзвлекатьТекстыФайловНаСервере = Ложь; - КонецЕсли; - Настройки.Вставить("ИзвлекатьТекстыФайловНаСервере", ИзвлекатьТекстыФайловНаСервере); - - // МаксимальныйРазмерФайла - МаксимальныйРазмерФайла = ПолучитьМаксимальныйРазмерФайла(); - Настройки.Вставить("МаксимальныйРазмерФайла", МаксимальныйРазмерФайла); - - // ЗапрещатьЗагрузкуФайловПоРасширению - ЗапрещатьЗагрузкуФайловПоРасширению = Константы.ЗапрещатьЗагрузкуФайловПоРасширению.Получить(); - Если ЗапрещатьЗагрузкуФайловПоРасширению = Неопределено Тогда - ЗапрещатьЗагрузкуФайловПоРасширению = Ложь; - Константы.ЗапрещатьЗагрузкуФайловПоРасширению.Установить(ЗапрещатьЗагрузкуФайловПоРасширению); - КонецЕсли; - Настройки.Вставить("ЗапретЗагрузкиФайловПоРасширению", ЗапрещатьЗагрузкуФайловПоРасширению); - - // СписокЗапрещенныхРасширений - СписокЗапрещенныхРасширений = ПолучитьСписокЗапрещенныхРасширений(); - Настройки.Вставить("СписокЗапрещенныхРасширений", СписокЗапрещенныхРасширений); - - // СписокРасширенийФайловOpenDocument - СписокРасширенийФайловOpenDocument = ПолучитьСписокРасширенийФайловOpenDocument(); - Настройки.Вставить("СписокРасширенийФайловOpenDocument", СписокРасширенийФайловOpenDocument); - - // СписокРасширенийТекстовыхФайлов - СписокРасширенийТекстовыхФайлов = Константы.СписокРасширенийТекстовыхФайлов.Получить(); - Если ПустаяСтрока(СписокРасширенийТекстовыхФайлов) Тогда - СписокРасширенийТекстовыхФайлов = "TXT"; - Константы.СписокРасширенийТекстовыхФайлов.Установить(СписокРасширенийТекстовыхФайлов); - КонецЕсли; - Настройки.Вставить("СписокРасширенийТекстовыхФайлов", СписокРасширенийТекстовыхФайлов); - - // ПоказыватьПодсказкиПриРедактированииФайлов - ПоказыватьПодсказкиПриРедактированииФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов"); - Если ПоказыватьПодсказкиПриРедактированииФайлов = Неопределено Тогда - ПоказыватьПодсказкиПриРедактированииФайлов = Истина; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", ПоказыватьПодсказкиПриРедактированииФайлов); - КонецЕсли; - Настройки.Вставить("ПоказыватьПодсказкиПриРедактированииФайлов", ПоказыватьПодсказкиПриРедактированииФайлов); - - // ОтпечатокЛичногоСертификатаДляШифрования - ОтпечатокЛичногоСертификатаДляШифрования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ЭЦП", "ОтпечатокЛичногоСертификатаДляШифрования"); - Настройки.Вставить("ОтпечатокЛичногоСертификатаДляШифрования", ОтпечатокЛичногоСертификатаДляШифрования); - - // ПоказыватьИнформациюЧтоФайлНеБылИзменен - ПоказыватьИнформациюЧтоФайлНеБылИзменен = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиПрограммы", "ПоказыватьИнформациюЧтоФайлНеБылИзменен"); - Если ПоказыватьИнформациюЧтоФайлНеБылИзменен = Неопределено Тогда - ПоказыватьИнформациюЧтоФайлНеБылИзменен = Истина; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("НастройкиПрограммы", "ПоказыватьИнформациюЧтоФайлНеБылИзменен", ПоказыватьИнформациюЧтоФайлНеБылИзменен); - КонецЕсли; - Настройки.Вставить("ПоказыватьИнформациюЧтоФайлНеБылИзменен", ПоказыватьИнформациюЧтоФайлНеБылИзменен); - - // Настройки открытия файлов - ТекстовыеФайлыРасширение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов\ТекстовыеФайлы", - "Расширение", "TXT XML INI"); - ТекстовыеФайлыСпособОткрытия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов\ТекстовыеФайлы", - "СпособОткрытия", Перечисления.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе); - - ГрафическиеСхемыРасширение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов\ГрафическиеСхемы", - "Расширение", "GRS"); - ГрафическиеСхемыСпособОткрытия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НастройкиОткрытияФайлов\ГрафическиеСхемы", - "СпособОткрытия", Перечисления.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе); - - Настройки.Вставить("ТекстовыеФайлыРасширение", ТекстовыеФайлыРасширение); - Настройки.Вставить("ТекстовыеФайлыСпособОткрытия", ТекстовыеФайлыСпособОткрытия); - Настройки.Вставить("ГрафическиеСхемыРасширение", ГрафическиеСхемыРасширение); - Настройки.Вставить("ГрафическиеСхемыСпособОткрытия", ГрафическиеСхемыСпособОткрытия); - -КонецПроцедуры - -// При переименовании пользователя переносит его настройки - РабочийКаталог, ДействиеПоДвойномуЩелчкуМыши и пр -// -Процедура ПеренестиНастройкиПриСменеИмениПользователя(знач ИмяТекущее, знач ИмяУстанавливаемое) Экспорт - - ПеренестиНастройку("НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", ИмяТекущее, ИмяУстанавливаемое); - - ПеренестиНастройку("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов", ИмяТекущее, ИмяУстанавливаемое); // путь к раб каталогу тоже переносим - чтобы файлы не потерялись - ПеренестиНастройку("ЛокальныйКэшФайлов", "МаксимальныйРазмерЛокальногоКэшаФайлов", ИмяТекущее, ИмяУстанавливаемое); - ПеренестиНастройку("ЛокальныйКэшФайлов", "УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования", ИмяТекущее, ИмяУстанавливаемое); - ПеренестиНастройку("ЛокальныйКэшФайлов", "ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов", ИмяТекущее, ИмяУстанавливаемое); - - ФайловыеФункцииПереопределяемый.ПеренестиНастройкиПриСменеИмениПользователя(ИмяТекущее, ИмяУстанавливаемое); - -КонецПроцедуры - -// Переносит настройку (копирует в новое место, в старом удаляет) -// -Процедура ПеренестиНастройку(Объект, Настройка, ИмяТекущее, ИмяУстанавливаемое) Экспорт - - УстановитьПривилегированныйРежим(Истина); - - Значение = ХранилищеОбщихНастроек.Загрузить(Объект, Настройка, , ИмяТекущее); - - Если Значение <> Неопределено Тогда - ХранилищеОбщихНастроек.Сохранить(Объект, Настройка, Значение, , ИмяУстанавливаемое); - ХранилищеОбщихНастроек.Удалить(Объект, Настройка, ИмяТекущее); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Служебные функции поддержки обмена файлами - -// Служебная функция используется при создании начального образа -// Выполняется всегда на сервере -// -Процедура СкопироватьФайлПриСозданииНачальногоОбраза(ПолныйПуть, НовыйПутьФайла) Экспорт - - Попытка - // если файл в томе - скопируем его во временный каталог (при создании начального образа) - КопироватьФайл(ПолныйПуть, НовыйПутьФайла); - ФайлВременный = Новый Файл(НовыйПутьФайла); - ФайлВременный.УстановитьТолькоЧтение(Ложь); - Исключение - // не регистрируется, возможно файл не найден - КонецПопытки; - -КонецПроцедуры - -// Служебная функция используется для помещения двоичных данных файла в томе -// в хранилище значения -// -Функция ПоместитьДвоичныеДанныеВХранилище(Том, ПутьКФайлу, УникальныйИдентификатор) Экспорт - - ПолныйПуть = ПолныйПутьТома(Том) + ПутьКФайлу; - УникальныйИдентификатор = УникальныйИдентификатор; - - ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); - Возврат Новый ХранилищеЗначения(ДвоичныеДанные); - -КонецФункции - -// Служебная функции. Используется для удаления файла на сервере -// -Процедура УдалитьФайлыНаСервере(Ссылка, ПрежнийПутьНаТоме) Экспорт - - ФайлВременный = Новый Файл(ПрежнийПутьНаТоме); - Если ФайлВременный.Существует() Тогда - - Попытка - ФайлВременный.УстановитьТолькоЧтение(Ложь); - УдалитьФайлы(ПрежнийПутьНаТоме); - Исключение - - ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление файлов в томе при обмене'"), - УровеньЖурналаРегистрации.Ошибка,,, - ОписаниеОшибки); - - КонецПопытки; - - КонецЕсли; - - ФайловыеФункцииПереопределяемый.УдалитьФайлыПриПолученииДанныхФайла(Ссылка, ФайлВременный.Путь); - -КонецПроцедуры - -// Получает СписокРасширенийФайловOpenDocument -// -Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт - - УстановитьПривилегированныйРежим(Истина); - - СписокРасширенийФайловOpenDocumentОбластиДанных = Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Получить(); - Если СписокРасширенийФайловOpenDocumentОбластиДанных = Неопределено ИЛИ СписокРасширенийФайловOpenDocumentОбластиДанных = "" Тогда - СписокРасширенийФайловOpenDocumentОбластиДанных = "ODT OTT ODP OTP ODS OTS ODC OTC ODF OTF ODM OTH SDW STW SXW STC SXC SDC SDD STI"; - Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Установить(СписокРасширенийФайловOpenDocumentОбластиДанных); - КонецЕсли; - - ИтоговыйСписокРасширений = ""; - - Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда - СписокЗапрещенныхРасширений = Константы.СписокРасширенийФайловOpenDocument.Получить(); - ИтоговыйСписокРасширений = СписокЗапрещенныхРасширений + " " + СписокРасширенийФайловOpenDocumentОбластиДанных; - Иначе - ИтоговыйСписокРасширений = СписокРасширенийФайловOpenDocumentОбластиДанных; - КонецЕсли; - - Возврат ИтоговыйСписокРасширений; - -КонецФункции - -// Получает СписокРасширенийТекстовыхФайлов -// -Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт - - УстановитьПривилегированныйРежим(Истина); - СписокРасширенийТекстовыхФайлов = Константы.СписокРасширенийТекстовыхФайлов.Получить(); - Если ПустаяСтрока(СписокРасширенийТекстовыхФайлов) Тогда - СписокРасширенийТекстовыхФайлов = "TXT"; - КонецЕсли; - Возврат СписокРасширенийТекстовыхФайлов; - -КонецФункции - -// Вызывается при обмене данными для определения пути к файлу. -// -// Параметры -// ЭлементДаннных - элемент данных, изменение которого зарегистрировано и который -// должен быть помещен в сообщение обмена данными. -// ИмяКаталогаФайлов - Строка - имя каталога к файлу. -// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор файла. -// -// Возвращаемое значение: -// Строка - путь к файлу. -// -// -Функция ИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор) Экспорт - - Результат = Неопределено; - ФайловыеФункцииПереопределяемый.УстановитьИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, - УникальныйИдентификатор, Результат); - Возврат Результат; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Прочие служебные функции - -// Возвращает Истина, если есть хранимые файлы к объекту ВнешнийОбъект. -// -Функция ЕстьХранимыеФайлы(ВнешнийОбъект) Экспорт - - Результат = Ложь; - ФайловыеФункцииПереопределяемый.ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, Результат); - Возврат Результат; - -КонецФункции - -// Возвращает хранимые файлы к объекту ВнешнийОбъект -// -Функция ПолучитьХранимыеФайлы(ВнешнийОбъект) Экспорт - - МассивДанных = Новый Массив; - ФайловыеФункцииПереопределяемый.ПолучитьХранимыеФайлы(ВнешнийОбъект, МассивДанных); - Возврат МассивДанных; - -КонецФункции - -// Вычисляет кодировку -Функция ОпределитьКодировкуВерсии(ВерсияСсылка, Расширение) Экспорт - - СписокРасширенийТекстовыхФайлов = ФайловыеФункцииПовтИсп.ПолучитьСписокРасширенийТекстовыхФайлов(); - - Если ФайловыеФункцииКлиентСервер.РасширениеФайлаВСписке(СписокРасширенийТекстовыхФайлов, Расширение) Тогда - - ИмяФайлаСПутем = ФайловыеФункцииПереопределяемый.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ВерсияСсылка); - - Кодировка = ФайловыеФункцииКлиентСервер.ОпределитьКодировкуТекстовогоФайла(ИмяФайлаСПутем); - - ТипХраненияФайла = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ВерсияСсылка, "ТипХраненияФайла"); - - Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда - УдалитьФайлы(ИмяФайлаСПутем); - КонецЕсли; - - Возврат Кодировка; - - КонецЕсли; - - Возврат Неопределено; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// ЭЦП для файлов - -// Проверяет все подписи (на сервере) из массива ДанныеВыделенныхСтрок -Процедура ПроверитьНаСервере(ДанныеВыделенныхСтрок) Экспорт - - УстановитьПривилегированныйРежим(Истина); - ПровайдерЭЦП = Константы.ПровайдерЭЦП.Получить(); - ПутьМодуляКриптографии = ЭлектроннаяЦифроваяПодписьПовтИсп.ПутьМодуляКриптографии(); - ТипПровайдераЭЦП = Константы.ТипПровайдераЭЦП.Получить(); - АлгоритмПодписи = Константы.АлгоритмПодписи.Получить(); - АлгоритмХеширования = Константы.АлгоритмХеширования.Получить(); - АлгоритмШифрования = Константы.АлгоритмШифрования.Получить(); - УстановитьПривилегированныйРежим(Ложь); - - МенеджерКриптографии = Новый МенеджерКриптографии(ПровайдерЭЦП, ПутьМодуляКриптографии, ТипПровайдераЭЦП); - МенеджерКриптографии.АлгоритмПодписи = АлгоритмПодписи; - МенеджерКриптографии.АлгоритмХеширования = АлгоритмХеширования; - МенеджерКриптографии.АлгоритмШифрования = АлгоритмШифрования; - - Для Каждого ДанныеСтроки Из ДанныеВыделенныхСтрок Цикл - Если ДанныеСтроки.Объект <> Неопределено И (НЕ ДанныеСтроки.Объект.Пустая()) Тогда - ПроверитьОднуПодписьНаСервере(ДанныеСтроки, МенеджерКриптографии); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Проверяет все подписи (на сервере) из ТаблицаПодписей -Процедура ПроверитьВсеНаСервере(ТаблицаПодписей) Экспорт - - УстановитьПривилегированныйРежим(Истина); - ПровайдерЭЦП = Константы.ПровайдерЭЦП.Получить(); - ПутьМодуляКриптографии = ЭлектроннаяЦифроваяПодписьПовтИсп.ПутьМодуляКриптографии(); - ТипПровайдераЭЦП = Константы.ТипПровайдераЭЦП.Получить(); - АлгоритмПодписи = Константы.АлгоритмПодписи.Получить(); - АлгоритмХеширования = Константы.АлгоритмХеширования.Получить(); - АлгоритмШифрования = Константы.АлгоритмШифрования.Получить(); - УстановитьПривилегированныйРежим(Ложь); - - МенеджерКриптографии = Новый МенеджерКриптографии(ПровайдерЭЦП, ПутьМодуляКриптографии, ТипПровайдераЭЦП); - МенеджерКриптографии.АлгоритмПодписи = АлгоритмПодписи; - МенеджерКриптографии.АлгоритмХеширования = АлгоритмХеширования; - МенеджерКриптографии.АлгоритмШифрования = АлгоритмШифрования; - - Для Каждого Строка Из ТаблицаПодписей Цикл - Если Строка.Объект <> Неопределено И (НЕ Строка.Объект.Пустая()) Тогда - ПроверитьОднуПодписьНаСервере(Строка, МенеджерКриптографии); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Проверяет одну подпись( на сервере) -Процедура ПроверитьОднуПодписьНаСервере(ДанныеСтроки, МенеджерКриптографии) - - СтруктураВозврата = ФайловыеФункцииПереопределяемый.ПолучитьДвоичныеДанныеФайлаИПодписи(ДанныеСтроки); - - ДвоичныеДанныеФайла = СтруктураВозврата.ДвоичныеДанные; - ДвоичныеДанныеПодписи = СтруктураВозврата.ДвоичныеДанныеПодписи; - - Попытка - ЭлектроннаяЦифроваяПодпись.ПроверитьПодпись(МенеджерКриптографии, ДвоичныеДанныеФайла, ДвоичныеДанныеПодписи); - ДанныеСтроки.Статус = НСтр("ru = 'Верна'"); - ДанныеСтроки.Неверна = Ложь; - Исключение - ДанныеСтроки.Статус = НСтр("ru = 'Неверна. '"); - Инфо = ИнформацияОбОшибке(); - Если Инфо.Причина <> Неопределено Тогда - ДанныеСтроки.Статус = ДанныеСтроки.Статус + Инфо.Причина.Описание; - КонецЕсли; - ДанныеСтроки.Неверна = Истина; - КонецПопытки; - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ФайловыеФункции/ФайловыеФункции.mdo b/SSL/src/CommonModules/ФайловыеФункции/ФайловыеФункции.mdo index 8a5b2d8ad..b3e741c32 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 deleted file mode 100644 index 0e52b3f73..000000000 --- a/SSL/src/CommonModules/ФайловыеФункцииКлиентПовтИсп/Module.bsl +++ /dev/null @@ -1,32 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// МОДУЛЬ СОДЕРЖИТ ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ФАЙЛАМИ -// - -// Возвращает структуру, содержащую различные персональные настройки -// -Функция ПолучитьПерсональныеНастройкиРаботыСФайлами() Экспорт - Возврат СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ПерсональныеНастройкиРаботыСФайлами; -КонецФункции - -// Возвращает параметр сеанса ПутьКРабочемуКаталогуПользователя -// -Функция ПолучитьРабочийКаталогПользователя() Экспорт - Возврат ФайловыеФункции.ПолучитьПутьКРабочемуКаталогуПользователя(); -КонецФункции - -// Возвращает форму, которая используется для информирования -// пользователей об особенностях заема и редактирования файлов -// в веб-клиенте -Функция ПолучитьФормуНапоминанияПриРедактировании() Экспорт - Возврат ПолучитьФорму("ОбщаяФорма.НапоминаниеПриРедактировании"); -КонецФункции - -// Получает СписокРасширенийФайловOpenDocument -Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт - Возврат ФайловыеФункции.ПолучитьСписокРасширенийФайловOpenDocument(); -КонецФункции - -// Получает СписокРасширенийТекстовыхФайлов -Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт - Возврат ФайловыеФункции.ПолучитьСписокРасширенийТекстовыхФайлов(); -КонецФункции diff --git a/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/Module.bsl deleted file mode 100644 index ab9b4e54a..000000000 --- a/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/Module.bsl +++ /dev/null @@ -1,326 +0,0 @@ -// Возвращает структуру, содержащую различные персональные настройки -// по работе с файлами -Процедура ПолучитьПерсональныеНастройкиРаботыСФайлами(Настройки) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.ПолучитьПерсональныеНастройкиФайловыхФункций(Настройки); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры - -// При переименовании пользователя переносит его настройки - РабочийКаталог, ДействиеПоДвойномуЩелчкуМыши и пр -// -Процедура ПеренестиНастройкиПриСменеИмениПользователя(знач ИмяТекущее, знач ИмяУстанавливаемое) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.ПеренестиНастройкиПриСменеИмениПользователя(ИмяТекущее, ИмяУстанавливаемое); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры - -// Вызывается при обмене данными для определения пути к файлу. -// -// Параметры -// ЭлементДаннных - элемент данных, изменение которого зарегистрировано и который -// должен быть помещен в сообщение обмена данными. -// ИмяКаталогаФайлов - Строка - имя каталога к файлу. -// УникальныйИдентификатор - УникальныйИдентификатор - уникальный идентификатор файла. -// ПутьФайла - Строка - в этом параметре требуется вернуть путь к файлу. -// -// -Процедура УстановитьИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор, ПутьФайла) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиСобытия.УстановитьИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор, ПутьФайла); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлыСобытия.УстановитьИмяФайлаПриОтправкеДанныхФайла(ЭлементДанных, ИмяКаталогаФайлов, УникальныйИдентификатор, ПутьФайла); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Удаляет файл при обмене -// -Процедура УдалитьФайлыПриПолученииДанныхФайла(ЭлементДанных, ПутьСПодкаталогом) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.УдалитьФайлыПриПолученииДанныхФайла(ЭлементДанных, ПутьСПодкаталогом); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры - -// Добавляет файл на том при обмене -// -Процедура ДобавитьНаДискПриПолученииДанныхФайла(ЭлементДанных, ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, ВремяИзменения, - ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиСобытия.ДобавитьНаДискПриПолученииДанныхФайла(ЭлементДанных, ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, - ВремяИзменения, ИмяБезРасширения, Расширение, РазмерФайла); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлыСобытия.ДобавитьНаДискПриПолученииДанныхФайла(ЭлементДанных, ДвоичныеДанные, ПутьКФайлуНаТоме, СсылкаНаТом, - ВремяИзменения, ИмяБезРасширения, Расширение, РазмерФайла, Зашифрован); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Добавляет файл на том при "Разместить файлы начального образа" -// -Процедура ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ХранитьФайлыВТомахНаДиске, ПрисоединяемыеФайлы) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ХранитьФайлыВТомахНаДиске); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлы.ДобавитьФайлыВТомаПриРазмещении(СоответствиеПутейФайлов, ХранитьФайлыВТомахНаДиске, ПрисоединяемыеФайлы); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Удаляет регистрацию изменений после "Разместить файлы начального образа" -// -Процедура УдалитьРегистрациюИзменений(ПланОбменаСсылка, ПрисоединяемыеФайлы) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.УдалитьРегистрациюИзменений(ПланОбменаСсылка); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлы.УдалитьРегистрациюИзменений(ПланОбменаСсылка, ПрисоединяемыеФайлы); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Возвращает Истина, если это элемент данных - Версия файла или Присоединенный файл. -// -Процедура ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиСобытия.ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлыСобытия.ЭтоЭлементФайл(ЭлементДанных, ЭтоФайл); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Возвращает Истина, если это элемент данных - ХранимыеФайлыВерсий -// -Процедура ЭтоЭлементХранимыеФайлыВерсий(ЭлементДанных, ЭтоФайл) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиСобытия.ЭтоЭлементХранимыеФайлыВерсий(ЭлементДанных, ЭтоФайл); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры - -// Возвращает Истина в параметре Значение, если элемент данных (справочник Файл) запрещен к загрузке -// -Процедура ЭлементЗапрещенКЗагрузке(ЭлементДанных, ПолучениеЭлемента, Значение) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиСобытия.ЭлементЗапрещенКЗагрузке(ЭлементДанных, ПолучениеЭлемента, Значение); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры - -// Возвращает структуру с двоичными данными файла и подписи -// -Функция ПолучитьДвоичныеДанныеФайлаИПодписи(ДанныеСтроки) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(ДанныеСтроки.Объект) Тогда - Возврат РаботаСФайламиВызовСервера.ПолучитьДанныеФайлаИДвоичныеДанные(, ДанныеСтроки.Объект, ДанныеСтроки.АдресПодписи); - КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - Если ПрисоединенныеФайлыСобытия.ЭтоЭлементПрисоединенныеФайлы(ДанныеСтроки.Объект) Тогда - Возврат ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайлаИПодписи(ДанныеСтроки.Объект, ДанныеСтроки.АдресПодписи); - КонецЕсли; - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - - Возврат Неопределено; - -КонецФункции - -// Возвращает текст запроса для извлечения текста -// -Процедура ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы = Ложь) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлы.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса, ПолучитьВсеФайлы); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Возвращает число файлов с неизвлеченным текстом -// -Процедура ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(ЧислоВерсий) Экспорт - - ЧислоВерсий = 0; - - // СтандартныеПодсистемы.РаботаСФайлами - ЧислоВерсий = ЧислоВерсий + РаботаСФайламиВызовСервера.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ЧислоВерсий = ЧислоВерсий + ПрисоединенныеФайлы.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -Процедура ПодсчитатьРазмерФайловНаТоме(СсылкаТома, РазмерФайлов) Экспорт - - РазмерФайлов = 0; - - // СтандартныеПодсистемы.РаботаСФайлами - РазмерФайлов = РазмерФайлов + РаботаСФайламиВызовСервера.ПодсчитатьРазмерФайловНаТоме(СсылкаТома); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры - -// Получает полный путь к файлу на диске -Функция ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(ФайлСсылка) Тогда - Возврат РаботаСФайламиВызовСервера.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка); - КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - Если ПрисоединенныеФайлыСобытия.ЭтоЭлементПрисоединенныеФайлы(ФайлСсылка) Тогда - Возврат ПрисоединенныеФайлы.ПолучитьИмяФайлаСПутемКДвоичнымДанным(ФайлСсылка); - КонецЕсли; - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецФункции - -// Записывает извлеченный текст -Процедура ЗаписатьИзвлеченныйТекст(ФайлОбъект) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(ФайлОбъект) Тогда - РаботаСФайламиВызовСервера.ЗаписатьИзвлеченныйТекст(ФайлОбъект); - КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - Если ПрисоединенныеФайлыСобытия.ЭтоЭлементПрисоединенныеФайлы(ФайлОбъект) Тогда - ПрисоединенныеФайлы.ЗаписатьИзвлеченныйТекст(ФайлОбъект); - КонецЕсли; - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Возвращает навигационную ссылку на файл (на реквизит или во временное хранилище) -Функция ПолучитьНавигационнуюСсылкуФайла(ФайлСсылка, УникальныйИдентификатор) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - Если РаботаСФайламиСобытия.ЭтоЭлементРаботаСФайлами(ФайлСсылка) Тогда - Возврат РаботаСФайламиВызовСервера.ПолучитьНавигационнуюСсылкуДляОткрытия(ФайлСсылка, УникальныйИдентификатор); - КонецЕсли; - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - Если ПрисоединенныеФайлыСобытия.ЭтоЭлементПрисоединенныеФайлы(ФайлСсылка) Тогда - Возврат ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлСсылка, УникальныйИдентификатор).СсылкаНаДвоичныеДанныеФайла; - КонецЕсли; - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецФункции - -// Возвращает в параметре КоличествоФайловВТомах количество файлов в томах. -// -Процедура ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлы.ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Выполняет дополнительную обработку при отправке данных обмена. -// -Процедура ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(ЭлементДанных) Экспорт - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлыСобытия.ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(ЭлементДанных); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиСобытия.ВыполнитьДополнительнуюОбработкуПриОтправкеДанных(ЭлементДанных); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры - -// Выполняет дополнительную обработку при получении данных обмена. -// -Процедура ВыполнитьДополнительнуюОбработкуПриПолученииДанных(ЭлементДанных) Экспорт - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлыСобытия.ВыполнитьДополнительнуюОбработкуПриПолученииДанных(ЭлементДанных); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиСобытия.ВыполнитьДополнительнуюОбработкуПриПолученииДанных(ЭлементДанных); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры - -// Возвращает Истина в параметре ЕстьХранимыеФайлы, если есть хранимые файлы к объекту ВнешнийОбъект. -// -Процедура ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлы.ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, ЕстьХранимыеФайлы); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Возвращает в параметре ХранимыеФайлы массив хранимых файлов к объекту ВнешнийОбъект. -// -Процедура ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - РаботаСФайламиВызовСервера.ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы); - // Конец СтандартныеПодсистемы.РаботаСФайлами - - // СтандартныеПодсистемы.ПрисоединенныеФайлы - ПрисоединенныеФайлы.ПолучитьХранимыеФайлы(ВнешнийОбъект, ХранимыеФайлы); - // Конец СтандартныеПодсистемы.ПрисоединенныеФайлы - -КонецПроцедуры - -// Читает кодировку версии файла -// -// Параметры -// ВерсияСсылка - ссылка на версию файла -// -// Возвращаемое значение: -// Строка кодировки -Процедура ПолучитьКодировкуВерсииФайла(ВерсияСсылка, Кодировка) Экспорт - - // СтандартныеПодсистемы.РаботаСФайлами - Кодировка = РаботаСФайламиВызовСервера.ПолучитьКодировкуВерсииФайла(ВерсияСсылка); - // Конец СтандартныеПодсистемы.РаботаСФайлами - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/ФайловыеФункцииПереопределяемый.mdo b/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/ФайловыеФункцииПереопределяемый.mdo deleted file mode 100644 index da9602e3d..000000000 --- a/SSL/src/CommonModules/ФайловыеФункцииПереопределяемый/ФайловыеФункцииПереопределяемый.mdo +++ /dev/null @@ -1,12 +0,0 @@ - - - ФайловыеФункцииПереопределяемый - - ru - Файловые функции переопределяемый - - true - true - true - true - diff --git a/SSL/src/CommonModules/ФайловыеФункцииПовтИсп/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииПовтИсп/Module.bsl deleted file mode 100644 index 79ac23aba..000000000 --- a/SSL/src/CommonModules/ФайловыеФункцииПовтИсп/Module.bsl +++ /dev/null @@ -1,14 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// МОДУЛЬ СОДЕРЖИТ ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ РАБОТЫ С ФАЙЛАМИ -// -// - -// Получает СписокРасширенийФайловOpenDocument -Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт - Возврат ФайловыеФункции.ПолучитьСписокРасширенийФайловOpenDocument(); -КонецФункции - -// Получает СписокРасширенийТекстовыхФайлов -Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт - Возврат ФайловыеФункции.ПолучитьСписокРасширенийТекстовыхФайлов(); -КонецФункции diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl new file mode 100644 index 000000000..5ebb65ab0 --- /dev/null +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/Module.bsl @@ -0,0 +1,750 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Файловые функции". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Параметры.Вставить("ПерсональныеНастройкиРаботыСФайлами", Новый ФиксированнаяСтруктура( + ФайловыеФункцииСлужебныйПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами())); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Извлекает текст из файлов на диске +Процедура ИзвлечениеТекста() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); + + Если НЕ ЭтоПлатформаWindows() Тогда + Возврат; // извлечение текста работает только под Windows + КонецЕсли; + + ИмяСРасширениемФайла = ""; + + ЗаписьЖурналаРегистрации("Извлечение текста", + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Начато регламентное извлечение текста'")); + + ТекстЗапроса = Неопределено; + СтандартныеПодсистемыПереопределяемый.ПолучитьТекстЗапросаДляИзвлеченияТекста(ТекстЗапроса); + Запрос = Новый Запрос(ТекстЗапроса); + Результат = Запрос.Выполнить(); + + ТаблицаВыгрузки = Результат.Выгрузить(); + + Для Каждого Строка Из ТаблицаВыгрузки Цикл + + ФайлОбъект = Строка.Ссылка.ПолучитьОбъект(); + Попытка + ФайлОбъект.Заблокировать(); + Исключение + // если файл уже заблокирован - не обрабатываем его + Продолжить; + КонецПопытки; + + ИмяСРасширениемФайла = ФайлОбъект.Наименование + "." + ФайлОбъект.Расширение; + ИмяФайлаСПутем = ""; + + ИмяФайлаСПутем = СтандартныеПодсистемыПереопределяемый.ПолучитьИмяФайлаСПутемКДвоичнымДанным( + ФайлОбъект.Ссылка); + + Если ПустаяСтрока(ИмяФайлаСПутем) Тогда + Продолжить; + КонецЕсли; + + Кодировка = ПолучитьКодировкуВерсииФайла(Строка.Ссылка); + + Отказ = Ложь; + Текст = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Кодировка); + + Если Отказ = Ложь Тогда + ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + Иначе + // Ничего не пишем в журнал регистрации - это нормальная ситуация - когда Текст некому извлечь + ФайлОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + КонецЕсли; + + Если Строка.ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе Тогда + УдалитьФайлы(ИмяФайлаСПутем); + КонецЕсли; + + ФайлОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст, Новый СжатиеДанных); + + Попытка + СтандартныеПодсистемыПереопределяемый.ЗаписатьИзвлеченныйТекст(ФайлОбъект); + Исключение + + ОписаниеОшибкиИнфо = ОписаниеОшибки(); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Во время регламентного извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), + ИмяСРасширениемФайла); + ТекстСообщения = ТекстСообщения + Строка(ОписаниеОшибкиИнфо); + + ЗаписьЖурналаРегистрации("Извлечение текста", + УровеньЖурналаРегистрации.Ошибка, , , + ТекстСообщения); + + КонецПопытки; + + КонецЦикла; + + ЗаписьЖурналаРегистрации("Извлечение текста", + УровеньЖурналаРегистрации.Информация, , , + НСтр("ru = 'Закончено регламентное извлечение текста'")); + +КонецПроцедуры + +// Получает строку из временного хранилища (передача с клиента на сервер, +// делается через временное хранилище) +// +Функция ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста) Экспорт + + Если ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда + Возврат ""; + КонецЕсли; + + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ПолучитьИзВременногоХранилища(АдресВременногоХранилищаТекста).Записать(ИмяВременногоФайла); + + ТекстовыйФайл = Новый ЧтениеТекста(ИмяВременногоФайла, КодировкаТекста.UTF8); + Текст = ТекстовыйФайл.Прочитать(); + ТекстовыйФайл.Закрыть(); + УдалитьФайлы(ИмяВременногоФайла); + + Возврат Текст; + +КонецФункции + +// Возвращает максимальный размер файла +// +Функция ПолучитьМаксимальныйРазмерФайла() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МаксимальныйРазмерФайла = Константы.МаксимальныйРазмерФайла.Получить(); + Если МаксимальныйРазмерФайла = Неопределено ИЛИ МаксимальныйРазмерФайла = 0 Тогда + МаксимальныйРазмерФайла = 50*1024*1024; // 50 мб + Константы.МаксимальныйРазмерФайла.Установить(МаксимальныйРазмерФайла); + КонецЕсли; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + МаксимальныйРазмерФайлаОбластиДанных = Константы.МаксимальныйРазмерФайлаОбластиДанных.Получить(); + + Если МаксимальныйРазмерФайлаОбластиДанных = Неопределено ИЛИ МаксимальныйРазмерФайлаОбластиДанных = 0 Тогда + МаксимальныйРазмерФайлаОбластиДанных = 50*1024*1024; // 50 мб + Константы.МаксимальныйРазмерФайлаОбластиДанных.Установить(МаксимальныйРазмерФайлаОбластиДанных); + КонецЕсли; + + МаксимальныйРазмерФайла = Мин(МаксимальныйРазмерФайла, МаксимальныйРазмерФайлаОбластиДанных); + + КонецЕсли; + + Возврат МаксимальныйРазмерФайла; + +КонецФункции + +// Возвращает максимальный размер файла провайдера +// +Функция ПолучитьМаксимальныйРазмерФайлаОбщий() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + МаксимальныйРазмерФайла = Константы.МаксимальныйРазмерФайла.Получить(); + Если МаксимальныйРазмерФайла = Неопределено ИЛИ МаксимальныйРазмерФайла = 0 Тогда + МаксимальныйРазмерФайла = 50*1024*1024; // 50 мб + Константы.МаксимальныйРазмерФайла.Установить(МаксимальныйРазмерФайла); + КонецЕсли; + + Возврат МаксимальныйРазмерФайла; + +КонецФункции + +// Возвращает значение константы ИзвлекатьТекстыФайловНаСервере +Функция ФоновоеИзвлечениеТекстовФайловНаСервере() Экспорт + + УстановитьПривилегированныйРежим(Истина); + Возврат Константы.ИзвлекатьТекстыФайловНаСервере.Получить(); + +КонецФункции + +// Возвращает Истина, если сервер работает под Windows +Функция ЭтоПлатформаWindows() Экспорт + + ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); + + Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 + ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Возврат Истина; + Иначе + Возврат Ложь; + КонецЕсли; + +КонецФункции + +// Записывает на сервер результат извлечения текста - извлеченный текст и СтатусИзвлеченияТекста +Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, РезультатИзвлечения, АдресВременногоХранилищаТекста) Экспорт + + ФайлИлиВерсияОбъект = ФайлИлиВерсияСсылка.ПолучитьОбъект(); + ФайлИлиВерсияОбъект.Заблокировать(); + + Если ПустаяСтрока(АдресВременногоХранилищаТекста) Тогда + Текст = ""; + Иначе + Текст = ПолучитьСтрокуИзВременногоХранилища(АдресВременногоХранилищаТекста); + ФайлИлиВерсияОбъект.ТекстХранилище = Новый ХранилищеЗначения(Текст); + УдалитьИзВременногоХранилища(АдресВременногоХранилищаТекста); + КонецЕсли; + + Если РезультатИзвлечения = "НеИзвлечен" Тогда + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; + ИначеЕсли РезультатИзвлечения = "Извлечен" Тогда + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.Извлечен; + ИначеЕсли РезультатИзвлечения = "ИзвлечьНеУдалось" Тогда + ФайлИлиВерсияОбъект.СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.ИзвлечьНеУдалось; + КонецЕсли; + + СтандартныеПодсистемыПереопределяемый.ЗаписатьИзвлеченныйТекст(ФайлИлиВерсияОбъект); + +КонецПроцедуры + +// Возвращает ЗапрещатьЗагрузкуФайловПоРасширению +Функция ПолучитьЗапретЗагрузкиФайловПоРасширению() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ЗапретЗагрузкиФайловПоРасширению = Константы.ЗапрещатьЗагрузкуФайловПоРасширению.Получить(); + Возврат ЗапретЗагрузкиФайловПоРасширению; + +КонецФункции + +// Возвращает СписокЗапрещенныхРасширений +Функция ПолучитьСписокЗапрещенныхРасширений() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СписокЗапрещенныхРасширенийОбластиДанных = Константы.СписокЗапрещенныхРасширенийОбластиДанных.Получить(); + Если СписокЗапрещенныхРасширенийОбластиДанных = Неопределено ИЛИ СписокЗапрещенныхРасширенийОбластиДанных = "" Тогда + СписокЗапрещенныхРасширенийОбластиДанных = "COM EXE BAT CMD VBS VBE JS JSE WSF WSH SCR"; + Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокЗапрещенныхРасширенийОбластиДанных); + КонецЕсли; + + ИтоговыйСписокРасширений = ""; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + СписокЗапрещенныхРасширений = Константы.СписокЗапрещенныхРасширений.Получить(); + ИтоговыйСписокРасширений = СписокЗапрещенныхРасширений + " " + СписокЗапрещенныхРасширенийОбластиДанных; + Иначе + ИтоговыйСписокРасширений = СписокЗапрещенныхРасширенийОбластиДанных; + КонецЕсли; + + Возврат ИтоговыйСписокРасширений; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Работа с томами файлов + +// Добавляет файл в один из томов (где есть свободное место) +// +Процедура ДобавитьНаДиск( + ДвоичныеДанные, + ПутьКФайлуВТоме, + СсылкаНаТом, + ВремяИзменения, + НомерВерсии, + ИмяБезРасширения, + Расширение, + РазмерФайла = 0, + Зашифрован = Ложь, + ДатаДляРазмещенияВТоме = Неопределено) Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СсылкаНаТом = Справочники.ТомаХраненияФайлов.ПустаяСсылка(); + + ОписаниеВсехОшибок = ""; // здесь соберем ошибки со всех томов + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ТомаХраненияФайлов.Ссылка + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов + |ГДЕ + | ТомаХраненияФайлов.ПометкаУдаления = &ПометкаУдаления + | + |УПОРЯДОЧИТЬ ПО + | ТомаХраненияФайлов.ПорядокЗаполнения"; + + Запрос.УстановитьПараметр("ПометкаУдаления", Ложь); + Выборка = Запрос.Выполнить().Выбрать(); + + Если Выборка.Количество() = 0 Тогда + ВызватьИсключение(НСтр("ru = 'Нет ни одного тома для размещения файла.'")); + КонецЕсли; + + Пока Выборка.Следующий() Цикл + + СсылкаНаТом = Выборка.Ссылка; + + ПутьКТому = ПолныйПутьТома(СсылкаНаТом); + // Добавляем слэш в конце, если его нет. + ПутьКТому = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути( + ПутьКТому, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + + // Имя файла для хранения на диске формировать следующим образом + // - имя файла.номер версии.расширение файла. + Если ПустаяСтрока(НомерВерсии) Тогда + ИмяФайла = ИмяБезРасширения + "." + Расширение; + Иначе + ИмяФайла = ИмяБезРасширения + "." + НомерВерсии + "." + Расширение; + КонецЕсли; + + Если Зашифрован Тогда + ИмяФайла = ИмяФайла + "." + "p7m"; + КонецЕсли; + + Попытка + + // Если МаксимальныйРазмер = 0 - нет ограничения на размер файлов на томе. + Если СсылкаНаТом.МаксимальныйРазмер <> 0 Тогда + + ТекущийРазмерВБайтах = 0; + + СтандартныеПодсистемыПереопределяемый.ПодсчитатьРазмерФайловНаТоме( + СсылкаНаТом.Ссылка, ТекущийРазмерВБайтах); + + НовыйРазмерВБайтах = ТекущийРазмерВБайтах + РазмерФайла; + НовыйРазмер = НовыйРазмерВБайтах / (1024 * 1024); + + Если НовыйРазмер > СсылкаНаТом.МаксимальныйРазмер Тогда + + ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Превышен максимальный размер тома (%1 Мб).'"), + СсылкаНаТом.МаксимальныйРазмер); + КонецЕсли; + КонецЕсли; + + Дата = ТекущаяДатаСеанса(); + Если ДатаДляРазмещенияВТоме <> Неопределено Тогда + Дата = ДатаДляРазмещенияВТоме; + КонецЕсли; + + ПутьДня = Формат(Дата, "ДФ=ггггММдд") + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + ПутьКТому = ПутьКТому + ПутьДня; + + ИмяФайлаСПутем = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьУникальноеИмяСПутем(ПутьКТому, ИмяФайла, ОбщегоНазначенияПовтИсп.ТипПлатформыСервера()); + ПолноеИмяФайлаСПутем = ПутьКТому + ИмяФайлаСПутем; + + Если ТипЗнч(ДвоичныеДанные) = Тип("ДвоичныеДанные") Тогда + ДвоичныеДанные.Записать(ПолноеИмяФайлаСПутем); + ИначеЕсли ТипЗнч(ДвоичныеДанные) = Тип("Строка") Тогда // считаем, что иначе это путь к файлу на диске + КопироватьФайл(ДвоичныеДанные, ПолноеИмяФайлаСПутем); + Иначе + СтрокаИсключения = НСтр("ru = 'Неверный тип данных для добавления на том'"); + ВызватьИсключение(СтрокаИсключения); + КонецЕсли; + + // Установим время изменения файла таким, как оно стоит в текущей версии + ФайлНаДиске = Новый Файл(ПолноеИмяФайлаСПутем); + ФайлНаДиске.УстановитьВремяИзменения(ВремяИзменения); + ФайлНаДиске.УстановитьТолькоЧтение(Истина); + + ПутьКФайлуВТоме = ПутьДня + ИмяФайлаСПутем; + Возврат; // закончили - выйдем из процедуры + + Исключение + Если ОписаниеВсехОшибок <> "" Тогда + ОписаниеВсехОшибок = ОписаниеВсехОшибок + Символы.ПС + Символы.ПС; + КонецЕсли; + + ОписаниеВсехОшибок = ОписаниеВсехОшибок + НСтр("ru = 'Ошибка при добавлении файла на том: '"); + ОписаниеВсехОшибок = ОписаниеВсехОшибок + СсылкаНаТом; + ОписаниеВсехОшибок = ОписаниеВсехОшибок + " (" + ПутьКТому + "): "; + ОписаниеВсехОшибок = ОписаниеВсехОшибок + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + + Если СсылкаНаТом.ПолныйПутьLinux = СсылкаНаТом.ПолныйПутьWindows Тогда + ОписаниеВсехОшибок = ОписаниеВсехОшибок + Символы.ПС; + ОписаниеВсехОшибок = ОписаниеВсехОшибок + НСтр("ru = 'Настройте полный путь к тому.'"); + КонецЕсли; + // надо переходить к следующему тому + Продолжить; + КонецПопытки; + + КонецЦикла; + + УстановитьПривилегированныйРежим(Ложь); + + // запись в журнал регистрации для администратора + // здесь выдадим ошибки со всех томов + СообщениеОбОшибке = НСтр("ru = 'Не удалось добавить файл ни на один из томов. Список ошибок: '") + Символы.ПС + Символы.ПС + ОписаниеВсехОшибок; + ЗаписьЖурналаРегистрации("Добавление файла", УровеньЖурналаРегистрации.Ошибка, , , СообщениеОбОшибке); + + // здесь сообщение пользователю + СтрокаИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось добавить файл: ""%1.%2"". Обратитесь к администратору системы.'"), + ИмяБезРасширения, Расширение); + + Если Пользователи.ЭтоПолноправныйПользователь() Тогда + СтрокаИсключения = СообщениеОбОшибке; + КонецЕсли; + ВызватьИсключение СтрокаИсключения; + +КонецПроцедуры + +// Возвращает полный путь тома - в зависимости от ОС +Функция ПолныйПутьТома(СсылкаНаТом) Экспорт + + ТипПлатформыСервера = ОбщегоНазначенияПовтИсп.ТипПлатформыСервера(); + + Если ТипПлатформыСервера = ТипПлатформы.Windows_x86 ИЛИ ТипПлатформыСервера = ТипПлатформы.Windows_x86_64 Тогда + Возврат СсылкаНаТом.ПолныйПутьWindows; + Иначе + Возврат СсылкаНаТом.ПолныйПутьLinux; + КонецЕсли; + +КонецФункции + +//Есть ли хоть один том хранения файлов. +Функция ЕстьТомаХраненияФайлов() Экспорт + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК Поле1 + |ИЗ + | Справочник.ТомаХраненияФайлов КАК ТомаХраненияФайлов + |ГДЕ + | ТомаХраненияФайлов.ПометкаУдаления = ЛОЖЬ"; + + Возврат НЕ Запрос.Выполнить().Пустой(); + +КонецФункции + +// Получает хранение файлов в томах +// +Функция ПолучитьКонстантуХранитьФайлыВТомахНаДиске() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ХранитьФайлыВТомахНаДиске = Константы.ХранитьФайлыВТомахНаДиске.Получить(); + Возврат ХранитьФайлыВТомахНаДиске; + +КонецФункции + +// Получает тип хранения файлов +// +Функция ПолучитьХранитьФайлыВТомахНаДиске() Экспорт + + УстановитьПривилегированныйРежим(Истина); + ХранитьФайлыВТомахНаДиске = Константы.ХранитьФайлыВТомахНаДиске.Получить(); + Возврат ХранитьФайлыВТомахНаДиске; + +КонецФункции + +// Получает тип хранения файлов как перечисление +// +Функция ПолучитьТипХраненияФайлов() Экспорт + + ХранитьФайлыВТомахНаДиске = ПолучитьХранитьФайлыВТомахНаДиске(); + + Если ХранитьФайлыВТомахНаДиске Тогда + + Если ЕстьТомаХраненияФайлов() Тогда + Возврат Перечисления.ТипыХраненияФайлов.ВТомахНаДиске; + Иначе + Возврат Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + КонецЕсли; + + Иначе + Возврат Перечисления.ТипыХраненияФайлов.ВИнформационнойБазе; + КонецЕсли; + +КонецФункции + +// Возвращает количество файлов, хранящихся в томах. +// +Функция ПолучитьКоличествоФайловВТомах() Экспорт + + КоличествоФайловВТомах = 0; + СтандартныеПодсистемыПереопределяемый.ПолучитьКоличествоФайловВТомах(КоличествоФайловВТомах); + Возврат КоличествоФайловВТомах; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Служебные функции поддержки обмена файлами + +// Служебная функция используется при создании начального образа +// Выполняется всегда на сервере +// +Процедура СкопироватьФайлПриСозданииНачальногоОбраза(ПолныйПуть, НовыйПутьФайла) Экспорт + + Попытка + // если файл в томе - скопируем его во временный каталог (при создании начального образа) + КопироватьФайл(ПолныйПуть, НовыйПутьФайла); + ФайлВременный = Новый Файл(НовыйПутьФайла); + ФайлВременный.УстановитьТолькоЧтение(Ложь); + Исключение + // не регистрируется, возможно файл не найден + КонецПопытки; + +КонецПроцедуры + +// Служебная функция используется для помещения двоичных данных файла в томе +// в хранилище значения +// +Функция ПоместитьДвоичныеДанныеВХранилище(Том, ПутьКФайлу, УникальныйИдентификатор) Экспорт + + ПолныйПуть = ПолныйПутьТома(Том) + ПутьКФайлу; + УникальныйИдентификатор = УникальныйИдентификатор; + + ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПуть); + Возврат Новый ХранилищеЗначения(ДвоичныеДанные); + +КонецФункции + +// Служебная функции. Используется для удаления файла на сервере +// +Процедура УдалитьФайлыНаСервере(ПрежнийПутьНаТоме) Экспорт + + // Удаляем файл. + ФайлВременный = Новый Файл(ПрежнийПутьНаТоме); + Если ФайлВременный.Существует() Тогда + + Попытка + ФайлВременный.УстановитьТолькоЧтение(Ложь); + УдалитьФайлы(ПрежнийПутьНаТоме); + Исключение + + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление файлов в томе при обмене'"), + УровеньЖурналаРегистрации.Ошибка,,, + ОписаниеОшибки); + + КонецПопытки; + + КонецЕсли; + + // Удаляем каталог файла, если после удаления файла каталог стал пустым. + Попытка + МассивФайловВКаталоге = НайтиФайлы(ФайлВременный.Путь, "*.*"); + Если МассивФайловВКаталоге.Количество() = 0 Тогда + УдалитьФайлы(ФайлВременный.Путь); + КонецЕсли; + Исключение + + ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + ЗаписьЖурналаРегистрации(НСтр("ru = 'Удаление файлов в томе при обмене'"), + УровеньЖурналаРегистрации.Ошибка,,, + ОписаниеОшибки); + + КонецПопытки; + +КонецПроцедуры + +// Получает СписокРасширенийФайловOpenDocument +// +Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + СписокРасширенийФайловOpenDocumentОбластиДанных = Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Получить(); + Если СписокРасширенийФайловOpenDocumentОбластиДанных = Неопределено ИЛИ СписокРасширенийФайловOpenDocumentОбластиДанных = "" Тогда + СписокРасширенийФайловOpenDocumentОбластиДанных = "ODT OTT ODP OTP ODS OTS ODC OTC ODF OTF ODM OTH SDW STW SXW STC SXC SDC SDD STI"; + Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Установить(СписокРасширенийФайловOpenDocumentОбластиДанных); + КонецЕсли; + + ИтоговыйСписокРасширений = ""; + + Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + СписокЗапрещенныхРасширений = Константы.СписокРасширенийФайловOpenDocument.Получить(); + ИтоговыйСписокРасширений = СписокЗапрещенныхРасширений + " " + СписокРасширенийФайловOpenDocumentОбластиДанных; + Иначе + ИтоговыйСписокРасширений = СписокРасширенийФайловOpenDocumentОбластиДанных; + КонецЕсли; + + Возврат ИтоговыйСписокРасширений; + +КонецФункции + +// Получает СписокРасширенийТекстовыхФайлов +// +Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт + + УстановитьПривилегированныйРежим(Истина); + СписокРасширенийТекстовыхФайлов = Константы.СписокРасширенийТекстовыхФайлов.Получить(); + Если ПустаяСтрока(СписокРасширенийТекстовыхФайлов) Тогда + СписокРасширенийТекстовыхФайлов = "TXT"; + КонецЕсли; + Возврат СписокРасширенийТекстовыхФайлов; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Прочие служебные функции + +// Возвращает Истина, если есть хранимые файлы к объекту ВнешнийОбъект. +// +Функция ЕстьХранимыеФайлы(ВнешнийОбъект) Экспорт + + Результат = Ложь; + СтандартныеПодсистемыПереопределяемый.ОпределитьНаличиеХранимыхФайлов(ВнешнийОбъект, Результат); + Возврат Результат; + +КонецФункции + +// Возвращает хранимые файлы к объекту ВнешнийОбъект +// +Функция ПолучитьХранимыеФайлы(ВнешнийОбъект) Экспорт + + МассивДанных = Новый Массив; + СтандартныеПодсистемыПереопределяемый.ПолучитьХранимыеФайлы(ВнешнийОбъект, МассивДанных); + Возврат МассивДанных; + +КонецФункции + +// Получает кодировку текстового файла, указанную пользователем (если есть). +// +// Параметры: +// ВерсияФайла - ссылка на версию файла. +// +// Возвращаемое значение: +// Строка - идентификатор кодировки текста или пустая строка. +// +Функция ПолучитьКодировкуВерсииФайла(ВерсияФайла) Экспорт + + Кодировка = ""; + СтандартныеПодсистемыПереопределяемый.ПолучитьКодировкуВерсииФайла(ВерсияФайла, Кодировка); + + Возврат Кодировка; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// ЭЦП для файлов + +// Проверяет все подписи (на сервере) из массива ДанныеВыделенныхСтрок +Процедура ПроверитьНаСервере(ДанныеВыделенныхСтрок) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПровайдерЭЦП = Константы.ПровайдерЭЦП.Получить(); + ПутьМодуляКриптографии = ЭлектроннаяЦифроваяПодписьПовтИсп.ПутьМодуляКриптографии(); + ТипПровайдераЭЦП = Константы.ТипПровайдераЭЦП.Получить(); + АлгоритмПодписи = Константы.АлгоритмПодписи.Получить(); + АлгоритмХеширования = Константы.АлгоритмХеширования.Получить(); + АлгоритмШифрования = Константы.АлгоритмШифрования.Получить(); + УстановитьПривилегированныйРежим(Ложь); + + МенеджерКриптографии = Новый МенеджерКриптографии(ПровайдерЭЦП, ПутьМодуляКриптографии, ТипПровайдераЭЦП); + МенеджерКриптографии.АлгоритмПодписи = АлгоритмПодписи; + МенеджерКриптографии.АлгоритмХеширования = АлгоритмХеширования; + МенеджерКриптографии.АлгоритмШифрования = АлгоритмШифрования; + + Для Каждого ДанныеСтроки Из ДанныеВыделенныхСтрок Цикл + Если ДанныеСтроки.Объект <> Неопределено И (НЕ ДанныеСтроки.Объект.Пустая()) Тогда + ПроверитьОднуПодписьНаСервере(ДанныеСтроки, МенеджерКриптографии); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Проверяет все подписи (на сервере) из ТаблицаПодписей +Процедура ПроверитьВсеНаСервере(ТаблицаПодписей) Экспорт + + УстановитьПривилегированныйРежим(Истина); + ПровайдерЭЦП = Константы.ПровайдерЭЦП.Получить(); + ПутьМодуляКриптографии = ЭлектроннаяЦифроваяПодписьПовтИсп.ПутьМодуляКриптографии(); + ТипПровайдераЭЦП = Константы.ТипПровайдераЭЦП.Получить(); + АлгоритмПодписи = Константы.АлгоритмПодписи.Получить(); + АлгоритмХеширования = Константы.АлгоритмХеширования.Получить(); + АлгоритмШифрования = Константы.АлгоритмШифрования.Получить(); + УстановитьПривилегированныйРежим(Ложь); + + МенеджерКриптографии = Новый МенеджерКриптографии(ПровайдерЭЦП, ПутьМодуляКриптографии, ТипПровайдераЭЦП); + МенеджерКриптографии.АлгоритмПодписи = АлгоритмПодписи; + МенеджерКриптографии.АлгоритмХеширования = АлгоритмХеширования; + МенеджерКриптографии.АлгоритмШифрования = АлгоритмШифрования; + + Для Каждого Строка Из ТаблицаПодписей Цикл + Если Строка.Объект <> Неопределено И (НЕ Строка.Объект.Пустая()) Тогда + ПроверитьОднуПодписьНаСервере(Строка, МенеджерКриптографии); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Проверяет одну подпись( на сервере) +Процедура ПроверитьОднуПодписьНаСервере(ДанныеСтроки, МенеджерКриптографии) + + СтруктураВозврата = СтандартныеПодсистемыПереопределяемый.ПолучитьДвоичныеДанныеФайлаИПодписи( + ДанныеСтроки); + + ДвоичныеДанныеФайла = СтруктураВозврата.ДвоичныеДанные; + ДвоичныеДанныеПодписи = СтруктураВозврата.ДвоичныеДанныеПодписи; + + Попытка + ЭлектроннаяЦифроваяПодпись.ПроверитьПодпись(МенеджерКриптографии, ДвоичныеДанныеФайла, ДвоичныеДанныеПодписи); + ДанныеСтроки.Статус = НСтр("ru = 'Верна'"); + ДанныеСтроки.Неверна = Ложь; + Исключение + ДанныеСтроки.Статус = НСтр("ru = 'Неверна. '"); + Инфо = ИнформацияОбОшибке(); + Если Инфо.Причина <> Неопределено Тогда + ДанныеСтроки.Статус = ДанныеСтроки.Статус + Инфо.Причина.Описание; + КонецЕсли; + ДанныеСтроки.Неверна = Истина; + КонецПопытки; + +КонецПроцедуры + +// ОБРАБОТЧИКИ ОБНОВЛЕНИЯ ИНФОРМАЦИОННОЙ БАЗЫ + +// Добавляет в список Обработчики процедуры-обработчики обновления, +// необходимые данной подсистеме. +// +// Параметры: +// Обработчики - ТаблицаЗначений - см. описание функции НоваяТаблицаОбработчиковОбновления +// общего модуля ОбновлениеИнформационнойБазы. +// +Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт + + Обработчик = Обработчики.Добавить(); + Обработчик.Версия = "2.1.1.6"; + Обработчик.Процедура = "ФайловыеФункцииСлужебный.ПеренестиКонстантыРасширений"; + +КонецПроцедуры + +// Перенести константы СписокЗапрещенныхРасширений и СписокРасширенийФайловOpenDocument +Процедура ПеренестиКонстантыРасширений() Экспорт + + УстановитьПривилегированныйРежим(Истина); + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + СписокЗапрещенныхРасширений = Константы.СписокЗапрещенныхРасширений.Получить(); + Константы.СписокЗапрещенныхРасширенийОбластиДанных.Установить(СписокЗапрещенныхРасширений); + + СписокРасширенийФайловOpenDocument = Константы.СписокРасширенийФайловOpenDocument.Получить(); + Константы.СписокРасширенийФайловOpenDocumentОбластиДанных.Установить(СписокРасширенийФайловOpenDocument); + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебный/ФайловыеФункцииСлужебный.mdo b/SSL/src/CommonModules/ФайловыеФункцииСлужебный/ФайловыеФункцииСлужебный.mdo new file mode 100644 index 000000000..0712e3657 --- /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..596bd7c78 --- /dev/null +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/Module.bsl @@ -0,0 +1,44 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Файловые функции". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// См. эту функцию в модуле ФайловыеФункцииСлужебный. +Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт + + Возврат ФайловыеФункцииСлужебный.ПолучитьСписокРасширенийФайловOpenDocument(); + +КонецФункции + +// См. эту функцию в модуле ФайловыеФункцииСлужебный. +Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт + + Возврат ФайловыеФункцииСлужебный.ПолучитьСписокРасширенийТекстовыхФайлов(); + +КонецФункции + +// См. эту процедуру в модуле ФайловыеФункцииСлужебный. +Процедура ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияСсылка, + РезультатИзвлечения, + АдресВременногоХранилищаТекста) Экспорт + + ФайловыеФункцииСлужебный.ЗаписатьРезультатИзвлеченияТекста( + ФайлИлиВерсияСсылка, + РезультатИзвлечения, + АдресВременногоХранилищаТекста); + +КонецПроцедуры + +// Возвращает флажок наличия хотя бы одного файла в томах. +Функция ЕстьФайлыВТомах() Экспорт + + Если ФайловыеФункцииСлужебный.ПолучитьКоличествоФайловВТомах() <> 0 Тогда + Возврат Истина; + КонецЕсли; + + Возврат Ложь; + +КонецФункции diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/ФайловыеФункцииСлужебныйВызовСервера.mdo b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйВызовСервера/ФайловыеФункцииСлужебныйВызовСервера.mdo new file mode 100644 index 000000000..6ad614442 --- /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 similarity index 53% rename from SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl rename to SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl index 22aa78812..ce1e48fcb 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииКлиент/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/Module.bsl @@ -1,18 +1,33 @@ -// Покажет напоминание о порядке работы с файлом в веб-клиенте -// если установлена настройка "Показывать подсказки при редактировании файлов" +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Файловые функции". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Показывает напоминание о порядке работы с файлом в веб-клиенте, +// если включена настройка "Показывать подсказки при редактировании файлов". // Процедура ПоказатьНапоминаниеПриРедактировании() Экспорт - Если ФайловыеФункцииКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами().ПоказыватьПодсказкиПриРедактированииФайлов = Истина Тогда + ПерсональныеНастройки = ФайловыеФункцииСлужебныйКлиентСервер.ПерсональныеНастройкиРаботыСФайлами(); + + Если ПерсональныеНастройки.ПоказыватьПодсказкиПриРедактированииФайлов = Истина Тогда РасширениеПодключено = ПодключитьРасширениеРаботыСФайлами(); Если НЕ РасширениеПодключено Тогда - Форма = ФайловыеФункцииКлиентПовтИсп.ПолучитьФормуНапоминанияПриРедактировании(); + + Форма = ФайловыеФункцииСлужебныйКлиентПовтИсп.ПолучитьФормуНапоминанияПриРедактировании(); БольшеНеПоказывать = Форма.ОткрытьМодально(); Если БольшеНеПоказывать = Истина Тогда ПоказыватьПодсказкиПриРедактированииФайлов = Ложь; - ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения("НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов", ПоказыватьПодсказкиПриРедактированииФайлов); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения( + "НастройкиПрограммы", + "ПоказыватьПодсказкиПриРедактированииФайлов", + ПоказыватьПодсказкиПриРедактированииФайлов); КонецЕсли; КонецЕсли; @@ -20,7 +35,27 @@ КонецПроцедуры -// Функция возвращает каталог "Мои Документы" + имя текущего пользователя или ранее использованную папку для выгрузки +// Возвращает путь к рабочему каталогу пользователя. +Функция РабочийКаталогПользователя() Экспорт + + Возврат ФайловыеФункцииСлужебныйКлиентПовтИсп.ПолучитьРабочийКаталогПользователя(); + +КонецФункции + +// Сохраняет путь к рабочему каталогу пользователя в настройках. +// +// Параметры: +// ИмяКаталога - Строка - имя каталога. +// +Процедура УстановитьРабочийКаталогПользователя(ИмяКаталога) Экспорт + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения( + "ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов", ИмяКаталога); + +КонецПроцедуры + +// Возвращает каталог "Мои Документы" + имя текущего пользователя или +// ранее использованную папку для выгрузки. // Функция КаталогВыгрузки() Экспорт @@ -28,10 +63,13 @@ #Если Не ВебКлиент Тогда + ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + Путь = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки"); Если Путь = Неопределено Тогда - Если НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда + Если НЕ ПараметрыКлиента.ЭтоБазоваяВерсияКонфигурации Тогда + Оболочка = Новый COMОбъект("MSScriptControl.ScriptControl"); Оболочка.Language = "vbscript"; Оболочка.AddCode(" @@ -39,8 +77,11 @@ |set Shell=CreateObject(""WScript.Shell"") |SpecialFoldersName=Shell.SpecialFolders(Name) |End Function"); + Путь = НормализоватьКаталог(Оболочка.Run("SpecialFoldersName", "MyDocuments")); - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки", Путь); + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "ИмяПапкиВыгрузки", "ИмяПапкиВыгрузки", Путь); КонецЕсли; КонецЕсли; @@ -51,21 +92,19 @@ КонецФункции // Показывает пользователю диалог выбора файлов и возвращает -// массив - выбранные для импорта файлы +// массив - выбранные файлы для импорта. // Функция ПолучитьСписокИмпортируемыхФайлов() Экспорт ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); - ДиалогОткрытияФайла.ПолноеИмяФайла = ""; - Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); - ДиалогОткрытияФайла.Фильтр = Фильтр; + ДиалогОткрытияФайла.ПолноеИмяФайла = ""; + ДиалогОткрытияФайла.Фильтр = НСтр("ru = 'Все файлы(*.*)|*.*'"); ДиалогОткрытияФайла.МножественныйВыбор = Истина; - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файлы'"); + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите файлы'"); МассивИменФайлов = Новый Массив; Если ДиалогОткрытияФайла.Выбрать() Тогда - МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы; Для Каждого ИмяФайла Из МассивФайлов Цикл @@ -78,67 +117,71 @@ КонецФункции -// Функция добавляет концевой слэш к имени каталога, если это надо -// а также удаляет все запрещенные символы из имени каталога -// кроме того, "/" заменяется на "\" +// Добавляет концевой слэш к имени каталога, если это надо, +// удаляет все запрещенные символы из имени каталога и заменяет "/" на "\". // Функция НормализоватьКаталог(ИмяКаталога) Экспорт + Результат = СокрЛП(ИмяКаталога); - // Запомним наличие "Диск:" в начале пути и потом вернем ":" после имени диска + // Запоминание имени диска в начале пути "Диск:" без двоеточия. СтрДиск = ""; Если Сред(Результат, 2, 1) = ":" Тогда СтрДиск = Сред(Результат, 1, 2); Результат = Сред(Результат, 3); Иначе - // А здесь проверим, что у нас не UNC-путь (т.е. путь начинающийся на "\\") + // Проверка, это не UNC-путь (Т.е. вначале нет "\\"). Если Сред(Результат, 2, 2) = "\\" Тогда СтрДиск = Сред(Результат, 1, 2); Результат = Сред(Результат, 3); КонецЕсли; КонецЕсли; - // Делаем слэши в Windows-стиле + // Преобразование слэшей к Windows-формату. Результат = СтрЗаменить(Результат, "/", "\"); - // Добавляем финишный слэш + // Добавление конечного слэша. Результат = СокрЛП(Результат); Если Прав(Результат,1) <> "\" Тогда Результат = Результат + "\"; КонецЕсли; - // Заменим все двойные слэши на одинарные и получим полный путь + // Замена всех двойных слэшей на одинарные и получение полного пути. Результат = СтрДиск + СтрЗаменить(Результат, "\\", "\"); Возврат Результат; + КонецФункции -// Процедура предназначена для проверки имени файла на наличие некорректных символов +// Проверяет имя файла на наличие некорректных символов. +// // Параметры: -// СтрИмяФайла - Строка -// проверяемое имя файла -// ФлУдалятьНекорректные - Булево -// удалять или нет некорректные символы из переданной строки -Процедура КорректноеИмяФайла(ИмяФайла, ФлУдалятьНекорректные = Ложь) Экспорт +// ИмяФайла - Строка- проверяемое имя файла. +// +// УдалятьНекорректныеСимволы - Булево - Истина указывает удалять некорректные +// символы из переданной строки. +// +Процедура КорректноеИмяФайла(ИмяФайла, УдалятьНекорректныеСимволы = Ложь) Экспорт // Перечень запрещенных символов взят отсюда: http://support.microsoft.com/kb/100108/ru - // при этом были объединены запрещенные символы для файловых систем FAT и NTFS + // при этом были объединены запрещенные символы для файловых систем FAT и NTFS. СтрИсключения = ОбщегоНазначенияКлиентСервер.ПолучитьНедопустимыеСимволыВИмениФайла(); - ТекстОшибки = - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'В имени файла не должно быть следующих символов: %1'"), СтрИсключения); + ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'В имени файла не должно быть следующих символов: %1'"), СтрИсключения); Результат = Истина; - МассивНайденныхНедопустимыхСимволов = ОбщегоНазначенияКлиентСервер.НайтиНедопустимыеСимволыВИмениФайла(ИмяФайла); + МассивНайденныхНедопустимыхСимволов = + ОбщегоНазначенияКлиентСервер.НайтиНедопустимыеСимволыВИмениФайла(ИмяФайла); + Если МассивНайденныхНедопустимыхСимволов.Количество() <> 0 Тогда Результат = Ложь; - Если ФлУдалятьНекорректные Тогда + Если УдалятьНекорректныеСимволы Тогда ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяФайла, ""); КонецЕсли; @@ -148,22 +191,25 @@ ВызватьИсключение ТекстОшибки; КонецЕсли; -КонецПроцедуры // КорректноеИмяФайла() +КонецПроцедуры -// Рекурсивно обойти каталоги и посчитать количество файлов и их суммарный размер -// +// Рекурсивно обходит каталоги и посчитывает количество файлов и их суммарный размер. Процедура ОбходФайловРазмер(Путь, МассивФайлов, РазмерСуммарный, КоличествоСуммарное) Экспорт Для Каждого ВыбранныйФайл Из МассивФайлов Цикл Если ВыбранныйФайл.ЭтоКаталог() Тогда НовыйПуть = Строка(Путь); - НовыйПуть = НовыйПуть + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + + НовыйПуть = НовыйПуть + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш( + ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + НовыйПуть = НовыйПуть + Строка(ВыбранныйФайл.Имя); МассивФайловВКаталоге = НайтиФайлы(НовыйПуть, "*.*"); Если МассивФайловВКаталоге.Количество() <> 0 Тогда - ОбходФайловРазмер(НовыйПуть, МассивФайловВКаталоге, РазмерСуммарный, КоличествоСуммарное); + ОбходФайловРазмер( + НовыйПуть, МассивФайловВКаталоге, РазмерСуммарный, КоличествоСуммарное); КонецЕсли; Продолжить; @@ -176,35 +222,44 @@ КонецПроцедуры -// Получить полный путь к файлу +// Возвращает полный путь к файлу. Функция ПолучитьПолныйПутьКФайлуВРабочемКаталоге(ДанныеФайла) Экспорт + Возврат ДанныеФайла.ИмяФайлаСПутемВРабочемКаталоге; + КонецФункции -// Функция получает путь к каталогу вида "C:\Documents and Settings\ИМЯ ПОЛЬЗОВАТЕЛЯ\Application Data\1C\ФайлыА8\" +// Возвращает путь к каталогу вида +// "C:\Documents and Settings\ИМЯ ПОЛЬЗОВАТЕЛЯ\Application Data\1C\ФайлыА8\". // -Функция ПолучитьПутьККаталогуДанныхПользователя() Экспорт +Функция ВыбратьПутьККаталогуДанныхПользователя() Экспорт ИмяКаталога = ""; #Если Не ВебКлиент Тогда - Если НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации Тогда + ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + + Если НЕ ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации Тогда + Оболочка = Новый COMОбъект("WScript.Shell"); Путь = Оболочка.ExpandEnvironmentStrings("%APPDATA%"); Путь = Путь + "\1C\Файлы\"; - ПараметрыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); + Путь = Путь + + ПараметрыРаботыКлиента.ИмяКонфигурации + + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш( + ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); - Путь = Путь + ПараметрыКлиента.ИмяКонфигурации - + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + ИмяПользователя = ПользователиКлиентСервер.ТекущийПользователь(); - ИмяПользователя = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ТекущийПользователь; ИмяКаталога = Путь + ИмяПользователя; ИмяКаталога = СтрЗаменить(ИмяКаталога, "<", " "); ИмяКаталога = СтрЗаменить(ИмяКаталога, ">", " "); ИмяКаталога = СокрЛП(ИмяКаталога); - ИмяКаталога = ИмяКаталога + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + + ИмяКаталога = ИмяКаталога + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш( + ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); КонецЕсли; #Иначе // ВебКлиент @@ -219,9 +274,13 @@ ДиалогОткрытияФайла.Каталог = ""; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выберите путь к локальному кэшу файлов'"); + Если ДиалогОткрытияФайла.Выбрать() Тогда + ИмяКаталога = ДиалогОткрытияФайла.Каталог; - ИмяКаталога = ИмяКаталога + ФайловыеФункцииКлиентСервер.ПолучитьСлеш(ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); + + ИмяКаталога = ИмяКаталога + ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьСлеш( + ОбщегоНазначенияКлиентПовтИсп.ТипПлатформыКлиента()); КонецЕсли; КонецЕсли; @@ -232,8 +291,7 @@ КонецФункции -// открыть Windows проводник, выбрав в нем указанный файл -// +// Открывает Проводник Windows и выделяет указанный файл. Функция ОткрытьПроводникСФайлом(Знач ПолноеИмяФайла) Экспорт #Если НЕ ВебКлиент Тогда @@ -256,58 +314,16 @@ КонецФункции -// Проинициализировать параметр сеанса ПутьКРабочемуКаталогуПользователя, проверив корректность пути, и откорректировав если нужно -// -Процедура ПроинициализироватьПутьКРабочемуКаталогу() Экспорт - - ИмяКаталога = ФайловыеФункцииКлиентПовтИсп.ПолучитьРабочийКаталогПользователя(); - - // уже проинициализировано - Если ИмяКаталога <> Неопределено И НЕ ПустаяСтрока(ИмяКаталога) И ПроверкаДоступаКРабочемуКаталогуВыполнена = Истина Тогда - Возврат; - КонецЕсли; - - Если ИмяКаталога = Неопределено Тогда - ИмяКаталога = ПолучитьПутьККаталогуДанныхПользователя(); - Если Не ПустаяСтрока(ИмяКаталога) Тогда - СохранитьПутьККаталогуВНастройках(ИмяКаталога); - Иначе - ПроверкаДоступаКРабочемуКаталогуВыполнена = Истина; - Возврат; // веб клиент без расширения работы с файлами - КонецЕсли; - КонецЕсли; - -#Если Не ВебКлиент Тогда - // Создать каталог для файлов - Попытка - СоздатьКаталог(ИмяКаталога); - ИмяКаталогаТестовое = ИмяКаталога + "ПроверкаДоступа\"; - СоздатьКаталог(ИмяКаталогаТестовое); - УдалитьФайлы(ИмяКаталогаТестовое); - Исключение - // нет прав на создание каталога, или такой путь отсутствует - сбрасываем в настройки по умолчанию - ИмяКаталога = ПолучитьПутьККаталогуДанныхПользователя(); - СохранитьПутьККаталогуВНастройках(ИмяКаталога); - КонецПопытки; -#КонецЕсли - - ПроверкаДоступаКРабочемуКаталогуВыполнена = Истина; - -КонецПроцедуры - -// Сохраняет путь к рабочему каталогу в настройках -// -Процедура СохранитьПутьККаталогуВНастройках(ИмяКаталога) - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранитьИОбновитьПовторноИспользуемыеЗначения("ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов", ИмяКаталога); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ #Если НЕ ВебКлиент Тогда -// Извлекает текст из файла на диске на клиенте и помещает результат на сервер -// -Процедура ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор, - Кодировка = Неопределено) Экспорт +// Извлекает текст из файла на диске на клиенте и помещает результат на сервер. +Процедура ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, + АдресФайла, + Расширение, + УникальныйИдентификатор, + Кодировка = Неопределено) Экспорт ИмяФайлаСПутем = ПолучитьИмяВременногоФайла(Расширение); @@ -315,7 +331,8 @@ Возврат; КонецЕсли; - // для варианта с хранением файлов на диске (на сервере) удаляем Файл из временного хранилища после получения + // Для варианта с хранением файлов на диске (на сервере) + // удаление Файла из временного хранилища после получения. Если ЭтоАдресВременногоХранилища(АдресФайла) Тогда УдалитьИзВременногоХранилища(АдресФайла); КонецЕсли; @@ -326,9 +343,9 @@ Текст = ""; Если ИмяФайлаСПутем <> "" Тогда - // Извлекаем текст из файла + // Извлечение текста из файла. Отказ = Ложь; - Текст = ФайловыеФункцииКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Кодировка); + Текст = ФайловыеФункцииСлужебныйКлиентСервер.ИзвлечьТекст(ИмяФайлаСПутем, Отказ, Кодировка); Если Отказ = Ложь Тогда РезультатИзвлечения = "Извлечен"; @@ -339,11 +356,17 @@ ТекстовыйФайл.Записать(Текст); ТекстовыйФайл.Закрыть(); - ПоместитьФайл(АдресВременногоХранилищаТекста, ИмяВременногоФайла, , Ложь, УникальныйИдентификатор); + ПоместитьФайл(АдресВременногоХранилищаТекста, + ИмяВременногоФайла, + , + Ложь, + УникальныйИдентификатор); + УдалитьФайлы(ИмяВременногоФайла); КонецЕсли; - Иначе - // Ничего не пишем - это нормальная ситуация - когда Текст некому извлечь + Иначе + // Когда Текст извлечь "некому" - это нормальный случай, + // сообщение об ошибке не формируется. РезультатИзвлечения = "ИзвлечьНеУдалось"; КонецЕсли; @@ -351,7 +374,8 @@ УдалитьФайлы(ИмяФайлаСПутем); - ФайловыеФункции.ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияФайла, РезультатИзвлечения, АдресВременногоХранилищаТекста); + ФайловыеФункцииСлужебныйВызовСервера.ЗаписатьРезультатИзвлеченияТекста( + ФайлИлиВерсияФайла, РезультатИзвлечения, АдресВременногоХранилищаТекста); КонецПроцедуры #КонецЕсли diff --git a/SSL/src/CommonModules/ФайловыеФункцииКлиент/ФайловыеФункцииКлиент.mdo b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/ФайловыеФункцииСлужебныйКлиент.mdo similarity index 72% rename from SSL/src/CommonModules/ФайловыеФункцииКлиент/ФайловыеФункцииКлиент.mdo rename to SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/ФайловыеФункцииСлужебныйКлиент.mdo index bc0dbe4d4..366098872 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииКлиент/ФайловыеФункцииКлиент.mdo +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиент/ФайловыеФункцииСлужебныйКлиент.mdo @@ -1,9 +1,9 @@ - ФайловыеФункцииКлиент + ФайловыеФункцииСлужебныйКлиент ru - Файловые функции клиент + Файловые функции служебный клиент Клиентские файловые операции true diff --git a/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl new file mode 100644 index 000000000..fecc190ff --- /dev/null +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/Module.bsl @@ -0,0 +1,91 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Файловые функции". +// +//////////////////////////////////////////////////////////////////////////////// + +// Возвращает форму, которая используется для информирования +// пользователей об особенностях заема и редактирования файлов +// в веб-клиенте. +// +Функция ПолучитьФормуНапоминанияПриРедактировании() Экспорт + + Возврат ПолучитьФорму("ОбщаяФорма.НапоминаниеПриРедактировании"); + +КонецФункции + +// Возвращает СписокРасширенийФайловOpenDocument. +Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт + + Возврат ФайловыеФункцииСлужебныйВызовСервера.ПолучитьСписокРасширенийФайловOpenDocument(); + +КонецФункции + +// Возвращает СписокРасширенийТекстовыхФайлов. +Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт + + Возврат ФайловыеФункцииСлужебныйВызовСервера.ПолучитьСписокРасширенийТекстовыхФайлов(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает структуру, содержащую различные персональные настройки. +Функция ПолучитьПерсональныеНастройкиРаботыСФайлами() Экспорт + + ПерсональныеНастройки = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента( + ).ПерсональныеНастройкиРаботыСФайлами; + + // Проверка и обновление настроек сохраненных на сервере, + // которые вычисляются на клиенте. + + Возврат ПерсональныеНастройки; + +КонецФункции + +// Возвращает параметр сеанса ПутьКРабочемуКаталогуПользователя. +Функция ПолучитьРабочийКаталогПользователя() Экспорт + + ИмяКаталога = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента( + ).ПерсональныеНастройкиРаботыСФайлами.ПутьКЛокальномуКэшуФайлов; + + // Уже установлен. + Если ИмяКаталога <> Неопределено + И НЕ ПустаяСтрока(ИмяКаталога) + И ПроверкаДоступаКРабочемуКаталогуВыполнена = Истина Тогда + + Возврат ИмяКаталога; + КонецЕсли; + + Если ИмяКаталога = Неопределено Тогда + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.ВыбратьПутьККаталогуДанныхПользователя(); + Если НЕ ПустаяСтрока(ИмяКаталога) Тогда + ФайловыеФункцииСлужебныйКлиент.УстановитьРабочийКаталогПользователя(ИмяКаталога); + Иначе + ПроверкаДоступаКРабочемуКаталогуВыполнена = Истина; + Возврат ""; // Веб клиент без расширения работы с файлами. + КонецЕсли; + КонецЕсли; + +#Если НЕ ВебКлиент Тогда + + // Создать каталог для файлов. + Попытка + СоздатьКаталог(ИмяКаталога); + ИмяКаталогаТестовое = ИмяКаталога + "ПроверкаДоступа\"; + СоздатьКаталог(ИмяКаталогаТестовое); + УдалитьФайлы(ИмяКаталогаТестовое); + Исключение + // Нет прав на создание каталога, или такой путь отсутствует, + // тогда установка настроек по умолчанию. + ИмяКаталога = ФайловыеФункцииСлужебныйКлиент.ВыбратьПутьККаталогуДанныхПользователя(); + ФайловыеФункцииСлужебныйКлиент.УстановитьРабочийКаталогПользователя(ИмяКаталога); + КонецПопытки; + +#КонецЕсли + + ПроверкаДоступаКРабочемуКаталогуВыполнена = Истина; + + Возврат ИмяКаталога; + +КонецФункции diff --git a/SSL/src/CommonModules/ФайловыеФункцииКлиентПовтИсп/ФайловыеФункцииКлиентПовтИсп.mdo b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/ФайловыеФункцииСлужебныйКлиентПовтИсп.mdo similarity index 68% rename from SSL/src/CommonModules/ФайловыеФункцииКлиентПовтИсп/ФайловыеФункцииКлиентПовтИсп.mdo rename to SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентПовтИсп/ФайловыеФункцииСлужебныйКлиентПовтИсп.mdo index c53f5b5de..db1667a27 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 similarity index 93% rename from SSL/src/CommonModules/ФайловыеФункцииКлиентСервер/Module.bsl rename to SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl index 6c2808fba..d53e6fab8 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииКлиентСервер/Module.bsl +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/Module.bsl @@ -1,3 +1,31 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Файловые функции". +// +//////////////////////////////////////////////////////////////////////////////// + +// Персональные настройки состоят из настроек подсистемы ФайловыеФункции +// (см. ФайловыеФункцииСлужебный.ПолучитьПерсональныеНастройкиФайловыхФункций), +// а также настроек подсистем РаботаСФайлами и ПрисоедиенныеФайлы, +// которые добавляются через процедуру ПолучитьПерсональныеНастройкиФайловыхФункций +// модуля СтандартныеПодсистемыПереопределяемый. +// +Функция ПерсональныеНастройкиРаботыСФайлами() Экспорт + +#Если Сервер ИЛИ ВнешнееСоединение Тогда + Возврат ФайловыеФункцииСлужебныйПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); +#Иначе + Возврат ФайловыеФункцииСлужебныйКлиентПовтИсп.ПолучитьПерсональныеНастройкиРаботыСФайлами(); +#КонецЕсли + +КонецФункции + +// Возвращает флажок наличия хотя бы одного файла в томах. +Функция ЕстьФайлыВТомах() Экспорт + + Возврат ФайловыеФункцииСлужебныйВызовСервера.ЕстьФайлыВТомах(); + +КонецФункции + // функция возвращает часть строки после последнего встреченного символа в строке Функция ПолучитьСтрокуОтделеннойСимволом(Знач ИсходнаяСтрока, Знач СимволПоиска) @@ -41,10 +69,10 @@ #Если Не ВебКлиент Тогда СписокРасширенийТекстовыхФайлов = ""; - #Если Сервер ИЛИ ВнешнееСоединение Тогда - СписокРасширенийТекстовыхФайлов = ФайловыеФункцииПовтИсп.ПолучитьСписокРасширенийТекстовыхФайлов(); - #Иначе - СписокРасширенийТекстовыхФайлов = ФайловыеФункцииКлиентПовтИсп.ПолучитьСписокРасширенийТекстовыхФайлов(); + #Если Сервер ИЛИ ВнешнееСоединение Тогда + СписокРасширенийТекстовыхФайлов = ФайловыеФункцииСлужебныйПовтИсп.ПолучитьСписокРасширенийТекстовыхФайлов(); + #Иначе + СписокРасширенийТекстовыхФайлов = ФайловыеФункцииСлужебныйКлиентПовтИсп.ПолучитьСписокРасширенийТекстовыхФайлов(); #КонецЕсли РасширениеФайлаБезТочки = ПолучитьРасширениеИмениФайла(ПолноеИмяФайла); @@ -67,10 +95,10 @@ Если ПустаяСтрока(ИзвлеченныйТекст) Тогда СписокРасширенийФайловOpenDocument = ""; - #Если Сервер ИЛИ ВнешнееСоединение Тогда - СписокРасширенийФайловOpenDocument = ФайловыеФункцииПовтИсп.ПолучитьСписокРасширенийФайловOpenDocument(); - #Иначе - СписокРасширенийФайловOpenDocument = ФайловыеФункцииКлиентПовтИсп.ПолучитьСписокРасширенийФайловOpenDocument(); + #Если Сервер ИЛИ ВнешнееСоединение Тогда + СписокРасширенийФайловOpenDocument = ФайловыеФункцииСлужебныйПовтИсп.ПолучитьСписокРасширенийФайловOpenDocument(); + #Иначе + СписокРасширенийФайловOpenDocument = ФайловыеФункцииСлужебныйКлиентПовтИсп.ПолучитьСписокРасширенийФайловOpenDocument(); #КонецЕсли РасширениеФайлаБезТочки = ПолучитьРасширениеИмениФайла(ПолноеИмяФайла); @@ -88,40 +116,6 @@ КонецФункции -// Вычисляет кодировку -Функция ОпределитьКодировкуТекстовогоФайла(ПолноеИмяФайла) Экспорт - - Кодировка = Неопределено; - -#Если Не ВебКлиент Тогда - - // Определяем кодировку - - ЧтениеТекста = Новый ЧтениеТекста(ПолноеИмяФайла, КодировкаТекста.Системная); - - // Проверяем наличие BOM (Byte order mark) - Символ0 = ЧтениеТекста.Прочитать(1); - Символ1 = ЧтениеТекста.Прочитать(1); - Символ2 = ЧтениеТекста.Прочитать(1); - - КодСимвола0 = КодСимвола(Символ0); - КодСимвола1 = КодСимвола(Символ1); - КодСимвола2 = КодСимвола(Символ2); - - Если КодСимвола0 = 1087 И КодСимвола1 = 187 И КодСимвола2 = 1111 Тогда - Кодировка = "UTF-8"; - ИначеЕсли КодСимвола0 = 1103 И КодСимвола1 = 1102 И КодСимвола2 = 13 Тогда - Кодировка = "UTF-16"; - Иначе - Кодировка = "windows-1251"; - КонецЕсли; - -#КонецЕсли - - Возврат Кодировка; - -КонецФункции - // Извлекает текст в соответствии с кодировкой. // Если кодировка не задана - сама вычисляет кодировку Функция ИзвлечьТекстИзТекстовогоФайла(ПолноеИмяФайла, Кодировка) @@ -824,6 +818,21 @@ КонецФункции +// Возвращает текст сообщения об ошибке создания нового файла. +// +// Параметры: +// ИнформацияОбОшибке - ИнформацияОбОшибке. +// +Функция ОшибкаСозданияНовогоФайла(ИнформацияОбОшибке) Экспорт + + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Ошибка создания нового файла. + | + |%1'"), + КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); + +КонецФункции + // Получить строку с представлением размера файла - например для отображения в Состояние при передаче файла Функция ПолучитьСтрокуСРазмеромФайла(Знач РазмерВМб) Экспорт diff --git a/SSL/src/CommonModules/ФайловыеФункцииКлиентСервер/ФайловыеФункцииКлиентСервер.mdo b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/ФайловыеФункцииСлужебныйКлиентСервер.mdo similarity index 69% rename from SSL/src/CommonModules/ФайловыеФункцииКлиентСервер/ФайловыеФункцииКлиентСервер.mdo rename to SSL/src/CommonModules/ФайловыеФункцииСлужебныйКлиентСервер/ФайловыеФункцииСлужебныйКлиентСервер.mdo index c33d8f9a4..def88635c 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..d20092177 --- /dev/null +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйПовтИсп/Module.bsl @@ -0,0 +1,189 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Файловые функции". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает СписокРасширенийФайловOpenDocument. +Функция ПолучитьСписокРасширенийФайловOpenDocument() Экспорт + + Возврат ФайловыеФункцииСлужебный.ПолучитьСписокРасширенийФайловOpenDocument(); + +КонецФункции + +// Возвращает СписокРасширенийТекстовыхФайлов. +Функция ПолучитьСписокРасширенийТекстовыхФайлов() Экспорт + + Возврат ФайловыеФункцииСлужебный.ПолучитьСписокРасширенийТекстовыхФайлов(); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Настройки + +// Возвращает структуру, содержащую различные персональные настройки +// по работе с файлами. +// +Функция ПолучитьПерсональныеНастройкиРаботыСФайлами() Экспорт + + Настройки = Новый Структура; + + СтандартныеПодсистемыПереопределяемый.ПолучитьПерсональныеНастройкиРаботыСФайлами(Настройки); + ПолучитьПерсональныеНастройкиФайловыхФункций(Настройки); + + Возврат Настройки; + +КонецФункции + +// Устанавливает персональные настройки файловых функций. +Процедура ПолучитьПерсональныеНастройкиФайловыхФункций(Настройки) + + УстановитьПривилегированныйРежим(Истина); + + // МаксимальныйРазмерЛокальногоКэшаФайлов. + МаксимальныйРазмерЛокальногоКэшаФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ЛокальныйКэшФайлов", "МаксимальныйРазмерЛокальногоКэшаФайлов"); + + Если МаксимальныйРазмерЛокальногоКэшаФайлов = Неопределено Тогда + МаксимальныйРазмерЛокальногоКэшаФайлов = 100*1024*1024; // 100 МБ. + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "ЛокальныйКэшФайлов", + "МаксимальныйРазмерЛокальногоКэшаФайлов", + МаксимальныйРазмерЛокальногоКэшаФайлов); + КонецЕсли; + + Настройки.Вставить("МаксимальныйРазмерЛокальногоКэшаФайлов", + МаксимальныйРазмерЛокальногоКэшаФайлов); + + // ПутьКЛокальномуКэшуФайлов. + ПутьКЛокальномуКэшуФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ЛокальныйКэшФайлов", "ПутьКЛокальномуКэшуФайлов"); + // Не следует получать эту переменную непосредственно. + // Нужно использовать функцию РабочийКаталогПользователя + // модуля ФайловыеФункцииСлужебныйКлиент. + Настройки.Вставить("ПутьКЛокальномуКэшуФайлов", ПутьКЛокальномуКэшуФайлов); + + // УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования. + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = + ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ЛокальныйКэшФайлов", "УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования"); + + Если УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Неопределено Тогда + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования = Ложь; + КонецЕсли; + + Настройки.Вставить("УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования", + УдалятьФайлИзЛокальногоКэшаФайловПриЗавершенииРедактирования); + + // ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов. + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = + ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ЛокальныйКэшФайлов", "ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов"); + + Если ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Неопределено Тогда + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов = Ложь; + КонецЕсли; + + Настройки.Вставить("ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов", + ПодтверждатьПриУдаленииИзЛокальногоКэшаФайлов); + + // ИзвлекатьТекстыФайловНаСервере. + ИзвлекатьТекстыФайловНаСервере = Константы.ИзвлекатьТекстыФайловНаСервере.Получить(); + Если ИзвлекатьТекстыФайловНаСервере = Неопределено Тогда + ИзвлекатьТекстыФайловНаСервере = Ложь; + КонецЕсли; + Настройки.Вставить("ИзвлекатьТекстыФайловНаСервере", ИзвлекатьТекстыФайловНаСервере); + + // МаксимальныйРазмерФайла. + МаксимальныйРазмерФайла = ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла(); + Настройки.Вставить("МаксимальныйРазмерФайла", МаксимальныйРазмерФайла); + + // ЗапрещатьЗагрузкуФайловПоРасширению. + ЗапрещатьЗагрузкуФайловПоРасширению = Константы.ЗапрещатьЗагрузкуФайловПоРасширению.Получить(); + Если ЗапрещатьЗагрузкуФайловПоРасширению = Неопределено Тогда + ЗапрещатьЗагрузкуФайловПоРасширению = Ложь; + Константы.ЗапрещатьЗагрузкуФайловПоРасширению.Установить(ЗапрещатьЗагрузкуФайловПоРасширению); + КонецЕсли; + Настройки.Вставить("ЗапретЗагрузкиФайловПоРасширению", ЗапрещатьЗагрузкуФайловПоРасширению); + + // СписокЗапрещенныхРасширений. + СписокЗапрещенныхРасширений = ФайловыеФункцииСлужебный.ПолучитьСписокЗапрещенныхРасширений(); + Настройки.Вставить("СписокЗапрещенныхРасширений", СписокЗапрещенныхРасширений); + + // СписокРасширенийФайловOpenDocument. + СписокРасширенийФайловOpenDocument = ФайловыеФункцииСлужебныйПовтИсп.ПолучитьСписокРасширенийФайловOpenDocument(); + Настройки.Вставить("СписокРасширенийФайловOpenDocument", СписокРасширенийФайловOpenDocument); + + // СписокРасширенийТекстовыхФайлов. + СписокРасширенийТекстовыхФайлов = Константы.СписокРасширенийТекстовыхФайлов.Получить(); + Если ПустаяСтрока(СписокРасширенийТекстовыхФайлов) Тогда + СписокРасширенийТекстовыхФайлов = "TXT"; + Константы.СписокРасширенийТекстовыхФайлов.Установить(СписокРасширенийТекстовыхФайлов); + КонецЕсли; + Настройки.Вставить("СписокРасширенийТекстовыхФайлов", СписокРасширенийТекстовыхФайлов); + + // ПоказыватьПодсказкиПриРедактированииФайлов. + ПоказыватьПодсказкиПриРедактированииФайлов = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиПрограммы", "ПоказыватьПодсказкиПриРедактированииФайлов"); + + Если ПоказыватьПодсказкиПриРедактированииФайлов = Неопределено Тогда + ПоказыватьПодсказкиПриРедактированииФайлов = Истина; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы", + "ПоказыватьПодсказкиПриРедактированииФайлов", + ПоказыватьПодсказкиПриРедактированииФайлов); + КонецЕсли; + Настройки.Вставить("ПоказыватьПодсказкиПриРедактированииФайлов", + ПоказыватьПодсказкиПриРедактированииФайлов); + + // ОтпечатокЛичногоСертификатаДляШифрования. + ОтпечатокЛичногоСертификатаДляШифрования = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "ЭЦП", "ОтпечатокЛичногоСертификатаДляШифрования"); + + Настройки.Вставить("ОтпечатокЛичногоСертификатаДляШифрования", + ОтпечатокЛичногоСертификатаДляШифрования); + + // ПоказыватьИнформациюЧтоФайлНеБылИзменен. + ПоказыватьИнформациюЧтоФайлНеБылИзменен = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиПрограммы", "ПоказыватьИнформациюЧтоФайлНеБылИзменен"); + + Если ПоказыватьИнформациюЧтоФайлНеБылИзменен = Неопределено Тогда + ПоказыватьИнформациюЧтоФайлНеБылИзменен = Истина; + + ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( + "НастройкиПрограммы", + "ПоказыватьИнформациюЧтоФайлНеБылИзменен", + ПоказыватьИнформациюЧтоФайлНеБылИзменен); + КонецЕсли; + Настройки.Вставить("ПоказыватьИнформациюЧтоФайлНеБылИзменен", + ПоказыватьИнформациюЧтоФайлНеБылИзменен); + + // Настройки открытия файлов. + ТекстовыеФайлыРасширение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиОткрытияФайлов\ТекстовыеФайлы", + "Расширение", "TXT XML INI"); + + ТекстовыеФайлыСпособОткрытия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиОткрытияФайлов\ТекстовыеФайлы", + "СпособОткрытия", + Перечисления.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе); + + ГрафическиеСхемыРасширение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиОткрытияФайлов\ГрафическиеСхемы", "Расширение", "GRS"); + + ГрафическиеСхемыСпособОткрытия = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( + "НастройкиОткрытияФайлов\ГрафическиеСхемы", + "СпособОткрытия", + Перечисления.СпособыОткрытияФайлаНаПросмотр.ВоВстроенномРедакторе); + + Настройки.Вставить("ТекстовыеФайлыРасширение", ТекстовыеФайлыРасширение); + Настройки.Вставить("ТекстовыеФайлыСпособОткрытия", ТекстовыеФайлыСпособОткрытия); + Настройки.Вставить("ГрафическиеСхемыРасширение", ГрафическиеСхемыРасширение); + Настройки.Вставить("ГрафическиеСхемыСпособОткрытия", ГрафическиеСхемыСпособОткрытия); + +КонецПроцедуры + 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 4061c0646..c1c5ea5e9 100644 --- a/SSL/src/CommonModules/ФайловыеФункцииПовтИсп/ФайловыеФункцииПовтИсп.mdo +++ b/SSL/src/CommonModules/ФайловыеФункцииСлужебныйПовтИсп/ФайловыеФункцииСлужебныйПовтИсп.mdo @@ -1,11 +1,12 @@ - ФайловыеФункцииПовтИсп + ФайловыеФункцииСлужебныйПовтИсп ru - Файловые функции повт исп + Файловые функции служебный повт исп true - true + true + true DuringSession diff --git a/SSL/src/CommonModules/ФизическиеЛица/Module.bsl b/SSL/src/CommonModules/ФизическиеЛица/Module.bsl index de68b82ee..24a9080d4 100644 --- a/SSL/src/CommonModules/ФизическиеЛица/Module.bsl +++ b/SSL/src/CommonModules/ФизическиеЛица/Module.bsl @@ -6,195 +6,6 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС -// Проверяет, что серия документа для переданного вида документа указана правильно. -// -// Параметры: -// ВидДокумента - СправочникСсылка.ВидыДокументовФизическихЛиц - вид документа, для которого необходимо -// проверить правильность серии -// Серия - Строка - серия документа -// ОбъектИлиСсылка - ЛюбаяСсылка или ЛюбойОбъект - объект или ссылка на объект, в котором вводится серия -// Поле - ЭлементУправляемойФормы - элемент управляемой формы, в котором редактируется серия -// -// Возвращаемое значение: -// Булево - результат проверки, Истина - правильно, Ложь - нет. -// -Функция СерияДокументаУказанаПравильно(ВидДокумента, Серия, ОбъектИлиСсылка, Поле) Экспорт - - // проверка - Если ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортСССР - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.СвидетельствоОРождении Тогда - ТипДокумента = 1; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.УдостоверениеОфицера - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМинморфлота - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилет - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМоряка - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса Тогда - ТипДокумента = 2; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ Тогда - ТипДокумента = 3; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ Тогда - ТипДокумента = 4; - - Иначе // проверка не требуется - ТипДокумента = 5; - - КонецЕсли; - - Серия = СокрЛП(Серия); - - Если ТипДокумента = 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 = 'В номере документа присутствуют недопустимые символы.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ДлинаНомера = СтрДлина(СокрЛП(Номер)); - - Если ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортСССР - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.СвидетельствоОРождении - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.УдостоверениеОфицера - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМинморфлота - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортРФ Тогда - Если ДлинаНомера <> 6 Тогда - ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 символов.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ Тогда - Если ДлинаНомера <> 7 Тогда - ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 7 символов.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - ИначеЕсли ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилет - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ПаспортМоряка - ИЛИ ВидДокумента = Справочники.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса Тогда - Если (ДлинаНомера < 6 ) или ( ДлинаНомера > 7 ) Тогда - ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 или 7 символов.'"); - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ОбъектИлиСсылка, Поле); - Возврат Ложь; - КонецЕсли; - - КонецЕсли; - - Возврат Истина; - -КонецФункции - // Формирует фамилию и инициалы либо по наименованию элемента справочника ФизическиеЛица, // либо по переданным строкам. // Если передан Объект, то извлеченная из него строка считается совокупностью @@ -253,10 +64,6 @@ // Процедура ЗарегистрироватьОбработчикиОбновления(Обработчики) Экспорт - Обработчик = Обработчики.Добавить(); - Обработчик.Версия = "1.0.6.5"; - Обработчик.Процедура = "ФизическиеЛица.ЗаполнитьДокументыФизическихЛицПоКлассификаторуМВД"; - Обработчик = Обработчики.Добавить(); Обработчик.Версия = "1.0.6.8"; Обработчик.Процедура = "ФизическиеЛица.ПреобразоватьУдостоверенияЛичностиВДокументы"; @@ -267,42 +74,6 @@ КонецПроцедуры -// Процедура заполняет справочник ДокументыФизическихЛиц по классификатору МВД. -// Для тех конфигураций, в которых в справочнике "Виды документов физических лиц" нет реквизитов. -// -Процедура ЗаполнитьДокументыФизическихЛицПоКлассификаторуМВД() Экспорт - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ - | ВидыДокументовФизическихЛиц.Наименование - |ИЗ - | Справочник.ВидыДокументовФизическихЛиц КАК ВидыДокументовФизическихЛиц - |ГДЕ - | (НЕ ВидыДокументовФизическихЛиц.Предопределенный)"; - СписокДокументовИБ = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Наименование"); - - СписокДокументов = Новый Массив; - СписокДокументов.Добавить("Вид на жительство"); - СписокДокументов.Добавить("Временное удостоверение личности гражданина РФ"); - СписокДокументов.Добавить("Иностранный паспорт"); - СписокДокументов.Добавить("Иные документы, выдаваемые органами МВД"); - СписокДокументов.Добавить("Свидетельство о регистрации ходатайства иммигранта о признании его беженцем"); - СписокДокументов.Добавить("Свидетельство о рождении, выданное уполномоченным органом иностранного государства"); - СписокДокументов.Добавить("Справка об освобождении"); - СписокДокументов.Добавить("Удостоверение беженца"); - - Для Каждого Док Из СписокДокументов Цикл - Если СписокДокументовИБ.Найти(Док) = Неопределено Тогда - ДокОбъект = Справочники.ВидыДокументовФизическихЛиц.СоздатьЭлемент(); - ДокОбъект.Наименование = Док; - ФизическиеЛицаПереопределяемый.ДозаполнитьДокументФизическихЛиц(ДокОбъект); - ДокОбъект.Записать(); - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - // Заполняет измерение ВидДокумента по ресурсу УдалитьВидДокумента, // а также заполняет реквизит ЯвляетсяДокументомУдостоверяющимЛичность для существующих записей // diff --git a/SSL/src/CommonModules/ФизическиеЛица/ФизическиеЛица.mdo b/SSL/src/CommonModules/ФизическиеЛица/ФизическиеЛица.mdo index 222dffa3b..c62af8075 100644 --- a/SSL/src/CommonModules/ФизическиеЛица/ФизическиеЛица.mdo +++ b/SSL/src/CommonModules/ФизическиеЛица/ФизическиеЛица.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl new file mode 100644 index 000000000..495ac079f --- /dev/null +++ b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/Module.bsl @@ -0,0 +1,219 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Физические лица" +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Возвращает тип серии документа удостоверяющего личность +// +// Параметры: +// ВидДокумента - Справочник.ВидыДокументовФизическихЛиц +// +// Возвращаемое значение: +// Число - тип серии для документа, 0 - требований к серии нет +// +Функция ТипСерииДокументаУдостоверяющегоЛичность(ВидДокумента) Экспорт + + ТипДокумента = 0; + Если ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортСССР") + ИЛИ ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.СвидетельствоОРождении") Тогда + ТипДокумента = 1; + + ИначеЕсли ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.УдостоверениеОфицера") + ИЛИ ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортМинморфлота") + ИЛИ ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ВоенныйБилет") + ИЛИ ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортМоряка") + ИЛИ ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ВоенныйБилетОфицераЗапаса") Тогда + ТипДокумента = 2; + + ИначеЕсли ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ЗагранпаспортСССР") + ИЛИ ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ДипломатическийПаспорт") + ИЛИ ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ЗагранпаспортРФ") Тогда + ТипДокумента = 3; + + ИначеЕсли ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ") Тогда + ТипДокумента = 4; + + КонецЕсли; + + Возврат ТипДокумента; + +КонецФункции + +// Возвращает тип номера документа удостоверяющего личность +// +// Параметры: +// ВидДокумента - Справочник.ВидыДокументовФизическихЛиц +// +// Возвращаемое значение: +// Число - тип номера для документа, 0 - требований к номеру нет +// +Функция ТипНомераДокументаУдостоверяющегоЛичность(ВидДокумента) Экспорт + + ТипДокумента = 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 Тогда + Если ДлинаНомера <> 6 Тогда + ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 символов.'"); + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ТипДокумента = 2 Тогда + Если ДлинаНомера <> 7 Тогда + ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 7 символов.'"); + Возврат Ложь; + КонецЕсли; + + ИначеЕсли ТипДокумента = 3 Тогда + Если (ДлинаНомера < 6 ) или ( ДлинаНомера > 7 ) Тогда + ТекстОшибки = НСтр("ru = 'Номер документа должен состоять из 6 или 7 символов.'"); + Возврат Ложь; + КонецЕсли; + + КонецЕсли; + + Возврат Истина; + +КонецФункции diff --git a/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/ФизическиеЛицаКлиентСервер.mdo b/SSL/src/CommonModules/ФизическиеЛицаКлиентСервер/ФизическиеЛицаКлиентСервер.mdo new file mode 100644 index 000000000..9401b2fdc --- /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 deleted file mode 100644 index c98ee1f1c..000000000 --- a/SSL/src/CommonModules/ФизическиеЛицаПереопределяемый/Module.bsl +++ /dev/null @@ -1,18 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// Подсистема "Физические лица" -// -//////////////////////////////////////////////////////////////////////////////// - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Обновление информационной базы - -// Процедура дозаполняет справочник ДокументыФизическихЛиц. -// -Процедура ДозаполнитьДокументФизическихЛиц(ДокОбъект) Экспорт - - // В этой конфигурации дозаполнение не требуется. - -КонецПроцедуры diff --git a/SSL/src/CommonModules/ФизическиеЛицаПереопределяемый/ФизическиеЛицаПереопределяемый.mdo b/SSL/src/CommonModules/ФизическиеЛицаПереопределяемый/ФизическиеЛицаПереопределяемый.mdo deleted file mode 100644 index ea62f7690..000000000 --- a/SSL/src/CommonModules/ФизическиеЛицаПереопределяемый/ФизическиеЛицаПереопределяемый.mdo +++ /dev/null @@ -1,12 +0,0 @@ - - - ФизическиеЛицаПереопределяемый - - ru - Физические лица переопределяемый - - true - true - true - true - diff --git a/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/Module.bsl b/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/Module.bsl new file mode 100644 index 000000000..f4b9215e3 --- /dev/null +++ b/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/Module.bsl @@ -0,0 +1,55 @@ +//////////////////////////////////////////////////////////////////////////////// +// Варианты отчетов - Форма отчета (клиент, переопределяемый) +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Обработчик расшифровки табличного документа формы отчета. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) +// Элемент (ПолеФормы) +// Остальные параметры передаются из параметров обработчика "как есть", +// см. события для "Расширение поля формы для поля табличного документа" в справке. +// +Процедура ОбработкаРасшифровки(ЭтаФорма, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Обработчик дополнительной расшифровки (меню табличного документа формы отчета). +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) +// Элемент (ПолеФормы) +// Остальные параметры передаются из параметров обработчика "как есть", +// см. события для "Расширение поля формы для поля табличного документа" в справке. +// +Процедура ОбработкаДополнительнойРасшифровки(ЭтаФорма, Элемент, Расшифровка, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Обработчик команд, добавленных динамически. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) Форма отчета. +// Команда (КомандаФормы) Команда, которая была вызвана. +// Результат (Булево) Истина, если вызов команды обработан. +// +Процедура ОбработчикКоманды(ЭтаФорма, Команда, Результат) Экспорт + +КонецПроцедуры + +// Обработчик результата выбора подчиненной формы. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) Форма отчета. +// ВыбранноеЗначение (*) Результат выбора в подчиненной форме. +// ИсточникВыбора (УправляемаяФорма) Форма, где осуществлен выбор. +// Результат (Булево) Истина, если результат выбора обработан. +// +Процедура ОбработкаВыбора(ЭтаФорма,ВыбранноеЗначение, ИсточникВыбора, Результат) Экспорт + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/ФормаОтчетаКлиентПереопределяемый.mdo b/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/ФормаОтчетаКлиентПереопределяемый.mdo new file mode 100644 index 000000000..46aeafb27 --- /dev/null +++ b/SSL/src/CommonModules/ФормаОтчетаКлиентПереопределяемый/ФормаОтчетаКлиентПереопределяемый.mdo @@ -0,0 +1,10 @@ + + + ФормаОтчетаКлиентПереопределяемый + + ru + Форма отчета клиент переопределяемый + + true + true + diff --git a/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl b/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl new file mode 100644 index 000000000..f02934f5a --- /dev/null +++ b/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/Module.bsl @@ -0,0 +1,64 @@ +//////////////////////////////////////////////////////////////////////////////// +// Варианты отчетов - Форма отчета (переопределяемый) +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// В данной процедуре следует описать дополнительные зависимости объектов метаданных +// конфигурации, которые будут использоваться для связи настроек отчетов. +// +// Параметры: +// СвязиОбъектовМетаданных (ТаблицаЗначений) +// |- ПодчиненныйРеквизит (Строка) Имя реквизита подчиненного объекта метаданных +// |- ПодчиненныйТип (Тип) Тип подчиненного объекта метаданных +// |- ВедущийТип (Тип) Тип ведущего объекта метаданных +// +Процедура ДополнитьСвязиОбъектовМетаданных(СвязиОбъектовМетаданных) Экспорт + +КонецПроцедуры + +// Вызывается в одноименном обработчике формы отчета после выполнения кода формы. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) +// Остальные параметры передаются из параметров обработчика "как есть", +// см. события для "УправляемаяФорма" в справке. +// +Процедура ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка) Экспорт + +КонецПроцедуры + +// Вызывается в одноименном обработчике формы отчета после выполнения кода формы. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) +// Остальные параметры передаются из параметров обработчика "как есть", +// см. события для "Расширение управляемой формы для отчета" в справке. +// +Процедура ПриЗагрузкеВариантаНаСервере(ЭтаФорма, НовыеНастройкиКД) Экспорт + +КонецПроцедуры + +// Вызывается после перезаполнения панели быстрых настроек. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) +// +Процедура ПослеЗаполненияПанелиБыстрыхНастроек(ЭтаФорма) Экспорт + +КонецПроцедуры + +// Обработчик контекстного вызова сервера. +// +// Параметры: +// ЭтаФорма (УправляемаяФорма) +// Ключ (Строка) Ключ операции, которую необходимо выполнить в контекстном вызове. +// Параметры (Структура) Параметры вызова сервера. +// Результат (Структура) Результат работы сервера, возвращается на клиент. +// +Процедура КонтекстныйВызовСервера(ЭтаФорма, Ключ, Параметры, Результат) Экспорт + +КонецПроцедуры + diff --git a/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/ФормаОтчетаПереопределяемый.mdo b/SSL/src/CommonModules/ФормаОтчетаПереопределяемый/ФормаОтчетаПереопределяемый.mdo new file mode 100644 index 000000000..255953f56 --- /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..8122deeee --- /dev/null +++ b/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/Module.bsl @@ -0,0 +1,863 @@ +//////////////////////////////////////////////////////////////////////////////// +// Варианты отчетов - Функции отчетов (клиент, сервер) +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Формирует настройки отчета по умолчанию. +// +// Возвращаемое значение: +// Настройки (Структура) +// |- СоответствиеПериодичностиПараметров (Соответствие) +// |- Ключ (ПараметрКомпоновкиДанных) +// |- Значение (ПеречислениеСсылка.ДоступныеПериодыОтчета) +// |- ПараметрыПечатиПоУмолчанию (Структура) +// +Функция ПолучитьНастройкиОтчетаПоУмолчанию() Экспорт + + Настройки = Новый Структура; + Настройки.Вставить("СоответствиеПериодичностиПараметров", Новый Соответствие); + Настройки.Вставить("ПараметрыПечатиПоУмолчанию", Новый Структура); + Настройки.ПараметрыПечатиПоУмолчанию.Вставить("ПолеСверху", 10); + Настройки.ПараметрыПечатиПоУмолчанию.Вставить("ПолеСлева", 10); + Настройки.ПараметрыПечатиПоУмолчанию.Вставить("ПолеСнизу", 10); + Настройки.ПараметрыПечатиПоУмолчанию.Вставить("ПолеСправа", 10); + Настройки.ПараметрыПечатиПоУмолчанию.Вставить("ОриентацияСтраницы", ОриентацияСтраницы.Портрет); + Настройки.ПараметрыПечатиПоУмолчанию.Вставить("АвтоМасштаб", Истина); + Настройки.ПараметрыПечатиПоУмолчанию.Вставить("МасштабПечати", Неопределено); + + Возврат Настройки; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Находит пользовательскую настройку по ее идентификатору. +// +// Параметры: +// ПользовательскиеНастройкиКД (ПользовательскиеНастройкиКомпоновкиДанных) +// Идентификатор (Строка) +// +Функция НайтиПользовательскуюНастройку(ПользовательскиеНастройкиКД, Идентификатор) Экспорт + Для Каждого ПользовательскаяНастройка Из ПользовательскиеНастройкиКД.Элементы Цикл + Если ПользовательскаяНастройка.ИдентификаторПользовательскойНастройки = Идентификатор Тогда + Возврат ПользовательскаяНастройка; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Находит вложенную пользовательскую настройку по ее идентификатору. +// +Функция НайтиВложеннуюПользовательскуюНастройку(ПользовательскаяНастройка, Идентификатор) Экспорт + + Для Каждого ВложеннаяНастройка Из ПользовательскаяНастройка.Элементы Цикл + Если Строка(ПользовательскаяНастройка.ПолучитьИдентификаторПоОбъекту(ВложеннаяНастройка)) = Идентификатор Тогда + Возврат ВложеннаяНастройка; + КонецЕсли; + Если ТипЗнч(ВложеннаяНастройка) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + РезультатПоиска = НайтиПолеВыбора(ПользовательскаяНастройка, Идентификатор, ВложеннаяНастройка); + Если РезультатПоиска <> Неопределено Тогда + Возврат РезультатПоиска; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +// Находит общую настройку по идентификатору пользовательской настройки. +// +// Параметры: +// Настройки (НастройкиКомпоновкиДанных) +// ИдентификаторПользовательскойНастройки (Строка) +// +Функция ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки, ИдентификаторПользовательскойНастройки) Экспорт + + Если ТипЗнч(Настройки) <> Тип("НастройкиКомпоновкиДанных") и Настройки.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Возврат Настройки; + КонецЕсли; + + ЭлементНастройкиВарианта = Неопределено; + + Если ТипЗнч(Настройки) <> Тип("КоллекцияЭлементовСтруктурыТаблицыКомпоновкиДанных") + и ТипЗнч(Настройки) <> Тип("КоллекцияЭлементовСтруктурыДиаграммыКомпоновкиДанных") + и ТипЗнч(Настройки) <> Тип("КоллекцияЭлементовСтруктурыНастроекКомпоновкиДанных") + и ТипЗнч(Настройки) <> Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") + Тогда + + Если Настройки.Выбор.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Возврат Настройки.Выбор; + ИначеЕсли ТипЗнч(Настройки) <> Тип("ТаблицаКомпоновкиДанных") и ТипЗнч(Настройки) <> Тип("ДиаграммаКомпоновкиДанных") и Настройки.Отбор.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Возврат Настройки.Отбор; + ИначеЕсли ТипЗнч(Настройки) <> Тип("ТаблицаКомпоновкиДанных") и ТипЗнч(Настройки) <> Тип("ДиаграммаКомпоновкиДанных") и Настройки.Порядок.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Возврат Настройки.Порядок; + ИначеЕсли Настройки.УсловноеОформление.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Возврат Настройки.УсловноеОформление; + КонецЕсли; + + Если ТипЗнч(Настройки) = Тип("НастройкиКомпоновкиДанных") Тогда + ЭлементНастройкиВарианта = НайтиЭлементНастройки(Настройки.ПараметрыДанных, ИдентификаторПользовательскойНастройки); + КонецЕсли; + + Если ЭлементНастройкиВарианта = Неопределено Тогда + Если ТипЗнч(Настройки) <> Тип("ТаблицаКомпоновкиДанных") и ТипЗнч(Настройки) <> Тип("ДиаграммаКомпоновкиДанных") Тогда + ЭлементНастройкиВарианта = НайтиЭлементНастройки(Настройки.Отбор, ИдентификаторПользовательскойНастройки); + КонецЕсли; + КонецЕсли; + + Если ЭлементНастройкиВарианта = Неопределено Тогда + ЭлементНастройкиВарианта = НайтиЭлементНастройки(Настройки.УсловноеОформление, ИдентификаторПользовательскойНастройки); + КонецЕсли; + + Если ЭлементНастройкиВарианта = Неопределено Тогда + Если ТипЗнч(Настройки) = Тип("ТаблицаКомпоновкиДанных") Тогда + ЭлементНастройкиВарианта = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Строки, ИдентификаторПользовательскойНастройки); + Если ЭлементНастройкиВарианта = Неопределено Тогда + ЭлементНастройкиВарианта = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Колонки, ИдентификаторПользовательскойНастройки); + КонецЕсли; + ИначеЕсли ТипЗнч(Настройки) = Тип("ДиаграммаКомпоновкиДанных") Тогда + ЭлементНастройкиВарианта = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Точки, ИдентификаторПользовательскойНастройки); + Если ЭлементНастройкиВарианта = Неопределено Тогда + ЭлементНастройкиВарианта = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Серии, ИдентификаторПользовательскойНастройки); + КонецЕсли; + Иначе + ЭлементНастройкиВарианта = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Структура, ИдентификаторПользовательскойНастройки); + КонецЕсли; + КонецЕсли; + + ИначеЕсли ТипЗнч(Настройки) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда + + ЭлементНастройкиВарианта = ПолучитьОбъектПоПользовательскомуИдентификатору(Настройки.Настройки, ИдентификаторПользовательскойНастройки); + + Иначе + Если Настройки.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Возврат Настройки; + КонецЕсли; + Для каждого ЭлементНастройки из Настройки Цикл + ЭлементНастройкиВарианта = ПолучитьОбъектПоПользовательскомуИдентификатору(ЭлементНастройки, ИдентификаторПользовательскойНастройки); + Если ЭлементНастройкиВарианта <> Неопределено Тогда + Прервать; + КонецЕсли; + КонецЦикла; + КонецЕсли; + + Возврат ЭлементНастройкиВарианта; + +КонецФункции + +// Функция возвращает доступное поле компоновки данных +// +// Параметры: +// Доступные поля - доступные поля компоновки данные, доступные поля отбора компоновки данные и т.д. +// Поле - Имя поля компоновки данных +// +Функция ПолучитьДоступноеПоле(ДоступныеПоля, Поле) Экспорт + + Если ТипЗнч(Поле) = Тип("Строка") Тогда + ПолеДоступа = Новый ПолеКомпоновкиДанных(Поле); + ИначеЕсли ТипЗнч(Поле) = Тип("ПолеКомпоновкиДанных") Тогда + ПолеДоступа = Поле; + Иначе + Возврат Неопределено; + КонецЕсли; + + Возврат ДоступныеПоля.НайтиПоле(ПолеДоступа); + +КонецФункции + +// Функция возвращает доступный параметр компоновки данных +// +// Параметры: +// Доступные поля - доступные поля компоновки данные, доступные поля отбора компоновки данные и т.д. +// Параметр - Имя параметра компоновки данных +// +Функция ПолучитьДоступныйПараметр(ДоступныеПараметры, Параметр) Экспорт + + Если ТипЗнч(Параметр) = Тип("Строка") Тогда + ПараметрДоступа = Новый ПараметрКомпоновкиДанных(Параметр); + ИначеЕсли ТипЗнч(Параметр) = Тип("ПараметрКомпоновкиДанных") Тогда + ПараметрДоступа = Параметр; + Иначе + Возврат Неопределено; + КонецЕсли; + + Возврат ДоступныеПараметры.НайтиПараметр(ПараметрДоступа); + +КонецФункции + +// Загружает значения элемента настроек в таблицу. +// +Процедура ДобавитьЭлементыНастройки(ФормаОтчета, Таблица, ЭлементНастройки, ЭлементВыбора, ДобавлятьИерархическиеПоля, Отступ = "") Экспорт + + Для каждого ПолеВыбора из ЭлементВыбора.Элементы Цикл + Заголовок = ПолеВыбора.Заголовок; + Если Заголовок = "" Тогда + ДоступноеПоле = ПолучитьДоступноеПоле(ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора, ПолеВыбора.Поле); + Если ДоступноеПоле <> Неопределено Тогда + Заголовок = ДоступноеПоле.Заголовок; + Иначе + Продолжить; + КонецЕсли; + КонецЕсли; + СтрокаПоляВыбора = Таблица.Добавить(); + СтрокаПоляВыбора.Представление = Отступ + Заголовок; + СтрокаПоляВыбора.Использование = ПолеВыбора.Использование; + + СтрокаПоляВыбора.Идентификатор = Строка(ЭлементНастройки.ПолучитьИдентификаторПоОбъекту(ПолеВыбора)); + Если ПолеВыбора.Родитель <> Неопределено Тогда + СтрокаПоляВыбора.ИдентификаторРодителя = Строка(ЭлементНастройки.ПолучитьИдентификаторПоОбъекту(ПолеВыбора.Родитель)); + КонецЕсли; + Если ТипЗнч(ПолеВыбора) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + СтрокаПоляВыбора.ЭтоГруппа = Истина; + КонецЕсли; + Если ДобавлятьИерархическиеПоля и ТипЗнч(ПолеВыбора) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") и ПолеВыбора.Элементы.Количество() > 0 Тогда + ДобавитьЭлементыНастройки(ФормаОтчета, Таблица, ЭлементНастройки, ПолеВыбора, Истина, Отступ + " "); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Возвращает список периодов в диапазоне периода. +// +Функция ПолучитьСтруктуруОтборов(ФормаОтчета, КомпоновщикНастроек, СтрокаИдентификатора, ТипОтбора = Неопределено, СтрокаТипаОтбора = Неопределено) Экспорт + + СтруктураПараметров = Новый Структура(); + + Если ТипОтбора = Неопределено и (СтрокаТипаОтбора = Неопределено или СтрокаТипаОтбора = "") Тогда + Возврат Неопределено; + КонецЕсли; + + Если ТипОтбора = Неопределено и СтрокаТипаОтбора <> Неопределено и СтрокаТипаОтбора = "" Тогда + ТипОтбора = Тип(СтрокаТипаОтбора); + КонецЕсли; + + // Получим таблицу связей + СтрокиСвязей = ФормаОтчета.СвязиОтборов.НайтиСтроки(Новый Структура("ИдентификаторОтбора", СтрокаИдентификатора)); + МассивСтрокСвязи = Новый Массив; + Для каждого СтрокаСвязи из СтрокиСвязей Цикл + Если Тип(СтрокаСвязи.Тип) = ТипОтбора Тогда + МассивСтрокСвязи.Добавить(СтрокаСвязи); + КонецЕсли; + КонецЦикла; + + // Добавим отборы и параметры из элементов настройки отчета по таблице связей полей + Для Каждого СтрокаСвязи из МассивСтрокСвязи Цикл + ЭлементНастройки = НайтиПользовательскуюНастройку(КомпоновщикНастроек.ПользовательскиеНастройки, СтрокаСвязи.ИдентификаторЗначенияОтбора); + Если ЭлементНастройки = Неопределено или Не ЭлементНастройки.Использование Тогда + Продолжить; + КонецЕсли; + ЗначениеОтбора = НеОпределено; + Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда + ЗначениеОтбора = ЭлементНастройки.ПравоеЗначение; + ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда + ЗначениеОтбора = ЭлементНастройки.Значение; + КонецЕсли; + Если ЗначениеОтбора <> НеОпределено Тогда + ПараметрВыбораИмена = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСвязи.РеквизитПоля, "."); + Если ПараметрВыбораИмена.Количество() = 1 Тогда + СтруктураПараметров.Вставить(ПараметрВыбораИмена[0], ЗначениеОтбора); + ИначеЕсли ПараметрВыбораИмена[0] = "Отбор" Тогда + Если Не СтруктураПараметров.Свойство("Отбор") Тогда + СтруктураПараметров.Вставить("Отбор", Новый Структура()); + КонецЕсли; + СтруктураПараметров.Отбор.Вставить(ПараметрВыбораИмена[1], ЗначениеОтбора); + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат СтруктураПараметров; + +КонецФункции + +// Добавляет выбранное поле компоновки данных. +// +// Параметры: +// Куда (КомпоновщикНастроекКомпоновкиДанных, НастройкиКомпоновкиДанных, ВыбранныеПоляКомпоновкиДанных) +// ИмяИлиПолеКД (Строка, ПолеКомпоновкиДанных) +// Заголовок (Строка) Необязательный. +// +// Возвращаемое значение: +// (ВыбранноеПолеКомпоновкиДанных) +// +Функция ДобавитьВыбранноеПоле(Куда, ИмяИлиПолеКД, Заголовок = "") Экспорт + + Если ТипЗнч(Куда) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + ВыбранныеПоляКД = Куда.Настройки.Выбор; + ИначеЕсли ТипЗнч(Куда) = Тип("НастройкиКомпоновкиДанных") Тогда + ВыбранныеПоляКД = Куда.Выбор; + Иначе + ВыбранныеПоляКД = Куда; + КонецЕсли; + + Если ТипЗнч(ИмяИлиПолеКД) = Тип("Строка") Тогда + ПолеКД = Новый ПолеКомпоновкиДанных(ИмяИлиПолеКД); + Иначе + ПолеКД = ИмяИлиПолеКД; + КонецЕсли; + + ВыбранноеПолеКД = ВыбранныеПоляКД.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных")); + ВыбранноеПолеКД.Поле = ПолеКД; + Если Заголовок <> "" Тогда + ВыбранноеПолеКД.Заголовок = Заголовок; + КонецЕсли; + + Возврат ВыбранноеПолеКД; + +КонецФункции + +// Возвращает список всех группировок компоновщика настроек +// +// Параметры: +// ЭлементСтруктуры - элемент структуры настройки СКД, настройка СКД или компоновщик настроек +// ПоказыватьГруппировкиТаблиц - признак добавления в список группировки колонок (по умолчанию Истина) +// +Функция ПолучитьГруппировки(ЭлементСтруктуры, ПоказыватьГруппировкиТаблиц = Истина) Экспорт + + СписокПолей = Новый СписокЗначений; + Если ТипЗнч(ЭлементСтруктуры) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + Структура = ЭлементСтруктуры.Настройки.Структура; + ДобавитьГруппировки(Структура, СписокПолей); + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиКомпоновкиДанных") Тогда + Структура = ЭлементСтруктуры.Структура; + ДобавитьГруппировки(Структура, СписокПолей); + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда + ДобавитьГруппировки(ЭлементСтруктуры.Строки, СписокПолей); + ДобавитьГруппировки(ЭлементСтруктуры.Колонки, СписокПолей); + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда + ДобавитьГруппировки(ЭлементСтруктуры.Серии, СписокПолей); + ДобавитьГруппировки(ЭлементСтруктуры.Точки, СписокПолей); + Иначе + ДобавитьГруппировки(ЭлементСтруктуры.Структура, СписокПолей, ПоказыватьГруппировкиТаблиц); + КонецЕсли; + Возврат СписокПолей; + +КонецФункции + +// Находит пользовательскую настройку по имени параметра. +// Если пользовательская настройка не найдена (например, +// если параметр не выведен в пользовательские настройки), +// то получает общую настройку параметра. +// +// Параметры: +// КомпоновщикНастроекКД (КомпоновщикНастроекКомпоновкиДанных) +// ИмяПараметра (Строка) +// +// Возвращаемое значение: +// (ЗначениеПараметраНастроекКомпоновкиДанных, Неопределено) +// +Функция ПолучитьПараметр(КомпоновщикНастроекКД, ИмяПараметра) Экспорт + ПараметрКД = Новый ПараметрКомпоновкиДанных(ИмяПараметра); + + Для Каждого ПользовательскаяНастройка Из КомпоновщикНастроекКД.ПользовательскиеНастройки.Элементы Цикл + Если ТипЗнч(ПользовательскаяНастройка) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") + И ПользовательскаяНастройка.Параметр = ПараметрКД Тогда + Возврат ПользовательскаяНастройка; + КонецЕсли; + КонецЦикла; + + Возврат КомпоновщикНастроекКД.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКД); +КонецФункции + +// Возвращает список полей группировок всех группировок компоновщика настроек +// +// Параметры: +// КомпоновщикНастроек - компоновщик настроек +// БезПользовательскихПолей - признак не включения пользовательских настроек СКД +// +Функция ПолучитьПоляГруппировок(КомпоновщикНастроек, БезПользовательскихПолей = Ложь) Экспорт + + СписокПолей = Новый СписокЗначений; + + Структура = КомпоновщикНастроек.Настройки.Структура; + ДобавитьПоляГруппировки(Структура, СписокПолей, БезПользовательскихПолей); + Возврат СписокПолей; + +КонецФункции + +// Возвращает последний элемент структуры - группировку +// +// Параметры: +// ЭлементСтруктурыНастроек - элемент структуры компоновки данных +// Строки - признак для получения последний группировки строк (Серий) или колонок (точек) +// +Функция ПолучитьПоследнийЭлементСтруктуры(ЭлементСтруктурыНастроек, Строки = Истина) Экспорт + + Если ТипЗнч(ЭлементСтруктурыНастроек) = Тип("КомпоновщикНастроекКомпоновкиДанных") Тогда + Настройки = ЭлементСтруктурыНастроек.Настройки; + ИначеЕсли ТипЗнч(ЭлементСтруктурыНастроек) = Тип("НастройкиКомпоновкиДанных") Тогда + Настройки = ЭлементСтруктурыНастроек; + Иначе + Возврат Неопределено; + КонецЕсли; + + Структура = Настройки.Структура; + Если Структура.Количество() = 0 Тогда + Возврат Настройки; + КонецЕсли; + + Если Строки Тогда + ИмяСтруктурыТаблицы = "Строки"; + ИмяСтруктурыДиаграммы = "Серии"; + Иначе + ИмяСтруктурыТаблицы = "Колонки"; + ИмяСтруктурыДиаграммы = "Точки"; + КонецЕсли; + + Пока Истина Цикл + ЭлементСтруктуры = Структура[0]; + Если ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") И ЭлементСтруктуры[ИмяСтруктурыТаблицы].Количество() > 0 Тогда + Если ЭлементСтруктуры[ИмяСтруктурыТаблицы][0].Структура.Количество() = 0 Тогда + Структура = ЭлементСтруктуры[ИмяСтруктурыТаблицы]; + Прервать; + КонецЕсли; + Структура = ЭлементСтруктуры[ИмяСтруктурыТаблицы][0].Структура; + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") И ЭлементСтруктуры[ИмяСтруктурыДиаграммы].Количество() > 0 Тогда + Если ЭлементСтруктуры[ИмяСтруктурыДиаграммы][0].Структура.Количество() = 0 Тогда + Структура = ЭлементСтруктуры[ИмяСтруктурыДиаграммы]; + Прервать; + КонецЕсли; + Структура = ЭлементСтруктуры[ИмяСтруктурыДиаграммы][0].Структура; + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных") + ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаТаблицыКомпоновкиДанных") + ИЛИ ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда + Если ЭлементСтруктуры.Структура.Количество() = 0 Тогда + Прервать; + КонецЕсли; + Структура = ЭлементСтруктуры.Структура; + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда + Возврат ЭлементСтруктуры[ИмяСтруктурыТаблицы]; + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда + Возврат ЭлементСтруктуры[ИмяСтруктурыДиаграммы]; + Иначе + Возврат ЭлементСтруктуры; + КонецЕсли; + КонецЦикла; + + Возврат Структура[0]; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Локальные служебные процедуры и функции + +// Добавляет вложенные поля группировки. +// +Процедура ДобавитьПоляГруппировки(Структура, СписокПолей, БезПользовательскихПолей) + + Для каждого ЭлементСтруктуры Из Структура Цикл + Если ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда + ДобавитьПоляГруппировки(ЭлементСтруктуры.Строки, СписокПолей, БезПользовательскихПолей); + ДобавитьПоляГруппировки(ЭлементСтруктуры.Колонки, СписокПолей, БезПользовательскихПолей); + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда + ДобавитьПоляГруппировки(ЭлементСтруктуры.Серии, СписокПолей, БезПользовательскихПолей); + ДобавитьПоляГруппировки(ЭлементСтруктуры.Точки, СписокПолей, БезПользовательскихПолей); + Иначе + Для каждого ТекущееПолеГруппировки Из ЭлементСтруктуры.ПоляГруппировки.Элементы Цикл + ДоступноеПоле = ЭлементСтруктуры.Выбор.ДоступныеПоляВыбора.НайтиПоле(ТекущееПолеГруппировки.Поле); + Если ДоступноеПоле <> Неопределено + И (ДоступноеПоле.Родитель = Неопределено ИЛИ Не БезПользовательскихПолей ИЛИ ДоступноеПоле.Родитель.Поле <> Новый ПолеКомпоновкиДанных("UserFields")) Тогда + СписокПолей.Добавить(Строка(ДоступноеПоле.Поле), ДоступноеПоле.Заголовок); + КонецЕсли; + КонецЦикла; + ДобавитьПоляГруппировки(ЭлементСтруктуры.Структура, СписокПолей, БезПользовательскихПолей); + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Добавляет вложенные группировки элемента структуры. +// +Процедура ДобавитьГруппировки(Структура, СписокГруппировок, ПоказыватьГруппировкиТаблиц = Истина) + + Для каждого ЭлементСтруктуры Из Структура Цикл + Если ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда + ДобавитьГруппировки(ЭлементСтруктуры.Строки, СписокГруппировок); + ДобавитьГруппировки(ЭлементСтруктуры.Колонки, СписокГруппировок); + ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда + ДобавитьГруппировки(ЭлементСтруктуры.Серии, СписокГруппировок); + ДобавитьГруппировки(ЭлементСтруктуры.Точки, СписокГруппировок); + Иначе + СписокГруппировок.Добавить(ЭлементСтруктуры); + Если ПоказыватьГруппировкиТаблиц Тогда + ДобавитьГруппировки(ЭлементСтруктуры.Структура, СписокГруппировок); + КонецЕсли; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +// Находит выбранное поле компоновки данных по идентификатору. +// +Функция НайтиПолеВыбора(ЭлементНастроек, Идентификатор, Группа) + + НайденноеПолеВыбора = Неопределено; + + Для каждого ПолеВыбора из Группа.Элементы Цикл + Если Строка(ЭлементНастроек.ПолучитьИдентификаторПоОбъекту(ПолеВыбора)) = Идентификатор Тогда + НайденноеПолеВыбора = ПолеВыбора; + Прервать; + КонецЕсли; + Если ТипЗнч(ПолеВыбора) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + НайденноеПолеВыбора = НайтиПолеВыбора(ЭлементНастроек, Идентификатор, ПолеВыбора); + Если НайденноеПолеВыбора <> Неопределено Тогда + Прервать; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Возврат НайденноеПолеВыбора; +КонецФункции + +// Находит общую настройку компоновки данных по идентификатору. +// +Функция НайтиЭлементНастройки(ЭлементНастройки, ИдентификаторПользовательскойНастройки) + МассивГрупп = Новый Массив; + МассивГрупп.Добавить(ЭлементНастройки); + + Пока МассивГрупп.Количество() > 0 Цикл + + Для Каждого ПодчиненныйЭлемент Из МассивГрупп[0].Элементы Цикл + Если ПодчиненныйЭлемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки Тогда + Возврат ПодчиненныйЭлемент; + Иначе + Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") + ИЛИ ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаВыбранныхПолейКомпоновкиДанных") Тогда + МассивГрупп.Добавить(ПодчиненныйЭлемент); + КонецЕсли; + КонецЕсли; + КонецЦикла; + МассивГрупп.Удалить(0); + + КонецЦикла; + + Возврат Неопределено; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Для работы с механизмом периодичности + +// Возвращает дату начала периода. +// +Функция НачалоПериодаОтчета(ВидПериода, ДатаПериода) Экспорт + НачалоПериода = ДатаПериода; + + Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод") Тогда + // Действие не требуется + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год") Тогда + НачалоПериода = НачалоГода(ДатаПериода); + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие") Тогда + Если Месяц(ДатаПериода) >= 7 Тогда + НачалоПериода = Дата(Год(ДатаПериода), 7, 1); + Иначе + НачалоПериода = Дата(Год(ДатаПериода), 1, 1); + КонецЕсли; + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал") Тогда + НачалоПериода = НачалоКвартала(ДатаПериода); + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц") Тогда + НачалоПериода = НачалоМесяца(ДатаПериода); + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада") Тогда + Если День(ДатаПериода) <= 10 Тогда + НачалоПериода = Дата(Год(ДатаПериода), Месяц(ДатаПериода), 1); + ИначеЕсли День(ДатаПериода) <= 20 Тогда + НачалоПериода = Дата(Год(ДатаПериода), Месяц(ДатаПериода), 11); + Иначе + НачалоПериода = Дата(Год(ДатаПериода), Месяц(ДатаПериода), 21); + КонецЕсли; + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя") Тогда + НачалоПериода = НачалоНедели(ДатаПериода); + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День") Тогда + НачалоПериода = НачалоДня(ДатаПериода); + КонецЕсли; + + Возврат НачалоПериода; + +КонецФункции + +// Возвращает дату окончания периода. +// +Функция КонецПериодаОтчета(ВидПериода, ДатаПериода) Экспорт + КонецПериода = ДатаПериода; + + Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод") Тогда + // Действие не требуется + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год") Тогда + КонецПериода = КонецГода(ДатаПериода); + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие") Тогда + Если Месяц(ДатаПериода) >= 7 Тогда + КонецПериода = КонецГода(ДатаПериода); + Иначе + КонецПериода = КонецДня(Дата(Год(ДатаПериода), 6, 30)); + КонецЕсли; + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал") Тогда + КонецПериода = КонецКвартала(ДатаПериода); + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц") Тогда + КонецПериода = КонецМесяца(ДатаПериода); + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада") Тогда + Если День(ДатаПериода) <= 10 Тогда + КонецПериода = КонецДня(Дата(Год(ДатаПериода), Месяц(ДатаПериода), 10)); + ИначеЕсли День(ДатаПериода) <= 20 Тогда + КонецПериода = КонецДня(Дата(Год(ДатаПериода), Месяц(ДатаПериода), 20)); + Иначе + КонецПериода = КонецМесяца(ДатаПериода); + КонецЕсли; + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя") Тогда + КонецПериода = КонецНедели(ДатаПериода); + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День") Тогда + КонецПериода = КонецДня(ДатаПериода); + КонецЕсли; + + Возврат КонецПериода; + +КонецФункции + +// Возвращает список периодов в диапазоне начала периода. +// +Функция ПолучитьСписокПериодов(НачалоПериода, ВидПериода) Экспорт + СписокПериодов = Новый СписокЗначений; + Если НачалоПериода = '00010101' Тогда + Возврат Новый СписокЗначений; + Иначе + ЗначениеНачалоПериода = НачалоПериода; + КонецЕсли; + + Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год") Тогда + ТекущийГод = Год(ЗначениеНачалоПериода); + + СписокПериодов.Добавить(Дата(ТекущийГод - 4, 1, 1), НСтр("ru = 'Предыдущие годы...'")); + Для Счетчик = ТекущийГод - 3 По ТекущийГод + 3 Цикл + СписокПериодов.Добавить(Дата(Счетчик, 1, 1), Формат(Счетчик, "ЧГ=0")); + КонецЦикла; + СписокПериодов.Добавить(Дата(ТекущийГод + 4, 1, 1), НСтр("ru = 'Последующие годы...'")); + + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие") Тогда + ТекущийГод = Год(ЗначениеНачалоПериода); + + СписокПериодов.Добавить(Дата(ТекущийГод - 2, 1, 1), Формат(ТекущийГод - 2, "ЧГ=0") + "..."); + Для Счетчик = ТекущийГод - 1 По ТекущийГод + 1 Цикл + СписокПериодов.Добавить(Дата(Счетчик, 1, 1), НСтр("ru = 'I полугодие'") + " " + Формат(Счетчик, "ЧГ=0")); + СписокПериодов.Добавить(Дата(Счетчик, 7, 1), НСтр("ru = 'II полугодие'") + " " + Формат(Счетчик, "ЧГ=0")); + КонецЦикла; + СписокПериодов.Добавить(Дата(ТекущийГод + 2, 1, 1), Формат(ТекущийГод + 2, "ЧГ=0") + "..."); + + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал") Тогда + ТекущийГод = Год(ЗначениеНачалоПериода); + + СписокПериодов.Добавить(Дата(ТекущийГод-1, 1, 1), Формат(ТекущийГод-1, "ЧГ=0") + "..."); + Для Счетчик = ТекущийГод по ТекущийГод Цикл + СуффиксПериода = " " + Формат(Счетчик, "ЧГ=0"); + СписокПериодов.Добавить(Дата(Счетчик, 1, 1), НСтр("ru = 'I квартал'") + СуффиксПериода); + СписокПериодов.Добавить(Дата(Счетчик, 4, 1), НСтр("ru = 'II квартал'") + СуффиксПериода); + СписокПериодов.Добавить(Дата(Счетчик, 7, 1), НСтр("ru = 'III квартал'") + СуффиксПериода); + СписокПериодов.Добавить(Дата(Счетчик, 10, 1), НСтр("ru = 'IV квартал'") + СуффиксПериода); + КонецЦикла; + СписокПериодов.Добавить(Дата(ТекущийГод+1, 1, 1), Формат(ТекущийГод+1, "ЧГ=0") + "..."); + + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц") Тогда + ТекущийГод = Год(ЗначениеНачалоПериода); + + СписокПериодов.Добавить(Дата(ТекущийГод-1, 1, 1), Формат(ТекущийГод-1, "ЧГ=0") + "..."); + Для Счетчик = 1 по 12 Цикл + СписокПериодов.Добавить(Дата(ТекущийГод, Счетчик, 1), Формат(Дата(ТекущийГод, Счетчик, 1), "ДФ='MMMM yyyy'")); + КонецЦикла; + СписокПериодов.Добавить(Дата(ТекущийГод+1, 1, 1), Формат(ТекущийГод+1, "ЧГ=0") + "..."); + + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада") Тогда + ТекущийГод = Год(ЗначениеНачалоПериода); + ТекущийМесяц = Месяц(ЗначениеНачалоПериода); + + СчМесяц = ?(ТекущийМесяц - 4 < 1, 12 + ТекущийМесяц - 4, ТекущийМесяц - 4); + СчГод = ?(ТекущийМесяц - 4 < 1, ТекущийГод-1, ТекущийГод); + Сч = 6; + + СписокПериодов.Добавить(Дата(?(СчМесяц <> 1, СчГод, СчГод-1), ?(СчМесяц > 1, СчМесяц-1, 12), 1), Формат(Дата(?(СчМесяц <> 1, СчГод, СчГод-1), ?(СчМесяц > 1, СчМесяц-1, 12), 1), "ДФ='MMMM yyyy'") + "..."); + Пока Сч >0 Цикл + СуффиксПериода = " " + Нрег(Формат(Дата(СчГод, СчМесяц, 1), "ДФ='MMMM yyyy'")); + СписокПериодов.Добавить(Дата(СчГод, СчМесяц, 1), НСтр("ru = 'I дек.'") + СуффиксПериода); + СписокПериодов.Добавить(Дата(СчГод, СчМесяц, 11), НСтр("ru = 'II дек.'") + СуффиксПериода); + СписокПериодов.Добавить(Дата(СчГод, СчМесяц, 21), НСтр("ru = 'III дек.'") + СуффиксПериода); + СчМесяц = СчМесяц + 1; + Если СчМесяц > 12 Тогда + СчГод = СчГод + 1; + СчМесяц = 1; + КонецЕсли; + Сч = Сч - 1; + КонецЦикла; + СписокПериодов.Добавить(Дата(СчГод, СчМесяц, 1), Формат(Дата(СчГод, СчМесяц, 1), "ДФ='MMMM yyyy'") + "..."); + + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя") Тогда + НачалоНедели = НачалоНедели(ЗначениеНачалоПериода)-21*86400; + СписокПериодов.Добавить(НачалоНедели-7*86400, НСтр("ru = 'Пред. недели ...'")); + + ШаблонПериода = НСтр("ru = '%1 - %2 (%3 неделя года)'"); + + Для Сч = 0 по 6 Цикл + НачНедели = НачалоНедели + 7*Сч*86400; + КонНедели = КонецНедели(НачНедели); + ПредставлениеПериода = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонПериода, + Формат(НачНедели, "ДФ=dd.MM"), + Формат(КонНедели, "ДФ=dd.MM"), + НеделяГода(КонНедели) + ); + СписокПериодов.Добавить(НачНедели, ПредставлениеПериода); + КонецЦикла; + + СписокПериодов.Добавить(НачалоНедели + 7*7*86400, НСтр("ru = 'След. недели ...'")); + + ИначеЕсли ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День") Тогда + КонецНедели = КонецНедели(ЗначениеНачалоПериода); + ДатаДняНедели = НачалоНедели(ЗначениеНачалоПериода); + + СписокПериодов.Добавить(ДатаДняНедели - 86400, НСтр("ru = 'Предыдущая неделя'")); + + Пока ДатаДняНедели < КонецНедели Цикл + СписокПериодов.Добавить(ДатаДняНедели, Формат(ДатаДняНедели, "ДФ='dd MMMM yyyy (ddd)'")); + ДатаДняНедели = ДатаДняНедели + 86400; + КонецЦикла; + + СписокПериодов.Добавить(КонецНедели + 1, НСтр("ru = 'Следующая неделя'")); + + КонецЕсли; + + Возврат СписокПериодов; +КонецФункции + +// Возвращает вид периода. +// +Функция ПолучитьВидПериода(НачалоПериода, КонецПериода, ДоступныеПериоды = Неопределено) Экспорт + + ВидПериода = Неопределено; + Если НачалоПериода = НачалоДня(НачалоПериода) + И КонецПериода = КонецДня(КонецПериода) Тогда + + РазностьДней = (КонецПериода - НачалоПериода + 1) / (60*60*24); + Если РазностьДней = 1 Тогда + + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День"); + + ИначеЕсли РазностьДней = 7 Тогда + + Если НачалоПериода = НачалоНедели(НачалоПериода) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 11 Тогда + + Если (День(НачалоПериода) = 1 И День(КонецПериода) = 10) + ИЛИ (День(НачалоПериода) = 11 И День(КонецПериода) = 20) + ИЛИ (День(НачалоПериода) = 21 И КонецПериода = КонецМесяца(НачалоПериода)) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 31 Тогда + + Если НачалоПериода = НачалоМесяца(НачалоПериода) И КонецПериода = КонецМесяца(НачалоПериода) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 92 Тогда + + Если НачалоПериода = НачалоКвартала(НачалоПериода) И КонецПериода = КонецКвартала(НачалоПериода) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 190 Тогда + + Если Месяц(НачалоПериода) + 5 = Месяц(КонецПериода) + И НачалоПериода = НачалоМесяца(НачалоПериода) + И КонецПериода = КонецМесяца(КонецПериода) + И (НачалоПериода = НачалоГода(НачалоПериода) ИЛИ КонецПериода = КонецГода(НачалоПериода)) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие"); + КонецЕсли; + + ИначеЕсли РазностьДней <= 366 Тогда + + Если НачалоПериода = НачалоГода(НачалоПериода) И КонецПериода = КонецГода(НачалоПериода) Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год"); + КонецЕсли; + + КонецЕсли; + КонецЕсли; + + Если ВидПериода = Неопределено Тогда + ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод"); + КонецЕсли; + + Если ДоступныеПериоды <> Неопределено И ДоступныеПериоды.НайтиПоЗначению(ВидПериода) = Неопределено Тогда + ВидПериода = ДоступныеПериоды[0].Значение; + КонецЕсли; + + Возврат ВидПериода; + +КонецФункции + +// Возвращает доступные периоды в порядке возврастания периодичности. +// +Функция ПолучитьСписокДоступныхПериодов() Экспорт + + СписокДоступныхПериодов = Новый Массив; + СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.День")); + СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Неделя")); + СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Декада")); + СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Месяц")); + СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Квартал")); + СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Полугодие")); + СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год")); + СписокДоступныхПериодов.Добавить(ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод")); + + Возврат СписокДоступныхПериодов; + +КонецФункции + +// Возвращает представление периода, используя его вид и указанное значение. +// +Функция ПолучитьПредставлениеПериода(ВидПериода, НачалоПериода, КонецПериода) Экспорт + + Если ВидПериода = ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.ПроизвольныйПериод") Тогда + Возврат Формат(НачалоПериода, "ДФ='dd MMMM yyyy'") + " - " + Формат(КонецПериода, "ДФ='dd MMMM yyyy'"); + + Иначе + Список = ПолучитьСписокПериодов(НачалоПериода, ВидПериода); + ЭлементСписка = Список.НайтиПоЗначению(НачалоПериода); + Если ЭлементСписка <> Неопределено Тогда + Возврат ЭлементСписка.Представление; + Иначе + Возврат ""; + КонецЕсли; + + КонецЕсли; + + Возврат ""; +КонецФункции + +// Находит пользовательскую настройку по ее идентификатору. +// +// Параметры: +// ПользовательскиеНастройкиКД (ПользовательскиеНастройкиКомпоновкиДанных) +// Идентификатор (Строка) +// +Функция АктуализироватьТабличныйДокумент(ЭтаФорма, ИмяЭлемента) Экспорт + + ОтображениеСостояния = ЭтаФорма.Элементы[ИмяЭлемента].ОтображениеСостояния; + + Если ОтображениеСостояния.Видимость = Истина + И ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.Неактуальность Тогда + + #Если Клиент Тогда + ТекстВопроса = НСтр("ru = 'Отчет не сформирован. Сформировать?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); + Если Ответ <> КодВозвратаДиалога.Да Тогда + Возврат Ложь; + КонецЕсли; + #КонецЕсли + + ЭтаФорма.СкомпоноватьРезультат(); + КонецЕсли; + + Возврат Истина; +КонецФункции diff --git a/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/ФункцииОтчетовКлиентСервер.mdo b/SSL/src/CommonModules/ФункцииОтчетовКлиентСервер/ФункцииОтчетовКлиентСервер.mdo new file mode 100644 index 000000000..a648797c7 --- /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 4dd243ec2..e54af448f 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяПочта/Module.bsl @@ -78,7 +78,8 @@ Функция ЗагрузитьПочтовыеСообщения(знач УчетнаяЗапись, знач ПараметрыЗагрузки = Неопределено) Экспорт - Если НЕ УчетнаяЗапись.ИспользоватьДляПолучения Тогда + ИспользоватьДляПолучения = ОбщегоНазначения.ПолучитьЗначениеРеквизита(УчетнаяЗапись, "ИспользоватьДляПолучения"); + Если НЕ ИспользоватьДляПолучения Тогда ВызватьИсключение НСтр("ru = 'Учетная запись не предназначена для получения сообщений.'"); КонецЕсли; @@ -236,10 +237,10 @@ // Адрес - строка - почтовый адрес (должно быть обязательно заполнено) // Представление - строка - имя адресата // -// Тема* - строка - тема почтового сообщения +// Тема* - Строка - тема почтового сообщения // Тело* - тело почтового сообщения (простой текст в кодировке win-1251) -// Важность - ажностьИнтернетПочтовогоСообщения -// Вложения - соответствие +// Важность - ВажностьИнтернетПочтовогоСообщения +// Вложения - Соответствие // ключ - наименованиеВложения - строка - наименование вложения // значение - ДвоичныеДанные,Структура - либо двоичные данные вложения, либо структура, // содержащая cледующие свойства: @@ -247,8 +248,8 @@ // "Идентификатор" - Строка - идентификатор вложения, используется для хранения картинок, отображаемых в теле письма // // дополнительные ключи структуры, которые могут использоваться: -// АдресОтвета - соответствие - см. такие же поля как и кому -// Пароль - строка - пароль для доступа учетной записи +// АдресОтвета - Соответствие - см. такие же поля как и кому +// Пароль - Строка - пароль для доступа учетной записи // ИдентификаторыОснований - строка - идентификаторы оснований данного письма // ОбрабатыватьТексты - Булево - необходимость обрабатывать тексты письма при отправке // УведомитьОДоставке - Булево - необходимость запроса уведомления о доставке @@ -326,10 +327,14 @@ КонецЦикла; КонецЕсли; + + // получение реквизитов отправителя + РеквизитыОтправителя = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(УчетнаяЗапись, "ИмяПользователя,АдресЭлектроннойПочты"); + // добавляем к письму имя отправителя - Письмо.ИмяОтправителя = УчетнаяЗапись.ИмяПользователя; - Письмо.Отправитель.ОтображаемоеИмя = УчетнаяЗапись.ИмяПользователя; - Письмо.Отправитель.Адрес = УчетнаяЗапись.АдресЭлектроннойПочты; + Письмо.ИмяОтправителя = РеквизитыОтправителя.ИмяПользователя; + Письмо.Отправитель.ОтображаемоеИмя = РеквизитыОтправителя.ИмяПользователя; + Письмо.Отправитель.Адрес = РеквизитыОтправителя.АдресЭлектроннойПочты; // добавляем вложения к письму Если Вложения <> Неопределено Тогда @@ -395,12 +400,12 @@ Если ПараметрыПисьма.Свойство("УведомитьОДоставке") Тогда Письмо.УведомитьОДоставке = ПараметрыПисьма.УведомитьОДоставке; - Письмо.АдресаУведомленияОДоставке.Добавить(УчетнаяЗапись.АдресЭлектроннойПочты); + Письмо.АдресаУведомленияОДоставке.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты); КонецЕсли; Если ПараметрыПисьма.Свойство("УведомитьОПрочтении") Тогда Письмо.УведомитьОПрочтении = ПараметрыПисьма.УведомитьОПрочтении; - Письмо.АдресаУведомленияОПрочтении.Добавить(УчетнаяЗапись.АдресЭлектроннойПочты); + Письмо.АдресаУведомленияОПрочтении.Добавить(РеквизитыОтправителя.АдресЭлектроннойПочты); КонецЕсли; Если ТипЗнч(Соединение) <> Тип("ИнтернетПочта") Тогда @@ -508,11 +513,11 @@ НаборПисем = Соединение.ПолучитьЗаголовки(); Иначе - - Если УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере Тогда + НастройкиТранспорта = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(УчетнаяЗапись, "ОставлятьКопииСообщенийНаСервере,ПериодХраненияСообщенийНаСервере"); + Если НастройкиТранспорта.ОставлятьКопииСообщенийНаСервере Тогда Если ЗаголовкиИдентификаторы.Количество() =0 - И УчетнаяЗапись.ПериодХраненияСообщенийНаСервере > 0 Тогда + И НастройкиТранспорта.ПериодХраненияСообщенийНаСервере > 0 Тогда Заголовки = Соединение.ПолучитьЗаголовки(); @@ -521,7 +526,7 @@ Для Каждого ЭлементЗаголовок Из Заголовки Цикл ТекущаяДата = ТекущаяДатаСеанса(); РазницаДат = (ТекущаяДата - ЭлементЗаголовок.ДатаОтправления) / (3600*24); - Если РазницаДат >= УчетнаяЗапись.ПериодХраненияСообщенийНаСервере Тогда + Если РазницаДат >= НастройкиТранспорта.ПериодХраненияСообщенийНаСервере Тогда НаборСообщенийДляУдаления.Добавить(ЭлементЗаголовок); КонецЕсли; КонецЦикла; @@ -599,44 +604,57 @@ знач ФормироватьSMTPПрофиль = Истина, знач ФормироватьPOP3Профиль = Истина) Экспорт + НастройкиСоединения = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + УчетнаяЗапись, + "Пользователь, + |Пароль, + |ВремяОжидания, + |СерверИсходящейПочтыSMTP, + |ПортSMTP, + |SMTPАутентификация, + |СпособSMTPАутентификации, + |ПользовательSMTP, + |ПарольSMTP, + |СерверВходящейПочтыPOP3, + |ПортPOP3, + |СпособPOP3Аутентификации"); + Профиль = Новый ИнтернетПочтовыйПрофиль; - - Профиль.Пользователь = УчетнаяЗапись.Пользователь; - - Профиль.ВремяОжидания = УчетнаяЗапись.ВремяОжидания; + Профиль.Пользователь = НастройкиСоединения.Пользователь; + Профиль.ВремяОжидания = НастройкиСоединения.ВремяОжидания; Если ЗначениеЗаполнено(Пароль) Тогда Профиль.Пароль = Пароль; Иначе - Профиль.Пароль = УчетнаяЗапись.Пароль; + Профиль.Пароль = НастройкиСоединения.Пароль; КонецЕсли; Если ФормироватьSMTPПрофиль Тогда - Профиль.АдресСервераSMTP = УчетнаяЗапись.СерверИсходящейПочтыSMTP; - Профиль.ПортSMTP = УчетнаяЗапись.ПортSMTP; + Профиль.АдресСервераSMTP = НастройкиСоединения.СерверИсходящейПочтыSMTP; + Профиль.ПортSMTP = НастройкиСоединения.ПортSMTP; - Если УчетнаяЗапись.SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.АналогичноPOP3 Тогда + Если НастройкиСоединения.SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.АналогичноPOP3 Тогда Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию; - Профиль.ПользовательSMTP = УчетнаяЗапись.Пользователь; + Профиль.ПользовательSMTP = НастройкиСоединения.Пользователь; Профиль.ПарольSMTP = Профиль.Пароль; - ИначеЕсли УчетнаяЗапись.SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.ЗадаетсяПараметрами Тогда + ИначеЕсли НастройкиСоединения.SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.ЗадаетсяПараметрами Тогда - Если УчетнаяЗапись.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.CramMD5 Тогда + Если НастройкиСоединения.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.CramMD5 Тогда Профиль.АутентификацияSMTP = СпособSMTPАутентификации.CramMD5; - ИначеЕсли УчетнаяЗапись.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.Login Тогда + ИначеЕсли НастройкиСоединения.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.Login Тогда Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login; - ИначеЕсли УчетнаяЗапись.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.Plain Тогда + ИначеЕсли НастройкиСоединения.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.Plain Тогда Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Plain; - ИначеЕсли УчетнаяЗапись.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.БезАутентификации Тогда + ИначеЕсли НастройкиСоединения.СпособSMTPАутентификации = Перечисления.СпособыSMTPАутентификации.БезАутентификации Тогда Профиль.АутентификацияSMTP = СпособSMTPАутентификации.БезАутентификации; Иначе Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию; КонецЕсли; - Профиль.ПользовательSMTP = УчетнаяЗапись.ПользовательSMTP; - Профиль.ПарольSMTP = УчетнаяЗапись.ПарольSMTP; + Профиль.ПользовательSMTP = НастройкиСоединения.ПользовательSMTP; + Профиль.ПарольSMTP = НастройкиСоединения.ПарольSMTP; - ИначеЕсли УчетнаяЗапись.SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.POP3ПередSMTP Тогда + ИначеЕсли НастройкиСоединения.SMTPАутентификация = Перечисления.ВариантыSMTPАутентификации.POP3ПередSMTP Тогда Профиль.АутентификацияSMTP = СпособSMTPАутентификации.БезАутентификации; Профиль.POP3ПередSMTP = Истина; Иначе @@ -645,12 +663,12 @@ КонецЕсли; Если ФормироватьPOP3Профиль Тогда - Профиль.АдресСервераPOP3 = УчетнаяЗапись.СерверВходящейПочтыPOP3; - Профиль.ПортPOP3 = УчетнаяЗапись.ПортPOP3; + Профиль.АдресСервераPOP3 = НастройкиСоединения.СерверВходящейПочтыPOP3; + Профиль.ПортPOP3 = НастройкиСоединения.ПортPOP3; - Если УчетнаяЗапись.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.APOP Тогда + Если НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.APOP Тогда Профиль.АутентификацияPOP3 = СпособPOP3Аутентификации.APOP; - ИначеЕсли УчетнаяЗапись.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.CramMD5 Тогда + ИначеЕсли НастройкиСоединения.СпособPOP3Аутентификации = Перечисления.СпособыPOP3Аутентификации.CramMD5 Тогда Профиль.АутентификацияPOP3 = СпособPOP3Аутентификации.CramMD5; Иначе Профиль.АутентификацияPOP3 = СпособPOP3Аутентификации.Обычная; @@ -877,7 +895,7 @@ // Функция ПарольЗадан(УчетнаяЗапись) Экспорт - Возврат ЗначениеЗаполнено(УчетнаяЗапись.Пароль); + Возврат ЗначениеЗаполнено(ОбщегоНазначения.ПолучитьЗначениеРеквизита(УчетнаяЗапись, "Пароль")); КонецФункции @@ -885,10 +903,12 @@ // Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт + НастройкиУчетнойЗаписи = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(УчетнаяЗапись, "ИспользоватьДляОтправки,ИспользоватьДляПолучения"); + СообщениеОбОшибке = ""; ДополнительноеСообщение = ""; - Если УчетнаяЗапись.ИспользоватьДляОтправки Тогда + Если НастройкиУчетнойЗаписи.ИспользоватьДляОтправки Тогда Попытка ПроверитьВозможностьОтправкиТестовогоСообщения(УчетнаяЗапись, ПарольПараметр); Исключение @@ -896,12 +916,12 @@ НСтр("ru = 'Ошибка при отправке сообщения: %1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); КонецПопытки; - Если Не УчетнаяЗапись.ИспользоватьДляПолучения Тогда + Если Не НастройкиУчетнойЗаписи.ИспользоватьДляПолучения Тогда ДополнительноеСообщение = Символы.ПС + НСтр("ru = '(Выполнена проверка отправки электронных сообщений.)'"); КонецЕсли; КонецЕсли; - Если УчетнаяЗапись.ИспользоватьДляПолучения Тогда + Если НастройкиУчетнойЗаписи.ИспользоватьДляПолучения Тогда Попытка ПроверитьВходНаСерверВходящейЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр); Исключение @@ -914,7 +934,7 @@ НСтр("ru = 'Ошибка доступа к серверу входящих сообщений: %1'"), КраткоеПредставлениеОшибки(ИнформацияОбОшибке()) ); КонецПопытки; - Если Не УчетнаяЗапись.ИспользоватьДляОтправки Тогда + Если Не НастройкиУчетнойЗаписи.ИспользоватьДляОтправки Тогда ДополнительноеСообщение = Символы.ПС + НСтр("ru = '(Выполнена проверка получения электронных сообщений.)'"); КонецЕсли; КонецЕсли; @@ -941,7 +961,7 @@ ПараметрыПисьма.Вставить("Тема", НСтр("ru = 'Тестовое сообщение 1С:Предприятие'")); ПараметрыПисьма.Вставить("Тело", НСтр("ru = 'Это сообщение отправлено подсистемой электронной почты 1С:Предприятие'")); - ПараметрыПисьма.Вставить("Кому", УчетнаяЗапись.АдресЭлектроннойПочты); + ПараметрыПисьма.Вставить("Кому", ОбщегоНазначения.ПолучитьЗначениеРеквизита(УчетнаяЗапись, "АдресЭлектроннойПочты")); Если Пароль <> Неопределено Тогда ПараметрыПисьма.Вставить("Пароль", Пароль); КонецЕсли; diff --git a/SSL/src/CommonModules/ЭлектроннаяПочта/ЭлектроннаяПочта.mdo b/SSL/src/CommonModules/ЭлектроннаяПочта/ЭлектроннаяПочта.mdo index fee98a4c9..ea066ffa8 100644 --- a/SSL/src/CommonModules/ЭлектроннаяПочта/ЭлектроннаяПочта.mdo +++ b/SSL/src/CommonModules/ЭлектроннаяПочта/ЭлектроннаяПочта.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/Module.bsl b/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/Module.bsl new file mode 100644 index 000000000..e9b43aabb --- /dev/null +++ b/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/Module.bsl @@ -0,0 +1,27 @@ +//////////////////////////////////////////////////////////////////////////////// +// Подсистема "Работа с почтовыми сообщениями". +// +//////////////////////////////////////////////////////////////////////////////// + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Возвращает указан ли в учетной записи пароль или нет +// +// см. описание функции ЭлектроннаяПочта.ПарольЗадан. +// +Функция ПарольЗадан(УчетнаяЗапись) Экспорт + + Возврат ЭлектроннаяПочта.ПарольЗадан(УчетнаяЗапись); + +КонецФункции + +// Проверка учетной записи электронной почты. +// +// см. описание процедуры ЭлектроннаяПочта.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты. +// +Процедура ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение) Экспорт + + ЭлектроннаяПочта.ПроверитьВозможностьОтправкиИПолученияЭлектроннойПочты(УчетнаяЗапись, ПарольПараметр, СообщениеОбОшибке, ДополнительноеСообщение); + +КонецПроцедуры diff --git a/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/ЭлектроннаяПочтаВызовСервера.mdo b/SSL/src/CommonModules/ЭлектроннаяПочтаВызовСервера/ЭлектроннаяПочтаВызовСервера.mdo new file mode 100644 index 000000000..11b923dbb --- /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 c07b0e5a3..76ca9b470 100644 --- a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl +++ b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ОСНОВНЫЕ МЕТОДЫ +// ПРОГРАММНЫЙ ИНТЕРФЕЙС // Удаляет записи из табличной части ЭЦП // @@ -54,7 +54,27 @@ КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ВСПОМОГАТЕЛЬНЫЕ МЕТОДЫ +// СЛУЖЕБНЫЙ ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Заполняет структуру параметров, необходимых для работы клиентского кода +// конфигурации. +// +// Параметры: +// Параметры - Структура - структура параметров. +// +Процедура ДобавитьПараметрыРаботыКлиента(Параметры) Экспорт + + Если Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + Возврат; + КонецЕсли; + + Параметры.Вставить("ПерсональныеНастройкиРаботыСЭЦП", + Новый ФиксированнаяСтруктура(ПолучитьПерсональныеНастройкиРаботыСЭЦПСервер())); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Заносит информацию о подписи объекта // @@ -274,7 +294,6 @@ КонецПроцедуры - // Получает все подписи файла // // Параметры diff --git a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/ЭлектроннаяЦифроваяПодпись.mdo b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/ЭлектроннаяЦифроваяПодпись.mdo index 163e0ab3e..5a25c57e5 100644 --- a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/ЭлектроннаяЦифроваяПодпись.mdo +++ b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодпись/ЭлектроннаяЦифроваяПодпись.mdo @@ -8,5 +8,4 @@ true true true - true diff --git a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьПовтИсп/ЭлектроннаяЦифроваяПодписьПовтИсп.mdo b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьПовтИсп/ЭлектроннаяЦифроваяПодписьПовтИсп.mdo index f2b08a125..a8e6a9538 100644 --- a/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьПовтИсп/ЭлектроннаяЦифроваяПодписьПовтИсп.mdo +++ b/SSL/src/CommonModules/ЭлектроннаяЦифроваяПодписьПовтИсп/ЭлектроннаяЦифроваяПодписьПовтИсп.mdo @@ -8,6 +8,5 @@ true true true - true DuringSession diff --git a/SSL/src/CommonPictures/БыстрыеНастройкиОтчета/Picture.png b/SSL/src/CommonPictures/БыстрыеНастройкиОтчета/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..53290c4c894d7e4a892e87afae92fc9f37803677 GIT binary patch literal 542 zcmV+(0^$9MP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf5dZ)S5dnW>Uy%R+02*{fSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@H7+qQF!XYv0004vNklKj%19y!D(ymINo4dO5f)Tb4_$~d3rjaO@2;0!b=R*mXSbyzy@(4R!_4gYX68F{ zYyfP-V5q}Xm=kP=Z$a?yU1M$c3ck$?EUm{d=R3u;HwyRsF^KOI=W|-2i@877_6a#XLSq7Q>KbGfP zXtS{d0{6l(o)b9~OASE-@{8quH2G)(0p0QAOBT7jENGC+*RZ^@is;EXc7kEtJ;d>z z%%G(hT3Odf3v&M?A)ToR8j$}VNDqO4wyVI}mFp^l@{jG08Dd) + + БыстрыеНастройкиОтчета + + ru + Быстрые настройки отчета + + diff --git a/SSL/src/CommonPictures/БыстрыйДоступ/Picture.png b/SSL/src/CommonPictures/БыстрыйДоступ/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..d6bee18680b03676fdd93fef929c3b5718a22b6c GIT binary patch literal 1181 zcmbVMPiWg#7?%^~b{T=-c3t`>^i_eJV(C5EvMViKVp~dUnA6}G;!~+CJttZ$Jym+C zos_b8?BHe$w!;{uJ@nj`mK-`d%IFR*Ec6d6y_8-C8|=7s?6ATL*;5jyJ%k=6klw%V z_xpX{_r6aTr>9Qz_Z{lvIIh2NQY*1>Abj^m+4tz*8wMK=QoTZFNR2iOA9GoYR52(x z#vCqT!&*AKj>kBzw`P|sv{L+7HHjk_p^eaVJcj1DvGJy7mr0;zsakzdAKd|VAF&y zWcV$oD#dA#Cq4$U0OKZ1A&^Q6C<&FMG72P!pok<9rsD{za$1E5Y(G3x^R1d%(k8dH z*eb)%Q|hUr*l09_MnWL|oQM=f5uqeXQk+@DgC&<5&A1y3cNsJsn7-{%o46okG^%8g zW_af5RtSz)Ebb7y!FHlp%EYGOiAaE=aNuvo$YS@cbIAGP5w znC0&6LZKn^Mm^=*>{5)nM$APAyR@KXcy=OKwxvq4l!B?8c08BXbcE1x2-7(UNl=%N zmPls19J^sbN*JirgSoy73HSc4C z62DAHy;}j(^MsOMo_HWXBMS)3+O9(n%ys z%!6Iy-oje{CubsaMhuJNjbiC;u?h^QJEhMSJI#Y#)-gV7jWg?m2UuG@Drnhq^Lh2v z?e#BOu^+XG)9v_>n`|Re@VOHgGHQ z>-~v(Pv_g#v&)0MfAp@sKk!R7cK6-R??1Ip)Jr3K2RAl0PJJEWB2n)0u=LmAkqiHZ OKa7GtrQOV(`RqUM3wg=_ literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/БыстрыйДоступ/БыстрыйДоступ.mdo b/SSL/src/CommonPictures/БыстрыйДоступ/БыстрыйДоступ.mdo new file mode 100644 index 000000000..d51dd2760 --- /dev/null +++ b/SSL/src/CommonPictures/БыстрыйДоступ/БыстрыйДоступ.mdo @@ -0,0 +1,8 @@ + + + БыстрыйДоступ + + ru + Быстрый доступ + + diff --git a/SSL/src/CommonPictures/БыстрыйДоступДобавить/Picture.png b/SSL/src/CommonPictures/БыстрыйДоступДобавить/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..9eacc4ef0d1df102da1bd67905a3365d59b41cda GIT binary patch literal 1351 zcmbVMZA{!`950>@vK<2xlZ|Z&&x&8nM%$;{TN`f2^?J8mvI7FR5kuVd+5!#SwYG&j z(8${$n>sZ{&9a%e5A)@NQ88O$Wae-zQwX5JnZ=hyxoP~cC`={X=8f|?;Ls0bA8gV- zZ@=IF_kVkOvcC3U@zz~iF$^mX9^xC&Seko_wxDnMpIHG7Wv0K`Y*bs#xS-3JS5hM~ z2u6iAxj`1Bo~I_|Y7DcqDoxF1bLcQDs!>A7VTeRjLu?GI_9Qex?2t_mk=vA*8($bp z;y{ty_)&X^3TZyMT{+aN%ZiH#S8ZO+A`S zHpqtBrHiN@trdAP%H92iazNw_Tc<0iC_*Q%id|7TW(IjTj!p83_H5;arfTT$GoydpSrs^W0#}Fol>X z=XDjNyUw-Wm&^KeSuj<-NmV=Z9Z=t{nyS&RYQWcMCm=Yg#3VItrW>t~78{pGj-eZ) zqpOj*aC`*A3gSWD+m!e&lDRnfd_mz?gLBul$HGfDrpB-I@8-Sm$(k?vHNE)52P1xP zq##nITWh*|U3)Dx&v~%heUH8|bpGw4(C?Oy9s-uv3q~EK_q;iu?VHVdJSJ?h4(-b< z-rhEGn@o-qZQ)i?O8@nf)ACMH)#+^NTAg*r4~40g zpZha+=F3a7!~4>iv~y?nZsw(d;i0mL{v+m>YH{CmkvKN}>fMsLkBMbaackjMYijU4 z>;7|lhD-JwxNvs<@>{#Db1BZ6UEwa_SC?KJxbts(mGS}&6A(csESFwUE*r|iZAAdMI+?o5e1^u=B`&@YNA9=UoIRF3v literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/БыстрыйДоступДобавить/БыстрыйДоступДобавить.mdo b/SSL/src/CommonPictures/БыстрыйДоступДобавить/БыстрыйДоступДобавить.mdo new file mode 100644 index 000000000..1e3490fd3 --- /dev/null +++ b/SSL/src/CommonPictures/БыстрыйДоступДобавить/БыстрыйДоступДобавить.mdo @@ -0,0 +1,8 @@ + + + БыстрыйДоступДобавить + + ru + Быстрый доступ добавить + + diff --git a/SSL/src/CommonPictures/БыстрыйДоступУдалить/Picture.png b/SSL/src/CommonPictures/БыстрыйДоступУдалить/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..a57774eece2641b984a6de2a4f9e286f6a1c1ce5 GIT binary patch literal 1209 zcmbVMU1%It6rN>Mx7Ng_6m`{yUZ+AWxHEHScXoEhteM@N*>=TE!e+6-2g&^0Y=&g! zPVP*yo8V7uUs?-3hzLTIJ{0Lg5nJ#@p^CQ979~Lu!P1xdQ0hZf#GePrdMC+7A3`4- zn7M!7cfNDZJ!ejhjT{-+^VlASVFqeP^#&aW<9GLc^n2j9u1SYSBV!^O$5T<;B#0?F z*g~M@nJv^nrn5MA4Gl3&a>{K^L=*MrRU3Pp8DqGP7f?3C3=MYz)1E;Quu#kOi|o&z ze#QdVDYD0;x=;@)XxcrxM9}!sNYh@Lu@#3MeijUMRBFIOkqJ89tRJeKBD-N%rSo{3 zXTb&}nkllIPEFLuKm`*7Bu>cKLLP#Aj)OTt$th0*QGfyuMP86IP*5dV6(HDpSgJ;x zDYcR^vdb9Zl{7)ZTQM~O=>#hlf#J?|kus_8|Ro^X!qsG=n1g?w2rlx5w35EcYM zE{jkU3=!(tT&ZVcC$20NaTK6G!8&zT;d=&=K2n9hw=4nMyn&@E+D5$um?8stGYYr zi(*yERi&z-P!D#Ddz0(@pPcd389pwK{}fAai&kJf-7bB)*lr%=(~cpuHO_xoPt&%# zQ`1Y$&JWh#A74A2NUa_J=KJ9A + + БыстрыйДоступУдалить + + ru + Быстрый доступ удалить + + diff --git a/SSL/src/CommonPictures/ЗакрепитьВариантОтчета/Picture.png b/SSL/src/CommonPictures/ЗакрепитьВариантОтчета/Picture.png deleted file mode 100644 index 74779abb01dc1c70acb931c745cae615bb0d3bf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 635 zcmV->0)+jEP){qU7a*l^@f*%|&Xf0jzwbLjN=Z4Zf-+ax0gkm^92nE&<3I|hA~@By zflG&cV%-$cJ>MZ#tzaOm(a}^%_dzc$H4erS25+a9 zNTstRr{{1MB>t9Kg1ud0O@p>kDd3bV#mAf73O5h?aI28j?XIaPfbDy*_q15^Bp=`I z=36vHG-DCV=F!XoXWM-=Zmp-Pp%zzep|n+TVy9PlES-CUKX@^rGx&SC2&!>cVF(pV zH%ea>eJA~#dGv;u9b)sYHWGTCsYDhd7NvcYqcnh)PRo3HmJ4+;Mlw!@pG~nMT$qbF zI|G9|SB{njh|k6ehr-;yb*&iW>(Apd@O_eaa-Ji5cGK0lU#tco{(m_C9Pmeg0RW#I V002ovPDHLkV1ft<7DWI6 diff --git a/SSL/src/CommonPictures/ЗакрепитьВариантОтчета/ЗакрепитьВариантОтчета.mdo b/SSL/src/CommonPictures/ЗакрепитьВариантОтчета/ЗакрепитьВариантОтчета.mdo deleted file mode 100644 index 47bed237f..000000000 --- a/SSL/src/CommonPictures/ЗакрепитьВариантОтчета/ЗакрепитьВариантОтчета.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ЗакрепитьВариантОтчета - - ru - Закрепить вариант отчета - - diff --git a/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.bmp b/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.bmp deleted file mode 100644 index 5e62e83cb7fb517fa5dde1bcaa0e853ba3ddfe16..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 515256 zcmeF42Y3`omgnp4yZdf;XK(kWcW0*Q?&(G#KnQ`b!U`{}Fp}`zgRsJT0TQ0Zd+)vX zUU(2rLf#9HyqBsn!xZlPS+3r{SV!@qFLvM{onjSr~Ichpm@RGYqA9kJc*2siBC*UP0P*8mt~nT z#*N1J+W#~QXco{c@Bs^G{I;3LS5Q=JY{K)DwDi3Ee3=l&fp3l9ANae~nl%e(7I^<& z`ELum+0-6PE$^sg{HGbRFAEY)I%>tSQKHCBszcqe;_8*JZ zQL}(%0h_Xb#_zw0-_My*(fdRO858M;g}v(z>-j$LY_rBqwg5{<<+Gjj9Lh|(f-u+)oHQZsW^q1{rquDnUj zuxwh_(TGiptT(OemJX;Syh*X%w60rrsTGtTS486Lk{#4Wl$HwmSbADl)IJ|6gQK4p z+pD&eT3Q-W`H%v`;vjXeTCr@R(NeeULZwvQ4vMt2t99#A-GvtGMoZmNK{x9@YQ5y% zV(pgAVin8TinV|KX27E`OXpJSYNK_j_P2Dl-esv;#Ss=Ou^1s5ZBRv` z423c^N>u5?;$(41ypVvsdQS0k)Z~|coZtVnzXn|sgR%>rWaU4~$a|Qc`yegHqWh^isw^$21g7Vr z=i|&g92J~X5R#(@_yx}MB|H$|o#PkryFnViZQ+j4#-Lf?>#@M^jNdA@Q6^GEFicK% z9O1DFvk~!#5VV#7*U()3vs`^}E>NBSBr{Jzwczyq)a-jHId@aCZY5>jc$X3ICjC0} zI_;WJdNH9Ld(r2{+svCunRk-2@1_d%P&(dCMKUtNIDz;?hF+7_Dmc~wSv0UX8b$!IhXM6 z!t>-yFH&$U&VW1B_LWzuS6-%EdY%kgpHD~v zhR-G>pLv;f=2iOXcR44al>C#a1wyD~NGG%D$t)tubc3lKyWVD>e4BOpW%}vosX+U= z_;)xJP6(XCYsU}WNzM{6mWXJL-(Sz2qm5Lvz^`wC-yFZKnXRUdh!j61LV`q*C<9z= z854?_YkZQK4{9PLayKPg1Vi3tBKmRVWg4)0UiGaL-knZNKK&~F)Z46+$$2N!^a9K| ztcY^?$xq7q5S#($Ny<6-BJH%|yI)95y7V#?{(WFrq{i=G|Blc`pjqJSvA}PI-$k&k zBwH(KdJKVWWO|4oNxqCoGhA)qXCpQOW+#iNh+y`M)JxA(5Z{1reL6nr)bmu~F~gsR zC!J^fG@d`n?+3m|+{ZNhHU(b!Bja0LM4Ormo=XYUj+l+0InT;Tc zL?iS>^|qg87d*E+e8v10uf3@6rQ=-~HC)^lkCqk-iy@oPrjl%M;oeUfnVPOUnjpU zJ~xs{lyq$xgBKt5a(Dsq{*)j|24dTJs<(~wJ&`W*Jn7tv)Uz*APQ6M$k(75LQ#LXC z*TuFK*EN3s`nQ8N0?h(nl?A>keyeXx;*A^eiliVnu&u_nB}_@;-A5!V^Vz}LWUi?@w@5)mhn#p^bB;RQhwOiAK3b-V}@n3i`}Nz?|m;cX+S z1Ku`L_K>)DBDFw}wLryoDd{2#rv<7NDUb%av(X~TV>$F#HpGr*(o%(8qC*Z<4^c61 zIhz9YQhu~#lwITZuYWseBhW1HRawA>`K^Yx)x}8^hnr(!Qse;YsVSKx2M%}MgVY@4 zPa})^>dVxN2}$RXMuOyQ1h&)krwXxMm_}kv>*K<8ws0EcrqHo0A%W^Fax{w`$s|WI zwgt9drCoxzja+KXN50NHnTotW#J0^r5;HXwY^%W#Qy2tJvqD^Y zL_imiw&HY}bTCai0HqrCr|9=47wk#0D1T3qDoaZNI-uLZR0EDW1OfISI!=hw3aHbg z%9B9>x$?L$kILE$*ZBSG-wxUcGz)xH7O*LPoAXJ;dpAm`Bu?gVxYbwO@qT+yw*C>` zY){R(os<s+0dgaxtxhN^ezqFD1~?C-ONejmgL|D+u={P^&Nq46U+1c* z-uxnSV`BOSa5^r{1nKCMwb3bSqLNleyj>Okc4gS>6``+}e?Zu^BJ9n|@VBcY->r#G zUK5kDHYRmlTpCWeF)>piIvn(zU2pUDzRSk|4x||lrO8LkEXU(Toj1L!<$v4!?V=4( zvw%%mK&Ml)J5YY)(~Mtam-&Z;pKV%o+q{CSvObAe4NzSQ5XpdeV=^!!_kIf2{=+No zSd%3AeEi$fi79ZnPiDyCg+F(!#K0|A@4?5oxm{GN(so zPmjo+79q-FLgS2xtT|z6bHmdXge5HreY-s5m5@U8Rgp=nqf^8)AuerGLgv;NnF8c* zgj2pRx!^#G{!qH4PJCj%Q{%Ty-5J_oGz-|i1#~*ZE7TkhE53gEW4oUuddahyGD)ny zLS~tmG)K6_t2amn#PY3oQ**FjHdX+{$|Psw-ibw|upmh$5e~PB-0DOi7b$*9(ufF; zD7hlS+Xl7~%uYf8TSP@f^!h~>ykTH_U2NK#=oFB3WyCvBc6sQVg<&cF;i?}IkvTUkZE+ZIu6XAW z?^Z`AuZvCD7@x5@F%vPC9j|hBzsW;r1rHfSbuf61-?o3dXd~1tU{e;*=@4m-r;6}V zM)P+WF@31w_U|dhNvvosennlrRjdPOnw7*?$ngC!fo)|qK(VY8mTwhvlj)Zdl?A1c zQldKCD!G+tu?UhVI+}&FY%voF1RhM6_AB1Dh-V|1{VHec^DKD18{&nZy*es&RaElI zh_{G!EDd`*KO$vTMAnq(e1YmhPVBOI|i39hyXX=C1T zV?xII_;iG#S4Jf-ho2q#W=Y6fzwp!aMy&~e>&tY#Ch9<$! zo)lFuHijb5F)Eh-x*8qB#zz@^!_$^1?l{6YBB+v>jtI}quqbW)Z=1R~w83Z=uyG6M zbhpJv8S!Pu+=m(X%x*5?7~&)9AbPGKE|Nfi-d`xO8VL>$$|=CZ0Vfp8lHf}Tsp^*! zM0f;iN?jFSN=Utc@ODCySiu!>5`5Ue>}?~?tzcU%MYKe`!7dU2$zdg9dw;43ZzGKa zX&vi@G+XZ$yxVOvOruc2PMj1B;^o%JQA<9 z-+E`J^=o`NQmoy2QC)Q#-?ag=pQnfwT(Ro564kbp7IFjI${RQ8`;jtUh}@fO*z>Mn zr-+keAvF)!MzS6fNLEC?TN<7OY|jkK@`;p3{$rRuIu?O#j`E8<5Cp}eh;L~6;t)ac zfM*e!|7~Nphc+C|0yb>{o$eIUsg=(dzz@dv9T9uJh%b7nP**$APJHK$U!R*A86VFplSe62`h#iU>F6_S7^$OiY>*0L83i(&F&sxnb#(BJ#Z>`G`oPccgJ-B>&<9s#S6i z3ubM1N>#?>x%lRfj1Y}q>bJZj-;a%?7oUAB|HNoCQqBoul;MAzGE*I!dP1N){AaG@ z=IgPA5)EppZmK1ELTFb@RMdJ#ZXQ}tVpAOGNYGy7PQCceMrlnEcWhvG6H>nwD zDOO^$nAAR&ZpHRuGvQ5&r4jX#Qu|oii)~uki&Y{LU#l%@1*NsH%er0NwC+%9JvjO~ z+SO9+VBKP=TUSsoslc!}wGkCd-O_@J+Gr`&ZfbcuDAIb9AaF zLjHFi*?;Yt-SsRPbf1lm7LNWGp*S8v=bwG-`#T@ux2^dE+ITbzXcqYASU}~sIecM> zK%3r?QJ{Oe;Qii=_X}gVUljL`E=@6ff2IO{75^%#QIH9&+))MP-sPp%{b zBCA9s1BxIw-fxdeS{|OXAS`WqXwJAWX?Xa1?{Fi0;*tMgjfv*{Z!xz`hIYFoP<(8h zadZ?P7jN_q;XaARv9ZQpmr3(AhHmEw+6BM=?(t~+{)+A!ZK#?BY{3Hm6n>jm1BAED z1-6w%T-8tsmdeK5Bwizj!;P#GINW%>T!czuQr1MiU5W^IX!?|p{4pV9c*y$^Ap)QO zXpIczqa%608?@zmL+8V?x@q~*QQ@WmjE*q&4WK}H_j7b?%oiBg`QVSmPi*0jMH_== z0nGw7WdXr&CIZz~iPy#A9>2{07U#k8t;!0naJ9v!XT+k{BAEmwW+jWPELEUld)rIA zG?}?RK_mlW)xVVySV8KYZ%F3Ekb+Sm6y)~)r;uBPGzi`A25Yg-fM^NoBf~!M#0cf1 zB6zRMwApGy|C?-d)ZdG6jo&tPXJ~`bEMWT<(CG@J(Wc;rbtFV^y*R(4$Ra2jQe!Ei zzCVpxoNSyBZ%L~2k=CxZSP(E(c-y9w60w4-h;VPhyY6wq;a(l}ZbjJZg(1n)L$W74 z(|bSTBcA=;W@=}3bc1V zLfkg!M+BQTEuQ)>t!VtV{o6$wp=JS_vVcyfeCSc}kF%7Rbe3sOQGBvd`G)VQJhm^L zE{P=zqsYQ&r9>qX5)pCH7)kb~5askr&0U$@D?$Hc@ECE|5Se1!}_67iV?u^Qke zHBJ(px+e17s)#qs!r#md&6x5mZ(OkC9n41r8&Uq98WqGx2k~Lg_<&H}10fM)ZzKE? z%*O=rkwKyY=voWJ9r~EJ*(#e=4eDDL_dW+<7R2~&+M4!KT%o@LK>dw#x zqglZAEuhnh?=_~2Ps8B7bRqG97}LkT)Sw3fAbU~;r~MS7LlN?> zB=JE4F%5}R;iF+n4hbeB#b+b28sO`^ZHR4)FWO{oOvqf1S8s&3owPDsd=$a&S?biF zY@Z;*s31Dxsc}S*(Hn66TQwqxk9f*QKIOxLxknUhp1@q63pGn%O%hqd7p!q2YZcGB zB4s>?k9sP8NF1WzeE3s_fOm`4hGCC|Gp)9Nq73E;kas^zTCOv|amN$jL;XK_MH;_t z|8~(vs9C_KETGfjqc8w1mM}$F1LeLH_{!>ccugN&KbA#yCBey-{lf&U{lg`pFv%~> zFgMgNC&Vx}#IWtP0iPoiXHY(HBbbeMCGouk@#RPr+ZpS{!rNHHHEBh-SV`6YSqiW{ z?x|ta6Efln8~(%yjd;R;k%m9v#Uu`Y$~_~QYob84dlc^(#`}iy0U^9!2=5)ry&`$r zSV8ngFIa~dHXP)BDh>f(dtafhOZEM4C>T~6(f&!n;T{qwT<}f@Efy#GD=Y=;Nzw%tRtK0zVsX+-yj|XCswNlBi^S zTMSvRcV{WZtoxLCPK~H(hSk~}4^N8Ss z5IlLp(P+{m?)^xdf9MlF=n3}<=ZzCs<9OB$L6ygR$bHswt>kf72FS%vJoF9|L7%PujLY~dusf)^_xW-pJo9Yvw%*wIx=}}G``HMe4;ll4Y_;D zhZ{2xpH{!!xbt=Px`dqBK{?Z(H;HG>qg6^p`!8I#_kPmIGP1)-2yt@l91Q$Wg--DMxc6qZ0gSuX_FshPPmsj@qXrn`u=}>ly=k zhX#JGtWPyE$mnrEZo63;d`~=r3V+?=$16j{bHgOF?{2v?jo-F@vuNYfEMQ|6(CNlL zk|sXRoAM-k*3%5%pj5x$q(#r(s9GBKZduqntQ0l>Su$un=2rUH+v#J3(njA(9eFd= z`)2B}fQ%slnNuHTOns6w>2blhhmv<7^$uhs0(nWnMecT-cpWKSo`*>9i*z_#a6qoK z!!3=4;C#SE|NDHvW9}Ny+#=av;8|%z32*-68v1}kL+-uIl0enM?BzN zj}foKrOV?W>2;0{yQcuyJSxk0MCD#_4ModcJ}{6sj$tjM*r59yE#UDlQuoue$ufQ4 z2drVdI0=sZ8%_e=<6jP~HX7V_$V2cvjF%F zUX~P~c#-uzMF(AGeU8(f$7#pIr0ov5(`nl26m7px?s%NE-y^#p6qUAHr9S5vPBH?z z`$35g_j%W&#OqM$@;IRI`>yf;DS>K%y}Nv9Q4P7vA-8bm8pHa+nN~K{#vymaE>T)! z-aGgXH|eg3TQ~XHfPWGo9^c~;uNTi+MX;f_#Ze+cZ|V8biuzlKnIIh0dV|#W3KMR< z`R7VjELUO8^7BtL|J&y74{bo21#H;@I^EDaT*%BtFcMH1a)Y&*sc+aXuj$DAD)qBn zdgRvVnCnm@yXibbn{BdFlk7$l3!K~LpyE2CpuTs0UC%s30O0<9L_?IPL>B~44w~e7 zkXWnpe$w+S9dcV4j5?~KWg&^pNFH{ZcM4+l<5<^6e8??6_;#TN-Qu4VPS|m;+-!vb z2cq-fo4m_I?vlVd1hFAEK7Dwx^W!A_uJNWT@HC)cwm6~Hctl-!2v}c*$@t1;YW%k4 z8$}zNW&sYiJrNlp`AefNjFv9I2Bs^0w| zt>KZ|;%7rsUww;-df?gXG3$(1U`i7x+XoSb+q?_ly0e`JfL8Fjl2@FxLkJaMwkKZYL-X9H=x7yvf@J@w#!W8-g$a z9Ghq_Dbv|3r$t3M^U!-nw{;RiC?6ULuFiCU>J?dC+WE(t|80YJh&Ck60=8=b@H;?& z3L1Ko4+j*1^Ba6{0QX!cxlPo!1*!++yDyhouaK&_in4XftPuMdmSL2`$|{mJ*4MJik}_=gx^qxfst4%Kx|sG zvqdOt9Lf5@wGAlJuJ#!S0GB3U8-jn_cC*MCL?5-KztXwy4elDw8sW6cCK}bfA1~D( z8gkp{d4ROqDEGd^1j37sw&bRIb?U`x{I=cOL>rlA0h_ddP6uEQzhfM6*9ZjmK1~N) z0>zEPZt$LaiPt)L&=ubAB=y)zI_x1WmrI>aQ1^qR#X>{-oy2XW)N-l8;{tPACV6g> zKbPNdyZ4r^PP<4CxWa(6S*RD$b<-wbIpiAm4CM8qnHL=8>%}>3;_-Ff-%10_^?s-X z@Lm^K1Al$DQxtVeH|!dCm3O(#U1C}5r)=Q0!d;d=sGwUhse3UnoVM{YL)YWNr^hf< zuA?k+Aw@UU>piFW-!^%RXoJ!$V6zs`>AD>vopzEAJLG1|3^gX@yUZ#O96e6q1dj|f zs!sX98%D45)Z;Sie3n9Uoi&()kSXPuQRvM)1k&0rPlRx;j5%eGn^vTfdLM z&-PG+inTiIB;Afu;Byc-eT@%7MHT910jQ$G72YR+H;iB{g4uv8eBc${|7sB-4&4te zpsy-ruV_@-`(8yz#OStGLad_?9#Bdn`difh3U7lzcog%x#RptQVqoDeOP^9I_$`d> zhOzMyeTQALAiC0`j%~nIZV@g)T!ng3=4;gWZL@cYHZaWswrK&KuGLnl!$#6^J8|~O z|DkL4cb?g;*U4?x%dOW*T@F$Z6ux-hOT6=G+Tk?qSgKCZewX>c>)i7m>-3;>bqr*^ z5Klm#y`=MQ(n(Rr-K2oLp@G|cl$m_Bh2kT$z82KgYsAlK{I=11L>rc7 z0b8|zPS^GkuOGqMJY?_!`u1-Ys1n?y+777hK|=fcJKxPTPgkZ>EToqH`Q$fO;zu2uEkIAAOYIiHL~f0?+eaXL#p5%w@Wv`OmcV8s2glZ!({? zT*6ze+rwkMsc#gxVRRxx#(sdtcve@9dQgS~`JA&UwXosW4)#nWFe}Q+t!8+Ww(k<4( zEce?2w{V?1ZzCNs8(Nz1tnk`T`<&%{&lSo9KQo*Ap5|SyaF=k_<}T|GUY_B-&kBid z7nEQHq7zqm&y&3Sao%woci+fcEa6T3dHpG@&N${gj5!bH4g;i0eI@5%yw)i0GKRa1 zkq)w_9hdGsVziIq^CmhGF_A!Fgq<81Na6YZSv)xo*B#jo&tThiHS+EMU790Kb9W zQ@qPnUO$XAeayfWv{=;tEFW-=cRfrSEYjCsVrYMe0Nwz3G4(nnnA9X?QgSg zio4u#8v&1H%U==)B`HsxaomKQ=ReJKO19;{BhT5ZP{Rslt4X1F| zX}l3MwG_Ed;LZnGm5Z#tA9tOibW=N9^=~+p3r$nXsep)P0iCW7(0d9=g1pOR;f1RR zhns5=SPp`=Lv(zBKzO?Y0^aQpDLP2oD*~1PSHbTa%pIj#LEWtOH(6K2hEH<@N!&M* z_Nq3K_M1pMv)XLHye7q|faF5K$;PHa@jj=y*G2Ave=1yH?UwPTe%!@}RUg8t^kbEK zGKX%0(Dt2KxekKXcI{aC4x+Kz0A9TsR44=7#j0$3M#%qM^@(td+byA7nRqITrLTKTbSJ;R;fFy=*cR02*(<*(~MPy>g!Hq zChuHn7ZDg#0QeaK=ZLzrStVlU;!2P6GY>TX+lKEHZD^VWY|jEZUGJmZqCQ7?r^~$V zGu8o9eP}->)aMxQeuS&EcH2Sf%+Vtj-flk?+GkRaBLcMUS6SQZrK?Q<^FpBDD0c_E z*O7LL+O8$mYPA}naoY0`?|y)H-pX4q6*1}RgO~$o?ZGN^Waay?vb&hw3|8Jv0J}WY zK?n$U=)$V@<#k5z`s0;Y^#tA!u@T@FLPe45WMhqya&>R1f!d<({Z!cqVV2q4@d~TC zNr87s>K8+}vgta_hzCXOv7|Wf&43r}sKYOx&YR5P?rZs}I~u=j?*`FEq*=g*Euho6 zOl0^+JrXc5)#tg5ci+d|FhLl^Jn&EZ0~|E%b(D8K#M|$qZ9(e;wB=^G&TM@%09a{h zyO%=U4)dPJx%(B?76>n`{2c-V+x&tO08S6uDxtlR`vzCWulk~#YE+H-iFrM%t@-e5d; z@#nQx@%osIoWg4_7s9TFV|iUa?!1OMjy2SnO6tus0^u(6cwJv!Z#u8FlDo|1HP?t^ zagv7PMSHEa++{JZvrIXB9CzNqs+?inhNfA-_AH>&mG@xf5Hp54u?k+SQcvdCpE+z}RW69Rx0dsH zyOknd+j<9e+fLnf&^EiN>k6snOnr+@r1dVU3PAuwIoe%htuGf>tBVYByTsfN@Q#~! zvxUUfmo%J7>P{xLMw4oTN#)+ep@&@FQ!dvLBC1PWyo9UWgOvrm7qUuiSXCbcG`Qnc zR{0vY4`$B0xZ_3U5Fnxx6(2E2>^jGscXIn@tlB|d`6{ckg4f!_f4U?)O)xlbVbyo? zT5Cj9yV_x1cNRw<`=`u4h@q#`DOP_LuXK+)1c>vL4`mKF1lJM9M*rF?tlWAy?j?P3 za|_}#b$qBZeErF+2(UlI?`aypZSU^TMxccB`lPh$U?Y(5XPO@ERp>iIDD&LtPq-~LiZ6l=JNlZ+ZpTjDg6Tjj* zp4VHz9d58H=RjQk(_2>Q0du^->_b?+Io#nMD;LeGoM-l-tm0$lypKEFWOY{ahThD< z&ro%R?0nc*V<*Sc3Eiq46UYa-tDWE#o-*hC-0?E2>(8ql1;53C4!1#c-e5X+9m|~$ zF{d-E!Au3)#V~BywDPCnYC8=#)Ca$<8bz9lMbkz6q#-vovtV>s%M$Y&%D|R<`}@75AvE@d83)U&R9}@ ztHF5>bGpEt4~yx{O7~ce?IH`M?qc3xu85YP0*T4RnH&j&_2&sSm?P2#T_^K;{(|T( zD@!CBS~3cYR$ONoordd?f+9|+oD-)lte|euEHRyV?79{|vAO$08<1uJTeblB-JRJZ z-rQA@h2=mvn7x>lJ;>~PvkJ(_1EdEP)j+vypM1Lk657itPCQ_5H&aBZOVMmrexUH| zKSXX*dnbZE6}u=oB*6AqkxSheh+WPr2eA5clq75&QyBhB=CJfP_S7^O+l#&EuwL%Ng~Y< zEpWk+3x1e6pJcAeq@#(-7BE|2Y_7P@<~7F3btV$9S!i|%VZc_>_-)HKiZ(XQ0yby? zovuQ6Rsk=$fZ{61Rh9$fKzJW!w~hU{lmB%*FY8Up!37_pXt40bg$7Dx`xTTOqA%Z# zz=Pawvi5DUTFOe_}I!+fE*yV39 zuoKzX*i>cVtDrABtFPgpzsh6fK)jd()t|ts3@LCNs&6n+pjU0QRK(fT&e-)~skE-Y zfR_v8&RfNsm*6o7T|~Yj!`q?;vzXHez2k6w{h7>~(}i_-_7Kt%6>0po!TUoSl4b#0 zwt!AowjZt_o1^DiW;iCbIu{{{DZzdH<)a2!N1s0|dn_vKu7-*gyBj zfw^|Q^l;+K`3QuUn_QZv3I7`*nsQx9p}G(|Px$VnQg7lofH;pJE|ZwxAE*XzRdriu z@-h$J|1bS}yGus#qNLhrRSL|1RL-NNGF`ID56r7Gl_D5Y-?xYma=|$pAXGA+1J9*s zp=fM~QO)4h*YST#d;hPg@0~Y^5dzHhXB5>eOn(YBoXu*Cm&^9Z!IF+OC&+@(Dy=Q0 z8QU7aZTbGt#->@omMx&ueLIep=}y1v!hYz=e(cJA>c+};6F4sioMYP3hyAbA_d5Rm zKdu=obYT_Xo%c|r`0M3+P`lpwWqak=_0Wq5OmAl2_rt;=aO;&o4dN}B6UEt_2D0iS znG1r%vlJ&4BnD6+vm@Jh7RRqce~f?M4E{7iC=kL9YPZ=O07hEhhlJGaYCeYV`{&wE z&{tnb>nvnK3luG8wdXUJg{<)cWBoNomwgC#$`c)!wFPJFByqHJHzv%;4qE z8r8wrpEY6tbtaKIlRv21lZbu)ys|xWYELE>NQ=rmlU(O@_&mk{^bxCZ^~d^6Vsdk zxmotzNcnD3x$Xt_T`AHJRf(xkWfHVVsRY-N-%`$lIrL`ELpf$8;W{_*6K|C_o?BEZ zq-SxLW$aI}{Evag^1HdqR90)cP>t!V`ZS>$)0p!#R&5HahH`2NDZ3oT80^OCD-0=c z=uuE*x?E+7TxF(QbvCK$BO>C?qh#l9`kK>;(-3{NDTeBPa@7fj8Y@YiJ-jw34((!f zwy}l_#X|#=m*3wrev@c)I?WJ5`3S#jPb3X}nafmCd6>TbEGh`C(pm+!KXU;Hl}O*sG7gMQnQmT61NOr_r+VBb$* z-?gLPd(a;|=wCgBe)6Jay%_XUSA$)5gIyP9*A)>Gk*`v|TT!7M0dh=C_Gi_x>L2D8 zeR)IVc;F2hIMB1X%Pd}d7IT@!YRzCZA%)P+lUc>%tkMxyc?PRGfmNQ&9Lz#p-Bc^0 zoKiwlS*3AuId6TXdBlF8-mX!O{aC5|Kt0L|6Q%N<@*Sqj6-P+rn&npLQBb~ne)*QU z4wDS!8|OGLlj~rO*_{lIcpVGB@q|IZ8<{GbdF9)z!NL#ldkU#Dg(yBZYqG#tV}ew7 zy25W2*k)S0F5rd2!(kymc0=>OZTn`?MyFZ8#w?)IRoYA|FQyLjslyyvVFtCIOw0Mu zvcu_L2h#6)(QiHJx9#b-9cY=Aw9H=iZEsN*Tvt>E&bp^bf9XeW|bB*y8z~}m{pm~ z9H)Lt${BDHi$L^>BMtWBrHcNvl0PzA^2+xtfGUiU>_-^NwaKe6Rkk0buh71r;uN|3 zWXY~^PQ`W9ewe=EaDC-HyvkNqZ9Bu8mk6Y|F5-<9*BOhJH1^|Fudy2YS)B=_&eRf` zM(Ru>wWpFseu&KQT2rJtQ{`f)2Can_S!uDxZyUQcwBcwLuz3sUbQL#Kheg!EPmw=$ zP&JoUoJA{4qva=2yK&U6AGI4sf85W$o6o*$MTJ^Z_~PKVsI;bKI@0eu%RhJ)l<7>$ zw5Me{35oXR^oI_#TyI)&409aMs!d>3C$g&Jgq)BTGTBtGI-XUT!m5DK(}k)iLI?XJ z%>EdwGQ-rOwts%CkTnnabgo;le#{n=}guf$e&7TjyE))!<(YM*b3NyH#Su*;jT;gv74Iz zZS(hwHbBh+wqyaF&S496SSa9K*`HQM3C**r%%fFi(7$fu|NhwcUyqI7-R9q1;@=$M ze>`XW<0f9FEB)8=#(zJ||7!yK?+L8TSVNg1(jS-dKYO!34`zQj!T;?(|I;b{?P+6W ze`dGc_{|;T_s5NY#HnucGG~o;oB1~njnKCjjTM%2hXuUq6y`Kt(NtD>J}Y;fRbFOp zQQJRR&R|Z8s!XSqMjIS_j)XUY|)%awddC6qH{aNWU|I*u3r{HU~$ zR9Z=)ii?PYf^Cqy610s~+Q=N|ieXfpDgNb9-Ivu~$naf|b6R|09(D`)lL>&Nu$$A}e#6 zeRGT3&n0$i=^sLkKh7Y3Sxo;tpZsZ+^oO(TPkyY-686n~<9~z$&-|MQM*Fp_%mx0R zp~nBZ$Nzkj|DWXdKb+t{9%BD}Ta^D9X0+SRD*cRUNLqE4qN%jvNfG?6I)_%BX>L?^ zeO~D}S+0aP{AaQ%b42h2m*${cps4sMn@R;2Samk7vVuD7U=BM_Qiom4VLL4pTDDLp ze=!E9+0+T;ELv?2b=XbI9wa~QpnrJ%zRV3?_6+;?SH}O0;y;~bwfx8*L%97Fju-O( z^Tqp$Q}wks^Z$-{-wgaV)4E7y8E?Ey^S{4>+eI6qW&xYBfKFF;A8WLZHCo9UtYmeT z(P|3_KCXD~(GAp-^RGv#JE~eky4mpE=K<)n-xWY1DBQ!#g`wmeXo8MawVHY+7x$V6DSgL*%ob&sQ)xlU6v(DxG9i{j8{|vh(xGDpRq}mR?XFYzDur zfL*MP2Ne1^t)P{+eVE@{X;lmiKdq2kEvx#{zwRafl4Sh$B>nSQ`rlV6D*qGj8SST4 zmyka_l$?{q1IQZ>s?kgnl-*nTV12gPtzvHKdKYd z^$=~ai`L&k>*Hy#j@DU09VZ){X3EZf)EV)6OwBG(f+z68O9=ncKrqB+uValNfP9Uj)vPf*as}irOK9~4 zv?^TH`J@_fzMfXPPwNB-TDQMJ+XWO68XNDI>TfWB#O-c~K5c%9@EoWa!SIpG*2=Ni zge(6^p_?l7bUiG)Y&5jGDLnqBC#lPB>b!|mT}2$1kjjfmWlT?6aK3;z&L_@usne>` z$gQ#*{N6^ZEu_wKD0&vkmx9w3R!jEV1-~697u6)GnlGs_pVeK&>iN?eQ=}%#d7)PD zCe~WXo2=x=Z)y1_U&Ae!~AXy^T6<7ZstMX6>R?wo~Utisx;`ZxNZ9B;q6$HpuqdWT(ke z6$p_NRg)!P+u5HA`O!+F3ab0lx{Fz3z`s_m1S=5lV?lqyV{h6mR;9HH%{1 zA2P4|tn*#k;kKFLw`hmEwB>QR@h+*|b%Arxy`7@Aw`i%tUeMYlj8%_jZg9RqW%D6o z7lh|PsZ#f%yhGbwrwumiTU{~rYzK#6wYsJEX%Mh0TER9U*WU63+y<{zc`wS89Hov`3@b zLFtL?7ckrP0&zWGike&^ZST;QkEv@YZTN(`1kf4)`624KOQARrzMEFrL7f*XkrOo@ zqL%Q#!S5-O6JFMY3%*l!njygpHz8c*_k592136AIRGTfUb?5mMv%>X%#`FSjzLqyL z>-cRg{{5BQHQF#W3)qGQbUN>NJ_b&993LH{D3*_o6`nU_YKajpI3zZsO&ST09Q7#P zC7!#yVZ9Uhgjha4j!lSVK2cs!2(x+F^2H917@qx8oiBc4jbpGt$CNc|p3y&uXw9>`tp%b+{_dpspnPNUxG z0c~}bxb8B*ad*FG#r1n4hY|2@tjP5uXOb6?B^>VGh_L zP`uV+)^G)Dx`sDjCn&D*+cs_qZ4{aXz8VYYbb`~Lp;58iJI18pF-EX_VjP>AKz$SG zpm(HIGWC5!Houj(B+I+gq=OmKu}o=yy0j}zUL0l^ds#m>%rHOB;2UX}9Vz)nDTW`(q59OW@ zh}V6B&`qPAa_bAE<9*uko|W#31V+Fcel}DL-q-}c;l#T=q>Z1M1&TkTO~M4u>)oa` z&r|0E6u7PKOKbSi8i;`?s&3}D>Tp+DFO}adJIykAbO?Im}q9U>B6TRNAlsC!XbD(GXqS+cIS1V=wtD<3K?9Z)GI98#>svKbf_ zr`FX9N=pUpmQ71tZTU!fJ17!Dhhn9=skU2oSyxb3RqR;HA(jsRgi64pFw3u4*DZ~x zpxv@dtynhIz1Dp!yDUAeE2tNf<=A5F)|42v^81UlPc{?lg4C{{+VQ3COMNu zk3!k>NH#r|!%pV0(*z?(M1)bY@$>u^GtgIb;Fz}{mgK~lu*4-h{5Yrf!8U$VEF^$evfsyPdnYG9uH{e zdm_c9$wkuiQgI2KUn0$}qCa(eOdBiME>7`K!SaUpk&{SWR*4kC>T|95jcB*xZCAz2 zTY#@h)LKj%uH?r)nm_mvet$L2 zf;Ldi0-6QBs0G09L_Q{gk51sD68Ojj?j3K0d=mMTL^k^co%@O|dP7#emDjzKx1`9s zQl$fF($NgV(G2NmmV7jmK*uu4?rb(Ji}lH1TeH}?Y<4t`cMbCn7TA6RaQc)G*+&+%1rFe83P_LH1&^i=_D_p=MSB(Sh*hS4oF^wDl9(1U|P} zg%pQV9zvUi&~}e#n=7=*K{LfMF*%JXT)| z{5BKa1oB0K=%9G5Mf8Za{`VLC)7DO=S>QKs0i8~u`URW$g3eJ;z5Fd%^G@EFEN@Mb zcc;qmtq*6&Co&Nak&kDQW7*`GaIcxlW`Oy)qEk6+R}LGV#d>A2%{lB`EGvY$6h4wU?25PLDqgCg}a!wi!{3}b=~10TyBZz1?iLGI?4i>TRU z0=2wG!1%UL1*9!%8bVcp=wNwMY5e}p-)-6jY8Lpi7SQRoBum@iSf@yP zQ{{tc@{tVrc%}?mAIpM>!fb`sCT0V=CT5?=;nq5x!}sR!NtwJ$CR?1t&gSyd3dI3( z=u`nekjj<^(`_$=M~+3-3q?W(zX$8XLJ=yE z+jZg*NZUQ7EkcW^c_@WIbb!41GwS}3BC?LKOvgY$aq*J>E-JE3fNhoE(}dgYuv9L0 zK(4$Izn6Ad-|&HOeqTP3$B7i<3am;KAu&Zb%5w{HQR&Vp*tS}270r3%^`(&2jQ0+5B)8Kak1yq_Hh;=_;^1h62y?qXoqmLa}5~ESY>) z8h2fq7bZ3rMhh)aG#}I#0>!1tPYi=@=m*}=_YTl|UN^WY*tSp{{Pql_?Sp8Gu%c3M zu2Q^32<`BQc77mSa8;ciij4M#TcuhHM9yHfsZurY8|7rF(q_4WGLczx9;vl}nuHXT z$p&X%8F3OsQ3|C*PDG;?Kl$z7Y}yrS7Wl#z(CI*HA>maE-&#fW$z1+Rr4n5w@rGv<+&U;^ive0K`l z_?j(?qw^yLyr(~u$6b@=J|l~Oa|PZdOMraJQ+e=hdDtCk=xxKGoBIAY4BZ0^ZLdl# zu9B8lN$UXO6-eEKXv;96QYqdtgm!#H;ih*E6p4yLIOHB}dI)O-NcGoC&NGF>Ef9{3 z!nu+?UgudW)tFBTIgRD7ripHa{I()D<}V>Fe)5I?wzbn~7Wl1OK&Shqoc?5g)t^T2 zdp*J_*=#^21IW88W#23|GKE3Phh8M26myN8FKz-vPztVYdu}Z|MQ@o}lJ~~nKc?sgPaPCjL5`&JrU#{FM}!*hk!mj%G4E>AC1tPNCKHLB!ROO4;Z^_xw*KFtDO*aH6meygkn#Zft$%Ma)B17;mWU__bMJd)1W zMbI5Dsfpj8fp81daoW9a*{WxB*K4G*@O3W{TKS;=ZQ}QBdBj~If$-ZB1Ydl}EfH7g zbIZ`{G3oG(xMnijZaA?2y9mqoQnjSgOBCa-J<= zQqy^=gmmyqS6Pj2L5lDgmJ><4L9Pn0UcEpF?mWJGxyzd%jg%k`5GqeW3i>gHgRRyQK^Hb{en0lJ! z@mNGrnjMy!0p4acKOwp9lWHv%UU=0RQl-nZ@+DStx#DmyM%K7U0k6GOgi2~HDMcE; zf8+O>c6piwzO)6t5Wg*MG=QxV8YNOtF6XgpdF*yRy`RtS_t8!^wdZvDfm5P%CiI_olOz&&6CO z<~Y@S75^AAC729`+kMZhyYeuL?#QF=OLHS6pD4qCSji(wwnli%2nqq=@W?v{QLiV| z(=3lCA_U(2h}8U;)J)ZJsTp)aYI6!3=6tzuh{+pK1%rTW_?m*vEHJF9S?RRO}6 zBH^1hM)r$KHE<7k$64+zdT>X_X`dA7hz@i%mS9GMtQ2HcSc-;;;jQ_B1D zP>b%#qaNa=Pckuq3`rzIo|7R7(x5m)muQ1qG-)0!;N2pcwv48o!l+j;^|Vr_$F%uz zsrgBhnw=ERH`K%|WF|J;MxFMv3iuq{9$I5Db)0Iz7w2mJOlvMHDzyAeHGY5TKW^=O zngxF27WfQ)TbK=O1DWu%5$L#)M<3=1X29dyL#7hBl9(Eu(1XQ0f&zJynHLPh_Ovm7fz*i&H|) z6*W60H9aZR749*oJrt{3InR?35f=!DP_bwQJ@V1@Pk!Tn zhuY<77SJs4%PsH$euLSdHJn`t%!Z$RDUV*uqj&O1P(F##!^wuMnQc^<{a$4@NUZQ% zY(g*i`_GY8Pa_b%|B-zCIeV^fJ&qXtk^XT?x|>GUhRWma$crLr*DJ&?l5Tj#x?LtU zc1yMQO6|_b>tC`#H%Yaf(y05S)?TURZfRhE+&4h3dr)#gy5C9J?X=YOx;)~cJoJG) zcHAn}mEwi+7&v*BUChm$Qh4M;OcakW1W*q;S;F3u0#&fwz$ z$j?D!!6W(SC-S^NsqrCc^K&{cl=?iP{Q~5kSBOubaKX2{;T_M(lb+B?k7@TS@}x&( z;0=Nnc;0Q!Nv+OGy>80G0tLJWEBv0L@Eh2+Xz&XH4N4?~;-wyOQu`RWV4OJ^O|NHlRA8OaGS>SK6fKI0-WFs7LE{|Q#qXGH!b{>6@PlF0bq+VgRGRvq2 zvk@Li6wDSfFKQd(mrt+7feHGcmsf47SQQ#isU}}uz&{XX@s7}C|M#2BA89h z6OgK(ZNheOxPCcT`{QShFuZ@1BSJB8^nE-L!E!u9VkDj*iGLeB)YGf^$Ot#8nT9~P zDFZQ=BS!8YNf*ZmEs3EEqv*5{GUBm35C{*Hy`Rdy3B(5u_p2fr1b7R{1L2n^%9EoF zBO;|PQKWM;^-zQvP2qf>Q>4IKr8q#|?5qf(v=1g7BB^_XNgbjo-q?5WGdNu06&^B& z3(R?&$PPy=MId~&=70aLZ$$0lH4FR=7SQQ1`-qGY09#?Uk|lyUNHGlwK$>GCpB=;g zID^07UL{zLe*?TniVNa7aS{nBAh&bL86{?qe@>{vbmrE#!v6-gEm{;!=R{DSAbDV* zJOcbqBt9?6;MYa!0;>jJe5IhcmVfd${QYW&XcqWATR^81DSpW8 zQ<$v=MwHmddlApJd4b}1$ly_fe=6WX6jgxKb8;ou^jba;UMjx z&C~ir&l82>Mm&X(#t4ds>B+r3g7^t0Vn4)hi!bgUL+8JuBVW+|uS-|I*L2`(I`sva zl}KhJ$kSsDKGBB0F_L=(Yxe)!I}a#1jx)bg_Sy11-<|K?y(fofTW84<&+@Y}wkgguj0T{Lb2bQ2`40S%Hf# za)ROolurB>f&PjxCgLiqi5lO4(%1X6AGzIsBH>MuUpKM$hWK;c{N5Hu=Mbd~54Gx# zwrD?Y(dhT#Chd_1<=*;eNo8yb!TZzm!nDn*2vawxwDRPd1~#WY8HyWNQ6>BS8uiNk z+MHH4{V4nP@7X2Ku}go$zVWi*3;$pr`0eMRh`vLCtQGJCzr{Z_0g z>95=T-;&=?*66=#qAkzqgiiiyAOCR+`+u#e!;f3pqb)>n{SiWVi}p~Xa(7j)ZHHP$!60LxL^DO^K z8+(LM?GjqpBQ5&Ft=j!{>Ma{1b2dk(NNk%TQ#Y!#Z1CD9c6B40BSI4^s$)~PsZ)2T zH2*GYWJK|+jXFIQ?{tn&JR;JtF&_Pnr3!& zGn>|1ZLOMc71?`(}1<)MJj74Rs(LfEhvlL@@b@~EIQTB zZ~DfknO#Fua6EL*4Tn=v63y(d1aB} zEwQOv)oCMv{Nl9i``T6m-Uh#05(qb5Tk7BYvofcP6*n89C=up#vhRP&K0E;bN!Ip@ z3Q)k$3V55}hDZF|z5)JD1ADho|5JnZc5Up1YE>dUCBFs2Y2nH*d-((H?4gcSp_4t( z!b-NPx0Wln8VHZfEsMsKMlUI8{#~bE)6TALGr}AStp>kmRO;VftIVQB z;p9T0x0s1AyOqsuVQawetj!k{pn$Ix@BzPR{{6=Wf;an9BYUSor=uW#SC#OESL?L> z?DLI`I4ziM`6YzY_PNjZGMa^3C*mf4FDO?Ql*i_8i_I^KT>t6t^li$Na&=0XT3oMR z)4{GLgtr^CHW1#y=#0yge@V0O4)#EYF%eIOPIg}lo4-|EP)`H!;7NK+Zvr)7M{5|T0|dT+W1XxE2r*OuQ;R?ceB}TMkwlF zv)hfZ<}}`4W^cf#0R?=lfIs<7TNWlh(5#K=6=98z8A^-r4Pj1;3V+gLAe`WRe-Han zJDX3;7W^Lhowr??w>?G(zkbv3wRI}36C^*$XrN_-^uf*nb;@paPA{8HR z!Rfp>u^i=OSlt@b(!R^2Z3;gO@t=0Fn_c<6vPr$WQ(f5_S=c;W+^LW9yH>w!r#h3C zeVh1AAjkYWYwJY?DBy1ee9!MugzNM!Q>S;C8-wXr6w)d8@APwed3noDbzZ74w>-A8 zS-q!MTh*biXc@kxO)+NM-K?mWO>fXI-=$7(G~$#pYb0R(iNA*;dJhG%Rsj4?ocftu zj-s*JsCFo%tO=%hmr4BoXn;SmN4tgm->Lbnu4rcW^k}QPv=!~j(w69To!aakHoKS2 zY}Kb6(5|Y{XP;rSdPc+QO056R+I~?13iw$8@O$LcX5(F^v7(S1;p*<7wmKAd@_$o0 z@%zI8{={DG-o4sQyVP53fm|yqTG>5)+Ny4C6?swGV+&g&G~q7lV>8?IDW7T6>-3_t zY*ycB0Kfe_5YcxiFa`y{Zxg?bcbOWmQ?yedr94RQG93{v`2EyA?dSWoC41DHQ}Vlw z-A(+aDR{TGvO`_c8o9AkG3MM|Z0cd{iVCf0fXxQK$6&Om0tKKzLILo5gx{l%aQd`9 zsvQff8=Y5#C+FY$v}X=zKi#h_*kwhyG5>DU@9Af&dMIdjb!*Gpql;Q2#eMqB9yaZS zHmyRNJuo`?rinP_-x!ln019NK0QhaDwv7AshcDJew$F>L6l#X!8@23tJQ}8GEYs>d&H;%xYC_c*XGX}p` z^=d1-wPo!}X=~*Aer;Nfe)%D_D8LBYGJxM0j!*y!WTgQ3ZR0n2!NrR3x~O(MtZYuT zL7|!7gz#s{i*i7_eUB;;ZsIpvb%x#5r?2eQm(vuyJ#t%j^vXKz^26%vAvTL%VfH7( z>ME>1$;x(77z+4Z0r1<#@5B_Gb`6i$)7B^vbzdqkiiO_-;SZ7*Wfv_+N&IftmeKpm ze!l9A5$+;{pJ6NewB=pOlFsP0HL=T%=`+vpSp$65*<=8}{XQ7ce<+Zp0^oNlej95E z4KE6#-3d>Jm94fZxSikR1t*Fx-J@NfK==*YwWV$Bu71Aqj1dfYpW!Rcu;tw}3y;mK zicUMO%}DTj=2M;o!I52P66q1+r8C{7%j9b7DCm zZEZzfl8P5zh|Fz^DgcB^XK1*SvXs9hA%(Emi6hSjj`)Li%xIR zXAH$L|IX56Q5*_DfusW9w=2KJi%j~cz9Jl><=}E_D<^)F7v;$V+8ukeAMDVUwzHLI z`HKEzSlMsDI}!BK7Iofdk!$Of8G*Pl1y2ObzcDJI02Ihd0r1|BGwYa_;T z@O2|!^f>WbOu--Auidm$EA3z_2Ke%`ra%ZcD9)F3X(h*FH=d5p8PsPCCJ_#PXJxr4 z3B{nk_JttX>5 z^eNK^`HTT0fZrI7Pyh;Kr2zQt%5R#28_Nle^XiSQ36F*qnu5#ys~+F0J+(hYczVC~ z=q_z}2U}+6w}EiJypJz9t(8>7ZtIB_^)rER@H;EZMPVoa1;Fq0{EpK}$4#^;3T;g| ztk4&k;&b|s1N@(B*ei9Z!)w*-DOx!=$PI+s!yvn@Mw?%uF71x~uveKr#Agg*{*BQH z1)xB73V`3~`JFf>Q#ZUQwRBj0Fh(aG3xux@a;LB+Xq?e=?;u|~U?AKQmJjjU>h<|2 z)ulbLd7Y7>vpP+|G5^labWs`#_+A033a-zZBpr zZSXc&KExNc=p~ifot;W)N94Lb75w)7P=o+bAZrD{?+o}Y)`E+*gmhBq1erL*W;YFd-9gG8d_5~FA zEsvSjmN-qpUk-3uMQHb*Eb3q-)!HKBcb~GbeR$3pZFM#Fuk!a`MDL+MmI{F1nekgr z!5dUM=9rx{KIhRbw063DV8G@DALMs-vs>%5g`L`xeyy}CdVNo9O=VqEOKbnYKqL~; zbe(e^kH@q8--+T-01Eg>0q{Euej8J8+8Ue?UKQ2$W;O+<6Chp*@+Ap`)4NO&mJz>u zh~N6cPJPK)y|gE`pksLb>00pHM?()?g#tM%0Dfo8@5B_GPUjH|QFK~}vT@{d9;cbN zNGDIr1B2%ye2_2h=fv+jTG`S;y|hnV*fG5E6!@L9J);3A;3oyZ@9g+(9PMBnux2bo zQTGO7az_*wgo`Qo;*rU>F$E`_pEZ^cE^J}ThFIwtePMTOBj(?J8hPj|6v$lx@H-oR ziz&G9qSVEVDfp($rr;mjrr_j4q51c14Lb3A@fm$lkFpW|@7(PfEkFT3DFA+F$?wG0 z;Ku1Zw5e5PSlJs?J_^NMCf_pa)gZsqGzDK4;J4Q66qW_~;5xA7KJ9*}t~akN9)wS?qCq0cezCb##1;RrWgXVNE_O^o!zY|k%oztd-heOJ`U~)$k=`FEGXbS#bkl#b7rk9trFG_$fY-bDV ziQkF&_W;|3^XGH7XS4tX{GP#_NqfZsXs+xQ%_UeW1*`u#y=O^~Hsh(go! zH-d%>h4_8vSzgk>ZtoEM=J0>#!Jg3s6!4P*;CF8P7N=v@(ziSz<8;ilpJS2><=qf} zh@2;e&zsM$W4E=j#QYol_S3jSU!g!g6ac?-;CFH%q0VUvUNfxh4yvDIu#k`t{z8!7 zMz1h~hX3T&7Qt`$Px4{UXafrPNdfRXcYf1CaN~4i^>9$xn3)UZtq{K}$QOlqNfTQ@ z{0{Luhu9|U|Lv!dhrU9A+!X-7bLDqDxgCn4SB7Hc8BD=x{{2yiKNjS-hxo1StfYl6 zB42orgWtKEGg^QGzES}E&W+z<6$%}VDHakQ3>rtPrG1OJDX}T|q7Yv|r|>lMMYN(2 z{PxwjLua8tJ`@1I^TKah2(HCxN5YC=v@ED)@)q+?^cFM3=XbODv;_Pt_?-`9MjKGT zX9|GdIrCe7i&?L*>fsojPM>!EO`r2@pl>n5d|q#Y-)DF!=HEUWdFU<_$Xx;OJ3stB zm)Mbz)kM{!bS_VbrJaIr4Dr`Pd`UmMg_eN#g5SBDGFpHFzEc4F&IiAZO~HBcTb`<6 z`W7>zh2S5D`J;pUhB|h8H!lt0{iW{)A36*La#R5P&JVxO34YVLYP68>KuD!UCTYDW zo5K7TA$}8m!qdsX?;H&o)uDh76#&2U#BcI~Cl7U?x0s>W<_ykNBNxi=qI_XJo8Jz8 z`*7@`%TOR!1;Fq8@tYQc8{456M;j~K1L~R}ciMmvNV7B;sH>rZkuWYmWO zK2!kw&Lh7K7dWRK3F$4Su@F3iZ!tGV_)~O>Ln~W21pl`Whab8O1#(gV{LUZ04HpW1 z$U}$nDB8(jWOG1spMM*x2#5LWy=+M{yL|xs&dHEb84CDN0q{Go{7$-1=v>UOvNNEp z4W&6(ZQU?`zmMHTyP%xq8?pb14+kK+3{g7LP{5xGfZzG$x6xX> zi5aU1tE1YHK$Ny4bf1FL62d<;>JN6a&G3Kwa}1)_P++VIfZyZ5Z(|jTMypWtQ=v#% zx>YE|?|0hSQyqM3WqngiYyZGNBofhdopT0moggWujCaOfcv$fE+_ci#C;4JJOsG(O~s=|_elv=@py zzu)U)Z@04Dr@-$#S~i-30^U~u{2m{E3l~bAs-Fx+HU->Pq0kbPj|SQAn%SG0KfBS*=Pz1cwYhV zdmQ*JPvoIPF^yFy>0Bu5qu{sqhZ=ea1@f){_&sj?PJBymtU@^vjFg4k_Cldom~XbQ zofVjW=iR>1AQbSj0^s-f@|zZd>!-sp+6%?Sg<>p0>14a`{?f}M4Sj=Xb}o{Spo2SocT?w2+0M0A{5)?d?F9M!u)W6 z@5T2!ULI-a8x+XD0^s*J@;k8?q0Z}K`pK|T9#C9P#9STZ`|$mI{_PtrLIE!;0Dg}f zzeiS~@Oon}EA_xo^b^+)dG>?fULI-a8x+XD0^s-f^4mDnm_DShiE77!(G9NKfrH=q zH*d5E1w5?)_&vV-PPkAsRvXjF1-^C2&4mJfdwQgyb5J1v3V`3^%x_u+PA6j0cCxgJ zaF5|ai90PM1i$ld-e?gDcv=DQdp!9);sQ6eldX=ZiS580_p$=NJw4LUIVg~S1;Fod z=Xc^zdfE;=svQqTHwRRwRVd(h{>>XLLIF=J0Dg}L^V1QGol_2 z&?-Vbr3(f8_Vh?Y=b%9T6#%~{g5OCON=-~X9*AxWswqF@0l)Ka-e?gDcv=DQd!qPF z$2ru+v{S(-orw8SDi=8T?dg$*&Ow3vD*%3vKflFZgycf0kFlz-axf6X{5$`aj25AQ z{}cefCyL*+mu$UatO7q8jM0gh_78b5|MuVTLyw_AP6~kE6U1-vAw8#!P)>xR+lCbT zDnjr(Crd_UDBwQ@!0(CTxA>60F2+uWV!MW-AKUgK1i$?^{Lo`4kdp%7_k{3!bQQSD zs*F|Ov30h+2*K~1EE$!dfd3Q#zbB60;y5*46VVO_W1EAT#RU$2`)~N6$50?A1;Fo# z<9Biuc;ZC*6fSV^J10vA~-uEE$!dfd3Q#zbBO6#zrV~oLY56IZS)W25A-e=yu@X zxBrG8dJF|}QULs(P=3o*;A%yXHbT+NtH8nUoGclYp@9Ds0KX@m-+G*m!>kHMcLvV; ziU<7m-|$0^p+HUwfZr3yZ{Y%O)Z_FDvuZfDKM*s!z`^gFEE$!dfd3Q#zbBgCNf&qx z?FAl+Z8Yr#4u1P@_@T#8ASVUD?+NGk$cOYgxxmYUs&s*a-#J+_DnkMPDFA*?G{55s zej6^7%20HBfX;GA9;XI=`)~N6$50?A1;Fo#5~Iu27m8HkjPxWK`0{|!I%7z*U10Qfyg{BB}#a)DO{qdSI_ z)j_r<#KG^JEE$!dfd3Q#zbA>`^c9bIg}G-ax-Q`Y2fzI{{Lo`4kdp%7_hj(9g&AM* zkPDnPvN|{v-2i^)WW=Zp1$?Ri_&q87=I6vKOgfJKctE_ug#W~+LlE7D0%KMH{GJSc z(-QCmzj;keKOKs0HC|zY-(xmnRD=RPRRH{+M1Jd>&Qhxi$94piH9-ddw@=3)x(x-! zssQ*sN&Kd-=*b0Muh4Py>b}G)%zf4MO)ahc0|SvrMALQ7c|0B;>;G5Og91>%`wD>H zlf`fPie8+>6IBln8DC+7-`*c?=phuys{-KnB=K9gz#BAH6V*-xBAdYPyxKJyg93g~ z0Q{azexGa9IGx2q8xfWTHTb{%FyPQfD3C`5!0*ZAx8VY>Q}xPWWqUw5P+bTAcOFd} zO+f+AD*%2^9>2v#;0-FTim1DXq6e$MZ_kf6bPx*UQvvXM^7w6R1kN~pg;^6-_YXx6 zRn=ntolo0FTTsC33V`2}%I{`IE^t;G(~brrhpWMFuMao$4+`W}0q}d0`5hO>(N_c` zN5JpAnl>7P0-jd@{GM!n(?+rls(v!89Krib&kr|r5DMf~0q}cL`Q2i;z=_}N^ssUi z{LZUsqcJGpc?H1lN#}RsEKK@}9{l$FXhR2~KzRZY!wvm|0(n&c{GMcf$Hhj3v=KP?omb07V^F~R z3V`1Qz;9YYNE?BJ-`*c?=phuys{-J60q~oapwub)arjU2YT9TF3V2=t@OyIkowz%F zMPIKHzj1zp=f@j52nF(~0Qg-9{HB8(jQKbColnz7TTsCB3V`1Q!0%@LT%*d4*Mi@k zA8+U&6v(Fn;P<5STPz{e!S8(9HQIs#eoz4Xo_u~MKH_c)mrnuP*TV4M{IzYBoht%)Vzn17G6t)qD; z;57xnZ}8h|HjVy30lz2!euLkBv32wl3V2Nc@Vij>eGdK;uMIBr2MUa{0^m3JJ)(?)8iKAI4;8_L0Z}8i*#*L0a0go#HeisJ6X$j$pI-I}b@zI9v zL4o`#0Dgnt`L!st1_hwNL@5A%7Yx5E>Kd9_TKfkEB9Vxu>zwm=JU&r&fcroJC~)B^ z0Dcz?zfXYQ7vA{66GMT?Q~>-g7=BmOH)8%hnPUO>h5{Fw0^oPS@Eh+hFSNmf=Y;~3 ztN{28eowLq;`UGg3XD+!@EiOdqv@a;6o3MgtN{3Zf$*EwqUelijM1-*u*83wrbQD$ zM8Z+yl72(OQIRg<@|O}ROI%ta1EDabh#=zhD*`2olxXOzh|4UBoEZ$6f9X<&&NBld zE+SM+rckK%tq?>Tci~zm zo(u{=0XGG}Z}8jAK9C0mpg`d&0Dgntg=?L7GAIBA+!O%6!EZPFKpqr;0)?vp_ziv+ zu65$cpa2wbQvm!1zuoKuc~Aff6s`i`H~3w+)`=&B0#LwB0q`6AcC!!UK>;XGxC(&Z z;CJC#C!P!nKmj)ez;E!|%|4I^1)xCTDgb_i--T6(>zrk-e`#>HPfC7c9 z0Qe1l7p`^U$)Erfa8m&M2EX0x19?yY3KXsa;5YbPxYmg$g91>%O#$#5{C2Ys@R00rC>0KdU+H~T;y z6o3MSs{r^7eiyEF;>n-@6mU}j{06_>>;rjF016bY0^m3JUAWeXCxZe|z)b=08~k>& z59C1sC{VZxfZyPE;acYf^JG7pdXXihd~{10x=dLNiBKRz1;B6cJ3~`JF=qub1apSP zobQ7iC~%$v;J4TL9goM)`#+A0aZn&bFlSh793Bu&dQ$=L+w1(ENW0CDPmM>mYoT^)%&E8su z6)o+^OQ#0io89xy6ZVQ5f3-BjX7gLj{v=Kh?^IGgk5eQT8r=8ZGk?7ADsv0Jx#dfg zIN04}snv9J+iQ!zB}#61ZZXxR0#wpm*F8=xSlUc`34Vj$X^kY~0(SGXR6Sk(-V1a8 z!Cs6~o-Xf3n);+sWrrRS=75%j= z+}l{O{+D-t^w`Z+yFQYM_9`+Kaw6}|Cio>%7H5D^7({IxXhy-RQNd-HEr z+6~s6BKh6hbn=Ore<`y*Tm7OK1TsZNEQ3#`%SeV5E$zrl*^W!Z=@u?k%vny=AHT$o`0NV7z3Uis?%=@xPHz$g?9B}Rh(pI#zBQLY6`0O=*Z!Z7%m4DIS zTJ6--&!>N0W>LgkQN+!;E(Ow7w6r5H?G-8I^(EgH1?;)9qKMeND6f`YdZwi^ZN&`R zcPd8hzyIhpPPy*sA~%!Y%sn3TJV!UYMs3>tC*&qK-;3Pg(mQTfNu*35zrTHj+x+|1 zl4Py`@VEa{;6Hyoc**?m^|wSR%v})~L$J`!dzT*OH~oEWx7lA__l333-tp;gSG|4D z)W@#)7n0wWnfh-_z9Pnfy#@35ptw^3r*uno`(;)YsUw#1hdzEmwrR;KOn%ctww%~W z&un>Gx|AIek=p(1>}7WR{wMZCOGR-x=3++0X`iFN(5M}!Mx4@9K1s?%Lb9b1dWA_P zQ!-fan{tW1lF;(~rMZ2YsT0&KEz`dh<}%sF$NK)#h2PJ4`V% zoI;bvWN1|N48us>xc7i<>5*6Y9Ssc-o-Jnk>Yd++g@>fIcGn+!bH)D=mo$xga@N0< z<&Um^Riw)l8Ijf93&`>^LcSUb^v3j=tN)IslCLbfWX;pJH5}TUVS|=p;_~$N_htJc z^5>uYK$f&*jUT_q+%@rp?><~i&un>Gx|AJ}5n455DQ5n^CbMLDb42FKh&flrWv(Sc zFGi@0C6O*gMW=MxY}$x@GVQ`|Dx9`KS%3!-v$M| z|M-#Gtj9lV<}<#TOcCi>{nFfB1PkrFcj;Arr*xjQo!sMMr2TC*pT2nax?e1+KeR~} zvsk?xuW1X|D>|io_|qF?YZP%RCezJ@sYfzhL|(e>f5-xstnuTwbXT+N=< zvX+dyQ7b+5==mxwHHj@Zkab7kCKOr+3spy9Jm?YW|&J>8Nb+jog%;;yDvjS4)kSQsIA|7bH!E^m3VRRO zmL7SP-?V1XVz4w(JD2@eMV3bB(qi3C1?=fADKxE=&AJp5S+XQW=#P3!`KOEjoh)F< zns|QG1GsnXgPetq*7McubnUGCI~ zJ>8O$@?Q4Dv|jKryFOC3Ed4O{Cviy`E5DumC$qj265Kt~%gbuDum1bM#eW_A+TR4f zH9hp5;^8s4y=4^(?YwvCReqn``i^A)(VvhmCP`W0fu6nZKE3^oN4si|$dZ;u=u&2h zh*JT3x_e4T)j_8QEfviVFwjwN$)#7AvVbLPQus~J;L^2&AN|_$kmgI-5sFBNnhQ9^ z%@t+bURY+CBlcos74}4#BI?RZr-=C$E^+d9r(9Jcnx!o9g^o)LE?M@LE$=&B>YB60 z%5SIjCtvxz;r9Mv@o-Hfe)*-ri~lb8wJ!wU+M;_8w|Vc8SNTmV%j_d*u&dE*hL$+J z+7wkDyW(F~@BUci+8eRdaw_1IPSxuVZhU6W-&zW6ef0sSJ6cMnd4Or3lLagl$B*Cg zj@fpNDw6Nq@|^NgHhZf4U708%DttZ0tpQjDatR~ISb7EZY`-TWj@ z@s#fxWeXxg#1)GNof;A87KgW(yb${>>C|Rcu5{7(So!^}D^sr@6qE1!ejGa);1~aw z;KhFxoK+Myqpl%(u09fP(a%w03p>{sJJ+lkaRjgOdw8gi)(lu|U%V%ihOaA8T6Q8X zxBT;c=E5)E{y#;!IZ?!Ab@u}96+ij;JWGL(AD`>qpyj^u($Ws~+9_)S_)WLYwrln! zG_pssBjv9@EE7fKjb+~zxkEiImMprI70r=cimiF-R(o}kB5q;NHQzeJxW)f1KBgpE zTcDeX-`c+Bgk0b$`CS0(2fzEp03p0+*6_(8{#D}l-v^7%=l6|?h2!)}a!(t(ak}x3 zz<2*^VAp8|etVVQG-7Co+ea0F`M?Ly(R^LXj z>r}ugT~vJUkvWzE^xibXJIY(9E{}&vd!Tdb-xCOdS{LaMbVfm-P>ES7T0_WeCPffl4`?8x1Bom$+wfGHJ zh3VxbU7iYR0?(CUoh~W-)3dP#m5ccG#lwfYIrx3y^4rBE#mKO`!0lBezuQjjCAWzz zu=A~-ibiCLj97-9OqY?g6$u9RzsKc!DcO#USng=Kl*N*fN#*z0x<+5eSbLG!+FbV3 zzBZc5)5`C(Qp*-7V!wqsSH_)+(RW7nEJ_g-?OC$H%p(?l+uIZ=g6rX|0j($jgu#3OBQ=>&Gl=bAV6u_Gl z@G!s0z-f86-Db@xlHXLg`B*v49qGHC&p!FBT&ZF%oMBuHtPBe$i%t6+EkMt_qA2N9 zo;pQ=7Mfe0A+7(!Qr>>)bVqy1(G=INi3VGa?-(s_I+Q|olbj@}=jhWuXWsQdHZqpy zOh@7qpS~sAH%BtRm+X#H#PUa=`7Y*oCQG-8%H}Fg@l0GX_NN^aza^C^Lf{dXV*is} zr`YBHm|X4Mq{r{Sdz9I-)?>d?XlbFi{PJH69;nCU+i?GTo8O_cT`!h=)ya4%-OO*h zol=TRU8gM3j#F;R^tI32F7KYQfF)5D&guy#h2QR7lO1_w;nyvFq)VAgkqyr;u@`Vk z5fzc-OsQo%LC_|-^8Ko z9!@g*=a0t-;p=xLeJ12onSN>T?LQkI_1t$?vdlmJ;Jmk+MyNd?T ze(;kY+Q)%NDFlAgSD5DU;q<8H^lZzEx)aauv|W=OIkEZo<_?Ou%oP#)$Cvgh=88_a zPU+$<_FVZGv_{A&*Pd=qk?pud$Q$kAMWL*$+|@1y4c_$dW8$|3tLFJPW$mqD zKb)Fe1x~;|KEUc?ye>w+MyOYK>Aa-x{44(^P=0Lm&E?u1`WG)6qSu-4tWNsNEjRM^ zrRVuA#tQjmX{iZ)KTjK;(7+;BH|<yfu7$mk(P^lK>;X`1HTE_mSEvA zU2fc?KmN1W?C&PsDc}5$!JB4=_tiSSusqbG@9#QqQf_b4t0|a&V>m(qD3Fx`Iq=)7 z9G$Fwf!|qKE(${dC;)yJ%qkb~8^aL_K!L0j0KdWStPBQ)p#T&p7zMy@@Vj7)5f1_d zpg>j%fZyPERtAH@Pyh-Pi~`^{_+2o@hzEfJP#`M>z;Ez7D}zB{C;$ZtMgi~}{4N+{ z#DhQqD3Fx`;5Yc4mBFAe6o3K+qX75~eiw`};z6JQ6v#>e@EiQj%3x3!3P6E^Q2_h~ zzYE3~@gPtD3S^}K_ziw%WiTiV1)xB|C;)zg-vwigcn~N61+r2A{06_XG8hzw0#Kk} z6ac@$?}9N#JO~tk0$C{leuLjx84LcflAV9s~+Nfvgk&zYB)n6?F|w zt!-xq1|yLO&cDpcicuH}_)`J!yI}ZzvaX?7@H-j>zx_EJ(Q7D>l>*>*!SMT3Lt{%@ z`@rB}1pLm*hEW&__*DV$yI}Zzy0NLXy<>22C>o9Gy3RR|$K!srOY|EGK!NlMTtxr< Ee>xFQZvX%Q diff --git a/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png b/SSL/src/CommonPictures/ЗаставкаВнешнейОперации/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..b4293611e3de1f8bf178fef9f18e51f39758fd72 GIT binary patch literal 43519 zcmZU)1yEeg5;nZJLxKdi5J-Ro2<{pr!DVp`5Q0Nsafcwm-Q5>=x8Sae?4lvq;w-K| z?|tw6{;%q*u2WlQ&TjWi&&-*ppY9D)QIf^OroaXO0C=C}KB)l!NHNbBGA8v{7_BHWk zM~sEk*AIxaN^V`4#BDqa#Q!7RP-f#dF6v@m5#v{th|371g#Qb;Hb~to93t94B zT>oo@sjeSvw!QZovuzs~M3=?>^dBkDd{&X&2;l7ce-vkP0?yz+Z5OT=*X8{Gm4@eG zmbS~W&}3;UA2Vc!-JW|~HR@e{p%y(eXlg45Cu}ucsCS(P-7Y=ds}#Ci9|M`+jyaRr zwo=wV{Z;M~iod9dN5J#5uNnFuYmcs z%~H|Z>{L~oCmxLAIoqZKRodI`@n09E9!p-GzwYJ4wtKI{&Q_X6kKLrP&-1!(_?{x* zqA+ZLSuylFC7-7@8(RMSR33jnIfVdp092#}yw7#v2Qkm^Sc!O^$ z_qlG^?x&7RAj)F+>u!l~QE!>U`;ozUh=4^l8LU}bJ41WzG_dRK7$gA0di1kQ@Hvs# zLm>$0L&h$4GbT{FCi}D?Mj_*p{yMs$es4z{g;w}JI7akXn*|Alpn0o7J4Sh0`b7KQGaIx% z?Y1J(fcV*k;&-FUbIR_k9r<*9Ra%PSt8wVDMO!+3>=8Nob;Hv~5kxZ`?&2BwFl7J^ z784}M)F67|ZwuA8W=}Q#bq~H}W@Yhy8n*am{x$JqA$Q0{(o)$H@9|^7#;2!qi!46w z-E2{LR+rC^QG0uc>%DXDccT6D`AsJyewGL>UkDOKF)?Gg)dHQPKyN){zhK{Ri-ksy zD%~Xg$fvhQA=qoexnmpE62bns@=!>!vG^30{dfjIfZ_U~dtd~3T)r%|L#*&#*++lB zwd#IBOy!Whoo>_S&tR9T;?v%m#;|D}{NCTUl#S}1oX2-(vh3&8Q?1q0W1ZF6PM2cj z!%#Y-t!rUL(&GiY#eflldZCP({RxG~{dg^aSh8Z&V{g-H983QYkxSq$cN*U{bLIP| zxGTkT?DOp@tw*4j+H|LGs>wHA+NZX5(WST9_j^~8KM{ti!0Uyb&Xc%Y30{%W>)oqP zA;j=3i+8bZ=2?!@N0`~Z7~h(j*i|;|dy@bjRgv2T&s>-KbJjf9sz!@!68}mXoCkQp zerJ;C%+1=9u?z4r{OJf~hRNqHSxHM&^uleL6jD33**WQD^i5x8O&-E#L*Llw0 zD#(J2QpO`TW2xhRWp70A;Lu^QsGlNC#e@s5hYhwLl%IO)ls*{G-Y>pg%@e&*KUSx` zna~>DX?jG2%nkaU;3baYj@I5>ubE$99j|%s0DomiKdn>N;RcSy*eW{*w@Dow?Via}aR!0~_m|k51a3yIFNp zcP8!X)(TBoG1e}{4!E}^%=zGN!1Md*>;jo$QO}(N!d-W`ul3ZEtyQMpa;{cbwThV7 z=OW3c&ph5cKA+he8GJj)-4l>~)w$^q(`X~CL4EwuAhC0K#L~s<_Bfy>+5?4=Y9U6v z71~nj$5>PRCE0N%igzL!LYcY0zndle_u6uc}Nq#b%#=f{L!^?1htt z>6?&wl#g%bm6@OFCcg5WUx01DGCuadJ$3@+Vi%P>G_ADrsjuC2RX$Ac!NF?9d9@gO z3}9vE&o$#o_+D#C<9A-GlYwxCH8e}8SF>F00{hcIekx1wWnyHW!I&$KTFxr$t^tt@ z6)L-d8?fl;Ypz%rszsItQ`{6usYod{qw~ETfDC!s#dT@6MU_pmgA2@7Hjj9-4=-5+)e4wsZoLjpyJ~^drmseE2E2B?R(X#JEq$#LoUx$gQ zUdGdg(i_}f=v=x({#k`*-i>uC$PiE-bsql3?UNX!QueXaO5eLM?KYBD#Z&3t zv|-=BtBj&5Pw!S{YG6scI#$}b6U9sN(Rj6iwQXz@`^FIE}Y})Nm8EmK1;SSB0NaDNJ?zC9&7%l3p=H7SZ#|gj)bp6FP{tVh=GGGO$R*e6lPOCH9ysTL z#*QUWTl)2;ck$(UqbI2_9DSnIIHvgV@!`>y&%#w)jR(m1-2KtAAf4FMhqqmPS1;I??1MNnGb?{ zkM~2aoth7Sp6;}AXFel!l6Cz)ovrfTLrClsZ!cFx-;3TQ6o2(#U#3{PvSH}DY3e`~ zXPLnI@?PxJ*H=_l>w`CeVAa>#L&-W_ShAp(VlWNL_`>(AGl-anA)^zk)wAO2FEW0p zqhY%DyT{;`dx% z&|mL+&g`I&J}p||qgA&$w?A&@`@m!QMJB!TK`{@lFZ&Lb#|?qr=2{0{TAK3@aIsyd z_)fJ<^xb@i&Uy?@s8J`i+)S#)%p(!Ur=+oP<@-L`?OnubQ}3mgIZZz|EJbNm ze4F1PnI?YR)nMo7{ZpM7aJ*NmG}gXN9;CUE)dtnfWM>D@XHS+UKAoSdh&>E`a0qbo zm(LFKd6*WK+I8B=I=i6z?Fub{2WR-{aijClD?15m4v+zw?iO|pm%lw1lr`?p> zx#RW{pZ%SdTgbw)m!9`+boB5Y?agJcu}x`gN%{M(h+1yo>R}?mm0!@pU}s&W&!zh0 z7jGSV!&!C33zRhMu|Qf{hfb3|M3b!0#3YbyC*2rH5hwGM0=|LrbFqvh&HDn=5k5-DR5z=*$n1; zZ)94tDRQ@IJm_!tSr<|pjD^`P?|sjplsg@0 zEb9L4>iea_=d-NjqSJvaWQ<3Qy-RjYw9w`LR@N9LRUL6Giy4mt#q8V^^Qoh_>BeIb z5UtvN+7Tm$%vVAAy>h%?>yyY7{V2w5wvA&wwn4h2M1<^ zB?#XAX-Hg-LN5tcx;;Ja8vaZPH1avS;U-HlIMnp!E24}*Mg`CckF0KkmyIw_s9B}) zHNQU10r%&`idUIMA0POH0Pp0P3AtuYp`R~`Ty?@C>-R8d_A9Kt#MF!r?Ar|^ee_tS zD<8LKtu7~&OIzA}rN?~{lVycnck)&j$M^nTnm%WBRu|cohjsVLqWRZ4w{NqlLw6~x z=JP`E!m-Y-|BCr^0EW-;D_&!_c@T=b$qqhicE=#*DLl|Rp&|Zn0(w;Gp9M19My7G8(F4S%qavk zNluK|+oQ(2820rl*7;k&!oKZzwSPI}Eovc{bfxb51hLb9T#Ro2V&JsZ>~YqDBLGdn zr#$s3{jL?U*GN(k7rc6~<5n#e+Fnz=x#mL@K->8lGN5h<^){CPWtEi8+q0K#DbprS zj`+G;zRMojB)Nd_##qlbivq8Aax9O0-DGYE(ci*t`7RM~^7@4E^vA5@TP`g+q-cP) zi#L3hy)^p)!X5SG-4)wZroRjwocSm8W#d76)w!cJ2TzW~-Y=w8Piw~iZSBqROA^N~Vk_z$;@*DwUn;=C{W;biri^^~AdVU{+E!+| z|8J*)<^AibmdSwHy^NM)AO2+*?o`Cfsw-j5Tuw~{%%<}Hk_L?gXcL{>RvOw(49$k^ z{~OV3G#0gIDngkO;0}w{^kQTRCl39OEKU&1DR7@UT|G+H``hgJzkt#FrzaekXz$%p z;>%zA;Yzlr@cwJCO|9D>V*>w=Z#y{CpxJ==6^#17-CkD(OilN{oenXP280FvAFolM zxiuFdyE(&Nii1_(7ybIz$HfkO|Pc?{D11Ncz zda&)%pzg@)E4p4fvVOt~{?^P!czx2G+*tzm_wC%O!SC&QZPuoT3~05)bbe#mzS4&& zt6icqewJgCnW}AiS-lUBEfCI8*p`_%hLe#U;f6146UBZ zdQNMl{2@^JwVw^yp6S59{(H6xbx(fU1^fafdKgOsmZ090*0lebq-qo5>eH%vY#e%p z*3s&UJ-T0)zX*qdW5vEv{rkM1*;q39O?3r?i2CUZY8(W369uU4zvI&s`*-&9-{q{h zl8e8*Bxoq<$wvvi#hH9I@GfuA>%S|H6OFT&;LG)8lGWTf`tQHQ%YCj#5rEo6A^v%h ze^p35n@IV-*`jI0SOHAT$ObmB5{#_DTo_D#Rr`?cy2Yodv0WD2=-H*k`(4;?X0LbJ zNFu;KN9LAmBb_^2miV@gH>f~_yfOk0yBe|(c{0Lor`&+VKU7rz=T?K&qO9PxNWHab zp*3duElXmrZV#k(R)-oY8WTGmHj}r1(MplMY|vo!aphH>AMD9L9)o--XWr)};ZO!V zYsym`u4TYLiItCMh6A!Hw<_rVmM2bXOj0$PjQrys!BZ6qA( zKe)Vv*J9!_xZOy4EM|=o zih6gnx3sInKqt72F~3vS@4=Ka*`nSbS7G~FvY>mrP`qO`hD-SOekF2B4Ame)#gnJ>Pzv)C9<&bj(g_n*7kQZ zpV}Jo25KY{z|7!A4+CK-Z>t3oE00Marb7X$+crRaI>qNEniL6Z)147R_Ve!LQp9;K z_5rQJ3nVkoi0H);TXCe|S1lY)`X5Y^-JHx6%8Cc-?2;dbR6;z$FJr?>JHRM_*DpS> zTWL+W8Eg|*6NZva&cZ5PBI zHZhiDv1Ld#W0g?49CQ-S^d<6(*d2mssI!Ry6y)hDtl>M6pNJs3>5f_DO-gLeSXVwl zGZ0u3E0(3(s?p1DfN)kTWQohI|aOPF-S>3dor)&VI z#?_!U?|Zw8f<^>O+iI-GQhS$s-l>a_?btD+pR@tw1$C3w`Eo;C_NrbPD-Jk{lOJ7n zfT>W}Fg`}(PeTK9j%%hXkkqm29f&u+xVk_A#oWcvO9E2W9q?xH6Pc-r?V(R}!`cAx zdXSNUVGPz}c-(IpKMVvDN2H=cncy6m8E-`*|JKN>`X2YuWZcY31++S;8ZB9(WEdgeXxgl697*W+6Q1wro3RV9(0rrrr$;b@v2mAW|!ru?IJfTQTaCqx$Ks%_V(@d zBe+;GHc|EEt*#T{#dU@qrFVAfQ7|6&R6&VK2&Hxm#_OX!!Df*U&JVMoq$=cZJ>HnD zY4@_nyq{s;p5`ZUKaL%bA8EGN*tI7JI=_qkWJ8_)`48rjNo?;YN{~^vl1r(W4I}q? zm4))iwt0_U-M9J6Tmx4a7?$<(^j^-y6x+ZpeoYekDq^<^+6kDc+HZ;`op+dQG^`4V zUSsbSboJ~2QD}3ldw}l{q?^`FA?O3$#>xwWN$O=f40yuYHN>>-Utg5WE*rGQ2^1J&Ez^H|a62iZt*?c%X-kcYk$5V=SE>)`K3Xl z2aHeeL4A_7qEl^U>9;p+s>kf331bYZ(9HO@gqWi9=D5mOi9&fu#nV`Gei43AmIvb| z$ZA<{%iy*Hu5eAV;>J$Ox7xFaVv2hR$fr6_>vHhuMSg>?n_PQtZm9i76}{Bz!{Ij_ z8=Go+KLM4h0YKqoD6OKWq-?yvYDa`~quazxWh*sP@&!5d2z`6~p zM$3)h-yHQS{?tOlbu|Xdf5rwYIH#Oz+jo!pfWiQ^jW=~K?FIIvaCdAI>y=7mXfH_i z={?0Sxgvxnk#A_P%?@d&BV8FhShxR;Z>m4Pi=mh}Or_ z9Aetr)sFlZhvVgn57=IrJ+?>JN@~5pu*Qh~&Z(1~1wVPTC2PWI$nfF8B2Y#rVaiTo!*n4C-^SFVa z|DxMKWL|wCl)RbT+wUbyVH>WvDI684 zSKG0cz{TXeyeeq5NxA0it%k(XQVy5%pvW@ z{`+t~N&^t%bTA2+kI(?YFgW2^LS=C`Yg&=kqmx--cI_g!-?`dOE9pj zSLeOjJdcH7BUPFPf!0&}Pcte1W`K>I)ak7G2mK8*Q~jS$yhZnNHK}~O0>V^Yt-KAI zChldGqixJ``j+HgtP_ZW;fCfyu}tnNvbZ5TR8k!;td_YG_tep(x8qN z*vZI+3dv&BddhVWWd+@6Y%zTTlq!HzIMj@7iP!tGvV}5l-j8Ji!*O<&LwrMM*W68Q z8I7P#Utl63jhh;MKU=tN?>KGl`is0|K>htgxaUYX znH|Vg{a78*(Qw6_`zguElOe7h(?Kx#fUdW-dk$%9nw`I(A~mMbZp2DT$H08k#VuUE z*}WAE1UK}LZ5Q!F61qYV9Got4U8?3yNW<128Q9E0W1Sz_StZT4iW^q$Be8}Xa4?cd z7P;VYoL161(2;Ctz0vQmS}N}}-prym0`2NAU23=THIf0dM!zc?#VIP};o%f5-K8FI zA|GHX+KOR(+>Y9qKBacpTBWdVlL+8EyFV1jkQ)lD8*r>9e$FZWY_p7Lhb3zzGdUP) z zTPL$g9W?#(P?tTjWM_x|^RhWtSoKl9DU>H}CkOEkwsKdM*!3ZB%bo^hw65>Ly5pkS z9WOr`y#gndieM(Mo~Pr^&pN4N?R%75`X&zjyVt^O^4vyIj+!9ez%|$*;a)uvyo2 zcGpR~=ePwWaLu|JF%yzSH%DrLu=(3CUNJ2rV%I~V4gMIe>38(<%}6b2uZ*pSh9Q;| z>N40i6xd@ZsQt%C-K8w<};_OMzYt-LLZH(eQ zmp@67oPK!F0{$Y;d4#7okf(zUQ#lU5au=^`7V^xWvZh`Ul1*8Y;O=@cBM(u0rZEa9 zewPmbYVJ(7zb}Jhk%h|>#KUWb^6P6+z%*dSiEI&UbcL&t3fGq}++GPI1&FJNnOPK;Oy8g3B}WuDU4R2l|*S6q)pWz`cyNFsMuA-N&4z9=53G5lW`(1I2GNfx>5 zN5E{s8-^@pKGIyGHp&C`96wJpeNGVPZ7()Og8f9+(D^VqS;WGMmDSQ2&XS$! zSsAb}pMW}$KkZ${vCyJJ<}5AJ(8T$&oIbNYLMscIye$M(zK@(1CCJiMU?jNb?sS7} z+$YXlj$3HATlM69chc@ay4u|Rh)gv^!n$svEuEf%9eMp*#;@7jqG!e%PjLC6lycjU z@*B6I;O@8H5dGWl?KgsW(ITK4Y@3R1Y0|OIX{z30ec)y?yzNx8R1pJSe#uh!;(*+L zWbp8^^6U(~kQrge08lw>BvR9kUCGx1y=$2=4QKiAh4FNTSdI^e^OncJ#pLR{*vD%- zr{ROL>m50IOCfeTpZP=w#z?!ArcIReKe?=M8cAD$-Sit@&W* zLI(3_tM*GG31X)c?+bPVjT(k6(lWxNs$Zb_w6egi{bAtEe$QtG7&ee}Q@ssx?UrWL zb!E^pWYNKWC{5&{K20auu>*J$bLOz#0hf0$Xm*gXc?+B~0>U~IXA3FOKDY^EoM;E? zswt2VbP<33Q3Z@QmZK z?5+IcAEGoS<$pe4ob{kyW}Uo$!D`v$IcXShsfC!T)cpuf4ko%tV#Mb=J9L2aE(_9+ zpv+-7Paf`@0~>JWW1?Js4rktJV9a2Obn*u75Efqk#3@FyBjU#cS>aWTbV@37+ZAPG zi!_)Yi0<1tOQ5HY2b?!sWs4`QEcJx{aETW6qiT+XiJ|pj((rtOSI}!}qQ>;xt)F=Y zI&kaDQP4#48m;t=V&A&k;p$fLUO5n`tk;<6soh_=HJP?#$9 zKBh;m?I3GJb(tG?MPIq@sB{AfBSss?sP9_@AlVUIdCrAF1Bj{wV18|aF!%4WexbA8 z3%Qw3ShX7%3COzu#wVgvdxh_3GF6UQ`! zOgMDV__?|L%=q3DibGF0GREiVTTj0YnP@P{hV#qC9}8Rhu_(d)EHO>OZ_kp1vm z?!(33^e1DqKEd^3a>L4rvk~(bk;!GkNB5WP)bv{6N0G6rlZ=UMZIETqh1uASBA?ba zHM-)Pp9^Vxqb7?lIDdS3>#nudb2jlJf1Lm-Skju;5g>CM*^a4kexe)gx*#)euk9XU z;pq$u2SgX+tbpQwx7;?{n|H`Wl{lTpJ#orFZ1Pk)W z8JklkHMc!fY5vcE=OdM{FEW(F2Ip#V>T+YA31y~8%Rbng3Dx;ti{N)2E|fMfGABG) zkbq|NwR=L#{v~>hyT(0zJ5FgHiyzejKn=yu;pfn;O4=b)xRoBkY1x9Tdn z7dS)XQnavlOX*=N&0Zc!L;CUQUj&{-{0>)jM#>hFo`Fj6g~r;6S5B9(_!C==e+lE_ z?#QHN7@-{1@_&(dD6;#BwzOASL-0F#H{lr+;gKufMG@LzVGZrse2+;C8=di3E)ixT zq`!oC8QM0_;Jo{?NPHDYYE^bwXN{|hd?E*+!NT2fd9uA$^o-qUlMLMH*8%!oywT8l=q(%*zWwkVJ4{VP?=hgU zk)VD0QL!84UJ550Jyi5>FRNTN>1?b%sMc~m#gl?ZoEzb2TJ{FcFg4I?A?Ib3Shz@N1-Kp1${{ z@2)0DRnDN3pQrPaU4WaFIMHP?o9|y^aw?@9O6`J)a(81ENy!Ps?`^x zAQ3Ur%>WX`w=JAm9c7w8Y&$@@lJ|^;M4?ypS>ZhZ_ZM@z>;wLP`kU4FTT&)(5zTbC z-#c!~i>dWCR=DZtO@}vnQydSu_y_NIq2M*|m*J#+jhyST@99!rAH3QFenTM#M)pFF zww8Y?1Q`UgSaL^~9?e>4*n&$bLdZy~o_G-2_5SC@GaPE-Y6rRQWX(Y)@E&p&NzV|x z9cTnd&pxx{6e%%SDhIU1nZs6DP~J+~WMu#eW4|g8|NdT?&L2EKx(|r9K%ybYQ2?tv zh*10Rj9hwf;GvWiS+Uv?6Q793^m$O{DknJ*Zs3dI>p$T~*|n2X{M@ZD@Mt)l@jz%g z?`?US34e0;_jabvJB4r3fpR^H-{NWOMlj~b>CGoD*kUzo?bi;UgR-DK3-I?hl|cJ8 zPR7)VI`_%@!=|voXioSygBYcS&--$q75Gq!hng(T^~+HeZgXg&W~LP#SZ{?>wu>Ff z2k%MV+H`mQ%AdKriV{|a;9#2&Q5a^k9~QUJ*M2+9H5zkqKJx`Fu4g75L_i8S8=FhF zhcp;9SQfCQSjzEvwqOni)2OB8=1+}IjZY6x^HTd#3C*zLCMYB}R)qLvROuiFI0`pwf?*!}1(P{)Q$R(24(#Z1%U;gCr(CwL+ z-Y`+|$O=wIkHN;UB?r{3OAP0)x}mM-<{y8_ejL_;c-`4$gcvGfhq080^Wr1QRxXG| z^g-AQ%e@+t8kAlTsMs?dU8hugU}Qlvvkn61XydVVYBCsq27~4UTktE`_N|7BJOn%e z@n{4Y>kB?sk?TlP-=AVH>j}p{{Z#Hza%yT@u5%AsmyrDBtn*U%{YJ>J058y@vWrtH z#jKG~H%zqNn%Xd>MR3k~oc<$Y=7q|2dg)d*ym3|VG*r1vMo;T)W!>iAf!%ae zo7H_D#|#Ru?`*`y`5OXEZkYMO)$w-SMBf>UYGvXVxZ)3L&k<{&7MK4B_yOo}Yb85% z$s#@nl&PKa6oD?9JgUjqny)EuJ8&!>Sv3-Lja@_!^n9*=SbfK_SQ(Bfr7h9w&%g@Z zz(b)Z4*~5RQtnUMuYjIYaKwDA7Y#pwWKr1G-WM^3P z{2v`EYs_LLAn+6WZeH}l8Pc2ESBECwR)SdgW(|0>0&@IG*&`nFJT zfBS4^gYZ3`^U5xZjT3uSdJ&aV-Wr&BP*WWqhM2g^iPp#Bf2VNjp9Lxa&Q89g3|^()4IV0Me2*% z?ZGp@>unS)6j2*P>SqFV-Xzmpl=Swu2U5>8S_1b8vlO%T{6E8 zd3Y&4;xQhqO&bj1T-o_Z0>@33m*GDwa-iUqJHyh7v(^0UU;Qd z7qZ^q=eM9Yq%7cUrmL^-jrlw5rx^WkL-Gv{vf8z`DokrF%7!evTn1w8k50}A8E%=V(WNTV4@VWU zJ)GaSSKTRQ>;`{@l`;(`;T> za+5Jn9Lv=379%y(up;*qf-2J~x61hARc)Gri+GR%Xy-UH`X$+f^}mR*-@XZVvuG`4 z+>GOHxziuRm77fQQdco{1LP%2^|texu6%+2-QVGSL&hdOQ@$We`EYrAHU-l0rRgmj z-l>24;X*06=<2-uXb{F9Ew{dzDA{@MvoVaLnV~o;ny&XmXJ*0!Zi}Inffdx8oZ)) z+Zc!5$;g{Yg)9vt18Oc_90_-qL-l=ermoFBZnU4MAVHflJrA{>RA|r1nYES|das^K zHB@4e@%cY77Ic)E8OdVY32J5s&3(Ks>MjsMS$C&G9&}`IEKo4OLDgYeJGMs#PzPNU ziI>b_(qMIzE5X0Fq8Jz&yrO@pSdNE1e>pEs5*hYy`3CP>G_Um>SRJZZ!pdI_tsc46 z?Of$R>g5D+gT!?MhzHFw&GD-xnsS&Mds~n@Q(R!`Z4qK0HrqjOj}FTZRmzNuU1!OoI)~A+}!+%NC2>BuE&g$ z3e1s-x8h;q0I{I(Ug^6kp~m1*6@1+PXAZ`t{ma3>Sm;Vh*LC_yylXv(;b7UCs?Brp zL?t@&H)Z?>mN%m+TJ-fEB$nNBMCPoI&ZI3#@2~mxwUw2+H6%(=g3reAoky=(ntXocz8qD%h9sRpgzM`ZwE0WxC1B;M8H_3kxv?%e@v zhUx@>v6`Od=Lclbx{}{E3F2TEkOJxRj8}u0W9-nm(SNWyzTnqHqRLFhXmYAw*D?3+ zZP}tgH|VL%1uEZ9bytdo2?pECkz#em=Nr%5Q|738s_;OVmy5|Ht1(9$X9CbdMH_Li zI?=O^$UhMbusLI}p^FpB2_Tax&e@)0&gn1q26REtybR}*(4K4BKs(aq?*Alb2(bSO zmvMHV^82B%lu6+IMW$Mm?!-Q3L1iBERKlBK^v9`k%sos~3}+EQImyvLZBzJW6vF-* zb*trp=2gxZVupHK#>$e667#8`;3IN1nRH1a`oVjHjDl8=pK6E@jlbrz;BR$E{ZQwmQ51!xVb!3- zfdcy^!i?<;NFQ!`0D$MzCu3B2QzXKvhZFe$&61abL*($>+2zwn)oG9 zPVxMo%?5)tS&rn>9RNO@atqVGF9Az?5h{9`Z+pT|Pq>4ORxQo%3Btd%!b zY|7vF5Qa18-w%Uyt%w08{(9B5?&RyKu~nd=?vAJ5m``LymtmCRc_wIoc5-0SwtR z<&Dy6us)CAD@5w?$MBarpum)fqrz|)>z?STmF!;sm5oF?KGL;g7zuFp;;1=xhnJgS zSv50fNJwtp!)btZ-4Y9{Z@(qp-eVO`s6K;3anDys1v7xiuz$+rcv;a7Djh3|B>AHu z42y%OsO?~5H#Yud%fBMNw6|W1q?d+ONTwhO5Y4?U)$l3toJKVGGW(tj;(dezzF2z- zhYKT8th~3our}>|Z=!)axpx|Ok6kL6gS0UgE3y5l+s(G(Pl{9A2+wKD zzGy5Q0xo_wnMSYG+4)qi_3TqWgLBrSVF^ZdsI&CY@Z<2 zL>c|1-u&m5W(u7*8CONBITp6N~0$CC1GijrP#0Itw(oHXfM1G20qVYg+X?O`rHTds!4=dj z?k{ac*VHZ;0Fj#!WHuGIjO%|Pwm03Bf5L*&tp@r=p7)&y}sWq zwt_FRLd!AGmhmVm&Kqr27oDR(L|CLgeD?80*n(Cu#6=OwA#Kt0qcuP1vvdT9y57nj zquhQ%cl8S6W|LZoFehDiwpaFrUmDo)JMtF&;Tsod)safW&S0)j;B7es7-;}VE?-Zm zQ0b{#T6j`Hjp^Kc%k)oS?V<{HP+agge;Mct2mvx7CkvY`nxPj9Qq*iQs<2g?tJH@E z0#;9&;k1spSDLUgm4y>Ztt({QgJJ-0yeZh{1sga4)x%IU)NKsb&X7hQ_9xsIi|!0% zMiE0ik%LL|@dtpDvy9w}88N>F(R6iBbpvS!6fb?8Tv@;%aPKXUu3xzYRf7%y)KN%g zwCKj~K^psgzpM_(RWBT;a?0_guNe z@Gos^E_x2M(h;S%a0Y1nh@Wgg-9}rnk?M*?HesU11F)&=7P45i?vD|eu$GBSzi4x<| zQ5=}aQ$p#ZlyxMWH`bws()=-nw4~vO`=XbDZdp{`UvyV}s;;uA_hnFT<2(M}nuDFS zmgOPIHpc&89Vsk0Rr%HCqyW* zPYdDvm%u=D;eh*wtKY&AtAJp%MIt*Nk~f$D2^3cAvyDsS?sYW30i)mi5vHbE0P)(7 zlWT6pzN2BkFz9RaYcSAH)xknUS+oq`BmWnoXMNwyHM?N&c7vxh2WL_yl zERyw&Mk^}WR0M?$h;uQ_P**LVZ)$gK6rgtRcBx3aA_`C=e_^w8kyAWgW~^@}JKTRg zir2{VDoJ3!?TT)M24~fx+Z}?n6YotdVG-%wIBYmN`2ph%JO z0|(X3%Z^PbUT9g*;B^ZUyzqfJU(Y}_lVLKvm`J3kdN~A#?W|ZAtcJS$dfmZBgKL)2 zZ|J3)vntDyNa694ASJ0j7-j`1r|`?izmusvpeTrSD$&}&9zEtRzb#flkJx2Fjj08* zkpoP4IbY(HPow`J1pF4G9}Y`!ME7-Kpo@>(ynD4QB$P*i(798o#nt-mX3RsdeJImH zzpdbJYGymo3tC{aA+O9dj-0RrX;tludQOO8YZaIxxe zqpDjP5!MstjxSlGLZK6T22^#e8X_Lp8~MZ$>%Vu!aD?cFKA>(NqH+&oJ72NtG$^WG zK?YoYA8J(nX5UUU623v8bqVp`wMCw6XYS3 zX(aBH^Fvk6s0$Aarp&4R-N9UvS&2$iSRdQwF&;uQ+CFAog5hHBYSeuMLW;F)I#oV( zmQ2tKNnp6+y~lb%yz(jbQaobWWNrKSURyw){5uvxx@fcSt`hR7NqUf za1dVFBckR`MzMq39!+W9NsRxrd%XlKdJfo%%-kjO(^q`glyBA?J@|!fm!G7pj6ut$ z=<5wY4yszXa>3tjumOO4@XCrWW~?G{DX@6rdpKbW^U`g$t=g)f)4lLA+)ZEZ(Z^<< z@4Qyk@fr42DqVY$uA6h_p1jiqV66T+zF`BX-2~=;C#r@GYJH>K=Eq^uJ&C*?P{}#$ z^gasDs{=5QPrnA8>yNiy<2Rs6m^1_qPd(MW02>P=k@^i+$k`i|HflVjusIqN0q(WV7Y0wKLuusDU}ksL#P{ZJ!*fd|3wuE6Ih07MsVyc1bh z-46GU;A-r|CP;e~fkhdBymf;Cq#8gJGrcS+Z5nHJBB$`cKvw&jeH0Ja9ta-{rm_yt z-d_U zQGIpw(rb~s;=%vULee-1n+t6mOwxuE0s|iU7dv(os;fJg77ICk5UxFxK-!R4Y9n>k zn96D!`k6zdD3o#j?Lz>N-XIYW(fiX38%-q<3wg)58^}WvMcwjP64Ey=g$ubKFW1e(il? zu7v?d0LhNWK7+Gx;8dkyS-+Y4YXp#NmC8XUQB;}nIYEXiMe|)F(-}2@VskSRjFx3& z^y#Ibof#!S<0aLvl><-N9PG`|^;w?i$Om z9wHVbj@vyl7dj>yq=nJ~;zEr$x zUfiHV0GR@xy#)aO4CaINx+;)BR$p0E&AsEQ4k@JY>NC{OzpEF37-MrbXQoDRXX~k|pJm8;`2t9`v7thSEQ3HoTMWL$Uc(=l zhypeQ6dkiD1O-BjoH%O1Cd_(35J>^cR3Yp^uZy|>j|3o6(2<$9YSUPq@1#dlIJz0rV234ds!4rACH*ggPT0Kf}UiJKd?`Nngq)#`S;QEB&NGfT0|^9!a`nW#8of$;oE2V00OH*{|BW7i6uIKLOoeV56cQP1 z(qeZnExZU|!a>l#6AJTluMP6P&8Y`a^<}mLfLyK@)&hX#b>5x;;!SLSl9!J9qA}>=qYT#buvy`6RY^1uX`!zHIo>h&vfq^4W0tBMsN@Uv>-AT*A zqIhJZ^*GR|^CVPMxEi-1NFi+lQty(vM{?D{cqgesLwu)&H){});DQ7TdQHIq&JWdP zmF8ubNSEE6g+1oP1=V=f{*sU<{u~E@%+H#PO8B0+Edau*jm$vGfV41Iwui-J_hN|z z!i|hjwYh6QGQA%C{xB9ytKJCpRam&)Mf|Jw?6MlY!Yra}2E7J#@a+71KB`q%d*Avo z_Lk{1v$avA2md2I+Gh~<1CU-|;tj8|fzx*a^r>GVSQNb@P}!%gh90?O#rgH8UGenF zR3bx{vU1A$sn`AD$&l2b$h&~`f1bK-36xg%Lod?#y_g1YQVqR z0>Jh#`?R1!AtNsZ5U8-2r&JL6+yOwJ!8m(47>|Jsq`L~xURYHldwkEyqB-E*^Xt?c zQRlz$dkuix^MgpG?GyQ{Y|-3?y<5Vhz1um-NOa!js$8CXp?CXwZpsVmS^+5f z0AVmq2btg0pl+Buqv^-c=OdOo?S!mcUGnyU@HRcC7E!l(00qBk&*1P{9R-$QkljE@F(|)C3OEw9%cPM| zDk}y!uSQ-6@cSW172NybUjz_@khd4XgT*$d26W*CaMT#S9#Z1WTR&s~a!5qn92(RE*VPR^L%)wl&`M@-WOfWvs`j=6I;LST5S(_C}=m7Ttj zY!rYb@LKAa&1eJ%Qj2OQ3mipVgs|so94aeb%Xi`Z-tM`D0OFeN(SUQg1@L%819JT} zw+k&bQc$G@!#(D)0}BEM!9w>6(%7+K@+62H!eLPSei4oZozN)Ee9e%OSHk(*V~&_d z-3v>qbL_lo-U1*N*WNH6{kKRUK43sqBv&w;Yb#*HJf`->0s!&*!oK%H8Gt|nS%n0G z^G($2(66sRy?V@dnKzl$0U%>3fV3AtW8M?nPRV7<=JzN7Z;alLrtP>l^EL+{-|yw% zcXSc4E$K|BxX!@eax5bW7Icu@_jQqapvc7)j|>X?j%Awm8(v#9%-IghF?=ttjOb`O zt`Ly?y4!MWTZ8i5KndIH(Z+bQq(m&BP0_%0_ljs94C<0HlF>ki>DQM%(ZB%VrwAw! zP%asv2pcebPU2DAuXDh0Z;icDU4DMZ+4}mn0o=So~6^N2h){=Hf=heeN*$l- zYGsTn3oH31BoW;;_-6&>(tbe$I8;;JE_c!QzZ`(v)CWLpR?m9?;>{P4Kvq%qA$+)T z@ImxfyI}DZ07wgfNbsoB-c+hzB&s; zA}H9+dX{h)m<)iHc8=YY<9aP6aypvQi4ii-jAGOdp0J}!{?0Jh5CDepPG&}ACw3L^ z$jrPRZF1>s8rv3+rk+07n<3f$^;MCDfNPT%OwzDlTvGHe07ns6GII_Ccs%dPk&JV- zD;z`5$0m%=IQCOCkYUIZ8NlQ?W-OcMH3f!1ph(D2v0=?!9Hm#7ziefAB3-CYMjFxk z@5VQndM%I=+AR$l=guIK2Eu3nEb6-eJ^+FmzSH7#8F~*$5#!|afZFHGX-Fx?7<~Or zIKd8an{w%k-*;pNfOKc+#%t2So5@}NZ%C@O2{5w8E2tP(=V88qJV5a1;3GZaH?5#P z+<`suRj>ns2Tm*H-ix%0Qo0As+&Tj|wKJcSPb|^Ej&=YrYAcKIY=X2fcR@98fE@>n zt^Cqs!d2Rh&7ir`EqFKru)GO*w@}~bNPAQ1%y&S6GL468u&Drn4^9K^$4_GK!~{aj zgZEL=Ab@yRccOPdNSjntSR#R-?|P|;pSz%IIpJd-cx@{~*7z$yEeOMKp3v&X-3pN^pdzV-PshCmF{|e*!DG2E$>% zkW974Dpp=lzjVi7xNVRD?)ErfmiY)D5h00SgC7Z)Ych-9{6G~2@2Oht5JGqF#(_du zErQ__DCz_ZeptS{3K(mKR{kH^w8_jl0g_}1ll1o20=M>I)eR;pGy=mBbqpC2CcQlq z+dNN}&Vy-l6&{Y4pge#_Z2}XI@M~R|0E34-Eo9Qe-knR z(~)6e=Y{=k{_Yrn;6h;mb;s@6qLw1$J7`Ax7|s^w2EFTzDyWQk=H|NJ9&e6?-7pSj zdLzcp1&pnuW@BS72F+&~!@5^t0)%{w{Q?q32dn)KB&g9H1px>#K#EmOvJd0{>{C|(Jim_dOX;I%=!O6S@3PU|pb_Vo9LJ0LFtke1Rf6#|@BI$5 zk?_?PK#WA;cU~c*7%` zOyEK=?$zcj14t&oXc*FA9N%1(EkW15g29b%S*7`XXZozW!|3x_-7!cRcJRZ%M>~=p z^H`nj*ezI6TRw}Ru=fK~utII(q`0g105onynXgAWs=Q1wzK{|Aw#zSJIwn2s2>b(T zBH07M%YZ@m#8Di2gebDRrm?pH@u94HsvCEfrrtLIL_nk$)1#JP5?~+_$SKr4D}m@& zeJ(;(7Sf6YqUVuLlFniNs^P5c`oz}&Z2O_h$6gFFPNqaO+!{Ut4htIGYB&v0?s=C5 znc6icAk9I&_Z0HL?__o-VoSY@BW6d?2a{^#?bs-|Zw_`PY=%69=Sat^_A12FGQV~A z`E9TTrFAYA2Jw6^`s7-u^5ON~ABCK5s2xmpuBi zF&3=$k+eHm0YGFt8XJfJNWnM=Zq?t6al3>Au>SCBRsYb-aEiN9)xQC!F=D?*`}sX^ z?7*hS9f(@|2M1L1!^c$TK7?U81eG8@t$&NL2fK|(AdJ|6RaP5q9o>&PK$}J{A+V@w zCjHDeSpd1?gN9ZiW3`>=-)B8sqni{VGv#au2UT#- zjlHma_`B(=J>1L!69_gAiHfga@a5{|4fLXwy34~W%g@-)&;9lWa<6+ujNDr}76Y-J zBLy@ptXEO{dQEP>ohkj2I#%M-nB)xQ(BKLWYOp1I@STE&&qO@p7kUfYv6ZD2?HS$k zV9E%M!80V}0HP^KHCVYPyJonWGf^cq3TbBqz;zHi(a(WC_&a&_kgC7_ zX*fGTBA_SM!lZt-8#KKVQs)y;T`qyq+q%PjRnh27fFNKnC}B}35ZCfNckg1=-$vx# zkx496?8?I|HYx!KsY4?=C6Jp9fb?PFjAC5>0KoPf_|gO-dwg}Ds=o_k7?MTn-hT-&$#X6w|RxDahuixf*rG7c{vdAJJTzxm(D+Y zHj0VQPm?Zy4Bg;?ik*07a!Gp$Bprx(ZA@nVZuzSYzYZP)c6_8nedgw-DZ8h-%4eJ* zlTVpuLM9}(t1JU`Ouz>wFw^wDPk;N{`-b<0qMq8%*QbxI64KPhd}F=s|12X)nwYe^ z&VpghYHyhfyP;hIBWxSGmVscVUBNgAxUB4IK6egriS$aou^)_T3d~c^zSi%`hC9-0 z3^9*(f?@3hO%?zwr@(wJr0KHb!z;+tGnv3fHgh6gIzRjhnet}NtIi47a;`q88i%lh z+R!k08O)Zez$>vi@7P01?SqHc49?YtS50l=DwE6_TA7!g#kD3RFsNQ?J5cW~-C99c ztcsWdI{xZErSp>L&%9>#D}zdO=GepE;=N z-+{xmjsfgne?hJOEF2M*x~loz$5rbWu2&-;JEGdZa~RL3)W|2EQ0;&JY8e*|I)mV9 za}mM1!+pBv)u&D~f5iaE-rGNbVQD6fWvFhD*_F4)XqhIQ==fU?ppfDDOey%CVcuwp z9r*4(^YaF5j?voZL4EuQ#MLdO3<3s$!-4{VfFFVbLLH}*4liTHi9?O?jX_6-$4|om z4s%#RN5BY1KoQ2*i@61KO1Rp?s#HDzw`7UBd0fKWaPc|aL+#%J3Z{MhhOyRpy1Dy! z@6e2H8zxWf)mXveTkXOsj=l0ls0eO^zJEVfxLA?ZUWdW=1SZ;PPrR4BSOMEd{Av0; zl<=Gc>G!8iZ?dp;<9-PqoHLD;{?$+|(8vgy)lOjW&VdQCot`S7hE<)uyn0w*A2W6Y zN($rn-DV#kZ-UYMZmhDQpPmQvJ&l#>m8%F6hqjJ`aUyLpixsN%2F!)lKv^T8^EII1 z4vdursgGz$pu2+ptfT%N#BXZu!LXqU1xK;2;OvS~NEWDj0;bTo!n5OqbA{lsNPCi3 zUycoe$ISo_tkP@G?l+AK+h}j6^D%EdN%O70?Gat?`)`LT48VEztQz?Sv}Xb;tcSqx z?|xiAe;nt8P?`XM@T%VpAiz5{7{Y6Np(>*UG7m5Suq2OPFKKJn!oIe-trfEsD@Zb%f6KDuAos~P~0?w_Nt-vfYzl-l~_Vb%PrC!n%ocy~w{ z*I>LK#rNJ7mCTH(&Tr#@E>U4|ivTz4V`n`UhK-EP&-8IG&|yOuO8&$U(FAh z8NFw?@-$2&Gog!ZB^#^43MQ-%K6X+tHUJqvKLQ$D4N(7!_E_nm#Yx0TYTKnd-i!b@ z5Ip2E_mEE=`H!Ge2u34dgp^Vx^!Cd}#wOgecCtJfxWFTVznP47Ppy)c;1 zs}Lgl0ffNdHvvW%h6fxD7;FF0L*I~^*sgVd=6lhb+pOS%rsZN ze0uozJ(BTf8O@*-?d422koS7DCCOxn*g$ul@OD0^vz8G4+7oC{o7q7CF3{JaaQ*;(ZGRSz6X=pYh^ z0gRQI88w3aOLg*-it4JObWVk}_YMGv6ijI&U<&f4{cvn@LNlT+8=Ymsg9C{7z5^)B zwEUj+Cpmsw>3|HK9|8xZ1bbRMSEgj_9ZDG>I3*03#6fxCK(-7_(o)autqu_SIh6$T zvxL$OS4m{pO-dEWfHubSnA{Y0C@qjNp!2AE6mJJ^LXv8D%sB)zBMtBfO@&o;LO@wT z82}&I1xj~Vs+N4_y9Z1JAdx%+k^f3C7OG_65t1B*O5!Xe4S-ASRshFKyT#qHcI}Kx zz5-zJX<(%WX@5}145JU2u9aTAypk!j{b~<5j)U5GySsdrBTR5Iis*pGTZ0f=4kbcr8im zluep%cjp|y<9W32ik+&l*QiQ(ZUv+U=>mSsITrYXAW^Db3h3Y#i#~yEx0cZCb)e^U zDCR zHvwe%&s%EpT~NQB!#IHB#n{^eV3UwHG;ZU=1r+|Szv!u(xUS!a{<~*ZC4Y{^(`mE9 zu}v%JNAjNrrEy%#ubffi2Lfr64+fAvn0)5_Rstb_I0j)Eo1M{|7l?h8x2TW!%>hZEK-v8E^W`QgX8`w@ z7CmNs#w{DJjJhZTW|lO3ZrV-BfbUXj;5`~wxf65(b)^bq48M6A9}Q)5=rnPy^XbSu zOM7mt(JmteWuGNepb3G4-*cD<1P*@7aPsre zf2SZpnxc&Y7@DTp#SBK$o1q)OX%0tiH&y2(JcGvJ&2v4LGFQW3`>RlKK!mTo8mqF$ zU{kpRlF9`b!_VU!?bqR*Ke!fP4@S+<)tKyRoNkM5#^sqOtIB-^2ayjwYbc4Fg+$^) zL&6dTw)9@_&9lSjKHaRfRNxB%P?YRZCX&j8T zXkUVv3;p!|eE}^)^m5SU;Y#nuLW1D&Mc-9B-&H}5<$21a;xI*9Ar*C=!wP?218&=i zT73v^z5o#W&7_n%mi}-R05dB0M-Gfa5>3?jcVHZjBO~$)2I#aqy@QI>d;np!@0rml zzPwY6;&S;59CyP!q69KAhE0d7ss)FRu`Bka@8lZY=Z5LGnfDnlERjI0G~t-4%=q5m zK?d&zl}&HHr9tR8e*D#|e~%JFooT#xtP~^+TGvzpdK-Y8v|d_-z!;xmO#rAmpwf~c4^?r)$s z&kK+c>}oG$%F-5}dE1V(V3YOb|>s92-nbk1Umg&AQ2$uPYnz@c~Ud1#(t<+u+mHrIIcD&+y#<@mMRi} zd!3WV0g@0vH`=2OV-eBcy|x>!pE!{%0WdVK!NjAx?@lv$E||pxRc0&5b0<|$San|k z#&ODs_>#591i7|hd>{hK2tJGp1XWAAxeaOQtpn*!T}9AF+M@uG)09B%`10~&ydz(V z(GAfm7`lgMF8y8?wy^drBFI9W(3pbWnp!3-0{Vea4U$8x1!?Ob(vJJ{$CR1D5BvdD zhr%9-#*`V3#x0I*rh&!nHsD zZa|#u7$~4yKD}4}+(SIu4?4Xcy8pd!=l(P7;D2nFDZ_7XK`qK8K`&`*ep$7SbZ}-< zQ;oa{ix1U*38?qrC3m>1M(-@K&v<1x0D;=E z_ASq-J^>KhkNiCbMh1_P`XL(s zP~Pd?n7lxLxY%U?+6R+x(1z`D?Ll~jQ*-!$0U;u5b05@O1QCd;lumR#yuJtl%hA*f zk}$1(p2^2+-xX-ryPj3czYIpcyh}B%YpCU4Sy2=3no_M7vE%sVjv9Z@xN1G62Y7uC zYWYkHI^QOM04q04u!(ngE|!*X(tWz#G(4{ygI*AxV~t%f{7pm8PfgFK@eZB-leLL zfX-ff2=dFPv7mv1O^xwEyi;>z)gVs)H?A4lWxjkTwfyR$DQ4+?$}r{jP^F z_94yur?>YX($d`3yRv zaxl!)^<@PB3Ey|j(oTwyxd(p>&3tu&9rQ-J@zrM`h-DbFEzfp>&BuH@smn{3tE&ef zwqB;Xof)V=!0Z}VVBY{$XB{wl8rh+K=pF-8<%$J^vwOXY-y4WB_FrmA!oWBepajwAy^_H;|FkaeRTtGevxq-~-I6$?@UVOOlIRP+y z3S;<8SB=~X3FONFkhhNF8%D!7(Sr=lehC0_6!wZ~j6?v4g37BlO%cDNCSGUyiH1~2 z1p0_h)O{X@AR&HM9g*m(AZy^x6M;eqQFjEPrWP~FdhnVk24Jk6;bWW4%!F|J!P z06>5TJ$sr{S`AnVAi;vJ24=`ls*WpYlf6aMbO2)Jz2E14-OX?M8d$YtvLAhP59<0g z*bYzAt=04+6Y-+PL4t^ytAcbu6;fxOQV7QUm3y!NG59}s-aWq_z62uKg!!1f9RUqv%B1rrv;FPe3ssQ1oJmN%jYrF{HCK(tq#2~ef9Z2yxM5sqZ_mU z2ffXlK~bkkfk9@v{@b>b*f~a3qo2->*>vO+JZiL&T#Y)>Ztc_1FVALk4(ZQ%Gsl)k zdb}0%xB}mgg8@En?O9bl(x|TCXwu zL`HpTr#0U5y#y^&7UzR>3?`)Sn?O_Sk*IOe@}>Q%{{9oL9?3(yv1=QK`_F?R9fl|0 zZB!SczPq$qB*DG|KCkg_?(Uw|EAZqi+6XJ)ac&WP4*frZ4Ek4s@gNdNu8G+j0wAyp zrs_DajhP(T?O^Z>S-y+~h;{cR!}t4LyqIjCF=RQw0xFzjANPWRHhbxng~in$132lf z&1~ne*JKoRg}Zs}EZp%a88EH+t{un1kH6uxP&vdQcuI)i8>TsJ-~nq!j%)})cCdN>!PbFkeGL8-fpAuS^z1MEDBXb zKI8WQBxGn-6(;kzAYI|A-hhsbQXjM|U|4YK10bPP;^$`vTMjUa@;1!N)^)7_0ui4p z%f@bm7QkWl1eE$D_9x6kg$2-{DA8yD@ndQLh*9Ifn_lXaI(G134te(#aCY z=3(;8l#w#}E?jY`H|O9cXw(_)my_T15&yJ*`}OnkW$Bpg!Ym5`#EvB`eb9p`xeE1` zIhduBo*VWaewF};9h=F`$OnBU@fyDbwT4!)yDKMw5KIUz@B))>?jDEkJo^%W7Ax8| zcGEZaBF@p2x8c)OFJL-3AVSGJq3+HZl!ZDzhW>`TdF`&F#^{b#ehpzo-u)avz((T3If3Q$^NOkoq_Z{8&C<*R34n1&}{ zb5Br5QV}ZKq)snLuXT<|Q7xoBG;459sC7Y)D=`+vEuSzpgd*Mwr-&MucL!%$_>?X# zhg)Z$Y9xSsGk_C}o{V3;0dzTy-(<=Fj@oZsrxF4y>-WfRrCx&$Wm*CS=3(tGv4Qh? zbS^)dY6A#3Ov{U4#Ju?TegF;tNjIK^ zssJENb|cEZ7Shv~(N{$w+q0u6&EMSbEW%st0)i+WEC9Hw;Nhj4dF!{U#y|Xg&3zxN=d@+71V{I2i9#Nck> zC8XoPp2h^($yE~uBHMH2?KGZ$i4PH)1OrLd3Ci~$k5PKDLv`@Os zViH45Ks6oHB#3I-Wk?lBcJ=WcSS3PbgPpRX$}n@-=_?B+(tfYgsHQP0Yk%8P zIH$xjoOX+8q%ZO?4PT(jYpHy8)y|>a$MK;=a~q|&Kw=5=qv{bxb49}^8Q>fWIEQ|~ z#zFGz@co9aOJCta_(!<^;Wcl~c08sD}(phFh`Qp2J}^MEXk zGQ%`{7UW~!T|R`U0dgk#>&k2(%+{e_5dY zw)GC{>aRAvc4Z_H;l8HbW%*cg=kpK)vwQ6S_R|J*wU}w!?5pdz;fp(l=@JZ;k4Pl^ zP|aXH)@1(*fkLYX%U>Y0J&`C0;t?V628}M0Yz(9J531Em(((9MPzA#BL5-#bP z=3Od*`0udhp#%~~8Y=pznn2d6_LQ%3Hw z9V^6FxW!W6htuRnaPpy|)JVw%f0v!5LDi9ZJvxtzkVg^reW6UJUr;ZvikcSw4gH7g zB{+dif;$nkZ#NiWI^Z*JCpGl7D%m;iy;JM*oERA0uKw!#*cUJ-LVh_MJX?t)9Rc^6-$Ox0oxtq&$CZmPz6*TxagKDl8vBEKr1#H3uMO zbor_&JL25CWaxGTTITLC=ghm7A$ac;)ggC}9bg!B;r@q`{Cri7G$jBH2TrD5y;NA{ zUHugRh?{^V0FqHdS(^GZGQTN-FqRk3JD8wq0OhRU-U51*o|)(ITjB%ZThvN?9=6@m z*c$~b66)+^8bE?brwLca^I(3nVDLDLLw3+RV6&syW8RtenfhCLqHWx-(&b(ihIK(& z0S#_|6!k@rPp%J4zt}QFt>)9n{>E*q!g77-rL*sFzFGje8Z;75Q!h_9Q|vw503WWM z^|_a+Os1~(MYNYTk-LyLaq(HS@iCdz`Dq%eEkZ`^J*OJ1jf0rDFlgcg%DN5j!ZbXR zRN{#lV4;!tP7DaHkROKRL8&!UmS2!*XPJN%RvYUKv7y!9Y5kNpAX9EFvh~0t!Faz4X3-0xgflfzvXd4GMz{(2W4)wh#10X`RXW`}1 zj$@FtPO#@^_2jG?yE=PdRzmyAJT|wo41A}Bc!VzK3sFT9ycp-|2qedT7yF?gpXC=$ zsj=%2vc^AFpeQe2s`H=oKI7H_gw+0NH8Xj)kw9Kg351u=@GTQF-|{@X#{uXu%wFJA z3I;ZRJ8Am>NQUXy$?Qu(mMM78!d0d)qL2{;?ev+IWNGSEG|@R|3Rlq{ZJax?SFT?V zH)2iQ#288y6wAdo)g8=(pa6-2`en5Xe^V7>BViCksDqy;c%Zkr^VaD~^~r$DBiV)L zJNOqAsNpN(@ZTo$dq@hJ+SXh8OX*i|1{6mvN&KMQxtU$4!nj zh||jqba6&;8~;m45cUCY+3{t^nyznVqDd0`Lvfv+PrSHsaS~-Stc`t@&zoiz+4As= zySHob`AraLPV~}}-j)%R#b=o4vXdSz)?P(|@q;H+J(+O27#&C;MZn9fdjUv6dqe{9 zPu}x;64He_1cH49!3lj8u}x#UsS=$m4}$=6@|@USntLiR{IYhk4ix%}>R4Kzv<}h) zldg;L**bY%jU9&FrVJno`dsnogB|z~G6>dXQnM~e#UP6Hr0m6FHY-2kzZ z+&=SH+$HJ#3E_TQ2IA+($;|vbCY$+fCwtL5_FY2-2LL?)DN`3|pc(ldb8~=IkdMdk zvT?v{CmPyFlL}~K0Yp?#_;5!lZ4weh&PWg$BQ^5~dY?s+QSQVK+U58?Nl@@QxzJfMT?~b;dfjX&;l`cKp2sm)6P;kQ* zkmPT^&tQT4EntNEOlL#r;Esd|S%yayYzR%9%WiE2$zfy6Cs2Kr-a$SkZ2Qt7E>8(8 zq`d_e**wX90m$0UG}#b1ItWiPauvL|#7))9(-svC!`71}ysIhCHa`N4=ZT=YmD4?ZDC!SYtf%E|hsrFJu zFe(6-HclYyg0GBTy}P`HjKo0a4jgr>c45r(n+pxOEZ@Pm;8#SqVEfbi0yCeABpWpWFPg z=#r3QwtaqnHVbS9bI&>XxEovCQOWcnhKrFN2kRW0RqZ3thhMo^yXAf*EkSC5d%n!g1=JX%OM1T>YJ zn7*;axnk)J1%i*m*xJNO7XYGGp)$dzkO@1opbQHrrj7|W>hT^xqyu-%&P%675~;ry z_ijXoJ`2WwzhAd(+cPA0W5Ta+z{n_3qOaSulW~Et3x|Eddrz1OH|CMqWUlP{*yf4= z-vu_1OfnxpXn3amuAtt2IfW94Kc2F+s#Aqk0w6Mk=$`!gb4oq5S5&vTtCIAQFTZu_ zyks?U<*sa&Ibjr)C@Djv4}@n|U-cxUp7rsF>!n*oRAfqGP0s5b7APQDP{I(Pefmuus~xcz4z^xk&{pi?L&r{ z0UAGVo8B^S%b2|m_EjZC<%KJ8TfYn=H1#+4vH)VrqE`(;f+wKycu)ZiTUP@TZfN;P zUqBlxt=MMx^sx1k$ekV|lhp%0vdPV?^eK+oRmB9sz{GyyijymT*B9X=_WLzp{F&*| zFP$An{!6`>Ucl5c<1w7-1@&^T2h6RB$t@B{LH<6l5kNY=x~8bEhHM$o^YhielRC!3 zDE#tAg0QvxI1VyT>lB#5H z2V)FW~}Fls@i;^l`kZ^g)`T4)pdUC=fIaKrDaxIW_tXx2XDl zE5+DKnD0!TQYjuP@eWn)t*3%flR5?tNY7glZ;ET!IDc2M#pk z9j~KoTj=7N0RXQYZ&fWWu>9M^*3r6uuKw_$E}Mb>n1-9xtWH~25@-|EL;QqHt*10l z#2js1~M}#&xlj0wIC1M|DgmEs#kC>daCCMIgi(7fQK;n z+?B7Z9xi2hr5Q-b6@myq4S)*4q_q>01txa~P6l1E?q@HXFV`Jh)sIm%hWFcu#`*|$ z>%VXY;bEp!<1o(Nz<2Pn_h&)f98HvHZ#fY-+`!MKs#;EDySMTe>oS*eR@v zZG8w-9Q%&$UOTaeC}Cu3d)Y+{-?h>U*E~(MnMW^NjeG!xeXlbHKtj7z$%`2PDWWTB zYMJ#bSTH<~zUX%qRkHwu+i=kq)zKk%Y1ykPfZU2j4x zT%@Vc)iD~m-NoWz^^4D`@ejVXyj9LUJ^&WK($<~c+?zRP0ptw^K+5b7g;Iyl@R_5X zP(Gtsg9PFOQKmyYfO3pIs6*%hCDrmKdPWUZq(1Y?u)txPMy4!w3F!Q3qo7nl{j}() zt=Mg)3eyR4K$pqDN)R^2KX2P3R_&ouxFvwVK|p|@?v#^`zj=>&Sgrv zB(u1(mF2GfqB&Y#A9^aOI#g4Xh#J%_nmI!dL9jgm6`x)rIlxNJUgC_8w4nO<_C#ngIRLV3nCSWXA}>AqEyI>3nHs_;`y~LfRus==O_MSVmg6)0Jn)+<=9}qflj?H;lR@&tmDQIPnT- z+PnfmGHFv_S$l#72}9oq<2Mz-Cd6bEG(GS<7Nplf9ef}dR32Y(PfCCnx7*L)0JAgm zYV@8PP3oewWx!2o!~+$V3=+s0oOCD>ND+WI(2(Jo{rGC1oWxQAKng*^1A|Qdc6|8H zO`XDe2$QxH^&|^BtBZES`%KH13b@juftb<-0fV**8{R|Gc`7HV8vgM&1`!l^&z(G| z(|4eQ7crmuW!MTj+-%3y1oNQufOp!A4Cw3B-FU$>_{^t`biQBdBofk;jC#|)?9(h$ z9w9@sjKDEfou-bJbKRcTBDeJYk-F7$Yx*-yLv|+G%P+(JE~=yV%snnkUvNM7PFlyb zDmqa@MqJaYZhiUn@qSYR=^7h|wSCz19u3l#dSlQ{wxF${1n1?W0Rc9xy$EobRudn6n`F_E zwEWDd`oZ0*`Kp6D?212*q%Eerf_CR=h}4VRXF->+@Jj2=5v*gi!MUJ0lL81|S)uw@ zk0XMc_Q*qegrjF@{m#)@y{O~CRNS0NTZeCZGsV`?{u&(ya{V0kJ957cdqEP6=c8cU ziRWrt&xAGiFlZn^7~CbeyM^GvA!u-S z4<0PQ<-c`b;+_ZSI^A8pSJ$r9>m#XAAG;dAxGH}-|0wie>cd4s@ms(*^WyD2_5jQ8 zAgmU$G?aO&M2|IdZoJ-S9JM)Jrn9FbuuyB=Cj1zcB>+c z|Ac{kx8ULFEvzb9?(%}xpUM{~!u)iRI4$fjM!En(Y*UKYu^?FheX*yR9>C4S-fp^K z;Tw5i6DhzNP$qy*|BYW*Df@tbnA4A7wZB;uvHIt<Hmt=1xR^#1 zN2hO754f!(6l>fJ1JqQFf2ze>2po?cO(MOiK*$d~2j!}!UxeCzbpGQ*7_9)i9{Hv^ za`Uh5;oh#huSE9>_hjen6BENZCe^!;a1OwrQr=%C27(2peNbP4ZntR4%cIQFvy{k6 z?Oc%|A3+?V!qPGL2?z1Rb_9Isu&D><1xCyLvVL!WXvJ@p9_}^cyRWMa zsBI{zz%U?BHGEt5Ww)051ehfdlWmS6g?Q}xxN3uLS7;wsz+ioqa#8a6U6CTm-!b>S zgzaYsG`k!U#ezkBL%OHx^pZ>eN7a}4vuyow20wlfa`V4A zvbwsHA8wizLGG%t&}ECJe`dLI-4iJp&pXSz-jACNj@Qt6bcjdJV7kCNNZWQWhR`!q zB-1^byj{U69>l7IqQ58fPYRjKg@0-50V%+!gAc%j4HPu|G@ zy15$FSsjz;KZm}vZ7*^{f2(RR2z~AiBCHm2(|wqsz|92{d)fEC3yQ!Ffb0PMCtOK6 zLPb|yei*Xl`Y)xo#RC$#k4Nm8w6~?N5w0lM;g&z(0fIz7jmWDI6@h!L&o~?1ZXbtt zzNsb&A0#M4@^DkoDEI>Lq9NDw?>*>z1Ty#ndnIp*;#Op^2!-*KDzCVysZ!qfe=21W zNcwux196r_AsR_sllHdBG;-vEM7phK$A zIvsH@!Vm=lm^Hc!g0->=P!~{$Ga*#!`)(p+>a#D2hsu)%IuPM%+*^F_>C=*M)1A@S z`|WH4cy++oPHrP@-}g5QEP@YzGtX;Vafiuu^cz2Nb;;vqjhG^^u#V6tBBQlR+|`#N zD69oQHEa#7oKfXWSay}D9|TyW0T}vsS`jwrq@b}v2-4gw43ou)2T*r^7dpWkgKgk5 zu?l^s{I6}3Hr6AFmmD9yk9_6xfgr#fLIlgh#0We+Ab0K460b>5K)&v9uWoIvcfYMh zz+lVhS;f|VwX0BpRG|_^KdLdMimXu%yNApeTU7;P8~)`ZhJJ)n;ATCaWf1<-I3Eno zO+_OmE#=H>f)JQbZS<}m zl1%qJ{@}U0vucg(Tx`EuOumttf_9B`NaeS>JY?^hL5-UJK;?wYeyHmhfn_5};h(=a zKCE|Xb3J_?%xeolzFd<@@Y+)N0~2%B?6y9#TXU@E{+3SB;!gYFwa@xHlMp?GpZO*o z5x|ybH;5RiYq5AlJi~zpT>MCtlBYnx6s*ul)IU=3B>_7i&MPZp*C*^sD?j4Cp_?)J!s zXXpMkCoS~D_EE@`+-68pbN^J8Wmxp%weBIz8 z2d!a-fPpt52dWQX1dhN>H@_!QhsbvWzdm7Ur2@^GIe5$$TGxGX*~{3<3z<=fGip|k%gUH9{RN85MjF$qm&dS<`HLUc;bs*V`{N6F?L6M@45g{No$jM1`R}fK+^R+VlwbnoGAnG@thDt` zb6tnEv$c&4>TL)2K`)i-%|wpQ_WH#@9-7~5SKbd37Hj=}0flG)BO0lfmQUhO@7rG| z1+`5r>$dJH+0q5V82iz;0W3DCelWk#kRw*2hi}nm+<5Hy)(GktA>q_ek>Fs(vXE)y z&g>(lLiD*ePbut%eg?z6Q$hfoY#lQSBouYRFp*@aD{3e$@mK*_!v$(qRZKvMOEu1Q z=laDHi?`Uz=#fG9RsgeYE&scfcJDCO#jfF@8>i;jhws~UDN`lhG`#k(4gUwLjowAQ z061@cg0}y6yFCqF1hRkQ?F<{1j8u|6>y$ce0FtZ%DY(N%A!wzboU`L{?Cq#=^kc8D z&!dZ{483{8TwUHi1oJgKeH<_a+@877QChy5KmoBU0g>^mhd5%4Yp%xy7O=LfFPkHA z!Zsmu5GEYOw+xUHmsND?kkA<<{CBLF zVEZbIRa{9dQJ-8_Uky1XIIqtoxz(tBZ5|h5=h=r=K7KVqoCSA9JV2;T`Y&!ZIAj_Y zPm#5;5hxn`rcs#qHr_V)Il|4Mv*1&glyzc8a*GH8x$VfWZ>n84Lju-EDM=E{1<-I8 z;M`FKJzU2KLq8ptN!Xh}vKf6lucL5Tb{Khc%e!2DrBhLU%oM!G49 zxGd!#+wbTcu@~;IFW@JJ()u;LcZ0NmT_QVOqyF_bl3W#9gq214xneRZ2yoK z@bBQ?JBX4RkBF#rZ|Or50RF|b{d?-EB1`1&2@6BKS#88XM*Sg}f3Sk^{@;SZ+PK{q z%BPCrGh>6rpHW&@c}ol+jSbZ5L?u)oV#24LI%Ss>@&{PnSqD_=qEoE3!P#%5t>6E z+MslR?Y`;~@x7pHRl_x8bmU#V_hjM0CF2huSykCv<*j4oJSew~L^In) zSD`hxkn5a1!jzp^eLwT7A#|?Hzf7_+D9b?+%!ihXJ}Seaphr%tfpr{YkKfbZigQqb z61V{v_Q)kuB>b_;6}Ip8wBQ%IHg6KuB-&KL@H{7`bnI8WG8Y075)e@k4o4A1j@OC` z?~?FLZ>67s$KknfB$*6kIKX@U(dU)!Ki%sKeyjNU8F<#qrzw1i2xl*k7|cz$C&Xan zOa$-{<9tZIXslrbZE0L$g;%C|PMk(jV$aZu!&r_*7 zPxv~9E!!qIW|!wB!RwX1hXlmt&(5o8-Jub-JJmm-ltw5TUmDVU*^)q*J-xUl5=z&) zTi{)>c4T{e#oFi(e&7i3Mi_|@F}AzaI)61(Ed2bP~MdeB|kNo<|qCQ zvtENilC6iY3Da{)5}Z7|@t1K+9c}?pa!7>XcX18b-=r=WV|N#_3pNt?gVC9hljHaJmsBBqS6uUQ&;gJwewf2km&#>X zee3z?K_=~KF*3hdVK3&91~RZHR0Nv3`L^7oDOd-9%J^bMhsIbaY^CX>k*h0( zW8PQ-$uaeg!q2*;5l8cNMWL_xM69FB{DHn|0}fph+bz)fOCu5HYx3bgL`uPoNXobn z&Y9*jhvF(15=ucWpz_sU5e{KU4w6#EtUWS0Aa;`k9hhlqD^50JBr?!EFSza$hsSAq zK)$TFmSYKyk%{Vi$t6ACl;FBn4RrJ*Xnf~pD zfmN%hUCaTgxVt$oIt*e7c|j?R<&Is$){PC}hi&p{S(M6enSaRs@RQ$J8+!Q~;g>{v z-8T#T#`HE_o8ooksxKlDor=6Mk=51nz2O1hkI_UEt0TJA+If8K^wd_B8~ z{XVw*b=Z-B5sZgiM!kG4{8*&KNp7&`e8nGRjL!#T;-5qEq%jK_^Vm- z;ua(e?~4i<<!z3hC9%941% z*%Qz1sYpywI^3QyBRempJFqx6v!aORm~jlmP`K&+Jt+zuzSjrn?~@aHHY zn&+(ZF!V^KdVOI;QXMrJJ$y6fdRD^ zj&T%MJPb^4n^G)(&!OmJ&5re#r^Fl$1#1L*C+jGcRLpe&tF$?4GAmMRpTI}wrYEnFn{+j>01yJezdEnCMs2ycgU(w4rcn~%c zl`u2}o@apBbUiWm8#0TEJMZGrqWY|S6|kr*F{s({zbX}`r{$?qEeqdWCBH(ik4o0f z{v0i&fGoSj(`iBiDrKQ>BNPPM0R8Mlr25qI9AY)?k#01O_-yoV2k0=L>|+<{!5fJv zsU9e~`tJ-6Wd!y!B>v3m`#K0t5r4Xsu%(5CG{|4?-av^C=sP-(gses6FH3pV=HZM@ z4m)PmOKT^YhUOS^l@3}Ke$?;TM8+5N!-lDBITK=rhmn%n5YX>6DBkN;2{q6o&&^q**M2CJ+7 z49|io4^-zbmrKb}9Vna+E35{Y??I&s>h|FuV~mRQyIZ(cI*^NTIItj)D2(=zS_VKHcrM1XV5!up{8WR zX}oF4v%E(?D={Zj*1zn7A)hkf?%2EStapy6bgP{?eax{y^|6;Bh~se%p$>rjVLX=} zFFM9a%Qb0(7=kr4J}-b3+Cf|&?aw#d?uVWtGJ>|E@IkCLR3$%}NZ)9JKfp ze$ME*HcL%83Ov>hSYvtRwXyy@ObJ&pEjJ!(g?}80+*gPxV}D}jx2{DCMQ4Ig4Bm7L z-zn2K7@nv^4>KUc;|<(qdP&|gt>wO%P_dl-3j3ZyX`uYe(3(S511!HNL`O@pN516Z zS-7iAjJbh1Z<1uOjk!ejuauk$LEGG3XVQMfj^KfkVQ11-MTaW5uXt>QD@}i~PBCnluyHsyT|ZVN)WZ{X{nNd%TMudgto*&< zqy4JfAF^0!ObAVbl(2AunI}F8ZhQ8Y-Onf?NQMgEZK)t!F7vyfu?I`^^X}p+UauQr zD)#g#;w{jlixG|}{IYs*3g9Qrr# zw656oAIo4K*Z#;CChq=)C4F>Q>T5px$tW%lnChGaa#jbON z!C5L@4`k{XFhR5ECsHQv&g^~lH{^SoLee!Hn*Pc2-*9F^QLsZI&by}@BNjK`n&U8SV?&sJrZ2G zuRF@cF@SKr>qqRh(%3t(5cRfrertoW9|GY-@7|?#-7lBz{fqq?Apau@&s8ts0wB*w zG4X7f2BJap6FUEfmZr!9NJkC*Fp@(e)1k%S2LO&on%XEP^9?oepEY&r>&#p1g+B*- z>m9G{<2$~DIIek-cvYQAC0PRoo_G!lzT7f|@NGH9c0Y*-Wt4atxWobrH`0s{3>wc5 zHAeETK|r7)x(_~iUUhy|D6Gc~FCImb2+eYIXI_#>9XA)u} zKV!8zpBuoeu$;D3)w`^1#x|q;sLa-Z{d+6MEbK6f6J#)(sFuCuh#bqF$XQ&b9BitF zND9JEvIY)NbXMv9RAeCq)xSz}-QC#Y$^`ikbXK1h!iu1wWijaxZ!l(PN3lUfl8Ock zTop|fZ^}&35}ds6X8DRV2RbVxJ2lNhP~5i8J97Zgm)4>d+@PGy%}qxmXF4xj=_AUk zFw5hGDbN2!z*oWbv-ivqXZ!PAd_ppPo_l%w{Xgz_4c2Upwmh1GSUiM+)d9^VeB{!U ze5!A#xJyDY86!^-zk}^4L4ptil4PG5O6_nw>J+pI@oP^cpf@zmqgAwBL!Yx5bjno3 z$B-;&5+VQa8gc6@S(Ni(;EzR_Msdi|F}JaUPX8;Clu8W&OZYHkfLGu)SvS_+qPy1J zVlt)77^H-Aw%GB;kfFnK`3CIMe%R zJ0F5pmuvSaI9nl zf^_c#m*gci#4;E=%f8F*lUFn8_J~t^jl6s#r7G3Q1;Gzx0K1-;g#=CaqL?<+24MgI z93?FK8IoJWJ_9Re%BXZ4OEsBZmvbq3`pn@xw@9n4x(t`x;Lu65S!yWmq%B@@5cSo( zN$SR3?U9VZb)HJ%v`?MWLW!}K=f_w3wN474#LTH4-?m5DoKcCsvT7rw1}3d;%PtwDQ{eEXk|4PuXfk z=gmjq0)Gk3w0dZ{8pvdI)Val#^>Boz!z`%9OWBTic%8_2IFpN!&nvl@bUsI&Y#~J> zASew!&egj0Oz6igHcIkRMv@puqq11F^AW~ZVXX_nR7o&is~~U2)SDG7z~B-bL-6^Y zQ|Br6E3uO3Pm70Q+i;{=#1N=GLU4db(}&tg*A_wNcb|)3-<&)XgsJR1v!1>FVrC93 zam9RG>14=Yd{j+Rxf>)OfR+>mcE=;Z!EO(w4Xbvil+yy^+`VRoldPyQRc}|Vsu)m& za}fK5$;?P>$%_t#hctfKPB+la1S?ehtYl0G`MTrSyK$^xtCujfk>7CHGZ^CZaN54*VM{r= zQ-`a${X0ThYz3l~RNeZ*^Rj1}W?_PTKZOXq(^u;_TZRcx(sq!0uazU>=iGNA;X94} z4Svn-nH&00#@HlN0*c?=ym7mt)LovkjrAEccWhOfFkXF6n7v6pMSBzb>@CJRlM01}h+(8at2EDvIt*qLE?5?z!F=t?bHn*WM- z5@?xi4eEYMf<;)EhbD+$6{2NqO_^Q{&n$d@nnE{y0Eic}6EV&av|bQb>48I@*=Q7Q zf4NjEwZnya!oDs>he2=9Oe0E3(T%UbY}YEx&OQM@spmxT&4=bPQLHE`R)j=X{fCd7scREIq_{P2GbI=ChMJiF-t3)NW+n7 zR(*S3Ic+Xo?6~4Cfzhw;UzAB$rI5zMgl|wPnIFvuLy7QL=0v9WPHn&No-6Wh;>=%`;0rFrebrtgo457flGcY#aueykw#3-B^@;B=wbVn;33I_(E6RGZ5IHc6-u^;nCwkXGI& zjr7{=$uZXnQc~r0X=NFj{AJLLYYppHBxujBzZbs~tsM#pc2#CywU%PR(xGH;+==f@ zOxMMg(5i8K4>*ntS4sgJcDy#2E*FP~B1aVRe173HWvV^zvm*k(Bktrr8YOKaR7Qht>f0f0#IK8k8?C>={v)?1?%%h68#8 zik!?VN*4B{PM1H)fi74<9oE4VzD1b{DCz%c2c^(p+h@ zTdFrm_8~4VTE~LL6|!`P1X^mH$zm|Hq{E`G)+2 zJWa5N1nB#Dli3%5`(d#U=Uc6fE$zJ2!Yy+qxDNG3Sj2HR!`S*}PR^j^I2WJ4_6jZ8 z@ThC)Sl}bOaLR{ND`lR>hRBX^Q%jA+cra0bkKx)f9pyubfmzKpAU-4}`l!Pcb{=gg zwNQ@>$;gwc1wsxY8T>-u+(aLu%5+Rk4*aY)fAeM)2coFT$#*wDd!qlMjSRoRNxAbX z?4BzIIk2WqhAM0HC7McmrZw!sk@Gt~kDF29uu{E~)YJ1gUUH%RGw9|;1e0!VU%=UzYZwhc1BWetW=h^$nfP+K^;VgkFaMFd`>+!(*qMyul;0!8 zh=Ik7E9%V2$?+`>CuWXhae3|IpEa{c0RPH2{7=!u3;$IRlK>IpN8^x_bP0-$PinEY zUP&cXNJu~k!0OESoUhv&VNiYlEB73X-gkNRBHd$7DE%RbBb*#$(W#~W3A6x`9sxx~ zqeWlU<_Al7o_W$5S$eDgRQbNnJl3{s&zgyaLF`55PidfeW<77A)`&(HWE@vxPLzLx z`3Y210sTAro({p6Xnhnb2|A1<|TRi#90Ur4CdJp2kkgrN6T{&$4xiO++XDk%9Yyjpy2)0|0+U~~y}wR~(5Jh%5uiub5&{AQ+h8*2?4>eD3Y+p#Jg!^&=03W*vZF2uCHEdPsg2f{B(W(XnlYbG z=1Lri|Fs>S1p(EKb!T(O|b!rZ5=PyWv@3uf)o6#A7*H1}K LO}1LvJmh}>%x1E{ literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/ОткрепитьВариантОтчета/Picture.png b/SSL/src/CommonPictures/ОткрепитьВариантОтчета/Picture.png deleted file mode 100644 index e61990314c24cd1aaaeca25edbbc37d42b8f1b92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W~!3HFs%y=IPq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6)AYSIEGZ*O8WEvzdf@lqcHQ-gDV;rv-L??WGRF(2qZ9+ Xb~8&)R2RAmRLkJ$>gTe~DWM4f4OAoR diff --git a/SSL/src/CommonPictures/ОткрепитьВариантОтчета/ОткрепитьВариантОтчета.mdo b/SSL/src/CommonPictures/ОткрепитьВариантОтчета/ОткрепитьВариантОтчета.mdo deleted file mode 100644 index 0bababb09..000000000 --- a/SSL/src/CommonPictures/ОткрепитьВариантОтчета/ОткрепитьВариантОтчета.mdo +++ /dev/null @@ -1,8 +0,0 @@ - - - ОткрепитьВариантОтчета - - ru - Открепить вариант отчета - - diff --git a/SSL/src/CommonPictures/ПрочиеПользовательскиеНастройки/Picture.png b/SSL/src/CommonPictures/ПрочиеПользовательскиеНастройки/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..f4cdbbe8f73b67fc7446b2f38afcf04f1547d4a5 GIT binary patch literal 913 zcmV;C18)3@P)Xc zbykr%y7@G9^AFrWWlj`CAAD00L48yiCWv6eegl|v?5axohXV-Hp|qhC~mgf zYRfjYZPK4KNq>^~b?O*6KlmV*@1C1;59eT}X~KM`ukSf7%j%IOOMN&P=GCT^jrx3j z_}rqq`)>2_@aRA|9P9Y=b`;&?=#p2i+}!&3@w0*c{$TT53^})W`SMxLDL7a78~m47 zuWlKXq_n$OEMTgt-Kt&eYtghqrD3FUb1_(Xg*&%&&S zGO(--7{-D+O!UnHjuB0&mJgbS=}RP~`{?2KfVXdlI(gp4FLViQeNUc3PR@bFVgW%A zz{1d=stWoE2?S2ynxy%3z4W|PDt4B!L|fZde);nHe2v#z9~qx$8IMdL$~5?VKC`-} zS~GP0HARxOI8I=KQld62um?3(IjF5CjRVl?9e#K};rLU~o{0$A3J@ z=hbz{K|2vNFf(9e^vf}i+e5#5|K?lWviet?jbDQ_Kw{cK%BwIo7J_IrifaDDwvP5) zJ%PYtx4W`1>%_lj@4f>YnpdrTVS@SU`}FtwMZIu}rYv~;XZ&=rRM=iuSGT^g(cjwM zzNvrSFzH2oIy@e}#8~JfXU?9ys48lrs>&l?yMFP)*RLaoCnqN_1%q#<|H;CC;!L18 n-#~FDP@E5 + + ПрочиеПользовательскиеНастройки + + ru + Прочие пользовательские настройки + + diff --git a/SSL/src/CommonPictures/РассылкаОтчетов/Picture.png b/SSL/src/CommonPictures/РассылкаОтчетов/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..b4b33e6f2bbf0ef6b4761029d9f1900e7eecc682 GIT binary patch literal 1635 zcmbVMdr;GM9Ix_FtDYQ(f^0XlGC6g$N%{cV5xS;nElL5~dX@=d+5{S)No@ly9llV+ z*X9NcU$|q_>3o0=hs?1FbGJDi_!itICpuxr9UCAzChAr0qI3CY0lQNlEvp!K_W$Yr{hY@+~4vx*^#VI`w+?qqOfQ8JWXhhK4&?o>X0ud~e z=^?#CP1-1(*GU?^NhYf|$0{cT%6K5oqu>PWB#Q$cdoJx#co4y`u7aEUwm|_f3}JH+ z!H834eF~svoFpIj#?;ua>4MFgCuBO%xwdi`@@+BKReE@hwxcYv@60_}ERT*GJ=Yasu1V_dY$RNx>% z1LtyV}aDElkIQAhejKYva8WW46hV(=O9=0YW@y(zhRq*1kbl>h#lDqf*)T&Xc zqre7T^``2ACGFQ+bIH)tbS>Hb`HibRA3L^unVaOgaV+)x4_zl(DmN?VC52i3ZhF*R zss0d3?fvtQ)t3g5-huc_^$}H6_|EXBo@r|%NKMDi9p`p zOOqobE3c#hE27RGSQ{Yf4UT+*Exos|FT+s@&Dyr?$g9m4iw_*x^oFF1=o@TDR`2L3z?v+WT9AsGCKmDAWa6~hkJFTm_p~b(O=&xsRWhUJ z3RV}ypW3uwe#exXXDn{SJ89>V-%d2a(SCWQ=s@AheDl%rjGU)LZ^umk4X^p{-~U%# zZQxp9ooq{pQBvl)g%q8QLc+nY{w8WYtW2)bn|=?^KfO08q;qFK-`trxpRzR;%w!+t zl~+`p9aX3)adLLY z!$)^L0Shz}7u|OYw0(ocC$GtLHNBkl#;|}xiGfh^cMq?%AiCAWbcg@#o>RxqwM4Ih zVvNV3S8g>RYT?p%T84)I;Ys&iK}p0vvcdzwFcI#iuK zx8kV2YEHhT@M1|Ql2PeRztH_GxF^;<|t*EcyrJR%XQj literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/РассылкаОтчетов/РассылкаОтчетов.mdo b/SSL/src/CommonPictures/РассылкаОтчетов/РассылкаОтчетов.mdo new file mode 100644 index 000000000..e3c0d10ad --- /dev/null +++ b/SSL/src/CommonPictures/РассылкаОтчетов/РассылкаОтчетов.mdo @@ -0,0 +1,8 @@ + + + РассылкаОтчетов + + ru + Рассылка отчетов + + diff --git a/SSL/src/CommonPictures/СправкаВНачало/Picture.png b/SSL/src/CommonPictures/СправкаВНачало/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..d3dd82db620a75470096c18bafe6129145ed6dc9 GIT binary patch literal 905 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GXl4m>B|mLR?+)`U1+QMmNk!?_69w zX;s(KozvDG*m>g0ohPqey#4t9|9_zRQ7{?;!!-m9-Ax05esl43aSV}|n*6|tnJ0qP zVy0yvi^WXIhya!dNePJ?6IgCYIyA`Y9bkNBY*6F?lviNl@tIR#e4r-9nUgzV$CM3R af0!8Tr*KHjU2Ay_6jq+DelF{r5}E)DL^t06 literal 0 HcmV?d00001 diff --git a/SSL/src/CommonPictures/СправкаВНачало/СправкаВНачало.mdo b/SSL/src/CommonPictures/СправкаВНачало/СправкаВНачало.mdo new file mode 100644 index 000000000..33666725f --- /dev/null +++ b/SSL/src/CommonPictures/СправкаВНачало/СправкаВНачало.mdo @@ -0,0 +1,8 @@ + + + СправкаВНачало + + ru + Справка в начало + + diff --git a/SSL/src/CommonPictures/СправкаПереходВниз/Picture.png b/SSL/src/CommonPictures/СправкаПереходВниз/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..a32f4b5591b20c43960a83ef09073971be5a618c GIT binary patch literal 1051 zcmbVLzi-n(6t<{9P+Ex%6(MoBVk7pQ?ZmN_5E9#^5lyMmNDW&Z`_fpAeXf0N+zwS? zD+@zs#DCC#paV>Z4oH>Q5CaPv5~wgRAj&yE3PaTaOZK}vf8YDwd-vY%!u*5D@f+hD z$4ype%{sH!()aQu_PzD}#AarST1~o0+O%g!m@B)ag+bM~S8yHM?&jJdE^ypf+iNsw zvo@zY#24%oBP4#v*c?|VC86!CVhUP##S4o3*MnC)@Z2K5l&!&9XyA@FyA|QZt@(zt zwd!atU%CehiOwAOnA#xmyFsicMZWJ>XY2G>e7$m|VE5M8ca|q-V z0Vz;Zw7Wop2#QD&p_)NZ&#F2^VEFJ%Eppp>-JBU}v0ahxP#Wr@*z5I#o-B}PMMRpW ziBJ+HDZ>z%cr&1Ok_qDJkp~mUPUMBuBLPS~+AXq9i#&^Tkb)o9YNw8acvvV_GBL43 z5eZQA{WPyWI;M5}H;gmUabq*YVjah1J#yH6w5La8R=e|sQXq>)e-wG_QtYltoOK@u zv}zW4_D66%SC + + СправкаПереходВниз + + ru + Справка переход вниз + + diff --git a/SSL/src/CommonPictures/СтатусыДокумента/Picture.png b/SSL/src/CommonPictures/СтатусыДокумента/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..2fe9f29a960c46f1672cd2cb463826c1a4f9d5d4 GIT binary patch literal 685 zcmV;e0#f~nP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy2XskIMF-jf77I8czG>Vv0006QNklxo&=kD&vwRR>cfrE~Xv-ZxTOj+fvmO;~WJpV!nbxt2 zD3mr6Xfdhkfm*J5m;;@DC)5_`jROuwK#|Qm_hGRSX8x@0m$9N1hiz>y5O5BG2A_f?I@UKEwl94F`%tJb>&6 zn#aHr6$Oavf!5DaQvjj~GE!K>n3x#Ya{MY#FR~wK9s}$B{bnf0!CegW&pb;D@?zlA zw;w02KLq*#h_;`+me;)yRD_b6rioX-YSmhx1(z;8Bq@*K&jZLtLCmLe3;+WOXy}?t zvohDZUwC>H$PNvK77|3}F+6zynBTtt{EcQl^g7=c`-oHd@95M(CH;7?K|)J1D%fSdPou? zKF{DPh47otzz`bBL>w{>EeB;9RK@dGt^+z0= + + СтатусыДокумента + + ru + Статусы документа + + diff --git a/SSL/src/CommonPictures/СтрелкаВнизСправка/Picture.png b/SSL/src/CommonPictures/СтрелкаВнизСправка/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..58d4c689747b441eefe4deb4c6503323ffbc9743 GIT binary patch literal 584 zcmeAS@N?(olHy`uVBq!ia0vp^+(693!2~3&PhU6*q&N#aB8wRq_>O=u<5X=vX`mo` ziKnkC`)zJH4kej$vt`u4Laq@dj-@3T`9%yX*PZbI3h|Txg;oF&M`+;I?AY~z$B{``KE8bmFXJBAt@N{tushE@e=l^$W=C}hb zXDUB_e7(>SJj;%L|1 zp5^cNt+)UF<)yXA^o1)9yu9RWe!uST&-TVf$EXhD3m#EX9g`ayAHF_s-=4Rxb(KeS zMdt6L)9vg2@BR6w_-|Xb`TY8SAAi69)~$b8EG{V_A>q&e_rH%7>ra>2o4-V1#?wV5 z-~O>DyEbN4znfeA!R}bp#rqy}IvX1g-uJk3-s9Dy$Nk!VHiegjVhbOgJbGOIZ_koH zy+ + + СтрелкаВнизСправка + + ru + Стрелка вниз справка + + diff --git a/SSL/src/CommonPictures/ЭлектронноеПисьмо/Picture.png b/SSL/src/CommonPictures/ЭлектронноеПисьмо/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..cb8d73d27c75f459bfc7029d66c4f1c08a4dbf77 GIT binary patch literal 491 zcmVQMu zkiET!W>e+4W97#uxC1V9Y4-q{It4c}%MNL!W hFa`eiKhv)O0|3WWw9f& + + ЭлектронноеПисьмо + + ru + Электронное письмо + + diff --git a/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/Template.htmldoc b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/Template.htmldoc new file mode 100644 index 000000000..1621f1d23 --- /dev/null +++ b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/Template.htmldoc @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html new file mode 100644 index 000000000..78095ec0e --- /dev/null +++ b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ru.html @@ -0,0 +1,11 @@ + +

                Установка обновления конфигурации +

                +

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

                +
                1. Если с программой работают другие пользователи, рекомендуется для установки обновления конфигурации выбрать удобное время, когда с программой никто не работает. +
                2. Завершить работу всех пользователей. +
                3. Завершить свой сеанс работы в программе. +
                4. Запустить 1С:Предприятие в режиме Конфигуратор. +
                5. В Конфигураторе в меню Конфигурация выбрать пункт Обновить конфигурацию базы данных (либо нажать на F7). +
                6. Закрыть Конфигуратор. +
                7. Запустить 1С:Предприятие и продолжить работу в программе.
                \ No newline at end of file diff --git a/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ИнструкцияКакВыполнитьУстановкуОбновленияВручную.mdo b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ИнструкцияКакВыполнитьУстановкуОбновленияВручную.mdo new file mode 100644 index 000000000..ca54400c2 --- /dev/null +++ b/SSL/src/CommonTemplates/ИнструкцияКакВыполнитьУстановкуОбновленияВручную/ИнструкцияКакВыполнитьУстановкуОбновленияВручную.mdo @@ -0,0 +1,9 @@ + + + ИнструкцияКакВыполнитьУстановкуОбновленияВручную + + ru + Инструкция как выполнить установку обновления вручную + + HTMLDocument + diff --git a/SSL/src/Configuration/Configuration.mdo b/SSL/src/Configuration/Configuration.mdo index b8b22efde..fdedfb183 100644 --- a/SSL/src/Configuration/Configuration.mdo +++ b/SSL/src/Configuration/Configuration.mdo @@ -1,23 +1,23 @@ - + БиблиотекаСтандартныхПодсистем ru - Библиотека стандартных подсистем, редакция 2.0 + Библиотека стандартных подсистем, редакция 2.1 - - - - - - - + + + + + + + ManagedApplication PersonalComputer Russian Role.ПолныеПрава Фирма "1С" - 2.0.1.19 + 2.1.1.22 http://downloads.v8.1c.ru/tmplts/ true @@ -33,11 +33,11 @@ Language.Русский ru - Библиотека стандартных подсистем, редакция 2.0 + Библиотека стандартных подсистем, редакция 2.1 ru - Библиотека стандартных подсистем, редакция 2.0 + Библиотека стандартных подсистем, редакция 2.1 @@ -62,9 +62,22 @@ ru Subsystem.СтандартныеПодсистемы + StyleItem.ВидДняВоскресеньеЦвет + StyleItem.ВидДняНеУказанЦвет + StyleItem.ВидДняПраздникЦвет + StyleItem.ВидДняПредпраздничныйЦвет + StyleItem.ВидДняРабочийЦвет + StyleItem.ВидДняСубботаЦвет + StyleItem.ВидимыйВариантОтчета StyleItem.ВыполненнаяЗадача + StyleItem.ГруппаВариантовОтчетов + StyleItem.ДобавленныйРеквизитФон StyleItem.ЗавершенныйБизнесПроцесс + StyleItem.ЗаголовокУдаленногоРеквизитаФон StyleItem.ЗапрещенноеПравоДоступа + StyleItem.ИзмененноеЗначениеРеквизитаФон + StyleItem.ИзмененноеЗначениеРеквизитаЦвет + StyleItem.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет StyleItem.НедоступныеДанныеЦвет StyleItem.НеПринятыеКИсполнениюЗадачи StyleItem.НеСтартованныйБизнесПроцесс @@ -74,13 +87,19 @@ StyleItem.ПоясняющийТекст StyleItem.ПросроченныеДанныеЦвет StyleItem.РольБезИсполнителей + StyleItem.СкрытыйВариантОтчета StyleItem.СобытиеОтказ StyleItem.ТекстЗапрещеннойЯчейкиЦвет StyleItem.УдаленныйДополнительныйРеквизитШрифт + StyleItem.УдаленныйРеквизитФон StyleItem.ФайлЗанятыйДругимПользователем StyleItem.ФайлЗанятыйТекущимПользователем - StyleItem.ФонВыделенияЦвет + StyleItem.ФонУправляющегоПоля CommonPicture.АрхивАнкета + CommonPicture.БыстрыеНастройкиОтчета + CommonPicture.БыстрыйДоступ + CommonPicture.БыстрыйДоступДобавить + CommonPicture.БыстрыйДоступУдалить CommonPicture.ВедущаяКонечнаяТочка CommonPicture.Взаимодействия CommonPicture.ВидыНавигацииПоВзаимодействиямОтДопРеквизитовСведений @@ -123,7 +142,6 @@ CommonPicture.ДополнительныеСведения CommonPicture.ЗавершитьРедактированиеМакета CommonPicture.ЗакончитьРедактированиеФайла - CommonPicture.ЗакрепитьВариантОтчета CommonPicture.Заметка CommonPicture.ЗанятьФайл CommonPicture.ЗапланированноеВзаимодействие @@ -171,7 +189,6 @@ CommonPicture.ОсвободитьФайл CommonPicture.ОтветитьНаЭлектронноеПисьмо CommonPicture.ОтветитьНаЭлектронноеПисьмоВсем - CommonPicture.ОткрепитьВариантОтчета CommonPicture.ОткрытьМакет CommonPicture.ОткрытьФайл CommonPicture.ОтложитьРассмотрениеВзаимодействия @@ -205,11 +222,13 @@ CommonPicture.Предупреждение32 CommonPicture.ПриложитьФайл CommonPicture.ПрименитьПравилаОбработкиПисем + CommonPicture.ПрочиеПользовательскиеНастройки CommonPicture.РабочийКаталогПоУмолчанию CommonPicture.РазорватьСоединение CommonPicture.РазрешитьРедактированиеРеквизитовОбъекта CommonPicture.РаспространяетсяВИерархии CommonPicture.Рассчитать + CommonPicture.РассылкаОтчетов CommonPicture.РедактироватьМакет CommonPicture.РедактироватьФайл CommonPicture.Сканирование @@ -233,7 +252,11 @@ CommonPicture.СостояниеРассылкиОтчетов CommonPicture.СостоянияПользователей CommonPicture.СохранитьФайлКак + CommonPicture.СправкаВНачало + CommonPicture.СправкаПереходВниз + CommonPicture.СтатусыДокумента CommonPicture.СтатусыСопоставленияОбъектов + CommonPicture.СтрелкаВнизСправка CommonPicture.ТелефонныйЗвонок CommonPicture.ТипыМакетов CommonPicture.УдалитьПользовательскийМакет @@ -251,6 +274,7 @@ CommonPicture.ФорматWord CommonPicture.ФорматWord2007 CommonPicture.ФорматПустой + CommonPicture.ЭлектронноеПисьмо CommonPicture.ЭлектронноеПисьмоВходящее CommonPicture.ЭлектронноеПисьмоИсходящее SessionParameter.ВидыДоступаБезГруппЗначенияДоступа @@ -312,9 +336,11 @@ Role.ИзменениеТекущегоПользователя Role.ИзменениеУчастниковГруппДоступа Role.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок + Role.ИспользованиеВариантовОтчетов Role.ИспользованиеДополнительныхОтчетовИОбработок Role.ИспользованиеЗаметок Role.ИспользованиеИнтеграцииСДокументооборот + Role.ИспользованиеИнформационногоЦентра Role.ИспользованиеНапоминаний Role.ИспользованиеСтруктурыПодчиненности Role.ИспользованиеУчетныхЗаписейЭлектроннойПочты @@ -333,9 +359,7 @@ Role.УдаленныйДоступБазоваяФункциональность Role.УдаленныйДоступОбменДаннымиВМоделиСервиса Role.УдаленныйДоступОбменСообщениями - Role.УдалитьПолныеПраваОбластиДанных Role.ЧтениеБазовойНСИ - Role.ЧтениеВариантовОтчетов Role.ЧтениеВерсийОбъектов Role.ЧтениеВнешнихПользователей Role.ЧтениеДополнительныхСведений @@ -345,12 +369,16 @@ Role.ЧтениеПерсональныхДанныхФизическихЛиц Role.ЧтениеФизическихЛиц CommonTemplate.ИзвлечениеКодовОбщихДанных + CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную CommonTemplate.КомпонентаTWAIN CommonTemplate.ОценкаПроизводительностиВнешнийКомпонент CommonTemplate.СтруктураПодчиненности FilterCriterion.СвязанныеДокументы FilterCriterion.ФайлыВТоме + CommonModule.АвтономнаяРаботаВызовСервераСлужебный + CommonModule.АвтономнаяРаботаСлужебный CommonModule.АдресныйКлассификатор + CommonModule.АдресныйКлассификаторВызовСервера CommonModule.АдресныйКлассификаторКлиент CommonModule.АдресныйКлассификаторКлиентСервер CommonModule.Анкетирование @@ -363,10 +391,10 @@ CommonModule.БизнесПроцессыИЗадачиСервер CommonModule.БизнесПроцессыИЗадачиСобытия CommonModule.ВариантыОтчетов - CommonModule.ВариантыОтчетовВызовСервераПовтИсп CommonModule.ВариантыОтчетовКлиент - CommonModule.ВариантыОтчетовКлиентПереопределяемый + CommonModule.ВариантыОтчетовКлиентСервер CommonModule.ВариантыОтчетовПереопределяемый + CommonModule.ВариантыОтчетовПовтИсп CommonModule.ВерсионированиеОбъектов CommonModule.ВерсионированиеОбъектовКлиент CommonModule.ВерсионированиеОбъектовСобытия @@ -393,23 +421,27 @@ CommonModule.ДлительныеОперацииКлиентПовтИсп CommonModule.ДополнительныеОтчетыИОбработки CommonModule.ДополнительныеОтчетыИОбработкиВМоделиСервиса + CommonModule.ДополнительныеОтчетыИОбработкиВызовСервера CommonModule.ДополнительныеОтчетыИОбработкиКлиент CommonModule.ДополнительныеОтчетыИОбработкиКлиентСервер CommonModule.ДополнительныеОтчетыИОбработкиПереопределяемый - CommonModule.ДополнительныеОтчетыИОбработкиСобытия CommonModule.ЖурналРегистрации CommonModule.ЖурналРегистрацииКлиент CommonModule.ЗапретРедактированияРеквизитовОбъектов CommonModule.ЗапретРедактированияРеквизитовОбъектовКлиент + CommonModule.ЗащитаПерсональныхДанных CommonModule.ЗащитаПерсональныхДанныхПереопределяемый CommonModule.ЗащитаПерсональныхДанныхПовтИсп + CommonModule.ИнформационныйЦентрКлиент + CommonModule.ИнформационныйЦентрСервер + CommonModule.ИнформационныйЦентрСерверПереопределяемый CommonModule.КалендарныеГрафики CommonModule.КомандыРаботыСБизнесПроцессамиКлиент CommonModule.КомандыРаботыСФайламиКлиент CommonModule.КонтрольДинамическогоОбновленияКонфигурации CommonModule.КонтрольДинамическогоОбновленияКонфигурацииГлобальный CommonModule.КонтрольДинамическогоОбновленияКонфигурацииКлиент - CommonModule.КонтрольЖурналаРегистрацииСлужебный + CommonModule.КурсыВалютВМоделиСервиса CommonModule.НапоминанияПользователяВызовСервера CommonModule.НапоминанияПользователяГлобальный CommonModule.НапоминанияПользователяКлиент @@ -423,35 +455,49 @@ CommonModule.ОбменВнешнимиЗаданиямиСервер CommonModule.ОбменВнешнимиЗаданиямиСобытия CommonModule.ОбменДаннымиВМоделиСервиса + CommonModule.ОбменДаннымиВМоделиСервисаКлиент + CommonModule.ОбменДаннымиВМоделиСервисаПереопределяемый CommonModule.ОбменДаннымиВМоделиСервисаПовтИсп CommonModule.ОбменДаннымиВнешнееСоединение + CommonModule.ОбменДаннымиВызовСервера + CommonModule.ОбменДаннымиГлобальный CommonModule.ОбменДаннымиКлиент CommonModule.ОбменДаннымиКлиентПереопределяемый + CommonModule.ОбменДаннымиКлиентСервер CommonModule.ОбменДаннымиПереопределяемый CommonModule.ОбменДаннымиПовтИсп CommonModule.ОбменДаннымиСервер CommonModule.ОбменДаннымиСобытия CommonModule.ОбменСообщениями CommonModule.ОбменСообщениямиВнутренний + CommonModule.ОбменСообщениямиВызовСервера CommonModule.ОбменСообщениямиКлиент CommonModule.ОбменСообщениямиПереопределяемый CommonModule.ОбменСообщениямиПовтИсп CommonModule.ОбменФайламиВызовСервера - CommonModule.ОбменФайламиСобытия CommonModule.ОбновлениеИнформационнойБазы CommonModule.ОбновлениеИнформационнойБазыВМоделиСервиса + CommonModule.ОбновлениеИнформационнойБазыВызовСервера CommonModule.ОбновлениеИнформационнойБазыКлиент CommonModule.ОбновлениеИнформационнойБазыКлиентПереопределяемый CommonModule.ОбновлениеИнформационнойБазыПереопределяемый + CommonModule.ОбновлениеИнформационнойБазыСобытия CommonModule.ОбновлениеКонфигурации + CommonModule.ОбновлениеКонфигурацииВызовСервера CommonModule.ОбновлениеКонфигурацииКлиент CommonModule.ОбновлениеКонфигурацииКлиентГлобальный CommonModule.ОбновлениеКонфигурацииКлиентПереопределяемый CommonModule.ОбновлениеКонфигурацииКлиентСервер CommonModule.ОбновлениеКонфигурацииПереопределяемый + CommonModule.ОбработчикКаналовСообщенийИнформационногоЦентра CommonModule.ОбработчикКаналовСообщенийОбменаДаннымиВРежимеСервиса + CommonModule.ОбработчикКаналовСообщенийПоставляемыхДанных CommonModule.ОбработчикКаналовСообщенийУдаленногоАдминистрирования + CommonModule.ОбработчикКаналовСообщенийУправлениеРезервнымКопированием + CommonModule.ОбработчикСообщенийУдаленногоАдминистрирования + CommonModule.ОбработчикСообщенийУправленияРезервнымКопированием CommonModule.ОбщегоНазначения + CommonModule.ОбщегоНазначенияВызовСервераПереопределяемый CommonModule.ОбщегоНазначенияКлиент CommonModule.ОбщегоНазначенияКлиентПереопределяемый CommonModule.ОбщегоНазначенияКлиентПовтИсп @@ -466,28 +512,35 @@ CommonModule.ОчередьЗаданий CommonModule.ОчередьЗаданийПереопределяемый CommonModule.ОчередьЗаданийПовтИсп - CommonModule.ПолнотекстовыйПоискКлиентПереопределяемый + CommonModule.ПерепрефиксацияОбъектов CommonModule.ПолнотекстовыйПоискСервер CommonModule.ПолучениеФайловИзИнтернета CommonModule.ПолучениеФайловИзИнтернетаКлиент CommonModule.ПолучениеФайловИзИнтернетаКлиентСервер CommonModule.Пользователи CommonModule.ПользователиВМоделиСервиса + CommonModule.ПользователиКлиентСервер CommonModule.ПользователиПереопределяемый - CommonModule.ПользователиСерверПовтИсп - CommonModule.ПользователиСобытия + CommonModule.ПользователиСлужебный + CommonModule.ПользователиСлужебныйВызовСервера + CommonModule.ПользователиСлужебныйКлиент + CommonModule.ПользователиСлужебныйКлиентСервер + CommonModule.ПользователиСлужебныйПовтИсп CommonModule.ПоставляемыеДанные CommonModule.ПоставляемыеДанныеКлиентСервер CommonModule.ПоставляемыеДанныеПереопределяемый CommonModule.ПоставляемыеДанныеПовтИсп - CommonModule.ПрефиксацияОбъектов + CommonModule.ПрефиксацияОбъектовВызовСервера CommonModule.ПрефиксацияОбъектовКлиентСервер CommonModule.ПрефиксацияОбъектовКлиентСерверПереопределяемый + CommonModule.ПрефиксацияОбъектовПереопределяемый CommonModule.ПрефиксацияОбъектовПовтИсп CommonModule.ПрефиксацияОбъектовСобытия CommonModule.ПрисоединенныеФайлы CommonModule.ПрисоединенныеФайлыКлиент - CommonModule.ПрисоединенныеФайлыСобытия + CommonModule.ПрисоединенныеФайлыСлужебный + CommonModule.ПрисоединенныеФайлыСлужебныйВызовСервера + CommonModule.ПрисоединенныеФайлыСлужебныйКлиент CommonModule.ПроверкаЛегальностиПолученияОбновленияКлиент CommonModule.РаботаВМоделиСервиса CommonModule.РаботаВМоделиСервисаПереопределяемый @@ -499,15 +552,16 @@ CommonModule.РаботаС1СДокументооборотПереопределяемый CommonModule.РаботаС1СДокументооборотПовтИсп CommonModule.РаботаСБанками - CommonModule.РаботаСБанкамиВызовСервера CommonModule.РаботаСБиблиотекойФайлов CommonModule.РаботаСБиблиотекойФайловКлиент CommonModule.РаботаСБиблиотекойФайловПереопределяемый CommonModule.РаботаСКурсамиВалют + CommonModule.РаботаСКурсамиВалютВызовСервера CommonModule.РаботаСКурсамиВалютКлиентСервер CommonModule.РаботаСоСканеромКлиент CommonModule.РаботаСПочтовымиСообщениями CommonModule.РаботаСПочтовымиСообщениямиКлиент + CommonModule.РаботаСФайлами CommonModule.РаботаСФайламиВызовСервера CommonModule.РаботаСФайламиВызовСервераПереопределяемый CommonModule.РаботаСФайламиКлиент @@ -515,28 +569,35 @@ CommonModule.РаботаСФайламиКлиентПовтИсп CommonModule.РаботаСФайламиКлиентСервер CommonModule.РаботаСФайламиПереопределяемый - CommonModule.РаботаСФайламиСобытия + CommonModule.РаботаСФайламиСлужебный CommonModule.РассылкаОтчетов CommonModule.РассылкаОтчетовВызовСервера CommonModule.РассылкаОтчетовКлиент - CommonModule.РассылкаОтчетовКлиентПереопределяемый CommonModule.РассылкаОтчетовКлиентСервер CommonModule.РассылкаОтчетовПереопределяемый CommonModule.РассылкаОтчетовПовтИсп CommonModule.РегламентированныеДанныеКлиентСервер - CommonModule.РегламентныеЗаданияГлобальный CommonModule.РегламентныеЗаданияКлиент CommonModule.РегламентныеЗаданияСервер + CommonModule.РегламентныеЗаданияСлужебный + CommonModule.РегламентныеЗаданияСлужебныйВызовСервера + CommonModule.РегламентныеЗаданияСлужебныйГлобальный + CommonModule.РегламентныеЗаданияСлужебныйКлиент + CommonModule.РезервноеКопированиеИБВызовСервера CommonModule.РезервноеКопированиеИБКлиент CommonModule.РезервноеКопированиеИБКлиентГлобальный CommonModule.РезервноеКопированиеИБСервер + CommonModule.РезервноеКопированиеОбластейДанных + CommonModule.РезервноеКопированиеОбластейДанныхПовтИсп CommonModule.СоединенияИБ + CommonModule.СоединенияИБВызовСервера CommonModule.СоединенияИБГлобальный CommonModule.СоединенияИБКлиент + CommonModule.СоединенияИБКлиентПереопределяемый CommonModule.СоединенияИБКлиентСервер CommonModule.СоединенияИБПовтИсп - CommonModule.СообщенияУдаленногоАдминистрирования - CommonModule.СообщенияУдаленногоАдминистрированияПовтИсп + CommonModule.СообщенияВМоделиСервиса + CommonModule.СообщенияВМоделиСервисаПовтИсп CommonModule.СтандартныеПодсистемыВызовСервера CommonModule.СтандартныеПодсистемыВызовСервераПереопределяемый CommonModule.СтандартныеПодсистемыКлиент @@ -550,8 +611,8 @@ CommonModule.УправлениеДоступом CommonModule.УправлениеДоступомВМоделиСервиса CommonModule.УправлениеДоступомПереопределяемый - CommonModule.УправлениеДоступомСерверПовтИсп - CommonModule.УправлениеДоступомСобытия + CommonModule.УправлениеДоступомСлужебный + CommonModule.УправлениеДоступомСлужебныйПовтИсп CommonModule.УправлениеИтогамиИАгрегатамиСобытия CommonModule.УправлениеКонтактнойИнформацией CommonModule.УправлениеКонтактнойИнформациейКлассификаторы @@ -563,6 +624,7 @@ CommonModule.УправлениеПечатью CommonModule.УправлениеПечатьюMSWordКлиент CommonModule.УправлениеПечатьюOOWriterКлиент + CommonModule.УправлениеПечатьюВызовСервера CommonModule.УправлениеПечатьюКлиент CommonModule.УправлениеПечатьюПереопределяемый CommonModule.УправлениеСвойствами @@ -571,15 +633,20 @@ CommonModule.УправлениеЭлектроннойПочтой CommonModule.УправлениеЭлектроннойПочтойКлиент CommonModule.ФайловыеФункции - CommonModule.ФайловыеФункцииКлиент - CommonModule.ФайловыеФункцииКлиентПовтИсп - CommonModule.ФайловыеФункцииКлиентСервер - CommonModule.ФайловыеФункцииПереопределяемый - CommonModule.ФайловыеФункцииПовтИсп + CommonModule.ФайловыеФункцииСлужебный + CommonModule.ФайловыеФункцииСлужебныйВызовСервера + CommonModule.ФайловыеФункцииСлужебныйКлиент + CommonModule.ФайловыеФункцииСлужебныйКлиентПовтИсп + CommonModule.ФайловыеФункцииСлужебныйКлиентСервер + CommonModule.ФайловыеФункцииСлужебныйПовтИсп CommonModule.ФизическиеЛица CommonModule.ФизическиеЛицаКлиент - CommonModule.ФизическиеЛицаПереопределяемый + CommonModule.ФизическиеЛицаКлиентСервер + CommonModule.ФормаОтчетаКлиентПереопределяемый + CommonModule.ФормаОтчетаПереопределяемый + CommonModule.ФункцииОтчетовКлиентСервер CommonModule.ЭлектроннаяПочта + CommonModule.ЭлектроннаяПочтаВызовСервера CommonModule.ЭлектроннаяПочтаКлиентПереопределяемый CommonModule.ЭлектроннаяЦифроваяПодпись CommonModule.ЭлектроннаяЦифроваяПодписьКлиент @@ -592,10 +659,15 @@ ExchangePlan.ОбменСообщениями XDTOPackage.AgentScripts XDTOPackage.ApdexExport + XDTOPackage.CurrencyRates XDTOPackage.DataDump - XDTOPackage.КонтрольУдаленногоАдминистрирования + XDTOPackage.SuppliedData + XDTOPackage.КонтрольРезервногоКопированияОбластейДанных_1_0_2_1 + XDTOPackage.КонтрольУдаленногоАдминистрирования_1_0_2_1 + XDTOPackage.Сообщения XDTOPackage.СообщенияУдаленногоАдминистрирования - XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса + XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1 + XDTOPackage.УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1 XDTOPackage.Файлы WebService.Exchange WebService.Exchange_2_0_1_6 @@ -605,8 +677,12 @@ WebService.MessageExchange_2_0_1_6 WebService.RemoteAdministrationOfExchange WebService.RemoteAdministrationOfExchange_2_0_1_6 + EventSubscription.ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания + EventSubscription.ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания EventSubscription.ВзаимодействияЗаполнитьЗначениеРеквизитаУпорядочивания EventSubscription.ВзаимодействияСброситьЗначениеРеквизитаУпорядочивания + EventSubscription.ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания + EventSubscription.ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания EventSubscription.ВключитьИспользованиеПланаОбмена EventSubscription.ВыполнитьПодготовкуСтартаВнешнегоЗадания EventSubscription.ЗаписатьВСписокБизнесПроцессов @@ -616,17 +692,20 @@ EventSubscription.ЗаполнитьКонтактнуюИнформацию EventSubscription.ЗарегистрироватьИзмененияОбщихДанныхУзлов EventSubscription.ЗарегистрироватьИзмененияФильтровОграниченияМиграцииДанных - EventSubscription.НастроитьПорядокВариантовОтветовАнкет - EventSubscription.НастроитьПорядокВидовКонтактнойИнформации + EventSubscription.ИгнорироватьОтправкуНеразделенныхДанныхВСервис + EventSubscription.ИгнорироватьПолучениеНеразделенныхДанныхВСервисе EventSubscription.ОбменВнешнимиЗаданиямиЗарегистрироватьИзменение EventSubscription.ОбменВнешнимиЗаданиямиЗарегистрироватьУдаление EventSubscription.ОбменВнешнимиЗаданиямиС1СДокументооборотЗарегистрироватьИзменение EventSubscription.ОбменВнешнимиЗаданиямиС1СДокументооборотЗарегистрироватьУдаление EventSubscription.ОбновитьПредставлениеВнешнегоПользователя EventSubscription.ОбновитьСостояниеБизнесПроцесса + EventSubscription.ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете EventSubscription.ОтключитьИспользованиеПланаОбмена EventSubscription.ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе + EventSubscription.ПриОтправкеДанныхГлавному EventSubscription.ПриОтправкеДанныхПодчиненному + EventSubscription.ПриПолученииДанныхОтГлавного EventSubscription.ПриПолученииДанныхОтПодчиненного EventSubscription.ПрисоединенныйФайлПередЗаписьюВзаимодействия EventSubscription.ПрисоединенныйФайлПередУдалениемВзаимодействия @@ -634,8 +713,6 @@ EventSubscription.ПроверитьВозможностьИзмененияНастроекОбменаДанными EventSubscription.ПроверитьИзменениеФильтровОграниченияМиграцииДанных EventSubscription.ПроверитьИзмененияДатВПредмете - EventSubscription.СброситьПорядокВариантовОтветовАнкет - EventSubscription.СброситьПорядокВидовКонтактнойИнформации EventSubscription.СкопироватьРеквизитыВерсииФайловВФайл EventSubscription.СоздатьПредопределенныеПапкиЭлектронныхПисем EventSubscription.СправочникиОбщихПоставляемыхДанныхПередЗаписью @@ -649,7 +726,6 @@ ScheduledJob.ЗаполнениеДанныхДляОграниченияДоступа ScheduledJob.ЗапускДополнительныхОбработок ScheduledJob.ИзвлечениеТекста - ScheduledJob.КонтрольЖурналаРегистрации ScheduledJob.КонтрольОбновленияРазделенныхПоставляемыхДанных ScheduledJob.МониторингЗадач ScheduledJob.ОбновлениеАгрегатов @@ -663,8 +739,10 @@ ScheduledJob.ПланированиеОбработкиЗаданий ScheduledJob.ПолучениеИОтправкаЭлектронныхПисем ScheduledJob.РассылкаОтчетов + ScheduledJob.СинхронизацияДанныхСПриложениемВИнтернете ScheduledJob.СлияниеИндексаППД ScheduledJob.УведомлениеИсполнителейОНовыхЗадачах + ScheduledJob.УдалениеНеактуальныхСообщенийОбмена ScheduledJob.УстановкаПериодаРассчитанныхИтогов ScheduledJob.ЭкспортОценкиПроизводительности SettingsStorage.ХранилищеВариантовОтчетов @@ -672,6 +750,7 @@ FunctionalOption.ВариантыВерсионированияОбъектов FunctionalOption.ЗарегистрированыИзмененияДанных FunctionalOption.ИзменятьЗаданияЗаднимЧислом + FunctionalOption.ИспользоватьАвтономнуюРаботуВМоделиСервиса FunctionalOption.ИспользоватьАнкетирование FunctionalOption.ИспользоватьБиблиотекуФайлов FunctionalOption.ИспользоватьБизнесПроцессыИЗадачи @@ -704,8 +783,11 @@ FunctionalOption.НеИспользоватьРазделениеПоОбластямДанных FunctionalOption.ОграничиватьДоступНаУровнеЗаписей FunctionalOption.ОтправлятьПисьмаВФорматеHTML + FunctionalOption.ПоддержкаРезервногоКопирования FunctionalOption.ПрефиксИнформационнойБазы FunctionalOption.ПрефиксыОрганизаций + FunctionalOption.РаботаВАвтономномРежиме + FunctionalOption.СтандартныеПодсистемыВАвтономномРежиме FunctionalOption.СтандартныеПодсистемыВЛокальномРежиме FunctionalOption.СтандартныеПодсистемыВМоделиСервиса FunctionalOption.ХранитьФайлыВТомахНаДиске @@ -713,6 +795,8 @@ FunctionalOptionsParameter.ТипВерсионируемогоОбъекта FunctionalOptionsParameter.ТипОбъектаСДополнительнымиОтчетамиИОбработками FunctionalOptionsParameter.ТипФормыСДополнительнымиОтчетамиИОбработками + CommonCommand.АвтономнаяРабота + CommonCommand.АвтономнаяРаботаВМоделиСервиса CommonCommand.БиблиотекаФайлов CommonCommand.ВыгрузитьДанныеВЛокальнуюВерсию CommonCommand.ВыгрузитьДанныеДляПереходаВСервис @@ -727,10 +811,12 @@ CommonCommand.ДополнительныеОтчетыИОбработкиОтчеты CommonCommand.ДополнительныеОтчетыИОбработкиПечатныеФормы CommonCommand.ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов - CommonCommand.ДополнительныеСведения + CommonCommand.ДополнительныеСведенияКоманднаяПанель + CommonCommand.ДополнительныеСведенияПанельНавигации CommonCommand.ЗагрузитьДанныеВОбласть CommonCommand.ЗагрузитьДанныеИзЛокальнойВерсии CommonCommand.ЗагрузитьДанныеИзСервиса + CommonCommand.ЗагрузитьКурсыВалют CommonCommand.ЗадачиПоБизнесПроцессу CommonCommand.ЗадачиПоПредмету CommonCommand.ЗаметкиПоПредмету @@ -742,6 +828,7 @@ CommonCommand.ОбменСообщениями CommonCommand.ОбновлениеОбщихПоставляемыхДанных CommonCommand.ОбновлениеПоставляемыхДанных + CommonCommand.ОткрытьИнформационныйЦентр CommonCommand.ОткрытьОбменыДанными CommonCommand.ОткрытьПравилаКонвертацииОбъектов CommonCommand.ОткрытьПравилаРегистрацииОбъектов @@ -760,6 +847,7 @@ CommonCommand.СинхронизироватьДанные CommonCommand.СозданиеНачальногоОбразаСФайлами CommonCommand.СоздатьЗаметкуПоПредмету + CommonCommand.СоздатьРезервнуюКопию CommonCommand.СтруктураПодчиненности CommonCommand.УстановитьНапоминаниеПоПредмету CommonCommand.УстановитьРасширениеРаботыСФайлами @@ -771,7 +859,6 @@ CommandGroup.ПараметрыОбменаДанными CommandGroup.Печать Constant.АдресАгентаСервиса - Constant.АдресатыПолученияОтчетаПоЖурналуРегистрации Constant.АдресВебСервиса1СДокументооборот Constant.АдресВебСервисаБиблиотекиФайлов Constant.АдресВебСервисаОбменаДанными @@ -797,6 +884,7 @@ Constant.ИмяПользователяБиблиотекиФайлов Constant.ИмяСлужебногоПользователяМенеджераСервиса Constant.ИмяСлужебногоПользователяСервисаПоставляемыхДанных + Constant.ИспользоватьАвтономнуюРаботуВМоделиСервиса Constant.ИспользоватьАнкетирование Constant.ИспользоватьБиблиотекуФайлов Constant.ИспользоватьБизнесПроцессыИЗадачи @@ -820,8 +908,9 @@ Constant.ИспользоватьПрочиеВзаимодействия Constant.ИспользоватьРазделениеПоОбластямДанных Constant.ИспользоватьЭлектронныеЦифровыеПодписи - Constant.КаталогВременныхФайловСообщенийОбменаДляLinux - Constant.КаталогВременныхФайловСообщенийОбменаДляWindows + Constant.КаталогВременныхФайловДляLinux + Constant.КаталогВременныхФайловДляWindows + Constant.КлючОбластиДанных Constant.КодКорневойПапкиБиблиотекиФайлов Constant.КонечнаяТочкаМенеджераСервиса Constant.КопироватьОбластиДанныхИзЭталонной @@ -831,6 +920,7 @@ Constant.МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот Constant.МаксимальныйРазмерФайлаОбластиДанных Constant.НаименованиеКорневойПапкиФайлов1СДокументооборот + Constant.НастройкаАвтономногоРабочегоМестаЗавершена Constant.НастройкаПодчиненногоУзлаРИБЗавершена Constant.НастройкаПроксиСервера Constant.НастройкиВыполненияРегламентныхЗаданий @@ -846,11 +936,16 @@ Constant.ПарольПользователяБиблиотекиФайлов Constant.ПарольСлужебногоПользователяМенеджераСервиса Constant.ПарольСлужебногоПользователяСервисаПоставляемыхДанных + Constant.ПоддержкаРезервногоКопирования + Constant.ПрефиксПоследнегоАвтономногоРабочегоМеста Constant.ПрефиксУзлаРаспределеннойИнформационнойБазы Constant.ПровайдерЭЦП Constant.РазмерБлокаПередачиФайла Constant.РежимИспользованияИнформационнойБазы + Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы + Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы Constant.СообщениеБлокировкиПриОбновленииКонфигурации + Constant.СообщениеОбменаДаннымиИзГлавногоУзла Constant.СписокЗапрещенныхРасширений Constant.СписокЗапрещенныхРасширенийОбластиДанных Constant.СписокРасширенийТекстовыхФайлов @@ -858,9 +953,13 @@ Constant.СписокРасширенийФайловOpenDocumentОбластиДанных Constant.СтатусОбновленияКонфигурации Constant.ТипПровайдераЭЦП + Constant.ТребуетсяОбновлениеИнформационнойБазы Constant.УдалитьИспользоватьВзаимодействия Constant.УдалитьТипХраненияФайлов Constant.ХранитьФайлыВТомахНаДиске + Constant.ЭтоАвтономноеРабочееМесто + CommonForm.АвтономнаяРабота + CommonForm.АвтономнаяРаботаВМоделиСервиса CommonForm.АвторизацияВ1СДокументооборот CommonForm.АдреснаяКнига CommonForm.БиблиотекаФайлов @@ -870,7 +969,6 @@ CommonForm.ВключениеЖурналаРегистрации CommonForm.Вопрос CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами - CommonForm.ВсеОтчеты CommonForm.ВходВОбластьДанных CommonForm.ВыборДаты CommonForm.ВыборДействияПриОбнаруженииБолееНовогоФайла @@ -881,13 +979,14 @@ CommonForm.ВыборОбъектовМетаданных CommonForm.ВыборПодписей CommonForm.ВыборПрисоединенныхФайлов + CommonForm.ВыборПроизвольногоПериода CommonForm.ВыборПутиКАрхивуФайловТомов CommonForm.ВыборРолиИсполнителя CommonForm.ВыборСертификата CommonForm.ВыборСертификатовШифрования CommonForm.ВыборУзловПлановОбмена + CommonForm.ВыборФорматаВложений CommonForm.ВыгрузкаДанных - CommonForm.ВыполнениеОбменаДанными CommonForm.ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами CommonForm.ДлительнаяОперация CommonForm.ДобавлениеПодписиИзФайла @@ -918,9 +1017,11 @@ CommonForm.ДокументооборотПоискВСписке CommonForm.ДокументооборотСозданиеНовогоФайла CommonForm.ДокументооборотФайлы + CommonForm.ДополнительноеОписание CommonForm.ДополнительныеОтчетыИОбработки CommonForm.ЗагрузкаДанныхВОбласть CommonForm.ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации + CommonForm.ИнформационныйЦентр CommonForm.ИнформацияНеразделенногоПользователя CommonForm.КарточкаФайлаИзБиблиотекиФайлов CommonForm.МастерАнкетыПоРазделам @@ -928,15 +1029,21 @@ CommonForm.НастройкаЛокальногоКэшаФайлов CommonForm.НастройкаМоихОтчетовИОбработок CommonForm.НастройкаОбменаСообщениями - CommonForm.НастройкаПечатныхФормПередОтправкой + CommonForm.НастройкиРезервногоКопированияПриложений CommonForm.НастройкиЭЦП CommonForm.НерекомендуемаяВерсияПлатформы CommonForm.ОбменыДанными CommonForm.ОписаниеИзмененийСистемы + CommonForm.ОтключениеАвтономногоРабочегоМеста + CommonForm.ОтображениеНовостей + CommonForm.ОтправкаПечатнойФормыПоПочте + CommonForm.ОтправкаСообщенияВТехподдержку + CommonForm.ОтправкаТабличныхДокументовПоПочте CommonForm.ОтчетОСохраненииФайлов CommonForm.ПанельОтчетов CommonForm.ПараметрыАдминистрированияСервернойИБ CommonForm.ПараметрыПроксиСервера + CommonForm.ПарольДляСинхронизацииДанных CommonForm.ПерсональныеНастройкиЭЦП CommonForm.ПечатьДокументов CommonForm.ПодключениеКонечнойТочки @@ -950,15 +1057,20 @@ CommonForm.ПредупрежденияПриЗавершенииРаботы CommonForm.ПрисоединенныеФайлы CommonForm.ПрисоединенныйФайл - CommonForm.РедактированиеЗначенийСвойств + CommonForm.РедактированиеДополнительныхСведений CommonForm.РедактированиеНовогоПисьма CommonForm.СертификатЭЦП CommonForm.СозданиеНачальногоОбразаСФайлами + CommonForm.СозданиеРезервнойКопии + CommonForm.СохранениеПечатнойФормы CommonForm.СтруктураПодчиненности CommonForm.УстановкаВедущейКонечнойТочки CommonForm.УстановкаПодписиЭЦП CommonForm.УточнениеКонтактов CommonForm.ФайлыВТоме + CommonForm.ФормаВариантаОтчета + CommonForm.ФормаНастроекОтчета + CommonForm.ФормаОтчета Catalog.Валюты Catalog.ВариантыОтветовАнкет Catalog.ВариантыОтчетов @@ -977,18 +1089,20 @@ Catalog.Заметки Catalog.ЗапланированноеВзаимодействиеПрисоединенныеФайлы Catalog.ЗначенияСвойствОбъектов + Catalog.ЗначенияСвойствОбъектовИерархия Catalog.ИдентификаторыОбъектовМетаданных Catalog.Календари Catalog.КлассификаторБанковРФ - Catalog.КлассификаторВалют Catalog.КлючевыеОперации Catalog.НаборыДополнительныхРеквизитовИСведений Catalog.НазначенияСертификатовЭЦП Catalog.НастройкиЗаполненияОбъектов1СДокументооборота + Catalog.ОбщиеДанныеИнформационногоЦентра Catalog.Организации Catalog.ПапкиФайлов Catalog.ПапкиЭлектронныхПисем Catalog.Пользователи + Catalog.ПоставляемыеДанные Catalog.ПравилаОбработкиЭлектроннойПочты Catalog.ПроизводственныеКалендари Catalog.ПрофилиГруппДоступа @@ -998,7 +1112,9 @@ Catalog.СтраныМира Catalog.СценарииОбменовДанными Catalog.ТелефонныйЗвонокПрисоединенныеФайлы + Catalog.ТипыИнформацииИнформационногоЦентра Catalog.ТомаХраненияФайлов + Catalog.УдалитьКлассификаторВалют Catalog.УчетныеЗаписиЭлектроннойПочты Catalog.Файлы Catalog.ФизическиеЛица @@ -1030,6 +1146,7 @@ Enum.ДействияПриОбмене Enum.ДействияПриСохраненииСЭЦП Enum.ДействияСФайламиПоДвойномуЩелчку + Enum.ДоступныеПериодыОтчета Enum.ИсточникиПравилДляОбменаДанными Enum.ПериодичностиРасписанийРассылокОтчетов Enum.ПолФизическогоЛица @@ -1053,11 +1170,11 @@ Enum.СтатусыИзвлеченияТекстаФайлов Enum.СтатусыИсходящегоЭлектронногоПисьма Enum.СтатусыОбластейДанных - Enum.ТипыВариантовОтчетов Enum.ТипыВопросовШаблонаАнкеты Enum.ТипыДанныхКэшаПрограммныхИнтерфейсов Enum.ТипыКонтактнойИнформации Enum.ТипыОтветовНаВопрос + Enum.ТипыОтчетов Enum.ТипыПользователей Enum.ТипыТабличныхВопросов Enum.ТипыТекстовЭлектронныхПисем @@ -1071,6 +1188,7 @@ Enum.ФорматыХраненияОдностраничныхФайлов Enum.ЦветаЗаметок Enum.ЦветностиИзображения + Report.АнализЖурналаРегистрации Report.АнализОпроса Report.АнкетированиеАналитическийОтчет Report.БизнесПроцессы @@ -1086,6 +1204,7 @@ DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных DataProcessor.АктивныеПользователи DataProcessor.БлокировкаРаботыПользователей + DataProcessor.ВыполнениеОбменаДанными DataProcessor.ГрупповоеИзменениеОбъектов DataProcessor.ЖурналРегистрации DataProcessor.ЗагрузкаКурсовВалют @@ -1094,14 +1213,15 @@ DataProcessor.КартаМаршрутаБизнесПроцесса DataProcessor.КонвертацияОбъектовИнформационныхБаз DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз - DataProcessor.КонтрольЖурналаРегистрации DataProcessor.ЛегальностьПолученияОбновлений DataProcessor.НастройкаРезервногоКопированияИБ + DataProcessor.НастройкиПользователей DataProcessor.ОбновлениеКонфигурации DataProcessor.ОценкаПроизводительности DataProcessor.ПереносФайловВТома DataProcessor.ПолнотекстовыйПоискВДанных DataProcessor.ПомощникИнтерактивногоОбменаДанными + DataProcessor.ПомощникСозданияАвтономногоРабочегоМеста DataProcessor.ПомощникСозданияОбменаДанными DataProcessor.РегламентныеИФоновыеЗадания DataProcessor.РезервноеКопированиеИБ @@ -1114,7 +1234,6 @@ DataProcessor.УдалениеПомеченныхОбъектов DataProcessor.УниверсальныйОбменДаннымиXML DataProcessor.УправлениеИтогамиИАгрегатами - DataProcessor.УправлениеНастройкамиФорм DataProcessor.УправлениеПолнотекстовымПоиском InformationRegister.АдресныеСокращения InformationRegister.АдресныйКлассификатор @@ -1140,12 +1259,12 @@ InformationRegister.КалендарныеГрафики InformationRegister.КодировкиВерсийФайлов InformationRegister.КурсыВалют - InformationRegister.КурсыВалютПоКлассификатору InformationRegister.КэшПрограммныхИнтерфейсов InformationRegister.НаборыЗначенийДоступа InformationRegister.НазначениеДополнительныхОбработок InformationRegister.НаличиеПрисоединенныхФайлов InformationRegister.НапоминанияПользователя + InformationRegister.НастройкиВариантовОтчетов InformationRegister.НастройкиВерсионированияОбъектов InformationRegister.НастройкиОтправителя InformationRegister.НастройкиТранспортаОбмена @@ -1154,6 +1273,9 @@ InformationRegister.НомераОтсканированныхФайлов InformationRegister.ОбластиДанных InformationRegister.ОбластиДляОбновленияПоставляемыхДанных + InformationRegister.ОбластиКРезервномуКопированию + InformationRegister.ОбластиПерсональныхДанных + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз InformationRegister.ОтветыНаВопросыАнкет InformationRegister.ОчередьЗаданий @@ -1161,6 +1283,7 @@ InformationRegister.ПодчиненныеПользователи InformationRegister.ПользовательскиеМакетыПечати InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам + InformationRegister.ПоставляемыеДанныеТребующиеОбработки InformationRegister.ПраваПоЗначениямДоступа InformationRegister.ПравилаДляОбменаДанными InformationRegister.ПредметыПапкиВзаимодействий @@ -1177,6 +1300,7 @@ InformationRegister.СостоянияУспешныхОбменовДанными InformationRegister.ТаблицыГруппДоступа InformationRegister.УведомленияОПрочтении + InformationRegister.УдалитьКурсыВалютПоКлассификатору InformationRegister.ФайлыВРабочемКаталоге InformationRegister.ХранимыеФайлыВерсий ChartOfCharacteristicTypes.ВидыДоступа diff --git a/SSL/src/Configuration/ManagedApplicationModule.bsl b/SSL/src/Configuration/ManagedApplicationModule.bsl index 1e2a4f60b..cbc3c321d 100644 --- a/SSL/src/Configuration/ManagedApplicationModule.bsl +++ b/SSL/src/Configuration/ManagedApplicationModule.bsl @@ -24,7 +24,8 @@ Перем ДоступноеОбновлениеКонфигурации Экспорт; // Структура с параметрами помощника обновления конфигурации. Перем НастройкиОбновленияКонфигурации Экспорт; - +// Признак необходимости обновления конфигурации информационной базы при завершении сеанса. +Перем ПредлагатьОбновлениеИнформационнойБазыПриЗавершенииСеанса Экспорт; // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации // СтандартныеПодсистемы.РаботаСФайлами @@ -51,6 +52,10 @@ Перем ОценкаПроизводительностиЗамерВремени Экспорт; // Конец СтандартныеПодсистемы.ОценкаПроизводительности +// СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса +Перем ПредлагатьСинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииСеанса Экспорт; +// Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + // Конец СтандартныеПодсистемы Процедура ПередНачаломРаботыСистемы(Отказ) diff --git a/SSL/src/Configuration/OrdinaryApplicationModule.bsl b/SSL/src/Configuration/OrdinaryApplicationModule.bsl index 1e2a4f60b..cbc3c321d 100644 --- a/SSL/src/Configuration/OrdinaryApplicationModule.bsl +++ b/SSL/src/Configuration/OrdinaryApplicationModule.bsl @@ -24,7 +24,8 @@ Перем ДоступноеОбновлениеКонфигурации Экспорт; // Структура с параметрами помощника обновления конфигурации. Перем НастройкиОбновленияКонфигурации Экспорт; - +// Признак необходимости обновления конфигурации информационной базы при завершении сеанса. +Перем ПредлагатьОбновлениеИнформационнойБазыПриЗавершенииСеанса Экспорт; // Конец СтандартныеПодсистемы.ОбновлениеКонфигурации // СтандартныеПодсистемы.РаботаСФайлами @@ -51,6 +52,10 @@ Перем ОценкаПроизводительностиЗамерВремени Экспорт; // Конец СтандартныеПодсистемы.ОценкаПроизводительности +// СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса +Перем ПредлагатьСинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииСеанса Экспорт; +// Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.ОбменДаннымиВМоделиСервиса + // Конец СтандартныеПодсистемы Процедура ПередНачаломРаботыСистемы(Отказ) diff --git a/SSL/src/Configuration/ParentConfigurations.bin b/SSL/src/Configuration/ParentConfigurations.bin index d66709bd7..55da3338f 100644 --- a/SSL/src/Configuration/ParentConfigurations.bin +++ b/SSL/src/Configuration/ParentConfigurations.bin @@ -1 +1 @@ -{6,1,1,7ba66d05-ccf9-4513-be72-c577e7215c2f,1,2ddee912-d0ce-462a-bc97-d1f7dbf7fb03,"2.0.1.19","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",3656,1,0,191be48e-b9a0-4229-8728-9ccd159fcc58,191be48e-b9a0-4229-8728-9ccd159fcc58,0,1,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,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,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,48e2b615-925a-46d5-9f47-783bdb36ab02,48e2b615-925a-46d5-9f47-783bdb36ab02,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,b73b22b7-419a-4ae9-b954-f6ad2244175b,b73b22b7-419a-4ae9-b954-f6ad2244175b,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,c17592a9-5df0-4fa6-bd33-3d78d341a55c,c17592a9-5df0-4fa6-bd33-3d78d341a55c,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,7d8acec9-f5a9-411e-921c-446ed0dd3332,7d8acec9-f5a9-411e-921c-446ed0dd3332,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,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,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,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,0,1,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,0,1,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,0,1,538f8da5-e4b3-4bfd-8267-ccb9aaf0188c,538f8da5-e4b3-4bfd-8267-ccb9aaf0188c,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,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,61cd6eab-6bab-4382-986e-4c7fc44f369b,61cd6eab-6bab-4382-986e-4c7fc44f369b,0,1,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,bd68dd13-66bb-40ed-8f4b-0767b7063ffd,0,1,0c44fdea-7b81-45be-87f5-d64456a9d379,0c44fdea-7b81-45be-87f5-d64456a9d379,0,1,0d0ada8a-09bb-4634-bf50-199f3779dad5,0d0ada8a-09bb-4634-bf50-199f3779dad5,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,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,2c8e45b8-7d80-4137-85db-66cd1db94526,2c8e45b8-7d80-4137-85db-66cd1db94526,0,1,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,0,1,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,0,1,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,0,1,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,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,0,1,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,0,1,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,0,1,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,0,1,17d23818-d865-4df6-a5d3-aa21b0287d0c,17d23818-d865-4df6-a5d3-aa21b0287d0c,0,1,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,0,1,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,0,1,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,0,1,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,0,1,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,0,1,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,0,1,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,0,1,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,0,1,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,0,1,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,0,1,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,0,1,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,0,1,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,0,1,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,0,1,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,0,1,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,0,1,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,0,1,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,0,1,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,0,1,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,0,1,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,0,1,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,0,1,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,0,1,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,0,1,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,0,1,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,0,1,6cbedb49-746a-4d63-b3fd-1b0e77ab28c0,6cbedb49-746a-4d63-b3fd-1b0e77ab28c0,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,1e2a18a3-bdde-4033-9b83-f8a6ee47e86c,1e2a18a3-bdde-4033-9b83-f8a6ee47e86c,0,1,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,0,1,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,0,1,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,0,1,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,0,1,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,0,1,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,0,1,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,0,1,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,0,1,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,0,1,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,0,1,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,0,1,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,0,1,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,0,1,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,0,1,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,0,1,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,0,1,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,0,1,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,0,1,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,0,1,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,0,1,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,0,1,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,0,1,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,0,1,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,0,1,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,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,0,1,c2768e31-9e61-4d8d-838d-90b2e2683148,c2768e31-9e61-4d8d-838d-90b2e2683148,0,1,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,0,1,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,0,1,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,0,1,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,0,1,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,0,1,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,0,1,6e8fd732-2746-4c27-95a6-58b0adf94d88,6e8fd732-2746-4c27-95a6-58b0adf94d88,0,1,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,0,1,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,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,1692bf73-8ce6-4b0e-875b-79cdd4396ca7,1692bf73-8ce6-4b0e-875b-79cdd4396ca7,0,1,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,0,1,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,0,1,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,0,1,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,0,1,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,0,1,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,0,1,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,0,1,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,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,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,0,1,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,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,fac2e2cb-c32a-4592-b6c8-fd18806e845d,fac2e2cb-c32a-4592-b6c8-fd18806e845d,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,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,0,1,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,0,1,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,0,1,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,0,1,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,0,1,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,0,1,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,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,bd539a52-d33e-4e9b-8508-230acf76e98a,bd539a52-d33e-4e9b-8508-230acf76e98a,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,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,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,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,0,1,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,0,1,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,0,1,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,0,1,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,0,1,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,0,1,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,0,1,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,0,1,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,0,1,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,0,1,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,0,1,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,0,1,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,0,1,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,0,1,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,0,1,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,0,1,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,0,1,4168f6dc-d43f-435a-8a98-2dd99470568a,4168f6dc-d43f-435a-8a98-2dd99470568a,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,ffea6f3b-86fb-438d-bc22-7e19831f57d3,ffea6f3b-86fb-438d-bc22-7e19831f57d3,0,1,eaae534f-b506-4c86-b649-5b103cf5791d,eaae534f-b506-4c86-b649-5b103cf5791d,0,1,18b4773a-5380-4e71-8b51-ef10e19df17e,18b4773a-5380-4e71-8b51-ef10e19df17e,0,1,42f454f7-cfc4-459b-898f-86cace30410c,42f454f7-cfc4-459b-898f-86cace30410c,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,0,1,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,0,1,330933ca-c4d5-4014-8a6d-910124dfdc7e,330933ca-c4d5-4014-8a6d-910124dfdc7e,0,1,910b3640-790c-4185-88b5-a7c7466374c0,910b3640-790c-4185-88b5-a7c7466374c0,0,1,b5eceb60-76ba-47e3-90bd-52078d4bae4e,b5eceb60-76ba-47e3-90bd-52078d4bae4e,0,1,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,0,1,f7c23753-ff8c-4c26-bdc5-58e3b038668d,f7c23753-ff8c-4c26-bdc5-58e3b038668d,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,10197638-2cde-4424-8390-3bc9abe9852e,10197638-2cde-4424-8390-3bc9abe9852e,0,1,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,0,1,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,ed394820-a216-4c4b-81ae-5dea33ced43b,ed394820-a216-4c4b-81ae-5dea33ced43b,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,1,0,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,852bd696-9a9e-4952-b676-4108f757ad9b,852bd696-9a9e-4952-b676-4108f757ad9b,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,c4d67026-2c97-4126-b8be-49aa6f567e2d,c4d67026-2c97-4126-b8be-49aa6f567e2d,1,0,fda2906d-f499-4016-b13a-99f7f713b898,fda2906d-f499-4016-b13a-99f7f713b898,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,f8c499bc-2b02-4b61-a162-4ce87057952f,f8c499bc-2b02-4b61-a162-4ce87057952f,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,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,06ff179c-864b-4d3b-83c5-f09c3e0f37f4,06ff179c-864b-4d3b-83c5-f09c3e0f37f4,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,ea72bcca-2aad-450d-ab3a-293403cd8d2e,ea72bcca-2aad-450d-ab3a-293403cd8d2e,1,0,1ae364d3-0bec-4089-af23-c60d2a274c85,1ae364d3-0bec-4089-af23-c60d2a274c85,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,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,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,b3847d64-46b8-4bd1-9362-d88d82b34254,b3847d64-46b8-4bd1-9362-d88d82b34254,1,0,14b58f6d-9243-47cd-a430-8408fcddd8d8,14b58f6d-9243-47cd-a430-8408fcddd8d8,0,1,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,8a0db1f1-fb8d-45fa-944d-72d460e49873,8a0db1f1-fb8d-45fa-944d-72d460e49873,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,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,e4da2959-0fb0-48fb-a5aa-e7a5589d69c3,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,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,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,5cacd92f-46af-4d8d-b6e3-31fe23af3389,5cacd92f-46af-4d8d-b6e3-31fe23af3389,0,1,d74dfd31-2016-435b-8652-15fdbca59490,d74dfd31-2016-435b-8652-15fdbca59490,0,1,6411e10c-04e3-4997-9196-c38d717edbb3,6411e10c-04e3-4997-9196-c38d717edbb3,0,1,27651e0e-d560-434b-a49c-f473a5b20c4d,27651e0e-d560-434b-a49c-f473a5b20c4d,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,91488422-c802-4360-b46b-22d1e2905f0b,91488422-c802-4360-b46b-22d1e2905f0b,0,1,90bc48b0-3094-473c-8e07-53da338d7c53,90bc48b0-3094-473c-8e07-53da338d7c53,0,1,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,0,1,27bfc94e-e438-4854-9a9d-39a3b984c9b4,27bfc94e-e438-4854-9a9d-39a3b984c9b4,0,1,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,0,1,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,0,1,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,0,1,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,0,1,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,0,1,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,0,1,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,0,1,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,0,1,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,0,1,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,0,1,3965aac5-1850-4987-a6b6-683f115077f9,3965aac5-1850-4987-a6b6-683f115077f9,0,1,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,a9f927ef-22a2-4d77-8648-4bb25eeaccf2,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,4a9e4ace-b2e9-4445-a77b-ba30a4995900,4a9e4ace-b2e9-4445-a77b-ba30a4995900,0,1,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,0,1,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,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,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,0,1,bd97e481-cfc4-4a40-8438-985020f06abd,bd97e481-cfc4-4a40-8438-985020f06abd,0,1,120c5162-b03c-46ce-8a2a-8ef501971715,120c5162-b03c-46ce-8a2a-8ef501971715,0,1,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,1853a370-767a-4845-9425-2f9363d91bd8,1853a370-767a-4845-9425-2f9363d91bd8,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,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,0,1,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,0,1,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,0,1,30fb1877-11cf-4985-a65d-6639a06b33f7,30fb1877-11cf-4985-a65d-6639a06b33f7,0,1,e9c355cb-d4ea-49d1-a893-f8f295a90701,e9c355cb-d4ea-49d1-a893-f8f295a90701,0,1,e9e242b7-0077-4c47-8f45-df50e7cc90cf,e9e242b7-0077-4c47-8f45-df50e7cc90cf,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,8811ea1a-1221-47b7-9574-3f36ff15a3cf,8811ea1a-1221-47b7-9574-3f36ff15a3cf,0,1,4eefabc9-49ab-4301-8238-3f09b40d379e,4eefabc9-49ab-4301-8238-3f09b40d379e,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,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,437021b0-9f18-4238-9af6-7ca275b91fa4,437021b0-9f18-4238-9af6-7ca275b91fa4,0,1,761a35cb-8387-435f-b671-d5bb0fe9bfeb,761a35cb-8387-435f-b671-d5bb0fe9bfeb,0,1,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,0,1,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,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,dad9710a-73ca-4e0d-b98b-75f955d0822d,dad9710a-73ca-4e0d-b98b-75f955d0822d,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,07b53437-cc8d-4834-a1e0-7007538b6eab,07b53437-cc8d-4834-a1e0-7007538b6eab,0,1,3846cbb9-1e92-4342-84d8-8718ac9f406e,3846cbb9-1e92-4342-84d8-8718ac9f406e,0,1,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,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,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,0,1,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,0,1,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,0,1,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,0,1,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,0,1,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,0,1,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,0,1,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,0,1,b8029aa5-0268-49d8-bd1e-bdaa9b7ce34c,b8029aa5-0268-49d8-bd1e-bdaa9b7ce34c,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,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0,1,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,0,1,ca81e0ea-c428-47f9-aedb-078214104a2f,ca81e0ea-c428-47f9-aedb-078214104a2f,0,1,35a28677-0653-47f9-82e1-02c4b9266fee,35a28677-0653-47f9-82e1-02c4b9266fee,0,1,9518d09c-6996-4439-9278-3c71d5ae8fce,9518d09c-6996-4439-9278-3c71d5ae8fce,0,1,2e17464f-9cef-4812-865f-4eb77ff16b6a,2e17464f-9cef-4812-865f-4eb77ff16b6a,0,1,da2c8a7c-8386-467d-a049-1090956b70de,da2c8a7c-8386-467d-a049-1090956b70de,0,1,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,0,1,453cb913-9c46-429a-a9e1-30424b90c022,453cb913-9c46-429a-a9e1-30424b90c022,0,1,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,0,1,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,0,1,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,0,1,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,0,1,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,0,1,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,0,1,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,0,1,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,0,1,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,0,1,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,0,1,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,0,1,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,0,1,1f4d7158-15ed-4b0c-a7ed-1f8cfe2bd882,1f4d7158-15ed-4b0c-a7ed-1f8cfe2bd882,0,1,7effb232-a84f-4b4e-aa0c-1cefdc6ba612,7effb232-a84f-4b4e-aa0c-1cefdc6ba612,0,1,e4ce04bf-15a0-4d9d-af7b-4ec9e1fb36be,e4ce04bf-15a0-4d9d-af7b-4ec9e1fb36be,0,1,f75411c5-a317-42c4-8731-9b16856109d5,f75411c5-a317-42c4-8731-9b16856109d5,0,1,6ef011aa-eda4-4ddf-a588-5208790f6937,6ef011aa-eda4-4ddf-a588-5208790f6937,0,1,db07da1d-0281-4acf-90a2-3fd35629ab35,db07da1d-0281-4acf-90a2-3fd35629ab35,0,1,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,0,1,b61d3dc2-7a03-46bc-90fc-d58e94764194,b61d3dc2-7a03-46bc-90fc-d58e94764194,0,1,37818589-95de-43df-8a0f-f7149f96f683,37818589-95de-43df-8a0f-f7149f96f683,0,1,8d877829-5cf0-46fd-99b5-9bb5e5e5dc51,8d877829-5cf0-46fd-99b5-9bb5e5e5dc51,0,1,5ea65812-6c39-440e-82a4-621a16595d86,5ea65812-6c39-440e-82a4-621a16595d86,0,1,31dd320b-06aa-4314-9914-2c2420f572a1,31dd320b-06aa-4314-9914-2c2420f572a1,0,1,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,0,1,d4655391-144c-4ba6-aee5-1edafebe862c,d4655391-144c-4ba6-aee5-1edafebe862c,0,1,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,0,1,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,0,1,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,0,1,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,0,1,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,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,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,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,ebc2ade3-a760-48da-a75e-3f4d29c84b70,ebc2ade3-a760-48da-a75e-3f4d29c84b70,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,0e2c2490-50ee-4fed-9119-5dec8385f925,0e2c2490-50ee-4fed-9119-5dec8385f925,0,1,aa368dd9-86e1-46f9-a296-591c3639734d,aa368dd9-86e1-46f9-a296-591c3639734d,0,1,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,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,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,0,1,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,0,1,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,0,1,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,0,1,c05f15b0-a659-4473-b6d0-acebc4a2da57,c05f15b0-a659-4473-b6d0-acebc4a2da57,0,1,ee91fa49-1a24-4a2f-80ca-103cf130945f,ee91fa49-1a24-4a2f-80ca-103cf130945f,0,1,bdf7e4e7-1187-482c-a564-a62ed92719c6,bdf7e4e7-1187-482c-a564-a62ed92719c6,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,cb747d24-6d8a-4d97-8a13-305ee6f39f75,cb747d24-6d8a-4d97-8a13-305ee6f39f75,0,1,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,0,1,f85e8f91-5e29-490a-b3d7-f72f97593086,f85e8f91-5e29-490a-b3d7-f72f97593086,0,1,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,0,1,00afd243-5575-4340-9217-40c8d61c1d54,00afd243-5575-4340-9217-40c8d61c1d54,0,1,38184767-167b-49b7-b995-4f13900b3822,38184767-167b-49b7-b995-4f13900b3822,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,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,0,1,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,0,1,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,a8e4d97f-e2da-4aa8-a221-3cbcc135f403,0,1,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,0,1,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,f2b0eab2-e34b-42f8-9b24-5596b4c17d7f,0,1,3e127ace-1506-44ca-9df8-a7a30aa11c56,3e127ace-1506-44ca-9df8-a7a30aa11c56,0,1,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,0,1,2b3cab9a-fd05-42a8-811a-f443aee5e192,2b3cab9a-fd05-42a8-811a-f443aee5e192,0,1,9e9bb3df-4658-4278-8fe7-d4bfc46d2ce1,9e9bb3df-4658-4278-8fe7-d4bfc46d2ce1,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,093dfea8-18ea-457c-aa6f-9bea9bdba76c,093dfea8-18ea-457c-aa6f-9bea9bdba76c,0,1,6c58cc27-215e-4169-88ae-004ecc657d53,6c58cc27-215e-4169-88ae-004ecc657d53,0,1,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,0,1,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,0,1,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,0,1,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,0,1,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,0,1,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,0,1,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,0,1,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,0,1,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,90433152-f389-4d45-8ccc-3eb6c7a7e1f0,0,1,ce235ab9-1dec-459a-9fec-498c262ece56,ce235ab9-1dec-459a-9fec-498c262ece56,0,1,39355e82-30a6-431e-9697-e2c42e82de83,39355e82-30a6-431e-9697-e2c42e82de83,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,18f4994a-d907-4182-b41b-6e8ec56ae7e0,18f4994a-d907-4182-b41b-6e8ec56ae7e0,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,db80ae50-2baf-445b-9055-80f2c7f22c24,db80ae50-2baf-445b-9055-80f2c7f22c24,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,3e9d6ca0-62e0-46b0-b3e4-c625a9792b47,3e9d6ca0-62e0-46b0-b3e4-c625a9792b47,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,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,0,1,cbeaf6c6-7cfb-4b63-8c4a-9db1fa4aeb27,cbeaf6c6-7cfb-4b63-8c4a-9db1fa4aeb27,0,1,f4e78a82-984e-408e-9989-33ea48cbd199,f4e78a82-984e-408e-9989-33ea48cbd199,0,1,25e489ed-8879-42aa-ada1-3257d811c2e2,25e489ed-8879-42aa-ada1-3257d811c2e2,0,1,899f7c74-62c8-4378-a45d-f2967d26edf3,899f7c74-62c8-4378-a45d-f2967d26edf3,0,1,1a3ed69b-fc1a-4151-90e1-460a5b6bfa15,1a3ed69b-fc1a-4151-90e1-460a5b6bfa15,0,1,fd18fb60-8c1f-4c72-a07a-5d0e1f3da062,fd18fb60-8c1f-4c72-a07a-5d0e1f3da062,0,1,48aaf6fa-1f11-47a7-82fa-7e2a9e944414,48aaf6fa-1f11-47a7-82fa-7e2a9e944414,0,1,3d95b8fa-ebe7-46f7-8ec6-69195c91cc5b,3d95b8fa-ebe7-46f7-8ec6-69195c91cc5b,0,1,60bec79f-4965-451e-8e49-117e81d80527,60bec79f-4965-451e-8e49-117e81d80527,0,1,4b71f609-9453-43d0-a3ee-532ea472a84e,4b71f609-9453-43d0-a3ee-532ea472a84e,0,1,703bfeb7-d98d-4baf-a5e1-4a5cb7817ccc,703bfeb7-d98d-4baf-a5e1-4a5cb7817ccc,0,1,2de98078-17b2-4fc0-87f8-ad9a52f03807,2de98078-17b2-4fc0-87f8-ad9a52f03807,0,1,3959030a-b943-4c9b-8463-ab46b5f5355d,3959030a-b943-4c9b-8463-ab46b5f5355d,0,1,2893783c-237d-4746-b58b-0d3f10374bdc,2893783c-237d-4746-b58b-0d3f10374bdc,0,1,e8d3756d-32b5-4919-8899-bf6665a7945d,e8d3756d-32b5-4919-8899-bf6665a7945d,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,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,c0c6ef45-2730-4762-a34e-e7cc5ef6c8f2,c0c6ef45-2730-4762-a34e-e7cc5ef6c8f2,0,1,01611261-f796-43ca-8302-11a31ebfa87f,01611261-f796-43ca-8302-11a31ebfa87f,0,1,d3c9b925-6b74-42db-8b21-ab21d24797d1,d3c9b925-6b74-42db-8b21-ab21d24797d1,0,1,651ce6e7-f829-4436-897d-1403d59b2fec,651ce6e7-f829-4436-897d-1403d59b2fec,0,1,033d9a8f-73d3-4be3-b0e9-7c9e9cb12161,033d9a8f-73d3-4be3-b0e9-7c9e9cb12161,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,dba0d5db-9499-42c0-b4e0-2dd9f7ec462b,dba0d5db-9499-42c0-b4e0-2dd9f7ec462b,0,1,8ecfdcbc-099e-4206-b3d8-541517117ac5,8ecfdcbc-099e-4206-b3d8-541517117ac5,0,1,9f845a0d-b0cb-40c3-9e70-04f4b473990c,9f845a0d-b0cb-40c3-9e70-04f4b473990c,0,1,30c0ab17-d8c7-46c3-82e2-b67572db0a83,30c0ab17-d8c7-46c3-82e2-b67572db0a83,0,1,e82dbb36-a077-47d9-a904-f01ce82b4c19,e82dbb36-a077-47d9-a904-f01ce82b4c19,0,1,f4afbbd8-c503-4715-b0f2-476e0dcbf14c,f4afbbd8-c503-4715-b0f2-476e0dcbf14c,0,1,65625b4e-9ff9-4e15-b3f1-cc0003df25ea,65625b4e-9ff9-4e15-b3f1-cc0003df25ea,0,1,5feb2e44-9d15-4bf8-9f7d-efea6b13e402,5feb2e44-9d15-4bf8-9f7d-efea6b13e402,0,1,619f64ea-78da-448b-86c7-fbb561500211,619f64ea-78da-448b-86c7-fbb561500211,0,1,820d02c2-2cdd-4b09-ab65-98048daef9a0,820d02c2-2cdd-4b09-ab65-98048daef9a0,0,1,b0d36a9d-9ef9-4eff-9360-aeca38d7e967,b0d36a9d-9ef9-4eff-9360-aeca38d7e967,0,1,7e283796-d8a9-442b-b646-92e85beec1e3,7e283796-d8a9-442b-b646-92e85beec1e3,0,1,5c79771f-f98c-453d-9672-8aff65978e20,5c79771f-f98c-453d-9672-8aff65978e20,0,1,51656bbb-096b-4be7-95fb-801e84651d32,51656bbb-096b-4be7-95fb-801e84651d32,0,1,f9b36fd7-095a-48ef-80a6-87415eac7225,f9b36fd7-095a-48ef-80a6-87415eac7225,0,1,1dbecc5f-fe9c-4d8b-a96b-c4c49c06d088,1dbecc5f-fe9c-4d8b-a96b-c4c49c06d088,0,1,97414063-7575-4bb2-9246-a5565fccc1e1,97414063-7575-4bb2-9246-a5565fccc1e1,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,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,f8a456fa-a533-444c-a504-0e74306ada44,f8a456fa-a533-444c-a504-0e74306ada44,0,1,4751a91a-f211-4f66-8238-9bb5668cbc67,4751a91a-f211-4f66-8238-9bb5668cbc67,0,1,b9a6b053-2b93-4946-9531-040d3131dcc5,b9a6b053-2b93-4946-9531-040d3131dcc5,0,1,d95dd1f5-ef84-4bcc-b017-65e390d48873,d95dd1f5-ef84-4bcc-b017-65e390d48873,0,1,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,0,1,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,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,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,0,1,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,f1381abc-e09f-407d-b6b5-c59e7c9e2fd7,0,1,9c052faf-1d7c-452d-ab81-7fd8f283af66,9c052faf-1d7c-452d-ab81-7fd8f283af66,0,1,5197d1d9-e5f7-4c2d-a72f-8e321a5bde04,5197d1d9-e5f7-4c2d-a72f-8e321a5bde04,0,1,c4bc2765-4007-4f48-b8f0-f5911c9a62b6,c4bc2765-4007-4f48-b8f0-f5911c9a62b6,0,1,5cd8157f-7d91-48b7-afd6-11942da3ba24,5cd8157f-7d91-48b7-afd6-11942da3ba24,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,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,870b4d6d-0b89-4eda-a2b3-5c6db7dbe864,0,1,c172aeaf-b444-47c0-baee-80ccd91fe934,c172aeaf-b444-47c0-baee-80ccd91fe934,0,1,5e2ab240-c2df-4a77-901f-c6c0a5ddbaaf,5e2ab240-c2df-4a77-901f-c6c0a5ddbaaf,0,1,016e5c18-2a1f-49fd-b618-078d752820c9,016e5c18-2a1f-49fd-b618-078d752820c9,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,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,0,1,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0,1,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,0,1,420748d8-4042-4e1e-aca1-ac0190cdf54e,420748d8-4042-4e1e-aca1-ac0190cdf54e,0,1,e6c871d6-e06f-420b-ae04-dbf735d3233d,e6c871d6-e06f-420b-ae04-dbf735d3233d,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,64344383-5823-42aa-8004-f0ce4bfee198,64344383-5823-42aa-8004-f0ce4bfee198,0,1,94eaae81-638b-4ac2-aea3-174e1c9c2877,94eaae81-638b-4ac2-aea3-174e1c9c2877,0,1,59edae58-edef-4451-97e1-9fbb46a3fd9c,59edae58-edef-4451-97e1-9fbb46a3fd9c,0,1,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,0,1,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,0,1,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,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,73d04ff9-ca39-4a7b-82d6-a7dba677c7d8,73d04ff9-ca39-4a7b-82d6-a7dba677c7d8,0,1,ee657795-8850-4735-a655-80d0d451c3ff,ee657795-8850-4735-a655-80d0d451c3ff,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,5a7a98c9-af4d-4961-ae3c-4c1f3accce8d,5a7a98c9-af4d-4961-ae3c-4c1f3accce8d,0,1,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,0,1,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,0,1,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,0,1,9bc09758-a7ce-44e0-baa3-a3e909869d9b,9bc09758-a7ce-44e0-baa3-a3e909869d9b,0,1,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,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,0,1,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,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,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,0,1,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,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,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,0,1,d487e66e-a7b0-4110-903e-652fe0e6106c,d487e66e-a7b0-4110-903e-652fe0e6106c,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,0bddbceb-5739-46f8-88b6-06bcead350d9,0bddbceb-5739-46f8-88b6-06bcead350d9,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,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,25ca2e70-0293-4bd4-9e08-bbd39120b3cf,25ca2e70-0293-4bd4-9e08-bbd39120b3cf,0,1,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,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,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,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,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,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,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,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,d5588c0d-3e94-485b-a7e9-45f5cf74df9e,0,1,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,c2ef8d6b-de7b-430d-ac30-76cdaf0579c2,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,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,0,1,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,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,b94523c0-33fe-452a-ada5-071cd78fc47b,b94523c0-33fe-452a-ada5-071cd78fc47b,0,1,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,0,1,4e550d28-7174-412b-bfed-559a3dc753f6,4e550d28-7174-412b-bfed-559a3dc753f6,0,1,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,0,1,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,0,1,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,0,1,4dfc428e-c2d7-40b8-925f-d7c186f52476,4dfc428e-c2d7-40b8-925f-d7c186f52476,0,1,80ae578c-f6c7-4589-98c5-5691714baa29,80ae578c-f6c7-4589-98c5-5691714baa29,0,1,a44cc726-48b9-4193-8991-c9e0777ed7de,a44cc726-48b9-4193-8991-c9e0777ed7de,0,1,52c38669-4735-4f5b-8e0e-17d7e15ea94a,52c38669-4735-4f5b-8e0e-17d7e15ea94a,0,1,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,0,1,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,0,1,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,0,1,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,0,1,d78b5faf-b34b-4fa2-89a5-f4bc45203528,d78b5faf-b34b-4fa2-89a5-f4bc45203528,0,1,b4e10835-31e8-4f16-a5eb-0b2ac687fa65,b4e10835-31e8-4f16-a5eb-0b2ac687fa65,0,1,942a962a-bccb-42c0-b279-077a9b33c70a,942a962a-bccb-42c0-b279-077a9b33c70a,0,1,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,0,1,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,0,1,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,0,1,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,0,1,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,0,1,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,0,1,67171b08-7dd7-451d-a22d-01858ce4ab2b,67171b08-7dd7-451d-a22d-01858ce4ab2b,0,1,68299930-fc24-4731-b1bb-59aecdbacf5e,68299930-fc24-4731-b1bb-59aecdbacf5e,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,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,0,1,28c3f8f5-78f8-4d09-9f09-1407825b13e3,28c3f8f5-78f8-4d09-9f09-1407825b13e3,0,1,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,0,1,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,0,1,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,0,1,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0,1,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,0,1,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,0,1,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,0,1,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,0,1,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,0,1,fa7309b1-916b-454b-8357-b71aca1e2fb7,fa7309b1-916b-454b-8357-b71aca1e2fb7,0,1,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,0,1,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,0,1,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,0,1,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,0,1,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,0,1,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,0,1,8e99ed5a-d64a-4d4d-a422-3f1055be6ebd,8e99ed5a-d64a-4d4d-a422-3f1055be6ebd,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,9887e36d-0dba-4301-a77b-102caefc7ca9,9887e36d-0dba-4301-a77b-102caefc7ca9,0,1,7eef7281-c5c6-48d5-a636-c437b75611d6,7eef7281-c5c6-48d5-a636-c437b75611d6,0,1,3494fa21-02e0-46bb-b810-534e6f1b4b20,3494fa21-02e0-46bb-b810-534e6f1b4b20,0,1,c6c2fa57-a3c2-4f2a-bc02-4436f570cc78,c6c2fa57-a3c2-4f2a-bc02-4436f570cc78,0,1,d73cc867-e293-4fff-9898-dd50e27e26f4,d73cc867-e293-4fff-9898-dd50e27e26f4,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,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,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0,1,fba74e94-e7e1-46d9-b72b-269cb1cc8a71,fba74e94-e7e1-46d9-b72b-269cb1cc8a71,0,1,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,0,1,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,0,1,a687748a-0b2a-4277-b935-07616d28430d,a687748a-0b2a-4277-b935-07616d28430d,0,1,33f8892d-8d7f-4b00-af4f-af37193fa395,33f8892d-8d7f-4b00-af4f-af37193fa395,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,60208d56-f778-4ff6-abdd-ea6622504ace,60208d56-f778-4ff6-abdd-ea6622504ace,0,1,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,0,1,1a3097ae-e51a-4335-93fc-47fcbbe8e8b7,1a3097ae-e51a-4335-93fc-47fcbbe8e8b7,0,1,6aa814fa-417e-428c-951e-6efd9d0775da,6aa814fa-417e-428c-951e-6efd9d0775da,0,1,5a979568-6bc7-4f75-b585-ebdcaafc119a,5a979568-6bc7-4f75-b585-ebdcaafc119a,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,97ea39b4-9a69-4598-b998-044fba1f4f81,97ea39b4-9a69-4598-b998-044fba1f4f81,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,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,0,1,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,0,1,bfad444f-ee47-4131-a371-8089b8a09f4f,bfad444f-ee47-4131-a371-8089b8a09f4f,0,1,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,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,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,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,0,1,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,0,1,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,0,1,f8139d21-0380-43b5-8025-c986f8598c74,f8139d21-0380-43b5-8025-c986f8598c74,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,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,f01fedee-d4c1-498d-9c9b-78b2e7e99e65,f01fedee-d4c1-498d-9c9b-78b2e7e99e65,0,1,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,0,1,7c34aa14-1300-4d03-8a1f-56e801748db4,7c34aa14-1300-4d03-8a1f-56e801748db4,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,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,0,1,d5cf2a3a-3176-4971-b67b-45e090e9b8df,d5cf2a3a-3176-4971-b67b-45e090e9b8df,0,1,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,0,1,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,0,1,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,0,1,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,0,1,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,0,1,5462f1ab-2095-4515-875e-471900f05db9,5462f1ab-2095-4515-875e-471900f05db9,0,1,84e63b9b-0293-49bc-ba7f-e803bc44fc42,84e63b9b-0293-49bc-ba7f-e803bc44fc42,0,1,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,0,1,aace391f-e561-4848-8b28-ef44f2d262bb,aace391f-e561-4848-8b28-ef44f2d262bb,0,1,c54f31ce-114b-46d3-b4c6-12c8f07727ca,c54f31ce-114b-46d3-b4c6-12c8f07727ca,0,1,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,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,35103a27-230c-45c0-a8c9-24bd46608bbb,35103a27-230c-45c0-a8c9-24bd46608bbb,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,bed22a72-1a5e-46e5-ad71-f94e9508e272,bed22a72-1a5e-46e5-ad71-f94e9508e272,0,1,9cf45640-aeb3-45aa-97aa-922a83e61510,9cf45640-aeb3-45aa-97aa-922a83e61510,0,1,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,0,1,9d5c615c-49af-45e9-aa3d-07747466a51b,9d5c615c-49af-45e9-aa3d-07747466a51b,0,1,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,0,1,36ec0fb5-a5f3-4685-9696-c44a393998f6,36ec0fb5-a5f3-4685-9696-c44a393998f6,0,1,1b887b59-9a72-4aa3-a985-7a8d6a427b95,1b887b59-9a72-4aa3-a985-7a8d6a427b95,0,1,1fca06d9-b015-4fc8-abdd-3e2397e0c307,1fca06d9-b015-4fc8-abdd-3e2397e0c307,0,1,05b6a743-5831-4c77-894c-b19005b0e141,05b6a743-5831-4c77-894c-b19005b0e141,0,1,295a5554-f6cc-437b-9e89-c6f653a8b858,295a5554-f6cc-437b-9e89-c6f653a8b858,0,1,eb9ec412-3dc0-4d58-9b15-785324e58378,eb9ec412-3dc0-4d58-9b15-785324e58378,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,b6ac957c-0525-4c48-854e-86007beb83db,b6ac957c-0525-4c48-854e-86007beb83db,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,078d3269-80fd-4406-9972-ab2a5fd83434,078d3269-80fd-4406-9972-ab2a5fd83434,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,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,0,1,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,0,1,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,0,1,7e2ba519-fbb9-4163-b20b-b99898e6ac57,7e2ba519-fbb9-4163-b20b-b99898e6ac57,0,1,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,0,1,0a5e38b7-2794-419f-8c29-076490c7b5ce,0a5e38b7-2794-419f-8c29-076490c7b5ce,0,1,1346045c-e747-4d5c-b8c6-d9dcc268ed3a,1346045c-e747-4d5c-b8c6-d9dcc268ed3a,0,1,e7ed2b66-e360-466a-8b5e-8ba0d8e36aba,e7ed2b66-e360-466a-8b5e-8ba0d8e36aba,0,1,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,0,1,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,0,1,bf1e9682-3cc6-44b6-b9e4-a3b37facb0e7,bf1e9682-3cc6-44b6-b9e4-a3b37facb0e7,0,1,9a70c38e-6770-4edf-9566-ce44b537a532,9a70c38e-6770-4edf-9566-ce44b537a532,0,1,417063e2-7d8c-4837-b68d-df5724048e70,417063e2-7d8c-4837-b68d-df5724048e70,0,1,31628f30-2ac2-446e-9b32-c544019c0b40,31628f30-2ac2-446e-9b32-c544019c0b40,0,1,cd9bafa1-23fe-4094-9137-b36df6e8e8f5,cd9bafa1-23fe-4094-9137-b36df6e8e8f5,0,1,c1b4726f-7d9f-43a2-817a-5b7ce7a4fb46,c1b4726f-7d9f-43a2-817a-5b7ce7a4fb46,0,1,e24adcf3-71b1-4081-8dab-3aaa628a9331,e24adcf3-71b1-4081-8dab-3aaa628a9331,0,1,00fc7fe1-66c2-4d3d-bc17-b3ba5211a3ab,00fc7fe1-66c2-4d3d-bc17-b3ba5211a3ab,0,1,64d4b8ea-5906-4f0b-8328-9139a09202c0,64d4b8ea-5906-4f0b-8328-9139a09202c0,0,1,e8301322-f929-4ff5-9633-18e8a08db6fd,e8301322-f929-4ff5-9633-18e8a08db6fd,0,1,0af47dcf-7220-4b15-bb14-3324f65b8af6,0af47dcf-7220-4b15-bb14-3324f65b8af6,0,1,a9559418-2410-4e20-8bf1-74983406d2f3,a9559418-2410-4e20-8bf1-74983406d2f3,0,1,05069fb4-0bbb-4d8e-93f3-e5be47a4d777,05069fb4-0bbb-4d8e-93f3-e5be47a4d777,0,1,6e4f3314-4f8a-4413-b946-805cc375ffe6,6e4f3314-4f8a-4413-b946-805cc375ffe6,0,1,7adec5ff-8172-4a62-9e5c-8ef77df16d1b,7adec5ff-8172-4a62-9e5c-8ef77df16d1b,0,1,57fa19bb-3f68-4243-b216-a8e13a022b48,57fa19bb-3f68-4243-b216-a8e13a022b48,0,1,4ec82ae6-fbd6-4788-bcf0-2c21ce54a03d,4ec82ae6-fbd6-4788-bcf0-2c21ce54a03d,0,1,578a92d3-b380-4a8b-af9d-2f608dbae5d0,578a92d3-b380-4a8b-af9d-2f608dbae5d0,0,1,ca8450e9-38c1-4db7-8832-2c6fe2c4dc0b,ca8450e9-38c1-4db7-8832-2c6fe2c4dc0b,0,1,138f0718-4566-41d7-86f7-50f0c5e6c90e,138f0718-4566-41d7-86f7-50f0c5e6c90e,0,1,3e12296d-7cd7-4dbc-bdf3-3d40f945b483,3e12296d-7cd7-4dbc-bdf3-3d40f945b483,0,1,baa2f562-a08c-41d9-b1fc-881aafeef2fa,baa2f562-a08c-41d9-b1fc-881aafeef2fa,0,1,020882c2-dbc4-4b40-8556-6a11d75b00fe,020882c2-dbc4-4b40-8556-6a11d75b00fe,0,1,f54dd38b-e222-4520-bdf7-8d6c64c0244c,f54dd38b-e222-4520-bdf7-8d6c64c0244c,0,1,58aabfdb-61c2-42ad-aed1-0e88b5414f0b,58aabfdb-61c2-42ad-aed1-0e88b5414f0b,0,1,52507c4e-9378-4f00-a6b8-dd7e60d2afa5,52507c4e-9378-4f00-a6b8-dd7e60d2afa5,0,1,bc22ce64-a79c-4118-8ede-a69d66f62b0a,bc22ce64-a79c-4118-8ede-a69d66f62b0a,0,1,d21971c9-9aa6-448a-ab37-49ad0b0547ec,d21971c9-9aa6-448a-ab37-49ad0b0547ec,0,1,230b80c7-620a-40d3-b473-b6289cfce8c0,230b80c7-620a-40d3-b473-b6289cfce8c0,0,1,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,0,1,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,0,1,e035494e-71ed-44f1-b04c-f2f47bcfa0fe,e035494e-71ed-44f1-b04c-f2f47bcfa0fe,0,1,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,0,1,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,0,1,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,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,ccd2536d-592f-4109-bda9-7964c8b9757d,ccd2536d-592f-4109-bda9-7964c8b9757d,0,1,6c34eef9-9405-4de0-9177-1bae85251ae4,6c34eef9-9405-4de0-9177-1bae85251ae4,0,1,d295f084-1c23-4c94-90eb-85928648224e,d295f084-1c23-4c94-90eb-85928648224e,0,1,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,0,1,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,0,1,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,bde70605-7ffc-4b38-b65d-e7b0d14e2f3a,bde70605-7ffc-4b38-b65d-e7b0d14e2f3a,0,1,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,0,1,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,0,1,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,0,1,5d4e67ae-7029-46d2-86f9-834a04a9dd71,5d4e67ae-7029-46d2-86f9-834a04a9dd71,0,1,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,0,1,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,0,1,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,0,1,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,0,1,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,0,1,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,0,1,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,0,1,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,0,1,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,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,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,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,0,1,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,0,1,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,0,1,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,0,1,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,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,0,1,8361991a-0f30-4a03-9a4c-90556b744f53,8361991a-0f30-4a03-9a4c-90556b744f53,0,1,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,0,1,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,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,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,5a3cc2a8-f519-45ac-af9b-c57a4f1acdc0,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,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,0,1,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,0,1,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,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,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,0,1,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,0,1,ece7f438-0898-4a02-89cb-6a6aa689e331,ece7f438-0898-4a02-89cb-6a6aa689e331,0,1,15ca91d9-0373-435c-a69f-409f1eff6c3b,15ca91d9-0373-435c-a69f-409f1eff6c3b,0,1,dd9176ec-9186-4277-a155-14ed2efef15f,dd9176ec-9186-4277-a155-14ed2efef15f,0,1,b980519c-0fb7-45db-92ab-8241ec50c8c8,b980519c-0fb7-45db-92ab-8241ec50c8c8,0,1,d45f4ad8-c34a-4a14-9278-df88a071d610,d45f4ad8-c34a-4a14-9278-df88a071d610,0,1,9bfb9d89-3723-4099-b1c3-88d4bb8862f5,9bfb9d89-3723-4099-b1c3-88d4bb8862f5,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,2fcde115-5c5a-465c-a326-d7ba379675fc,2fcde115-5c5a-465c-a326-d7ba379675fc,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,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,0,1,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,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,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,bbfd9834-12b4-49ca-bdae-5c94efa80482,bbfd9834-12b4-49ca-bdae-5c94efa80482,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,433a114f-3198-4ef6-bbf8-ce9b54fdb736,433a114f-3198-4ef6-bbf8-ce9b54fdb736,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,1ed9a67b-5b15-4862-907f-b194d6113070,1ed9a67b-5b15-4862-907f-b194d6113070,0,1,1aceb0e8-9131-44c2-aaa5-db96eea1c0de,1aceb0e8-9131-44c2-aaa5-db96eea1c0de,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,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,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,0,1,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,0,1,fb79315a-8d27-4c5e-9cfb-c7778dabedef,fb79315a-8d27-4c5e-9cfb-c7778dabedef,0,1,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,0,1,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,0,1,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,0,1,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,0,1,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,0,1,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,0,1,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,0,1,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,0,1,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,0,1,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,0,1,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,e3ca64af-7766-48e2-b7c6-2a96f4539905,e3ca64af-7766-48e2-b7c6-2a96f4539905,0,1,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,0,1,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,0,1,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,0,1,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,0,1,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,0,1,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,0,1,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,0,1,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,0,1,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,0,1,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,0,1,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,0,1,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,0481bc65-6a32-46b9-ae87-993ba52a29a5,0481bc65-6a32-46b9-ae87-993ba52a29a5,0,1,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,0,1,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,0,1,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0,1,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,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,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,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,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,db4eb2f0-1e8c-4fd6-a818-ee1a09ed7caf,db4eb2f0-1e8c-4fd6-a818-ee1a09ed7caf,0,1,7898bdc8-e895-4894-810a-19607a553c53,7898bdc8-e895-4894-810a-19607a553c53,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,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,00bf04d6-6a8e-4b13-94cf-36c1c6090cd8,0,1,ebc25606-46e7-4252-8661-cfce0e77830e,ebc25606-46e7-4252-8661-cfce0e77830e,0,1,dfa258a8-7194-49a5-8c25-6de44cf97a0f,dfa258a8-7194-49a5-8c25-6de44cf97a0f,0,1,3fd4bc77-2a1b-4750-a54a-4171c8d40027,3fd4bc77-2a1b-4750-a54a-4171c8d40027,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,9671593b-1943-4955-bbe9-1427f48b48bc,9671593b-1943-4955-bbe9-1427f48b48bc,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,5ec9bae5-a7c2-4b95-ad1d-a6543dbd8c9d,5ec9bae5-a7c2-4b95-ad1d-a6543dbd8c9d,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,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,0,1,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,0,1,9f921157-fa57-41b6-93f5-61fb5fb4a820,9f921157-fa57-41b6-93f5-61fb5fb4a820,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,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,0,1,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,0,1,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,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,9a388c1c-bf74-464e-be2d-bdb2e36232b5,9a388c1c-bf74-464e-be2d-bdb2e36232b5,0,1,06e9fb36-cc47-4517-baac-d666703bdf03,06e9fb36-cc47-4517-baac-d666703bdf03,0,1,cef67574-e5cd-40f9-b7b9-47cff1a1f703,cef67574-e5cd-40f9-b7b9-47cff1a1f703,0,1,ccacc860-383d-405e-9f95-b31e9da27fc9,ccacc860-383d-405e-9f95-b31e9da27fc9,0,1,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,0,1,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,0,1,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,0,1,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,0,1,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,0,1,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,0,1,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,0,1,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0,1,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,0,1,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,0,1,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,0,1,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,0,1,ef762828-452c-4d3a-ad7a-7f4933ab05ac,ef762828-452c-4d3a-ad7a-7f4933ab05ac,0,1,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,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,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,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,023d747d-4ac1-4e0e-9de1-76bdc4f74d8b,023d747d-4ac1-4e0e-9de1-76bdc4f74d8b,0,1,b36fd525-6e49-4ea0-94e8-a0895d45bb43,b36fd525-6e49-4ea0-94e8-a0895d45bb43,0,1,56a0a9ce-c5ce-4f3d-ad38-ff6a7a4bd162,56a0a9ce-c5ce-4f3d-ad38-ff6a7a4bd162,0,1,5bbd5ae3-e327-40a2-bb94-91be5db1e14d,5bbd5ae3-e327-40a2-bb94-91be5db1e14d,0,1,591f46c9-8d40-421b-84a7-755a6b330539,591f46c9-8d40-421b-84a7-755a6b330539,0,1,c9eb2a89-3dc9-4ac6-9fac-f8042f8b024b,c9eb2a89-3dc9-4ac6-9fac-f8042f8b024b,0,1,a1693bbe-d65d-47e2-8425-9bf6f9b1d906,a1693bbe-d65d-47e2-8425-9bf6f9b1d906,0,1,6f8ff42b-76ba-4ddf-b3e4-3a2ded880210,6f8ff42b-76ba-4ddf-b3e4-3a2ded880210,0,1,643228fa-f3b0-4927-878b-0fdcd375684c,643228fa-f3b0-4927-878b-0fdcd375684c,0,1,13c98801-97c4-4638-9aa3-aabc6983b7d8,13c98801-97c4-4638-9aa3-aabc6983b7d8,0,1,1d62c9a2-9692-4e7e-b556-70906fb0cbbb,1d62c9a2-9692-4e7e-b556-70906fb0cbbb,0,1,bb8b4325-c43f-4be0-af4a-8dda8447438f,bb8b4325-c43f-4be0-af4a-8dda8447438f,0,1,da52d51a-7e54-4cfd-9f2c-af84da7e5a8f,da52d51a-7e54-4cfd-9f2c-af84da7e5a8f,0,1,0f76c812-38d0-4cab-bc09-d0b36ee48f68,0f76c812-38d0-4cab-bc09-d0b36ee48f68,0,1,02ef7596-599a-4d24-9e9d-fdd83263f576,02ef7596-599a-4d24-9e9d-fdd83263f576,0,1,4ba00bc3-30a3-4a7f-8726-f8393e1a89dd,4ba00bc3-30a3-4a7f-8726-f8393e1a89dd,0,1,0f0dd474-fe3a-40d1-baeb-c9fc1ec709ac,0f0dd474-fe3a-40d1-baeb-c9fc1ec709ac,0,1,ba280414-62a9-4533-90d9-f084ef71bf97,ba280414-62a9-4533-90d9-f084ef71bf97,0,1,c608c734-97ae-4b21-a849-c63642095357,c608c734-97ae-4b21-a849-c63642095357,0,1,8d247cc7-c0ba-4470-8b87-ca0a869aeb2a,8d247cc7-c0ba-4470-8b87-ca0a869aeb2a,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,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,ae6d0e12-8857-476c-b4b2-f03295cbed3e,ae6d0e12-8857-476c-b4b2-f03295cbed3e,0,1,dface15c-cd65-4fb1-b4dd-b513086d3f8e,dface15c-cd65-4fb1-b4dd-b513086d3f8e,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,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,bed3f0b2-40c6-4323-9bca-cb8864e38ec0,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,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,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,0,1,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,0,1,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,0,1,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,0,1,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,52c04b3f-24d2-414c-b05a-77a34078d793,52c04b3f-24d2-414c-b05a-77a34078d793,0,1,8e876c9a-670a-4f34-9525-d87311988268,8e876c9a-670a-4f34-9525-d87311988268,0,1,251bce43-7e0c-4842-aa9f-e1f0dd8bbf2b,251bce43-7e0c-4842-aa9f-e1f0dd8bbf2b,0,1,ef6f7bb6-6c2c-4777-b99a-624865222549,ef6f7bb6-6c2c-4777-b99a-624865222549,0,1,e6044088-2521-4c4b-9cbe-58c14bb871b1,e6044088-2521-4c4b-9cbe-58c14bb871b1,0,1,50fc45e9-1e29-4b0e-9c18-8a8354780755,50fc45e9-1e29-4b0e-9c18-8a8354780755,0,1,f6375eb0-448b-495b-8edf-198f2ac28aed,f6375eb0-448b-495b-8edf-198f2ac28aed,0,1,9e39be89-29c3-48d2-9568-eedfed776bf8,9e39be89-29c3-48d2-9568-eedfed776bf8,0,1,8f873523-b4b1-4522-a60c-04477b4a41ab,8f873523-b4b1-4522-a60c-04477b4a41ab,0,1,bcbb80fe-5d16-49a1-972c-492445c7db6f,bcbb80fe-5d16-49a1-972c-492445c7db6f,0,1,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,0,1,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,0,1,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,0,1,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,0,1,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,0,1,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,0,1,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,0,1,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,0,1,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,0,1,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,0,1,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,0,1,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,0,1,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,0,1,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,0,1,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,0,1,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,0,1,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,0,1,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,0,1,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,0,1,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,0,1,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,0,1,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,0,1,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,0,1,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,0,1,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,0,1,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,0,1,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,0,1,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,0,1,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,0,1,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,0,1,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,0,1,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,0,1,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,0,1,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,0,1,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,0,1,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,0,1,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,0,1,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,0,1,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,0,1,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,0,1,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,0,1,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,0,1,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,0,1,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,0,1,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,0,1,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,0,1,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,0,1,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,0,1,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,0,1,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,0,1,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,0,1,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,0,1,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,0,1,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,0,1,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,0,1,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,0,1,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,0,1,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,0,1,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,0,1,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,0,1,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,0,1,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,0,1,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,0,1,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,0,1,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,0,1,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,0,1,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,0,1,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,0,1,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,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,0,1,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,0,1,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,0,1,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,0,1,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,0,1,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,0,1,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,0,1,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,0,1,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,0,1,840a1d4d-e5f6-4a88-886f-03830fe4f99a,840a1d4d-e5f6-4a88-886f-03830fe4f99a,0,1,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,0,1,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,0,1,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,0,1,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,0,1,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,0,1,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,0,1,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,0,1,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,0,1,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,0,1,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,0,1,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,0,1,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,0,1,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,0,1,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,0,1,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,0,1,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,0,1,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,0,1,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,0,1,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,0,1,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,0,1,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,0,1,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,0,1,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,0,1,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,0,1,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,0,1,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,0,1,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,0,1,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,0,1,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,0,1,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,0,1,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,0,1,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,0,1,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,0,1,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,0,1,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,0,1,255e55e3-fc3a-4388-8667-486fe3b7557f,255e55e3-fc3a-4388-8667-486fe3b7557f,0,1,d4bfe208-c64c-4088-b33f-98e4cee03444,d4bfe208-c64c-4088-b33f-98e4cee03444,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,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,0,1,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,0,1,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,0,1,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,0,1,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,0,1,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,0,1,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,0,1,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,0,1,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,0,1,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0,1,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,0,1,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,0,1,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,0,1,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,0,1,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,0,1,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,0,1,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,0,1,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,0,1,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,0,1,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,0,1,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,0,1,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,0,1,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,0,1,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,0,1,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,0,1,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,0,1,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,0,1,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,0,1,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,0,1,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,0,1,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,0,1,8f088f33-92d7-4e35-915d-6cda1129dd80,8f088f33-92d7-4e35-915d-6cda1129dd80,0,1,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,0,1,4889d27b-435b-4059-a34d-6afdf3c77fa3,4889d27b-435b-4059-a34d-6afdf3c77fa3,0,1,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,0,1,69f42341-268b-4e74-9d6d-527800d018ab,69f42341-268b-4e74-9d6d-527800d018ab,0,1,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,0,1,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,0,1,7eb5217f-684d-4a9e-8aef-48cedc809cbb,7eb5217f-684d-4a9e-8aef-48cedc809cbb,0,1,4b54d626-dc59-4e49-a708-0a7f98833b9a,4b54d626-dc59-4e49-a708-0a7f98833b9a,0,1,1c90a423-ef1b-42dc-a43b-1fda89672481,1c90a423-ef1b-42dc-a43b-1fda89672481,0,1,095cf2d6-5a7c-452d-8d60-991afb6e52bd,095cf2d6-5a7c-452d-8d60-991afb6e52bd,0,1,2c155a03-2aff-4632-adb2-be3266e0fac3,2c155a03-2aff-4632-adb2-be3266e0fac3,0,1,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,0,1,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,0,1,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,0,1,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0,1,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,0,1,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,0,1,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,0,1,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,0,1,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,0,1,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,0,1,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,0,1,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,0,1,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,0,1,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,0,1,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,0,1,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,0,1,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,0,1,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,0,1,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,0,1,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,0,1,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,0,1,33e0072d-7d5b-4298-ae77-31a7cb358f5d,33e0072d-7d5b-4298-ae77-31a7cb358f5d,0,1,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,0,1,b27688c3-6682-45e1-a03f-0d2e8b1214e4,b27688c3-6682-45e1-a03f-0d2e8b1214e4,0,1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,0,1,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,0,1,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,0,1,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,0,1,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,0,1,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,0,1,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,0,1,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,0,1,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,0,1,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,0,1,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,0,1,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,7092a5d4-620b-4ad2-bce4-f099da694100,7092a5d4-620b-4ad2-bce4-f099da694100,0,1,31b3e718-d0b2-425b-b8af-67bc407eab56,31b3e718-d0b2-425b-b8af-67bc407eab56,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,9eacd816-d416-4bf9-9cc7-a62394031517,9eacd816-d416-4bf9-9cc7-a62394031517,0,1,6c055aa0-3d9f-42a0-95bb-10ad0a513b9c,6c055aa0-3d9f-42a0-95bb-10ad0a513b9c,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,c48ef5e7-61da-4613-ae8b-f39745fccd20,c48ef5e7-61da-4613-ae8b-f39745fccd20,0,1,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,0,1,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,0,1,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,0,1,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,0,1,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,0,1,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,0,1,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,0,1,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,0,1,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,0,1,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,0,1,a915df5f-7330-4fc3-aecd-08d228b8fd23,a915df5f-7330-4fc3-aecd-08d228b8fd23,0,1,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,6e20df72-c643-4952-8f9c-f386d2915004,6e20df72-c643-4952-8f9c-f386d2915004,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,0,1,0e5074b0-bc15-416d-9c87-dad6824186e1,0e5074b0-bc15-416d-9c87-dad6824186e1,0,1,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,0,1,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,0,1,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,0,1,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,0,1,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,0,1,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,0,1,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,0,1,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,0,1,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,0,1,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,0,1,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,0,1,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,0,1,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,0,1,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,0,1,d7a86a55-db13-4601-9bdb-c83b25ea9a51,d7a86a55-db13-4601-9bdb-c83b25ea9a51,0,1,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,0,1,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,0,1,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,0,1,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,0,1,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,0,1,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,0,1,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,0,1,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,0,1,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,0,1,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,0,1,abacbda3-b4c1-446b-95e7-a45adec16174,abacbda3-b4c1-446b-95e7-a45adec16174,0,1,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,0,1,868da26b-f32e-48d1-a647-44dac7520d86,868da26b-f32e-48d1-a647-44dac7520d86,0,1,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,0,1,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,0,1,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,0,1,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,0,1,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,0,1,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,0,1,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,0,1,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,0,1,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,0,1,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,0,1,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0,1,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,0,1,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,0,1,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,0,1,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,0,1,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,0,1,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,0,1,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,0,1,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,0,1,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,0,1,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,0,1,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,0,1,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,0,1,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0,1,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0,1,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,0,1,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,0,1,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,0,1,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,0,1,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,0,1,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,0,1,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0,1,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,0,1,34a6b209-ceb7-44f2-8827-20d942fdd491,34a6b209-ceb7-44f2-8827-20d942fdd491,0,1,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,0,1,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,0,1,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,0,1,bad3d1fa-9618-427a-93e0-90f151e468bf,bad3d1fa-9618-427a-93e0-90f151e468bf,0,1,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,0,1,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,0,1,ec7cfc56-00fd-4494-be90-49308a3c34a0,ec7cfc56-00fd-4494-be90-49308a3c34a0,0,1,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,719cdbdd-13b3-44fc-8739-0b788693a8d0,719cdbdd-13b3-44fc-8739-0b788693a8d0,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,0,1,5de9fbf9-f075-4acf-b9f9-89688d2006af,5de9fbf9-f075-4acf-b9f9-89688d2006af,0,1,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,0,1,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,0,1,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,0,1,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,0,1,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,0,1,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,0,1,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,0,1,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,0,1,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,0,1,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,0,1,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,0,1,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,0,1,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,0,1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,0,1,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,0,1,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,0,1,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,0,1,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,0,1,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,0,1,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,0,1,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,0,1,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,0,1,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,0,1,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,0,1,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,0,1,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,0,1,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,0,1,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,0,1,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,0,1,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,0,1,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,0,1,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,0,1,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,0,1,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,0,1,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,0,1,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,0,1,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,0,1,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,0,1,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,0,1,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,0,1,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,0,1,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,0,1,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,0,1,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,0,1,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,0,1,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,0,1,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,0,1,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,0,1,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,0,1,837e4559-2f2d-48e9-a03b-2d52b25569ec,837e4559-2f2d-48e9-a03b-2d52b25569ec,0,1,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,3660618a-0cab-458f-b448-867c4d1aba1b,3660618a-0cab-458f-b448-867c4d1aba1b,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,0,1,22f34fd5-4bda-48c1-8772-74d9c6479a30,22f34fd5-4bda-48c1-8772-74d9c6479a30,0,1,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,0,1,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,0,1,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,0,1,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,0,1,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,0,1,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,0,1,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,0,1,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,0,1,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,0,1,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,0,1,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,0,1,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,0,1,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,0,1,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,0,1,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,0,1,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,0,1,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0,1,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,0,1,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,0,1,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,0,1,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,0,1,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,0,1,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,0,1,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,0,1,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,0,1,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,0,1,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,0,1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0,1,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,0,1,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,0,1,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,0,1,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,0,1,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,0,1,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,0,1,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,0,1,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,0,1,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,0,1,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,0,1,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,0,1,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,0,1,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,0,1,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,0,1,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,0,1,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,0,1,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,0,1,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,0,1,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,0,1,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,0,1,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,0,1,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,0,1,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,0,1,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,0,1,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,0,1,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,0,1,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,0,1,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,0,1,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,0,1,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,0,1,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,0,1,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,0,1,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,0,1,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,0,1,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,0,1,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,0,1,d826fe6f-d9f6-41f2-8dd6-bd840af25183,d826fe6f-d9f6-41f2-8dd6-bd840af25183,0,1,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,0,1,7bc5fa42-7d72-433e-8db6-a046b583a316,7bc5fa42-7d72-433e-8db6-a046b583a316,0,1,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,0,1,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,0,1,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,0,1,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,0,1,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,0,1,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,0,1,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,0,1,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,0,1,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,0,1,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,0,1,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,0,1,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,0,1,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,0,1,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,0,1,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,0,1,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,0,1,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,0,1,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,0,1,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,0,1,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,0,1,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,0,1,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,0,1,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,0,1,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,0,1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,0,1,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,0,1,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,0,1,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,0,1,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,0,1,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,0,1,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,0,1,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,0,1,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,0,1,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,0,1,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,0,1,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,0,1,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,0,1,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,0,1,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,0,1,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,6f0caeb0-34ce-489c-86c4-c16d85320fa3,6f0caeb0-34ce-489c-86c4-c16d85320fa3,0,1,4c49914c-e472-46f8-8c5e-5e38138eb301,4c49914c-e472-46f8-8c5e-5e38138eb301,0,1,81d4ea48-8704-494d-8cd2-51f2dd1190bc,81d4ea48-8704-494d-8cd2-51f2dd1190bc,0,1,9c196011-1485-4fa5-bb05-a9dbe768e8a7,9c196011-1485-4fa5-bb05-a9dbe768e8a7,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,b98dacc7-29e1-426b-a664-0a988f18186c,b98dacc7-29e1-426b-a664-0a988f18186c,0,1,083c709b-ed8c-47e4-a190-421e14259e73,083c709b-ed8c-47e4-a190-421e14259e73,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,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,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,fb6b9985-3ef7-42e5-9f3a-d4499072ba3d,fb6b9985-3ef7-42e5-9f3a-d4499072ba3d,0,1,04ec4cb1-bab2-4bdd-b119-86540947b0ef,04ec4cb1-bab2-4bdd-b119-86540947b0ef,0,1,e93157d3-3a87-4f54-be95-d2d254c58349,e93157d3-3a87-4f54-be95-d2d254c58349,0,1,a8c1f22e-2589-4c02-93cf-8d88ef511ace,a8c1f22e-2589-4c02-93cf-8d88ef511ace,0,1,65524236-f087-4932-85b1-b92b1d573100,65524236-f087-4932-85b1-b92b1d573100,0,1,2f54f6d5-9d57-450b-a386-e917b5e46b0c,2f54f6d5-9d57-450b-a386-e917b5e46b0c,0,1,efea06e5-0e0b-4a16-9cf4-259ce36fe34e,efea06e5-0e0b-4a16-9cf4-259ce36fe34e,0,1,5158b2ed-124b-4b4f-ae2d-36bf059737a4,5158b2ed-124b-4b4f-ae2d-36bf059737a4,0,1,b7c40101-60b7-4c36-abcd-38101bc8b7d8,b7c40101-60b7-4c36-abcd-38101bc8b7d8,0,1,a4a9535b-b8a6-4d94-97e7-e28d795268ad,a4a9535b-b8a6-4d94-97e7-e28d795268ad,0,1,a4a23aa7-ccd2-49f9-ac3b-1257e9bdd300,a4a23aa7-ccd2-49f9-ac3b-1257e9bdd300,0,1,b6845833-530b-43b3-8715-f88b092d83bc,b6845833-530b-43b3-8715-f88b092d83bc,0,1,d2854e39-4157-45f3-a992-4d161c38b1da,d2854e39-4157-45f3-a992-4d161c38b1da,0,1,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,f2e9f4e7-913f-45a4-8318-4792b056749f,f2e9f4e7-913f-45a4-8318-4792b056749f,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,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,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,0,1,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,0,1,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,0,1,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,0,1,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,0,1,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,0,1,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,0,1,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,0,1,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,0,1,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,0,1,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,0,1,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,0,1,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,0,1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,0,1,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,0,1,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,0,1,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,0,1,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,0,1,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,0,1,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,0,1,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,0,1,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,0,1,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,0,1,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,0,1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,0,1,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,0,1,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,0,1,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,0,1,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,0,1,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,0,1,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,0,1,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,0,1,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,0,1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,0,1,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,0,1,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,0,1,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,0,1,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,0,1,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,0,1,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,0,1,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,0,1,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,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,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,5ff09b32-03a1-469f-b224-7928b2092008,5ff09b32-03a1-469f-b224-7928b2092008,0,1,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,0,1,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,0,1,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,0,1,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,0,1,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,0,1,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,0,1,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,0,1,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,0,1,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,0,1,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,0,1,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,0,1,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,0,1,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,0,1,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,0,1,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,0,1,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,0,1,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,0,1,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,0,1,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,0,1,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,0,1,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,0,1,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,0,1,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,0,1,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,0,1,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,0,1,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,0,1,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,0,1,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,0,1,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,0,1,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,0,1,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,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,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,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,0,1,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,0,1,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,0,1,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,0,1,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,0,1,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,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,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,0,1,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,0,1,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,0,1,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,0,1,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,0,1,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,0,1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,0,1,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,0,1,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,0,1,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,0,1,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,0,1,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,0,1,e61eef89-b3de-4b73-b7d9-af75318093e5,e61eef89-b3de-4b73-b7d9-af75318093e5,0,1,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,0,1,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,0,1,a330acd1-bc97-4ef8-8ecb-5604868ca044,a330acd1-bc97-4ef8-8ecb-5604868ca044,0,1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,0,1,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,0,1,8928693b-1933-4e02-8a33-99b6f05b1c57,8928693b-1933-4e02-8a33-99b6f05b1c57,0,1,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,0,1,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,0,1,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,0,1,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,0,1,61f283c7-f887-432b-a2d7-c27483e04317,61f283c7-f887-432b-a2d7-c27483e04317,0,1,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,079bc65d-da8e-431d-847c-ec46868ca92d,079bc65d-da8e-431d-847c-ec46868ca92d,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,0,1,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,0,1,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,0,1,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,0,1,1f169cd2-573f-408d-92e7-3eee7ff4528a,1f169cd2-573f-408d-92e7-3eee7ff4528a,0,1,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,0,1,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,0,1,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,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,0,1,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,0,1,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,0,1,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,0,1,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0,1,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,0,1,5500d5c6-fdbf-4614-b43b-fabf56e3968c,5500d5c6-fdbf-4614-b43b-fabf56e3968c,0,1,a08eeef7-1c81-4985-8628-6b35ac73e135,a08eeef7-1c81-4985-8628-6b35ac73e135,0,1,c446f732-097a-4197-8384-91a6925c6bdd,c446f732-097a-4197-8384-91a6925c6bdd,0,1,cc33ec52-aed4-4807-90b5-700d307b4f57,cc33ec52-aed4-4807-90b5-700d307b4f57,0,1,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,0,1,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,0,1,82ea249e-ecba-4916-b9a1-c7e6119b353a,82ea249e-ecba-4916-b9a1-c7e6119b353a,0,1,d5406849-57b3-44f4-8efa-e73523939ae5,d5406849-57b3-44f4-8efa-e73523939ae5,0,1,9ce5f33f-4331-491d-b084-9913c38f4c7d,9ce5f33f-4331-491d-b084-9913c38f4c7d,0,1,0603113a-f2f1-43e6-9838-64c5e98417f0,0603113a-f2f1-43e6-9838-64c5e98417f0,0,1,43055a56-a079-41e2-87eb-723769109bed,43055a56-a079-41e2-87eb-723769109bed,0,1,930f2bc5-417d-4b97-b440-8d5e81e5c896,930f2bc5-417d-4b97-b440-8d5e81e5c896,0,1,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,0,1,e506f7d3-2572-4c54-ac98-e40f083ac578,e506f7d3-2572-4c54-ac98-e40f083ac578,0,1,bdf93aa5-86a4-4791-bdb0-172532029b7c,bdf93aa5-86a4-4791-bdb0-172532029b7c,0,1,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,0,1,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,0,1,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,0,1,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,0,1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,0,1,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,0,1,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,0,1,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,0,1,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,0,1,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,0,1,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,0,1,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,0,1,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,0,1,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,0,1,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,0,1,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,0,1,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,0,1,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,0,1,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,0,1,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,0,1,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,0,1,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,0,1,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,0,1,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,0,1,8393971a-96ba-493e-a9d0-a286e8a0750a,8393971a-96ba-493e-a9d0-a286e8a0750a,0,1,9c8ec5e5-afa8-48b1-bf9c-ebaaf0a720db,9c8ec5e5-afa8-48b1-bf9c-ebaaf0a720db,0,1,901897a7-a2b6-40a7-a77d-d1d4c8ce5d28,901897a7-a2b6-40a7-a77d-d1d4c8ce5d28,0,1,e6fe6a65-33e6-4cb3-8acf-b40e7b9bac04,e6fe6a65-33e6-4cb3-8acf-b40e7b9bac04,0,1,c4492ecd-293c-4688-8198-04391c57f312,c4492ecd-293c-4688-8198-04391c57f312,0,1,268afd29-0e5f-4220-ab29-071f3072dbeb,268afd29-0e5f-4220-ab29-071f3072dbeb,0,1,b578b59d-8c86-4494-b27d-db976b0f3d8a,b578b59d-8c86-4494-b27d-db976b0f3d8a,0,1,eeba912a-3676-4528-b216-2b8630ab19c9,eeba912a-3676-4528-b216-2b8630ab19c9,0,1,47ed2f49-e4f2-4058-9ac5-cb3c826e92d8,47ed2f49-e4f2-4058-9ac5-cb3c826e92d8,0,1,471c7746-c607-481e-aaac-659dcbe54d8b,471c7746-c607-481e-aaac-659dcbe54d8b,0,1,3251cc7f-6b61-4814-b7ce-91564128d604,3251cc7f-6b61-4814-b7ce-91564128d604,0,1,185661aa-0553-4a27-b021-a0d96fba92fd,185661aa-0553-4a27-b021-a0d96fba92fd,0,1,59624fa6-74f6-4a5f-86e3-a27018683e6e,59624fa6-74f6-4a5f-86e3-a27018683e6e,0,1,71fa1a55-cf35-4442-bcd5-fdc4f191ae51,71fa1a55-cf35-4442-bcd5-fdc4f191ae51,0,1,93e30c61-c9a1-41a5-b682-23f4d0085a38,93e30c61-c9a1-41a5-b682-23f4d0085a38,0,1,8336cc18-5d3e-477f-9245-17e7e7f0566a,8336cc18-5d3e-477f-9245-17e7e7f0566a,0,1,213219df-49d8-447e-b7f3-fba356b9d461,213219df-49d8-447e-b7f3-fba356b9d461,0,1,b443585d-f129-4ac6-a64c-4c37b1b4385b,b443585d-f129-4ac6-a64c-4c37b1b4385b,0,1,ec1877db-8c03-45a4-a15c-a4de8ae3e86c,ec1877db-8c03-45a4-a15c-a4de8ae3e86c,0,1,e7ef29f9-dfff-402e-b49b-e006b9828519,e7ef29f9-dfff-402e-b49b-e006b9828519,0,1,bfb0be49-5f5c-4ef3-a011-8f8645aa981a,bfb0be49-5f5c-4ef3-a011-8f8645aa981a,0,1,d50613ad-c527-4583-8855-a4bd39c33360,d50613ad-c527-4583-8855-a4bd39c33360,0,1,aaa351b7-475e-4835-a5c5-23f86da8ea51,aaa351b7-475e-4835-a5c5-23f86da8ea51,0,1,5260c027-de8c-4612-9022-d9b492e913c9,5260c027-de8c-4612-9022-d9b492e913c9,0,1,6945660a-84cb-4546-ad3c-b5eda36c7fa6,6945660a-84cb-4546-ad3c-b5eda36c7fa6,0,1,899be218-80f5-46ed-bccf-f9437c91e00b,899be218-80f5-46ed-bccf-f9437c91e00b,0,1,67ff40c2-0954-4187-9eba-bf6360fa3620,67ff40c2-0954-4187-9eba-bf6360fa3620,0,1,19bb53e4-f7c7-475e-9d07-ebc067d62635,19bb53e4-f7c7-475e-9d07-ebc067d62635,0,1,8ed415c6-f93b-45e4-be06-7490d60b91f1,8ed415c6-f93b-45e4-be06-7490d60b91f1,0,1,bd00e705-e1cd-4c50-89e5-4c3391e46e16,bd00e705-e1cd-4c50-89e5-4c3391e46e16,0,1,3dffb8c9-91f0-4527-baa7-06db41d80b46,3dffb8c9-91f0-4527-baa7-06db41d80b46,0,1,ad842d01-80b8-4ebf-9ac3-5d628ec4e321,ad842d01-80b8-4ebf-9ac3-5d628ec4e321,0,1,af5008bb-427d-4cd5-b9e4-8aae24f725ab,af5008bb-427d-4cd5-b9e4-8aae24f725ab,0,1,35ba733b-7ef8-4cbf-8cda-5b8b2ab2c30d,35ba733b-7ef8-4cbf-8cda-5b8b2ab2c30d,0,1,5b94475a-cea6-4887-9882-2da8957425d0,5b94475a-cea6-4887-9882-2da8957425d0,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,16aafed9-ac0d-424f-93e5-01d77dcb7796,16aafed9-ac0d-424f-93e5-01d77dcb7796,0,1,ae5d7329-4cdb-4d11-ab00-4dc62133941e,ae5d7329-4cdb-4d11-ab00-4dc62133941e,0,1,52b39a5b-6a9d-4341-a040-3eae413b3f9d,52b39a5b-6a9d-4341-a040-3eae413b3f9d,0,1,15372e48-d5ed-4f13-ad1c-539fad0f9b28,15372e48-d5ed-4f13-ad1c-539fad0f9b28,0,1,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,0,1,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,0,1,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,436162a0-263f-4126-aa3a-7508505cc4a8,436162a0-263f-4126-aa3a-7508505cc4a8,0,1,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,0,1,0b750d40-1ee5-414c-b8a5-244c666787ae,0b750d40-1ee5-414c-b8a5-244c666787ae,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,0ff797f5-007d-4379-aa14-5d3f5babeb84,0ff797f5-007d-4379-aa14-5d3f5babeb84,0,1,767176d4-4fe9-4de5-9246-59b7fec09c53,767176d4-4fe9-4de5-9246-59b7fec09c53,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,8e587969-0263-4789-a501-a6c2e102f88e,8e587969-0263-4789-a501-a6c2e102f88e,0,1,f26bfc01-7d8a-43a7-b869-c2deb18218e5,f26bfc01-7d8a-43a7-b869-c2deb18218e5,0,1,8c72a0b2-20cb-43ff-b010-25256aa8011d,8c72a0b2-20cb-43ff-b010-25256aa8011d,0,1,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,0,1,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,0,1,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,0,1,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,0,1,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,0,1,36475bf5-5da6-48ad-8077-4de4426f7e10,36475bf5-5da6-48ad-8077-4de4426f7e10,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,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,fb6f92a6-fc56-48d4-b7ad-b4daaea79fe2,fb6f92a6-fc56-48d4-b7ad-b4daaea79fe2,0,1,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0,1,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,0,1,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,0,1,65d9f3a7-6258-49f3-8252-0a60e2735ff3,65d9f3a7-6258-49f3-8252-0a60e2735ff3,0,1,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,0,1,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,0,1,a1155588-882f-430d-85a6-19558b5b7256,a1155588-882f-430d-85a6-19558b5b7256,0,1,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,0,1,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,0,1,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,0,1,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,0,1,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,0,1,f637a14d-08ed-4c62-a873-ca36cdcd1e88,f637a14d-08ed-4c62-a873-ca36cdcd1e88,0,1,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,0,1,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,0,1,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,0,1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,0,1,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,0,1,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,0,1,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,0,1,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,0,1,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,0,1,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,0,1,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,0,1,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,0,1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,0,1,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,0,1,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,0,1,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,0,1,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,0,1,73b27233-e7ce-4386-a182-fc934df0e9a0,73b27233-e7ce-4386-a182-fc934df0e9a0,0,1,39fce130-be22-42d9-8bcd-b162ae00fc7a,39fce130-be22-42d9-8bcd-b162ae00fc7a,0,1,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,0,1,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,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,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,0,1,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,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,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,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,0,1,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,0,1,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,0,1,8503a211-ad5e-41e5-98c1-1109523bb630,8503a211-ad5e-41e5-98c1-1109523bb630,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,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,0,1,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,0,1,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,0,1,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,0,1,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,0,1,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,0,1,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,0,1,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,0,1,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,0,1,60cd2f20-17cf-4132-b08e-87cf429704b7,60cd2f20-17cf-4132-b08e-87cf429704b7,0,1,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,0,1,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,0,1,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,0,1,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,0,1,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,0,1,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,0,1,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,0,1,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,0,1,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,0,1,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,0,1,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,0,1,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,0,1,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,0,1,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,0,1,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,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,0,1,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,0,1,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,0,1,468f6d26-7a4b-49fe-9ec9-208794a6dff7,468f6d26-7a4b-49fe-9ec9-208794a6dff7,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,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,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,0,1,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,0,1,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,0,1,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,0,1,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,0,1,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,0,1,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,0,1,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,0,1,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,0,1,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,0,1,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,0,1,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,0,1,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,0,1,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,0,1,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,0,1,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,0,1,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,0,1,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,0,1,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,0,1,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,0,1,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0,1,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,0,1,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,0,1,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,0,1,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,0,1,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,0,1,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,0,1,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,0,1,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,0,1,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,0,1,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0,1,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,0,1,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,0,1,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,0,1,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,0,1,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,0,1,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,0,1,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,0,1,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,0,1,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,0,1,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,0,1,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,0,1,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,0,1,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,0,1,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,0,1,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,0,1,9c15b35b-d658-4e52-a441-3b79294d65eb,9c15b35b-d658-4e52-a441-3b79294d65eb,0,1,d5fdac2a-e3aa-4859-8485-0cf114748c87,d5fdac2a-e3aa-4859-8485-0cf114748c87,0,1,eb3d278b-e8fe-4d43-90a8-dd361009196f,eb3d278b-e8fe-4d43-90a8-dd361009196f,0,1,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,0,1,a3582d0c-6a63-442e-8422-83f251df0ed9,a3582d0c-6a63-442e-8422-83f251df0ed9,0,1,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,0,1,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,0,1,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,0,1,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,0,1,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,0,1,707e64f3-ad8b-470a-aa4f-57fddecc2159,707e64f3-ad8b-470a-aa4f-57fddecc2159,0,1,682da7d7-6e27-4133-90fc-a445c156f908,682da7d7-6e27-4133-90fc-a445c156f908,0,1,64751704-f39d-4859-adc6-8168897d6aec,64751704-f39d-4859-adc6-8168897d6aec,0,1,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,0,1,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,0,1,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,0,1,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,0,1,f0dca5f2-1479-42bf-b895-9abd345522f5,f0dca5f2-1479-42bf-b895-9abd345522f5,0,1,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,0,1,93d6dda2-dd7c-42d1-b9bc-284929931585,93d6dda2-dd7c-42d1-b9bc-284929931585,0,1,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,abc44046-a839-4c4a-8161-ecba29abc27d,abc44046-a839-4c4a-8161-ecba29abc27d,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,12dd81dd-31f5-47f2-a163-ea6c670299c5,12dd81dd-31f5-47f2-a163-ea6c670299c5,0,1,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,0,1,8238c710-09ff-473e-b0ed-40b31bfccab8,8238c710-09ff-473e-b0ed-40b31bfccab8,0,1,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,0,1,15845f89-0f9e-4a93-b7e8-ef101694b1b8,15845f89-0f9e-4a93-b7e8-ef101694b1b8,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,60f8daf5-06c2-4db6-8fea-5cbb72130113,60f8daf5-06c2-4db6-8fea-5cbb72130113,0,1,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,0,1,91e7c98e-fadf-4c08-bd76-1e4e4d140265,91e7c98e-fadf-4c08-bd76-1e4e4d140265,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,0,1,8247a93d-c2d3-4c9b-a442-619240d35113,8247a93d-c2d3-4c9b-a442-619240d35113,0,1,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,0,1,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,0,1,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,0,1,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,0,1,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,0,1,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,0,1,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,0,1,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,0,1,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,0,1,a388ed70-a68d-4713-a280-881315351f07,a388ed70-a68d-4713-a280-881315351f07,0,1,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,0,1,2c81edc8-02b9-42dd-be4d-e7ad595421a0,2c81edc8-02b9-42dd-be4d-e7ad595421a0,0,1,83cb38ff-1174-449f-b8ce-44d5e064f2df,83cb38ff-1174-449f-b8ce-44d5e064f2df,0,1,d11b51ac-708a-4ee1-b73e-ae62e162101e,d11b51ac-708a-4ee1-b73e-ae62e162101e,0,1,17a50950-6091-4306-9f15-2a621a29c1a0,17a50950-6091-4306-9f15-2a621a29c1a0,0,1,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,0,1,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,0,1,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,0,1,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,0,1,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,0,1,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,0,1,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,0,1,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,0,1,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,0,1,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,0,1,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,0,1,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,0,1,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,0,1,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,0,1,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,0,1,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,0,1,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,0,1,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,0,1,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,0,1,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,0,1,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,0,1,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,0,1,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,0,1,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,0,1,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,0,1,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,0,1,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,0,1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,0,1,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,0,1,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,0,1,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,0,1,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,0,1,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,0,1,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,0,1,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,0,1,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,0,1,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,0,1,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,0,1,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,0,1,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,0,1,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,0,1,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,0,1,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,0,1,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,0,1,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,0,1,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,0,1,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,0,1,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,0,1,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,0,1,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,0,1,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,0,1,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,0,1,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,0,1,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,0,1,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,0,1,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,0,1,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,0,1,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,0,1,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,0,1,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,0,1,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,0,1,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,0,1,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,0,1,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,0,1,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,0,1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,0,1,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,0,1,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,0,1,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,0,1,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,0,1,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,0,1,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,0,1,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,0,1,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,0,1,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,0,1,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,0,1,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,0,1,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,0,1,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,0,1,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,0,1,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,0,1,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,0,1,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,0,1,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,0,1,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,0,1,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,0,1,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,0,1,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,0,1,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,0,1,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,0,1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,0,1,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,0,1,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,0,1,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,0,1,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,0,1,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,0,1,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,0,1,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,0,1,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,0,1,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,0,1,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,0,1,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,0,1,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,0,1,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,0,1,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,0,1,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,0,1,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,0,1,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,0,1,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,0,1,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,0,1,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,0,1,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,0,1,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,0,1,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,0,1,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,0,1,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,0,1,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,0,1,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,0,1,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,0,1,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,0,1,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,0,1,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,0,1,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,0,1,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,0,1,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,0,1,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,0,1,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,0,1,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,0,1,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,0,1,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,0,1,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,0,1,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,0,1,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,0,1,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,0,1,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,0,1,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,0,1,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,0,1,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,0,1,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,0,1,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,0,1,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,0,1,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,0,1,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,0,1,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,0,1,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,0,1,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,0,1,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,0,1,506bf43b-f7df-4b42-b614-e5925b45b5e9,506bf43b-f7df-4b42-b614-e5925b45b5e9,0,1,58570514-a2cf-4e09-ba7a-d9efd8178269,58570514-a2cf-4e09-ba7a-d9efd8178269,0,1,c23aa057-42f4-4167-9224-693e904598c6,c23aa057-42f4-4167-9224-693e904598c6,0,1,e449f91b-58c3-4d4b-a9f0-6870539afff2,e449f91b-58c3-4d4b-a9f0-6870539afff2,0,1,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0,1,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,0,1,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,0,1,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,0,1,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,0,1,337bd150-beaa-44e6-b336-359e23f8babe,337bd150-beaa-44e6-b336-359e23f8babe,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,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,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,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,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,12ab57d3-ba96-46e9-86ef-2f3ba76fd5cb,12ab57d3-ba96-46e9-86ef-2f3ba76fd5cb,0,1,241db5c5-e3bc-4db8-bc88-39db84bb60e9,241db5c5-e3bc-4db8-bc88-39db84bb60e9,0,1,68e4f9d0-a5ed-42f9-8eb2-1f5a8d3894e8,68e4f9d0-a5ed-42f9-8eb2-1f5a8d3894e8,0,1,c147916d-1fb6-473d-bde0-8dd528dde8eb,c147916d-1fb6-473d-bde0-8dd528dde8eb,0,1,00359e00-aba0-4afb-8b58-2e1247dbe04f,00359e00-aba0-4afb-8b58-2e1247dbe04f,0,1,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0,1,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,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,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,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,0,1,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,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,2fa4fb8b-9876-47b6-9c95-682d0e07ae7c,2fa4fb8b-9876-47b6-9c95-682d0e07ae7c,0,1,111e7c41-77b6-4d31-bc9c-136e4d09ac7b,111e7c41-77b6-4d31-bc9c-136e4d09ac7b,0,1,c50c02dc-c1ae-4ec8-859f-b9c179cc59e6,c50c02dc-c1ae-4ec8-859f-b9c179cc59e6,0,1,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,0,1,7f90681d-6534-40ee-bbb7-5356c0ed9de2,7f90681d-6534-40ee-bbb7-5356c0ed9de2,0,1,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,0,1,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,0,1,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,0,1,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,0,1,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,0,1,ec1755ed-d203-4548-9f1d-dd62ce331ecf,ec1755ed-d203-4548-9f1d-dd62ce331ecf,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,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,a6d48910-d526-4e8f-9414-ca776a7edaa3,a6d48910-d526-4e8f-9414-ca776a7edaa3,0,1,1e8cd163-ca9b-42eb-b8c9-c3d44e7e486b,1e8cd163-ca9b-42eb-b8c9-c3d44e7e486b,0,1,6bf8f383-af77-4be9-bda4-4d4220dfe374,6bf8f383-af77-4be9-bda4-4d4220dfe374,0,1,b5c92c97-c4d2-4b4c-86be-035bfd17f905,b5c92c97-c4d2-4b4c-86be-035bfd17f905,0,1,a5bb3835-9dcf-4924-9c96-695e5173d702,a5bb3835-9dcf-4924-9c96-695e5173d702,0,1,afa26db4-77a4-437c-965a-fefc6086c1a1,afa26db4-77a4-437c-965a-fefc6086c1a1,0,1,7e005845-c321-4529-b112-2dec63720195,7e005845-c321-4529-b112-2dec63720195,0,1,48f7b074-2e43-4221-a36c-e2e30c22def6,48f7b074-2e43-4221-a36c-e2e30c22def6,0,1,df2f5d28-b460-4692-861d-fbe39cb726b6,df2f5d28-b460-4692-861d-fbe39cb726b6,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,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,2178ab47-1bb1-4fe0-940d-6876b66333c1,2178ab47-1bb1-4fe0-940d-6876b66333c1,0,1,8cc09f48-2ef2-434b-b33e-ab9b021816de,8cc09f48-2ef2-434b-b33e-ab9b021816de,0,1,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,0,1,360b086c-53e3-4514-a4f5-9379ab368b76,360b086c-53e3-4514-a4f5-9379ab368b76,0,1,e6feefa1-7298-4ab0-85d3-9abee571a627,e6feefa1-7298-4ab0-85d3-9abee571a627,0,1,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,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,b01666e4-985e-4a8e-bd68-9eb46b1ae1f0,b01666e4-985e-4a8e-bd68-9eb46b1ae1f0,0,1,45a48f71-4b62-4d3a-9ffc-76e8d4862d4e,45a48f71-4b62-4d3a-9ffc-76e8d4862d4e,0,1,5f08a477-fac0-4763-baf6-2839ed4de918,5f08a477-fac0-4763-baf6-2839ed4de918,0,1,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,0,1,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,0,1,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,0,1,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,0,1,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,0,1,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,0,1,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,0,1,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,0,1,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,0,1,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,0,1,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,0,1,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,0,1,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,0,1,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,0,1,9f021ea4-cb5b-4248-a79e-0a23e0fac748,9f021ea4-cb5b-4248-a79e-0a23e0fac748,0,1,d5e6cf20-9a74-40bf-9eeb-c91029f014f0,d5e6cf20-9a74-40bf-9eeb-c91029f014f0,0,1,46d94d4c-f76e-4fb4-b0be-39733f0493d9,46d94d4c-f76e-4fb4-b0be-39733f0493d9,0,1,e5936679-41a1-4b0d-9f11-6c83eb6740e8,e5936679-41a1-4b0d-9f11-6c83eb6740e8,0,1,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,0,1,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,0,1,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,0,1,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,0,1,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,0,1,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,6a798c80-459f-49ef-a8c2-83842ce4252c,6a798c80-459f-49ef-a8c2-83842ce4252c,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,0,1,d6400a59-6e02-4212-bb5a-9e49767aa8d6,d6400a59-6e02-4212-bb5a-9e49767aa8d6,0,1,6016d26e-fe39-4c16-b2b5-15f8c663125e,6016d26e-fe39-4c16-b2b5-15f8c663125e,0,1,6c19d9b0-1a41-4f82-a289-9fe05e272079,6c19d9b0-1a41-4f82-a289-9fe05e272079,0,1,df8063e2-47f1-4230-8e3c-eeee2143c72a,df8063e2-47f1-4230-8e3c-eeee2143c72a,0,1,89856ba2-f39a-41cd-be94-61243c6a0b96,89856ba2-f39a-41cd-be94-61243c6a0b96,0,1,8bdb0483-6ea9-4553-91ac-9cde267aae19,8bdb0483-6ea9-4553-91ac-9cde267aae19,0,1,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,0,1,bf30f5a1-6542-469f-b3fe-eee726110ffb,bf30f5a1-6542-469f-b3fe-eee726110ffb,0,1,13367a31-c2c9-43ea-b248-8a92e95ecd53,13367a31-c2c9-43ea-b248-8a92e95ecd53,0,1,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,0,1,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,0,1,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,0,1,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,0,1,50ee876f-6860-443b-9857-aca772d711ea,50ee876f-6860-443b-9857-aca772d711ea,0,1,6955edb2-d481-432c-b282-58dc07fd067b,6955edb2-d481-432c-b282-58dc07fd067b,0,1,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,0,1,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,0,1,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,0,1,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,0,1,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,0,1,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,0,1,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,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,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,0,1,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,0,1,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,0,1,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,0,1,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,0,1,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,0,1,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,0,1,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,0,1,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,0,1,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,0,1,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,0,1,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,0,1,783db3c5-05a7-466a-825e-65a10eb0e3d9,783db3c5-05a7-466a-825e-65a10eb0e3d9,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,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,8de9ba9e-0f4b-4bc5-8c62-e77601e6d865,8de9ba9e-0f4b-4bc5-8c62-e77601e6d865,0,1,fee371a3-fea1-4ef0-a324-b38d038d162d,fee371a3-fea1-4ef0-a324-b38d038d162d,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,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,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,0,1,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,0,1,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,0,1,8e07a76d-db30-491c-b296-181c8e689382,8e07a76d-db30-491c-b296-181c8e689382,0,1,1a41acdd-3503-4c69-b93b-eb1cb6749712,1a41acdd-3503-4c69-b93b-eb1cb6749712,0,1,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,0,1,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,0,1,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,0,1,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,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,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,0,1,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,0,1,0422d7e9-b329-4ae5-b6d4-001a9a38e40f,0422d7e9-b329-4ae5-b6d4-001a9a38e40f,0,1,350ec27c-3947-4f36-b284-331e775453fb,350ec27c-3947-4f36-b284-331e775453fb,0,1,f1208b69-f100-4cef-9865-cc342169a697,f1208b69-f100-4cef-9865-cc342169a697,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,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,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,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,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,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,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,3158ffef-5aaa-43d3-83ca-40626aa33d3c,3158ffef-5aaa-43d3-83ca-40626aa33d3c,0,1,36940f2c-b655-4d50-af16-2fb70acf5cdb,36940f2c-b655-4d50-af16-2fb70acf5cdb,0,1,7a0d7396-efed-4b57-92b6-e4ac74638b21,7a0d7396-efed-4b57-92b6-e4ac74638b21,0,1,42ff1536-0f3f-467b-b8f4-67260e5d87e3,42ff1536-0f3f-467b-b8f4-67260e5d87e3,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,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,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,0,1,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,0,1,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,0,1,fb58d277-b2a5-4a72-8d45-170c6f6263f9,fb58d277-b2a5-4a72-8d45-170c6f6263f9,0,1,325ed391-8558-4f03-9784-cde1f2a32944,325ed391-8558-4f03-9784-cde1f2a32944,0,1,f6cda05a-0f8f-4aa2-9686-1735c4207db3,f6cda05a-0f8f-4aa2-9686-1735c4207db3,0,1,0761ea58-8358-49ba-8e2d-e6afe88f6899,0761ea58-8358-49ba-8e2d-e6afe88f6899,0,1,da09e340-7cc0-4830-917a-5a59c42bbbf7,da09e340-7cc0-4830-917a-5a59c42bbbf7,0,1,c325aa12-9564-4033-8d3e-3103df55427f,c325aa12-9564-4033-8d3e-3103df55427f,0,1,9f4d4834-6994-4573-b99d-a5051746e5f9,9f4d4834-6994-4573-b99d-a5051746e5f9,0,1,c8ef3db5-2562-4f80-a679-86c2ba288ebf,c8ef3db5-2562-4f80-a679-86c2ba288ebf,0,1,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,0,1,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,0,1,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,0,1,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,0,1,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,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,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,0,1,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,0,1,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,0,1,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,0,1,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,0,1,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,0,1,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,0,1,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,0,1,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,0,1,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,0,1,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,0,1,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,0,1,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,0,1,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,0,1,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,0,1,4b48f705-0fdd-49e9-b912-5d2b8ae86d6d,4b48f705-0fdd-49e9-b912-5d2b8ae86d6d,0,1,18df66fe-f271-462e-822d-2f16dbb8c58f,18df66fe-f271-462e-822d-2f16dbb8c58f,0,1,80337d19-4661-429d-a108-c5b2b0f31fdf,80337d19-4661-429d-a108-c5b2b0f31fdf,0,1,1f2502be-56fc-44fa-9341-00ed0463dbb4,1f2502be-56fc-44fa-9341-00ed0463dbb4,0,1,018caa10-88e0-452f-b0c1-65778104b290,018caa10-88e0-452f-b0c1-65778104b290,0,1,f3e237ee-a696-42d9-966d-bbb7ecb354ce,f3e237ee-a696-42d9-966d-bbb7ecb354ce,0,1,5786dce7-e9a3-437a-b694-ca93ea87363f,5786dce7-e9a3-437a-b694-ca93ea87363f,0,1,e3f81324-3366-4de5-b834-688fee5ea625,e3f81324-3366-4de5-b834-688fee5ea625,0,1,205928c7-042b-4f11-919b-5ca9d1fc1ecb,205928c7-042b-4f11-919b-5ca9d1fc1ecb,0,1,b928a3e7-6d57-44f7-8c1e-c5df9a803a49,b928a3e7-6d57-44f7-8c1e-c5df9a803a49,0,1,e1c11609-5400-43ed-887c-22ba3a48a384,e1c11609-5400-43ed-887c-22ba3a48a384,0,1,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,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,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,0,1,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,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,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,112401b8-2800-4ed2-b620-7e1c1cacef2b,112401b8-2800-4ed2-b620-7e1c1cacef2b,0,1,6738abb6-483b-422d-9c4c-6fb6f8fee2cb,6738abb6-483b-422d-9c4c-6fb6f8fee2cb,0,1,742f14c0-a601-4cc1-9b89-b05cda5a2aac,742f14c0-a601-4cc1-9b89-b05cda5a2aac,0,1,2aaf3896-f7b2-405b-ac47-b4999ede382e,2aaf3896-f7b2-405b-ac47-b4999ede382e,0,1,f470a359-5c0c-4cd9-b470-b08b5f9dcd9f,f470a359-5c0c-4cd9-b470-b08b5f9dcd9f,0,1,c2a2daf0-b4dd-4a22-a0da-8325ff098cc3,c2a2daf0-b4dd-4a22-a0da-8325ff098cc3,0,1,f9484b9d-150f-4f1b-9041-4af10bf25ca6,f9484b9d-150f-4f1b-9041-4af10bf25ca6,0,1,795ffcdc-30cf-45a8-821a-66afdd86f7b3,795ffcdc-30cf-45a8-821a-66afdd86f7b3,0,1,227cb2ed-98df-441f-afd8-499e75dc6666,227cb2ed-98df-441f-afd8-499e75dc6666,0,1,07b55200-f01f-4d4e-a7a9-01b99301e8a0,07b55200-f01f-4d4e-a7a9-01b99301e8a0,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,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,0,1,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,0,1,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,0,1,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,0,1,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,0,1,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,0,1,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,0,1,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,0,1,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,0,1,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,0,1,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,0,1,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,0,1,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,0,1,83d23220-0226-4efe-a81c-6809459443a2,83d23220-0226-4efe-a81c-6809459443a2,0,1,ee30252f-ea25-4d50-b49c-163514bee342,ee30252f-ea25-4d50-b49c-163514bee342,0,1,02afc219-6b86-4282-ab6f-2688203542b7,02afc219-6b86-4282-ab6f-2688203542b7,0,1,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,0,1,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,0,1,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0,1,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,0,1,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,0,1,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,0,1,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,0,1,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,0,1,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,0,1,f71bd0e8-8784-452e-bea9-3696c875d69d,f71bd0e8-8784-452e-bea9-3696c875d69d,0,1,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,0,1,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,0,1,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,0,1,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,0,1,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,0,1,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,0,1,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,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,403d4675-b80e-4e0a-8cc0-2876661d0c89,403d4675-b80e-4e0a-8cc0-2876661d0c89,0,1,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,0,1,cb42bbe7-b564-44b2-89b8-d570f3419d3c,cb42bbe7-b564-44b2-89b8-d570f3419d3c,0,1,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,0,1,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,0,1,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,0,1,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,0,1,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0,1,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,0,1,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,0,1,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,0,1,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0,1,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,0,1,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,0,1,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,0,1,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,0,1,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,0,1,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,0,1,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,0,1,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,0,1,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,0,1,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,0,1,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,0,1,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,0,1,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,0,1,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,0,1,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,0,1,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,0,1,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,0,1,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0,1,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,0,1,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,0,1,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,0,1,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,0,1,34f9826f-3ab5-4849-8ef9-ab0fab3e471b,34f9826f-3ab5-4849-8ef9-ab0fab3e471b,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,6f169ef9-2dce-41a5-b9df-bc8c1031765e,1,37a35917-f13b-4c03-9234-10bbe65e31c7,"2.1.1.22","Фирма ""1С""","БиблиотекаСтандартныхПодсистем",3890,1,0,996f85cd-50bc-42f2-a9a2-1674c5d83252,996f85cd-50bc-42f2-a9a2-1674c5d83252,0,1,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,db4a9ccb-9ef5-4b3c-8577-b6fe5db1b62e,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,48e2b615-925a-46d5-9f47-783bdb36ab02,48e2b615-925a-46d5-9f47-783bdb36ab02,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,b73b22b7-419a-4ae9-b954-f6ad2244175b,b73b22b7-419a-4ae9-b954-f6ad2244175b,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,c17592a9-5df0-4fa6-bd33-3d78d341a55c,c17592a9-5df0-4fa6-bd33-3d78d341a55c,0,1,e3faac40-253a-47c3-bb4b-e0014b56daa9,e3faac40-253a-47c3-bb4b-e0014b56daa9,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,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,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,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,2fd1287d-d96d-4480-baf7-8815ae5ffbfb,0,1,08eeb8f1-944f-4450-83f6-ef20aaab7d86,08eeb8f1-944f-4450-83f6-ef20aaab7d86,0,1,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,ac4742ed-1bc2-4a97-8c1a-bcdfbc20db82,0,1,538f8da5-e4b3-4bfd-8267-ccb9aaf0188c,538f8da5-e4b3-4bfd-8267-ccb9aaf0188c,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,42544966-445d-41b8-b6a0-a52c64758232,42544966-445d-41b8-b6a0-a52c64758232,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,0d0ada8a-09bb-4634-bf50-199f3779dad5,0d0ada8a-09bb-4634-bf50-199f3779dad5,0,1,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,14ef2331-6d9b-4cf1-90f3-7d4ac410439d,0,1,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,04ab13b1-ffc2-47f5-aa0d-5850dcbd4a62,0,1,968588bb-ee60-4399-955a-3ec4228d3c40,968588bb-ee60-4399-955a-3ec4228d3c40,0,1,23dbb528-7ea8-44ae-a1f2-b7608118666e,23dbb528-7ea8-44ae-a1f2-b7608118666e,0,1,b9627855-6773-4a59-b7d3-f9e2e565cd9e,b9627855-6773-4a59-b7d3-f9e2e565cd9e,0,1,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,ad87bd29-0ad1-4da4-ac62-38e714e0cb9f,0,1,283ce432-3553-4de9-94a2-ca9a590437f5,283ce432-3553-4de9-94a2-ca9a590437f5,0,1,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,7102d4fa-92f2-4fba-ad09-a33dbc71bef2,0,1,34b0e268-497d-44d4-b822-84909d0685aa,34b0e268-497d-44d4-b822-84909d0685aa,0,1,8961a859-2203-4678-ae1f-63e2474a787a,8961a859-2203-4678-ae1f-63e2474a787a,0,1,fe63db47-3ece-4518-b6a2-0b6499f60a61,fe63db47-3ece-4518-b6a2-0b6499f60a61,0,1,654523be-93d9-4faa-9a35-ce2fede13820,654523be-93d9-4faa-9a35-ce2fede13820,0,1,671afc3e-7589-49d8-95a5-1cf195c3b2f8,671afc3e-7589-49d8-95a5-1cf195c3b2f8,0,1,2c8e45b8-7d80-4137-85db-66cd1db94526,2c8e45b8-7d80-4137-85db-66cd1db94526,0,1,47accdc7-8fa0-4996-9305-c42b6ca12df9,47accdc7-8fa0-4996-9305-c42b6ca12df9,0,1,5abc496c-5745-4220-9fdc-bac092717871,5abc496c-5745-4220-9fdc-bac092717871,0,1,7df36398-7752-4f51-9978-1bcb4bcdd062,7df36398-7752-4f51-9978-1bcb4bcdd062,0,1,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,9fd55b7f-209b-4b74-99d6-965b8f6f2df9,0,1,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,f818fde9-1b06-4507-a69f-4dcb0ce8cd7a,0,1,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,a6690ef1-b16a-4d58-bc31-a8089b2c00d8,0,1,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,316f94ec-81ed-4b5c-aa9d-98d2cfe1c641,0,1,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,3de28e34-3c1e-4e7f-a720-3418c8c9c496,3de28e34-3c1e-4e7f-a720-3418c8c9c496,0,1,388b8576-9ba4-460f-b71b-3d644663656a,388b8576-9ba4-460f-b71b-3d644663656a,0,1,23204b0b-bf77-4f7c-9945-e73ad924ebb4,23204b0b-bf77-4f7c-9945-e73ad924ebb4,0,1,21032fa5-9426-40bd-91e4-ace1e4ceb013,21032fa5-9426-40bd-91e4-ace1e4ceb013,0,1,17d23818-d865-4df6-a5d3-aa21b0287d0c,17d23818-d865-4df6-a5d3-aa21b0287d0c,0,1,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,ddfe5401-e136-4f20-aa65-aeb42a61a1f0,0,1,27a80757-c0fd-40c7-ad24-4c819c1ba72b,27a80757-c0fd-40c7-ad24-4c819c1ba72b,0,1,7fce9e49-e558-4760-9d95-dde6ac6c1e78,7fce9e49-e558-4760-9d95-dde6ac6c1e78,0,1,e5aba4a3-6056-4ef3-827c-d74283175393,e5aba4a3-6056-4ef3-827c-d74283175393,0,1,63039e62-7314-42ff-bdc6-c251f38b3827,63039e62-7314-42ff-bdc6-c251f38b3827,0,1,8a4b7aab-b602-4581-8fa4-fab66791f701,8a4b7aab-b602-4581-8fa4-fab66791f701,0,1,7c92c579-4651-4fe3-90dc-6c9b594b76f0,7c92c579-4651-4fe3-90dc-6c9b594b76f0,0,1,a2be2d7a-cca0-460f-a915-dadfb9cd588b,a2be2d7a-cca0-460f-a915-dadfb9cd588b,0,1,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,35bac3e3-1329-4aa6-866f-f6fcaed8cd6e,0,1,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,ed53b24d-5338-4ae1-8659-0ea6450dc7bb,0,1,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,6add2712-48e8-4b22-a7bb-7d8c808ac5fc,0,1,1f4408f5-460e-431b-9842-bc6875ccf0ae,1f4408f5-460e-431b-9842-bc6875ccf0ae,0,1,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,ec09aa2d-758f-4ae8-96b7-0f05b8187dda,0,1,7bfc6163-a62f-45e8-9112-40a5d675ba4a,7bfc6163-a62f-45e8-9112-40a5d675ba4a,0,1,542ff510-0245-4a08-80ac-a9941c66ae93,542ff510-0245-4a08-80ac-a9941c66ae93,0,1,03297623-eaa2-4db0-bf1b-ce2076faf20a,03297623-eaa2-4db0-bf1b-ce2076faf20a,0,1,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,3c6ef64e-c9bd-4cba-98a4-ffcc5b93b6da,0,1,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,700c2edd-c457-47b7-a7d3-5fb3d9078d1f,0,1,82a3802c-b6d6-4511-bd8b-eeec003afa33,82a3802c-b6d6-4511-bd8b-eeec003afa33,0,1,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,8b59dec8-12b8-455f-8dfc-7c3f03b4ffa5,0,1,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,b5eb2e12-c39c-44fa-b940-09b4dcd2817c,0,1,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,5d5ffb56-e18b-4831-94f0-d7a76c2eee6f,0,1,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,590f29f4-2db1-47c6-83a0-f44d4bbe6e3e,0,1,a755cb43-492d-4069-9b6a-29b92ebb5b0e,a755cb43-492d-4069-9b6a-29b92ebb5b0e,0,1,86d09107-f511-4148-b5d9-d97e92addfde,86d09107-f511-4148-b5d9-d97e92addfde,0,1,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,c14c1f91-f4b9-44d6-b560-8dcdb5faf5f9,0,1,55b78834-3d90-4858-a6f7-e0368b1d8c41,55b78834-3d90-4858-a6f7-e0368b1d8c41,0,1,059b9a75-f53a-4518-a48a-afc72ab9ee36,059b9a75-f53a-4518-a48a-afc72ab9ee36,0,1,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,bc0dcb68-bfb8-49f4-8eb4-2ca953d852bd,0,1,1e2a18a3-bdde-4033-9b83-f8a6ee47e86c,1e2a18a3-bdde-4033-9b83-f8a6ee47e86c,0,1,31e95872-97c7-49e3-bd1b-8df4de07014d,31e95872-97c7-49e3-bd1b-8df4de07014d,0,1,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,9c7f2728-10a9-463b-b04c-01ee26f3d4c5,0,1,8b9be02b-cd1f-4231-a895-6c9be26348c2,8b9be02b-cd1f-4231-a895-6c9be26348c2,0,1,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,c52c4b8c-6be7-460a-9b54-6cdf64e3f8fe,0,1,fa4f0b33-5253-4a5f-8121-feae3e1968a6,fa4f0b33-5253-4a5f-8121-feae3e1968a6,0,1,e0d21be2-91dc-4a04-9078-49420ddddcd5,e0d21be2-91dc-4a04-9078-49420ddddcd5,0,1,56c97764-7dba-42e0-8ba0-82712aca20e9,56c97764-7dba-42e0-8ba0-82712aca20e9,0,1,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,03ad9b3d-8f3a-4482-a777-f6a3b3d953d6,0,1,ea868745-71fc-483c-aa6e-f242c06c673f,ea868745-71fc-483c-aa6e-f242c06c673f,0,1,7f3c6269-ea41-492f-87b7-7eaaf712762e,7f3c6269-ea41-492f-87b7-7eaaf712762e,0,1,12f95031-b81f-4802-b2f3-6f70def90db0,12f95031-b81f-4802-b2f3-6f70def90db0,0,1,5732112a-f31d-41cd-9a7f-312a27395502,5732112a-f31d-41cd-9a7f-312a27395502,0,1,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,bbf8342b-24f0-4d11-bb5a-4c89d5ea7766,0,1,f646835e-61eb-4ebd-811e-dac5e70bd1b4,f646835e-61eb-4ebd-811e-dac5e70bd1b4,0,1,61b49c4c-3021-4868-834a-9137476ae169,61b49c4c-3021-4868-834a-9137476ae169,0,1,58911911-5192-45fe-87cf-c4a222a521a1,58911911-5192-45fe-87cf-c4a222a521a1,0,1,70067937-9f27-4442-b87b-6c4576ce1b78,70067937-9f27-4442-b87b-6c4576ce1b78,0,1,115d5d06-a2fc-453e-aab5-c869b6d5850b,115d5d06-a2fc-453e-aab5-c869b6d5850b,0,1,d33ca006-d81d-4ef8-8503-7878e81c599f,d33ca006-d81d-4ef8-8503-7878e81c599f,0,1,123bb339-b95e-44c3-b1e9-482dcaa6f297,123bb339-b95e-44c3-b1e9-482dcaa6f297,0,1,f4119605-beb3-46b6-b372-ecdb74f10a33,f4119605-beb3-46b6-b372-ecdb74f10a33,0,1,d2a2e332-a52c-4277-bd19-5ea8ef198469,d2a2e332-a52c-4277-bd19-5ea8ef198469,0,1,e440c594-14bb-4a6e-af53-a4519c7d5548,e440c594-14bb-4a6e-af53-a4519c7d5548,0,1,4165bdaa-8e27-40de-bcdc-0379c34e8868,4165bdaa-8e27-40de-bcdc-0379c34e8868,0,1,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,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,c5b8bf21-5c8f-4e5b-8b85-bfac387ce99a,0,1,c2768e31-9e61-4d8d-838d-90b2e2683148,c2768e31-9e61-4d8d-838d-90b2e2683148,0,1,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,7cbf0398-2bc7-4f40-9a9e-af4135c6a2d2,0,1,8486e623-1a54-4ad9-ab44-591b6a559bc3,8486e623-1a54-4ad9-ab44-591b6a559bc3,0,1,dce82d28-9a7b-4d4c-af13-90f459cf4af2,dce82d28-9a7b-4d4c-af13-90f459cf4af2,0,1,cb9f2231-49bb-4b14-a124-8996628afead,cb9f2231-49bb-4b14-a124-8996628afead,0,1,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,dc1b8bce-49c5-4fd2-a597-27f1fbc98648,0,1,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,ac4c6275-3c23-4a1f-b19e-c674fd685e8f,0,1,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,25d118f0-bfb7-4f08-84b1-0511b0fc92e8,0,1,896de79f-3c34-4436-a4e2-4dd4f45c3e20,896de79f-3c34-4436-a4e2-4dd4f45c3e20,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,1692bf73-8ce6-4b0e-875b-79cdd4396ca7,1692bf73-8ce6-4b0e-875b-79cdd4396ca7,0,1,f6259a3b-98f5-4649-8fd0-da0a0285f375,f6259a3b-98f5-4649-8fd0-da0a0285f375,0,1,c565bf25-c55e-4324-851a-cec497f5114a,c565bf25-c55e-4324-851a-cec497f5114a,0,1,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,b50994d0-23f9-4bf4-93d2-cf9bcffa6fc9,0,1,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,8943233f-5c9a-4e6b-b1c2-3bbb94b6c4a7,0,1,5b0e250c-4d2d-4e37-ade1-593854610d3f,5b0e250c-4d2d-4e37-ade1-593854610d3f,0,1,148f63d5-23ad-4824-a24c-14d5a54c62d3,148f63d5-23ad-4824-a24c-14d5a54c62d3,0,1,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,d6cdd049-b31b-48aa-a2aa-a24b0bdf3337,0,1,2d40609d-b56f-4082-9a6f-8216817ebd24,2d40609d-b56f-4082-9a6f-8216817ebd24,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,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,cd6f96c7-33ee-42b1-bb81-ce7d9652337c,0,1,766c7fb5-727e-4975-9ea1-3b0df4739620,766c7fb5-727e-4975-9ea1-3b0df4739620,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,fac2e2cb-c32a-4592-b6c8-fd18806e845d,fac2e2cb-c32a-4592-b6c8-fd18806e845d,0,1,f58bffe7-4a02-4c4e-bfed-7895177a400c,f58bffe7-4a02-4c4e-bfed-7895177a400c,0,1,fe285122-2257-4fb2-ab7e-1683c31db1c6,fe285122-2257-4fb2-ab7e-1683c31db1c6,0,1,0facc6eb-a178-45ee-a6bc-4bf085d80453,0facc6eb-a178-45ee-a6bc-4bf085d80453,0,1,f74eef36-9441-4b6f-b21c-de9643832f9f,f74eef36-9441-4b6f-b21c-de9643832f9f,0,1,ac2e5217-aaeb-4b6f-b063-538c84f2da06,ac2e5217-aaeb-4b6f-b063-538c84f2da06,0,1,b5e73fbe-499c-4666-a482-0ef399c97c1e,b5e73fbe-499c-4666-a482-0ef399c97c1e,0,1,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,a0811e0a-91b6-4c4b-a6d2-a57b9185983b,0,1,4ac77dea-3c2b-4566-8857-ba99f7b025c9,4ac77dea-3c2b-4566-8857-ba99f7b025c9,0,1,09fec67d-6e45-428c-b858-9ae20979676c,09fec67d-6e45-428c-b858-9ae20979676c,0,1,58ffc4d9-d711-4b68-905c-d2ac4f78b547,58ffc4d9-d711-4b68-905c-d2ac4f78b547,0,1,94ab750f-46b4-427c-a7f2-4e94fb9b0678,94ab750f-46b4-427c-a7f2-4e94fb9b0678,0,1,397d9926-31a3-4c03-acb7-74478f9863e1,397d9926-31a3-4c03-acb7-74478f9863e1,0,1,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,9ad979d3-74ad-4d90-b279-c3a2bea36ea7,0,1,264dd12a-b4c5-44bf-b3c0-ef9225505f76,264dd12a-b4c5-44bf-b3c0-ef9225505f76,0,1,90b8fdf3-3e42-442f-a002-6a28ad0edc99,90b8fdf3-3e42-442f-a002-6a28ad0edc99,0,1,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,92f35bea-50b8-4a1c-8fb2-a8c7df7a50db,0,1,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,82ba8c13-6567-4f0c-be0e-0884ce19bbcc,0,1,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,bd539a52-d33e-4e9b-8508-230acf76e98a,bd539a52-d33e-4e9b-8508-230acf76e98a,0,1,5fb2c120-fd14-4e78-a35f-c8e9478b3235,5fb2c120-fd14-4e78-a35f-c8e9478b3235,0,1,9d514ce1-f9bd-4018-8107-545cdd372fbd,9d514ce1-f9bd-4018-8107-545cdd372fbd,0,1,fe6b732f-3a33-460f-9686-cffdd5f7d99b,fe6b732f-3a33-460f-9686-cffdd5f7d99b,0,1,06250212-aeb1-4cb8-8785-ea71b1dad848,06250212-aeb1-4cb8-8785-ea71b1dad848,0,1,0c068a61-e5e6-4475-96fa-b7c1d825da42,0c068a61-e5e6-4475-96fa-b7c1d825da42,0,1,1047e34d-397a-42cc-80e6-1be755bd6462,1047e34d-397a-42cc-80e6-1be755bd6462,0,1,1cd473c3-4e36-47a9-b466-73d86ec244b0,1cd473c3-4e36-47a9-b466-73d86ec244b0,0,1,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,c3e31dfd-b79b-49b9-9dc0-e2439bfe5ab7,0,1,b406b5f9-eeaf-43a0-8930-067554d783c9,b406b5f9-eeaf-43a0-8930-067554d783c9,0,1,47718840-2939-4e30-a72c-a20c88ac4c17,47718840-2939-4e30-a72c-a20c88ac4c17,0,1,58a38994-9fe4-4783-967d-79d1141b90f3,58a38994-9fe4-4783-967d-79d1141b90f3,0,1,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,6e23a4b2-f53c-41ea-9fef-8f4561b8e0cc,0,1,7c2e35a8-d05d-4e52-baee-a1e13585c502,7c2e35a8-d05d-4e52-baee-a1e13585c502,0,1,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,5d8b60e5-d407-4d8a-b4fb-e26a36ab8180,0,1,f551f78a-2f05-4932-ac33-cfa1b077f46f,f551f78a-2f05-4932-ac33-cfa1b077f46f,0,1,a96091a7-d3a5-4893-8440-f360231bf468,a96091a7-d3a5-4893-8440-f360231bf468,0,1,9ce6eef0-5280-4374-9714-474ac571e4e2,9ce6eef0-5280-4374-9714-474ac571e4e2,0,1,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,aeb54e92-a1d0-46a1-b4cb-87d3c29fa30b,0,1,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,8395bfb2-3cf4-4bec-b19b-eb6dd3aa7a39,0,1,eca79a64-3d00-4178-b4eb-cf5468622c96,eca79a64-3d00-4178-b4eb-cf5468622c96,0,1,6dc4c216-e49f-4833-b45f-6060b67995ef,6dc4c216-e49f-4833-b45f-6060b67995ef,0,1,4655fa12-9169-4d08-bdab-9b3174d0b223,4655fa12-9169-4d08-bdab-9b3174d0b223,0,1,ba5574bd-53ca-413f-a245-272f468a80fb,ba5574bd-53ca-413f-a245-272f468a80fb,0,1,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,6cb136cd-dc5c-4d85-8a0d-70b9f8bf70d5,0,1,300ecdd6-144f-48c8-9fd4-6166f1de1047,300ecdd6-144f-48c8-9fd4-6166f1de1047,0,1,b6bbfb59-8249-47af-9394-be262f118811,b6bbfb59-8249-47af-9394-be262f118811,0,1,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,15dab650-f7ed-42bc-8ca3-c104c3e68ce4,0,1,fb63d488-fb91-4d08-8f8c-f4836538216f,fb63d488-fb91-4d08-8f8c-f4836538216f,0,1,b8be6c09-6880-45d3-a2d1-06ad72d069c9,b8be6c09-6880-45d3-a2d1-06ad72d069c9,0,1,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,3c1b10c7-3667-43f0-ac03-8cdaa84cb177,0,1,148dd521-8754-451b-803b-cbee7c3d3965,148dd521-8754-451b-803b-cbee7c3d3965,0,1,38bc48c7-3938-47be-be3f-844f19561301,38bc48c7-3938-47be-be3f-844f19561301,0,1,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,4bdd09d5-6bc9-421f-99f0-ae905340f0d4,0,1,147038fb-6154-41f3-aad6-547db27d1e43,147038fb-6154-41f3-aad6-547db27d1e43,0,1,832fa9d3-deab-4c57-b6e2-dee5d24d6100,832fa9d3-deab-4c57-b6e2-dee5d24d6100,0,1,dd4270ef-6b4c-491e-8871-959dbec14c53,dd4270ef-6b4c-491e-8871-959dbec14c53,0,1,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,c2b115d3-04f8-43c8-aed9-c61280b8cc3b,0,1,f64de21f-5a7c-4a1a-a929-07fc53049f6c,f64de21f-5a7c-4a1a-a929-07fc53049f6c,0,1,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,470cdf43-07f4-46d5-aab2-d41f1e5da3cd,0,1,ea653eca-f96a-447d-8b09-7a7cb6929ed6,ea653eca-f96a-447d-8b09-7a7cb6929ed6,0,1,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,ae52e48c-20ec-43cd-a9a5-b1753558e1d2,0,1,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,39af0f4c-0f0d-4e9a-aa63-d0eee3985b4e,0,1,3b380a63-9232-42c2-bfa2-e8fc89448bbd,3b380a63-9232-42c2-bfa2-e8fc89448bbd,0,1,10556a26-ea4b-46b4-84d1-175eb13b333f,10556a26-ea4b-46b4-84d1-175eb13b333f,0,1,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,dbd8391c-a174-43d6-a8db-d9ab76b4edbe,0,1,4168f6dc-d43f-435a-8a98-2dd99470568a,4168f6dc-d43f-435a-8a98-2dd99470568a,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,ffea6f3b-86fb-438d-bc22-7e19831f57d3,ffea6f3b-86fb-438d-bc22-7e19831f57d3,0,1,eaae534f-b506-4c86-b649-5b103cf5791d,eaae534f-b506-4c86-b649-5b103cf5791d,0,1,18b4773a-5380-4e71-8b51-ef10e19df17e,18b4773a-5380-4e71-8b51-ef10e19df17e,0,1,42f454f7-cfc4-459b-898f-86cace30410c,42f454f7-cfc4-459b-898f-86cace30410c,0,1,2b72fe1c-afe1-4905-8db2-2bb1baca6295,2b72fe1c-afe1-4905-8db2-2bb1baca6295,0,1,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,e700ab8e-ff33-4968-9bd0-8918a7d2b83f,0,1,330933ca-c4d5-4014-8a6d-910124dfdc7e,330933ca-c4d5-4014-8a6d-910124dfdc7e,0,1,910b3640-790c-4185-88b5-a7c7466374c0,910b3640-790c-4185-88b5-a7c7466374c0,0,1,b5eceb60-76ba-47e3-90bd-52078d4bae4e,b5eceb60-76ba-47e3-90bd-52078d4bae4e,0,1,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,b8869f44-b87f-4e3e-a0d5-2aec5ccda4e2,0,1,f7c23753-ff8c-4c26-bdc5-58e3b038668d,f7c23753-ff8c-4c26-bdc5-58e3b038668d,0,1,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,5e08154e-bd8b-4e61-8a6c-b5b500f12b99,0,1,10197638-2cde-4424-8390-3bc9abe9852e,10197638-2cde-4424-8390-3bc9abe9852e,0,1,4fb8564e-2338-4c23-84a4-31f768047ced,4fb8564e-2338-4c23-84a4-31f768047ced,0,1,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,6179c7bf-08d6-4600-8cdc-ea6d4187bd55,0,1,e18b4527-8727-4a10-9e99-a80012debe6c,e18b4527-8727-4a10-9e99-a80012debe6c,0,1,1ed910db-e434-4efd-9b12-c25353a31d5a,1ed910db-e434-4efd-9b12-c25353a31d5a,1,0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,76702e9e-fa7a-4b98-befa-f9b37db2dae0,1,0,101a4eb3-cdda-47af-8c69-615a6920347a,101a4eb3-cdda-47af-8c69-615a6920347a,1,0,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,cf19f220-f6d4-4c9e-b5d5-9d94234f0a2c,1,0,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,f410a5db-8698-44ca-9ff6-2c530e1f5c2a,1,0,f79bada2-838f-4e4f-a017-935cf671a70c,f79bada2-838f-4e4f-a017-935cf671a70c,1,0,ed394820-a216-4c4b-81ae-5dea33ced43b,ed394820-a216-4c4b-81ae-5dea33ced43b,1,0,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,3f3a0b1b-04ce-47c1-928d-5e3483e9fd73,1,0,8a310493-c06f-46db-b2b5-14d6ed203312,8a310493-c06f-46db-b2b5-14d6ed203312,1,0,b68ec95b-64f3-4a2b-9683-231d50f01eeb,b68ec95b-64f3-4a2b-9683-231d50f01eeb,1,0,4a008342-f72f-4ca1-bad1-64b59b509911,4a008342-f72f-4ca1-bad1-64b59b509911,1,0,cefa1723-a4d4-44c4-bd57-ffa713f9306c,cefa1723-a4d4-44c4-bd57-ffa713f9306c,1,0,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,497ce8f3-f6f0-4da8-aeb0-0fa01bb26dc6,1,0,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,8d8b91c0-c0ab-4b9d-b854-b867063ddb5b,1,0,4920aabf-6f53-4f91-932a-8ace24631a74,4920aabf-6f53-4f91-932a-8ace24631a74,1,0,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,ce7a7f72-9d7d-4240-b852-e83b4b8d944b,1,0,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,dacd15cd-ffdc-444d-a45f-9b0c7776a7c5,1,0,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,7309e58d-b0d4-4e0f-a74d-68cab03fea8e,1,0,bbec9c3d-31dd-484e-ab32-41ef845f1370,bbec9c3d-31dd-484e-ab32-41ef845f1370,1,0,8692ba41-d91d-4af0-8aba-69dd5409d593,8692ba41-d91d-4af0-8aba-69dd5409d593,1,0,852bd696-9a9e-4952-b676-4108f757ad9b,852bd696-9a9e-4952-b676-4108f757ad9b,1,0,a95b564a-c895-40f2-b947-ea08462bb2a0,a95b564a-c895-40f2-b947-ea08462bb2a0,1,0,ca63ca2f-703d-4317-8c5d-0650ea638f3f,ca63ca2f-703d-4317-8c5d-0650ea638f3f,1,0,aa2256c7-9847-40a5-9e49-11c508e0d45b,aa2256c7-9847-40a5-9e49-11c508e0d45b,1,0,a04493f4-508c-4047-b0e3-b7d4bde6427b,a04493f4-508c-4047-b0e3-b7d4bde6427b,1,0,418982cd-d403-47cf-a7ef-993a36104947,418982cd-d403-47cf-a7ef-993a36104947,1,0,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,485ebc6a-0e3e-4278-8ef1-c6194d6d5015,1,0,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,816c8143-8b02-4f4a-8eb1-44c7fb36afcc,1,0,35eea3b8-d017-442a-b5a0-a1571165b9a9,35eea3b8-d017-442a-b5a0-a1571165b9a9,1,0,7e84901c-cb7f-437c-a135-0902cd47acb6,7e84901c-cb7f-437c-a135-0902cd47acb6,1,0,c4d67026-2c97-4126-b8be-49aa6f567e2d,c4d67026-2c97-4126-b8be-49aa6f567e2d,1,0,fda2906d-f499-4016-b13a-99f7f713b898,fda2906d-f499-4016-b13a-99f7f713b898,1,0,da2b47f5-4109-4f72-a4a5-70be24a6881f,da2b47f5-4109-4f72-a4a5-70be24a6881f,1,0,849f034e-85dc-4515-aae6-240c1e0d46d9,849f034e-85dc-4515-aae6-240c1e0d46d9,1,0,de4d37c9-b278-4c0c-bc10-1b63ecd72947,de4d37c9-b278-4c0c-bc10-1b63ecd72947,1,0,1c7e9baa-7728-4afd-829a-806cee13ecdb,1c7e9baa-7728-4afd-829a-806cee13ecdb,1,0,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,5d75aae8-9d9c-4a47-b8c0-2ce56431fe53,1,0,f8c499bc-2b02-4b61-a162-4ce87057952f,f8c499bc-2b02-4b61-a162-4ce87057952f,1,0,3091c6d3-6cb2-4990-a0d2-ee766db5c1df,3091c6d3-6cb2-4990-a0d2-ee766db5c1df,1,0,5a741cf6-8160-4409-9396-2e6d1e67e6fa,5a741cf6-8160-4409-9396-2e6d1e67e6fa,1,0,8242daae-181a-47df-b28e-c1de3fce0359,8242daae-181a-47df-b28e-c1de3fce0359,1,0,5cc3a29d-aa98-42bf-9800-f584229c8e46,5cc3a29d-aa98-42bf-9800-f584229c8e46,1,0,db82191f-77bd-44da-8b33-86f01018e25a,db82191f-77bd-44da-8b33-86f01018e25a,1,0,acfa1919-07ce-4464-8552-6b104e284dca,acfa1919-07ce-4464-8552-6b104e284dca,1,0,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,06ff179c-864b-4d3b-83c5-f09c3e0f37f4,06ff179c-864b-4d3b-83c5-f09c3e0f37f4,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,35c938f4-065f-47f5-a75b-637ed0080725,35c938f4-065f-47f5-a75b-637ed0080725,1,0,b3847d64-46b8-4bd1-9362-d88d82b34254,b3847d64-46b8-4bd1-9362-d88d82b34254,1,0,14b58f6d-9243-47cd-a430-8408fcddd8d8,14b58f6d-9243-47cd-a430-8408fcddd8d8,0,1,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,57b9edd2-16d2-40f2-ae9c-33462eda5fb4,0,1,e14c0841-226c-4c79-bec9-cfc8d2c3a160,e14c0841-226c-4c79-bec9-cfc8d2c3a160,0,1,6f3c5b90-b030-4267-a973-33d12c2c7680,6f3c5b90-b030-4267-a973-33d12c2c7680,0,1,8a0db1f1-fb8d-45fa-944d-72d460e49873,8a0db1f1-fb8d-45fa-944d-72d460e49873,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,36d7d739-b198-487d-8644-76589356c2ec,36d7d739-b198-487d-8644-76589356c2ec,0,1,62fa393c-687c-49bf-8a25-81adc04430fb,62fa393c-687c-49bf-8a25-81adc04430fb,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,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,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,91488422-c802-4360-b46b-22d1e2905f0b,91488422-c802-4360-b46b-22d1e2905f0b,0,1,90bc48b0-3094-473c-8e07-53da338d7c53,90bc48b0-3094-473c-8e07-53da338d7c53,0,1,e5dfee58-f748-48ee-81a3-7c6133f06365,e5dfee58-f748-48ee-81a3-7c6133f06365,0,1,27bfc94e-e438-4854-9a9d-39a3b984c9b4,27bfc94e-e438-4854-9a9d-39a3b984c9b4,0,1,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,a7f1af69-f0f1-4c24-bf4f-b8dc15f4dec2,0,1,5c4c9931-3fb0-47a8-9e4f-d552de12b355,5c4c9931-3fb0-47a8-9e4f-d552de12b355,0,1,2a498baf-ec2e-4dda-b568-801bb60db225,2a498baf-ec2e-4dda-b568-801bb60db225,0,1,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,8a32af97-cdb5-46b4-ab7b-e1509e26ecc3,0,1,35989876-16b1-4b02-9381-444a06a7a21d,35989876-16b1-4b02-9381-444a06a7a21d,0,1,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,9f59f8cd-8d61-4fbc-ae6e-32f28ce0035a,0,1,f7608000-1e8a-4ca4-afb7-e04ef547b70a,f7608000-1e8a-4ca4-afb7-e04ef547b70a,0,1,26cea519-19d0-4707-be0a-1a43fde6e563,26cea519-19d0-4707-be0a-1a43fde6e563,0,1,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,a3d599b9-89d1-4386-8c5b-1c2a9905e6e2,0,1,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,9fb3e902-3154-4bab-9bfe-9a266dc49fa5,0,1,3965aac5-1850-4987-a6b6-683f115077f9,3965aac5-1850-4987-a6b6-683f115077f9,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,5d7174d2-42b3-4e12-b705-4209dd73b53b,5d7174d2-42b3-4e12-b705-4209dd73b53b,0,1,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,b1b5bf08-1c57-4875-87bb-ad1fa1a3251f,0,1,cfe59dfd-a509-4f83-b926-b3ff94234a43,cfe59dfd-a509-4f83-b926-b3ff94234a43,0,1,9020fa9d-e7de-4574-ab65-db6651b5b610,9020fa9d-e7de-4574-ab65-db6651b5b610,0,1,9de4d430-95ec-4435-b3e8-4fc85778d517,9de4d430-95ec-4435-b3e8-4fc85778d517,0,1,205b8908-fa21-42bd-bff0-fb95e6787f15,205b8908-fa21-42bd-bff0-fb95e6787f15,0,1,5320abf1-b09b-4de0-9adf-4cb1da31df6f,5320abf1-b09b-4de0-9adf-4cb1da31df6f,0,1,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,5e9e42c5-dcbc-422f-acce-4f11a63dbb85,0,1,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,6903ffe4-42c1-4708-a1b0-bb67cd3f9e4c,0,1,65bef8ef-f088-4bb6-abb4-c2a59f82f900,65bef8ef-f088-4bb6-abb4-c2a59f82f900,0,1,27a9d7f3-7f44-4268-931f-1308047ce462,27a9d7f3-7f44-4268-931f-1308047ce462,0,1,1504d923-a49f-4340-854f-6b79847bc8a1,1504d923-a49f-4340-854f-6b79847bc8a1,0,1,fc78d8df-ab27-4544-a65c-73908b9c5425,fc78d8df-ab27-4544-a65c-73908b9c5425,0,1,bd97e481-cfc4-4a40-8438-985020f06abd,bd97e481-cfc4-4a40-8438-985020f06abd,0,1,120c5162-b03c-46ce-8a2a-8ef501971715,120c5162-b03c-46ce-8a2a-8ef501971715,0,1,33343620-673e-4aa3-9e58-c6a25f738001,33343620-673e-4aa3-9e58-c6a25f738001,0,1,8aaf780f-ed74-4f44-9598-c14180053ff9,8aaf780f-ed74-4f44-9598-c14180053ff9,0,1,dbd4d09d-f410-4453-9143-bd72da5464cc,dbd4d09d-f410-4453-9143-bd72da5464cc,0,1,c4fe10b6-d025-4736-be23-3113bd7fe7b4,c4fe10b6-d025-4736-be23-3113bd7fe7b4,0,1,65530aca-7cf2-4a52-b5be-5dcbc15a049e,65530aca-7cf2-4a52-b5be-5dcbc15a049e,0,1,15eb2c2d-305d-42c0-9aec-936b82114bdb,15eb2c2d-305d-42c0-9aec-936b82114bdb,0,1,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,bb99bc44-f83e-48bb-93fd-7b07ca7da6a7,0,1,cbca7272-2aae-4e21-b3f5-12786f085648,cbca7272-2aae-4e21-b3f5-12786f085648,0,1,7718bd0b-7b8a-4ffc-b228-f05683b5531a,7718bd0b-7b8a-4ffc-b228-f05683b5531a,0,1,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,38aeb32b-9e3b-4b4a-9a61-97da63cdea48,0,1,881f53bc-a52e-4312-b09d-3d3f53ddf84b,881f53bc-a52e-4312-b09d-3d3f53ddf84b,0,1,945ae8d2-b74a-41e9-b740-c82acdd40d04,945ae8d2-b74a-41e9-b740-c82acdd40d04,0,1,e3476d0e-0ab4-4734-9261-04aef6281086,e3476d0e-0ab4-4734-9261-04aef6281086,0,1,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,2e36a7b3-5331-4fab-a0a3-31b42a8387fe,0,1,30fb1877-11cf-4985-a65d-6639a06b33f7,30fb1877-11cf-4985-a65d-6639a06b33f7,0,1,e9c355cb-d4ea-49d1-a893-f8f295a90701,e9c355cb-d4ea-49d1-a893-f8f295a90701,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,4eefabc9-49ab-4301-8238-3f09b40d379e,4eefabc9-49ab-4301-8238-3f09b40d379e,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,437021b0-9f18-4238-9af6-7ca275b91fa4,437021b0-9f18-4238-9af6-7ca275b91fa4,0,1,87dad256-122b-4d7e-b249-a2c313a9cf33,87dad256-122b-4d7e-b249-a2c313a9cf33,0,1,783dd4ba-a597-45ba-8989-2ed5224d62bc,783dd4ba-a597-45ba-8989-2ed5224d62bc,0,1,958033a6-2a8e-473a-903b-34eee6507f5a,958033a6-2a8e-473a-903b-34eee6507f5a,0,1,ac5f945e-2d03-44fb-a8cf-5d786194cefd,ac5f945e-2d03-44fb-a8cf-5d786194cefd,0,1,698ec00f-bf75-420e-81ab-a98808daf3f7,698ec00f-bf75-420e-81ab-a98808daf3f7,0,1,f441907c-d02e-431e-baf4-1854e48a1f50,f441907c-d02e-431e-baf4-1854e48a1f50,0,1,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,ac2d4f02-e893-4366-9702-369a11c5f9b8,ac2d4f02-e893-4366-9702-369a11c5f9b8,0,1,07b53437-cc8d-4834-a1e0-7007538b6eab,07b53437-cc8d-4834-a1e0-7007538b6eab,0,1,dcdc9c65-c2d5-4531-a325-f64b3861cbab,dcdc9c65-c2d5-4531-a325-f64b3861cbab,0,1,3846cbb9-1e92-4342-84d8-8718ac9f406e,3846cbb9-1e92-4342-84d8-8718ac9f406e,0,1,4c5311c8-f8c9-45ec-83c3-707cba1319d8,4c5311c8-f8c9-45ec-83c3-707cba1319d8,0,1,63238051-8454-49b0-a6a0-d2686b17bd5f,63238051-8454-49b0-a6a0-d2686b17bd5f,0,1,c5a18115-bc84-4289-b195-0b326e144455,c5a18115-bc84-4289-b195-0b326e144455,0,1,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,75e77f99-b9d1-4bc0-93aa-c77a93d760d3,0,1,3a46c243-bdf5-4429-895a-edeae1c0396e,3a46c243-bdf5-4429-895a-edeae1c0396e,0,1,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,c7da3115-3cee-4282-a2f2-4e0b5558e4fc,0,1,2976c29f-f482-463d-8f6e-6a632fb50893,2976c29f-f482-463d-8f6e-6a632fb50893,0,1,701964a1-7762-45ee-a9a4-41dd9ce94783,701964a1-7762-45ee-a9a4-41dd9ce94783,0,1,55d1909e-f552-441f-8e14-47d2e604cf6a,55d1909e-f552-441f-8e14-47d2e604cf6a,0,1,eae627db-c52b-4e41-94d1-58db28cd0063,eae627db-c52b-4e41-94d1-58db28cd0063,0,1,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,cafc86e1-d7f1-4cd2-ac20-04fa0917556a,0,1,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,12cf9412-baf5-4d32-a563-a11ac3d5e0ed,0,1,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,bdde9030-5718-4f5e-a9e2-f641f4ce69f9,0,1,ed137e05-1996-411d-9927-45a3d7e3ee3b,ed137e05-1996-411d-9927-45a3d7e3ee3b,0,1,fbebf341-9842-41e1-8e4d-490fa02065ce,fbebf341-9842-41e1-8e4d-490fa02065ce,0,1,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,fcb46a8a-3461-4ec2-9aa0-685aedb9dd50,0,1,642154b8-97da-4c4f-bf34-c1124215077d,642154b8-97da-4c4f-bf34-c1124215077d,0,1,abc10867-39ae-46bf-8bd7-90f645919235,abc10867-39ae-46bf-8bd7-90f645919235,0,1,f59f91c5-026a-4dc5-996e-0d59814a9604,f59f91c5-026a-4dc5-996e-0d59814a9604,0,1,a752fba8-5084-4fa2-9d0b-7074a42b1312,a752fba8-5084-4fa2-9d0b-7074a42b1312,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,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0bd85b79-cc32-4c1d-b629-567a1bdfac56,0,1,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,9dd6e7d6-cd98-4928-b50c-38bdbc61c211,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,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,da2c8a7c-8386-467d-a049-1090956b70de,da2c8a7c-8386-467d-a049-1090956b70de,0,1,e5ecbb1f-981d-4928-9335-22216879f7e2,e5ecbb1f-981d-4928-9335-22216879f7e2,0,1,453cb913-9c46-429a-a9e1-30424b90c022,453cb913-9c46-429a-a9e1-30424b90c022,0,1,259564b8-172e-4eed-9360-d561ec6dad69,259564b8-172e-4eed-9360-d561ec6dad69,0,1,461be12a-9f16-4826-978a-436608ca8733,461be12a-9f16-4826-978a-436608ca8733,0,1,9b143299-d300-4b6c-b667-5552fb3bdcde,9b143299-d300-4b6c-b667-5552fb3bdcde,0,1,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0de070f4-d8b7-48bb-bfc9-027dd727a4ad,0,1,74973d06-f57d-403e-945c-5cd2f4fc4869,74973d06-f57d-403e-945c-5cd2f4fc4869,0,1,91c799d7-2b3d-4d1a-87ff-221057a428c6,91c799d7-2b3d-4d1a-87ff-221057a428c6,0,1,a50fcacc-6d2d-496c-bea0-9c73cd153437,a50fcacc-6d2d-496c-bea0-9c73cd153437,0,1,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,a6846c5a-7cf6-4df2-a159-2fd33d18d18f,0,1,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,6ec3463a-1e94-4de7-a8c0-b0e42f38573e,0,1,e40b8882-737a-40c0-83b4-c35dc042f4a5,e40b8882-737a-40c0-83b4-c35dc042f4a5,0,1,d60c1e9d-1395-4293-8462-6ea2c93a0c86,d60c1e9d-1395-4293-8462-6ea2c93a0c86,0,1,5a2d5d8a-afd9-4954-9868-7c82bad00426,5a2d5d8a-afd9-4954-9868-7c82bad00426,0,1,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,14fcf5e5-5856-4b5f-8c3f-75eaba0f7268,0,1,6ac7db0c-18ed-4d3b-956a-5985214db474,6ac7db0c-18ed-4d3b-956a-5985214db474,0,1,267103e0-6703-4a74-bb4f-af610d7ef332,267103e0-6703-4a74-bb4f-af610d7ef332,0,1,1f4d7158-15ed-4b0c-a7ed-1f8cfe2bd882,1f4d7158-15ed-4b0c-a7ed-1f8cfe2bd882,0,1,7effb232-a84f-4b4e-aa0c-1cefdc6ba612,7effb232-a84f-4b4e-aa0c-1cefdc6ba612,0,1,e4ce04bf-15a0-4d9d-af7b-4ec9e1fb36be,e4ce04bf-15a0-4d9d-af7b-4ec9e1fb36be,0,1,f75411c5-a317-42c4-8731-9b16856109d5,f75411c5-a317-42c4-8731-9b16856109d5,0,1,6ef011aa-eda4-4ddf-a588-5208790f6937,6ef011aa-eda4-4ddf-a588-5208790f6937,0,1,db07da1d-0281-4acf-90a2-3fd35629ab35,db07da1d-0281-4acf-90a2-3fd35629ab35,0,1,b98ca634-25a5-4366-af04-815ba34c8bb2,b98ca634-25a5-4366-af04-815ba34c8bb2,0,1,37818589-95de-43df-8a0f-f7149f96f683,37818589-95de-43df-8a0f-f7149f96f683,0,1,8d877829-5cf0-46fd-99b5-9bb5e5e5dc51,8d877829-5cf0-46fd-99b5-9bb5e5e5dc51,0,1,5ea65812-6c39-440e-82a4-621a16595d86,5ea65812-6c39-440e-82a4-621a16595d86,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,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,4304ffb9-7ede-4c59-bef8-26fe3e8f0103,0,1,d4655391-144c-4ba6-aee5-1edafebe862c,d4655391-144c-4ba6-aee5-1edafebe862c,0,1,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,1ea750ae-5ec4-43c5-b34f-fd28999d41d7,0,1,8ceea1e8-42ce-469f-823a-ceffdbd6b112,8ceea1e8-42ce-469f-823a-ceffdbd6b112,0,1,6995ee71-5901-46d9-a5c1-b35d795bda20,6995ee71-5901-46d9-a5c1-b35d795bda20,0,1,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,68caf9e5-9a79-4b77-b0f4-ca9c0fe4fa16,0,1,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,75c4e24f-b8d4-4b29-a9ce-e1d141c60fae,0,1,e93a4293-0497-4f11-b8b9-40300104fb96,e93a4293-0497-4f11-b8b9-40300104fb96,0,1,93531e5d-5dfc-42e8-be52-2e83f37262b0,93531e5d-5dfc-42e8-be52-2e83f37262b0,0,1,deee8bde-381f-4094-8794-7a06248860dd,deee8bde-381f-4094-8794-7a06248860dd,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,2757ee75-4b36-4901-bff1-044708754edb,2757ee75-4b36-4901-bff1-044708754edb,0,1,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0e6bab27-bf94-4732-8549-dbd9b8a5f4e9,0,1,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,774c92d6-9b9b-422a-83d7-8d42ae2a9f60,0,1,71144539-6472-4727-8887-0139f6221370,71144539-6472-4727-8887-0139f6221370,0,1,bff07da4-ae19-48a9-806b-14b285d42485,bff07da4-ae19-48a9-806b-14b285d42485,0,1,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,659cd4f6-d18c-4d75-a7e6-7c124a63ab9a,0,1,b0ccc05d-8d39-4f57-8e87-6846014f92ea,b0ccc05d-8d39-4f57-8e87-6846014f92ea,0,1,aa368dd9-86e1-46f9-a296-591c3639734d,aa368dd9-86e1-46f9-a296-591c3639734d,0,1,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,64fbfed7-9dda-481b-a4f7-fe440f24ba7e,0,1,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,b2835a5b-5c91-448c-9eb1-1bb1c9a5e727,0,1,066f9ab6-ff76-4426-bddd-702e9b16aa5b,066f9ab6-ff76-4426-bddd-702e9b16aa5b,0,1,0e2c2490-50ee-4fed-9119-5dec8385f925,0e2c2490-50ee-4fed-9119-5dec8385f925,0,1,8d60a95c-4035-473f-b1b1-2d52afa2e2d6,8d60a95c-4035-473f-b1b1-2d52afa2e2d6,0,1,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,447fb310-0588-4e0d-8f6d-5fc1f3bb1180,0,1,8986c155-54be-4b1b-b31a-5c00b88bc40d,8986c155-54be-4b1b-b31a-5c00b88bc40d,0,1,d91441cf-d793-4dfa-9225-f0c16818edde,d91441cf-d793-4dfa-9225-f0c16818edde,0,1,42a39785-144c-4d2d-92c6-fd8b345f687b,42a39785-144c-4d2d-92c6-fd8b345f687b,0,1,f3bd841b-fb36-4462-9627-b51801e563cd,f3bd841b-fb36-4462-9627-b51801e563cd,0,1,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,a161dd07-4a6e-4d0f-b72c-702d0d3a83a3,0,1,a275802f-937a-49f4-92da-fcdd185a036d,a275802f-937a-49f4-92da-fcdd185a036d,0,1,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,ec6ed9cb-85a2-4303-9906-cfb4ce6500bf,0,1,f2dc9319-ba60-421a-8340-be3e3a291393,f2dc9319-ba60-421a-8340-be3e3a291393,0,1,bf4eb62a-bc74-4845-bad2-58a2a8302a65,bf4eb62a-bc74-4845-bad2-58a2a8302a65,0,1,2f90ffa6-3fdd-430d-9a20-f597cf4ef468,2f90ffa6-3fdd-430d-9a20-f597cf4ef468,0,1,b66eb190-1c16-4f20-a94f-954bcdf313b8,b66eb190-1c16-4f20-a94f-954bcdf313b8,0,1,c05f15b0-a659-4473-b6d0-acebc4a2da57,c05f15b0-a659-4473-b6d0-acebc4a2da57,0,1,bbdfeebd-cda0-4911-8f31-553d751340a7,bbdfeebd-cda0-4911-8f31-553d751340a7,0,1,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,af6af7ae-d68a-4e12-ba2c-a360ce2920a7,0,1,08dbba81-68fb-49ef-8aac-9631fcfa87c6,08dbba81-68fb-49ef-8aac-9631fcfa87c6,0,1,cb747d24-6d8a-4d97-8a13-305ee6f39f75,cb747d24-6d8a-4d97-8a13-305ee6f39f75,0,1,8170a27d-45e9-48b1-860b-c2d9cc5961cd,8170a27d-45e9-48b1-860b-c2d9cc5961cd,0,1,f85e8f91-5e29-490a-b3d7-f72f97593086,f85e8f91-5e29-490a-b3d7-f72f97593086,0,1,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,f1c08fed-f3db-4f72-8a8e-7c626b8cc130,0,1,00afd243-5575-4340-9217-40c8d61c1d54,00afd243-5575-4340-9217-40c8d61c1d54,0,1,38184767-167b-49b7-b995-4f13900b3822,38184767-167b-49b7-b995-4f13900b3822,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,f6939587-ff87-4eca-ae52-10e1bd2abfce,f6939587-ff87-4eca-ae52-10e1bd2abfce,0,1,3cb575a9-dc82-45e0-81f0-d651e12246da,3cb575a9-dc82-45e0-81f0-d651e12246da,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,b0d9086f-cef7-47a8-ad62-d85fea28ebda,b0d9086f-cef7-47a8-ad62-d85fea28ebda,0,1,3e127ace-1506-44ca-9df8-a7a30aa11c56,3e127ace-1506-44ca-9df8-a7a30aa11c56,0,1,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,3f3b592d-ca61-40c7-be1f-e5d3224a1eb3,0,1,2b3cab9a-fd05-42a8-811a-f443aee5e192,2b3cab9a-fd05-42a8-811a-f443aee5e192,0,1,9e9bb3df-4658-4278-8fe7-d4bfc46d2ce1,9e9bb3df-4658-4278-8fe7-d4bfc46d2ce1,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,093dfea8-18ea-457c-aa6f-9bea9bdba76c,093dfea8-18ea-457c-aa6f-9bea9bdba76c,0,1,6c58cc27-215e-4169-88ae-004ecc657d53,6c58cc27-215e-4169-88ae-004ecc657d53,0,1,9c267aa6-5f23-49f6-868a-3324ef2845ff,9c267aa6-5f23-49f6-868a-3324ef2845ff,0,1,495eeeee-d7bf-4063-99e2-86daa066451a,495eeeee-d7bf-4063-99e2-86daa066451a,0,1,b6184698-79e4-4c19-9440-092ccd9dabf8,b6184698-79e4-4c19-9440-092ccd9dabf8,0,1,7d01fc0c-378e-421d-ab70-6a418eed5941,7d01fc0c-378e-421d-ab70-6a418eed5941,0,1,6eeb4867-bf9d-48dc-b96b-934a0c293010,6eeb4867-bf9d-48dc-b96b-934a0c293010,0,1,e1803e54-ec5e-4a82-8097-5e2331820991,e1803e54-ec5e-4a82-8097-5e2331820991,0,1,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,4cbb0b91-dbdd-472f-93c5-061076b6a8d3,0,1,8506dbe9-7066-444b-83b6-fb2d71a336e7,8506dbe9-7066-444b-83b6-fb2d71a336e7,0,1,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,240b4df5-0d75-4e5a-9ae8-d0bc7cc51722,0,1,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,edc01b03-8b01-4551-939a-f7e257892040,edc01b03-8b01-4551-939a-f7e257892040,0,1,15d09274-9508-4f64-9ea3-678c5aa50f0f,15d09274-9508-4f64-9ea3-678c5aa50f0f,0,1,4debe032-12e4-4777-b2fc-70b150f2aad1,4debe032-12e4-4777-b2fc-70b150f2aad1,0,1,37558fa2-0833-46d6-9e4f-63d4a3136870,37558fa2-0833-46d6-9e4f-63d4a3136870,0,1,d92cb614-ed09-47db-b70b-d3e533c44c6a,d92cb614-ed09-47db-b70b-d3e533c44c6a,0,1,361271fa-2faa-497d-adfe-dea8b825405e,361271fa-2faa-497d-adfe-dea8b825405e,0,1,5dceae8b-1ff3-4760-a1c4-975a92be1023,5dceae8b-1ff3-4760-a1c4-975a92be1023,0,1,e660c8bf-af5f-4525-a56e-68925d2b96fa,e660c8bf-af5f-4525-a56e-68925d2b96fa,0,1,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,b18bdc5f-a2b6-4b15-81c3-37b27a5a3176,0,1,528d96cc-8838-49ea-8d76-ea56747882e0,528d96cc-8838-49ea-8d76-ea56747882e0,0,1,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,c996916d-7f1c-4fbf-939f-3e1bafe81f7d,0,1,086d69d6-e2fa-45cb-84b6-f8f3e2919160,086d69d6-e2fa-45cb-84b6-f8f3e2919160,0,1,4678c704-933a-45ef-9d41-89b8f39016bb,4678c704-933a-45ef-9d41-89b8f39016bb,0,1,3e9d6ca0-62e0-46b0-b3e4-c625a9792b47,3e9d6ca0-62e0-46b0-b3e4-c625a9792b47,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,6df2bb92-558c-4453-9de4-e4176e8f93dc,6df2bb92-558c-4453-9de4-e4176e8f93dc,0,1,cbeaf6c6-7cfb-4b63-8c4a-9db1fa4aeb27,cbeaf6c6-7cfb-4b63-8c4a-9db1fa4aeb27,0,1,f4e78a82-984e-408e-9989-33ea48cbd199,f4e78a82-984e-408e-9989-33ea48cbd199,0,1,25e489ed-8879-42aa-ada1-3257d811c2e2,25e489ed-8879-42aa-ada1-3257d811c2e2,0,1,899f7c74-62c8-4378-a45d-f2967d26edf3,899f7c74-62c8-4378-a45d-f2967d26edf3,0,1,1a3ed69b-fc1a-4151-90e1-460a5b6bfa15,1a3ed69b-fc1a-4151-90e1-460a5b6bfa15,0,1,fd18fb60-8c1f-4c72-a07a-5d0e1f3da062,fd18fb60-8c1f-4c72-a07a-5d0e1f3da062,0,1,8ed88369-1057-476c-bb10-5c722370a31a,8ed88369-1057-476c-bb10-5c722370a31a,0,1,48aaf6fa-1f11-47a7-82fa-7e2a9e944414,48aaf6fa-1f11-47a7-82fa-7e2a9e944414,0,1,3d95b8fa-ebe7-46f7-8ec6-69195c91cc5b,3d95b8fa-ebe7-46f7-8ec6-69195c91cc5b,0,1,60bec79f-4965-451e-8e49-117e81d80527,60bec79f-4965-451e-8e49-117e81d80527,0,1,4b71f609-9453-43d0-a3ee-532ea472a84e,4b71f609-9453-43d0-a3ee-532ea472a84e,0,1,703bfeb7-d98d-4baf-a5e1-4a5cb7817ccc,703bfeb7-d98d-4baf-a5e1-4a5cb7817ccc,0,1,a985b5c7-b5b4-4476-8b76-6db1127145f2,a985b5c7-b5b4-4476-8b76-6db1127145f2,0,1,2de98078-17b2-4fc0-87f8-ad9a52f03807,2de98078-17b2-4fc0-87f8-ad9a52f03807,0,1,3959030a-b943-4c9b-8463-ab46b5f5355d,3959030a-b943-4c9b-8463-ab46b5f5355d,0,1,2893783c-237d-4746-b58b-0d3f10374bdc,2893783c-237d-4746-b58b-0d3f10374bdc,0,1,e8d3756d-32b5-4919-8899-bf6665a7945d,e8d3756d-32b5-4919-8899-bf6665a7945d,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,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,2bd80198-4739-4e8f-9af1-40addc91a05b,2bd80198-4739-4e8f-9af1-40addc91a05b,0,1,c0c6ef45-2730-4762-a34e-e7cc5ef6c8f2,c0c6ef45-2730-4762-a34e-e7cc5ef6c8f2,0,1,33c66a15-e48e-406a-a77c-02af72ae96d5,33c66a15-e48e-406a-a77c-02af72ae96d5,0,1,459ed297-0c0d-4bdb-90a3-da387868f040,459ed297-0c0d-4bdb-90a3-da387868f040,0,1,96eb0f21-190c-414b-bb12-f50ae1bca205,96eb0f21-190c-414b-bb12-f50ae1bca205,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,8d2abcc1-53cf-408a-a5a9-7aa06cc04e63,8d2abcc1-53cf-408a-a5a9-7aa06cc04e63,0,1,274357df-cb5c-407d-ae72-58046c310db2,274357df-cb5c-407d-ae72-58046c310db2,0,1,033d9a8f-73d3-4be3-b0e9-7c9e9cb12161,033d9a8f-73d3-4be3-b0e9-7c9e9cb12161,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,dba0d5db-9499-42c0-b4e0-2dd9f7ec462b,dba0d5db-9499-42c0-b4e0-2dd9f7ec462b,0,1,8ecfdcbc-099e-4206-b3d8-541517117ac5,8ecfdcbc-099e-4206-b3d8-541517117ac5,0,1,9f845a0d-b0cb-40c3-9e70-04f4b473990c,9f845a0d-b0cb-40c3-9e70-04f4b473990c,0,1,30c0ab17-d8c7-46c3-82e2-b67572db0a83,30c0ab17-d8c7-46c3-82e2-b67572db0a83,0,1,e82dbb36-a077-47d9-a904-f01ce82b4c19,e82dbb36-a077-47d9-a904-f01ce82b4c19,0,1,f4afbbd8-c503-4715-b0f2-476e0dcbf14c,f4afbbd8-c503-4715-b0f2-476e0dcbf14c,0,1,65625b4e-9ff9-4e15-b3f1-cc0003df25ea,65625b4e-9ff9-4e15-b3f1-cc0003df25ea,0,1,5feb2e44-9d15-4bf8-9f7d-efea6b13e402,5feb2e44-9d15-4bf8-9f7d-efea6b13e402,0,1,619f64ea-78da-448b-86c7-fbb561500211,619f64ea-78da-448b-86c7-fbb561500211,0,1,820d02c2-2cdd-4b09-ab65-98048daef9a0,820d02c2-2cdd-4b09-ab65-98048daef9a0,0,1,b0d36a9d-9ef9-4eff-9360-aeca38d7e967,b0d36a9d-9ef9-4eff-9360-aeca38d7e967,0,1,7e283796-d8a9-442b-b646-92e85beec1e3,7e283796-d8a9-442b-b646-92e85beec1e3,0,1,5c79771f-f98c-453d-9672-8aff65978e20,5c79771f-f98c-453d-9672-8aff65978e20,0,1,51656bbb-096b-4be7-95fb-801e84651d32,51656bbb-096b-4be7-95fb-801e84651d32,0,1,f9b36fd7-095a-48ef-80a6-87415eac7225,f9b36fd7-095a-48ef-80a6-87415eac7225,0,1,1dbecc5f-fe9c-4d8b-a96b-c4c49c06d088,1dbecc5f-fe9c-4d8b-a96b-c4c49c06d088,0,1,97414063-7575-4bb2-9246-a5565fccc1e1,97414063-7575-4bb2-9246-a5565fccc1e1,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,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,c66d0377-45bb-4ef0-bf9b-b44a9c510d38,0,1,420748d8-4042-4e1e-aca1-ac0190cdf54e,420748d8-4042-4e1e-aca1-ac0190cdf54e,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,d95dd1f5-ef84-4bcc-b017-65e390d48873,d95dd1f5-ef84-4bcc-b017-65e390d48873,0,1,e9c632b0-7977-4e44-ac56-882617ad7cdc,e9c632b0-7977-4e44-ac56-882617ad7cdc,0,1,6fbf63b7-1692-495e-a8ec-bdda182997a3,6fbf63b7-1692-495e-a8ec-bdda182997a3,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,760a2530-db14-4505-8e81-91a546a54f71,760a2530-db14-4505-8e81-91a546a54f71,0,1,6dea9276-3c42-4312-bf58-c390f1ba17cf,6dea9276-3c42-4312-bf58-c390f1ba17cf,0,1,9c052faf-1d7c-452d-ab81-7fd8f283af66,9c052faf-1d7c-452d-ab81-7fd8f283af66,0,1,5197d1d9-e5f7-4c2d-a72f-8e321a5bde04,5197d1d9-e5f7-4c2d-a72f-8e321a5bde04,0,1,c4bc2765-4007-4f48-b8f0-f5911c9a62b6,c4bc2765-4007-4f48-b8f0-f5911c9a62b6,0,1,5cd8157f-7d91-48b7-afd6-11942da3ba24,5cd8157f-7d91-48b7-afd6-11942da3ba24,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,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,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,e731dab7-df9e-48ae-8542-4c0c30666ae9,e731dab7-df9e-48ae-8542-4c0c30666ae9,0,1,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0841ebfc-12e6-4b3e-a60f-861b15e1b63c,0,1,bde05768-2dd6-4800-985d-27075f610cca,bde05768-2dd6-4800-985d-27075f610cca,0,1,e352fc19-96be-4410-a516-bc58cc234422,e352fc19-96be-4410-a516-bc58cc234422,0,1,9b742da4-1696-4c06-9dfa-dd85c9286c74,9b742da4-1696-4c06-9dfa-dd85c9286c74,0,1,64344383-5823-42aa-8004-f0ce4bfee198,64344383-5823-42aa-8004-f0ce4bfee198,0,1,94eaae81-638b-4ac2-aea3-174e1c9c2877,94eaae81-638b-4ac2-aea3-174e1c9c2877,0,1,59edae58-edef-4451-97e1-9fbb46a3fd9c,59edae58-edef-4451-97e1-9fbb46a3fd9c,0,1,db1062bc-4164-4095-9640-9804c0ebcd0b,db1062bc-4164-4095-9640-9804c0ebcd0b,0,1,ea7c61ff-745c-4908-9a94-bba022d12de4,ea7c61ff-745c-4908-9a94-bba022d12de4,0,1,e0519f0c-9c99-4f5c-a3a9-27adce45737d,e0519f0c-9c99-4f5c-a3a9-27adce45737d,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,ee657795-8850-4735-a655-80d0d451c3ff,ee657795-8850-4735-a655-80d0d451c3ff,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,5a7a98c9-af4d-4961-ae3c-4c1f3accce8d,5a7a98c9-af4d-4961-ae3c-4c1f3accce8d,0,1,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,3bc2ca38-4a10-4ebd-a5dc-3418db494f0c,0,1,e1314cd1-e662-4c29-ad51-492cb0029883,e1314cd1-e662-4c29-ad51-492cb0029883,0,1,879844f0-30b4-47f5-8d2e-5fea29910368,879844f0-30b4-47f5-8d2e-5fea29910368,0,1,9bc09758-a7ce-44e0-baa3-a3e909869d9b,9bc09758-a7ce-44e0-baa3-a3e909869d9b,0,1,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,554320a0-55dc-4289-bb08-63d405cb4ca5,554320a0-55dc-4289-bb08-63d405cb4ca5,0,1,0874a3c0-0d16-4172-b467-f0666d5fcaee,0874a3c0-0d16-4172-b467-f0666d5fcaee,0,1,cc380a19-ab29-4f20-93ad-9a58cd4de56e,cc380a19-ab29-4f20-93ad-9a58cd4de56e,0,1,6a5f7521-270e-476e-88ec-a8cf79ea61a6,6a5f7521-270e-476e-88ec-a8cf79ea61a6,0,1,e54a8786-86a4-48e3-a210-aaae4e5fce8c,e54a8786-86a4-48e3-a210-aaae4e5fce8c,0,1,86c86ea2-d14e-4443-b36c-c1c17c4f768a,86c86ea2-d14e-4443-b36c-c1c17c4f768a,0,1,14512818-58b0-44cc-b00d-d37913c57aad,14512818-58b0-44cc-b00d-d37913c57aad,0,1,57964dd6-4b0b-4590-bc44-de744cc423af,57964dd6-4b0b-4590-bc44-de744cc423af,0,1,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,364cbfe2-bc44-4387-aa7e-6b4aa086c9e9,0,1,46e0522b-b88b-43b2-9067-a5359e90994b,46e0522b-b88b-43b2-9067-a5359e90994b,0,1,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,727c7c01-83e6-4d59-afa4-ee36f1cbacf2,0,1,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,b143bc6d-ead6-41a2-9a15-1a44488c1ce4,0,1,72d41d01-9c9d-4fbe-8a39-932d82d171ef,72d41d01-9c9d-4fbe-8a39-932d82d171ef,0,1,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,b1e7d3c3-9fc1-4364-a8c3-b076080c7472,0,1,697d5715-dd04-40be-9b28-539734725158,697d5715-dd04-40be-9b28-539734725158,0,1,d487e66e-a7b0-4110-903e-652fe0e6106c,d487e66e-a7b0-4110-903e-652fe0e6106c,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,0bddbceb-5739-46f8-88b6-06bcead350d9,0bddbceb-5739-46f8-88b6-06bcead350d9,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,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,25ca2e70-0293-4bd4-9e08-bbd39120b3cf,25ca2e70-0293-4bd4-9e08-bbd39120b3cf,0,1,68f19104-5fa3-4f28-a84b-bf68c3bed49b,68f19104-5fa3-4f28-a84b-bf68c3bed49b,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,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,19056365-9ff1-4733-876e-a7ebdbbe0557,19056365-9ff1-4733-876e-a7ebdbbe0557,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,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,8677bd53-5569-4d44-b7ce-d1b3fe12c78d,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,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,8ca0258c-96d8-4a12-b94f-db968195ee0a,8ca0258c-96d8-4a12-b94f-db968195ee0a,0,1,245c07a9-98b0-452b-b899-dc8751ab7ce0,245c07a9-98b0-452b-b899-dc8751ab7ce0,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,75ffd0b9-79be-4600-a310-591fddb6d63e,75ffd0b9-79be-4600-a310-591fddb6d63e,0,1,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,4883cb3d-4ab3-4e0e-bddb-ae8852547a3c,0,1,b94523c0-33fe-452a-ada5-071cd78fc47b,b94523c0-33fe-452a-ada5-071cd78fc47b,0,1,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,b4b8dd52-0cc4-4c69-9ec7-f06f2d79586b,0,1,4e550d28-7174-412b-bfed-559a3dc753f6,4e550d28-7174-412b-bfed-559a3dc753f6,0,1,47da49ee-b243-4e78-9c8f-bb26c60e6136,47da49ee-b243-4e78-9c8f-bb26c60e6136,0,1,39bee714-cacd-4d48-97a5-c838660e049a,39bee714-cacd-4d48-97a5-c838660e049a,0,1,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,ea97b67e-1182-49c3-b95a-8fcce4cd3d09,0,1,4dfc428e-c2d7-40b8-925f-d7c186f52476,4dfc428e-c2d7-40b8-925f-d7c186f52476,0,1,80ae578c-f6c7-4589-98c5-5691714baa29,80ae578c-f6c7-4589-98c5-5691714baa29,0,1,a44cc726-48b9-4193-8991-c9e0777ed7de,a44cc726-48b9-4193-8991-c9e0777ed7de,0,1,52c38669-4735-4f5b-8e0e-17d7e15ea94a,52c38669-4735-4f5b-8e0e-17d7e15ea94a,0,1,fef727fa-f63b-4467-9367-73a2425b19e3,fef727fa-f63b-4467-9367-73a2425b19e3,0,1,bfa90848-930f-433d-8f6f-c11ac2c5eba2,bfa90848-930f-433d-8f6f-c11ac2c5eba2,0,1,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,2baf6d7a-12ed-4f22-ad96-92bb31b747ff,0,1,75666bb9-f6d3-4dd6-8220-427a81f23fc9,75666bb9-f6d3-4dd6-8220-427a81f23fc9,0,1,becf53b6-3fbc-4c70-822f-4a70b0434353,becf53b6-3fbc-4c70-822f-4a70b0434353,0,1,9376b18c-cffd-488b-8a1e-cca598f018bc,9376b18c-cffd-488b-8a1e-cca598f018bc,0,1,d78b5faf-b34b-4fa2-89a5-f4bc45203528,d78b5faf-b34b-4fa2-89a5-f4bc45203528,0,1,b4e10835-31e8-4f16-a5eb-0b2ac687fa65,b4e10835-31e8-4f16-a5eb-0b2ac687fa65,0,1,942a962a-bccb-42c0-b279-077a9b33c70a,942a962a-bccb-42c0-b279-077a9b33c70a,0,1,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,f8dc2485-685b-4e41-834a-a2cbbbe4d53b,0,1,652ee894-047b-4a5a-a500-2d61b4c4a473,652ee894-047b-4a5a-a500-2d61b4c4a473,0,1,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,8a95d199-9bd1-4cbb-9d1a-941e80fa2105,0,1,c03f9972-5a1f-449b-b170-5a958c2b5846,c03f9972-5a1f-449b-b170-5a958c2b5846,0,1,33f8cd94-71e7-4703-92c3-22690fbd871a,33f8cd94-71e7-4703-92c3-22690fbd871a,0,1,b6e5de4d-0156-4342-b646-6e6920a4bd3a,b6e5de4d-0156-4342-b646-6e6920a4bd3a,0,1,09858042-6284-4499-8055-c1b5b783ce5f,09858042-6284-4499-8055-c1b5b783ce5f,0,1,1e63c656-a0e7-4b33-8bac-2a196e028ffa,1e63c656-a0e7-4b33-8bac-2a196e028ffa,0,1,085cbea9-1df1-4ee9-afb7-da2bf313697e,085cbea9-1df1-4ee9-afb7-da2bf313697e,0,1,b3152292-5546-4896-ad24-cb41057698d8,b3152292-5546-4896-ad24-cb41057698d8,0,1,67171b08-7dd7-451d-a22d-01858ce4ab2b,67171b08-7dd7-451d-a22d-01858ce4ab2b,0,1,68299930-fc24-4731-b1bb-59aecdbacf5e,68299930-fc24-4731-b1bb-59aecdbacf5e,0,1,bb722783-1e0b-4543-b110-fdf69b4fe20e,bb722783-1e0b-4543-b110-fdf69b4fe20e,0,1,38fc1e6e-7cd3-437b-b429-6655be34cd01,38fc1e6e-7cd3-437b-b429-6655be34cd01,0,1,c38d8135-e11f-4860-b370-84ff279b7fbd,c38d8135-e11f-4860-b370-84ff279b7fbd,0,1,ee0798f5-47a8-4118-a25c-cfd3473007c1,ee0798f5-47a8-4118-a25c-cfd3473007c1,0,1,29f2094a-d0d1-425c-8161-45a9ba186e19,29f2094a-d0d1-425c-8161-45a9ba186e19,0,1,28c3f8f5-78f8-4d09-9f09-1407825b13e3,28c3f8f5-78f8-4d09-9f09-1407825b13e3,0,1,69149ce1-d3f8-4e12-be8f-b328ade60882,69149ce1-d3f8-4e12-be8f-b328ade60882,0,1,ff592ecb-eb08-4554-87bf-1d2935b21d3c,ff592ecb-eb08-4554-87bf-1d2935b21d3c,0,1,e50cb13a-151b-45d2-a7b7-d23440ddfa24,e50cb13a-151b-45d2-a7b7-d23440ddfa24,0,1,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0b8bfb71-d430-4bdf-8391-a534b3a15fc3,0,1,0d8770aa-fa6e-471c-92c8-b96576927ef0,0d8770aa-fa6e-471c-92c8-b96576927ef0,0,1,1e3c444d-6f73-4eb0-a12d-7106daf36b14,1e3c444d-6f73-4eb0-a12d-7106daf36b14,0,1,b8a32c33-4e15-4c21-baab-64a86d44321b,b8a32c33-4e15-4c21-baab-64a86d44321b,0,1,e7d51ada-f286-4519-bfae-ece95dd4d7b0,e7d51ada-f286-4519-bfae-ece95dd4d7b0,0,1,d7dd9a03-6818-4987-8f39-58e1c906569f,d7dd9a03-6818-4987-8f39-58e1c906569f,0,1,fce028b8-b530-49f0-b6ad-a28d03e19b0f,fce028b8-b530-49f0-b6ad-a28d03e19b0f,0,1,fa7309b1-916b-454b-8357-b71aca1e2fb7,fa7309b1-916b-454b-8357-b71aca1e2fb7,0,1,d975aef4-8da8-4486-baeb-a99c48cff0ec,d975aef4-8da8-4486-baeb-a99c48cff0ec,0,1,9da27139-0bed-47b0-aef6-246929968502,9da27139-0bed-47b0-aef6-246929968502,0,1,68e82adf-bc03-4f23-9ec4-749ed42241da,68e82adf-bc03-4f23-9ec4-749ed42241da,0,1,41f87891-ddd5-4e0f-a4f2-8039fb71981b,41f87891-ddd5-4e0f-a4f2-8039fb71981b,0,1,25896075-2484-4879-8310-7f5680d80b48,25896075-2484-4879-8310-7f5680d80b48,0,1,893b2dd9-a939-4799-9b78-50d788a5f3ba,893b2dd9-a939-4799-9b78-50d788a5f3ba,0,1,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,68229ecd-7ecc-4194-a3e5-f8df39b55d6a,0,1,e4842271-4fc0-4e15-afef-876f05af78c0,e4842271-4fc0-4e15-afef-876f05af78c0,0,1,135d57fe-d420-4bb0-9120-e43fd9b55c16,135d57fe-d420-4bb0-9120-e43fd9b55c16,0,1,8e99ed5a-d64a-4d4d-a422-3f1055be6ebd,8e99ed5a-d64a-4d4d-a422-3f1055be6ebd,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,7eef7281-c5c6-48d5-a636-c437b75611d6,7eef7281-c5c6-48d5-a636-c437b75611d6,0,1,3494fa21-02e0-46bb-b810-534e6f1b4b20,3494fa21-02e0-46bb-b810-534e6f1b4b20,0,1,c6c2fa57-a3c2-4f2a-bc02-4436f570cc78,c6c2fa57-a3c2-4f2a-bc02-4436f570cc78,0,1,d73cc867-e293-4fff-9898-dd50e27e26f4,d73cc867-e293-4fff-9898-dd50e27e26f4,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,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,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0b3088c9-7fb9-4979-acce-16d7ae7ba6b7,0,1,fba74e94-e7e1-46d9-b72b-269cb1cc8a71,fba74e94-e7e1-46d9-b72b-269cb1cc8a71,0,1,a1875d63-4303-46f1-bdea-fc529b5891f3,a1875d63-4303-46f1-bdea-fc529b5891f3,0,1,133f181a-fade-4182-826d-904fac780326,133f181a-fade-4182-826d-904fac780326,0,1,a687748a-0b2a-4277-b935-07616d28430d,a687748a-0b2a-4277-b935-07616d28430d,0,1,33f8892d-8d7f-4b00-af4f-af37193fa395,33f8892d-8d7f-4b00-af4f-af37193fa395,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,60208d56-f778-4ff6-abdd-ea6622504ace,60208d56-f778-4ff6-abdd-ea6622504ace,0,1,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,ab6fdd75-2ea6-4408-8c03-0cfab775a7a0,0,1,1a3097ae-e51a-4335-93fc-47fcbbe8e8b7,1a3097ae-e51a-4335-93fc-47fcbbe8e8b7,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,5a979568-6bc7-4f75-b585-ebdcaafc119a,5a979568-6bc7-4f75-b585-ebdcaafc119a,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,97ea39b4-9a69-4598-b998-044fba1f4f81,97ea39b4-9a69-4598-b998-044fba1f4f81,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,65a331c0-7501-49f6-8027-35b703d11834,65a331c0-7501-49f6-8027-35b703d11834,0,1,c67fab0a-704f-43ae-bd03-4b5b1a880b24,c67fab0a-704f-43ae-bd03-4b5b1a880b24,0,1,bfad444f-ee47-4131-a371-8089b8a09f4f,bfad444f-ee47-4131-a371-8089b8a09f4f,0,1,c1703a14-61a0-4461-8ad8-7173e2c431fe,c1703a14-61a0-4461-8ad8-7173e2c431fe,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,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,0d124daf-dc52-4391-a2d9-3c43a45c422c,0d124daf-dc52-4391-a2d9-3c43a45c422c,0,1,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,9c443dd3-4acb-4c5a-9c4b-af8b0c87e861,0,1,98153b59-8cc6-4dc7-b945-99c1146d07da,98153b59-8cc6-4dc7-b945-99c1146d07da,0,1,3e2828b4-2b55-471e-ac69-55119c2480f8,3e2828b4-2b55-471e-ac69-55119c2480f8,0,1,f8139d21-0380-43b5-8025-c986f8598c74,f8139d21-0380-43b5-8025-c986f8598c74,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,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,f01fedee-d4c1-498d-9c9b-78b2e7e99e65,f01fedee-d4c1-498d-9c9b-78b2e7e99e65,0,1,a890be6b-f050-4ea4-a388-570948ffd22b,a890be6b-f050-4ea4-a388-570948ffd22b,0,1,7c34aa14-1300-4d03-8a1f-56e801748db4,7c34aa14-1300-4d03-8a1f-56e801748db4,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,9b9cd161-5bee-4433-a0ec-b67deb099b5e,9b9cd161-5bee-4433-a0ec-b67deb099b5e,0,1,d5cf2a3a-3176-4971-b67b-45e090e9b8df,d5cf2a3a-3176-4971-b67b-45e090e9b8df,0,1,44b28019-01c0-468d-9b60-e050ff8b71ac,44b28019-01c0-468d-9b60-e050ff8b71ac,0,1,69f6173c-a570-41ff-b07f-5b85f7187515,69f6173c-a570-41ff-b07f-5b85f7187515,0,1,ca179cb5-65e1-4a55-bf12-096b926accb0,ca179cb5-65e1-4a55-bf12-096b926accb0,0,1,472ce1c2-9e83-418b-b1ec-e15e126bc919,472ce1c2-9e83-418b-b1ec-e15e126bc919,0,1,07bb26ac-bd97-465f-a192-db7fedbb579b,07bb26ac-bd97-465f-a192-db7fedbb579b,0,1,5462f1ab-2095-4515-875e-471900f05db9,5462f1ab-2095-4515-875e-471900f05db9,0,1,84e63b9b-0293-49bc-ba7f-e803bc44fc42,84e63b9b-0293-49bc-ba7f-e803bc44fc42,0,1,4f2d0398-49f4-410c-a451-436cbf96a262,4f2d0398-49f4-410c-a451-436cbf96a262,0,1,aace391f-e561-4848-8b28-ef44f2d262bb,aace391f-e561-4848-8b28-ef44f2d262bb,0,1,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,5ae2a1de-6380-45cc-9c8f-5612cd5ba627,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,b2c8bd74-21c9-4495-93e2-ca5355698350,b2c8bd74-21c9-4495-93e2-ca5355698350,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,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,59123b12-6052-4480-9c86-f4de1b5cdc04,59123b12-6052-4480-9c86-f4de1b5cdc04,0,1,bed22a72-1a5e-46e5-ad71-f94e9508e272,bed22a72-1a5e-46e5-ad71-f94e9508e272,0,1,9cf45640-aeb3-45aa-97aa-922a83e61510,9cf45640-aeb3-45aa-97aa-922a83e61510,0,1,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,cc9679a5-1ed2-4290-8c9b-8a2f6614d053,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,9d5c615c-49af-45e9-aa3d-07747466a51b,9d5c615c-49af-45e9-aa3d-07747466a51b,0,1,f2e2df50-52fc-4e95-909b-80fc91a68f62,f2e2df50-52fc-4e95-909b-80fc91a68f62,0,1,36ec0fb5-a5f3-4685-9696-c44a393998f6,36ec0fb5-a5f3-4685-9696-c44a393998f6,0,1,1b887b59-9a72-4aa3-a985-7a8d6a427b95,1b887b59-9a72-4aa3-a985-7a8d6a427b95,0,1,1fca06d9-b015-4fc8-abdd-3e2397e0c307,1fca06d9-b015-4fc8-abdd-3e2397e0c307,0,1,05b6a743-5831-4c77-894c-b19005b0e141,05b6a743-5831-4c77-894c-b19005b0e141,0,1,295a5554-f6cc-437b-9e89-c6f653a8b858,295a5554-f6cc-437b-9e89-c6f653a8b858,0,1,573f1753-9194-4aaf-9217-5cac70ff108f,573f1753-9194-4aaf-9217-5cac70ff108f,0,1,1f7ec25a-05b1-468b-8857-2bb1aed3678a,1f7ec25a-05b1-468b-8857-2bb1aed3678a,0,1,4a1e6d25-89e7-468a-aef1-6ded0154dca2,4a1e6d25-89e7-468a-aef1-6ded0154dca2,0,1,905624ea-b253-413f-b651-1eb2c5a7d52a,905624ea-b253-413f-b651-1eb2c5a7d52a,0,1,b639ed30-3e37-4c65-a39f-00fe735950eb,b639ed30-3e37-4c65-a39f-00fe735950eb,0,1,078d3269-80fd-4406-9972-ab2a5fd83434,078d3269-80fd-4406-9972-ab2a5fd83434,0,1,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,76ef7f67-0ce8-4ee2-9134-e793c41b8de3,0,1,f137eb0f-bde7-412d-9229-d7a4f9456e6c,f137eb0f-bde7-412d-9229-d7a4f9456e6c,0,1,90880131-8065-4a7e-a0fa-ecff9e27363c,90880131-8065-4a7e-a0fa-ecff9e27363c,0,1,57e9fcea-342c-4089-bd10-befb3faf0dbd,57e9fcea-342c-4089-bd10-befb3faf0dbd,0,1,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,7b01236c-5ab7-43fa-aa0e-1ae55c8a4efe,0,1,f811b0b7-41b5-4591-9910-780f08780236,f811b0b7-41b5-4591-9910-780f08780236,0,1,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,6b10167a-f5c3-4d7b-b444-d5ff6e705ea4,0,1,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,f85ff11a-163e-4d18-98bc-b0ebe83d34e4,0,1,51a0444d-13c8-45a8-97f6-f3f976964bf8,51a0444d-13c8-45a8-97f6-f3f976964bf8,0,1,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,7e089889-cf8d-4f5f-879c-0a1bcca1c19b,0,1,7e2ba519-fbb9-4163-b20b-b99898e6ac57,7e2ba519-fbb9-4163-b20b-b99898e6ac57,0,1,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,38eb3fd1-57be-4dc2-bed4-d8107086bf2a,0,1,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,6b6d541b-5dc1-4150-b8d1-5844a694ac6a,0,1,0a5e38b7-2794-419f-8c29-076490c7b5ce,0a5e38b7-2794-419f-8c29-076490c7b5ce,0,1,e7ed2b66-e360-466a-8b5e-8ba0d8e36aba,e7ed2b66-e360-466a-8b5e-8ba0d8e36aba,0,1,eab50f82-4612-47fd-a5c2-9678016a1937,eab50f82-4612-47fd-a5c2-9678016a1937,0,1,2609ba3c-e4de-45b3-86e0-93db39a21eee,2609ba3c-e4de-45b3-86e0-93db39a21eee,0,1,bf1e9682-3cc6-44b6-b9e4-a3b37facb0e7,bf1e9682-3cc6-44b6-b9e4-a3b37facb0e7,0,1,9a70c38e-6770-4edf-9566-ce44b537a532,9a70c38e-6770-4edf-9566-ce44b537a532,0,1,417063e2-7d8c-4837-b68d-df5724048e70,417063e2-7d8c-4837-b68d-df5724048e70,0,1,31628f30-2ac2-446e-9b32-c544019c0b40,31628f30-2ac2-446e-9b32-c544019c0b40,0,1,cd9bafa1-23fe-4094-9137-b36df6e8e8f5,cd9bafa1-23fe-4094-9137-b36df6e8e8f5,0,1,c1b4726f-7d9f-43a2-817a-5b7ce7a4fb46,c1b4726f-7d9f-43a2-817a-5b7ce7a4fb46,0,1,e24adcf3-71b1-4081-8dab-3aaa628a9331,e24adcf3-71b1-4081-8dab-3aaa628a9331,0,1,00fc7fe1-66c2-4d3d-bc17-b3ba5211a3ab,00fc7fe1-66c2-4d3d-bc17-b3ba5211a3ab,0,1,64d4b8ea-5906-4f0b-8328-9139a09202c0,64d4b8ea-5906-4f0b-8328-9139a09202c0,0,1,e8301322-f929-4ff5-9633-18e8a08db6fd,e8301322-f929-4ff5-9633-18e8a08db6fd,0,1,0af47dcf-7220-4b15-bb14-3324f65b8af6,0af47dcf-7220-4b15-bb14-3324f65b8af6,0,1,a9559418-2410-4e20-8bf1-74983406d2f3,a9559418-2410-4e20-8bf1-74983406d2f3,0,1,05069fb4-0bbb-4d8e-93f3-e5be47a4d777,05069fb4-0bbb-4d8e-93f3-e5be47a4d777,0,1,6e4f3314-4f8a-4413-b946-805cc375ffe6,6e4f3314-4f8a-4413-b946-805cc375ffe6,0,1,7adec5ff-8172-4a62-9e5c-8ef77df16d1b,7adec5ff-8172-4a62-9e5c-8ef77df16d1b,0,1,57fa19bb-3f68-4243-b216-a8e13a022b48,57fa19bb-3f68-4243-b216-a8e13a022b48,0,1,4ec82ae6-fbd6-4788-bcf0-2c21ce54a03d,4ec82ae6-fbd6-4788-bcf0-2c21ce54a03d,0,1,578a92d3-b380-4a8b-af9d-2f608dbae5d0,578a92d3-b380-4a8b-af9d-2f608dbae5d0,0,1,ca8450e9-38c1-4db7-8832-2c6fe2c4dc0b,ca8450e9-38c1-4db7-8832-2c6fe2c4dc0b,0,1,138f0718-4566-41d7-86f7-50f0c5e6c90e,138f0718-4566-41d7-86f7-50f0c5e6c90e,0,1,3e12296d-7cd7-4dbc-bdf3-3d40f945b483,3e12296d-7cd7-4dbc-bdf3-3d40f945b483,0,1,baa2f562-a08c-41d9-b1fc-881aafeef2fa,baa2f562-a08c-41d9-b1fc-881aafeef2fa,0,1,020882c2-dbc4-4b40-8556-6a11d75b00fe,020882c2-dbc4-4b40-8556-6a11d75b00fe,0,1,f54dd38b-e222-4520-bdf7-8d6c64c0244c,f54dd38b-e222-4520-bdf7-8d6c64c0244c,0,1,58aabfdb-61c2-42ad-aed1-0e88b5414f0b,58aabfdb-61c2-42ad-aed1-0e88b5414f0b,0,1,52507c4e-9378-4f00-a6b8-dd7e60d2afa5,52507c4e-9378-4f00-a6b8-dd7e60d2afa5,0,1,bc22ce64-a79c-4118-8ede-a69d66f62b0a,bc22ce64-a79c-4118-8ede-a69d66f62b0a,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,230b80c7-620a-40d3-b473-b6289cfce8c0,230b80c7-620a-40d3-b473-b6289cfce8c0,0,1,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,5efd2e2e-9b83-4c0d-9bbd-4075b5127d92,0,1,4db9f94e-ebdd-4719-884d-d3885020bfd2,4db9f94e-ebdd-4719-884d-d3885020bfd2,0,1,3e4361e9-2baf-407b-9320-b2a265b44e46,3e4361e9-2baf-407b-9320-b2a265b44e46,0,1,e035494e-71ed-44f1-b04c-f2f47bcfa0fe,e035494e-71ed-44f1-b04c-f2f47bcfa0fe,0,1,00418e6c-77b2-4753-b9ff-3a8013436f8a,00418e6c-77b2-4753-b9ff-3a8013436f8a,0,1,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,8deaa3d0-b36b-4f20-a9a8-11d829f5ef9d,0,1,a3c9a7eb-2104-4402-954c-3e12de4a7de3,a3c9a7eb-2104-4402-954c-3e12de4a7de3,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,b5f518af-59d0-4f91-8759-5f32a5055d07,b5f518af-59d0-4f91-8759-5f32a5055d07,0,1,6c34eef9-9405-4de0-9177-1bae85251ae4,6c34eef9-9405-4de0-9177-1bae85251ae4,0,1,d295f084-1c23-4c94-90eb-85928648224e,d295f084-1c23-4c94-90eb-85928648224e,0,1,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,bbbc2d1f-2f78-4b7e-b5fb-ca7c74051221,0,1,e09534e3-ac6e-42a6-86e8-564acb20089a,e09534e3-ac6e-42a6-86e8-564acb20089a,0,1,5e380276-2a08-435c-927e-a7f56f5a4dbc,5e380276-2a08-435c-927e-a7f56f5a4dbc,0,1,5d0811eb-bcd5-42ce-b6e8-8341f3a04225,5d0811eb-bcd5-42ce-b6e8-8341f3a04225,0,1,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,8d1c01a9-9806-4e5d-bafb-ce6af11d5650,0,1,9c5cd78a-990e-4134-8ce9-e7f191ee6726,9c5cd78a-990e-4134-8ce9-e7f191ee6726,0,1,7badb97b-c359-42af-9066-6bbfc0650cf9,7badb97b-c359-42af-9066-6bbfc0650cf9,0,1,63223883-06cf-4d01-be95-5e410cc58a22,63223883-06cf-4d01-be95-5e410cc58a22,0,1,1929139f-dabb-4c40-9423-158093360889,1929139f-dabb-4c40-9423-158093360889,0,1,dad92df4-685b-4260-b35f-4d031262dfea,dad92df4-685b-4260-b35f-4d031262dfea,0,1,4399c19a-ddba-42e9-88b4-c5c28abad237,4399c19a-ddba-42e9-88b4-c5c28abad237,0,1,645561e0-787a-45a1-824a-a2c649d516fe,645561e0-787a-45a1-824a-a2c649d516fe,0,1,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,304525f8-c697-4835-b0a6-4ed3cbcaf3c6,0,1,982315ba-df74-4a31-8929-71d1e5e6f147,982315ba-df74-4a31-8929-71d1e5e6f147,0,1,fd3a6a7e-203d-447a-aebd-7626579387fb,fd3a6a7e-203d-447a-aebd-7626579387fb,0,1,2cd04d4c-2619-40c9-adf4-7bb281f045b6,2cd04d4c-2619-40c9-adf4-7bb281f045b6,0,1,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,cbc1c36d-7bbf-4892-8220-a33ec91a7b1f,0,1,5d4e67ae-7029-46d2-86f9-834a04a9dd71,5d4e67ae-7029-46d2-86f9-834a04a9dd71,0,1,ff976027-75e8-475c-abfa-876d36733c13,ff976027-75e8-475c-abfa-876d36733c13,0,1,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,7452d9c0-cb03-4d1b-afd4-8855950f2ad8,0,1,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,32d4a42d-6e4d-49db-b5bc-1ea6dbe9fe4d,0,1,556a0e57-5b3b-4303-a013-0bd296c506b8,556a0e57-5b3b-4303-a013-0bd296c506b8,0,1,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,3f823f5b-e5a8-40af-8fc3-e4c6ffb18fa3,0,1,b3554203-b930-496d-a712-353bc13a0946,b3554203-b930-496d-a712-353bc13a0946,0,1,59775ce0-f778-45f6-9453-bbd0a0ec1f27,59775ce0-f778-45f6-9453-bbd0a0ec1f27,0,1,f772abd3-8ea0-41e9-aaca-c5375778941a,f772abd3-8ea0-41e9-aaca-c5375778941a,0,1,d06e845a-9f54-40dd-b0df-6988def62017,d06e845a-9f54-40dd-b0df-6988def62017,0,1,b322b047-16eb-4500-826a-6dfebb7d997a,b322b047-16eb-4500-826a-6dfebb7d997a,0,1,c8da922f-e31e-49b0-b90e-1c060424bde5,c8da922f-e31e-49b0-b90e-1c060424bde5,0,1,41462827-fd8b-4ee6-a739-a884d704bba5,41462827-fd8b-4ee6-a739-a884d704bba5,0,1,eca025d2-4fe9-4542-b9f5-46ae2631256e,eca025d2-4fe9-4542-b9f5-46ae2631256e,0,1,35bc58df-8aff-48dd-83a9-b60b0461f94d,35bc58df-8aff-48dd-83a9-b60b0461f94d,0,1,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0f46ae6b-9fe8-471a-a59f-af5e66cb9e00,0,1,b65afceb-a200-42d5-9948-831a5ad84b1b,b65afceb-a200-42d5-9948-831a5ad84b1b,0,1,feb1a5c1-c805-4079-8f05-8a44f51b0b02,feb1a5c1-c805-4079-8f05-8a44f51b0b02,0,1,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,ff7916bd-cbd1-4d9e-8aab-bad9fffaa0d4,0,1,1f55f330-7c0a-4a29-905f-51d664515bc5,1f55f330-7c0a-4a29-905f-51d664515bc5,0,1,6106e958-354c-4211-992c-3c3819e8828e,6106e958-354c-4211-992c-3c3819e8828e,0,1,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,9d6d77a9-1f55-4162-93a5-14bb3f3febaf,0,1,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,1d6b8425-360c-4ab1-9bab-cc9a3b590bb2,0,1,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,9f67d228-79aa-44e6-8dc7-fae4fbdfef2a,0,1,231d3950-f363-4e63-83cd-8ddb81507c27,231d3950-f363-4e63-83cd-8ddb81507c27,0,1,87429f11-bf95-4013-bf13-da904570f88d,87429f11-bf95-4013-bf13-da904570f88d,0,1,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,6173cab2-e0f5-40c1-8e74-4f41fc8bd68f,0,1,feb41347-62db-41cf-ace0-d8b9de361af3,feb41347-62db-41cf-ace0-d8b9de361af3,0,1,cdce186a-229d-492d-8811-147fc4d7cdf5,cdce186a-229d-492d-8811-147fc4d7cdf5,0,1,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,f750d4d3-059f-41a5-85b4-16bb4c63d3f2,0,1,5f91b00f-d8fc-4d63-8486-66339357ab22,5f91b00f-d8fc-4d63-8486-66339357ab22,0,1,16d44ab1-4bce-4df8-a215-6ed5173c75a8,16d44ab1-4bce-4df8-a215-6ed5173c75a8,0,1,543f976e-fea3-4a51-9962-b8e0fcd3f707,543f976e-fea3-4a51-9962-b8e0fcd3f707,0,1,375977c1-5745-4e78-a4df-cef966c0ccf8,375977c1-5745-4e78-a4df-cef966c0ccf8,0,1,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,2582a714-a6d6-4d37-b9a7-5e89e18b0f27,0,1,c3796d85-2a24-43c4-9673-64e56249a1d0,c3796d85-2a24-43c4-9673-64e56249a1d0,0,1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,fc1066b5-20d4-4c73-85f8-9889e554d6e1,0,1,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,a9b6b5fd-1862-4207-87e8-5c25a8f86c57,0,1,731211c2-ef90-4883-9525-83cd91b742ac,731211c2-ef90-4883-9525-83cd91b742ac,0,1,0adf02da-940a-4bfc-afa5-59605494a169,0adf02da-940a-4bfc-afa5-59605494a169,0,1,50a1e3bf-8624-4474-854e-21b89aaf97ed,50a1e3bf-8624-4474-854e-21b89aaf97ed,0,1,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,6c7b82ca-37b0-4f67-b7fa-ab1b77c0fb61,0,1,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,24f9d1a6-73d0-4cc7-b3ca-d36c5c7a9892,0,1,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,f9196766-4ae2-4a73-bed6-4a8838323e02,f9196766-4ae2-4a73-bed6-4a8838323e02,0,1,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,4eeda6df-fb48-4c88-853f-9c35e2b3a3cf,0,1,06afe397-1c7e-400e-bb24-f8e611d114e8,06afe397-1c7e-400e-bb24-f8e611d114e8,0,1,f0105e51-9510-426a-8aa0-af827d93ffd9,f0105e51-9510-426a-8aa0-af827d93ffd9,0,1,3df19dbf-efe7-4e31-99ad-fafb59ec1329,3df19dbf-efe7-4e31-99ad-fafb59ec1329,0,1,baf12d47-fbfe-4563-aa23-26d9f7e83169,baf12d47-fbfe-4563-aa23-26d9f7e83169,0,1,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,e2046f49-6fea-4bf4-92b0-92f3c8357bcf,0,1,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0ba11486-1972-4434-ab1a-5bb75cc05e9f,0,1,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,4ed9c555-7dd0-4577-bf62-152b4c5ec9f2,0,1,11fe3a42-98c4-49ba-b697-86ffb172f16f,11fe3a42-98c4-49ba-b697-86ffb172f16f,0,1,07b53818-7318-4400-8af5-457fac012755,07b53818-7318-4400-8af5-457fac012755,0,1,292b47e7-5cf3-462d-a466-dac6253a7f03,292b47e7-5cf3-462d-a466-dac6253a7f03,0,1,8ecc070f-f6fb-46b1-9636-b77aa80f8804,8ecc070f-f6fb-46b1-9636-b77aa80f8804,0,1,8405be9d-465b-4744-b04f-03933b52f02e,8405be9d-465b-4744-b04f-03933b52f02e,0,1,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,a8021ff9-f0ae-49ab-b8ac-5e3d8fe90d82,0,1,2f67931e-543f-457e-80fd-78ca754e2e9c,2f67931e-543f-457e-80fd-78ca754e2e9c,0,1,595e5752-36a7-4bba-8a40-26920acae01d,595e5752-36a7-4bba-8a40-26920acae01d,0,1,28801fba-c429-4afa-bdcd-b3ec3ec22fda,28801fba-c429-4afa-bdcd-b3ec3ec22fda,0,1,d1a873ae-d45b-4600-9419-e701dce3da02,d1a873ae-d45b-4600-9419-e701dce3da02,0,1,e3a31f0d-a98f-43c6-bc39-087095ae8c39,e3a31f0d-a98f-43c6-bc39-087095ae8c39,0,1,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,2fcde115-5c5a-465c-a326-d7ba379675fc,2fcde115-5c5a-465c-a326-d7ba379675fc,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,346cb8b7-a20e-4a06-823e-26dfb2e3e741,346cb8b7-a20e-4a06-823e-26dfb2e3e741,0,1,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,6d83f50f-32e9-45a6-8b5e-d91ba005ae95,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,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,1ed9a67b-5b15-4862-907f-b194d6113070,1ed9a67b-5b15-4862-907f-b194d6113070,0,1,1aceb0e8-9131-44c2-aaa5-db96eea1c0de,1aceb0e8-9131-44c2-aaa5-db96eea1c0de,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,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,d0106f3a-8490-4277-a278-75c318ec252c,d0106f3a-8490-4277-a278-75c318ec252c,0,1,5035aa55-d557-419a-89e2-10ed0f8d109b,5035aa55-d557-419a-89e2-10ed0f8d109b,0,1,fb79315a-8d27-4c5e-9cfb-c7778dabedef,fb79315a-8d27-4c5e-9cfb-c7778dabedef,0,1,5f93d2af-64ff-41cc-8403-4a0e83160fea,5f93d2af-64ff-41cc-8403-4a0e83160fea,0,1,c12c90e4-7c40-489b-b14b-6b9442016e0f,c12c90e4-7c40-489b-b14b-6b9442016e0f,0,1,6371e288-3502-4d66-9006-b5a36107c0b7,6371e288-3502-4d66-9006-b5a36107c0b7,0,1,0132e564-2cd3-4930-8962-1068532f4be4,0132e564-2cd3-4930-8962-1068532f4be4,0,1,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,57d0f9b0-18d0-48ba-9f3c-d106f66ac602,0,1,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,3a7cfd4c-c943-43c2-a8d5-6d8ab3a10fc9,0,1,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,36b8b08f-0da3-4dbd-9aa8-73220ca9101d,0,1,7021fca5-d612-43e1-927b-7f822153cf75,7021fca5-d612-43e1-927b-7f822153cf75,0,1,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,9fd16d51-91bb-4973-a7c4-cf4db87da8bf,0,1,ee0a8d23-660a-492b-a813-b57394acee05,ee0a8d23-660a-492b-a813-b57394acee05,0,1,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,d1eda8f4-ffdd-445a-882c-6124d9f7fcf2,0,1,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,f3a8dd22-4469-4a3b-a7dd-78a5624b7bf0,0,1,ade21e2e-349f-414b-8f35-6ae3b6a4064d,ade21e2e-349f-414b-8f35-6ae3b6a4064d,0,1,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,cce823c6-3bd5-4e46-91f6-8715cb72b1d5,0,1,e3ca64af-7766-48e2-b7c6-2a96f4539905,e3ca64af-7766-48e2-b7c6-2a96f4539905,0,1,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,6ed466d7-e016-4d9c-9c0e-8deed48cbd70,0,1,b03829e9-ba22-4584-85f0-c36d63f48242,b03829e9-ba22-4584-85f0-c36d63f48242,0,1,084a7c95-a59b-4861-b8b3-b5710a57ac60,084a7c95-a59b-4861-b8b3-b5710a57ac60,0,1,efcea6da-6746-4e00-913a-14cab38b5d84,efcea6da-6746-4e00-913a-14cab38b5d84,0,1,aff367fb-7fca-44d0-adf9-3731f14834f6,aff367fb-7fca-44d0-adf9-3731f14834f6,0,1,a2782760-dd4c-44d2-a785-814d6f610455,a2782760-dd4c-44d2-a785-814d6f610455,0,1,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,245162d8-6ae1-47e5-a0c9-0d5f2e5d8ea8,0,1,6581ac1f-11ef-42b8-9f3b-590bb7546e63,6581ac1f-11ef-42b8-9f3b-590bb7546e63,0,1,ce952e88-35b7-4506-81ac-d7081e50a650,ce952e88-35b7-4506-81ac-d7081e50a650,0,1,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,5d7a53fa-1a89-4e6e-868c-4077bd84c0ce,0,1,3bf1281f-7570-4633-86b9-3e953a7e6647,3bf1281f-7570-4633-86b9-3e953a7e6647,0,1,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,dbc5f419-63b0-4cbe-90ff-c0101105e46c,dbc5f419-63b0-4cbe-90ff-c0101105e46c,0,1,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,36ebebbb-dff1-4dbd-870b-58bd4a71fa1f,0,1,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0006b44a-3a0c-4be4-8dd0-bd0db9ddcc4d,0,1,c708f6e9-b7a0-4046-90f3-83527da7b872,c708f6e9-b7a0-4046-90f3-83527da7b872,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,7a34f723-cd14-4949-a40f-7ce579bf0449,7a34f723-cd14-4949-a40f-7ce579bf0449,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,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,db4eb2f0-1e8c-4fd6-a818-ee1a09ed7caf,db4eb2f0-1e8c-4fd6-a818-ee1a09ed7caf,0,1,7898bdc8-e895-4894-810a-19607a553c53,7898bdc8-e895-4894-810a-19607a553c53,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,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,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,c9a06c8d-2f6d-4e03-bc62-a1a19f17faf3,0,1,5ba93404-58ad-4321-9a62-27db828f75f6,5ba93404-58ad-4321-9a62-27db828f75f6,0,1,9f921157-fa57-41b6-93f5-61fb5fb4a820,9f921157-fa57-41b6-93f5-61fb5fb4a820,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,7a014fcb-a4b8-4c1c-b0de-21907a917c25,7a014fcb-a4b8-4c1c-b0de-21907a917c25,0,1,c31e34db-41ff-4db3-a4d0-f780f67070f6,c31e34db-41ff-4db3-a4d0-f780f67070f6,0,1,4f97b909-68f9-482a-b958-b4caa9b83763,4f97b909-68f9-482a-b958-b4caa9b83763,0,1,1688ef5d-72df-4bc4-a879-89033d466ad7,1688ef5d-72df-4bc4-a879-89033d466ad7,0,1,30f18fbf-4240-4708-a71a-189f8fc324f3,30f18fbf-4240-4708-a71a-189f8fc324f3,0,1,344cb0de-315d-4d05-93f8-8a1f53208470,344cb0de-315d-4d05-93f8-8a1f53208470,0,1,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,98aa5d5e-6c0e-4b9b-a3fa-335635d15217,0,1,a7973409-b18e-4b88-ad50-e2ae89470d8f,a7973409-b18e-4b88-ad50-e2ae89470d8f,0,1,a537875e-492e-4cf2-96e9-e2e97bb206da,a537875e-492e-4cf2-96e9-e2e97bb206da,0,1,085a08f3-9d93-429d-9b1b-9065ab8363f7,085a08f3-9d93-429d-9b1b-9065ab8363f7,0,1,a530c0a1-c1d2-40bb-9d0e-320074dbb684,a530c0a1-c1d2-40bb-9d0e-320074dbb684,0,1,55c63580-16f1-4d6f-a40b-e630f71ebb98,55c63580-16f1-4d6f-a40b-e630f71ebb98,0,1,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0a136ad9-22ad-4ba7-a31a-40a193b49d26,0,1,b456d820-8034-4381-960d-66d9f86b0a4b,b456d820-8034-4381-960d-66d9f86b0a4b,0,1,bd55fd03-cf67-4333-a554-98e03d18f780,bd55fd03-cf67-4333-a554-98e03d18f780,0,1,4cca4c80-62f5-4205-8196-78fcfa83de2f,4cca4c80-62f5-4205-8196-78fcfa83de2f,0,1,1a7c774d-5b86-4051-b797-3081e19fa30a,1a7c774d-5b86-4051-b797-3081e19fa30a,0,1,00949768-5833-4fe2-8752-b009d1bceef8,00949768-5833-4fe2-8752-b009d1bceef8,0,1,c5b3ca21-8f7b-4933-853c-7d95b17b5631,c5b3ca21-8f7b-4933-853c-7d95b17b5631,0,1,8b0faa1e-09da-4ba4-894e-e86abc5d39df,8b0faa1e-09da-4ba4-894e-e86abc5d39df,0,1,cb50b309-1b6c-400c-9e9e-67204dcccaae,cb50b309-1b6c-400c-9e9e-67204dcccaae,0,1,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,e2b482cb-6954-4e6a-abe9-d0a01f64b73a,0,1,2a365474-edba-4e3d-a69c-c856be0e4a4a,2a365474-edba-4e3d-a69c-c856be0e4a4a,0,1,c46fd680-efbe-49a8-91f0-73e36d791fa9,c46fd680-efbe-49a8-91f0-73e36d791fa9,0,1,6995567b-5a3c-4e03-9fb4-e22363ed6555,6995567b-5a3c-4e03-9fb4-e22363ed6555,0,1,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,32c38c2b-072d-4cf2-bf9a-f9c4b4c463e8,0,1,023d747d-4ac1-4e0e-9de1-76bdc4f74d8b,023d747d-4ac1-4e0e-9de1-76bdc4f74d8b,0,1,b36fd525-6e49-4ea0-94e8-a0895d45bb43,b36fd525-6e49-4ea0-94e8-a0895d45bb43,0,1,56a0a9ce-c5ce-4f3d-ad38-ff6a7a4bd162,56a0a9ce-c5ce-4f3d-ad38-ff6a7a4bd162,0,1,5bbd5ae3-e327-40a2-bb94-91be5db1e14d,5bbd5ae3-e327-40a2-bb94-91be5db1e14d,0,1,591f46c9-8d40-421b-84a7-755a6b330539,591f46c9-8d40-421b-84a7-755a6b330539,0,1,c9eb2a89-3dc9-4ac6-9fac-f8042f8b024b,c9eb2a89-3dc9-4ac6-9fac-f8042f8b024b,0,1,a1693bbe-d65d-47e2-8425-9bf6f9b1d906,a1693bbe-d65d-47e2-8425-9bf6f9b1d906,0,1,6f8ff42b-76ba-4ddf-b3e4-3a2ded880210,6f8ff42b-76ba-4ddf-b3e4-3a2ded880210,0,1,643228fa-f3b0-4927-878b-0fdcd375684c,643228fa-f3b0-4927-878b-0fdcd375684c,0,1,13c98801-97c4-4638-9aa3-aabc6983b7d8,13c98801-97c4-4638-9aa3-aabc6983b7d8,0,1,1d62c9a2-9692-4e7e-b556-70906fb0cbbb,1d62c9a2-9692-4e7e-b556-70906fb0cbbb,0,1,bb8b4325-c43f-4be0-af4a-8dda8447438f,bb8b4325-c43f-4be0-af4a-8dda8447438f,0,1,da52d51a-7e54-4cfd-9f2c-af84da7e5a8f,da52d51a-7e54-4cfd-9f2c-af84da7e5a8f,0,1,0f76c812-38d0-4cab-bc09-d0b36ee48f68,0f76c812-38d0-4cab-bc09-d0b36ee48f68,0,1,02ef7596-599a-4d24-9e9d-fdd83263f576,02ef7596-599a-4d24-9e9d-fdd83263f576,0,1,4ba00bc3-30a3-4a7f-8726-f8393e1a89dd,4ba00bc3-30a3-4a7f-8726-f8393e1a89dd,0,1,0f0dd474-fe3a-40d1-baeb-c9fc1ec709ac,0f0dd474-fe3a-40d1-baeb-c9fc1ec709ac,0,1,ba280414-62a9-4533-90d9-f084ef71bf97,ba280414-62a9-4533-90d9-f084ef71bf97,0,1,c608c734-97ae-4b21-a849-c63642095357,c608c734-97ae-4b21-a849-c63642095357,0,1,8d247cc7-c0ba-4470-8b87-ca0a869aeb2a,8d247cc7-c0ba-4470-8b87-ca0a869aeb2a,0,1,375fd076-c54c-43c1-8d11-12607c0ce04e,375fd076-c54c-43c1-8d11-12607c0ce04e,0,1,3b9ded5a-f656-4a33-90f3-d7dbff234da9,3b9ded5a-f656-4a33-90f3-d7dbff234da9,0,1,eae94ac3-3aa3-49f0-940f-51c89fec66e2,eae94ac3-3aa3-49f0-940f-51c89fec66e2,0,1,a2b43b21-56e7-4644-9345-d4918a1dfe8e,a2b43b21-56e7-4644-9345-d4918a1dfe8e,0,1,6ef24453-482d-4a6e-a088-7a2faf8de1c8,6ef24453-482d-4a6e-a088-7a2faf8de1c8,0,1,b9f6c8a3-e9bc-4dae-b583-ca20e91eb261,b9f6c8a3-e9bc-4dae-b583-ca20e91eb261,0,1,1a0cdbe5-ad4a-42dc-a1c9-54c737436e20,1a0cdbe5-ad4a-42dc-a1c9-54c737436e20,0,1,f4cdb0ac-8993-4e8c-9d13-128710dec273,f4cdb0ac-8993-4e8c-9d13-128710dec273,0,1,fbe620e1-a3a3-48aa-89e8-4562fdd24f1e,fbe620e1-a3a3-48aa-89e8-4562fdd24f1e,0,1,b4f824aa-9b2f-40c9-a5f6-98d452019c38,b4f824aa-9b2f-40c9-a5f6-98d452019c38,0,1,b8a966ba-3452-44df-91d0-7040ecd3e4c2,b8a966ba-3452-44df-91d0-7040ecd3e4c2,0,1,80d6883d-c608-4fe5-acae-78bc45e40e5f,80d6883d-c608-4fe5-acae-78bc45e40e5f,0,1,213b173a-c3b7-449c-a618-d479c4dc38e8,213b173a-c3b7-449c-a618-d479c4dc38e8,0,1,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,7a64dffc-5cfe-41e2-bd55-fbf4957559a4,0,1,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,a78249aa-ca9f-4bee-b00d-68ff59ea81a4,0,1,7534148d-0124-49a2-a446-c6205d153153,7534148d-0124-49a2-a446-c6205d153153,0,1,32ed8a10-7177-4e45-866e-04a1b6831570,32ed8a10-7177-4e45-866e-04a1b6831570,0,1,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,e2a90d7a-5480-47cd-b296-8d60d8baf7f9,0,1,8190a432-1037-4334-b2c7-bae39f7f9442,8190a432-1037-4334-b2c7-bae39f7f9442,0,1,4733e5c1-8198-408b-8903-866d3b0fdc43,4733e5c1-8198-408b-8903-866d3b0fdc43,0,1,e1fc5146-37c5-4207-af05-7250976bd406,e1fc5146-37c5-4207-af05-7250976bd406,0,1,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,60038cd9-8d01-44b1-9d3f-f3a31e59e5db,0,1,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,f0bfb98b-cc43-4b6c-8166-9b81b4c22cb0,0,1,f5e27159-789a-4d34-ac51-fd99d753b83a,f5e27159-789a-4d34-ac51-fd99d753b83a,0,1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,f1cb02ff-a2f0-4a34-93fa-e47c6e210ee1,0,1,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,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,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,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,f31f3dab-5796-47ac-a54d-3081f8cad817,f31f3dab-5796-47ac-a54d-3081f8cad817,0,1,db497857-33d3-49a1-b328-dfc62c973ecb,db497857-33d3-49a1-b328-dfc62c973ecb,0,1,139c001c-7b07-465a-9187-399ad32d294f,139c001c-7b07-465a-9187-399ad32d294f,0,1,5d228ce4-069e-4f98-beed-b8e1de17c3d9,5d228ce4-069e-4f98-beed-b8e1de17c3d9,0,1,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,52c04b3f-24d2-414c-b05a-77a34078d793,52c04b3f-24d2-414c-b05a-77a34078d793,0,1,8e876c9a-670a-4f34-9525-d87311988268,8e876c9a-670a-4f34-9525-d87311988268,0,1,251bce43-7e0c-4842-aa9f-e1f0dd8bbf2b,251bce43-7e0c-4842-aa9f-e1f0dd8bbf2b,0,1,ef6f7bb6-6c2c-4777-b99a-624865222549,ef6f7bb6-6c2c-4777-b99a-624865222549,0,1,e6044088-2521-4c4b-9cbe-58c14bb871b1,e6044088-2521-4c4b-9cbe-58c14bb871b1,0,1,50fc45e9-1e29-4b0e-9c18-8a8354780755,50fc45e9-1e29-4b0e-9c18-8a8354780755,0,1,f6375eb0-448b-495b-8edf-198f2ac28aed,f6375eb0-448b-495b-8edf-198f2ac28aed,0,1,9e39be89-29c3-48d2-9568-eedfed776bf8,9e39be89-29c3-48d2-9568-eedfed776bf8,0,1,8f873523-b4b1-4522-a60c-04477b4a41ab,8f873523-b4b1-4522-a60c-04477b4a41ab,0,1,bcbb80fe-5d16-49a1-972c-492445c7db6f,bcbb80fe-5d16-49a1-972c-492445c7db6f,0,1,56177464-5e9f-4598-96bc-eb311993c503,56177464-5e9f-4598-96bc-eb311993c503,0,1,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,c2308e60-2844-4bd8-bc8a-c9c20e5fc62d,0,1,bdfe65f4-4174-4e66-915c-943137981cf0,bdfe65f4-4174-4e66-915c-943137981cf0,0,1,c895d58a-5be1-4157-81af-f4f6db9b4b9e,c895d58a-5be1-4157-81af-f4f6db9b4b9e,0,1,8ce6cc1a-8570-4704-b9a3-44e815b2e753,8ce6cc1a-8570-4704-b9a3-44e815b2e753,0,1,7d336fdd-5cbf-4c92-a783-f451f7590502,7d336fdd-5cbf-4c92-a783-f451f7590502,0,1,05243f56-7e9b-4a61-8efb-1b5e525fff21,05243f56-7e9b-4a61-8efb-1b5e525fff21,0,1,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,b16d5e79-9d7e-4d3e-9be8-3b2a932abf78,0,1,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,bc110a6a-26fa-4aa1-a2ef-bdaeaa0a33af,0,1,86760ecb-2ddd-40ce-bc4f-94c23027a55e,86760ecb-2ddd-40ce-bc4f-94c23027a55e,0,1,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,fb42ad06-d5a4-40ea-817c-fa7ff385d8db,0,1,7aa86a2d-2b47-447e-8901-806411011279,7aa86a2d-2b47-447e-8901-806411011279,0,1,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,f5d90a5a-1adb-49d6-8640-2e4054bdb99f,0,1,903af13a-1f73-4145-a3d0-971c3be5fbe6,903af13a-1f73-4145-a3d0-971c3be5fbe6,0,1,37722a34-1148-4cc8-95e6-4645ae9cca98,37722a34-1148-4cc8-95e6-4645ae9cca98,0,1,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,934b8380-c6e0-49f8-a6c2-91c0ddb2f95e,0,1,fca0dfad-f853-4694-9ce9-53a3a10f59b7,fca0dfad-f853-4694-9ce9-53a3a10f59b7,0,1,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,703a3e8a-0204-4e8f-8fa0-a2ed1aeb7662,0,1,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,4019a5e9-1f50-44b9-98ba-87c07a0ce4e5,0,1,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,71aa2bf7-85c9-40f3-a9b0-f6d666eddd28,0,1,1470f052-f032-46bc-b1ee-54555e725dfd,1470f052-f032-46bc-b1ee-54555e725dfd,0,1,497cbe4d-586d-48a2-8e98-d20e3e09ed42,497cbe4d-586d-48a2-8e98-d20e3e09ed42,0,1,150c9d05-4ccc-4cb7-879d-b1d9c3534343,150c9d05-4ccc-4cb7-879d-b1d9c3534343,0,1,38b7679d-3739-4572-baf2-d8c7b2a94f0a,38b7679d-3739-4572-baf2-d8c7b2a94f0a,0,1,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,11f32e0f-7d16-4ebd-9cef-fffd2d64e70a,0,1,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,b1ed134b-f2aa-4b06-b7a2-0e524ead04df,0,1,1281fe19-bbca-4a4f-84d8-14187e62000f,1281fe19-bbca-4a4f-84d8-14187e62000f,0,1,953dbad6-4f5c-4319-874a-db358a77d001,953dbad6-4f5c-4319-874a-db358a77d001,0,1,69ceac29-06d3-45f2-b914-7966465cd0d3,69ceac29-06d3-45f2-b914-7966465cd0d3,0,1,cc34bd23-de0a-4b09-8333-e4693576b9f4,cc34bd23-de0a-4b09-8333-e4693576b9f4,0,1,b4cb92fb-ad82-44ed-9203-397b412b3453,b4cb92fb-ad82-44ed-9203-397b412b3453,0,1,b690721d-960b-4374-8d2c-feed3a2b354b,b690721d-960b-4374-8d2c-feed3a2b354b,0,1,271243d3-1871-4a0a-bf7f-63bacacf0a59,271243d3-1871-4a0a-bf7f-63bacacf0a59,0,1,bc10ad8f-383c-469a-8c0e-60805161055b,bc10ad8f-383c-469a-8c0e-60805161055b,0,1,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,57f4ee70-185e-4f2a-91a6-6c0bf93c1000,0,1,ee8af8ee-e49a-4511-9a91-48814ab99d23,ee8af8ee-e49a-4511-9a91-48814ab99d23,0,1,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,3a7d9d49-b5e5-4c5c-958e-a4c6afda8b9d,0,1,6fbf844e-ee8d-490f-9177-6392d262312f,6fbf844e-ee8d-490f-9177-6392d262312f,0,1,65000437-bd07-4841-a458-679d44768c46,65000437-bd07-4841-a458-679d44768c46,0,1,9b7051d5-abc4-416c-a0e6-515d120d78e4,9b7051d5-abc4-416c-a0e6-515d120d78e4,0,1,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,86d1bc4e-f08d-48c7-8b3a-3c5feb0c843c,0,1,869938e6-6310-4326-bd15-5b91fe2e0911,869938e6-6310-4326-bd15-5b91fe2e0911,0,1,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,8ed7254b-bbf8-49d9-8a73-9a91316fd02d,0,1,a156521a-ece1-49d3-8056-1c3508273c45,a156521a-ece1-49d3-8056-1c3508273c45,0,1,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,075d39e0-a77a-4d0b-9260-7524fb5b2d0c,0,1,10018f80-3138-4089-bf9a-a5f178f1e295,10018f80-3138-4089-bf9a-a5f178f1e295,0,1,43aba109-4b7f-45ef-9c30-8b754e81911b,43aba109-4b7f-45ef-9c30-8b754e81911b,0,1,4ccd72e1-7fd7-4a3b-8428-71b44992937e,4ccd72e1-7fd7-4a3b-8428-71b44992937e,0,1,46077650-2b2c-4319-8279-41f277971669,46077650-2b2c-4319-8279-41f277971669,0,1,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,4afe733d-64a0-4ea5-9d12-6e2c86eb91e4,0,1,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,d0b79c3d-b0c5-4eb3-9971-1def1c88698f,0,1,e82ebd72-7b5a-4f45-b853-1001bf680a05,e82ebd72-7b5a-4f45-b853-1001bf680a05,0,1,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,a74879b8-c080-4cc0-b44f-2b7c4dae87fe,0,1,e9e9b733-e97a-430d-95ce-45ea27751f64,e9e9b733-e97a-430d-95ce-45ea27751f64,0,1,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,86ffe9a7-9b3e-49ab-bd88-20269fec56bc,0,1,3dd50c66-27f7-4f1e-86e9-c709995c8609,3dd50c66-27f7-4f1e-86e9-c709995c8609,0,1,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,45c0003f-0ed7-4582-b84e-217fdc4ddeaf,0,1,ed1369c5-c274-45bd-ae91-7648565ae09f,ed1369c5-c274-45bd-ae91-7648565ae09f,0,1,8d0fce61-a22f-4033-9e03-3f00c4a21722,8d0fce61-a22f-4033-9e03-3f00c4a21722,0,1,bfb3f026-e940-49c3-ac30-408186f9e11e,bfb3f026-e940-49c3-ac30-408186f9e11e,0,1,e1dc83eb-a8cd-454b-8de8-cff2049be78c,e1dc83eb-a8cd-454b-8de8-cff2049be78c,0,1,9edd9288-1463-4d67-b9f0-40f351d978e9,9edd9288-1463-4d67-b9f0-40f351d978e9,0,1,c9db6c68-965f-4567-b26e-5d497a389de1,c9db6c68-965f-4567-b26e-5d497a389de1,0,1,4da2f65d-56bd-4140-9b31-e5ccac4a800a,4da2f65d-56bd-4140-9b31-e5ccac4a800a,0,1,eb163bba-b94c-4a78-9c2d-7b519325e3d4,eb163bba-b94c-4a78-9c2d-7b519325e3d4,0,1,939bdb9a-294b-4b42-a56f-030f69bc29c4,939bdb9a-294b-4b42-a56f-030f69bc29c4,0,1,ee7a763b-bcbf-4ff3-89af-eb7965b33515,ee7a763b-bcbf-4ff3-89af-eb7965b33515,0,1,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,e72b3ae6-00e9-45d7-a4f3-bc8a5a2f5ae4,0,1,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,7649bd7b-fe8c-4338-80fc-153160a5e538,7649bd7b-fe8c-4338-80fc-153160a5e538,0,1,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,3dec1ae7-90bb-45ab-aa04-48cfbc14742e,0,1,6137605e-4850-44ec-b4ee-048bd8e0ec3a,6137605e-4850-44ec-b4ee-048bd8e0ec3a,0,1,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,ee28aa9b-0f31-4d8b-8444-43b8bc88bd23,0,1,0e6e9372-beb4-478e-9428-71b19a60739b,0e6e9372-beb4-478e-9428-71b19a60739b,0,1,32b11498-542f-46b2-829f-1525936ab7fa,32b11498-542f-46b2-829f-1525936ab7fa,0,1,64afa916-4750-4008-8c6c-2a470fb11283,64afa916-4750-4008-8c6c-2a470fb11283,0,1,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,f4a85bfb-40c7-4f81-af32-d07b96c53ad0,0,1,35354abc-9a76-4ee8-8796-c24b37365ea0,35354abc-9a76-4ee8-8796-c24b37365ea0,0,1,840a1d4d-e5f6-4a88-886f-03830fe4f99a,840a1d4d-e5f6-4a88-886f-03830fe4f99a,0,1,7078977f-31bf-427e-ac37-e309d81fe999,7078977f-31bf-427e-ac37-e309d81fe999,0,1,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,bb39ae51-be82-4bb5-a30e-2bf2b53be59e,0,1,d8854555-9e15-4d82-a1fd-656a848a8e8a,d8854555-9e15-4d82-a1fd-656a848a8e8a,0,1,53191842-ea05-4491-84d7-071cd201992d,53191842-ea05-4491-84d7-071cd201992d,0,1,86c70449-4cf7-4baf-9742-b82b134ed929,86c70449-4cf7-4baf-9742-b82b134ed929,0,1,af3b1881-163a-4c07-a1d9-77ceadf59c77,af3b1881-163a-4c07-a1d9-77ceadf59c77,0,1,b78be6fb-7db8-48c8-ba7b-aab1fea34890,b78be6fb-7db8-48c8-ba7b-aab1fea34890,0,1,bd27276a-e80c-4135-b341-f99a816ffe86,bd27276a-e80c-4135-b341-f99a816ffe86,0,1,35306678-147c-4ad1-a3c6-c80a11afa22f,35306678-147c-4ad1-a3c6-c80a11afa22f,0,1,0da75726-ae71-4d83-a696-a774c787a8a2,0da75726-ae71-4d83-a696-a774c787a8a2,0,1,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,5b30b0e9-f986-49b8-8668-5bb0e09f0cfe,0,1,896a7267-0198-4cbb-b6e6-7aa157c0cc61,896a7267-0198-4cbb-b6e6-7aa157c0cc61,0,1,2005bf54-219b-4111-bff1-e12e2c6dca3e,2005bf54-219b-4111-bff1-e12e2c6dca3e,0,1,abab8f73-d705-4350-b44d-f912649a2190,abab8f73-d705-4350-b44d-f912649a2190,0,1,20c9c25c-f8c9-429f-84bd-543cb809abef,20c9c25c-f8c9-429f-84bd-543cb809abef,0,1,dc5f451e-3275-43a8-9f48-45b83220d461,dc5f451e-3275-43a8-9f48-45b83220d461,0,1,028f5e81-61df-4d13-876d-781c5fd18ee6,028f5e81-61df-4d13-876d-781c5fd18ee6,0,1,3cbb59ef-7f64-4590-8a54-ba01e78283c3,3cbb59ef-7f64-4590-8a54-ba01e78283c3,0,1,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,a5b83672-2ead-4d0a-a4e5-ddd991f1addc,0,1,388eb513-fadb-40cd-8a7b-33b904dd758e,388eb513-fadb-40cd-8a7b-33b904dd758e,0,1,0613c6aa-e1fe-4632-a396-a17ec773158f,0613c6aa-e1fe-4632-a396-a17ec773158f,0,1,1a330987-4c79-4ab7-b250-db8d32c78751,1a330987-4c79-4ab7-b250-db8d32c78751,0,1,555062ed-9a04-41d8-877f-0a667e9a08cd,555062ed-9a04-41d8-877f-0a667e9a08cd,0,1,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,5b1db523-b5cb-4ff8-8662-5feeb4282b4a,0,1,ac160e1c-fef7-4625-84e0-964b397f6bdb,ac160e1c-fef7-4625-84e0-964b397f6bdb,0,1,b8946d9c-dda8-4b94-8cbf-db62b647c53e,b8946d9c-dda8-4b94-8cbf-db62b647c53e,0,1,24215916-7732-4030-9f88-163f644e94f7,24215916-7732-4030-9f88-163f644e94f7,0,1,69697945-9748-4cea-a20f-e244b46de2e8,69697945-9748-4cea-a20f-e244b46de2e8,0,1,68538fd1-262c-43ea-b09f-8a66643a0062,68538fd1-262c-43ea-b09f-8a66643a0062,0,1,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,d042a8e1-a7b9-4f26-abc4-d618bc73e9f5,0,1,82ad24cc-d9f8-440b-a720-e204101d85da,82ad24cc-d9f8-440b-a720-e204101d85da,0,1,8010065f-aec8-4768-85ec-9eb7b2b01e7e,8010065f-aec8-4768-85ec-9eb7b2b01e7e,0,1,a44348cb-e20c-4afd-8483-3b9c735b352c,a44348cb-e20c-4afd-8483-3b9c735b352c,0,1,ebfe4c74-6e16-4b64-8a52-cea95c446903,ebfe4c74-6e16-4b64-8a52-cea95c446903,0,1,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,ea9ed37c-7f58-43a8-990c-f1feb5d2d275,0,1,255e55e3-fc3a-4388-8667-486fe3b7557f,255e55e3-fc3a-4388-8667-486fe3b7557f,0,1,d4bfe208-c64c-4088-b33f-98e4cee03444,d4bfe208-c64c-4088-b33f-98e4cee03444,0,1,e6ae5164-fe3b-48fd-8180-f31941e35238,e6ae5164-fe3b-48fd-8180-f31941e35238,0,1,d912e472-9553-4b96-8b16-7aaff6c14239,d912e472-9553-4b96-8b16-7aaff6c14239,0,1,b04018b5-a74d-43c9-8519-6cc8aa23fe09,b04018b5-a74d-43c9-8519-6cc8aa23fe09,0,1,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,8f5af22e-3e73-4a4f-b91e-eccd0f5084fd,0,1,9283277f-2b75-4c3a-810a-8d4071b3afcc,9283277f-2b75-4c3a-810a-8d4071b3afcc,0,1,d03d5b18-57a2-43c0-99ea-8ad9d5788179,d03d5b18-57a2-43c0-99ea-8ad9d5788179,0,1,c491a7fc-14f9-498a-b7dd-575dfc66878e,c491a7fc-14f9-498a-b7dd-575dfc66878e,0,1,db15f8eb-4736-4b47-9cee-3e6883f0888c,db15f8eb-4736-4b47-9cee-3e6883f0888c,0,1,59064eb2-2770-4f1c-96bd-801926fe68ef,59064eb2-2770-4f1c-96bd-801926fe68ef,0,1,9a388c1c-bf74-464e-be2d-bdb2e36232b5,9a388c1c-bf74-464e-be2d-bdb2e36232b5,0,1,06e9fb36-cc47-4517-baac-d666703bdf03,06e9fb36-cc47-4517-baac-d666703bdf03,0,1,cef67574-e5cd-40f9-b7b9-47cff1a1f703,cef67574-e5cd-40f9-b7b9-47cff1a1f703,0,1,6b2340d7-687f-43a3-8eb8-8ddb86712466,6b2340d7-687f-43a3-8eb8-8ddb86712466,0,1,ca5d586f-81bb-40ee-b3bd-de854857c984,ca5d586f-81bb-40ee-b3bd-de854857c984,0,1,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,9846e2f6-d82a-42a6-bf50-2a9cdf750a8f,0,1,ee7d970c-cef7-4740-a357-1fe78f88a6e6,ee7d970c-cef7-4740-a357-1fe78f88a6e6,0,1,73f89524-dbe8-426f-8ee6-1277eb1967cc,73f89524-dbe8-426f-8ee6-1277eb1967cc,0,1,6733f1bd-7878-4a33-8995-c07526e87c1a,6733f1bd-7878-4a33-8995-c07526e87c1a,0,1,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,b5e81952-e469-4f26-b8d2-90e7d9e7bc1d,0,1,ec34befe-3c0b-4a75-b943-840c52e7dda5,ec34befe-3c0b-4a75-b943-840c52e7dda5,0,1,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0b7c4cb7-5126-4b5e-8941-cd56eaef76a0,0,1,40b08a20-51a3-438b-ba54-466917ea809f,40b08a20-51a3-438b-ba54-466917ea809f,0,1,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0e0670d6-d8f7-4728-bd1b-f016fffa0570,0,1,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,7f18eb86-e9ac-4cb8-a9aa-389f61dff582,0,1,144d5498-bb61-4bec-bef3-85a5a4aec3d5,144d5498-bb61-4bec-bef3-85a5a4aec3d5,0,1,ff18803b-4c3a-4720-a718-7547f04c6e2f,ff18803b-4c3a-4720-a718-7547f04c6e2f,0,1,9328da5c-4689-4a60-8136-ae9eac46ab38,9328da5c-4689-4a60-8136-ae9eac46ab38,0,1,42641296-64da-46e0-a407-de2d492f9c90,42641296-64da-46e0-a407-de2d492f9c90,0,1,b834af0b-086c-445d-a271-7e178c324551,b834af0b-086c-445d-a271-7e178c324551,0,1,32c10512-7bb8-423b-9503-ab2fa41386a4,32c10512-7bb8-423b-9503-ab2fa41386a4,0,1,888edfc4-8140-4675-b267-c32bf1d8d29d,888edfc4-8140-4675-b267-c32bf1d8d29d,0,1,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,a53f6e85-fbf7-4fb1-9301-d63e812fe16c,0,1,57a0f5f3-6573-4b35-af25-cea3a25641f1,57a0f5f3-6573-4b35-af25-cea3a25641f1,0,1,21d296a1-6809-4ff6-a4da-b455cad86cc2,21d296a1-6809-4ff6-a4da-b455cad86cc2,0,1,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,ecaa0af8-549c-4c07-82ff-1c4e02ff15b8,0,1,45a8c780-c067-40d7-bbe9-81f854aacf7a,45a8c780-c067-40d7-bbe9-81f854aacf7a,0,1,57885cac-059a-4a08-aa2c-43b116d2c777,57885cac-059a-4a08-aa2c-43b116d2c777,0,1,56b570b1-93b0-468a-9672-9c71113753f3,56b570b1-93b0-468a-9672-9c71113753f3,0,1,e7b0ae70-0192-456c-9dc5-e66049fa9df2,e7b0ae70-0192-456c-9dc5-e66049fa9df2,0,1,68944d09-618e-4fa3-a7af-8c84218e0ac7,68944d09-618e-4fa3-a7af-8c84218e0ac7,0,1,91b12ce3-e8ba-4c9d-9daa-1d5532500314,91b12ce3-e8ba-4c9d-9daa-1d5532500314,0,1,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,733dc291-0bef-4fe8-ac9f-63440f0c2ad0,0,1,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,5b7b7dc3-dbef-4854-9395-30a3ae4d751c,0,1,cb57aabc-eeef-42b4-9bc2-873cebd9618c,cb57aabc-eeef-42b4-9bc2-873cebd9618c,0,1,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,2fcd2c85-6778-42fa-9bdd-a6ba47497ec0,0,1,52f30ed7-aa16-4ce2-9684-e50229ab0015,52f30ed7-aa16-4ce2-9684-e50229ab0015,0,1,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,79c2e2bd-f923-42ec-8bdc-3e517e08ee7c,0,1,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0526492c-be48-4c84-8d68-19fa1c7e9d6e,0,1,54ecaf7b-9bc5-483c-96e1-270bcd323590,54ecaf7b-9bc5-483c-96e1-270bcd323590,0,1,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,2a1f77ba-fa2e-4281-8e68-7ec4ca0261b7,0,1,58f6f8fa-7473-40f5-973a-6279335d8f33,58f6f8fa-7473-40f5-973a-6279335d8f33,0,1,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,ec0c3187-de61-4bc8-a52a-7617f47ffb6d,0,1,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,1e71ec59-55a4-45e8-a8c9-f70c2cb56589,0,1,fa3632fe-185b-49aa-85ae-dfb721835d40,fa3632fe-185b-49aa-85ae-dfb721835d40,0,1,a4f15108-477c-465e-aaea-cb495ef52cf5,a4f15108-477c-465e-aaea-cb495ef52cf5,0,1,9cda5c2c-f401-4f63-b445-cef160296e48,9cda5c2c-f401-4f63-b445-cef160296e48,0,1,e8ae4a26-3127-43ae-af7a-c2e278d2611d,e8ae4a26-3127-43ae-af7a-c2e278d2611d,0,1,b923c78f-d074-41b4-b832-086686258f19,b923c78f-d074-41b4-b832-086686258f19,0,1,8ff96413-6fdd-4b8d-a181-ea0d8633defc,8ff96413-6fdd-4b8d-a181-ea0d8633defc,0,1,54604ed2-766b-4308-b99e-447817d82799,54604ed2-766b-4308-b99e-447817d82799,0,1,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,7abdb07b-edbc-4c3b-aa53-afaa92dc9071,0,1,f48b4475-2cd9-41df-962a-6529f84985ca,f48b4475-2cd9-41df-962a-6529f84985ca,0,1,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,2fbfe405-48e6-4abf-99c2-7f1f66a62b48,0,1,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,5e6637c7-19b5-4ac2-a8e9-d119e49f444e,0,1,bf94feb9-edf7-4df8-b5f5-805613663a0a,bf94feb9-edf7-4df8-b5f5-805613663a0a,0,1,6d852a13-c85e-4e84-8396-f91c1ed0596e,6d852a13-c85e-4e84-8396-f91c1ed0596e,0,1,9c2d5313-a4fd-417e-a340-ad4980d0028b,9c2d5313-a4fd-417e-a340-ad4980d0028b,0,1,4fb4a280-9426-4c41-a9ba-11f9d01a0740,4fb4a280-9426-4c41-a9ba-11f9d01a0740,0,1,1591ee7e-870c-4bf7-9450-be84f1b2506f,1591ee7e-870c-4bf7-9450-be84f1b2506f,0,1,8f088f33-92d7-4e35-915d-6cda1129dd80,8f088f33-92d7-4e35-915d-6cda1129dd80,0,1,9a8578a2-8a92-4ab3-a480-173340f8b34a,9a8578a2-8a92-4ab3-a480-173340f8b34a,0,1,4889d27b-435b-4059-a34d-6afdf3c77fa3,4889d27b-435b-4059-a34d-6afdf3c77fa3,0,1,4ebf0988-ccc3-440c-bd0f-2d01636bd730,4ebf0988-ccc3-440c-bd0f-2d01636bd730,0,1,69f42341-268b-4e74-9d6d-527800d018ab,69f42341-268b-4e74-9d6d-527800d018ab,0,1,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,c1be2a02-53b8-4c28-92b2-b6e0c83ab452,0,1,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,ca6ecedc-f4c5-4c14-8a02-6255ce45033a,0,1,7eb5217f-684d-4a9e-8aef-48cedc809cbb,7eb5217f-684d-4a9e-8aef-48cedc809cbb,0,1,4b54d626-dc59-4e49-a708-0a7f98833b9a,4b54d626-dc59-4e49-a708-0a7f98833b9a,0,1,1c90a423-ef1b-42dc-a43b-1fda89672481,1c90a423-ef1b-42dc-a43b-1fda89672481,0,1,095cf2d6-5a7c-452d-8d60-991afb6e52bd,095cf2d6-5a7c-452d-8d60-991afb6e52bd,0,1,2c155a03-2aff-4632-adb2-be3266e0fac3,2c155a03-2aff-4632-adb2-be3266e0fac3,0,1,f9213a70-bfd6-464f-b28b-ed35bdf351c0,f9213a70-bfd6-464f-b28b-ed35bdf351c0,0,1,eb81610a-eb2f-4068-ba74-75e0f5bbace8,eb81610a-eb2f-4068-ba74-75e0f5bbace8,0,1,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,ca5957af-69c9-4640-b9a9-b241c4f9eaa7,0,1,21826316-0b49-4034-a49e-6d34c15ceb5c,21826316-0b49-4034-a49e-6d34c15ceb5c,0,1,3abffa47-8d47-4173-897b-708e1a06ef39,3abffa47-8d47-4173-897b-708e1a06ef39,0,1,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0cf3d615-76a1-428d-9d25-0d7fdf09e4ae,0,1,5a398637-a06c-4442-9093-a864fa7f049f,5a398637-a06c-4442-9093-a864fa7f049f,0,1,38692186-a62a-42d1-87cd-7dbc6d4816ed,38692186-a62a-42d1-87cd-7dbc6d4816ed,0,1,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,6cfcdb89-ccb2-45fe-a7b1-5a29ccd6c5ae,0,1,3a28cea9-7fd7-4834-ab89-2a74331a64e3,3a28cea9-7fd7-4834-ab89-2a74331a64e3,0,1,0f881709-4520-4f18-af9d-cf08757693ff,0f881709-4520-4f18-af9d-cf08757693ff,0,1,c5151ca9-5103-42b2-8573-273c15416db8,c5151ca9-5103-42b2-8573-273c15416db8,0,1,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,fe4aa694-76c4-49c9-96ce-a2476f4ff58b,0,1,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,ba8c43ad-678a-4b18-8bbe-5a1b12d19b74,0,1,115a6019-ef87-4126-8ebf-070c1e882940,115a6019-ef87-4126-8ebf-070c1e882940,0,1,162ce023-b2e1-41dc-bcaf-b8e30caccce0,162ce023-b2e1-41dc-bcaf-b8e30caccce0,0,1,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,52bdd3cc-7103-4dbf-a3c3-dd46cf03da12,0,1,c13fb1cd-fe72-48a6-b383-55b6323619ce,c13fb1cd-fe72-48a6-b383-55b6323619ce,0,1,956fc8ee-96be-4309-b1e8-209372f151ab,956fc8ee-96be-4309-b1e8-209372f151ab,0,1,526c688e-a4d4-45f7-8bba-b8ceff38fe27,526c688e-a4d4-45f7-8bba-b8ceff38fe27,0,1,7e32c295-a769-4cff-a3eb-992f7031475f,7e32c295-a769-4cff-a3eb-992f7031475f,0,1,67efa786-312f-4c9c-b970-0320e92069af,67efa786-312f-4c9c-b970-0320e92069af,0,1,12f85e09-1190-4483-b531-630ab718db7f,12f85e09-1190-4483-b531-630ab718db7f,0,1,52f4453e-e968-4290-a79a-470f68fbd07f,52f4453e-e968-4290-a79a-470f68fbd07f,0,1,5b952e35-1037-4447-8293-6d8889692c8b,5b952e35-1037-4447-8293-6d8889692c8b,0,1,33e0072d-7d5b-4298-ae77-31a7cb358f5d,33e0072d-7d5b-4298-ae77-31a7cb358f5d,0,1,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,1051c0c7-1058-427c-8bf5-5e30b8fbfb54,0,1,b27688c3-6682-45e1-a03f-0d2e8b1214e4,b27688c3-6682-45e1-a03f-0d2e8b1214e4,0,1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,c8158812-024b-4f94-bd07-c3f1fd59e8a1,0,1,05bc8b4e-8c90-4502-8b16-7b1e7625d569,05bc8b4e-8c90-4502-8b16-7b1e7625d569,0,1,ce34d88d-3017-4197-a962-ea23a6a96d32,ce34d88d-3017-4197-a962-ea23a6a96d32,0,1,2cbc16da-aa67-4ad6-82f8-fa6922447be6,2cbc16da-aa67-4ad6-82f8-fa6922447be6,0,1,19d7a1ba-c343-4575-95da-53dac6d4b2cb,19d7a1ba-c343-4575-95da-53dac6d4b2cb,0,1,6cc8b3a0-3377-4b39-b6b0-69c862a15465,6cc8b3a0-3377-4b39-b6b0-69c862a15465,0,1,acb193f4-52e5-4572-a79b-b825a2f6525f,acb193f4-52e5-4572-a79b-b825a2f6525f,0,1,5d46f719-e468-48e2-b4ec-acb85c710451,5d46f719-e468-48e2-b4ec-acb85c710451,0,1,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,9fb13bfe-80c7-43c3-b0da-9185ab197ce2,0,1,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,cd80a520-1d1c-4d80-8a4a-360ac1ca98d8,0,1,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,e9aef0c8-9dc4-4c4a-8288-8b2d9860624d,0,1,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,7092a5d4-620b-4ad2-bce4-f099da694100,7092a5d4-620b-4ad2-bce4-f099da694100,0,1,31b3e718-d0b2-425b-b8af-67bc407eab56,31b3e718-d0b2-425b-b8af-67bc407eab56,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,9eacd816-d416-4bf9-9cc7-a62394031517,9eacd816-d416-4bf9-9cc7-a62394031517,0,1,6c055aa0-3d9f-42a0-95bb-10ad0a513b9c,6c055aa0-3d9f-42a0-95bb-10ad0a513b9c,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,c48ef5e7-61da-4613-ae8b-f39745fccd20,c48ef5e7-61da-4613-ae8b-f39745fccd20,0,1,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,a3deeef2-f8a2-462f-a57f-87d89e4ec12a,0,1,d601281c-379d-4a9d-843e-478fd6567415,d601281c-379d-4a9d-843e-478fd6567415,0,1,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,fd9b3f7d-d25d-4ecb-8b87-218d5ccf1f7b,0,1,427e6f15-334e-42be-9554-895d8f7ebfc6,427e6f15-334e-42be-9554-895d8f7ebfc6,0,1,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,e85a4314-7b63-4294-9bd0-ff77e3ae7c1e,0,1,36bc8523-41a5-48ff-9bd0-758d078c4408,36bc8523-41a5-48ff-9bd0-758d078c4408,0,1,94ca1b45-3cf0-4857-8299-999c93f4fb56,94ca1b45-3cf0-4857-8299-999c93f4fb56,0,1,ee8419c6-79ca-4546-9a66-bacaa08d2a73,ee8419c6-79ca-4546-9a66-bacaa08d2a73,0,1,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,e36ddb60-2f21-4c5f-b96c-947bcf2af42a,0,1,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,d4a0ca3b-3985-4ba2-9e96-1c5baed28b46,0,1,a915df5f-7330-4fc3-aecd-08d228b8fd23,a915df5f-7330-4fc3-aecd-08d228b8fd23,0,1,ada11ea2-94d5-4172-a383-a51774599568,ada11ea2-94d5-4172-a383-a51774599568,0,1,1ea080b0-0a11-4152-b8bb-4918bc142a23,1ea080b0-0a11-4152-b8bb-4918bc142a23,0,1,6e20df72-c643-4952-8f9c-f386d2915004,6e20df72-c643-4952-8f9c-f386d2915004,0,1,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,a21cd1c1-4649-4dc2-9dbd-a913f2d6ca75,0,1,0e5074b0-bc15-416d-9c87-dad6824186e1,0e5074b0-bc15-416d-9c87-dad6824186e1,0,1,6930e471-7935-4d68-a980-2acde93ba801,6930e471-7935-4d68-a980-2acde93ba801,0,1,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,2c425fa5-b10b-4a6f-926a-5cb4c1f2d491,0,1,5135cc48-c749-4acb-a225-d110f386f482,5135cc48-c749-4acb-a225-d110f386f482,0,1,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,15e6f31b-556a-4f47-9f40-2f69ac7fcb43,0,1,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,53c4c3b2-9257-4d02-8df8-6b55fe9abdae,0,1,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,d2dba2ae-e987-4c9d-a289-3dc19afa87cd,0,1,2e9fa546-96fb-4ecb-b933-7921e131e89b,2e9fa546-96fb-4ecb-b933-7921e131e89b,0,1,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,4645b1ad-eb8f-484c-b29c-2093d9ef9dba,0,1,637a132b-1a88-44ba-b45f-ed4ed1ac1001,637a132b-1a88-44ba-b45f-ed4ed1ac1001,0,1,699f734b-43d2-4351-bff8-e0e21e164a42,699f734b-43d2-4351-bff8-e0e21e164a42,0,1,95f0792a-7ac4-450a-b05c-219741e61abd,95f0792a-7ac4-450a-b05c-219741e61abd,0,1,742a2e8c-496e-4e02-931d-d33f7afe07a5,742a2e8c-496e-4e02-931d-d33f7afe07a5,0,1,c3efa853-cd29-4618-929f-e3bec33dfd65,c3efa853-cd29-4618-929f-e3bec33dfd65,0,1,62185c28-3d24-487a-9441-b309dcf11e31,62185c28-3d24-487a-9441-b309dcf11e31,0,1,d7a86a55-db13-4601-9bdb-c83b25ea9a51,d7a86a55-db13-4601-9bdb-c83b25ea9a51,0,1,9f264aeb-664d-4724-8248-11873d63ef3b,9f264aeb-664d-4724-8248-11873d63ef3b,0,1,b926d058-53a9-4eea-b4f9-98e77f798dd9,b926d058-53a9-4eea-b4f9-98e77f798dd9,0,1,495e2c77-4868-4191-ac18-f94e55a5982e,495e2c77-4868-4191-ac18-f94e55a5982e,0,1,20191a65-322c-457d-85f5-ed1258b6fe8e,20191a65-322c-457d-85f5-ed1258b6fe8e,0,1,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,23b46ecd-14dc-4cc5-8ff0-c676a8337aee,0,1,769c60aa-44f4-4c98-a461-d3f5c2b67f61,769c60aa-44f4-4c98-a461-d3f5c2b67f61,0,1,f9809c99-0eaa-4249-967c-a4bef4763277,f9809c99-0eaa-4249-967c-a4bef4763277,0,1,37fa88a0-f2c1-455f-a28d-74165e8b933d,37fa88a0-f2c1-455f-a28d-74165e8b933d,0,1,e4476f09-909b-49f7-8e01-72eea8ceaca6,e4476f09-909b-49f7-8e01-72eea8ceaca6,0,1,2861412c-46f0-454e-b81d-fe081afb5c7a,2861412c-46f0-454e-b81d-fe081afb5c7a,0,1,abacbda3-b4c1-446b-95e7-a45adec16174,abacbda3-b4c1-446b-95e7-a45adec16174,0,1,2b4ece05-b694-42e9-8239-55722fd84294,2b4ece05-b694-42e9-8239-55722fd84294,0,1,0d743731-da5d-4c99-b19f-e93c69b77e14,0d743731-da5d-4c99-b19f-e93c69b77e14,0,1,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,91a7a0f7-19e8-43d1-935c-e9bd1ac24d03,0,1,d6f15367-23e2-4766-bc7c-8acd0063aa0c,d6f15367-23e2-4766-bc7c-8acd0063aa0c,0,1,868da26b-f32e-48d1-a647-44dac7520d86,868da26b-f32e-48d1-a647-44dac7520d86,0,1,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,966b1bde-5b0c-446d-b38b-dc037e2ff7ad,0,1,fa4c5665-4d73-4db2-a055-8c1c8a302f82,fa4c5665-4d73-4db2-a055-8c1c8a302f82,0,1,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,e3e0caa1-6d3f-45a6-9043-d58a34f35b8f,0,1,9100b286-8ae9-4de3-b116-5ce0fa95b80c,9100b286-8ae9-4de3-b116-5ce0fa95b80c,0,1,3d315df6-e000-4cbd-810d-0b26c0d1bc54,3d315df6-e000-4cbd-810d-0b26c0d1bc54,0,1,fa429302-ccaf-4c89-8a11-3a1d30817c00,fa429302-ccaf-4c89-8a11-3a1d30817c00,0,1,9b4c49ce-93da-439a-8d67-f3774e92800a,9b4c49ce-93da-439a-8d67-f3774e92800a,0,1,5f8fa827-7017-4b45-b458-3571b8b611f5,5f8fa827-7017-4b45-b458-3571b8b611f5,0,1,79749167-2912-4e06-9deb-7915a1b4390d,79749167-2912-4e06-9deb-7915a1b4390d,0,1,1c93fcd3-53a1-403f-a30b-454fbc941d55,1c93fcd3-53a1-403f-a30b-454fbc941d55,0,1,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0fc54be4-2e19-45cf-b62f-7cbc70a70d5f,0,1,adec3963-b22f-4463-a3f4-c9ec27d187a8,adec3963-b22f-4463-a3f4-c9ec27d187a8,0,1,d8dae0c8-8e11-44bf-bf60-d316220f3e82,d8dae0c8-8e11-44bf-bf60-d316220f3e82,0,1,12afec4d-1728-4aa8-86e5-23cd2f1572b3,12afec4d-1728-4aa8-86e5-23cd2f1572b3,0,1,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,16bc197b-5a2f-43f4-8ba0-ffabd9289f5c,0,1,ee0c3960-d1bf-411f-a51f-e6e27dabea87,ee0c3960-d1bf-411f-a51f-e6e27dabea87,0,1,d7fb9441-1aef-4257-af3f-7f16340ac85e,d7fb9441-1aef-4257-af3f-7f16340ac85e,0,1,d07c094c-2795-4e0c-b030-bdb82be7ba6d,d07c094c-2795-4e0c-b030-bdb82be7ba6d,0,1,62637860-2013-4f9d-9aed-7cbb0dce8983,62637860-2013-4f9d-9aed-7cbb0dce8983,0,1,331217f6-7ec2-425d-93bd-f2979c5f2e05,331217f6-7ec2-425d-93bd-f2979c5f2e05,0,1,457578ab-dfe2-4419-8d8a-64283b341f42,457578ab-dfe2-4419-8d8a-64283b341f42,0,1,67ef6671-f537-46bf-88e6-f5bcf34a17a4,67ef6671-f537-46bf-88e6-f5bcf34a17a4,0,1,de778ca7-feaf-4531-80ae-11a534c56928,de778ca7-feaf-4531-80ae-11a534c56928,0,1,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0dfbe7a9-9c2e-4cbd-ac53-3b547fd73e91,0,1,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0a76a84d-e883-477e-8b87-7bf984cdc1cf,0,1,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,2b6c4184-6d7d-48e5-bd4e-ad31e63398d6,0,1,86df8648-e195-4661-99ee-6052788eb276,86df8648-e195-4661-99ee-6052788eb276,0,1,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,a22cf6e9-1157-4be5-8d30-aa9bbf2b5e6e,0,1,35133725-9647-42dc-a76a-2e62b2918ac4,35133725-9647-42dc-a76a-2e62b2918ac4,0,1,fa9572ee-0303-4421-9125-70cf3dd5a8c7,fa9572ee-0303-4421-9125-70cf3dd5a8c7,0,1,4cdd7920-0c49-4950-b92f-fdf6e34578b2,4cdd7920-0c49-4950-b92f-fdf6e34578b2,0,1,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0af48650-5fef-4a5b-8ac8-38a9ded23bd4,0,1,c7b883dc-6c26-4eb5-bc19-7919ad57da27,c7b883dc-6c26-4eb5-bc19-7919ad57da27,0,1,34a6b209-ceb7-44f2-8827-20d942fdd491,34a6b209-ceb7-44f2-8827-20d942fdd491,0,1,7fc37008-c378-4a70-a9a9-07543c7248a6,7fc37008-c378-4a70-a9a9-07543c7248a6,0,1,6410853e-a17e-44db-b8cc-bfefd7c4d239,6410853e-a17e-44db-b8cc-bfefd7c4d239,0,1,df042e4e-01a6-4480-a9c5-c0d7a454bb41,df042e4e-01a6-4480-a9c5-c0d7a454bb41,0,1,bad3d1fa-9618-427a-93e0-90f151e468bf,bad3d1fa-9618-427a-93e0-90f151e468bf,0,1,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,6a4972f1-012c-438b-b1d3-81e7f6da3ddd,0,1,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,ff7cfd75-e0ba-49a3-92e1-33ea26df46e2,0,1,ec7cfc56-00fd-4494-be90-49308a3c34a0,ec7cfc56-00fd-4494-be90-49308a3c34a0,0,1,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,bc37fc81-6a86-4e72-b75a-abb75bddc4b3,0,1,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,34dd0dd6-880c-4a90-9b9c-0503c8dc4ef3,0,1,719cdbdd-13b3-44fc-8739-0b788693a8d0,719cdbdd-13b3-44fc-8739-0b788693a8d0,0,1,88618d0f-97af-4055-a490-561d4b8065a7,88618d0f-97af-4055-a490-561d4b8065a7,0,1,5de9fbf9-f075-4acf-b9f9-89688d2006af,5de9fbf9-f075-4acf-b9f9-89688d2006af,0,1,faffa228-4f4f-43f6-99b9-ed8c93af85c0,faffa228-4f4f-43f6-99b9-ed8c93af85c0,0,1,7b816ca0-ba60-4637-8348-23b26ad23e3f,7b816ca0-ba60-4637-8348-23b26ad23e3f,0,1,814a6db4-a43c-44e6-ac44-11983642c5ad,814a6db4-a43c-44e6-ac44-11983642c5ad,0,1,0bd74786-e018-4a66-b994-cdb439c57657,0bd74786-e018-4a66-b994-cdb439c57657,0,1,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,f50fcf2b-90bb-4d73-9fda-f4575e7682fa,0,1,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,a01b8078-a6cd-4184-9317-2f1e0bcefb3a,0,1,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,54a279b1-9e6a-49b0-8fda-e2807cf3a2a3,0,1,09502176-c53d-4525-b8ed-32d0a2e21a5d,09502176-c53d-4525-b8ed-32d0a2e21a5d,0,1,75ad984e-d41f-4591-b207-e8a4b05757a7,75ad984e-d41f-4591-b207-e8a4b05757a7,0,1,3f020f90-7aeb-4b21-ad71-4572ac796d4c,3f020f90-7aeb-4b21-ad71-4572ac796d4c,0,1,759e2ba0-2941-4cc1-8409-50b8a3620058,759e2ba0-2941-4cc1-8409-50b8a3620058,0,1,491cf25d-091e-4e09-b145-92d7073326cf,491cf25d-091e-4e09-b145-92d7073326cf,0,1,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,9b9d4d10-a4f2-4b0d-a63a-15d55f30fb26,0,1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,579f18ce-a7ce-4eb8-a4e3-a134a9a27bc1,0,1,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,e7d05eca-2fdd-4cbb-8e2c-537525326ffe,0,1,900bc96e-fbcc-473e-970c-96f561420f8e,900bc96e-fbcc-473e-970c-96f561420f8e,0,1,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,c3bb7b85-1e90-45c4-9bc1-39bbd253d498,0,1,21d5a0b0-9a2b-4989-a50a-781645513179,21d5a0b0-9a2b-4989-a50a-781645513179,0,1,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,22df0fa4-cb1c-45a2-bcce-d32ed44e462a,0,1,d97c6204-3656-4591-aea9-6ebedffe1247,d97c6204-3656-4591-aea9-6ebedffe1247,0,1,7caabe33-184f-45db-bef4-59d4e9cd2394,7caabe33-184f-45db-bef4-59d4e9cd2394,0,1,3255033a-e922-412e-a825-a3e8bd284703,3255033a-e922-412e-a825-a3e8bd284703,0,1,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,1aa65c35-e8a0-4c8a-90a3-48b62314cb19,0,1,f250f992-ad5a-4dab-ad38-240604adb0c4,f250f992-ad5a-4dab-ad38-240604adb0c4,0,1,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,c4a7efca-f27d-4fdd-86ab-cc22a2a96fb2,0,1,e63671f6-c96d-4ea4-8300-af7dbd0d016f,e63671f6-c96d-4ea4-8300-af7dbd0d016f,0,1,2c511469-0df6-470f-a808-decb275e8b1a,2c511469-0df6-470f-a808-decb275e8b1a,0,1,1bbb289c-a78a-47d0-b082-c2225ae1dc83,1bbb289c-a78a-47d0-b082-c2225ae1dc83,0,1,99b40f9f-f8f1-4779-8afc-59d30612f3d6,99b40f9f-f8f1-4779-8afc-59d30612f3d6,0,1,6131e875-3254-4281-9343-9118564c5451,6131e875-3254-4281-9343-9118564c5451,0,1,69622ff8-8a23-42fc-b63d-5097e3f636ac,69622ff8-8a23-42fc-b63d-5097e3f636ac,0,1,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,b88450cc-0dd4-4881-b3d9-a9e4e07e08f5,0,1,ef326bd8-1570-455e-ae8c-063b5578ad15,ef326bd8-1570-455e-ae8c-063b5578ad15,0,1,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,3713c76d-6ff7-4d45-9f15-d061bdf7dee2,0,1,cb6d4979-2d70-4ceb-af08-deb2b19daf14,cb6d4979-2d70-4ceb-af08-deb2b19daf14,0,1,7bbd0835-b3e9-40cb-a424-670828b60bbb,7bbd0835-b3e9-40cb-a424-670828b60bbb,0,1,3e2138ea-48f9-4a60-8f22-53933bea49db,3e2138ea-48f9-4a60-8f22-53933bea49db,0,1,16bda2eb-eab8-4230-b89f-517fb943e009,16bda2eb-eab8-4230-b89f-517fb943e009,0,1,00964512-297f-4b8b-8def-8e4fc0eba991,00964512-297f-4b8b-8def-8e4fc0eba991,0,1,4185fea3-baba-4ba5-8019-9023b3011d4d,4185fea3-baba-4ba5-8019-9023b3011d4d,0,1,ea790035-92d6-445e-9fa3-08e565634d2b,ea790035-92d6-445e-9fa3-08e565634d2b,0,1,cce8900a-51eb-487d-b380-227d1b9d3943,cce8900a-51eb-487d-b380-227d1b9d3943,0,1,c043c36c-90c6-483b-bc20-7c2d85109b90,c043c36c-90c6-483b-bc20-7c2d85109b90,0,1,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,a1e619a6-3bb2-468d-a225-c88ccc3b71f5,0,1,91d2d40a-c271-412c-b344-1fc98b94ba21,91d2d40a-c271-412c-b344-1fc98b94ba21,0,1,7ce47046-aee8-4809-bac9-a98930a844e1,7ce47046-aee8-4809-bac9-a98930a844e1,0,1,f480b8b9-ecec-4207-a0aa-12c5be4c2250,f480b8b9-ecec-4207-a0aa-12c5be4c2250,0,1,32717d25-6644-4903-8950-03e4c9b1a8fe,32717d25-6644-4903-8950-03e4c9b1a8fe,0,1,3644d8f3-db88-4fce-a851-39c115acfe03,3644d8f3-db88-4fce-a851-39c115acfe03,0,1,837e4559-2f2d-48e9-a03b-2d52b25569ec,837e4559-2f2d-48e9-a03b-2d52b25569ec,0,1,4653da74-34b2-47b9-ad88-efd761d6f1e9,4653da74-34b2-47b9-ad88-efd761d6f1e9,0,1,b0cd056f-c601-4d07-89c4-f7137b88bab6,b0cd056f-c601-4d07-89c4-f7137b88bab6,0,1,3660618a-0cab-458f-b448-867c4d1aba1b,3660618a-0cab-458f-b448-867c4d1aba1b,0,1,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,5cc3ebef-8f09-443c-b131-e5c3a9f7d260,0,1,22f34fd5-4bda-48c1-8772-74d9c6479a30,22f34fd5-4bda-48c1-8772-74d9c6479a30,0,1,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,b9a21b8f-8a95-4c86-9ab2-ee6c90164e18,0,1,96ed4d39-3bdc-480f-af86-218f22000514,96ed4d39-3bdc-480f-af86-218f22000514,0,1,c9f72e74-22ac-4dc0-8462-0aa7819a9342,c9f72e74-22ac-4dc0-8462-0aa7819a9342,0,1,ca650484-293f-403a-b916-5ec7c3a8969e,ca650484-293f-403a-b916-5ec7c3a8969e,0,1,b71e706d-623e-4039-9bf0-24f151d861d8,b71e706d-623e-4039-9bf0-24f151d861d8,0,1,528f4823-33d8-49bd-a8fe-756a08a107c2,528f4823-33d8-49bd-a8fe-756a08a107c2,0,1,4869095b-b76e-45ca-b77d-0e74f59673f0,4869095b-b76e-45ca-b77d-0e74f59673f0,0,1,bcca2442-448b-4760-923b-cc9621ecb441,bcca2442-448b-4760-923b-cc9621ecb441,0,1,ba7657df-429a-4737-b787-19ef09fdebb2,ba7657df-429a-4737-b787-19ef09fdebb2,0,1,867d72be-f406-45a5-a511-b90459683f11,867d72be-f406-45a5-a511-b90459683f11,0,1,88b22e62-c144-401f-9635-3fb4d914772e,88b22e62-c144-401f-9635-3fb4d914772e,0,1,efeb2914-6604-403a-a11e-5cb995ab2bc9,efeb2914-6604-403a-a11e-5cb995ab2bc9,0,1,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,4c2dd77f-adc7-4f11-8e8f-1f8e41e6c84b,0,1,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,8f2b8a8e-4cd3-45e3-89ae-1cc4bd0ff30a,0,1,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,24b3aecc-f92f-475b-862e-83dd6d6aa2b9,0,1,de506523-241a-4845-9259-37066afbf16a,de506523-241a-4845-9259-37066afbf16a,0,1,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0510206f-eef0-4a5e-aeb7-d53c26d34adb,0,1,e616e007-43e7-4740-a083-b85f5435718a,e616e007-43e7-4740-a083-b85f5435718a,0,1,727da5b1-e054-4832-8e44-f5d5e56f52e5,727da5b1-e054-4832-8e44-f5d5e56f52e5,0,1,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,6135ffd5-1510-4aa8-8bf5-d7c0ca624414,0,1,6feaad7c-9680-4341-b215-14581e2e2b37,6feaad7c-9680-4341-b215-14581e2e2b37,0,1,d5656a92-adfb-4733-830d-2b1565798b1f,d5656a92-adfb-4733-830d-2b1565798b1f,0,1,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,2ee0d56b-cd7c-42db-8fb6-c1567fe1967d,0,1,b0f6ea83-2849-4151-930d-692866919db3,b0f6ea83-2849-4151-930d-692866919db3,0,1,05558ce4-8568-4009-b1d7-307d54967515,05558ce4-8568-4009-b1d7-307d54967515,0,1,74380324-9b7b-49f6-9458-88deb9405f98,74380324-9b7b-49f6-9458-88deb9405f98,0,1,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,5286ceb2-0f16-4d70-ad89-dc15a308bb8d,0,1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0abf70e0-0d81-4d85-a288-a2134da5fbf1,0,1,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,392fc734-4251-4d28-bfd1-d6f2f33ec0e5,0,1,f66cb2da-3b3c-481f-823a-506f8290f619,f66cb2da-3b3c-481f-823a-506f8290f619,0,1,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,b80ddaf8-c5c3-4bde-98ed-74a1a0446f38,0,1,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,e4f16dbf-609d-4a34-a0bf-b20e5925c1ba,0,1,0bdcf045-5132-4a68-839c-a30515dc569e,0bdcf045-5132-4a68-839c-a30515dc569e,0,1,683861f9-9a5f-47db-8b03-959f839d5a3a,683861f9-9a5f-47db-8b03-959f839d5a3a,0,1,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,56fda0b0-c0ae-4ea2-8f77-df22a9ca3e87,0,1,125be5bf-f410-451d-aa96-22fabc6a4d8a,125be5bf-f410-451d-aa96-22fabc6a4d8a,0,1,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,e5017fd0-ecea-48ae-99c8-7fc8c4f1d72b,0,1,0a46166a-4562-4a50-b139-39dbe8a1fc84,0a46166a-4562-4a50-b139-39dbe8a1fc84,0,1,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,9aa6d1d1-75ad-40e4-b01f-274826c0c9da,0,1,6ce64d65-f710-4d3f-a85f-26ce6915451e,6ce64d65-f710-4d3f-a85f-26ce6915451e,0,1,33eb9806-e34f-42a0-9825-3ff2de92c503,33eb9806-e34f-42a0-9825-3ff2de92c503,0,1,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,4905fcc5-9bd7-4b1b-b51d-882b11ee3d74,0,1,bcb58235-7cd7-4c15-a1eb-194ee38259e6,bcb58235-7cd7-4c15-a1eb-194ee38259e6,0,1,e19aefe7-634d-4218-8d40-75802d1691e0,e19aefe7-634d-4218-8d40-75802d1691e0,0,1,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,ce2a8ff8-94fd-4ce2-9caa-4711e9b79ee9,0,1,f942d212-9be0-4d80-84b6-5b63070e33e4,f942d212-9be0-4d80-84b6-5b63070e33e4,0,1,64c91eaa-084f-4801-8dbf-4e075c689c2b,64c91eaa-084f-4801-8dbf-4e075c689c2b,0,1,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,c01bb4de-06f7-4c3d-8ea3-d861f89948c0,0,1,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,3c8c4f7b-d267-422c-becd-b6e8a9d6fe49,0,1,3aa12805-823a-439b-b039-fb9940aee312,3aa12805-823a-439b-b039-fb9940aee312,0,1,87d53573-f266-4b74-94af-041ae4b6518f,87d53573-f266-4b74-94af-041ae4b6518f,0,1,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,65a8545a-e73c-4c6a-8f87-7734d7ff5c03,0,1,801cf1f7-2c65-4126-a3e9-b66abfdde67a,801cf1f7-2c65-4126-a3e9-b66abfdde67a,0,1,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,b991eefb-0d97-48a1-89c8-3d83b3b8d97a,0,1,29c2bc01-8838-4459-8ac2-79862aa1dbc9,29c2bc01-8838-4459-8ac2-79862aa1dbc9,0,1,ad556c33-6811-48b4-ae90-57700a4d3fd6,ad556c33-6811-48b4-ae90-57700a4d3fd6,0,1,6e0833f4-3b57-4a5f-810f-9e2a492335df,6e0833f4-3b57-4a5f-810f-9e2a492335df,0,1,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,78ccdf33-9c2b-4931-afa3-5d652f2bcbc5,0,1,977bc9d8-9843-4343-85af-11a3d91f9966,977bc9d8-9843-4343-85af-11a3d91f9966,0,1,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,02ff9ef0-1057-4bc2-b745-1c2ae41835e3,0,1,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,5a86abe7-db6c-43a3-9bcd-9b3647519c6b,0,1,a6582448-734d-4a4c-a32c-c4755ca1bc93,a6582448-734d-4a4c-a32c-c4755ca1bc93,0,1,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,6a0b9a91-51a0-4ef4-b630-4f1b5a1da2b7,0,1,53327cc4-22b0-40f9-bae7-db483f85901c,53327cc4-22b0-40f9-bae7-db483f85901c,0,1,d826fe6f-d9f6-41f2-8dd6-bd840af25183,d826fe6f-d9f6-41f2-8dd6-bd840af25183,0,1,098d904d-95c9-459e-86d0-357ba9a40191,098d904d-95c9-459e-86d0-357ba9a40191,0,1,2d58033f-e15d-4a91-8165-dd311025c7c4,2d58033f-e15d-4a91-8165-dd311025c7c4,0,1,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,5e6a6f8f-5cb1-475d-b2d8-f2f143ef7b19,0,1,49cb3a36-90b3-4154-b571-265fc5cee21e,49cb3a36-90b3-4154-b571-265fc5cee21e,0,1,7bc5fa42-7d72-433e-8db6-a046b583a316,7bc5fa42-7d72-433e-8db6-a046b583a316,0,1,10472d2c-18ca-49b0-bd9d-c750db8498c5,10472d2c-18ca-49b0-bd9d-c750db8498c5,0,1,8efe5daf-272d-4255-b5c4-66dca7463b50,8efe5daf-272d-4255-b5c4-66dca7463b50,0,1,65af25a6-f699-4c40-b13e-3b7dff3f16fe,65af25a6-f699-4c40-b13e-3b7dff3f16fe,0,1,c4d2486d-289c-4812-b223-5ccfcd7f29e3,c4d2486d-289c-4812-b223-5ccfcd7f29e3,0,1,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,b6ae3a72-c686-409d-9cda-9d1a00be1d8d,0,1,7da57c89-af2c-445a-96f7-39250f70306f,7da57c89-af2c-445a-96f7-39250f70306f,0,1,b5b94d94-25f7-4cfa-b1e9-6009fb848763,b5b94d94-25f7-4cfa-b1e9-6009fb848763,0,1,a2accf54-5966-42e8-ab2e-e56e415963ee,a2accf54-5966-42e8-ab2e-e56e415963ee,0,1,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,6d521e58-24a3-4f19-b4b0-dff84f7ca86b,0,1,d8eb5329-5900-4b5d-b45e-458513dddfef,d8eb5329-5900-4b5d-b45e-458513dddfef,0,1,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,d5afea8a-1b7a-4b23-8ae0-cefa0b937b17,0,1,6ffd2da8-db97-46fc-9a53-8e665a598e3c,6ffd2da8-db97-46fc-9a53-8e665a598e3c,0,1,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,8c413fa5-9e24-4b81-aa55-0e78c5e3e20f,0,1,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,a4322f22-7de0-4018-8e06-9f1aa7cf0c07,0,1,eaaed107-69d4-4963-be83-74519e331715,eaaed107-69d4-4963-be83-74519e331715,0,1,38cddf96-8703-4396-8c73-47fb22828a48,38cddf96-8703-4396-8c73-47fb22828a48,0,1,2c2cb793-0177-4983-91ca-9c292c5b10f1,2c2cb793-0177-4983-91ca-9c292c5b10f1,0,1,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,2a2e7f51-a4e5-48ec-b969-b1fca18ba9b5,0,1,221fa473-3327-44e6-a033-6fdfd2be713c,221fa473-3327-44e6-a033-6fdfd2be713c,0,1,7a5973f0-7e29-44af-8e7b-70af71f704a4,7a5973f0-7e29-44af-8e7b-70af71f704a4,0,1,27089e8e-2c75-431c-b808-5d4dcba3cdca,27089e8e-2c75-431c-b808-5d4dcba3cdca,0,1,9ab3980e-a480-4f90-a8cc-bde99d5ace35,9ab3980e-a480-4f90-a8cc-bde99d5ace35,0,1,ec928563-6e35-4b84-b477-90d2481cec1c,ec928563-6e35-4b84-b477-90d2481cec1c,0,1,5d3e9678-20fe-4128-867a-3f7addaa7831,5d3e9678-20fe-4128-867a-3f7addaa7831,0,1,bb878f73-8a0f-459a-9076-ce57fe7957dc,bb878f73-8a0f-459a-9076-ce57fe7957dc,0,1,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,a2b4110b-4d9c-40fd-ab46-bfa08d2eb993,0,1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,4f262b7f-927e-45f2-ad90-9d5e1b3155d1,0,1,9f4b8e36-83ff-4694-8540-b5f47b18395f,9f4b8e36-83ff-4694-8540-b5f47b18395f,0,1,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,b99f2a63-54e8-490b-a0a4-1941fbc38b3f,0,1,314b0da2-24d3-48cc-8532-d36c45eb3bf8,314b0da2-24d3-48cc-8532-d36c45eb3bf8,0,1,4077e700-ec20-4afa-8155-bf7e516a70cb,4077e700-ec20-4afa-8155-bf7e516a70cb,0,1,10008125-3aeb-4912-8ad6-d92d283ea09a,10008125-3aeb-4912-8ad6-d92d283ea09a,0,1,d22a0a50-220d-459e-a23a-39730a1e67c4,d22a0a50-220d-459e-a23a-39730a1e67c4,0,1,dd050ca0-8335-4654-ab5c-7babcb4824ef,dd050ca0-8335-4654-ab5c-7babcb4824ef,0,1,706cbf55-626d-4cab-b589-a2464368f6c1,706cbf55-626d-4cab-b589-a2464368f6c1,0,1,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,2e3ac3fb-9f0e-463f-95c2-9f661ce2e015,0,1,483dfce4-9c66-4739-94d4-17a005d64f5b,483dfce4-9c66-4739-94d4-17a005d64f5b,0,1,19506116-43ef-433c-822c-ef8717b0da6b,19506116-43ef-433c-822c-ef8717b0da6b,0,1,464b92cc-b577-4350-ae9f-e697390248d7,464b92cc-b577-4350-ae9f-e697390248d7,0,1,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,5a1242c8-3817-4d2c-9bfd-f62a6b80730c,0,1,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,b9be6caf-e5e0-45a9-8cc8-3c83721632a2,0,1,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,6f0caeb0-34ce-489c-86c4-c16d85320fa3,6f0caeb0-34ce-489c-86c4-c16d85320fa3,0,1,4c49914c-e472-46f8-8c5e-5e38138eb301,4c49914c-e472-46f8-8c5e-5e38138eb301,0,1,81d4ea48-8704-494d-8cd2-51f2dd1190bc,81d4ea48-8704-494d-8cd2-51f2dd1190bc,0,1,9c196011-1485-4fa5-bb05-a9dbe768e8a7,9c196011-1485-4fa5-bb05-a9dbe768e8a7,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,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,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,fb6b9985-3ef7-42e5-9f3a-d4499072ba3d,fb6b9985-3ef7-42e5-9f3a-d4499072ba3d,0,1,04ec4cb1-bab2-4bdd-b119-86540947b0ef,04ec4cb1-bab2-4bdd-b119-86540947b0ef,0,1,e93157d3-3a87-4f54-be95-d2d254c58349,e93157d3-3a87-4f54-be95-d2d254c58349,0,1,a8c1f22e-2589-4c02-93cf-8d88ef511ace,a8c1f22e-2589-4c02-93cf-8d88ef511ace,0,1,65524236-f087-4932-85b1-b92b1d573100,65524236-f087-4932-85b1-b92b1d573100,0,1,2f54f6d5-9d57-450b-a386-e917b5e46b0c,2f54f6d5-9d57-450b-a386-e917b5e46b0c,0,1,efea06e5-0e0b-4a16-9cf4-259ce36fe34e,efea06e5-0e0b-4a16-9cf4-259ce36fe34e,0,1,5158b2ed-124b-4b4f-ae2d-36bf059737a4,5158b2ed-124b-4b4f-ae2d-36bf059737a4,0,1,b7c40101-60b7-4c36-abcd-38101bc8b7d8,b7c40101-60b7-4c36-abcd-38101bc8b7d8,0,1,a4a9535b-b8a6-4d94-97e7-e28d795268ad,a4a9535b-b8a6-4d94-97e7-e28d795268ad,0,1,a4a23aa7-ccd2-49f9-ac3b-1257e9bdd300,a4a23aa7-ccd2-49f9-ac3b-1257e9bdd300,0,1,b6845833-530b-43b3-8715-f88b092d83bc,b6845833-530b-43b3-8715-f88b092d83bc,0,1,d2854e39-4157-45f3-a992-4d161c38b1da,d2854e39-4157-45f3-a992-4d161c38b1da,0,1,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,f2e9f4e7-913f-45a4-8318-4792b056749f,f2e9f4e7-913f-45a4-8318-4792b056749f,0,1,458e9c6b-b828-404b-be5a-c6c0aeea34c9,458e9c6b-b828-404b-be5a-c6c0aeea34c9,0,1,7262eb4d-2d2d-454c-beaa-974645813af7,7262eb4d-2d2d-454c-beaa-974645813af7,0,1,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,45fa9f17-eeb1-43e2-b78c-f81a341f1bff,0,1,b2265070-9cd3-4176-92c8-6d9f32c2ca84,b2265070-9cd3-4176-92c8-6d9f32c2ca84,0,1,b347e774-2261-4f76-9bdb-3c6736983589,b347e774-2261-4f76-9bdb-3c6736983589,0,1,be7e2715-1243-49a8-8c7c-55d632d3cf6c,be7e2715-1243-49a8-8c7c-55d632d3cf6c,0,1,49221b2f-aae2-4bee-9a1a-18263fc74244,49221b2f-aae2-4bee-9a1a-18263fc74244,0,1,da0cd264-da2f-4044-af28-c91d2efe1d5c,da0cd264-da2f-4044-af28-c91d2efe1d5c,0,1,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,f1b1db38-2d9f-4409-a6d6-fd7192b1f102,0,1,1e44abfe-c173-4802-b535-96849d384983,1e44abfe-c173-4802-b535-96849d384983,0,1,2751a509-037b-49aa-9ca8-e87057d6d82c,2751a509-037b-49aa-9ca8-e87057d6d82c,0,1,35f62549-eb6a-4284-a6e3-406b0d9df0cf,35f62549-eb6a-4284-a6e3-406b0d9df0cf,0,1,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,cee94c04-7a46-47a5-bdd5-6f0dbd884e97,0,1,fd66995b-ee76-41d3-983f-33d84bdcbbd4,fd66995b-ee76-41d3-983f-33d84bdcbbd4,0,1,73e97918-b34e-4ad2-8591-4c219eb92f2c,73e97918-b34e-4ad2-8591-4c219eb92f2c,0,1,445cf7eb-35d0-48f8-9579-c2ec574ef324,445cf7eb-35d0-48f8-9579-c2ec574ef324,0,1,1025657e-afd2-4c7b-96d5-ccbedaca4619,1025657e-afd2-4c7b-96d5-ccbedaca4619,0,1,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,64839c78-b2fa-4d80-bee0-b3d3a7e5db35,0,1,e754ad5c-cf3c-4198-af81-128475924cb0,e754ad5c-cf3c-4198-af81-128475924cb0,0,1,ed65d504-b210-4014-85ec-275ad633ef04,ed65d504-b210-4014-85ec-275ad633ef04,0,1,dc31edb1-273e-4b1a-8e69-32393479ff36,dc31edb1-273e-4b1a-8e69-32393479ff36,0,1,46169f0b-8514-40a1-9d27-8489cab72503,46169f0b-8514-40a1-9d27-8489cab72503,0,1,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,d9cf39cc-8652-4c4d-bc5b-b4e455c0083f,0,1,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,4b0d7d39-5f79-4a21-b0bb-d3142a3bc8a9,0,1,c90243af-582c-4f5a-88e7-e0cbc0555fcb,c90243af-582c-4f5a-88e7-e0cbc0555fcb,0,1,14bf4066-15cb-4165-b854-45443ee27da1,14bf4066-15cb-4165-b854-45443ee27da1,0,1,c35904cf-4954-434e-96fd-5ca537a88c66,c35904cf-4954-434e-96fd-5ca537a88c66,0,1,5545798f-72dc-4630-a5ba-88039f4bfe3c,5545798f-72dc-4630-a5ba-88039f4bfe3c,0,1,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,f293ac4b-91ed-4c97-90b3-bfe98c983a0f,0,1,4427cab9-4eea-4415-98ef-6021a447c60c,4427cab9-4eea-4415-98ef-6021a447c60c,0,1,fe46b4da-d865-468f-badd-83644bf88faa,fe46b4da-d865-468f-badd-83644bf88faa,0,1,2851c9d4-4366-4488-926d-a7fcd3b1548c,2851c9d4-4366-4488-926d-a7fcd3b1548c,0,1,31116aa2-cfbc-48e8-886b-45c1c17508fd,31116aa2-cfbc-48e8-886b-45c1c17508fd,0,1,6aa819d3-c56d-4561-a2e4-a1188ab1295a,6aa819d3-c56d-4561-a2e4-a1188ab1295a,0,1,2ddf344d-7065-40d5-9306-23870d8fc04a,2ddf344d-7065-40d5-9306-23870d8fc04a,0,1,c630ab2d-0a20-4136-88b6-220b2cad6a71,c630ab2d-0a20-4136-88b6-220b2cad6a71,0,1,00cd1dea-bc54-475c-956d-dc5221104932,00cd1dea-bc54-475c-956d-dc5221104932,0,1,1c38ad75-b294-4c05-89ce-69ce4d9a291f,1c38ad75-b294-4c05-89ce-69ce4d9a291f,0,1,078d1e8f-6d27-4761-9532-b1e7a60e4c13,078d1e8f-6d27-4761-9532-b1e7a60e4c13,0,1,4262193c-58ad-47c6-8088-735d8cd037ea,4262193c-58ad-47c6-8088-735d8cd037ea,0,1,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,36a2b5f9-ded5-4fc3-a7bd-e12b37cd6bab,0,1,de6d1aad-39eb-46ce-87aa-d29812bb37bf,de6d1aad-39eb-46ce-87aa-d29812bb37bf,0,1,4ad859ec-cc75-4bac-9e89-397798450e48,4ad859ec-cc75-4bac-9e89-397798450e48,0,1,d93ab94c-0f55-4b80-b226-41b44c73b3ea,d93ab94c-0f55-4b80-b226-41b44c73b3ea,0,1,94cbed80-5a35-471f-b354-439a11629210,94cbed80-5a35-471f-b354-439a11629210,0,1,1162cc0a-42e5-47cb-9507-68459579f110,1162cc0a-42e5-47cb-9507-68459579f110,0,1,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,17f9f188-d3fd-4fe1-a00c-b0dde64a0f9e,0,1,bb49dc80-4934-4f44-8f27-9a363dca8dc4,bb49dc80-4934-4f44-8f27-9a363dca8dc4,0,1,7338e497-03a7-4ed4-85a2-ca802c065a9f,7338e497-03a7-4ed4-85a2-ca802c065a9f,0,1,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,49fe879c-8972-4c9a-bb08-e3e5b2e5ff84,0,1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,5249687b-9ff4-46f5-be15-dbb5d5047fd1,0,1,d33df51c-3dcd-496c-90f2-7ee05582bdf7,d33df51c-3dcd-496c-90f2-7ee05582bdf7,0,1,24b39ebd-2424-4939-8e3e-d09eb674d409,24b39ebd-2424-4939-8e3e-d09eb674d409,0,1,08c751bb-9e57-4536-901e-bb316c8e96d7,08c751bb-9e57-4536-901e-bb316c8e96d7,0,1,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,de0afa6f-07c6-441c-a4ca-e7ed709a8da5,0,1,034cdcef-08e5-4751-9885-400aa69e0b94,034cdcef-08e5-4751-9885-400aa69e0b94,0,1,efefebea-2032-4006-b9ca-50a23b7da1ef,efefebea-2032-4006-b9ca-50a23b7da1ef,0,1,4c794d37-3352-4acb-a939-5e90fb682db8,4c794d37-3352-4acb-a939-5e90fb682db8,0,1,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,5f3fea83-6ca8-481b-9e2b-789a6fd01e2e,0,1,008f5068-da9c-4dac-9c0a-a50366d27cbb,008f5068-da9c-4dac-9c0a-a50366d27cbb,0,1,a23e6c77-8c12-4f99-ae2d-68a12274be38,a23e6c77-8c12-4f99-ae2d-68a12274be38,0,1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,3c4454cd-31e9-42a5-9127-fb66a628f0e1,0,1,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,c02c5cbf-b25a-4956-8aa7-74cfeb66d508,0,1,6e61d717-de36-4dce-8af9-b6c14ed76acb,6e61d717-de36-4dce-8af9-b6c14ed76acb,0,1,474518fe-9cb5-4a12-9388-bc7a64511617,474518fe-9cb5-4a12-9388-bc7a64511617,0,1,64337614-b1c9-4931-b576-448721fa4602,64337614-b1c9-4931-b576-448721fa4602,0,1,1d73b59c-0594-4ed3-b584-cf1261941e1d,1d73b59c-0594-4ed3-b584-cf1261941e1d,0,1,8ff2547f-d596-4fa1-9e12-079e1cc4c057,8ff2547f-d596-4fa1-9e12-079e1cc4c057,0,1,1ab0c8f8-b908-4618-ae88-af37b8f1224e,1ab0c8f8-b908-4618-ae88-af37b8f1224e,0,1,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,bd3ec5a9-161d-487e-ab1d-e5e15a6e3a7b,0,1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,b85b3a58-95e4-4698-b1ae-037901ecc1b1,0,1,b77d748a-d180-432d-91c3-774e6ccf7efa,b77d748a-d180-432d-91c3-774e6ccf7efa,0,1,e5b9c1b0-4690-442c-b160-e6c587e42e57,e5b9c1b0-4690-442c-b160-e6c587e42e57,0,1,118a0e62-c0bb-435b-9e3e-c64563efa602,118a0e62-c0bb-435b-9e3e-c64563efa602,0,1,b57bc8a9-8a59-4192-a442-2e1982e83179,b57bc8a9-8a59-4192-a442-2e1982e83179,0,1,5b06ccda-2a70-4621-8273-78408cbe72a9,5b06ccda-2a70-4621-8273-78408cbe72a9,0,1,89753385-64fd-4e76-9857-bfd5d7c23f71,89753385-64fd-4e76-9857-bfd5d7c23f71,0,1,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,1b3113f3-e7d4-4e6f-b6ed-08f5fd78c68e,0,1,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,bb7ce04a-8143-4c0b-a196-1b57f1640142,bb7ce04a-8143-4c0b-a196-1b57f1640142,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,475f76ea-f494-41f1-9b65-f39907e5a427,475f76ea-f494-41f1-9b65-f39907e5a427,0,1,986280d1-41bb-4b15-a5ae-516d6a04c1f4,986280d1-41bb-4b15-a5ae-516d6a04c1f4,0,1,43bfd29a-d254-4c33-8639-200b483578c1,43bfd29a-d254-4c33-8639-200b483578c1,0,1,6a274167-7f80-4613-9890-259ffd8ccfc4,6a274167-7f80-4613-9890-259ffd8ccfc4,0,1,4e90e1ab-b1ec-4795-ad45-1db151a5492c,4e90e1ab-b1ec-4795-ad45-1db151a5492c,0,1,91791e56-ca80-4d90-b8a8-16145f6a9721,91791e56-ca80-4d90-b8a8-16145f6a9721,0,1,b242c6a2-5ac9-4edb-b5dd-24eda8162151,b242c6a2-5ac9-4edb-b5dd-24eda8162151,0,1,8d080f3c-06ed-48bf-9709-eea73d676741,8d080f3c-06ed-48bf-9709-eea73d676741,0,1,57b31a5d-9fdc-43d2-ae81-67157822c4b6,57b31a5d-9fdc-43d2-ae81-67157822c4b6,0,1,d4e2da66-9a70-459f-a873-cb4ad71d17b2,d4e2da66-9a70-459f-a873-cb4ad71d17b2,0,1,a84a91d2-d326-4bf4-82e6-d573ee35d090,a84a91d2-d326-4bf4-82e6-d573ee35d090,0,1,39cbda23-db3f-4ddd-8981-8540247406db,39cbda23-db3f-4ddd-8981-8540247406db,0,1,c8a18d99-62ff-45a4-acb5-48e3310c1b53,c8a18d99-62ff-45a4-acb5-48e3310c1b53,0,1,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,a6eb0cb1-80f0-4390-80ff-7af53f8e63c3,0,1,3500c6fa-813a-49dd-a4bf-163500db5b7f,3500c6fa-813a-49dd-a4bf-163500db5b7f,0,1,1d02493a-dd89-4a51-b75e-9c49f9818b95,1d02493a-dd89-4a51-b75e-9c49f9818b95,0,1,2845c5d1-e836-4499-bcae-f3c8fdae75ee,2845c5d1-e836-4499-bcae-f3c8fdae75ee,0,1,fe4e8e4e-9471-4583-b9b3-576007db08ee,fe4e8e4e-9471-4583-b9b3-576007db08ee,0,1,49deaaa8-6d50-4b25-8153-6712d88fb0fb,49deaaa8-6d50-4b25-8153-6712d88fb0fb,0,1,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,1eeb7634-e924-4ad8-92e0-1c54c22b1ba6,0,1,46a06de8-06fd-4b49-835f-4f24b832b3c4,46a06de8-06fd-4b49-835f-4f24b832b3c4,0,1,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,972c2fa0-0ca9-40da-a8c1-a06b81bd0bcf,0,1,3845a567-4375-4c3a-af61-5b82674060ab,3845a567-4375-4c3a-af61-5b82674060ab,0,1,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,ab210fb8-4fc4-47f8-b8ef-3a00eeb0ab8b,0,1,a835a3a7-989b-4247-b836-d23bba2f391a,a835a3a7-989b-4247-b836-d23bba2f391a,0,1,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,58f5c354-8f1d-4064-ba35-527ea3d2f4a9,0,1,9b149c20-9328-4e2d-a34b-95c883ae4dcc,9b149c20-9328-4e2d-a34b-95c883ae4dcc,0,1,f8dbf226-ea56-4b15-baf1-a41fceba2a32,f8dbf226-ea56-4b15-baf1-a41fceba2a32,0,1,fc1476f7-26e6-4374-b99b-e515d86c050a,fc1476f7-26e6-4374-b99b-e515d86c050a,0,1,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,e0eb7b4a-9a13-4752-9327-e13d2abc4fc5,0,1,59fe985a-f169-495b-bd6d-4b64401f81b0,59fe985a-f169-495b-bd6d-4b64401f81b0,0,1,184d1023-fba9-4e56-b592-519254abe922,184d1023-fba9-4e56-b592-519254abe922,0,1,cb68b275-f191-4632-a8ea-aa8809256804,cb68b275-f191-4632-a8ea-aa8809256804,0,1,174011b9-8fe2-43f5-adea-21f6d73835ff,174011b9-8fe2-43f5-adea-21f6d73835ff,0,1,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,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,c4a5c44d-329d-41b5-9a6c-bddbc15f6249,0,1,9767a113-5a42-4749-bf40-0f349e85615d,9767a113-5a42-4749-bf40-0f349e85615d,0,1,a3b0494c-f436-45ea-9577-4c0c86b057c9,a3b0494c-f436-45ea-9577-4c0c86b057c9,0,1,5101c142-b25c-4bef-80e7-7407f2c15c90,5101c142-b25c-4bef-80e7-7407f2c15c90,0,1,6d7872f1-fd54-41c4-8253-5f2b125f31ae,6d7872f1-fd54-41c4-8253-5f2b125f31ae,0,1,0c218200-27a8-4f71-9b09-3632dd453644,0c218200-27a8-4f71-9b09-3632dd453644,0,1,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,2d8a74e5-eb29-448b-b4c0-1f41fa171b5e,0,1,b5d30250-18ab-4af1-b99a-ff5dba334d1f,b5d30250-18ab-4af1-b99a-ff5dba334d1f,0,1,936f1aa5-7516-444b-b451-1162fa5d705f,936f1aa5-7516-444b-b451-1162fa5d705f,0,1,e8d5533e-2669-44f6-9eed-eaedab666d42,e8d5533e-2669-44f6-9eed-eaedab666d42,0,1,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,dd8e0f41-51a3-4bf2-a32e-084f9ad09be7,0,1,9e323b0d-4e3b-45d4-9705-aa30e63014f5,9e323b0d-4e3b-45d4-9705-aa30e63014f5,0,1,5afa798a-958e-4e0c-a380-0104f4c037a7,5afa798a-958e-4e0c-a380-0104f4c037a7,0,1,c0295fd9-c749-41b3-8d0d-6af16f484b1f,c0295fd9-c749-41b3-8d0d-6af16f484b1f,0,1,bd32a863-3090-432d-89c4-356ba86a0bdc,bd32a863-3090-432d-89c4-356ba86a0bdc,0,1,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,4621bf5a-46b5-4b82-8ae4-cc8e11e81ba0,0,1,ed5465b4-a556-4078-ab18-49fef2afba2e,ed5465b4-a556-4078-ab18-49fef2afba2e,0,1,7368ab8f-59d5-4270-a43b-0f3e422169ed,7368ab8f-59d5-4270-a43b-0f3e422169ed,0,1,eeb0571b-1b74-4889-b8b5-f94186d692d7,eeb0571b-1b74-4889-b8b5-f94186d692d7,0,1,9ef3b72c-caa3-486b-9917-04c00f6689c1,9ef3b72c-caa3-486b-9917-04c00f6689c1,0,1,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,cb3039d8-4b11-4d03-b0ca-eae5dfc01b0a,0,1,9245417f-f247-47ba-a1b4-a17ec2e8776c,9245417f-f247-47ba-a1b4-a17ec2e8776c,0,1,a4b721d7-b119-47eb-80e0-7db34c83964f,a4b721d7-b119-47eb-80e0-7db34c83964f,0,1,512629d1-e8b7-4f66-b613-b8c0cb9c250b,512629d1-e8b7-4f66-b613-b8c0cb9c250b,0,1,b7cf4684-4432-4658-9c06-b315d470a3a6,b7cf4684-4432-4658-9c06-b315d470a3a6,0,1,d3bc8211-54d8-47dd-aecf-5da72b65195f,d3bc8211-54d8-47dd-aecf-5da72b65195f,0,1,33f11da8-f670-4ec3-9d40-96fce031c60f,33f11da8-f670-4ec3-9d40-96fce031c60f,0,1,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,97cbd5b5-5a39-418c-93b5-f9934fa1ba4e,0,1,f74c2d41-2433-4bed-8aef-adfeed198252,f74c2d41-2433-4bed-8aef-adfeed198252,0,1,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,3c2b8a8a-bfe7-4e37-9d83-55a695a06605,0,1,56c9703a-751a-4e6c-81f4-a8756fb040e3,56c9703a-751a-4e6c-81f4-a8756fb040e3,0,1,c3a86eec-1ff5-4392-9904-91a12a2e253a,c3a86eec-1ff5-4392-9904-91a12a2e253a,0,1,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,f5df72a3-c71c-412b-8c3e-6329f1d3a7da,0,1,f02b7246-dae9-4e15-b4cd-b06133664d34,f02b7246-dae9-4e15-b4cd-b06133664d34,0,1,77f20022-17ce-4e00-8a84-015238bce6f3,77f20022-17ce-4e00-8a84-015238bce6f3,0,1,3734619b-7059-4547-8b97-0b3393389d4d,3734619b-7059-4547-8b97-0b3393389d4d,0,1,a30bf95f-aabd-4da0-8287-61e08f9362fb,a30bf95f-aabd-4da0-8287-61e08f9362fb,0,1,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,f5a7df18-2ddb-4053-9aeb-57fc37ae557e,0,1,4078867c-2972-47f9-bebd-935a6f1cc667,4078867c-2972-47f9-bebd-935a6f1cc667,0,1,8502fe39-c241-4be5-a313-fd887bbbdfa1,8502fe39-c241-4be5-a313-fd887bbbdfa1,0,1,67a71201-13e5-42a3-902f-fb3a59710dfb,67a71201-13e5-42a3-902f-fb3a59710dfb,0,1,3a79a951-a997-4596-ab62-ba376d67725d,3a79a951-a997-4596-ab62-ba376d67725d,0,1,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,dd4fe688-c113-4ac5-8114-b89cf1b0eb55,0,1,884c28de-434f-440a-8c63-67e659c097ad,884c28de-434f-440a-8c63-67e659c097ad,0,1,92ead3b5-8c55-4e4d-bd47-009e025b22f8,92ead3b5-8c55-4e4d-bd47-009e025b22f8,0,1,50d8e365-aa58-4b60-8992-01943379d485,50d8e365-aa58-4b60-8992-01943379d485,0,1,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,9bb58c7c-d87d-435b-adf6-09c8f75d47b2,0,1,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,bcd705ba-c9ac-4e73-94b1-7632c0f06c04,0,1,094d5482-286d-4e1a-8888-c0452d2e5af0,094d5482-286d-4e1a-8888-c0452d2e5af0,0,1,fec102ea-a3f6-49b5-b4b8-6884b0654129,fec102ea-a3f6-49b5-b4b8-6884b0654129,0,1,246571fb-38c7-4da6-929d-d8b44bc3437c,246571fb-38c7-4da6-929d-d8b44bc3437c,0,1,047fd6d7-5e30-4184-a09a-6525de526cc7,047fd6d7-5e30-4184-a09a-6525de526cc7,0,1,beb44b02-5d5e-4127-aee7-e184a43a4210,beb44b02-5d5e-4127-aee7-e184a43a4210,0,1,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,1dedfbc2-9250-4229-a6ea-5e085f33e7c3,0,1,e24641ed-3e92-46d7-852b-9958ab7bc520,e24641ed-3e92-46d7-852b-9958ab7bc520,0,1,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,bc2aa3f9-ef2c-49a5-8cd9-ddd8a8cbe19d,0,1,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,b6ac4cd6-c68f-4464-88e9-a8d335d581c6,0,1,2c61114f-abd7-4415-8cdf-4fe95d9fe354,2c61114f-abd7-4415-8cdf-4fe95d9fe354,0,1,abd7a766-5cc1-48db-8d29-797e9d666a78,abd7a766-5cc1-48db-8d29-797e9d666a78,0,1,1704b5e3-8e77-4df6-9223-e6e5c41a280d,1704b5e3-8e77-4df6-9223-e6e5c41a280d,0,1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,62eca88f-025d-44de-b92c-46cd8bc7e4a1,0,1,b0dde395-8498-4469-9507-d290798117d7,b0dde395-8498-4469-9507-d290798117d7,0,1,999616ea-0faa-4ae2-9841-6a6997ea6694,999616ea-0faa-4ae2-9841-6a6997ea6694,0,1,c5f91669-13d8-4f0a-a054-2701078da38a,c5f91669-13d8-4f0a-a054-2701078da38a,0,1,34f9872b-e02e-4093-ba06-3cb5b8995850,34f9872b-e02e-4093-ba06-3cb5b8995850,0,1,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,18515c19-c9ef-4c9f-8d12-4f58ffa251e8,0,1,e61eef89-b3de-4b73-b7d9-af75318093e5,e61eef89-b3de-4b73-b7d9-af75318093e5,0,1,94e68502-adf1-476e-be2f-8418385959fa,94e68502-adf1-476e-be2f-8418385959fa,0,1,bf80ccc5-f907-4e7f-a007-6030c7ba682e,bf80ccc5-f907-4e7f-a007-6030c7ba682e,0,1,a330acd1-bc97-4ef8-8ecb-5604868ca044,a330acd1-bc97-4ef8-8ecb-5604868ca044,0,1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,05f1f184-50cb-47c5-b3a8-62be6a9780c1,0,1,58c3936c-4db0-45c8-a22e-b5dd49a61497,58c3936c-4db0-45c8-a22e-b5dd49a61497,0,1,8928693b-1933-4e02-8a33-99b6f05b1c57,8928693b-1933-4e02-8a33-99b6f05b1c57,0,1,9aa607bc-5870-436a-bbe1-296560393e3b,9aa607bc-5870-436a-bbe1-296560393e3b,0,1,1635be16-4861-4a7d-babc-4caff448a7f7,1635be16-4861-4a7d-babc-4caff448a7f7,0,1,9e399087-c957-4a7a-ab9d-2b689736caab,9e399087-c957-4a7a-ab9d-2b689736caab,0,1,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,e7542e37-a2f0-43b5-852e-4e2b24b1b71f,0,1,61f283c7-f887-432b-a2d7-c27483e04317,61f283c7-f887-432b-a2d7-c27483e04317,0,1,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,3e94649c-7d69-4fb4-ada1-ae00eabf02b6,0,1,2b7372be-af0d-464e-8d09-8172229790af,2b7372be-af0d-464e-8d09-8172229790af,0,1,079bc65d-da8e-431d-847c-ec46868ca92d,079bc65d-da8e-431d-847c-ec46868ca92d,0,1,d85346db-be25-4dab-a2db-647c3d40dd17,d85346db-be25-4dab-a2db-647c3d40dd17,0,1,9f9936fc-54a0-4812-b12d-2f8f91551440,9f9936fc-54a0-4812-b12d-2f8f91551440,0,1,a5667633-9264-4dfa-9e26-c45e96e61ae3,a5667633-9264-4dfa-9e26-c45e96e61ae3,0,1,2eeea138-481c-4fde-9e8a-709d751cc469,2eeea138-481c-4fde-9e8a-709d751cc469,0,1,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,02c5f3b2-d691-4eaf-84fd-763770e4b1cb,0,1,1f169cd2-573f-408d-92e7-3eee7ff4528a,1f169cd2-573f-408d-92e7-3eee7ff4528a,0,1,845262f8-8208-4c90-98ec-c85dd5734cf0,845262f8-8208-4c90-98ec-c85dd5734cf0,0,1,3326bbcb-b277-44db-a252-2448119e8146,3326bbcb-b277-44db-a252-2448119e8146,0,1,61cac5f7-320c-4098-9078-44fadcdeb219,61cac5f7-320c-4098-9078-44fadcdeb219,0,1,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,4599ef83-5f1e-44af-ae0c-67988656a99e,4599ef83-5f1e-44af-ae0c-67988656a99e,0,1,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,acb0d7eb-2ed9-4419-b79d-7dc661d70c30,0,1,e1b94dcf-ec37-4b2d-a7af-120eeee40944,e1b94dcf-ec37-4b2d-a7af-120eeee40944,0,1,7d2a37b1-a1a0-435a-846a-95e255655044,7d2a37b1-a1a0-435a-846a-95e255655044,0,1,109db64c-00dc-490e-99a5-4430d9344e99,109db64c-00dc-490e-99a5-4430d9344e99,0,1,85837a55-fed5-4b7b-a622-30d728b9a677,85837a55-fed5-4b7b-a622-30d728b9a677,0,1,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0fd79cdb-dc7a-40ca-a3bc-2c7a7b4691bb,0,1,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,b6bd2b39-07ae-48a7-8a5b-f44b5034afa9,0,1,5500d5c6-fdbf-4614-b43b-fabf56e3968c,5500d5c6-fdbf-4614-b43b-fabf56e3968c,0,1,a08eeef7-1c81-4985-8628-6b35ac73e135,a08eeef7-1c81-4985-8628-6b35ac73e135,0,1,c446f732-097a-4197-8384-91a6925c6bdd,c446f732-097a-4197-8384-91a6925c6bdd,0,1,cc33ec52-aed4-4807-90b5-700d307b4f57,cc33ec52-aed4-4807-90b5-700d307b4f57,0,1,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,6f9ece3d-aeca-4313-9e6a-44e562fc83ff,0,1,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,6b04b6f1-2c9d-4de0-b871-6cc377b13e33,0,1,82ea249e-ecba-4916-b9a1-c7e6119b353a,82ea249e-ecba-4916-b9a1-c7e6119b353a,0,1,d5406849-57b3-44f4-8efa-e73523939ae5,d5406849-57b3-44f4-8efa-e73523939ae5,0,1,9ce5f33f-4331-491d-b084-9913c38f4c7d,9ce5f33f-4331-491d-b084-9913c38f4c7d,0,1,0603113a-f2f1-43e6-9838-64c5e98417f0,0603113a-f2f1-43e6-9838-64c5e98417f0,0,1,43055a56-a079-41e2-87eb-723769109bed,43055a56-a079-41e2-87eb-723769109bed,0,1,930f2bc5-417d-4b97-b440-8d5e81e5c896,930f2bc5-417d-4b97-b440-8d5e81e5c896,0,1,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,c8f487aa-544a-41dc-b7c3-7cf21d2720f2,0,1,e506f7d3-2572-4c54-ac98-e40f083ac578,e506f7d3-2572-4c54-ac98-e40f083ac578,0,1,bdf93aa5-86a4-4791-bdb0-172532029b7c,bdf93aa5-86a4-4791-bdb0-172532029b7c,0,1,da9821c3-4b16-48b7-9088-d3cf8ac536a6,da9821c3-4b16-48b7-9088-d3cf8ac536a6,0,1,d5142574-a040-4dd0-a482-cdc61c1d86ab,d5142574-a040-4dd0-a482-cdc61c1d86ab,0,1,778e79ee-eb1a-4d52-8a31-58e781c78fe4,778e79ee-eb1a-4d52-8a31-58e781c78fe4,0,1,f480ac52-e2f1-4ed0-a0b1-20a622f77302,f480ac52-e2f1-4ed0-a0b1-20a622f77302,0,1,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,5c63e7cd-ecdb-45ae-a589-f6c38f5a8e76,0,1,b9b0fbdc-8fda-46d1-bb3e-561a03604971,b9b0fbdc-8fda-46d1-bb3e-561a03604971,0,1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,eadfdbe3-bc85-4084-aef6-4cfd258ee6f1,0,1,672c2936-9771-4e32-a970-7ac7f12a21e8,672c2936-9771-4e32-a970-7ac7f12a21e8,0,1,c264441d-4805-4968-baa2-37b8970049c7,c264441d-4805-4968-baa2-37b8970049c7,0,1,f36150de-33af-4410-8a4c-8c9f4b545793,f36150de-33af-4410-8a4c-8c9f4b545793,0,1,62f97480-7d4a-48f3-9d1d-612909b242c9,62f97480-7d4a-48f3-9d1d-612909b242c9,0,1,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,2b4f6e2f-6cc4-4c7c-98a6-786f3793366b,0,1,3068be84-a401-4701-8ac9-411fae130f84,3068be84-a401-4701-8ac9-411fae130f84,0,1,957394a7-e5b8-47fc-8680-1e71efe2be7d,957394a7-e5b8-47fc-8680-1e71efe2be7d,0,1,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,ba49a9e4-6ec1-43ff-92cd-9dbf221bbf09,0,1,4f25ef45-c8d9-401d-b0e8-2217ac310f04,4f25ef45-c8d9-401d-b0e8-2217ac310f04,0,1,504ca240-b5ae-433e-ae5f-d818263eea23,504ca240-b5ae-433e-ae5f-d818263eea23,0,1,32461819-9437-417d-8d1e-851c9a2dcee2,32461819-9437-417d-8d1e-851c9a2dcee2,0,1,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,6fcd2a3a-4d66-40e3-bde0-5c274b43783f,0,1,f1b66ea8-262d-4b38-a039-b83a843f6ee8,f1b66ea8-262d-4b38-a039-b83a843f6ee8,0,1,bcae6e05-f1fd-413e-9eef-2e1cee42a962,bcae6e05-f1fd-413e-9eef-2e1cee42a962,0,1,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,84da1ef8-1784-4dfc-b17a-7728aa7ff62a,0,1,9155c95b-6afb-41bb-bd0b-d37e503fc163,9155c95b-6afb-41bb-bd0b-d37e503fc163,0,1,d917c19e-be15-41cc-9c8a-a97c8de85309,d917c19e-be15-41cc-9c8a-a97c8de85309,0,1,93fcaa62-2a19-468b-9128-c7930583fbfd,93fcaa62-2a19-468b-9128-c7930583fbfd,0,1,2d885109-4c96-41c0-a996-785bfd793c2d,2d885109-4c96-41c0-a996-785bfd793c2d,0,1,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d,0,1,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9,0,1,5148d263-de26-4c92-b090-ae59f42dfb05,5148d263-de26-4c92-b090-ae59f42dfb05,0,1,dbefe81f-85cf-4d84-9600-b359598c2543,dbefe81f-85cf-4d84-9600-b359598c2543,0,1,1a624a06-93b8-4d1f-8c14-2061e1e7927c,1a624a06-93b8-4d1f-8c14-2061e1e7927c,0,1,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,4ad54ca8-8e4a-4a35-9537-0395851fcdfb,0,1,d5967e0f-03cd-4190-a702-7e9290eae1eb,d5967e0f-03cd-4190-a702-7e9290eae1eb,0,1,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43,0,1,7059b117-714c-4710-aebe-76f88c4d41d5,7059b117-714c-4710-aebe-76f88c4d41d5,0,1,ea050453-4947-40dc-aa2a-503ddd1a235a,ea050453-4947-40dc-aa2a-503ddd1a235a,0,1,37d0e6d4-702e-46f5-ae87-4d393fa0c701,37d0e6d4-702e-46f5-ae87-4d393fa0c701,0,1,1e963c1e-f914-46e1-81d3-90d126fc6f8d,1e963c1e-f914-46e1-81d3-90d126fc6f8d,0,1,3a62d88e-9298-42c0-bd87-c749ecd01d19,3a62d88e-9298-42c0-bd87-c749ecd01d19,0,1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,abbf064e-c6ea-4712-930b-a9fef42e0ee1,0,1,fc13dd80-ce44-4ed1-a9d7-dae44602b954,fc13dd80-ce44-4ed1-a9d7-dae44602b954,0,1,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,a3fe224e-c3ef-4e30-90e4-c4ed5eb11824,0,1,433b23a1-a863-4775-b2f2-1384e8f3cbbb,433b23a1-a863-4775-b2f2-1384e8f3cbbb,0,1,a1677c47-b9a4-427a-972d-9bb2293445b6,a1677c47-b9a4-427a-972d-9bb2293445b6,0,1,e4a328c0-e73b-465d-ae36-38e5a71690fa,e4a328c0-e73b-465d-ae36-38e5a71690fa,0,1,85bebd81-a355-4010-889b-cff6f72dafcb,85bebd81-a355-4010-889b-cff6f72dafcb,0,1,49521f36-fd1b-47dd-81cc-48b6fb651e22,49521f36-fd1b-47dd-81cc-48b6fb651e22,0,1,bc946e21-53bb-4332-8c63-7b0aa78826eb,bc946e21-53bb-4332-8c63-7b0aa78826eb,0,1,4be2bdad-9a43-4593-acbc-a02e9144a89f,4be2bdad-9a43-4593-acbc-a02e9144a89f,0,1,eb4455f2-a5a0-44fb-8302-7312bc32df66,eb4455f2-a5a0-44fb-8302-7312bc32df66,0,1,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68,0,1,9f20e59e-7db8-466f-b965-7045fc3f1489,9f20e59e-7db8-466f-b965-7045fc3f1489,0,1,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,cb057756-d3f7-4c50-a9d0-bac9ca2abd46,0,1,89ac3d39-1915-4e67-a4e4-5a67a155cb75,89ac3d39-1915-4e67-a4e4-5a67a155cb75,0,1,d27b637d-5a51-49ff-bf73-343891534586,d27b637d-5a51-49ff-bf73-343891534586,0,1,b5a073a2-54e2-47c9-b533-f75fd2c9f343,b5a073a2-54e2-47c9-b533-f75fd2c9f343,0,1,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0c8571be-f9b6-4292-add9-980cfe7fa2ec,0,1,989b8ccd-bc05-48c1-9969-b3733028b65f,989b8ccd-bc05-48c1-9969-b3733028b65f,0,1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,6c70b13d-f9d0-459f-8d38-c01c11f356f1,0,1,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2,0,1,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,1a4dd1f5-c2d6-4e06-b428-ab7870810bf3,0,1,bf66612b-aec4-414b-bee6-9bcab145c7cc,bf66612b-aec4-414b-bee6-9bcab145c7cc,0,1,811f356f-554a-4a63-90b6-dedb5fec7c05,811f356f-554a-4a63-90b6-dedb5fec7c05,0,1,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,78fdbce8-8479-4edd-89c0-1bbaf8ffd482,0,1,8eb18de5-8283-4d0c-bb11-b882e78181d5,8eb18de5-8283-4d0c-bb11-b882e78181d5,0,1,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb,0,1,64a86d5d-f925-45ee-82da-76df1cc20729,64a86d5d-f925-45ee-82da-76df1cc20729,0,1,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,2e7fbea4-57ac-4633-bb39-8725e57bc7ba,0,1,83ae9b22-20ff-4e94-9282-19daf2274328,83ae9b22-20ff-4e94-9282-19daf2274328,0,1,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,dcad5d84-6643-4f0b-9e6e-73fe343db4a7,0,1,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,e1ca1374-6dad-46d3-bb72-b67f3e6b1809,0,1,a92b2b70-7e69-49d1-b921-c9d1b0718f94,a92b2b70-7e69-49d1-b921-c9d1b0718f94,0,1,19f690a3-d27b-43c1-94b7-585fc628da05,19f690a3-d27b-43c1-94b7-585fc628da05,0,1,d375fac5-098c-42b5-a0bd-9a4ae7516ada,d375fac5-098c-42b5-a0bd-9a4ae7516ada,0,1,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,29034f3e-d2eb-44e0-ac85-f2ffaf14eb90,0,1,162137ef-dea2-4ace-9e67-897dad0e7c3d,162137ef-dea2-4ace-9e67-897dad0e7c3d,0,1,012fb2f1-1c15-4800-8968-78a90c2a1348,012fb2f1-1c15-4800-8968-78a90c2a1348,0,1,436162a0-263f-4126-aa3a-7508505cc4a8,436162a0-263f-4126-aa3a-7508505cc4a8,0,1,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,9e4fbc61-8736-435d-bdd4-eb3bbaa14b92,0,1,0b750d40-1ee5-414c-b8a5-244c666787ae,0b750d40-1ee5-414c-b8a5-244c666787ae,0,1,aec8f9e6-d177-45f5-ba55-2d662428c2ae,aec8f9e6-d177-45f5-ba55-2d662428c2ae,0,1,7dfdd08b-7cd9-480c-829d-97f5e7152eec,7dfdd08b-7cd9-480c-829d-97f5e7152eec,0,1,0ff797f5-007d-4379-aa14-5d3f5babeb84,0ff797f5-007d-4379-aa14-5d3f5babeb84,0,1,767176d4-4fe9-4de5-9246-59b7fec09c53,767176d4-4fe9-4de5-9246-59b7fec09c53,0,1,64752b64-80ae-4537-986a-d61423dc546b,64752b64-80ae-4537-986a-d61423dc546b,0,1,8e587969-0263-4789-a501-a6c2e102f88e,8e587969-0263-4789-a501-a6c2e102f88e,0,1,f26bfc01-7d8a-43a7-b869-c2deb18218e5,f26bfc01-7d8a-43a7-b869-c2deb18218e5,0,1,8c72a0b2-20cb-43ff-b010-25256aa8011d,8c72a0b2-20cb-43ff-b010-25256aa8011d,0,1,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,a913b023-0ec5-4c60-880d-2f8ddad2d5ce,0,1,b0bf8af5-d824-459c-bc40-17495406af3c,b0bf8af5-d824-459c-bc40-17495406af3c,0,1,2c37e123-ea35-4501-93e1-2fa295444bec,2c37e123-ea35-4501-93e1-2fa295444bec,0,1,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,afe96dc2-7840-4010-a7d4-1eeac36f0fd3,0,1,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,02ec2b85-3cc8-45bb-911f-c5f7c8668fd5,0,1,a997a430-3ea8-4fde-9f53-7b507a04c215,a997a430-3ea8-4fde-9f53-7b507a04c215,0,1,f648e19d-026b-4fa7-8e70-1866b27b94f8,f648e19d-026b-4fa7-8e70-1866b27b94f8,0,1,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,a3b47ee8-b7b9-4bdf-afa8-025447ea9d5b,0,1,36475bf5-5da6-48ad-8077-4de4426f7e10,36475bf5-5da6-48ad-8077-4de4426f7e10,0,1,d32081fc-47d3-4e66-837e-705c94ba8ca8,d32081fc-47d3-4e66-837e-705c94ba8ca8,0,1,f3750ea4-5f9e-4ab3-9495-3f182ecff407,f3750ea4-5f9e-4ab3-9495-3f182ecff407,0,1,14002d51-87d4-4647-92ef-a9b1935cb666,14002d51-87d4-4647-92ef-a9b1935cb666,0,1,e941a39d-1f3c-4e6e-af17-75f92a15dd40,e941a39d-1f3c-4e6e-af17-75f92a15dd40,0,1,d9bbedcb-4872-4183-83c2-6c2aae9634b0,d9bbedcb-4872-4183-83c2-6c2aae9634b0,0,1,72c695c3-66f6-4aa8-8a39-737ec6967a1d,72c695c3-66f6-4aa8-8a39-737ec6967a1d,0,1,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,2beef1e0-7a59-407e-b454-ee2ec38ca4b3,0,1,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,b57a1d6f-8375-4d57-a2c1-f53e25318ddb,0,1,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,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,4a749e8c-cb35-4bc4-9b31-fb5bc0eab474,0,1,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,da4a0c05-2285-434b-b7f8-83b2a0d7f23d,0,1,ecbe625a-55eb-437a-8dee-33fb034d4c0d,ecbe625a-55eb-437a-8dee-33fb034d4c0d,0,1,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,5d4cefac-5dc4-4d73-8b4b-900a8464fbb2,0,1,84796b00-79db-42ba-94d0-5bf543e09cd6,84796b00-79db-42ba-94d0-5bf543e09cd6,0,1,e85695f1-ec94-42ce-8f80-2bda4c90685b,e85695f1-ec94-42ce-8f80-2bda4c90685b,0,1,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,6f08cc54-d4b1-4c6f-96dc-e0b6891c81b6,0,1,948b10b3-0d7c-4dca-8816-75eb86e7881b,948b10b3-0d7c-4dca-8816-75eb86e7881b,0,1,9de91b5a-98e4-414b-b650-b669b0159b49,9de91b5a-98e4-414b-b650-b669b0159b49,0,1,840dc727-288a-4bf2-8b1a-47629d28229c,840dc727-288a-4bf2-8b1a-47629d28229c,0,1,314ac8ca-8845-40c2-b844-91beb05fb601,314ac8ca-8845-40c2-b844-91beb05fb601,0,1,db15717d-1b6a-42fd-9b8f-959e1d5841e9,db15717d-1b6a-42fd-9b8f-959e1d5841e9,0,1,3de3948d-40ff-4e0d-8445-9bf49c916161,3de3948d-40ff-4e0d-8445-9bf49c916161,0,1,37ae1946-9436-47ef-8b8c-17ed0a24971c,37ae1946-9436-47ef-8b8c-17ed0a24971c,0,1,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0d3cd7ca-089f-4858-a4a6-0ed373aa77bf,0,1,d844d861-fbe9-4391-89e3-00e505b33b33,d844d861-fbe9-4391-89e3-00e505b33b33,0,1,495ddb5f-f75d-46c9-b134-e925c814b890,495ddb5f-f75d-46c9-b134-e925c814b890,0,1,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0a4ded35-1cfa-4e53-91c7-139ee0b94ade,0,1,c0688817-fd73-4ead-b9dd-ec966780a2c2,c0688817-fd73-4ead-b9dd-ec966780a2c2,0,1,b1fbfbfe-766f-4018-9491-507748193808,b1fbfbfe-766f-4018-9491-507748193808,0,1,65d9f3a7-6258-49f3-8252-0a60e2735ff3,65d9f3a7-6258-49f3-8252-0a60e2735ff3,0,1,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,a0ba7e86-b894-4a63-8687-bb2a840fe1ab,0,1,e55dfadb-8e12-4808-ad90-e891a4644548,e55dfadb-8e12-4808-ad90-e891a4644548,0,1,a1155588-882f-430d-85a6-19558b5b7256,a1155588-882f-430d-85a6-19558b5b7256,0,1,a792b3dc-ac80-492b-bd94-83eb0438ba9f,a792b3dc-ac80-492b-bd94-83eb0438ba9f,0,1,73a093ea-1927-483b-b6f5-8f0cbd253753,73a093ea-1927-483b-b6f5-8f0cbd253753,0,1,345f04c0-0274-4e79-b523-f1fa3cf0d92a,345f04c0-0274-4e79-b523-f1fa3cf0d92a,0,1,f3a14787-de1b-4b65-8cb1-bc33a785821c,f3a14787-de1b-4b65-8cb1-bc33a785821c,0,1,b9ba3ce3-9059-4135-9d31-725f01907431,b9ba3ce3-9059-4135-9d31-725f01907431,0,1,f637a14d-08ed-4c62-a873-ca36cdcd1e88,f637a14d-08ed-4c62-a873-ca36cdcd1e88,0,1,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,8afa9a0e-04c1-4cac-82bb-6767cc0594d9,0,1,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,4d2b3767-7c96-44a6-bb1b-ab74b103b90e,0,1,fc9fc58f-c888-41f0-9f57-70748b21706e,fc9fc58f-c888-41f0-9f57-70748b21706e,0,1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,fc761833-aa85-4c6d-a36c-d1ed060e3bb1,0,1,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,f0ba2ff2-b353-4f84-8e45-23e47ee6c1b6,0,1,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,bb8bade2-5c1b-49a6-b66f-79a3ebff86f7,0,1,33596560-3d45-4d3e-b6ec-1c22162110ad,33596560-3d45-4d3e-b6ec-1c22162110ad,0,1,d3e82a06-daae-4f4d-b3f8-45a406e31664,d3e82a06-daae-4f4d-b3f8-45a406e31664,0,1,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,af76c3c9-d8dc-4156-9e10-80ee02fcf4fe,0,1,ac6a184d-1247-4b54-a023-f0d16daa5fe9,ac6a184d-1247-4b54-a023-f0d16daa5fe9,0,1,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,f9af5fe6-0b4f-4d48-92a4-1f2a29972155,0,1,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,3ca1682d-5ff5-4b2b-96c2-54d2dd5297a9,0,1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,a687d346-73cf-4aea-a4d0-f29824f0f6f1,0,1,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,f51fda72-56d9-4b45-a775-a0e1dfbf3a27,0,1,8bf73614-81a4-4702-88b9-3c6f2594d204,8bf73614-81a4-4702-88b9-3c6f2594d204,0,1,b8d4410b-f626-41b8-87c8-67102256bae2,b8d4410b-f626-41b8-87c8-67102256bae2,0,1,484eeb5f-12af-4139-a081-4dcac067a712,484eeb5f-12af-4139-a081-4dcac067a712,0,1,ec61075e-fbcb-494a-b790-81548a212d2b,ec61075e-fbcb-494a-b790-81548a212d2b,0,1,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,2f3bdc3c-4c5d-4fcb-85bb-932fe1747d98,0,1,0c444045-302b-4dbd-a9a3-81fd40004948,0c444045-302b-4dbd-a9a3-81fd40004948,0,1,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,16099d54-e84f-47c5-aaf3-f8ced3cba5e0,0,1,39fce130-be22-42d9-8bcd-b162ae00fc7a,39fce130-be22-42d9-8bcd-b162ae00fc7a,0,1,1528b799-1c0f-4244-85e8-e738b827934a,1528b799-1c0f-4244-85e8-e738b827934a,0,1,45d79e4d-8c2a-432b-abb8-fb9046abea40,45d79e4d-8c2a-432b-abb8-fb9046abea40,0,1,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,8f4d2fa9-c6ed-4f85-b3ef-f9214468ffc4,0,1,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,cb73c8c2-3b09-42e9-ac26-1bd51854efb6,0,1,256618cc-0956-4cda-9691-e4ced68a791f,256618cc-0956-4cda-9691-e4ced68a791f,0,1,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,e20593fd-b3e3-41d2-8c8d-97b5d6148fa4,0,1,4b9771a7-b924-4e61-8468-4633e3c54706,4b9771a7-b924-4e61-8468-4633e3c54706,0,1,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,bc846fc8-3c67-45f8-9c5c-69bf1190baf9,0,1,667de710-cee5-4a97-8434-641d199f3b68,667de710-cee5-4a97-8434-641d199f3b68,0,1,f6e85eeb-d81b-4526-9a33-ab77bd447236,f6e85eeb-d81b-4526-9a33-ab77bd447236,0,1,470e37fe-d149-4007-b397-12fc84f93041,470e37fe-d149-4007-b397-12fc84f93041,0,1,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,f8d9068d-8a4e-4b23-b5ca-5b9ddce1f60f,0,1,7175cfa0-885c-4807-98ec-af255dcd55d9,7175cfa0-885c-4807-98ec-af255dcd55d9,0,1,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,1773ff66-ebe4-46e1-b505-d07d87c7fe3e,0,1,f5b66759-8102-4cba-a3fd-ee96db5bc809,f5b66759-8102-4cba-a3fd-ee96db5bc809,0,1,6c205eae-9113-46c1-a245-25d29173646e,6c205eae-9113-46c1-a245-25d29173646e,0,1,4cc4aa90-49fb-4602-9f9c-d4d47d223988,4cc4aa90-49fb-4602-9f9c-d4d47d223988,0,1,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,6da034af-0481-4a3c-aff9-c50ced6f21d4,6da034af-0481-4a3c-aff9-c50ced6f21d4,0,1,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,6fe57ea6-fe5e-48b1-bb31-5d42e4c2c6c7,0,1,d07016c8-7d97-42cd-865b-85b49075adfb,d07016c8-7d97-42cd-865b-85b49075adfb,0,1,9202335d-50bb-4282-9438-24c7fb9cf637,9202335d-50bb-4282-9438-24c7fb9cf637,0,1,a62906e5-27f8-4e72-8769-9a3eed6997d7,a62906e5-27f8-4e72-8769-9a3eed6997d7,0,1,6c5d0ac3-6086-434c-812b-1c1158ecc574,6c5d0ac3-6086-434c-812b-1c1158ecc574,0,1,783536d7-c0db-44c9-96e8-58b57804d7c8,783536d7-c0db-44c9-96e8-58b57804d7c8,0,1,a8295435-c2c4-4aff-874b-7412556aa76d,a8295435-c2c4-4aff-874b-7412556aa76d,0,1,f6c4e24b-172b-4ba3-8e3e-988306ade660,f6c4e24b-172b-4ba3-8e3e-988306ade660,0,1,60cd2f20-17cf-4132-b08e-87cf429704b7,60cd2f20-17cf-4132-b08e-87cf429704b7,0,1,9baab24c-a5a3-46f4-ad17-a28d4a49f851,9baab24c-a5a3-46f4-ad17-a28d4a49f851,0,1,d1952319-0e42-4684-a386-fbe7c24526c2,d1952319-0e42-4684-a386-fbe7c24526c2,0,1,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,01cd59fc-8577-4b3c-9d69-6db75e81e7c4,0,1,83b47a9d-d44b-4c40-becd-df74f9cb2e91,83b47a9d-d44b-4c40-becd-df74f9cb2e91,0,1,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,d03e636e-ff88-4e96-bf3c-d795d10cbcb0,0,1,86e2a2eb-160f-4e93-a449-b2f726286d1b,86e2a2eb-160f-4e93-a449-b2f726286d1b,0,1,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,8e6e1f24-83bf-42c2-9eda-b3874c7910c3,0,1,364184c2-ec71-44be-b40c-ba719b4ab0e1,364184c2-ec71-44be-b40c-ba719b4ab0e1,0,1,7ef46c54-ec0c-4211-a750-e5949956b593,7ef46c54-ec0c-4211-a750-e5949956b593,0,1,04823681-875e-459a-b3cf-051c89527f38,04823681-875e-459a-b3cf-051c89527f38,0,1,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,8e115a0c-a17c-4d7e-bd2c-305fb53d09ca,0,1,38265f08-3301-40d1-b630-a319c983e826,38265f08-3301-40d1-b630-a319c983e826,0,1,5175c496-bac7-4c57-9628-793b727aecd0,5175c496-bac7-4c57-9628-793b727aecd0,0,1,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,1453309e-77d0-444d-ac3f-fd7c2cb65c0c,0,1,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,ea61e442-273e-4ce4-a806-8090893729ba,ea61e442-273e-4ce4-a806-8090893729ba,0,1,e7100f2b-d169-4635-ab87-7a2225ff12ee,e7100f2b-d169-4635-ab87-7a2225ff12ee,0,1,4507a92e-abb6-4329-88b2-3429bc694bc6,4507a92e-abb6-4329-88b2-3429bc694bc6,0,1,2694c1b4-536b-4187-adf6-0f8757aaae76,2694c1b4-536b-4187-adf6-0f8757aaae76,0,1,e523f88b-b3de-476e-a3cc-592970492dec,e523f88b-b3de-476e-a3cc-592970492dec,0,1,37c3d087-21c5-48ac-b8bd-17dffa071d21,37c3d087-21c5-48ac-b8bd-17dffa071d21,0,1,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,efb6b3b6-d57b-469f-a7c2-f4e0308d0c7f,0,1,00c29d0d-338a-4eb0-9e0f-5b64f6521e6e,00c29d0d-338a-4eb0-9e0f-5b64f6521e6e,0,1,ea0843f4-60fb-4d44-abf4-0021867c636b,ea0843f4-60fb-4d44-abf4-0021867c636b,0,1,59aadc03-adbc-481f-89bc-d7f391789522,59aadc03-adbc-481f-89bc-d7f391789522,0,1,254f6ccd-0451-4231-91c9-4abe57b647be,254f6ccd-0451-4231-91c9-4abe57b647be,0,1,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,1e2d790c-0076-413a-b5fb-f25c01ab6ad5,0,1,468f6d26-7a4b-49fe-9ec9-208794a6dff7,468f6d26-7a4b-49fe-9ec9-208794a6dff7,0,1,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0dcc537b-76b3-4e73-b060-6cbdcf6345db,0,1,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,ae662b53-e11e-4b59-be52-b9d4ab00c4a4,0,1,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,ce55df94-71e4-46ac-9b3b-bdae5d336b0a,0,1,7601fa7e-079a-4347-abea-e161b2d00783,7601fa7e-079a-4347-abea-e161b2d00783,0,1,ee84cb40-f82d-4558-91be-229d68ad9f4a,ee84cb40-f82d-4558-91be-229d68ad9f4a,0,1,101a7eff-9556-4165-879a-a7c8a852e236,101a7eff-9556-4165-879a-a7c8a852e236,0,1,01775932-3603-4efc-9235-abdb97490dea,01775932-3603-4efc-9235-abdb97490dea,0,1,7637844b-4059-4f8a-8436-b4f4e8cb4f74,7637844b-4059-4f8a-8436-b4f4e8cb4f74,0,1,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,b6bb4cbe-b6fa-4d28-b372-0b959951ad4d,0,1,0ee5b788-61dc-464b-86da-f985df7704b6,0ee5b788-61dc-464b-86da-f985df7704b6,0,1,2375c6a8-9799-4b7c-a48d-091a90c67693,2375c6a8-9799-4b7c-a48d-091a90c67693,0,1,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,3d3c3360-4502-4ad4-bbe9-35d4ba9b54b3,0,1,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,9b0671c6-6e92-42e6-9cf4-13d4be11f27d,0,1,63c6522f-be04-422a-b4f4-0f55f58b09a8,63c6522f-be04-422a-b4f4-0f55f58b09a8,0,1,be919dc1-a377-43e1-82e6-ce946cabdd55,be919dc1-a377-43e1-82e6-ce946cabdd55,0,1,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,6b17a0fc-4d6f-4189-9067-c58a95f04dd7,0,1,9ded532e-9e60-4895-a4c5-4ea6697aa83c,9ded532e-9e60-4895-a4c5-4ea6697aa83c,0,1,106c5159-ffc7-4059-b3e3-acf74326a44f,106c5159-ffc7-4059-b3e3-acf74326a44f,0,1,d39fd717-1a69-4fd3-889e-4fa9abefea1c,d39fd717-1a69-4fd3-889e-4fa9abefea1c,0,1,5b85e6df-7493-4201-97ad-2aea14de6006,5b85e6df-7493-4201-97ad-2aea14de6006,0,1,061e6c0f-ba52-40ec-96ad-2eba3eee3097,061e6c0f-ba52-40ec-96ad-2eba3eee3097,0,1,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,d77e3c65-e9fd-4ba7-885f-a8a2f4c827d2,0,1,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,4fb86bf3-02ad-4f0e-85a9-98be6c350a06,0,1,4840753b-e2e1-4e67-b35f-2f5eab7754f5,4840753b-e2e1-4e67-b35f-2f5eab7754f5,0,1,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,4095c9e7-83ab-4db9-a2d0-a9f4ef9ee53e,0,1,6ffd9c17-d90b-4d19-b337-0fbc2c717557,6ffd9c17-d90b-4d19-b337-0fbc2c717557,0,1,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,9a11a6bd-0c13-4be2-9e34-b12b7554f3c9,0,1,3bb83275-7a0e-420f-8c6b-028038f11a8c,3bb83275-7a0e-420f-8c6b-028038f11a8c,0,1,e1950a23-f6e7-48af-b78a-77aa61f08ece,e1950a23-f6e7-48af-b78a-77aa61f08ece,0,1,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,1cc3d7c4-9178-4a40-86ea-2bbc1f5aa69f,0,1,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,790735cf-f6e2-4b0d-bb16-c5b9ea95efae,0,1,5d726fa3-bde0-4d97-a577-415857bbb5c1,5d726fa3-bde0-4d97-a577-415857bbb5c1,0,1,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,f63d0e2d-4685-4ac5-b22c-1b83e3ab955f,0,1,49068231-202c-4ac6-a39a-69207cb597dd,49068231-202c-4ac6-a39a-69207cb597dd,0,1,5a470575-e012-42ad-9ad7-53930a8e843f,5a470575-e012-42ad-9ad7-53930a8e843f,0,1,5872d4ed-6503-422d-bcf9-63a8df3e777d,5872d4ed-6503-422d-bcf9-63a8df3e777d,0,1,e21cda29-2579-485e-a207-20b76f719c80,e21cda29-2579-485e-a207-20b76f719c80,0,1,1b232a57-2833-42c6-b318-38dae2af1ab2,1b232a57-2833-42c6-b318-38dae2af1ab2,0,1,007ade8c-b102-408b-b877-b531e046560b,007ade8c-b102-408b-b877-b531e046560b,0,1,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,a8dfea6c-0c21-456d-96ab-f4bb5d579b13,0,1,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,305f1ef1-4f9c-40a2-a978-3a4c0ecf75d4,0,1,eb69c41a-392d-43bb-9b67-a0adcb651b1e,eb69c41a-392d-43bb-9b67-a0adcb651b1e,0,1,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,fbd63dbc-7318-45f1-9aa5-51c2f3a9190b,0,1,93b01c88-48a2-4753-b443-0e9892395a8f,93b01c88-48a2-4753-b443-0e9892395a8f,0,1,0b7f8e05-bb34-47cc-9775-04362e814316,0b7f8e05-bb34-47cc-9775-04362e814316,0,1,e71e0297-3709-4247-933e-18a6350cbf39,e71e0297-3709-4247-933e-18a6350cbf39,0,1,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0b32e372-c6ad-4dda-acd1-8b5d58537d37,0,1,602dac6f-abe6-407a-92d3-7f1613e5dda6,602dac6f-abe6-407a-92d3-7f1613e5dda6,0,1,df6417d1-c722-4a87-a543-5d2c31795b20,df6417d1-c722-4a87-a543-5d2c31795b20,0,1,526a85c9-3a8d-4044-adb9-fd0689c70601,526a85c9-3a8d-4044-adb9-fd0689c70601,0,1,c4203772-580c-4db1-9bde-8925faa90688,c4203772-580c-4db1-9bde-8925faa90688,0,1,9ab0fe18-4dd7-4eed-958d-8537d4896d84,9ab0fe18-4dd7-4eed-958d-8537d4896d84,0,1,2278dc46-46ce-4d00-9289-4de1640782d7,2278dc46-46ce-4d00-9289-4de1640782d7,0,1,1f983a04-c2df-40bb-bee2-b326474d89f8,1f983a04-c2df-40bb-bee2-b326474d89f8,0,1,f03f1b68-e924-4c06-b0aa-8033a9a2f592,f03f1b68-e924-4c06-b0aa-8033a9a2f592,0,1,5e453d10-235d-4e53-86b1-20eed3247992,5e453d10-235d-4e53-86b1-20eed3247992,0,1,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0eefb856-0fb4-4c3e-bb08-e88b03a44065,0,1,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,21ba8b9f-de97-40a1-8ea1-85a29e8e53ef,0,1,738228ad-c30a-42f4-a6ad-bde0edba6266,738228ad-c30a-42f4-a6ad-bde0edba6266,0,1,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,c08aea99-ee33-488c-9ba0-f8b24a6d1d04,0,1,df8e8344-d7bc-4cf2-b498-88d3abb66c09,df8e8344-d7bc-4cf2-b498-88d3abb66c09,0,1,e6d13536-3021-45b2-a8e1-bdb0e0be850c,e6d13536-3021-45b2-a8e1-bdb0e0be850c,0,1,b49f538c-b2b2-4a1f-a6b4-a911033b1666,b49f538c-b2b2-4a1f-a6b4-a911033b1666,0,1,794e952b-6b03-4a1e-ad3f-453376bccf45,794e952b-6b03-4a1e-ad3f-453376bccf45,0,1,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,3e2a0713-e6ed-4d38-8036-72f7b62ca64a,0,1,5cd997ba-f123-47b3-8cde-fbba45a4a11c,5cd997ba-f123-47b3-8cde-fbba45a4a11c,0,1,0d746247-c4f4-47a5-a373-45ec4023d3ef,0d746247-c4f4-47a5-a373-45ec4023d3ef,0,1,a25bcf4e-1a47-472b-9f93-f6ab45abf461,a25bcf4e-1a47-472b-9f93-f6ab45abf461,0,1,958b7dab-0aba-423f-ab81-b70f2b93a027,958b7dab-0aba-423f-ab81-b70f2b93a027,0,1,a17ec3be-2255-42af-a6ee-d3fb8bb00519,a17ec3be-2255-42af-a6ee-d3fb8bb00519,0,1,add0b22d-ff5a-41f7-88a1-ef34880e50c9,add0b22d-ff5a-41f7-88a1-ef34880e50c9,0,1,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,7dc10935-69aa-4f2b-8b01-798dbbaa6cc6,0,1,9c15b35b-d658-4e52-a441-3b79294d65eb,9c15b35b-d658-4e52-a441-3b79294d65eb,0,1,d5fdac2a-e3aa-4859-8485-0cf114748c87,d5fdac2a-e3aa-4859-8485-0cf114748c87,0,1,eb3d278b-e8fe-4d43-90a8-dd361009196f,eb3d278b-e8fe-4d43-90a8-dd361009196f,0,1,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,d30fbeae-e97f-422d-b5c4-289aaeaa2ae4,0,1,a3582d0c-6a63-442e-8422-83f251df0ed9,a3582d0c-6a63-442e-8422-83f251df0ed9,0,1,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,9aae5d2a-81b7-4f1c-8b65-b3e4a8a9bc4d,0,1,239601eb-e8de-4d58-a32a-01ee52f6e698,239601eb-e8de-4d58-a32a-01ee52f6e698,0,1,11370667-bec5-4a2d-8aa1-97f4d795718f,11370667-bec5-4a2d-8aa1-97f4d795718f,0,1,2032162d-fbb5-4e6a-be72-cda79869b9ff,2032162d-fbb5-4e6a-be72-cda79869b9ff,0,1,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,95a8e790-25ef-4ef3-a44a-f150bf1ceb1f,0,1,707e64f3-ad8b-470a-aa4f-57fddecc2159,707e64f3-ad8b-470a-aa4f-57fddecc2159,0,1,682da7d7-6e27-4133-90fc-a445c156f908,682da7d7-6e27-4133-90fc-a445c156f908,0,1,64751704-f39d-4859-adc6-8168897d6aec,64751704-f39d-4859-adc6-8168897d6aec,0,1,10543f9a-4e3f-427a-b36a-9c66709dd6fb,10543f9a-4e3f-427a-b36a-9c66709dd6fb,0,1,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,973967e5-1702-4fb8-ba36-70fd5b3b7e7c,0,1,96ab5424-7be1-416d-b74d-d0c815726b1f,96ab5424-7be1-416d-b74d-d0c815726b1f,0,1,3714e794-ddef-4ad9-a933-6130bbc84545,3714e794-ddef-4ad9-a933-6130bbc84545,0,1,f0dca5f2-1479-42bf-b895-9abd345522f5,f0dca5f2-1479-42bf-b895-9abd345522f5,0,1,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,8eaa91e0-88d9-4e4e-b2d6-752696bafadf,0,1,93d6dda2-dd7c-42d1-b9bc-284929931585,93d6dda2-dd7c-42d1-b9bc-284929931585,0,1,282b089c-7411-40d6-9a0a-ceaf6abb5586,282b089c-7411-40d6-9a0a-ceaf6abb5586,0,1,abc44046-a839-4c4a-8161-ecba29abc27d,abc44046-a839-4c4a-8161-ecba29abc27d,0,1,678188aa-76e7-49bc-a4be-1c55ccd625b1,678188aa-76e7-49bc-a4be-1c55ccd625b1,0,1,12dd81dd-31f5-47f2-a163-ea6c670299c5,12dd81dd-31f5-47f2-a163-ea6c670299c5,0,1,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,1b9e77bf-639a-4e81-a0fd-4f2bd66feeba,0,1,8238c710-09ff-473e-b0ed-40b31bfccab8,8238c710-09ff-473e-b0ed-40b31bfccab8,0,1,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,fe59f9ba-11e3-41ba-ac6f-4b4e3dbf35ae,0,1,15845f89-0f9e-4a93-b7e8-ef101694b1b8,15845f89-0f9e-4a93-b7e8-ef101694b1b8,0,1,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,6c27eece-2f8e-48eb-b9c7-f9c414ee15bd,0,1,60f8daf5-06c2-4db6-8fea-5cbb72130113,60f8daf5-06c2-4db6-8fea-5cbb72130113,0,1,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,e389b86a-7a48-4b31-b5cb-27b3d7dfed82,0,1,91e7c98e-fadf-4c08-bd76-1e4e4d140265,91e7c98e-fadf-4c08-bd76-1e4e4d140265,0,1,b3415b4a-d8de-4536-aa4b-82e75fd986ee,b3415b4a-d8de-4536-aa4b-82e75fd986ee,0,1,8247a93d-c2d3-4c9b-a442-619240d35113,8247a93d-c2d3-4c9b-a442-619240d35113,0,1,acc996ab-672a-4602-b7ad-8eee83557e61,acc996ab-672a-4602-b7ad-8eee83557e61,0,1,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,bf9e9c2f-e5dc-4f82-8e9a-7f35e3ad9a0b,0,1,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,371361b6-15fd-4e62-9f60-cc8ee3fbacf0,0,1,97745768-ed35-44f1-beba-abb8b28a29ae,97745768-ed35-44f1-beba-abb8b28a29ae,0,1,69364942-bcd1-4b06-9b57-fa59b4e7c552,69364942-bcd1-4b06-9b57-fa59b4e7c552,0,1,ab201c5f-4134-42cf-a528-c1c4df02f2d7,ab201c5f-4134-42cf-a528-c1c4df02f2d7,0,1,303fb7b5-6a23-40ea-ae12-b54f4ebae026,303fb7b5-6a23-40ea-ae12-b54f4ebae026,0,1,634cd26b-78f1-4446-8aad-b96ed16e5329,634cd26b-78f1-4446-8aad-b96ed16e5329,0,1,d8e62f1a-92ca-4971-9609-e79da798c083,d8e62f1a-92ca-4971-9609-e79da798c083,0,1,a388ed70-a68d-4713-a280-881315351f07,a388ed70-a68d-4713-a280-881315351f07,0,1,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,fd9e84c9-2322-4aa7-b5fe-31d0c8f373c7,0,1,2c81edc8-02b9-42dd-be4d-e7ad595421a0,2c81edc8-02b9-42dd-be4d-e7ad595421a0,0,1,83cb38ff-1174-449f-b8ce-44d5e064f2df,83cb38ff-1174-449f-b8ce-44d5e064f2df,0,1,d11b51ac-708a-4ee1-b73e-ae62e162101e,d11b51ac-708a-4ee1-b73e-ae62e162101e,0,1,17a50950-6091-4306-9f15-2a621a29c1a0,17a50950-6091-4306-9f15-2a621a29c1a0,0,1,32012b27-1b43-49be-b9af-df0c877e7a4c,32012b27-1b43-49be-b9af-df0c877e7a4c,0,1,e97d5152-9e58-4a91-a691-b4d358f1c89d,e97d5152-9e58-4a91-a691-b4d358f1c89d,0,1,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,1de4d7ee-7ddd-44db-bf7f-1b99b653652c,0,1,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,dfe624ac-9f49-46dd-b821-1f1f5b5e0d15,0,1,296c478b-4103-46cb-9d14-97f59034ffd4,296c478b-4103-46cb-9d14-97f59034ffd4,0,1,fb918a68-f86d-46c0-9078-61d2b32b5aef,fb918a68-f86d-46c0-9078-61d2b32b5aef,0,1,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,9ca4d0c4-f5d3-4748-bf73-f3cd1bc4ac46,0,1,1ddfc773-4f3c-4764-978e-585aab4666de,1ddfc773-4f3c-4764-978e-585aab4666de,0,1,e424d122-1dbb-4545-975c-177997129f2e,e424d122-1dbb-4545-975c-177997129f2e,0,1,c83bc626-dfdd-4451-92b0-b53eed40f534,c83bc626-dfdd-4451-92b0-b53eed40f534,0,1,7b9b1d11-4f78-4113-8fca-1a3a30953aef,7b9b1d11-4f78-4113-8fca-1a3a30953aef,0,1,7f84cb85-c3e4-4b53-b829-3b1e216f978a,7f84cb85-c3e4-4b53-b829-3b1e216f978a,0,1,7e621ecc-7d2b-42bf-a502-f8e59de56b63,7e621ecc-7d2b-42bf-a502-f8e59de56b63,0,1,798fd445-d02e-4e97-890a-0283f33317cf,798fd445-d02e-4e97-890a-0283f33317cf,0,1,095583ca-010d-43ad-8c7a-8938fa4cb761,095583ca-010d-43ad-8c7a-8938fa4cb761,0,1,178d210c-e847-4805-a8d4-31acdf4983af,178d210c-e847-4805-a8d4-31acdf4983af,0,1,aa214d9f-23b1-4996-8a43-9010dceeb53d,aa214d9f-23b1-4996-8a43-9010dceeb53d,0,1,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,26a5527e-dc2b-45a4-a51c-b1dfb31fa8a2,0,1,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,aefc3149-90ee-4ccc-8fb6-b1f6096237f6,0,1,d9d103bd-1dd6-48a9-8869-6c8485705393,d9d103bd-1dd6-48a9-8869-6c8485705393,0,1,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,cf2f7e1f-9b0b-4ae9-9c94-99d80bf95eae,0,1,ff0e8487-bdbf-4b21-877e-00008c81bc09,ff0e8487-bdbf-4b21-877e-00008c81bc09,0,1,39c9f8ac-56a0-4057-8359-7228bf97184a,39c9f8ac-56a0-4057-8359-7228bf97184a,0,1,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,763fbb4c-cab2-4c71-ba16-7e2ce8c3dc97,0,1,2c0dd892-1d3e-4497-850b-080bdb9c59d8,2c0dd892-1d3e-4497-850b-080bdb9c59d8,0,1,3b727d49-c9ed-4d9e-af61-c13b9a170c75,3b727d49-c9ed-4d9e-af61-c13b9a170c75,0,1,1b264744-bdcd-4c5c-932b-0ac4b990dd78,1b264744-bdcd-4c5c-932b-0ac4b990dd78,0,1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,a2dbf20e-1fe9-463d-8fd4-76ce2e4854d1,0,1,37bde288-8e02-4127-bd80-de8ae7590a14,37bde288-8e02-4127-bd80-de8ae7590a14,0,1,a9b8e517-78cd-4428-b2fc-9e16af0069d7,a9b8e517-78cd-4428-b2fc-9e16af0069d7,0,1,5c592024-c009-4674-bbb8-283669e673ef,5c592024-c009-4674-bbb8-283669e673ef,0,1,e76f16b9-77a0-4033-90d0-6e04e4494747,e76f16b9-77a0-4033-90d0-6e04e4494747,0,1,cfb221fc-8639-4e15-9a78-f7837d657a99,cfb221fc-8639-4e15-9a78-f7837d657a99,0,1,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,4e61c8c3-756e-4937-adf6-6a1e9a89fc6a,0,1,022147c1-1ebe-4c8d-b367-4c47115b101d,022147c1-1ebe-4c8d-b367-4c47115b101d,0,1,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,2975d4c8-90d8-4791-8bc2-4adaa328ddc0,0,1,fca6b230-a38e-4791-9cc5-3d215f79dc6f,fca6b230-a38e-4791-9cc5-3d215f79dc6f,0,1,04e87de4-940a-4533-8c81-8f145b201dc0,04e87de4-940a-4533-8c81-8f145b201dc0,0,1,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,573ef4f4-e9e6-4b7c-944d-30808a6a00b7,0,1,fa488af9-a5ec-47d8-8661-fa5058a60a6b,fa488af9-a5ec-47d8-8661-fa5058a60a6b,0,1,97cc84c6-3565-474c-a028-83acb5390446,97cc84c6-3565-474c-a028-83acb5390446,0,1,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,9bf07c3e-7fdf-4a4f-ab00-98c7668349bd,0,1,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,ebbf6957-6ff6-4dc2-9e20-23d1da091f05,0,1,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,9b80acf6-6bf0-42c4-abb3-2fa2fcf4088c,0,1,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,1dcec107-9d5f-4b69-ad65-cc4cb1f27a9c,0,1,b366d7eb-626c-4c0c-b4cc-c392763e6e94,b366d7eb-626c-4c0c-b4cc-c392763e6e94,0,1,4c7e24aa-726a-4595-82ad-ef1e525b14fa,4c7e24aa-726a-4595-82ad-ef1e525b14fa,0,1,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,b9e5bb39-ed0a-4e12-b7e4-2d9b5015bf9c,0,1,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,dbced4aa-6432-4f0c-a99a-5a3e7b0f6755,0,1,e849e46c-2ce6-427b-92bc-06d7997f59bf,e849e46c-2ce6-427b-92bc-06d7997f59bf,0,1,5a971dc0-28bf-4426-9426-9f456aea080a,5a971dc0-28bf-4426-9426-9f456aea080a,0,1,1e7684f0-1b3b-4a32-8602-dd0672c5a800,1e7684f0-1b3b-4a32-8602-dd0672c5a800,0,1,ab178a93-8570-43b6-ae42-f34a7cc4f359,ab178a93-8570-43b6-ae42-f34a7cc4f359,0,1,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,4c82f31d-7a98-47dd-89dc-1846cb15bf3b,0,1,168e3189-2676-4cdb-bc9d-78d85df51faf,168e3189-2676-4cdb-bc9d-78d85df51faf,0,1,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,ecf1a87f-4ca4-4efb-a84c-b2db1b0e8829,0,1,470bbff8-20d0-475c-a61a-1a09ac14c2db,470bbff8-20d0-475c-a61a-1a09ac14c2db,0,1,6ea25680-c4db-4717-9498-62420ca16970,6ea25680-c4db-4717-9498-62420ca16970,0,1,c37a660e-16c5-495e-9486-e61bcb693fa0,c37a660e-16c5-495e-9486-e61bcb693fa0,0,1,8f44ebad-1160-474e-a566-fb9da55ffcba,8f44ebad-1160-474e-a566-fb9da55ffcba,0,1,11cf336e-7890-4972-bf71-32d7416ff647,11cf336e-7890-4972-bf71-32d7416ff647,0,1,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,4c4d61a6-6bb6-4a15-9a81-25fdcf96ec4b,0,1,14bd3392-36cd-4ed0-8847-44375d6fb861,14bd3392-36cd-4ed0-8847-44375d6fb861,0,1,759ede7a-e832-44e6-9b11-5bfb3c507820,759ede7a-e832-44e6-9b11-5bfb3c507820,0,1,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,2f2ac0db-db86-4ed2-a55a-b245b4d00d70,0,1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,821b93bd-f0dd-4468-972a-d9b2b4de72f1,0,1,56900066-90e3-40c0-b64a-8f7964a4dfc1,56900066-90e3-40c0-b64a-8f7964a4dfc1,0,1,56f0c4d6-9b13-486a-9586-05e657dca8be,56f0c4d6-9b13-486a-9586-05e657dca8be,0,1,c795c0d3-6a0d-4311-9821-df320663727e,c795c0d3-6a0d-4311-9821-df320663727e,0,1,512b8d89-8798-4549-9e79-b9c3f7d9098f,512b8d89-8798-4549-9e79-b9c3f7d9098f,0,1,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,e1fe71f8-f37c-4705-aca1-c25e2bdc5db6,0,1,7f356abf-9045-4a76-89f3-8b52d467122a,7f356abf-9045-4a76-89f3-8b52d467122a,0,1,625a61ac-4ad0-4b31-aa67-9f864154b9c4,625a61ac-4ad0-4b31-aa67-9f864154b9c4,0,1,51fa8d01-44a1-4e75-9b04-6a2504972f08,51fa8d01-44a1-4e75-9b04-6a2504972f08,0,1,73dae482-a1ee-4c57-8859-2dd8e8635a49,73dae482-a1ee-4c57-8859-2dd8e8635a49,0,1,7dca913d-e37a-4740-8e3d-677d379605ee,7dca913d-e37a-4740-8e3d-677d379605ee,0,1,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,bd1cf7ef-f3e2-4441-836b-16f2cc227aa9,0,1,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,c9035b0f-cfc4-4761-9ba0-a8aacfaa9c72,0,1,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,7efb0bf4-d40c-417b-b9bc-f4a5af66ec09,0,1,4cd4694f-17f8-43ba-8940-07628bd937fe,4cd4694f-17f8-43ba-8940-07628bd937fe,0,1,7df6c94b-3cfe-4764-988e-858d733e35d9,7df6c94b-3cfe-4764-988e-858d733e35d9,0,1,8b251c7d-2d55-4734-a1da-7f1115d95080,8b251c7d-2d55-4734-a1da-7f1115d95080,0,1,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,87b3153d-bef0-4441-8b1c-a5fc7ba4c36a,0,1,5a8c3621-595a-4168-8bba-a7f8d499e47e,5a8c3621-595a-4168-8bba-a7f8d499e47e,0,1,fc4cfed6-e492-4420-b357-8143a8c2a41a,fc4cfed6-e492-4420-b357-8143a8c2a41a,0,1,4311a250-64af-443e-a711-93b7c41175cf,4311a250-64af-443e-a711-93b7c41175cf,0,1,804b6c57-1d7b-4927-be5b-84b7959fe55e,804b6c57-1d7b-4927-be5b-84b7959fe55e,0,1,f2655d85-79ea-4736-8f41-94a4f9b2b998,f2655d85-79ea-4736-8f41-94a4f9b2b998,0,1,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,21258174-3a95-4c10-bb8f-4d6db0c5ae0e,0,1,a8eb5ed9-df99-405b-afad-eeaa98956eee,a8eb5ed9-df99-405b-afad-eeaa98956eee,0,1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,a64d4b1b-fae4-43ae-ae98-bdc4e59a94c1,0,1,26a1279f-91f0-4632-ad7c-21cf2f524208,26a1279f-91f0-4632-ad7c-21cf2f524208,0,1,bf751ed0-ee47-4eaf-81bd-f0da00bef343,bf751ed0-ee47-4eaf-81bd-f0da00bef343,0,1,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,14b65111-4c0e-4521-9fcd-2a8d4aaa6b4b,0,1,1f1def7c-e0ee-4963-afea-1751bf1b812c,1f1def7c-e0ee-4963-afea-1751bf1b812c,0,1,9a4c0898-ab56-425c-8191-5ab90f4e12bf,9a4c0898-ab56-425c-8191-5ab90f4e12bf,0,1,6841ec47-7a84-441a-b975-69d089072ce7,6841ec47-7a84-441a-b975-69d089072ce7,0,1,ead4001a-0d8a-4b95-8212-2a40e5aa6659,ead4001a-0d8a-4b95-8212-2a40e5aa6659,0,1,22165c8a-2179-4cd5-b195-bd2721e9e232,22165c8a-2179-4cd5-b195-bd2721e9e232,0,1,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,b28c3a8f-8cad-45eb-90d3-6d90a0b3f881,0,1,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,3c5974ec-f76d-401c-a8e4-d51c7cd4c4fb,0,1,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,609a9bc9-4225-4fe1-91fa-90c9c2e5cfba,0,1,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,d22ed498-c7df-45bb-869f-f16d3aa2d3d3,0,1,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,4a966f6e-87dd-4dae-9cc0-dbabee9424dc,0,1,9d9debfd-4a10-4f09-9d09-2aa5e058b525,9d9debfd-4a10-4f09-9d09-2aa5e058b525,0,1,fc19586c-d89c-495c-b473-6f85967ed48e,fc19586c-d89c-495c-b473-6f85967ed48e,0,1,2ac7c701-a281-4e77-a5f8-294526021e2d,2ac7c701-a281-4e77-a5f8-294526021e2d,0,1,979df549-889d-496a-b6ce-c56d54c771b5,979df549-889d-496a-b6ce-c56d54c771b5,0,1,91b320d8-3426-44d3-97d7-c200287d7343,91b320d8-3426-44d3-97d7-c200287d7343,0,1,b9297f72-b40a-4adb-9975-bb693d4834a4,b9297f72-b40a-4adb-9975-bb693d4834a4,0,1,41cf3916-216f-4c4e-a587-82777f4263e0,41cf3916-216f-4c4e-a587-82777f4263e0,0,1,2ce3a350-86f1-4275-8299-3c3693ca11fa,2ce3a350-86f1-4275-8299-3c3693ca11fa,0,1,59f0ed15-c84c-4f41-bdd4-26317e4e914d,59f0ed15-c84c-4f41-bdd4-26317e4e914d,0,1,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,4b5ff142-47b8-4548-b6f9-56ebcbd40e35,0,1,8fef790c-a3f4-460c-9093-5065cbdba196,8fef790c-a3f4-460c-9093-5065cbdba196,0,1,79bd24d0-61a9-4558-90ac-4e726066789c,79bd24d0-61a9-4558-90ac-4e726066789c,0,1,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,d843cbd7-e2b5-4c50-8ed2-7cb0baac8ecc,0,1,ef356548-51a4-4b09-b37d-ede5b8f3edb6,ef356548-51a4-4b09-b37d-ede5b8f3edb6,0,1,53c0d900-5e96-4381-a1ed-4424a5799608,53c0d900-5e96-4381-a1ed-4424a5799608,0,1,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,64fe317a-7d0e-4758-b5cf-0d871d2bf4ad,0,1,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,abfb7ac3-ebfa-4275-a039-a6b94bb9a76f,0,1,45ca9e20-1246-4400-a019-ffb521af6ea7,45ca9e20-1246-4400-a019-ffb521af6ea7,0,1,73eed854-5c3a-4a10-9bfa-793fd517f303,73eed854-5c3a-4a10-9bfa-793fd517f303,0,1,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,c3eb2836-ea4d-48cc-a03f-3a0c30f67e7f,0,1,9134dc40-a8f1-4c60-9431-27cb98be5ecd,9134dc40-a8f1-4c60-9431-27cb98be5ecd,0,1,16c4622a-33af-4a95-b44e-0861a6df21d2,16c4622a-33af-4a95-b44e-0861a6df21d2,0,1,d8cac67b-cce2-4a00-a8df-c6570c50153f,d8cac67b-cce2-4a00-a8df-c6570c50153f,0,1,37213c65-bf26-4e50-a2fa-58eb45439b58,37213c65-bf26-4e50-a2fa-58eb45439b58,0,1,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,e43c08a9-6496-4c8e-bfe2-9d728e31d63d,0,1,b6b31892-73ee-4c9b-92b0-2735536c4938,b6b31892-73ee-4c9b-92b0-2735536c4938,0,1,deb8b883-142e-47d0-a722-7c734a0cf9b3,deb8b883-142e-47d0-a722-7c734a0cf9b3,0,1,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,a6794f74-08a4-4b73-add7-e6d0d1b6e7a3,0,1,29233058-ccb1-4110-a9bc-cdb4c531f35a,29233058-ccb1-4110-a9bc-cdb4c531f35a,0,1,cf3729b2-9ee6-437c-81df-83966793be50,cf3729b2-9ee6-437c-81df-83966793be50,0,1,429d08b7-0b98-4f9b-a053-d04dd84a7026,429d08b7-0b98-4f9b-a053-d04dd84a7026,0,1,b64fd964-cee8-4619-872f-82d2fdc14240,b64fd964-cee8-4619-872f-82d2fdc14240,0,1,5ce7846d-9806-40f5-8631-4e14deb8bc95,5ce7846d-9806-40f5-8631-4e14deb8bc95,0,1,79528a0e-1e48-4d14-bd28-756fd5db57b9,79528a0e-1e48-4d14-bd28-756fd5db57b9,0,1,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,4eeab8c2-d901-4b95-adea-4a08f79d0fa2,0,1,d9426219-4b37-4776-8d5d-acab5825e789,d9426219-4b37-4776-8d5d-acab5825e789,0,1,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,7ce1f9eb-ac51-46fd-adc5-c8b9bfb32e44,0,1,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,4fef5026-1cba-4c33-ae75-5f9570a8e6b6,0,1,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,243ee3d4-4130-41ea-a37c-c7b39a5e73fa,0,1,29e7299a-ce80-497a-8102-615d0a001ea8,29e7299a-ce80-497a-8102-615d0a001ea8,0,1,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,f9e48170-62eb-4d6b-b861-c7af1b4a38c3,0,1,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,9bcc8f9a-ec12-45f2-8a32-6946d556f57a,0,1,adc2cc11-b647-453f-a98e-8a73b7c368c7,adc2cc11-b647-453f-a98e-8a73b7c368c7,0,1,4522c564-61da-40da-a749-5312121a331d,4522c564-61da-40da-a749-5312121a331d,0,1,9394c709-6cbe-4ef6-bc8c-cba8af65821e,9394c709-6cbe-4ef6-bc8c-cba8af65821e,0,1,029e7c7a-5b50-4d38-9fd0-d8a5a15b38ec,029e7c7a-5b50-4d38-9fd0-d8a5a15b38ec,0,1,506bf43b-f7df-4b42-b614-e5925b45b5e9,506bf43b-f7df-4b42-b614-e5925b45b5e9,0,1,58570514-a2cf-4e09-ba7a-d9efd8178269,58570514-a2cf-4e09-ba7a-d9efd8178269,0,1,c23aa057-42f4-4167-9224-693e904598c6,c23aa057-42f4-4167-9224-693e904598c6,0,1,2943b572-7411-4f92-a6cc-7ee552b85223,2943b572-7411-4f92-a6cc-7ee552b85223,0,1,28478e7a-e8aa-40aa-866c-a3624f903141,28478e7a-e8aa-40aa-866c-a3624f903141,0,1,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0ec0b1a0-5f0d-4a14-9a84-49098befa0af,0,1,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,c644ab9b-7bcb-4bfa-b8ba-4c5f7689c91c,0,1,dabb3395-6100-4f53-913d-e0230e81b494,dabb3395-6100-4f53-913d-e0230e81b494,0,1,e0a3fae1-1582-4c7a-acd8-870b558acec4,e0a3fae1-1582-4c7a-acd8-870b558acec4,0,1,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,8e755ce0-c571-4ed5-b0bb-9470edcb7c73,0,1,02e1c293-7302-4751-a248-4bbeed9cbad5,02e1c293-7302-4751-a248-4bbeed9cbad5,0,1,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,a9362ac4-85ee-4214-80c1-048fab769885,a9362ac4-85ee-4214-80c1-048fab769885,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,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,12ab57d3-ba96-46e9-86ef-2f3ba76fd5cb,12ab57d3-ba96-46e9-86ef-2f3ba76fd5cb,0,1,241db5c5-e3bc-4db8-bc88-39db84bb60e9,241db5c5-e3bc-4db8-bc88-39db84bb60e9,0,1,68e4f9d0-a5ed-42f9-8eb2-1f5a8d3894e8,68e4f9d0-a5ed-42f9-8eb2-1f5a8d3894e8,0,1,c147916d-1fb6-473d-bde0-8dd528dde8eb,c147916d-1fb6-473d-bde0-8dd528dde8eb,0,1,00359e00-aba0-4afb-8b58-2e1247dbe04f,00359e00-aba0-4afb-8b58-2e1247dbe04f,0,1,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,77bd95d6-3cd5-4b67-a0b6-72d24243fbc2,0,1,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0be7f905-53b8-4bb1-8e37-dcc142e508c5,0,1,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,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,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,62eff222-7b74-4cab-9138-880db1f05147,62eff222-7b74-4cab-9138-880db1f05147,0,1,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,39c6c277-cfc6-4e8a-8e7f-afcff55f0511,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,2fa4fb8b-9876-47b6-9c95-682d0e07ae7c,2fa4fb8b-9876-47b6-9c95-682d0e07ae7c,0,1,111e7c41-77b6-4d31-bc9c-136e4d09ac7b,111e7c41-77b6-4d31-bc9c-136e4d09ac7b,0,1,c50c02dc-c1ae-4ec8-859f-b9c179cc59e6,c50c02dc-c1ae-4ec8-859f-b9c179cc59e6,0,1,d5012e69-89bc-40af-8e4f-377a042854ee,d5012e69-89bc-40af-8e4f-377a042854ee,0,1,02f79fd8-5315-4c90-b520-db67dcb6e371,02f79fd8-5315-4c90-b520-db67dcb6e371,0,1,7f90681d-6534-40ee-bbb7-5356c0ed9de2,7f90681d-6534-40ee-bbb7-5356c0ed9de2,0,1,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,d1aca4be-1e1e-4bbd-b0a6-a68bc7c8c586,0,1,9bb52788-4a3a-48b5-a551-5ca753b6c059,9bb52788-4a3a-48b5-a551-5ca753b6c059,0,1,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,4fb5004f-3cd9-44c4-a44b-d235cccf9e9c,0,1,872a0c47-fab5-4a54-8ab9-23940bbdefbb,872a0c47-fab5-4a54-8ab9-23940bbdefbb,0,1,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,7428a626-3fbc-4f2c-a3dd-f14e8d90c00b,0,1,ec1755ed-d203-4548-9f1d-dd62ce331ecf,ec1755ed-d203-4548-9f1d-dd62ce331ecf,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,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,a6d48910-d526-4e8f-9414-ca776a7edaa3,a6d48910-d526-4e8f-9414-ca776a7edaa3,0,1,1e8cd163-ca9b-42eb-b8c9-c3d44e7e486b,1e8cd163-ca9b-42eb-b8c9-c3d44e7e486b,0,1,6bf8f383-af77-4be9-bda4-4d4220dfe374,6bf8f383-af77-4be9-bda4-4d4220dfe374,0,1,b5c92c97-c4d2-4b4c-86be-035bfd17f905,b5c92c97-c4d2-4b4c-86be-035bfd17f905,0,1,a5bb3835-9dcf-4924-9c96-695e5173d702,a5bb3835-9dcf-4924-9c96-695e5173d702,0,1,afa26db4-77a4-437c-965a-fefc6086c1a1,afa26db4-77a4-437c-965a-fefc6086c1a1,0,1,7e005845-c321-4529-b112-2dec63720195,7e005845-c321-4529-b112-2dec63720195,0,1,48f7b074-2e43-4221-a36c-e2e30c22def6,48f7b074-2e43-4221-a36c-e2e30c22def6,0,1,df2f5d28-b460-4692-861d-fbe39cb726b6,df2f5d28-b460-4692-861d-fbe39cb726b6,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,2178ab47-1bb1-4fe0-940d-6876b66333c1,2178ab47-1bb1-4fe0-940d-6876b66333c1,0,1,8cc09f48-2ef2-434b-b33e-ab9b021816de,8cc09f48-2ef2-434b-b33e-ab9b021816de,0,1,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,2ca1741b-1e65-4a54-a4a5-489e73cfb4f3,0,1,360b086c-53e3-4514-a4f5-9379ab368b76,360b086c-53e3-4514-a4f5-9379ab368b76,0,1,e6feefa1-7298-4ab0-85d3-9abee571a627,e6feefa1-7298-4ab0-85d3-9abee571a627,0,1,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,b01666e4-985e-4a8e-bd68-9eb46b1ae1f0,b01666e4-985e-4a8e-bd68-9eb46b1ae1f0,0,1,45a48f71-4b62-4d3a-9ffc-76e8d4862d4e,45a48f71-4b62-4d3a-9ffc-76e8d4862d4e,0,1,5f08a477-fac0-4763-baf6-2839ed4de918,5f08a477-fac0-4763-baf6-2839ed4de918,0,1,17aadd5f-cda2-4785-a07f-3ab4b04434a6,17aadd5f-cda2-4785-a07f-3ab4b04434a6,0,1,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,71bc35e6-0fec-4e54-af2d-23d1357d1c3b,0,1,1832336e-32f6-42c4-9087-8614ead52bb3,1832336e-32f6-42c4-9087-8614ead52bb3,0,1,ff9f7b5c-70f4-4eed-8216-64448e7da76f,ff9f7b5c-70f4-4eed-8216-64448e7da76f,0,1,44ac2869-990d-4cac-a14b-c1a28854341e,44ac2869-990d-4cac-a14b-c1a28854341e,0,1,d5df31c3-89f9-469c-80a9-fb4706d30bc4,d5df31c3-89f9-469c-80a9-fb4706d30bc4,0,1,e73a6a9d-8ddd-4531-9f17-745117d9da9b,e73a6a9d-8ddd-4531-9f17-745117d9da9b,0,1,9dd4e17c-d10b-435e-8665-08997edc3e7e,9dd4e17c-d10b-435e-8665-08997edc3e7e,0,1,cafd44e1-8509-4550-8329-ff8cab0c31ae,cafd44e1-8509-4550-8329-ff8cab0c31ae,0,1,105cd740-1f60-45e1-871c-adeecd291b0d,105cd740-1f60-45e1-871c-adeecd291b0d,0,1,95aec7d2-179b-4ea3-a3df-3d737b713564,95aec7d2-179b-4ea3-a3df-3d737b713564,0,1,4bd1cae4-d5b5-444e-9cf5-67a969714293,4bd1cae4-d5b5-444e-9cf5-67a969714293,0,1,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,b1a330d7-9b88-44e9-aba6-41ce5e5e669c,0,1,f279a625-b88f-43b4-bce9-de1186fe7d7e,f279a625-b88f-43b4-bce9-de1186fe7d7e,0,1,99fc224a-2a61-441a-85e9-d69df6aa8b5e,99fc224a-2a61-441a-85e9-d69df6aa8b5e,0,1,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,a528c26f-3ceb-4ae4-8420-edfbdea6e1ac,0,1,d009782b-d73e-42d1-9979-2cbaf20ee98e,d009782b-d73e-42d1-9979-2cbaf20ee98e,0,1,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,1ef6282c-ae81-4d76-8e3e-99fec58fc7bd,0,1,88d8edf7-654f-4627-b68d-c7e929726da6,88d8edf7-654f-4627-b68d-c7e929726da6,0,1,01579044-5659-4a73-a989-c52cfabaae66,01579044-5659-4a73-a989-c52cfabaae66,0,1,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,9b8509e8-8262-4e6a-b2f3-a0df8f49e2c5,0,1,6a798c80-459f-49ef-a8c2-83842ce4252c,6a798c80-459f-49ef-a8c2-83842ce4252c,0,1,911baaa1-a4de-4558-b00e-51644144a762,911baaa1-a4de-4558-b00e-51644144a762,0,1,d6400a59-6e02-4212-bb5a-9e49767aa8d6,d6400a59-6e02-4212-bb5a-9e49767aa8d6,0,1,6016d26e-fe39-4c16-b2b5-15f8c663125e,6016d26e-fe39-4c16-b2b5-15f8c663125e,0,1,6c19d9b0-1a41-4f82-a289-9fe05e272079,6c19d9b0-1a41-4f82-a289-9fe05e272079,0,1,df8063e2-47f1-4230-8e3c-eeee2143c72a,df8063e2-47f1-4230-8e3c-eeee2143c72a,0,1,89856ba2-f39a-41cd-be94-61243c6a0b96,89856ba2-f39a-41cd-be94-61243c6a0b96,0,1,8bdb0483-6ea9-4553-91ac-9cde267aae19,8bdb0483-6ea9-4553-91ac-9cde267aae19,0,1,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,56c9fa68-467b-4c1b-813e-6bc7ac0375cb,0,1,bf30f5a1-6542-469f-b3fe-eee726110ffb,bf30f5a1-6542-469f-b3fe-eee726110ffb,0,1,13367a31-c2c9-43ea-b248-8a92e95ecd53,13367a31-c2c9-43ea-b248-8a92e95ecd53,0,1,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,8a8ad123-c01a-440a-bd01-1c0da72cf2eb,0,1,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,ca4ef957-36c2-43b9-8ff7-e2b7ee58cde5,0,1,4e036eff-92a8-4010-89b2-ed949c123311,4e036eff-92a8-4010-89b2-ed949c123311,0,1,38160114-dc22-4d0b-86a5-d650f4756932,38160114-dc22-4d0b-86a5-d650f4756932,0,1,50ee876f-6860-443b-9857-aca772d711ea,50ee876f-6860-443b-9857-aca772d711ea,0,1,6955edb2-d481-432c-b282-58dc07fd067b,6955edb2-d481-432c-b282-58dc07fd067b,0,1,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,77e5bd01-35f3-4072-bc7a-8730e6dcbab3,0,1,58b33683-1916-4aef-9b98-5569ef7782ed,58b33683-1916-4aef-9b98-5569ef7782ed,0,1,d3e1f622-f438-4cad-94ae-0272f51610f7,d3e1f622-f438-4cad-94ae-0272f51610f7,0,1,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,64ac2c2a-2726-4ab9-9a6a-3d08f3fc0618,0,1,8569cd73-d40d-4d92-83e0-8ece0c03a86a,8569cd73-d40d-4d92-83e0-8ece0c03a86a,0,1,6a675752-fd31-46a5-8a62-2a1ede437c68,6a675752-fd31-46a5-8a62-2a1ede437c68,0,1,bf29c091-de15-4cd4-be0e-a9785f97d444,bf29c091-de15-4cd4-be0e-a9785f97d444,0,1,060b2bb4-ca03-4da9-930f-7f91f6299a35,060b2bb4-ca03-4da9-930f-7f91f6299a35,0,1,394b1a1c-a7ae-41b7-a346-4bac99fa567d,394b1a1c-a7ae-41b7-a346-4bac99fa567d,0,1,9a5fa511-59e8-4a1b-a101-f276f0b7b261,9a5fa511-59e8-4a1b-a101-f276f0b7b261,0,1,ccfe4e36-80b6-419f-8bb3-c1046203d023,ccfe4e36-80b6-419f-8bb3-c1046203d023,0,1,94b2e060-53b7-4b40-af05-30bea3520330,94b2e060-53b7-4b40-af05-30bea3520330,0,1,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0f634f7e-7d6b-43e4-8e5e-a31ed05898ea,0,1,41b0dabd-85a3-4819-84dd-371eaf4f996e,41b0dabd-85a3-4819-84dd-371eaf4f996e,0,1,86a5ba4d-0681-4ddc-a505-0f537528e1a3,86a5ba4d-0681-4ddc-a505-0f537528e1a3,0,1,12d936f5-932b-4561-b934-c8444808a450,12d936f5-932b-4561-b934-c8444808a450,0,1,2ccb06ca-9bb7-4b74-9a96-c109bb117984,2ccb06ca-9bb7-4b74-9a96-c109bb117984,0,1,ac1a661d-db18-4576-80a9-a19d4140c05e,ac1a661d-db18-4576-80a9-a19d4140c05e,0,1,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,acd89f6c-a25f-47b9-ac21-036bfafcc0fc,0,1,c3ffeb09-121b-4d77-9c15-def4648b4f3c,c3ffeb09-121b-4d77-9c15-def4648b4f3c,0,1,c2de0724-04c1-4adb-b62a-b7ba727dbe67,c2de0724-04c1-4adb-b62a-b7ba727dbe67,0,1,4ae26777-69ff-4a55-942b-0bad8ab7a70a,4ae26777-69ff-4a55-942b-0bad8ab7a70a,0,1,a0d8fb0a-0e90-4140-8687-e249b153dc66,a0d8fb0a-0e90-4140-8687-e249b153dc66,0,1,917c6f60-2a07-4587-9496-d393aff93953,917c6f60-2a07-4587-9496-d393aff93953,0,1,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,4bac50a2-762a-44e6-b8c5-3b09ef1a3f5e,0,1,9fe72d73-4c95-47e0-bf92-dcb714d747c6,9fe72d73-4c95-47e0-bf92-dcb714d747c6,0,1,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,fe00e64f-2fa9-44a7-9bd7-854ebb6c0185,0,1,b6f8bc3e-f0cd-43ef-b060-d701cd446197,b6f8bc3e-f0cd-43ef-b060-d701cd446197,0,1,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,4f10e5f9-6cfd-4fa9-9c72-d19a484a796c,0,1,b94e805f-e1ab-4870-b855-98aa401864b2,b94e805f-e1ab-4870-b855-98aa401864b2,0,1,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,ff8eedeb-fc3e-4bee-852b-6da6d59ff38c,0,1,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,a98bd18f-ccda-41a2-a1b2-8b37cc1f6c36,0,1,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,62f9fe19-3d64-4506-a0bc-dbfe47b4df64,0,1,60aaa289-1f07-438c-8f10-81058ac671c3,60aaa289-1f07-438c-8f10-81058ac671c3,0,1,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,7312a4ab-a269-4d85-a2c2-25bd5c5dc59c,0,1,c44b0868-bd7f-4230-973b-544ff4dd2afe,c44b0868-bd7f-4230-973b-544ff4dd2afe,0,1,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,51e6a6f9-ce9d-4cb0-a40c-384ede074e07,0,1,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,6236ac73-5b9f-4fb5-bb2c-a5d8e205c5db,0,1,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,5e22429f-9ec0-4943-bf80-1becc4b8e5cb,0,1,0153e60e-daca-48ac-b1c6-adecc89f579e,0153e60e-daca-48ac-b1c6-adecc89f579e,0,1,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,1ed4cf25-19f0-49f5-96a0-0ffe13adfe35,0,1,a896bc34-30a6-48b6-acfc-786c24c186bd,a896bc34-30a6-48b6-acfc-786c24c186bd,0,1,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,3867f4cb-bf54-42fb-8ea6-ca51d7cd6c91,0,1,da8ae00a-7207-4ceb-b739-9114888c5b27,da8ae00a-7207-4ceb-b739-9114888c5b27,0,1,ac028c56-b2a8-4a9b-a325-554c636f838e,ac028c56-b2a8-4a9b-a325-554c636f838e,0,1,783db3c5-05a7-466a-825e-65a10eb0e3d9,783db3c5-05a7-466a-825e-65a10eb0e3d9,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,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,49d713b8-6a61-4bd1-9650-0de1869967d2,49d713b8-6a61-4bd1-9650-0de1869967d2,0,1,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,4738ffd0-3c3b-4e5f-8773-0c9a80efdfbf,0,1,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,3d1bae2a-4dfd-48e5-bfe9-b7e30c8475f6,0,1,8e07a76d-db30-491c-b296-181c8e689382,8e07a76d-db30-491c-b296-181c8e689382,0,1,1a41acdd-3503-4c69-b93b-eb1cb6749712,1a41acdd-3503-4c69-b93b-eb1cb6749712,0,1,0ddeed48-b98a-47c3-84a2-2eac065be06c,0ddeed48-b98a-47c3-84a2-2eac065be06c,0,1,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,7987fe2c-d7cc-4fd2-ac4e-610bfb1ab6d2,0,1,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,fc18d95e-a51d-45c0-83b0-09aeb2b5b03a,0,1,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,c6ec9d48-9131-4735-9cf7-b498705a57e4,c6ec9d48-9131-4735-9cf7-b498705a57e4,0,1,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,865d76f7-db4a-4fa2-8e1c-3ecbc2d8faf4,0,1,0422d7e9-b329-4ae5-b6d4-001a9a38e40f,0422d7e9-b329-4ae5-b6d4-001a9a38e40f,0,1,350ec27c-3947-4f36-b284-331e775453fb,350ec27c-3947-4f36-b284-331e775453fb,0,1,f1208b69-f100-4cef-9865-cc342169a697,f1208b69-f100-4cef-9865-cc342169a697,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,3370d43e-8e97-4411-8123-2bb2bcf60a75,3370d43e-8e97-4411-8123-2bb2bcf60a75,0,1,d9d377c9-406f-4bc9-8076-1f049348b816,d9d377c9-406f-4bc9-8076-1f049348b816,0,1,dcfcb108-3761-43d9-ad2a-29633bd1ae47,dcfcb108-3761-43d9-ad2a-29633bd1ae47,0,1,36baa776-83c4-413d-b70c-cbbc45e25662,36baa776-83c4-413d-b70c-cbbc45e25662,0,1,b65f9165-c20d-4053-8a0b-cff3f693b762,b65f9165-c20d-4053-8a0b-cff3f693b762,0,1,51af096b-687f-44f4-a0d8-306f670fc5ce,51af096b-687f-44f4-a0d8-306f670fc5ce,0,1,75972f88-aedd-4338-a3b5-320cd632a2e6,75972f88-aedd-4338-a3b5-320cd632a2e6,0,1,a720abc8-dcf0-4684-8d94-22d394a8e4df,a720abc8-dcf0-4684-8d94-22d394a8e4df,0,1,e40f53de-c27b-4e74-8241-f784d7ca5c84,e40f53de-c27b-4e74-8241-f784d7ca5c84,0,1,ef38b84d-277e-48c2-8826-330132eb6807,ef38b84d-277e-48c2-8826-330132eb6807,0,1,67a50910-059a-4724-84e0-c21bc3ac74c2,67a50910-059a-4724-84e0-c21bc3ac74c2,0,1,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,9e78a2b9-44fc-4971-801d-1ddd4bb09cfd,0,1,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,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,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,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,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,3158ffef-5aaa-43d3-83ca-40626aa33d3c,3158ffef-5aaa-43d3-83ca-40626aa33d3c,0,1,36940f2c-b655-4d50-af16-2fb70acf5cdb,36940f2c-b655-4d50-af16-2fb70acf5cdb,0,1,7a0d7396-efed-4b57-92b6-e4ac74638b21,7a0d7396-efed-4b57-92b6-e4ac74638b21,0,1,42ff1536-0f3f-467b-b8f4-67260e5d87e3,42ff1536-0f3f-467b-b8f4-67260e5d87e3,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,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,dba174fb-8392-4451-8069-ae8145658e34,dba174fb-8392-4451-8069-ae8145658e34,0,1,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,ff5dd4f8-8a16-4a41-875d-c4f7c37ae67a,0,1,4435d99d-a1df-43e6-97ab-5e651017c61d,4435d99d-a1df-43e6-97ab-5e651017c61d,0,1,fb58d277-b2a5-4a72-8d45-170c6f6263f9,fb58d277-b2a5-4a72-8d45-170c6f6263f9,0,1,325ed391-8558-4f03-9784-cde1f2a32944,325ed391-8558-4f03-9784-cde1f2a32944,0,1,f6cda05a-0f8f-4aa2-9686-1735c4207db3,f6cda05a-0f8f-4aa2-9686-1735c4207db3,0,1,0761ea58-8358-49ba-8e2d-e6afe88f6899,0761ea58-8358-49ba-8e2d-e6afe88f6899,0,1,da09e340-7cc0-4830-917a-5a59c42bbbf7,da09e340-7cc0-4830-917a-5a59c42bbbf7,0,1,c325aa12-9564-4033-8d3e-3103df55427f,c325aa12-9564-4033-8d3e-3103df55427f,0,1,9f4d4834-6994-4573-b99d-a5051746e5f9,9f4d4834-6994-4573-b99d-a5051746e5f9,0,1,c8ef3db5-2562-4f80-a679-86c2ba288ebf,c8ef3db5-2562-4f80-a679-86c2ba288ebf,0,1,2398d69d-ecdd-4d34-bdae-34ed5507a61e,2398d69d-ecdd-4d34-bdae-34ed5507a61e,0,1,a707035a-0172-4b55-b589-fa4a8be9b596,a707035a-0172-4b55-b589-fa4a8be9b596,0,1,c4456e94-8c76-49b1-b85a-433e0f65bdb0,c4456e94-8c76-49b1-b85a-433e0f65bdb0,0,1,4a347209-3a07-48ea-b407-6ee37f1d69f2,4a347209-3a07-48ea-b407-6ee37f1d69f2,0,1,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,617de19c-bf01-4900-832a-c169e9faeb79,617de19c-bf01-4900-832a-c169e9faeb79,0,1,70b73fd0-f5dc-411e-9bbb-10a538e8281b,70b73fd0-f5dc-411e-9bbb-10a538e8281b,0,1,758f44ad-54da-4f72-accf-0afecc4f4827,758f44ad-54da-4f72-accf-0afecc4f4827,0,1,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,7c424a77-2a83-4a85-8b7d-e8bb6d013c77,0,1,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,ecaba9aa-fca7-42f5-a4fe-d8176cf875b9,0,1,4378ab20-5467-476b-8f04-4b6876efdee6,4378ab20-5467-476b-8f04-4b6876efdee6,0,1,55e47901-c79c-41c5-9d7f-6b6846ed2782,55e47901-c79c-41c5-9d7f-6b6846ed2782,0,1,3c429fe8-e663-4a58-817f-8f8382697dbb,3c429fe8-e663-4a58-817f-8f8382697dbb,0,1,c37be0c3-d2db-4e63-a8cb-7956a5396650,c37be0c3-d2db-4e63-a8cb-7956a5396650,0,1,83180e0d-fc4b-41ec-9a17-5af555a4776f,83180e0d-fc4b-41ec-9a17-5af555a4776f,0,1,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,7f68e4c1-c4f7-4c6c-8f0a-225e544e07ee,0,1,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,f03cdb56-ef3f-461f-91b1-cdcaed2786e8,0,1,3e8c6546-416c-4437-8c85-2cf591b4fc3f,3e8c6546-416c-4437-8c85-2cf591b4fc3f,0,1,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,038e5027-3cc5-4ea2-b0b5-28a7544ad53e,0,1,9a0b27db-e4ac-496b-b6de-876b90381527,9a0b27db-e4ac-496b-b6de-876b90381527,0,1,4b48f705-0fdd-49e9-b912-5d2b8ae86d6d,4b48f705-0fdd-49e9-b912-5d2b8ae86d6d,0,1,18df66fe-f271-462e-822d-2f16dbb8c58f,18df66fe-f271-462e-822d-2f16dbb8c58f,0,1,80337d19-4661-429d-a108-c5b2b0f31fdf,80337d19-4661-429d-a108-c5b2b0f31fdf,0,1,1f2502be-56fc-44fa-9341-00ed0463dbb4,1f2502be-56fc-44fa-9341-00ed0463dbb4,0,1,018caa10-88e0-452f-b0c1-65778104b290,018caa10-88e0-452f-b0c1-65778104b290,0,1,f3e237ee-a696-42d9-966d-bbb7ecb354ce,f3e237ee-a696-42d9-966d-bbb7ecb354ce,0,1,5786dce7-e9a3-437a-b694-ca93ea87363f,5786dce7-e9a3-437a-b694-ca93ea87363f,0,1,e3f81324-3366-4de5-b834-688fee5ea625,e3f81324-3366-4de5-b834-688fee5ea625,0,1,205928c7-042b-4f11-919b-5ca9d1fc1ecb,205928c7-042b-4f11-919b-5ca9d1fc1ecb,0,1,b928a3e7-6d57-44f7-8c1e-c5df9a803a49,b928a3e7-6d57-44f7-8c1e-c5df9a803a49,0,1,e1c11609-5400-43ed-887c-22ba3a48a384,e1c11609-5400-43ed-887c-22ba3a48a384,0,1,1c99dd99-fd0a-4342-b7dd-ccf859e41f38,1c99dd99-fd0a-4342-b7dd-ccf859e41f38,0,1,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,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,fb94e9cb-1f27-42a6-a701-18bbe5888e70,fb94e9cb-1f27-42a6-a701-18bbe5888e70,0,1,2e26e32e-a0c6-4460-99de-865622202166,2e26e32e-a0c6-4460-99de-865622202166,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,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,112401b8-2800-4ed2-b620-7e1c1cacef2b,112401b8-2800-4ed2-b620-7e1c1cacef2b,0,1,6738abb6-483b-422d-9c4c-6fb6f8fee2cb,6738abb6-483b-422d-9c4c-6fb6f8fee2cb,0,1,742f14c0-a601-4cc1-9b89-b05cda5a2aac,742f14c0-a601-4cc1-9b89-b05cda5a2aac,0,1,2aaf3896-f7b2-405b-ac47-b4999ede382e,2aaf3896-f7b2-405b-ac47-b4999ede382e,0,1,f470a359-5c0c-4cd9-b470-b08b5f9dcd9f,f470a359-5c0c-4cd9-b470-b08b5f9dcd9f,0,1,c2a2daf0-b4dd-4a22-a0da-8325ff098cc3,c2a2daf0-b4dd-4a22-a0da-8325ff098cc3,0,1,f9484b9d-150f-4f1b-9041-4af10bf25ca6,f9484b9d-150f-4f1b-9041-4af10bf25ca6,0,1,795ffcdc-30cf-45a8-821a-66afdd86f7b3,795ffcdc-30cf-45a8-821a-66afdd86f7b3,0,1,227cb2ed-98df-441f-afd8-499e75dc6666,227cb2ed-98df-441f-afd8-499e75dc6666,0,1,07b55200-f01f-4d4e-a7a9-01b99301e8a0,07b55200-f01f-4d4e-a7a9-01b99301e8a0,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,9f021ea4-cb5b-4248-a79e-0a23e0fac748,9f021ea4-cb5b-4248-a79e-0a23e0fac748,0,1,d5e6cf20-9a74-40bf-9eeb-c91029f014f0,d5e6cf20-9a74-40bf-9eeb-c91029f014f0,0,1,46d94d4c-f76e-4fb4-b0be-39733f0493d9,46d94d4c-f76e-4fb4-b0be-39733f0493d9,0,1,e5936679-41a1-4b0d-9f11-6c83eb6740e8,e5936679-41a1-4b0d-9f11-6c83eb6740e8,0,1,40e2fb30-bb03-4178-a8eb-ddf48337ef23,40e2fb30-bb03-4178-a8eb-ddf48337ef23,0,1,1026fbcb-acd8-40dc-b638-6e02c6378c55,1026fbcb-acd8-40dc-b638-6e02c6378c55,0,1,dc9e2ba6-f4f1-493f-9054-cac633f239dd,dc9e2ba6-f4f1-493f-9054-cac633f239dd,0,1,7b95d0b1-c7b2-43b4-9119-320cb8912032,7b95d0b1-c7b2-43b4-9119-320cb8912032,0,1,004582b7-00aa-405e-8e24-ce76c945edae,004582b7-00aa-405e-8e24-ce76c945edae,0,1,97a9b005-a836-4308-8e63-0e00f6890baa,97a9b005-a836-4308-8e63-0e00f6890baa,0,1,98c34ada-0b78-41db-9183-6d7b9e466bde,98c34ada-0b78-41db-9183-6d7b9e466bde,0,1,fb688339-918e-40a1-8721-a26f3077973e,fb688339-918e-40a1-8721-a26f3077973e,0,1,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,1f56de63-81eb-4de5-ad20-01cb6f84e5b0,0,1,079ba95c-8293-47e2-b8bd-7acf73c2d880,079ba95c-8293-47e2-b8bd-7acf73c2d880,0,1,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,fbe1dcf7-c11d-4395-ab3a-c2f986c25419,0,1,a5f264a8-a547-4653-abb1-eb1666d527dc,a5f264a8-a547-4653-abb1-eb1666d527dc,0,1,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,d1b6c5e8-7625-43aa-bb11-943c9bfa01b7,0,1,83d23220-0226-4efe-a81c-6809459443a2,83d23220-0226-4efe-a81c-6809459443a2,0,1,ee30252f-ea25-4d50-b49c-163514bee342,ee30252f-ea25-4d50-b49c-163514bee342,0,1,02afc219-6b86-4282-ab6f-2688203542b7,02afc219-6b86-4282-ab6f-2688203542b7,0,1,dabae379-6356-497a-aab5-cf102f16a72a,dabae379-6356-497a-aab5-cf102f16a72a,0,1,337370e0-1021-4887-9d38-6c3833c90a5b,337370e0-1021-4887-9d38-6c3833c90a5b,0,1,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0ff569eb-d5b8-4ab1-ac77-5e5afd6d44d0,0,1,d6f01f1c-801b-4776-ae11-48236103f76a,d6f01f1c-801b-4776-ae11-48236103f76a,0,1,b6fe68cf-657b-40e0-af2e-247607a86519,b6fe68cf-657b-40e0-af2e-247607a86519,0,1,9b0b8191-94b7-428f-be86-e9e4cd24a72f,9b0b8191-94b7-428f-be86-e9e4cd24a72f,0,1,a923dbcb-7146-4445-ad17-f4a32c16a837,a923dbcb-7146-4445-ad17-f4a32c16a837,0,1,41dec792-1d1a-4e06-a54b-a86193b98225,41dec792-1d1a-4e06-a54b-a86193b98225,0,1,52257beb-3e0c-4681-b430-9690398cd13a,52257beb-3e0c-4681-b430-9690398cd13a,0,1,f71bd0e8-8784-452e-bea9-3696c875d69d,f71bd0e8-8784-452e-bea9-3696c875d69d,0,1,135e637c-c28e-4547-8da2-d897dca54cb2,135e637c-c28e-4547-8da2-d897dca54cb2,0,1,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,245be006-6d0a-4c9e-97c5-f3c2ddd734f7,0,1,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,a0b74de9-06b5-416c-9dd0-2f9dc209fe91,0,1,5356543a-db9a-4265-b83f-31d45544c8e6,5356543a-db9a-4265-b83f-31d45544c8e6,0,1,857dd311-9c6d-4dba-82d8-283d7b05b09e,857dd311-9c6d-4dba-82d8-283d7b05b09e,0,1,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,1055d15b-8cb5-4ff0-a526-7fd20a08a96c,0,1,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,1a4ed7cf-3294-4a5c-9650-75b61d6b2531,0,1,81ef02df-498d-4af0-8254-dc6730cbf140,81ef02df-498d-4af0-8254-dc6730cbf140,0,1,872521e3-413c-45ac-a6ea-39fe1324bae8,872521e3-413c-45ac-a6ea-39fe1324bae8,0,1,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,c4968b4e-0715-43a5-92ad-c8cd276fbf7b,0,1,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,402f2fe0-4d08-4701-9c8f-0c2bb75815ef,0,1,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,8cad6cfd-91d0-4563-800a-d60c8a1b6a03,0,1,2902460a-ed86-41cf-8e8f-895adab9a72f,2902460a-ed86-41cf-8e8f-895adab9a72f,0,1,f82d5bd6-4c74-4c23-978c-565aae3d752a,f82d5bd6-4c74-4c23-978c-565aae3d752a,0,1,403d4675-b80e-4e0a-8cc0-2876661d0c89,403d4675-b80e-4e0a-8cc0-2876661d0c89,0,1,7fba41a5-4faa-412b-b367-b30ced0314c0,7fba41a5-4faa-412b-b367-b30ced0314c0,0,1,98422d20-9a71-40e4-966e-6958d44eaefb,98422d20-9a71-40e4-966e-6958d44eaefb,0,1,37333d0b-3589-4b8b-bf6c-e605e0287b66,37333d0b-3589-4b8b-bf6c-e605e0287b66,0,1,d671bea8-51b2-4a93-9594-3ae6bb1ace52,d671bea8-51b2-4a93-9594-3ae6bb1ace52,0,1,ad083c26-7461-4e94-b524-0174242fbd91,ad083c26-7461-4e94-b524-0174242fbd91,0,1,5ce39370-f918-493f-bb24-53346b6fd836,5ce39370-f918-493f-bb24-53346b6fd836,0,1,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,84f22fd2-e0d0-42ce-8628-1b13c021a4cb,0,1,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0e3d2750-bb4c-42b9-9829-60f1480ced9c,0,1,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,dad11c2e-08fc-4a6b-8829-8be6c64c15fc,0,1,a76b1fd1-ba00-40e6-8756-f17fee449818,a76b1fd1-ba00-40e6-8756-f17fee449818,0,1,5c913626-48d1-4e0a-a423-64078ce59c7b,5c913626-48d1-4e0a-a423-64078ce59c7b,0,1,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0a4e6b7a-b380-4547-bc3c-5d6895a5d19a,0,1,7b0ec304-1904-413e-a9c6-ff62e87107dd,7b0ec304-1904-413e-a9c6-ff62e87107dd,0,1,d4dd8c96-914d-496f-b735-ef85ec473605,d4dd8c96-914d-496f-b735-ef85ec473605,0,1,62517db4-59e6-4945-bcd6-b3f1845572bf,62517db4-59e6-4945-bcd6-b3f1845572bf,0,1,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,a6a9dd40-24cd-4d40-a12d-44f94f8c05a7,0,1,f0f72149-0e7f-441a-b70d-8f47d4977927,f0f72149-0e7f-441a-b70d-8f47d4977927,0,1,776efc3e-ac27-4550-bafd-6e91aa987af2,776efc3e-ac27-4550-bafd-6e91aa987af2,0,1,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,9f478c85-b72c-40ae-aa08-7ddf73b5b15c,0,1,cc438366-85ea-48be-8b74-d05cddb1fc51,cc438366-85ea-48be-8b74-d05cddb1fc51,0,1,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,4688fd3b-4a92-4ed8-b111-0cf22a729b1c,0,1,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,92029d1f-0472-4aaa-8fd6-9fb3c3cf414e,0,1,3271b800-1825-422f-97bb-757baf403e90,3271b800-1825-422f-97bb-757baf403e90,0,1,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,6fd6efc1-facc-4ece-a5b3-3dce6acca81d,0,1,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,4ee82868-7a20-4c3a-91f9-42a6bf53ac37,0,1,a040c756-4687-4bfd-a690-b122d3c490e5,a040c756-4687-4bfd-a690-b122d3c490e5,0,1,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,bd5940d5-13fd-4f59-bb6c-614f93f9c8e4,0,1,961a9801-3956-4ea0-b0d3-908f09bf4929,961a9801-3956-4ea0-b0d3-908f09bf4929,0,1,6fac5c14-e126-4342-9078-edf1d0efcbf2,6fac5c14-e126-4342-9078-edf1d0efcbf2,0,1,0a3325a1-21c4-4997-882f-4ac2edc175f0,0a3325a1-21c4-4997-882f-4ac2edc175f0,0,1,f0620d5a-e1fe-419f-af37-e0f462f97e8d,f0620d5a-e1fe-419f-af37-e0f462f97e8d,0,1,3e2f2ae1-c809-43fc-8276-b0a16a92858c,3e2f2ae1-c809-43fc-8276-b0a16a92858c,0,1,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,b58942ca-1367-4e1d-b5b4-7d973d0fecd8,0,1,1a7c7427-bead-4655-9dd6-df6e722663c5,1a7c7427-bead-4655-9dd6-df6e722663c5,0,1,34f9826f-3ab5-4849-8ef9-ab0fab3e471b,34f9826f-3ab5-4849-8ef9-ab0fab3e471b,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 f902bd432..a299520af 100644 --- a/SSL/src/Configuration/SessionModule.bsl +++ b/SSL/src/Configuration/SessionModule.bsl @@ -1,7 +1,13 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) + // СтандартныеПодсистемы СтандартныеПодсистемыСервер.УстановкаПараметровСеанса(ИменаПараметровСеанса); + // Конец СтандартныеПодсистемы КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/АдресАгентаСервиса/АдресАгентаСервиса.mdo b/SSL/src/Constants/АдресАгентаСервиса/АдресАгентаСервиса.mdo index c7f4fab00..6dbf2ade0 100644 --- a/SSL/src/Constants/АдресАгентаСервиса/АдресАгентаСервиса.mdo +++ b/SSL/src/Constants/АдресАгентаСервиса/АдресАгентаСервиса.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/АдресВебСервиса1СДокументооборот/АдресВебСервиса1СДокументооборот.mdo b/SSL/src/Constants/АдресВебСервиса1СДокументооборот/АдресВебСервиса1СДокументооборот.mdo index bed8d9a59..17efc9fd4 100644 --- a/SSL/src/Constants/АдресВебСервиса1СДокументооборот/АдресВебСервиса1СДокументооборот.mdo +++ b/SSL/src/Constants/АдресВебСервиса1СДокументооборот/АдресВебСервиса1СДокументооборот.mdo @@ -14,7 +14,6 @@ String - true ru Адрес веб сервиса 1C:Документооборот diff --git a/SSL/src/Constants/АдресВебСервисаБиблиотекиФайлов/АдресВебСервисаБиблиотекиФайлов.mdo b/SSL/src/Constants/АдресВебСервисаБиблиотекиФайлов/АдресВебСервисаБиблиотекиФайлов.mdo index 1fd752618..99071c842 100644 --- a/SSL/src/Constants/АдресВебСервисаБиблиотекиФайлов/АдресВебСервисаБиблиотекиФайлов.mdo +++ b/SSL/src/Constants/АдресВебСервисаБиблиотекиФайлов/АдресВебСервисаБиблиотекиФайлов.mdo @@ -14,7 +14,6 @@ String - true ru Адрес веб-сервиса библиотеки файлов diff --git a/SSL/src/Constants/АдресСервисаПоставляемыхДанных/АдресСервисаПоставляемыхДанных.mdo b/SSL/src/Constants/АдресСервисаПоставляемыхДанных/АдресСервисаПоставляемыхДанных.mdo index 72ef3dd69..08862530d 100644 --- a/SSL/src/Constants/АдресСервисаПоставляемыхДанных/АдресСервисаПоставляемыхДанных.mdo +++ b/SSL/src/Constants/АдресСервисаПоставляемыхДанных/АдресСервисаПоставляемыхДанных.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/АдресатыПолученияОтчетаПоЖурналуРегистрации/АдресатыПолученияОтчетаПоЖурналуРегистрации.mdo b/SSL/src/Constants/АдресатыПолученияОтчетаПоЖурналуРегистрации/АдресатыПолученияОтчетаПоЖурналуРегистрации.mdo deleted file mode 100644 index ff62bc002..000000000 --- a/SSL/src/Constants/АдресатыПолученияОтчетаПоЖурналуРегистрации/АдресатыПолученияОтчетаПоЖурналуРегистрации.mdo +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - АдресатыПолученияОтчетаПоЖурналуРегистрации - - ru - Адресаты получения отчета по журналу регистрации - - - String - - - true - - ru - Адреса электронной почты для получения отчета по критичным записям журнала регистрации - - - - Managed - diff --git a/SSL/src/Constants/АлгоритмПодписи/АлгоритмПодписи.mdo b/SSL/src/Constants/АлгоритмПодписи/АлгоритмПодписи.mdo index cc647e793..3a0bf5206 100644 --- a/SSL/src/Constants/АлгоритмПодписи/АлгоритмПодписи.mdo +++ b/SSL/src/Constants/АлгоритмПодписи/АлгоритмПодписи.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/АлгоритмХеширования/АлгоритмХеширования.mdo b/SSL/src/Constants/АлгоритмХеширования/АлгоритмХеширования.mdo index 858883ff2..dad04f50b 100644 --- a/SSL/src/Constants/АлгоритмХеширования/АлгоритмХеширования.mdo +++ b/SSL/src/Constants/АлгоритмХеширования/АлгоритмХеширования.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/АлгоритмШифрования/АлгоритмШифрования.mdo b/SSL/src/Constants/АлгоритмШифрования/АлгоритмШифрования.mdo index 1aae2f90f..bfa34b744 100644 --- a/SSL/src/Constants/АлгоритмШифрования/АлгоритмШифрования.mdo +++ b/SSL/src/Constants/АлгоритмШифрования/АлгоритмШифрования.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/ВерсияКлассификатораБанковРФ/ВерсияКлассификатораБанковРФ.mdo b/SSL/src/Constants/ВерсияКлассификатораБанковРФ/ВерсияКлассификатораБанковРФ.mdo index 469840b33..24557092a 100644 --- a/SSL/src/Constants/ВерсияКлассификатораБанковРФ/ВерсияКлассификатораБанковРФ.mdo +++ b/SSL/src/Constants/ВерсияКлассификатораБанковРФ/ВерсияКлассификатораБанковРФ.mdo @@ -14,7 +14,6 @@ Date - true Managed diff --git a/SSL/src/Constants/ВнутреннийАдресМенеджераСервиса/ВнутреннийАдресМенеджераСервиса.mdo b/SSL/src/Constants/ВнутреннийАдресМенеджераСервиса/ВнутреннийАдресМенеджераСервиса.mdo index 9f59bb5ae..531283133 100644 --- a/SSL/src/Constants/ВнутреннийАдресМенеджераСервиса/ВнутреннийАдресМенеджераСервиса.mdo +++ b/SSL/src/Constants/ВнутреннийАдресМенеджераСервиса/ВнутреннийАдресМенеджераСервиса.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ВыполнятьЗамерыПроизводительности.mdo b/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ВыполнятьЗамерыПроизводительности.mdo index c4d800d00..c828cb6fe 100644 --- a/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ВыполнятьЗамерыПроизводительности.mdo +++ b/SSL/src/Constants/ВыполнятьЗамерыПроизводительности/ВыполнятьЗамерыПроизводительности.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ВыполнятьПроверкуЭЦПНаСервере/ВыполнятьПроверкуЭЦПНаСервере.mdo b/SSL/src/Constants/ВыполнятьПроверкуЭЦПНаСервере/ВыполнятьПроверкуЭЦПНаСервере.mdo index 9760ff830..46e7aadfa 100644 --- a/SSL/src/Constants/ВыполнятьПроверкуЭЦПНаСервере/ВыполнятьПроверкуЭЦПНаСервере.mdo +++ b/SSL/src/Constants/ВыполнятьПроверкуЭЦПНаСервере/ВыполнятьПроверкуЭЦПНаСервере.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ДатаОбновленияПовторноИспользуемыхЗначенийМРО/ДатаОбновленияПовторноИспользуемыхЗначенийМРО.mdo b/SSL/src/Constants/ДатаОбновленияПовторноИспользуемыхЗначенийМРО/ДатаОбновленияПовторноИспользуемыхЗначенийМРО.mdo index 1f6ced8b6..c9a5cbf36 100644 --- a/SSL/src/Constants/ДатаОбновленияПовторноИспользуемыхЗначенийМРО/ДатаОбновленияПовторноИспользуемыхЗначенийМРО.mdo +++ b/SSL/src/Constants/ДатаОбновленияПовторноИспользуемыхЗначенийМРО/ДатаОбновленияПовторноИспользуемыхЗначенийМРО.mdo @@ -15,7 +15,6 @@ Date - true Managed diff --git a/SSL/src/Constants/ДатаУведомленияОНовыхЗадачах/ДатаУведомленияОНовыхЗадачах.mdo b/SSL/src/Constants/ДатаУведомленияОНовыхЗадачах/ДатаУведомленияОНовыхЗадачах.mdo index fa7b98c5b..eb1ef5640 100644 --- a/SSL/src/Constants/ДатаУведомленияОНовыхЗадачах/ДатаУведомленияОНовыхЗадачах.mdo +++ b/SSL/src/Constants/ДатаУведомленияОНовыхЗадачах/ДатаУведомленияОНовыхЗадачах.mdo @@ -15,7 +15,6 @@ Date - true Managed diff --git a/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ValueManagerModule.bsl b/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ValueManagerModule.bsl index ca9b94c5d..67930b127 100644 --- a/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ValueManagerModule.bsl +++ b/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ValueManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем СтароеЗначение; // Значение константы до изменения. // Используется в обработчике события ПриЗаписи. @@ -22,8 +24,9 @@ КонецЕсли; Если СтароеЗначение <> Значение Тогда - УправлениеДоступом.ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных(); + УправлениеДоступомСлужебный.ПриИзмененииКонстантыДобавлятьРуководителямДоступПодчиненных(); КонецЕсли; КонецПроцедуры +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ДобавлятьРуководителямДоступПодчиненных.mdo b/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ДобавлятьРуководителямДоступПодчиненных.mdo index 72fcb94be..68d4ed09c 100644 --- a/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ДобавлятьРуководителямДоступПодчиненных.mdo +++ b/SSL/src/Constants/ДобавлятьРуководителямДоступПодчиненных/ДобавлятьРуководителямДоступПодчиненных.mdo @@ -13,7 +13,6 @@ Boolean - true ru Доступ подчиненных полностью добавляется к доступу руководителей путем неявного добавления руководителей в участники групп доступа подчиненных diff --git a/SSL/src/Constants/ЗаголовокСистемы/ЗаголовокСистемы.mdo b/SSL/src/Constants/ЗаголовокСистемы/ЗаголовокСистемы.mdo index d0050944b..4094f774e 100644 --- a/SSL/src/Constants/ЗаголовокСистемы/ЗаголовокСистемы.mdo +++ b/SSL/src/Constants/ЗаголовокСистемы/ЗаголовокСистемы.mdo @@ -14,7 +14,6 @@ String - true ru Фрагмент заголовка главного окна программы diff --git a/SSL/src/Constants/ЗапрещатьЗагрузкуФайловПоРасширению/ЗапрещатьЗагрузкуФайловПоРасширению.mdo b/SSL/src/Constants/ЗапрещатьЗагрузкуФайловПоРасширению/ЗапрещатьЗагрузкуФайловПоРасширению.mdo index 53f8c8d5b..7847dc465 100644 --- a/SSL/src/Constants/ЗапрещатьЗагрузкуФайловПоРасширению/ЗапрещатьЗагрузкуФайловПоРасширению.mdo +++ b/SSL/src/Constants/ЗапрещатьЗагрузкуФайловПоРасширению/ЗапрещатьЗагрузкуФайловПоРасширению.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИдентификаторКорневойПапкиФайлов1СДокументооборот/ИдентификаторКорневойПапкиФайлов1СДокументооборот.mdo b/SSL/src/Constants/ИдентификаторКорневойПапкиФайлов1СДокументооборот/ИдентификаторКорневойПапкиФайлов1СДокументооборот.mdo index f421dbd1a..ab5157dd6 100644 --- a/SSL/src/Constants/ИдентификаторКорневойПапкиФайлов1СДокументооборот/ИдентификаторКорневойПапкиФайлов1СДокументооборот.mdo +++ b/SSL/src/Constants/ИдентификаторКорневойПапкиФайлов1СДокументооборот/ИдентификаторКорневойПапкиФайлов1СДокументооборот.mdo @@ -14,7 +14,6 @@ String - true ru Идентификатор корневой папки файлов 1С:Документооборота diff --git a/SSL/src/Constants/ИзвлекатьТекстыФайловНаСервере/ИзвлекатьТекстыФайловНаСервере.mdo b/SSL/src/Constants/ИзвлекатьТекстыФайловНаСервере/ИзвлекатьТекстыФайловНаСервере.mdo index d5dd09620..3919d10f8 100644 --- a/SSL/src/Constants/ИзвлекатьТекстыФайловНаСервере/ИзвлекатьТекстыФайловНаСервере.mdo +++ b/SSL/src/Constants/ИзвлекатьТекстыФайловНаСервере/ИзвлекатьТекстыФайловНаСервере.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИзменятьЗаданияЗаднимЧислом/ИзменятьЗаданияЗаднимЧислом.mdo b/SSL/src/Constants/ИзменятьЗаданияЗаднимЧислом/ИзменятьЗаданияЗаднимЧислом.mdo index 0cff08bb8..0c1712b20 100644 --- a/SSL/src/Constants/ИзменятьЗаданияЗаднимЧислом/ИзменятьЗаданияЗаднимЧислом.mdo +++ b/SSL/src/Constants/ИзменятьЗаданияЗаднимЧислом/ИзменятьЗаданияЗаднимЧислом.mdo @@ -13,7 +13,6 @@ Boolean - true ru Разрешить менять дату выполнения задач, а при изменении автора, крайнего срока, важности и наименования задания изменять их в выполняющихся задачах diff --git a/SSL/src/Constants/ИмяПользователяАгентаСервиса/ИмяПользователяАгентаСервиса.mdo b/SSL/src/Constants/ИмяПользователяАгентаСервиса/ИмяПользователяАгентаСервиса.mdo index 0dcd480e3..c66c6bae4 100644 --- a/SSL/src/Constants/ИмяПользователяАгентаСервиса/ИмяПользователяАгентаСервиса.mdo +++ b/SSL/src/Constants/ИмяПользователяАгентаСервиса/ИмяПользователяАгентаСервиса.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/ИмяПользователяБиблиотекиФайлов/ИмяПользователяБиблиотекиФайлов.mdo b/SSL/src/Constants/ИмяПользователяБиблиотекиФайлов/ИмяПользователяБиблиотекиФайлов.mdo index 56c0abe9f..28570de77 100644 --- a/SSL/src/Constants/ИмяПользователяБиблиотекиФайлов/ИмяПользователяБиблиотекиФайлов.mdo +++ b/SSL/src/Constants/ИмяПользователяБиблиотекиФайлов/ИмяПользователяБиблиотекиФайлов.mdo @@ -14,7 +14,6 @@ String - true ru Имя пользователя, под которым происходит авторизация в базу, публикующую сервис библиотеки файлов diff --git a/SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo b/SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo index 0dd8d8056..c4db7eb56 100644 --- a/SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo +++ b/SSL/src/Constants/ИмяСлужебногоПользователяМенеджераСервиса/ИмяСлужебногоПользователяМенеджераСервиса.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/ИмяСлужебногоПользователяСервисаПоставляемыхДанных/ИмяСлужебногоПользователяСервисаПоставляемыхДанных.mdo b/SSL/src/Constants/ИмяСлужебногоПользователяСервисаПоставляемыхДанных/ИмяСлужебногоПользователяСервисаПоставляемыхДанных.mdo index c5b66336b..6d62f2c7b 100644 --- a/SSL/src/Constants/ИмяСлужебногоПользователяСервисаПоставляемыхДанных/ИмяСлужебногоПользователяСервисаПоставляемыхДанных.mdo +++ b/SSL/src/Constants/ИмяСлужебногоПользователяСервисаПоставляемыхДанных/ИмяСлужебногоПользователяСервисаПоставляемыхДанных.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/ИспользоватьАвтономнуюРаботуВМоделиСервиса/ИспользоватьАвтономнуюРаботуВМоделиСервиса.mdo b/SSL/src/Constants/ИспользоватьАвтономнуюРаботуВМоделиСервиса/ИспользоватьАвтономнуюРаботуВМоделиСервиса.mdo new file mode 100644 index 000000000..7fa954bee --- /dev/null +++ b/SSL/src/Constants/ИспользоватьАвтономнуюРаботуВМоделиСервиса/ИспользоватьАвтономнуюРаботуВМоделиСервиса.mdo @@ -0,0 +1,19 @@ + + + + + + + + ИспользоватьАвтономнуюРаботуВМоделиСервиса + + ru + Использовать автономную работу в модели сервиса + + + Boolean + + + + Managed + diff --git a/SSL/src/Constants/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo b/SSL/src/Constants/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo index dc3d05675..f5518a2ea 100644 --- a/SSL/src/Constants/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo +++ b/SSL/src/Constants/ИспользоватьАнкетирование/ИспользоватьАнкетирование.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьБиблиотекуФайлов/ИспользоватьБиблиотекуФайлов.mdo b/SSL/src/Constants/ИспользоватьБиблиотекуФайлов/ИспользоватьБиблиотекуФайлов.mdo index 9655585d6..702fd5944 100644 --- a/SSL/src/Constants/ИспользоватьБиблиотекуФайлов/ИспользоватьБиблиотекуФайлов.mdo +++ b/SSL/src/Constants/ИспользоватьБиблиотекуФайлов/ИспользоватьБиблиотекуФайлов.mdo @@ -13,7 +13,6 @@ Boolean - true ru Использовать библиотеку файлов diff --git a/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo b/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo index be0649cf3..0e595157b 100644 --- a/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo +++ b/SSL/src/Constants/ИспользоватьБизнесПроцессыИЗадачи/ИспользоватьБизнесПроцессыИЗадачи.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьВерсионированиеОбъектов/ИспользоватьВерсионированиеОбъектов.mdo b/SSL/src/Constants/ИспользоватьВерсионированиеОбъектов/ИспользоватьВерсионированиеОбъектов.mdo index 55e7664c4..4ca4e0a76 100644 --- a/SSL/src/Constants/ИспользоватьВерсионированиеОбъектов/ИспользоватьВерсионированиеОбъектов.mdo +++ b/SSL/src/Constants/ИспользоватьВерсионированиеОбъектов/ИспользоватьВерсионированиеОбъектов.mdo @@ -14,7 +14,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьВнешниеЗадачи/ИспользоватьВнешниеЗадачи.mdo b/SSL/src/Constants/ИспользоватьВнешниеЗадачи/ИспользоватьВнешниеЗадачи.mdo index 75797c178..cdcffaa63 100644 --- a/SSL/src/Constants/ИспользоватьВнешниеЗадачи/ИспользоватьВнешниеЗадачи.mdo +++ b/SSL/src/Constants/ИспользоватьВнешниеЗадачи/ИспользоватьВнешниеЗадачи.mdo @@ -13,7 +13,6 @@ Boolean - true ru Использовать внешние задачи diff --git a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ИспользоватьВнешнихПользователей.mdo b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ИспользоватьВнешнихПользователей.mdo index e2f5b8a56..8a1f8c980 100644 --- a/SSL/src/Constants/ИспользоватьВнешнихПользователей/ИспользоватьВнешнихПользователей.mdo +++ b/SSL/src/Constants/ИспользоватьВнешнихПользователей/ИспользоватьВнешнихПользователей.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьГруппыПользователей/ИспользоватьГруппыПользователей.mdo b/SSL/src/Constants/ИспользоватьГруппыПользователей/ИспользоватьГруппыПользователей.mdo index e9a3af9f8..196f93da6 100644 --- a/SSL/src/Constants/ИспользоватьГруппыПользователей/ИспользоватьГруппыПользователей.mdo +++ b/SSL/src/Constants/ИспользоватьГруппыПользователей/ИспользоватьГруппыПользователей.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ИспользоватьДатуИВремяВСрокахЗадач.mdo b/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ИспользоватьДатуИВремяВСрокахЗадач.mdo index e5bf6a883..090ce017f 100644 --- a/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ИспользоватьДатуИВремяВСрокахЗадач.mdo +++ b/SSL/src/Constants/ИспользоватьДатуИВремяВСрокахЗадач/ИспользоватьДатуИВремяВСрокахЗадач.mdo @@ -13,7 +13,6 @@ Boolean - true ru Использовать дату со временем в полях со сроками задач diff --git a/SSL/src/Constants/ИспользоватьДатуНачалаЗадач/ИспользоватьДатуНачалаЗадач.mdo b/SSL/src/Constants/ИспользоватьДатуНачалаЗадач/ИспользоватьДатуНачалаЗадач.mdo index 5748ba3bb..6f8da0b47 100644 --- a/SSL/src/Constants/ИспользоватьДатуНачалаЗадач/ИспользоватьДатуНачалаЗадач.mdo +++ b/SSL/src/Constants/ИспользоватьДатуНачалаЗадач/ИспользоватьДатуНачалаЗадач.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo index 10ed6d932..2d05f1332 100644 --- a/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/Constants/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo @@ -14,7 +14,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьЗаметки/ИспользоватьЗаметки.mdo b/SSL/src/Constants/ИспользоватьЗаметки/ИспользоватьЗаметки.mdo index 88c39126b..770428c1e 100644 --- a/SSL/src/Constants/ИспользоватьЗаметки/ИспользоватьЗаметки.mdo +++ b/SSL/src/Constants/ИспользоватьЗаметки/ИспользоватьЗаметки.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьИнтеграциюС1СДокументооборот/ИспользоватьИнтеграциюС1СДокументооборот.mdo b/SSL/src/Constants/ИспользоватьИнтеграциюС1СДокументооборот/ИспользоватьИнтеграциюС1СДокументооборот.mdo index 3dc223529..2804049dc 100644 --- a/SSL/src/Constants/ИспользоватьИнтеграциюС1СДокументооборот/ИспользоватьИнтеграциюС1СДокументооборот.mdo +++ b/SSL/src/Constants/ИспользоватьИнтеграциюС1СДокументооборот/ИспользоватьИнтеграциюС1СДокументооборот.mdo @@ -13,7 +13,6 @@ Boolean - true ru Использовать интеграцию с 1С:Документооборот diff --git a/SSL/src/Constants/ИспользоватьНапоминанияПользователя/ИспользоватьНапоминанияПользователя.mdo b/SSL/src/Constants/ИспользоватьНапоминанияПользователя/ИспользоватьНапоминанияПользователя.mdo index 8cd295b2f..7bed7f6fa 100644 --- a/SSL/src/Constants/ИспользоватьНапоминанияПользователя/ИспользоватьНапоминанияПользователя.mdo +++ b/SSL/src/Constants/ИспользоватьНапоминанияПользователя/ИспользоватьНапоминанияПользователя.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьОбменДанными/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьОбменДанными/ValueManagerModule.bsl index a18125a84..09738b715 100644 --- a/SSL/src/Constants/ИспользоватьОбменДанными/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьОбменДанными/ValueManagerModule.bsl @@ -1,6 +1,10 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПриЗаписи(Отказ) ОбщегоНазначения.УстановитьЗначенияДополнительныхКонстант(Значение, Метаданные().Имя); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьОбменДанными/ИспользоватьОбменДанными.mdo b/SSL/src/Constants/ИспользоватьОбменДанными/ИспользоватьОбменДанными.mdo index 575534e1f..c81c6d3e8 100644 --- a/SSL/src/Constants/ИспользоватьОбменДанными/ИспользоватьОбменДанными.mdo +++ b/SSL/src/Constants/ИспользоватьОбменДанными/ИспользоватьОбменДанными.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo b/SSL/src/Constants/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo index b3ccd8a08..69fe14d2b 100644 --- a/SSL/src/Constants/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo +++ b/SSL/src/Constants/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo b/SSL/src/Constants/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo index 11e80429d..2edd04759 100644 --- a/SSL/src/Constants/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo +++ b/SSL/src/Constants/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьПодчиненныеБизнесПроцессы/ИспользоватьПодчиненныеБизнесПроцессы.mdo b/SSL/src/Constants/ИспользоватьПодчиненныеБизнесПроцессы/ИспользоватьПодчиненныеБизнесПроцессы.mdo index d1e40ad7d..76626838d 100644 --- a/SSL/src/Constants/ИспользоватьПодчиненныеБизнесПроцессы/ИспользоватьПодчиненныеБизнесПроцессы.mdo +++ b/SSL/src/Constants/ИспользоватьПодчиненныеБизнесПроцессы/ИспользоватьПодчиненныеБизнесПроцессы.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьПолнотекстовыйПоиск/ИспользоватьПолнотекстовыйПоиск.mdo b/SSL/src/Constants/ИспользоватьПолнотекстовыйПоиск/ИспользоватьПолнотекстовыйПоиск.mdo index 1049ded63..5578a2abb 100644 --- a/SSL/src/Constants/ИспользоватьПолнотекстовыйПоиск/ИспользоватьПолнотекстовыйПоиск.mdo +++ b/SSL/src/Constants/ИспользоватьПолнотекстовыйПоиск/ИспользоватьПолнотекстовыйПоиск.mdo @@ -14,7 +14,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ИспользоватьПочтовыйКлиент.mdo b/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ИспользоватьПочтовыйКлиент.mdo index 46429e760..3ce61013d 100644 --- a/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ИспользоватьПочтовыйКлиент.mdo +++ b/SSL/src/Constants/ИспользоватьПочтовыйКлиент/ИспользоватьПочтовыйКлиент.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьПризнакРассмотрено/ИспользоватьПризнакРассмотрено.mdo b/SSL/src/Constants/ИспользоватьПризнакРассмотрено/ИспользоватьПризнакРассмотрено.mdo index b1caa0b66..3fbb4dd31 100644 --- a/SSL/src/Constants/ИспользоватьПризнакРассмотрено/ИспользоватьПризнакРассмотрено.mdo +++ b/SSL/src/Constants/ИспользоватьПризнакРассмотрено/ИспользоватьПризнакРассмотрено.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo b/SSL/src/Constants/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo index 1835745fc..713c81269 100644 --- a/SSL/src/Constants/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo +++ b/SSL/src/Constants/ИспользоватьПрочиеВзаимодействия/ИспользоватьПрочиеВзаимодействия.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl index 1ed6b0bd5..6fe5a94e7 100644 --- a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl +++ b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ValueManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПередЗаписью(Отказ) @@ -7,7 +9,20 @@ Процедура ПриЗаписи(Отказ) - Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(НЕ Значение); + Если Значение Тогда + + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Ложь); + Константы.ЭтоАвтономноеРабочееМесто.Установить(Ложь); + + ИначеЕсли Константы.ЭтоАвтономноеРабочееМесто.Получить() Тогда + + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Ложь); + + Иначе + + Константы.НеИспользоватьРазделениеПоОбластямДанных.Установить(Истина); + + КонецЕсли; Если ДополнительныеСвойства.ТекущееЗначение <> Значение Тогда ОбновитьПовторноИспользуемыеЗначения(); @@ -17,3 +32,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo index cbf049738..ed6c9c1fd 100644 --- a/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo +++ b/SSL/src/Constants/ИспользоватьРазделениеПоОбластямДанных/ИспользоватьРазделениеПоОбластямДанных.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ИспользоватьЭлектронныеЦифровыеПодписи/ИспользоватьЭлектронныеЦифровыеПодписи.mdo b/SSL/src/Constants/ИспользоватьЭлектронныеЦифровыеПодписи/ИспользоватьЭлектронныеЦифровыеПодписи.mdo index 5a047e1f8..498e9d320 100644 --- a/SSL/src/Constants/ИспользоватьЭлектронныеЦифровыеПодписи/ИспользоватьЭлектронныеЦифровыеПодписи.mdo +++ b/SSL/src/Constants/ИспользоватьЭлектронныеЦифровыеПодписи/ИспользоватьЭлектронныеЦифровыеПодписи.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляLinux/КаталогВременныхФайловСообщенийОбменаДляLinux.mdo b/SSL/src/Constants/КаталогВременныхФайловДляLinux/КаталогВременныхФайловДляLinux.mdo similarity index 77% rename from SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляLinux/КаталогВременныхФайловСообщенийОбменаДляLinux.mdo rename to SSL/src/Constants/КаталогВременныхФайловДляLinux/КаталогВременныхФайловДляLinux.mdo index d711abea4..eac04d027 100644 --- a/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляLinux/КаталогВременныхФайловСообщенийОбменаДляLinux.mdo +++ b/SSL/src/Constants/КаталогВременныхФайловДляLinux/КаталогВременныхФайловДляLinux.mdo @@ -5,16 +5,15 @@ - КаталогВременныхФайловСообщенийОбменаДляLinux + КаталогВременныхФайловДляLinux ru - Каталог временных файлов сообщений обмена для Linux + Каталог временных файлов для Linux String - true Managed diff --git a/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/ValueManagerModule.bsl b/SSL/src/Constants/КаталогВременныхФайловДляWindows/ValueManagerModule.bsl similarity index 100% rename from SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/ValueManagerModule.bsl rename to SSL/src/Constants/КаталогВременныхФайловДляWindows/ValueManagerModule.bsl diff --git a/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/КаталогВременныхФайловСообщенийОбменаДляWindows.mdo b/SSL/src/Constants/КаталогВременныхФайловДляWindows/КаталогВременныхФайловДляWindows.mdo similarity index 77% rename from SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/КаталогВременныхФайловСообщенийОбменаДляWindows.mdo rename to SSL/src/Constants/КаталогВременныхФайловДляWindows/КаталогВременныхФайловДляWindows.mdo index 8d31720c6..f38dc04ea 100644 --- a/SSL/src/Constants/КаталогВременныхФайловСообщенийОбменаДляWindows/КаталогВременныхФайловСообщенийОбменаДляWindows.mdo +++ b/SSL/src/Constants/КаталогВременныхФайловДляWindows/КаталогВременныхФайловДляWindows.mdo @@ -5,16 +5,15 @@ - КаталогВременныхФайловСообщенийОбменаДляWindows + КаталогВременныхФайловДляWindows ru - Каталог временных файлов сообщений обмена для Windows + Каталог временных файлов для Windows String - true Managed diff --git a/SSL/src/Constants/КлючОбластиДанных/КлючОбластиДанных.mdo b/SSL/src/Constants/КлючОбластиДанных/КлючОбластиДанных.mdo new file mode 100644 index 000000000..971210b8d --- /dev/null +++ b/SSL/src/Constants/КлючОбластиДанных/КлючОбластиДанных.mdo @@ -0,0 +1,22 @@ + + + + + + + + КлючОбластиДанных + + ru + Ключ области данных + + + String + + 100 + + + + + Managed + diff --git a/SSL/src/Constants/КодКорневойПапкиБиблиотекиФайлов/КодКорневойПапкиБиблиотекиФайлов.mdo b/SSL/src/Constants/КодКорневойПапкиБиблиотекиФайлов/КодКорневойПапкиБиблиотекиФайлов.mdo index 0b40a253d..d6d610506 100644 --- a/SSL/src/Constants/КодКорневойПапкиБиблиотекиФайлов/КодКорневойПапкиБиблиотекиФайлов.mdo +++ b/SSL/src/Constants/КодКорневойПапкиБиблиотекиФайлов/КодКорневойПапкиБиблиотекиФайлов.mdo @@ -14,7 +14,6 @@ String - true ru Код корневой папки библиотеки файлов diff --git a/SSL/src/Constants/КонечнаяТочкаМенеджераСервиса/КонечнаяТочкаМенеджераСервиса.mdo b/SSL/src/Constants/КонечнаяТочкаМенеджераСервиса/КонечнаяТочкаМенеджераСервиса.mdo index 1542606cf..d9d7f4a68 100644 --- a/SSL/src/Constants/КонечнаяТочкаМенеджераСервиса/КонечнаяТочкаМенеджераСервиса.mdo +++ b/SSL/src/Constants/КонечнаяТочкаМенеджераСервиса/КонечнаяТочкаМенеджераСервиса.mdo @@ -13,7 +13,6 @@ ExchangePlanRef.ОбменСообщениями - true Managed diff --git a/SSL/src/Constants/КопироватьОбластиДанныхИзЭталонной/КопироватьОбластиДанныхИзЭталонной.mdo b/SSL/src/Constants/КопироватьОбластиДанныхИзЭталонной/КопироватьОбластиДанныхИзЭталонной.mdo index f3eb59ef6..80fdb1d79 100644 --- a/SSL/src/Constants/КопироватьОбластиДанныхИзЭталонной/КопироватьОбластиДанныхИзЭталонной.mdo +++ b/SSL/src/Constants/КопироватьОбластиДанныхИзЭталонной/КопироватьОбластиДанныхИзЭталонной.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.mdo b/SSL/src/Constants/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.mdo index f080d343d..254a922d3 100644 --- a/SSL/src/Constants/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.mdo +++ b/SSL/src/Constants/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания/МаксимальнаяДлительностьВыполненияИсполняющегоФоновогоЗадания.mdo @@ -17,7 +17,6 @@ true - true Managed diff --git a/SSL/src/Constants/МаксимальноеКоличествоИсполняющихФоновыхЗаданий/МаксимальноеКоличествоИсполняющихФоновыхЗаданий.mdo b/SSL/src/Constants/МаксимальноеКоличествоИсполняющихФоновыхЗаданий/МаксимальноеКоличествоИсполняющихФоновыхЗаданий.mdo index 21663f47e..df0407a3f 100644 --- a/SSL/src/Constants/МаксимальноеКоличествоИсполняющихФоновыхЗаданий/МаксимальноеКоличествоИсполняющихФоновыхЗаданий.mdo +++ b/SSL/src/Constants/МаксимальноеКоличествоИсполняющихФоновыхЗаданий/МаксимальноеКоличествоИсполняющихФоновыхЗаданий.mdo @@ -17,7 +17,6 @@ true - true Managed diff --git a/SSL/src/Constants/МаксимальныйРазмерФайла/МаксимальныйРазмерФайла.mdo b/SSL/src/Constants/МаксимальныйРазмерФайла/МаксимальныйРазмерФайла.mdo index 47b8b4abf..92c2b35d2 100644 --- a/SSL/src/Constants/МаксимальныйРазмерФайла/МаксимальныйРазмерФайла.mdo +++ b/SSL/src/Constants/МаксимальныйРазмерФайла/МаксимальныйРазмерФайла.mdo @@ -17,7 +17,6 @@ 10 - true Managed diff --git a/SSL/src/Constants/МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот/МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот.mdo b/SSL/src/Constants/МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот/МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот.mdo index 6f94d4049..be6669b78 100644 --- a/SSL/src/Constants/МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот/МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот.mdo +++ b/SSL/src/Constants/МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот/МаксимальныйРазмерФайлаДляПередачиВ1СДокументооборот.mdo @@ -17,7 +17,6 @@ 10 - true ru Максимальный размер файла для передачи в 1С:Документооборот diff --git a/SSL/src/Constants/МаксимальныйРазмерФайлаОбластиДанных/МаксимальныйРазмерФайлаОбластиДанных.mdo b/SSL/src/Constants/МаксимальныйРазмерФайлаОбластиДанных/МаксимальныйРазмерФайлаОбластиДанных.mdo index b0e22dd27..a948e435d 100644 --- a/SSL/src/Constants/МаксимальныйРазмерФайлаОбластиДанных/МаксимальныйРазмерФайлаОбластиДанных.mdo +++ b/SSL/src/Constants/МаксимальныйРазмерФайлаОбластиДанных/МаксимальныйРазмерФайлаОбластиДанных.mdo @@ -17,7 +17,6 @@ 10 - true 1073741824 diff --git a/SSL/src/Constants/НаименованиеКорневойПапкиФайлов1СДокументооборот/НаименованиеКорневойПапкиФайлов1СДокументооборот.mdo b/SSL/src/Constants/НаименованиеКорневойПапкиФайлов1СДокументооборот/НаименованиеКорневойПапкиФайлов1СДокументооборот.mdo index f93c4b6b8..305c17176 100644 --- a/SSL/src/Constants/НаименованиеКорневойПапкиФайлов1СДокументооборот/НаименованиеКорневойПапкиФайлов1СДокументооборот.mdo +++ b/SSL/src/Constants/НаименованиеКорневойПапкиФайлов1СДокументооборот/НаименованиеКорневойПапкиФайлов1СДокументооборот.mdo @@ -14,7 +14,6 @@ String - true ru Наименование корневой папки файлов 1С:Документооборота diff --git a/SSL/src/Constants/НастройкаАвтономногоРабочегоМестаЗавершена/НастройкаАвтономногоРабочегоМестаЗавершена.mdo b/SSL/src/Constants/НастройкаАвтономногоРабочегоМестаЗавершена/НастройкаАвтономногоРабочегоМестаЗавершена.mdo new file mode 100644 index 000000000..81707b139 --- /dev/null +++ b/SSL/src/Constants/НастройкаАвтономногоРабочегоМестаЗавершена/НастройкаАвтономногоРабочегоМестаЗавершена.mdo @@ -0,0 +1,19 @@ + + + + + + + + НастройкаАвтономногоРабочегоМестаЗавершена + + ru + Настройка автономного рабочего места завершена + + + Boolean + + + + Managed + diff --git a/SSL/src/Constants/НастройкаПодчиненногоУзлаРИБЗавершена/НастройкаПодчиненногоУзлаРИБЗавершена.mdo b/SSL/src/Constants/НастройкаПодчиненногоУзлаРИБЗавершена/НастройкаПодчиненногоУзлаРИБЗавершена.mdo index a204cabe4..4648f2738 100644 --- a/SSL/src/Constants/НастройкаПодчиненногоУзлаРИБЗавершена/НастройкаПодчиненногоУзлаРИБЗавершена.mdo +++ b/SSL/src/Constants/НастройкаПодчиненногоУзлаРИБЗавершена/НастройкаПодчиненногоУзлаРИБЗавершена.mdo @@ -14,7 +14,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/НастройкаПроксиСервера/НастройкаПроксиСервера.mdo b/SSL/src/Constants/НастройкаПроксиСервера/НастройкаПроксиСервера.mdo index 84070f092..8e3747d1a 100644 --- a/SSL/src/Constants/НастройкаПроксиСервера/НастройкаПроксиСервера.mdo +++ b/SSL/src/Constants/НастройкаПроксиСервера/НастройкаПроксиСервера.mdo @@ -14,7 +14,6 @@ ValueStorage - true Managed diff --git a/SSL/src/Constants/НастройкиВыполненияРегламентныхЗаданий/НастройкиВыполненияРегламентныхЗаданий.mdo b/SSL/src/Constants/НастройкиВыполненияРегламентныхЗаданий/НастройкиВыполненияРегламентныхЗаданий.mdo index dfc1ba56d..fbe30f0b7 100644 --- a/SSL/src/Constants/НастройкиВыполненияРегламентныхЗаданий/НастройкиВыполненияРегламентныхЗаданий.mdo +++ b/SSL/src/Constants/НастройкиВыполненияРегламентныхЗаданий/НастройкиВыполненияРегламентныхЗаданий.mdo @@ -14,7 +14,6 @@ ValueStorage - true Managed diff --git a/SSL/src/Constants/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo b/SSL/src/Constants/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo index 939bbd657..a8f195fb1 100644 --- a/SSL/src/Constants/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo +++ b/SSL/src/Constants/НеИспользоватьРазделениеПоОбластямДанных/НеИспользоватьРазделениеПоОбластямДанных.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/НомерЗагрузкиПоставляемыхДанных/НомерЗагрузкиПоставляемыхДанных.mdo b/SSL/src/Constants/НомерЗагрузкиПоставляемыхДанных/НомерЗагрузкиПоставляемыхДанных.mdo index dc36558f3..f58074627 100644 --- a/SSL/src/Constants/НомерЗагрузкиПоставляемыхДанных/НомерЗагрузкиПоставляемыхДанных.mdo +++ b/SSL/src/Constants/НомерЗагрузкиПоставляемыхДанных/НомерЗагрузкиПоставляемыхДанных.mdo @@ -17,7 +17,6 @@ true - true Managed diff --git a/SSL/src/Constants/ОбщийКаталогВременныхФайлов/ОбщийКаталогВременныхФайлов.mdo b/SSL/src/Constants/ОбщийКаталогВременныхФайлов/ОбщийКаталогВременныхФайлов.mdo index d6c58551c..48d3badb7 100644 --- a/SSL/src/Constants/ОбщийКаталогВременныхФайлов/ОбщийКаталогВременныхФайлов.mdo +++ b/SSL/src/Constants/ОбщийКаталогВременныхФайлов/ОбщийКаталогВременныхФайлов.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/ОбщийКаталогВременныхФайловLinux/ОбщийКаталогВременныхФайловLinux.mdo b/SSL/src/Constants/ОбщийКаталогВременныхФайловLinux/ОбщийКаталогВременныхФайловLinux.mdo index b8b590689..14525de90 100644 --- a/SSL/src/Constants/ОбщийКаталогВременныхФайловLinux/ОбщийКаталогВременныхФайловLinux.mdo +++ b/SSL/src/Constants/ОбщийКаталогВременныхФайловLinux/ОбщийКаталогВременныхФайловLinux.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl index 4400db18a..78c05d788 100644 --- a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ValueManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем ОграничениеДоступаНаУровнеЗаписейВключено; // Флажок изменения значения константы с Ложь на Истина. // Используется в обработчике события ПриЗаписи. @@ -14,8 +16,11 @@ Возврат; КонецЕсли; - ОграничениеДоступаНаУровнеЗаписейВключено = Значение И НЕ Константы.ОграничиватьДоступНаУровнеЗаписей.Получить(); - ОграничениеДоступаНаУровнеЗаписейИзменено = Значение <> Константы.ОграничиватьДоступНаУровнеЗаписей.Получить(); + ОграничениеДоступаНаУровнеЗаписейВключено + = Значение И НЕ Константы.ОграничиватьДоступНаУровнеЗаписей.Получить(); + + ОграничениеДоступаНаУровнеЗаписейИзменено + = Значение <> Константы.ОграничиватьДоступНаУровнеЗаписей.Получить(); КонецПроцедуры @@ -26,8 +31,12 @@ КонецЕсли; Если ОграничениеДоступаНаУровнеЗаписейИзменено Тогда - УправлениеДоступом.ПриИзмененииОграниченияДоступаНаУровнеЗаписей(ОграничениеДоступаНаУровнеЗаписейВключено); + + УправлениеДоступомСлужебный.ПриИзмененииОграниченияДоступаНаУровнеЗаписей( + ОграничениеДоступаНаУровнеЗаписейВключено); КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ОграничиватьДоступНаУровнеЗаписей.mdo b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ОграничиватьДоступНаУровнеЗаписей.mdo index 06a0a5ce8..f4d1d30d3 100644 --- a/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ОграничиватьДоступНаУровнеЗаписей.mdo +++ b/SSL/src/Constants/ОграничиватьДоступНаУровнеЗаписей/ОграничиватьДоступНаУровнеЗаписей.mdo @@ -13,7 +13,6 @@ Boolean - true ru Включает режим ограничения прав доступа на уровне записей diff --git a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl index 12eb35d17..495bd044a 100644 --- a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl +++ b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ValueManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда @@ -21,3 +23,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ОтправлятьПисьмаВФорматеHTML.mdo b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ОтправлятьПисьмаВФорматеHTML.mdo index 15e9b5441..8321ea837 100644 --- a/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ОтправлятьПисьмаВФорматеHTML.mdo +++ b/SSL/src/Constants/ОтправлятьПисьмаВФорматеHTML/ОтправлятьПисьмаВФорматеHTML.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ПараметрыАдминистрированияИБ/ПараметрыАдминистрированияИБ.mdo b/SSL/src/Constants/ПараметрыАдминистрированияИБ/ПараметрыАдминистрированияИБ.mdo index d7928f53f..aff36ffd8 100644 --- a/SSL/src/Constants/ПараметрыАдминистрированияИБ/ПараметрыАдминистрированияИБ.mdo +++ b/SSL/src/Constants/ПараметрыАдминистрированияИБ/ПараметрыАдминистрированияИБ.mdo @@ -14,7 +14,6 @@ ValueStorage - true Managed diff --git a/SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo b/SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo index abfe20579..d35cb2460 100644 --- a/SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo +++ b/SSL/src/Constants/ПарольПользователяАгентаСервиса/ПарольПользователяАгентаСервиса.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/ПарольПользователяБиблиотекиФайлов/ПарольПользователяБиблиотекиФайлов.mdo b/SSL/src/Constants/ПарольПользователяБиблиотекиФайлов/ПарольПользователяБиблиотекиФайлов.mdo index 0419fcd14..bcc19631b 100644 --- a/SSL/src/Constants/ПарольПользователяБиблиотекиФайлов/ПарольПользователяБиблиотекиФайлов.mdo +++ b/SSL/src/Constants/ПарольПользователяБиблиотекиФайлов/ПарольПользователяБиблиотекиФайлов.mdo @@ -14,7 +14,6 @@ String - true ru Пароль, с которым происходит авторизация в базу, публикующую сервис библиотеки файлов diff --git a/SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo b/SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo index 6a34f1311..a51b9f649 100644 --- a/SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo +++ b/SSL/src/Constants/ПарольСлужебногоПользователяМенеджераСервиса/ПарольСлужебногоПользователяМенеджераСервиса.mdo @@ -14,7 +14,6 @@ String - true true diff --git a/SSL/src/Constants/ПарольСлужебногоПользователяСервисаПоставляемыхДанных/ПарольСлужебногоПользователяСервисаПоставляемыхДанных.mdo b/SSL/src/Constants/ПарольСлужебногоПользователяСервисаПоставляемыхДанных/ПарольСлужебногоПользователяСервисаПоставляемыхДанных.mdo index 6dbbc985c..9ae553a2a 100644 --- a/SSL/src/Constants/ПарольСлужебногоПользователяСервисаПоставляемыхДанных/ПарольСлужебногоПользователяСервисаПоставляемыхДанных.mdo +++ b/SSL/src/Constants/ПарольСлужебногоПользователяСервисаПоставляемыхДанных/ПарольСлужебногоПользователяСервисаПоставляемыхДанных.mdo @@ -14,7 +14,6 @@ String - true true diff --git a/SSL/src/Constants/ПоддержкаРезервногоКопирования/ValueManagerModule.bsl b/SSL/src/Constants/ПоддержкаРезервногоКопирования/ValueManagerModule.bsl new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/Constants/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo b/SSL/src/Constants/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo new file mode 100644 index 000000000..b6756098b --- /dev/null +++ b/SSL/src/Constants/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo @@ -0,0 +1,19 @@ + + + + + + + + ПоддержкаРезервногоКопирования + + ru + Поддержка резервного копирования + + + Boolean + + + + Managed + diff --git a/SSL/src/Constants/ПрефиксПоследнегоАвтономногоРабочегоМеста/ПрефиксПоследнегоАвтономногоРабочегоМеста.mdo b/SSL/src/Constants/ПрефиксПоследнегоАвтономногоРабочегоМеста/ПрефиксПоследнегоАвтономногоРабочегоМеста.mdo new file mode 100644 index 000000000..296ddf9a6 --- /dev/null +++ b/SSL/src/Constants/ПрефиксПоследнегоАвтономногоРабочегоМеста/ПрефиксПоследнегоАвтономногоРабочегоМеста.mdo @@ -0,0 +1,23 @@ + + + + + + + + ПрефиксПоследнегоАвтономногоРабочегоМеста + + ru + Префикс последнего автономного рабочего места + + Хранит значение префикса для последнего автономного рабочего места, созданного в системе + + String + + 2 + + + + + Managed + diff --git a/SSL/src/Constants/ПрефиксУзлаРаспределеннойИнформационнойБазы/ПрефиксУзлаРаспределеннойИнформационнойБазы.mdo b/SSL/src/Constants/ПрефиксУзлаРаспределеннойИнформационнойБазы/ПрефиксУзлаРаспределеннойИнформационнойБазы.mdo index 0829d95de..089f055a7 100644 --- a/SSL/src/Constants/ПрефиксУзлаРаспределеннойИнформационнойБазы/ПрефиксУзлаРаспределеннойИнформационнойБазы.mdo +++ b/SSL/src/Constants/ПрефиксУзлаРаспределеннойИнформационнойБазы/ПрефиксУзлаРаспределеннойИнформационнойБазы.mdo @@ -16,7 +16,6 @@ 2 - true Managed diff --git a/SSL/src/Constants/ПровайдерЭЦП/ПровайдерЭЦП.mdo b/SSL/src/Constants/ПровайдерЭЦП/ПровайдерЭЦП.mdo index 5e7e563bb..5333df614 100644 --- a/SSL/src/Constants/ПровайдерЭЦП/ПровайдерЭЦП.mdo +++ b/SSL/src/Constants/ПровайдерЭЦП/ПровайдерЭЦП.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/РазмерБлокаПередачиФайла/РазмерБлокаПередачиФайла.mdo b/SSL/src/Constants/РазмерБлокаПередачиФайла/РазмерБлокаПередачиФайла.mdo index 891055bc5..487dd3ef6 100644 --- a/SSL/src/Constants/РазмерБлокаПередачиФайла/РазмерБлокаПередачиФайла.mdo +++ b/SSL/src/Constants/РазмерБлокаПередачиФайла/РазмерБлокаПередачиФайла.mdo @@ -17,7 +17,6 @@ true - true ru Мб diff --git a/SSL/src/Constants/РежимИспользованияИнформационнойБазы/РежимИспользованияИнформационнойБазы.mdo b/SSL/src/Constants/РежимИспользованияИнформационнойБазы/РежимИспользованияИнформационнойБазы.mdo index 1a67967ec..e99dc6bcc 100644 --- a/SSL/src/Constants/РежимИспользованияИнформационнойБазы/РежимИспользованияИнформационнойБазы.mdo +++ b/SSL/src/Constants/РежимИспользованияИнформационнойБазы/РежимИспользованияИнформационнойБазы.mdo @@ -13,7 +13,6 @@ EnumRef.РежимыИспользованияИнформационнойБазы - true Managed diff --git a/SSL/src/Constants/СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы/СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы.mdo b/SSL/src/Constants/СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы/СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы.mdo new file mode 100644 index 000000000..7b4bf254b --- /dev/null +++ b/SSL/src/Constants/СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы/СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы.mdo @@ -0,0 +1,19 @@ + + + + + + + + СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы + + ru + Синхронизировать данные с приложением в интернете при завершении работы программы + + + Boolean + + + + Managed + diff --git a/SSL/src/Constants/СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы/СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы.mdo b/SSL/src/Constants/СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы/СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы.mdo new file mode 100644 index 000000000..a9a6cc73c --- /dev/null +++ b/SSL/src/Constants/СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы/СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы.mdo @@ -0,0 +1,19 @@ + + + + + + + + СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы + + ru + Синхронизировать данные с приложением в Интернете при начале работы программы + + + Boolean + + + + Managed + diff --git a/SSL/src/Constants/СообщениеБлокировкиПриОбновленииКонфигурации/СообщениеБлокировкиПриОбновленииКонфигурации.mdo b/SSL/src/Constants/СообщениеБлокировкиПриОбновленииКонфигурации/СообщениеБлокировкиПриОбновленииКонфигурации.mdo index 4ab879ddb..58d78eba1 100644 --- a/SSL/src/Constants/СообщениеБлокировкиПриОбновленииКонфигурации/СообщениеБлокировкиПриОбновленииКонфигурации.mdo +++ b/SSL/src/Constants/СообщениеБлокировкиПриОбновленииКонфигурации/СообщениеБлокировкиПриОбновленииКонфигурации.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/СообщениеОбменаДаннымиИзГлавногоУзла/СообщениеОбменаДаннымиИзГлавногоУзла.mdo b/SSL/src/Constants/СообщениеОбменаДаннымиИзГлавногоУзла/СообщениеОбменаДаннымиИзГлавногоУзла.mdo new file mode 100644 index 000000000..431df7737 --- /dev/null +++ b/SSL/src/Constants/СообщениеОбменаДаннымиИзГлавногоУзла/СообщениеОбменаДаннымиИзГлавногоУзла.mdo @@ -0,0 +1,19 @@ + + + + + + + + СообщениеОбменаДаннымиИзГлавногоУзла + + ru + Сообщение обмена данными из главного узла + + + ValueStorage + + + + Managed + diff --git a/SSL/src/Constants/СписокЗапрещенныхРасширений/СписокЗапрещенныхРасширений.mdo b/SSL/src/Constants/СписокЗапрещенныхРасширений/СписокЗапрещенныхРасширений.mdo index 9b821ae1a..5352f8e85 100644 --- a/SSL/src/Constants/СписокЗапрещенныхРасширений/СписокЗапрещенныхРасширений.mdo +++ b/SSL/src/Constants/СписокЗапрещенныхРасширений/СписокЗапрещенныхРасширений.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/СписокЗапрещенныхРасширенийОбластиДанных/СписокЗапрещенныхРасширенийОбластиДанных.mdo b/SSL/src/Constants/СписокЗапрещенныхРасширенийОбластиДанных/СписокЗапрещенныхРасширенийОбластиДанных.mdo index 163ec46d2..477398afc 100644 --- a/SSL/src/Constants/СписокЗапрещенныхРасширенийОбластиДанных/СписокЗапрещенныхРасширенийОбластиДанных.mdo +++ b/SSL/src/Constants/СписокЗапрещенныхРасширенийОбластиДанных/СписокЗапрещенныхРасширенийОбластиДанных.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/СписокРасширенийТекстовыхФайлов/СписокРасширенийТекстовыхФайлов.mdo b/SSL/src/Constants/СписокРасширенийТекстовыхФайлов/СписокРасширенийТекстовыхФайлов.mdo index 504b421d6..2d88f469c 100644 --- a/SSL/src/Constants/СписокРасширенийТекстовыхФайлов/СписокРасширенийТекстовыхФайлов.mdo +++ b/SSL/src/Constants/СписокРасширенийТекстовыхФайлов/СписокРасширенийТекстовыхФайлов.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/СписокРасширенийФайловOpenDocument/СписокРасширенийФайловOpenDocument.mdo b/SSL/src/Constants/СписокРасширенийФайловOpenDocument/СписокРасширенийФайловOpenDocument.mdo index 501625754..0eab5661c 100644 --- a/SSL/src/Constants/СписокРасширенийФайловOpenDocument/СписокРасширенийФайловOpenDocument.mdo +++ b/SSL/src/Constants/СписокРасширенийФайловOpenDocument/СписокРасширенийФайловOpenDocument.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/СписокРасширенийФайловOpenDocumentОбластиДанных/СписокРасширенийФайловOpenDocumentОбластиДанных.mdo b/SSL/src/Constants/СписокРасширенийФайловOpenDocumentОбластиДанных/СписокРасширенийФайловOpenDocumentОбластиДанных.mdo index 3f780724d..703164ca3 100644 --- a/SSL/src/Constants/СписокРасширенийФайловOpenDocumentОбластиДанных/СписокРасширенийФайловOpenDocumentОбластиДанных.mdo +++ b/SSL/src/Constants/СписокРасширенийФайловOpenDocumentОбластиДанных/СписокРасширенийФайловOpenDocumentОбластиДанных.mdo @@ -14,7 +14,6 @@ String - true Managed diff --git a/SSL/src/Constants/СтатусОбновленияКонфигурации/СтатусОбновленияКонфигурации.mdo b/SSL/src/Constants/СтатусОбновленияКонфигурации/СтатусОбновленияКонфигурации.mdo index ae93f6c7b..3d9cb592e 100644 --- a/SSL/src/Constants/СтатусОбновленияКонфигурации/СтатусОбновленияКонфигурации.mdo +++ b/SSL/src/Constants/СтатусОбновленияКонфигурации/СтатусОбновленияКонфигурации.mdo @@ -13,7 +13,6 @@ ValueStorage - true Managed diff --git a/SSL/src/Constants/ТипПровайдераЭЦП/ТипПровайдераЭЦП.mdo b/SSL/src/Constants/ТипПровайдераЭЦП/ТипПровайдераЭЦП.mdo index dff40e5fd..aa10eda94 100644 --- a/SSL/src/Constants/ТипПровайдераЭЦП/ТипПровайдераЭЦП.mdo +++ b/SSL/src/Constants/ТипПровайдераЭЦП/ТипПровайдераЭЦП.mdo @@ -16,7 +16,6 @@ 10 - true Managed diff --git a/SSL/src/Constants/ТребуетсяОбновлениеИнформационнойБазы/ТребуетсяОбновлениеИнформационнойБазы.mdo b/SSL/src/Constants/ТребуетсяОбновлениеИнформационнойБазы/ТребуетсяОбновлениеИнформационнойБазы.mdo new file mode 100644 index 000000000..43d86d6b5 --- /dev/null +++ b/SSL/src/Constants/ТребуетсяОбновлениеИнформационнойБазы/ТребуетсяОбновлениеИнформационнойБазы.mdo @@ -0,0 +1,19 @@ + + + + + + + + ТребуетсяОбновлениеИнформационнойБазы + + ru + Требуется обновление информационной базы + + + Boolean + + + + Managed + diff --git a/SSL/src/Constants/УдалитьИспользоватьВзаимодействия/УдалитьИспользоватьВзаимодействия.mdo b/SSL/src/Constants/УдалитьИспользоватьВзаимодействия/УдалитьИспользоватьВзаимодействия.mdo index 4a9fe7a97..c1ac097cc 100644 --- a/SSL/src/Constants/УдалитьИспользоватьВзаимодействия/УдалитьИспользоватьВзаимодействия.mdo +++ b/SSL/src/Constants/УдалитьИспользоватьВзаимодействия/УдалитьИспользоватьВзаимодействия.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/УдалитьТипХраненияФайлов/УдалитьТипХраненияФайлов.mdo b/SSL/src/Constants/УдалитьТипХраненияФайлов/УдалитьТипХраненияФайлов.mdo index 9c7153ebd..0a898b810 100644 --- a/SSL/src/Constants/УдалитьТипХраненияФайлов/УдалитьТипХраненияФайлов.mdo +++ b/SSL/src/Constants/УдалитьТипХраненияФайлов/УдалитьТипХраненияФайлов.mdo @@ -14,7 +14,6 @@ EnumRef.ТипыХраненияФайлов - true Managed diff --git a/SSL/src/Constants/ХранитьФайлыВТомахНаДиске/ХранитьФайлыВТомахНаДиске.mdo b/SSL/src/Constants/ХранитьФайлыВТомахНаДиске/ХранитьФайлыВТомахНаДиске.mdo index c9ce84562..43df7d016 100644 --- a/SSL/src/Constants/ХранитьФайлыВТомахНаДиске/ХранитьФайлыВТомахНаДиске.mdo +++ b/SSL/src/Constants/ХранитьФайлыВТомахНаДиске/ХранитьФайлыВТомахНаДиске.mdo @@ -13,7 +13,6 @@ Boolean - true Managed diff --git a/SSL/src/Constants/ЭтоАвтономноеРабочееМесто/ЭтоАвтономноеРабочееМесто.mdo b/SSL/src/Constants/ЭтоАвтономноеРабочееМесто/ЭтоАвтономноеРабочееМесто.mdo new file mode 100644 index 000000000..ea3f1da6a --- /dev/null +++ b/SSL/src/Constants/ЭтоАвтономноеРабочееМесто/ЭтоАвтономноеРабочееМесто.mdo @@ -0,0 +1,19 @@ + + + + + + + + ЭтоАвтономноеРабочееМесто + + ru + Это автономное рабочее место + + + Boolean + + + + Managed + diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl index 4105b3a80..0aaba7fac 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Forms/Форма/Module.bsl @@ -11,9 +11,10 @@ Если ИнтервалВремениВыполнения = 0 Тогда ИнтервалВремениВыполнения = 60; ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("АвтоматическоеИзвлечениеТекстов", "ИнтервалВремениВыполнения", ИнтервалВремениВыполнения); - КонецЕсли; + КонецЕсли; - ФайловыеФункцииПереопределяемый.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом); + СтандартныеПодсистемыПереопределяемый.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом( + КоличествоФайловСНеизвлеченнымТекстом); КоличествоФайловВПорции = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("АвтоматическоеИзвлечениеТекстов", "КоличествоФайловВПорции"); Если КоличествоФайловВПорции = 0 Тогда @@ -99,7 +100,8 @@ &НаКлиенте Процедура ИзвлечениеТекстовКлиент(РазмерПорции = Неопределено) - // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо + // Здесь ТекущаяДата() не пишется в базу, показывается только на клиенте + // в информационных целях - поэтому не нужно заменять на ТекущаяДатаСеанса. ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; Состояние(НСтр("ru = 'Начато извлечение текста'")); @@ -109,7 +111,7 @@ РазмерПорцииТекущий = КоличествоФайловВПорции; Если РазмерПорции <> Неопределено Тогда РазмерПорцииТекущий = РазмерПорции; - КонецЕсли; + КонецЕсли; МассивФайлов = ПолучитьФайлыДляИзвлеченияТекста(РазмерПорцииТекущий); Если МассивФайлов.Количество() = 0 Тогда @@ -126,22 +128,26 @@ Попытка - АдресФайла = ФайловыеФункцииПереопределяемый.ПолучитьНавигационнуюСсылкуФайла(ФайлИлиВерсияФайла, УникальныйИдентификатор); + АдресФайла = ПолучитьНавигационнуюСсылкуФайла( + ФайлИлиВерсияФайла, УникальныйИдентификатор); + + ИмяСРасширением = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИмяСРасширением( + НаименованиеФайла, Расширение); - ИмяСРасширением = ФайловыеФункцииКлиентСервер.ПолучитьИмяСРасширением(НаименованиеФайла, Расширение); Прогресс = Индекс * 100 / МассивФайлов.Количество(); Состояние(НСтр("ru = 'Идет извлечение текста файла'"), Прогресс, ИмяСРасширением); - ФайловыеФункцииКлиент.ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, - УникальныйИдентификатор, Кодировка); + ФайловыеФункцииСлужебныйКлиент.ИзвлечьТекстВерсии( + ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор, Кодировка); Исключение ОписаниеОшибкиИнфо = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), - Строка(ФайлИлиВерсияФайла)); - + НСтр("ru = 'Во время извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), + Строка(ФайлИлиВерсияФайла)); + ТекстСообщения = ТекстСообщения + Строка(ОписаниеОшибкиИнфо); Состояние(ТекстСообщения); @@ -154,27 +160,28 @@ КонецЦикла; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Извлечение текста завершено. Обработано файлов: %1'"), - МассивФайлов.Количество()); + НСтр("ru = 'Извлечение текста завершено. Обработано файлов: %1'"), + МассивФайлов.Количество()); + Состояние(ТекстСообщения); Исключение ОписаниеОшибкиИнфо = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), - Строка(ФайлИлиВерсияФайла)); - + НСтр("ru = 'Во время извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), + Строка(ФайлИлиВерсияФайла)); + ТекстСообщения = ТекстСообщения + Строка(ОписаниеОшибкиИнфо); Состояние(ТекстСообщения); - // запись в журнал регистрации ЗаписьЖурналаРегистрацииСервер(ТекстСообщения); КонецПопытки; - ФайловыеФункцииПереопределяемый.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом); + ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом); КонецПроцедуры #КонецЕсли @@ -182,12 +189,14 @@ &НаСервереБезКонтекста Процедура ЗаписьОшибкиИзвлечения(ФайлИлиВерсияФайла, РезультатИзвлечения, ТекстСообщения) - ФайловыеФункции.ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияФайла, РезультатИзвлечения, ""); + УстановитьПривилегированныйРежим(Истина); + + ФайловыеФункцииСлужебный.ЗаписатьРезультатИзвлеченияТекста(ФайлИлиВерсияФайла, РезультатИзвлечения, ""); // запись в журнал регистрации ЗаписьЖурналаРегистрацииСервер(ТекстСообщения); -КонецПроцедуры +КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьФайлыДляИзвлеченияТекста(КоличествоФайловВПорции) @@ -196,21 +205,39 @@ Запрос = Новый Запрос; ПолучитьВсеФайлы = (КоличествоФайловВПорции = 0); - ФайловыеФункцииПереопределяемый.ПолучитьТекстЗапросаДляИзвлеченияТекста(Запрос.Текст, ПолучитьВсеФайлы); + + СтандартныеПодсистемыПереопределяемый.ПолучитьТекстЗапросаДляИзвлеченияТекста( + Запрос.Текст, ПолучитьВсеФайлы); Для Каждого Строка Из Запрос.Выполнить().Выгрузить() Цикл - Кодировка = РаботаСФайламиВызовСервера.ПолучитьКодировкуВерсииФайла(Строка.Ссылка); + Кодировка = ФайловыеФункцииСлужебный.ПолучитьКодировкуВерсииФайла(Строка.Ссылка); - Результат.Добавить(Новый Структура("Ссылка, Расширение, Наименование, Кодировка", + Результат.Добавить(Новый Структура("Ссылка, Расширение, Наименование, Кодировка", Строка.Ссылка, Строка.Расширение, Строка.Наименование, Кодировка)); - + КонецЦикла; Возврат Результат; КонецФункции +&НаСервереБезКонтекста +Функция ПолучитьНавигационнуюСсылкуФайла(Знач ФайлИлиВерсияФайла, Знач УникальныйИдентификатор) + + Возврат СтандартныеПодсистемыПереопределяемый.ПолучитьНавигационнуюСсылкуФайла( + ФайлИлиВерсияФайла, УникальныйИдентификатор); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом) + + СтандартныеПодсистемыПереопределяемый.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом( + КоличествоФайловСНеизвлеченнымТекстом); + +КонецПроцедуры + &НаКлиенте Процедура Старт(Команда) diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html index f1171e7c2..e83b0610a 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстов/Help/ru.html @@ -1,3 +1,3 @@ - +

                Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows нужно запустить тонкий или толстый клиент, и на нем открыть обработку «Автоматическое извлечение текстов». Эта обработка в автоматическом режиме будет извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.

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

                \ No newline at end of file diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl index b415476c5..6d4d898fa 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Forms/Форма/Module.bsl @@ -134,12 +134,15 @@ ПолноеКоличествоФайловСНеизвлеченнымТекстом = 0; ЧислоНеизвлеченныхДляОбластей = Новый Соответствие; - // сперва подсчитаем количество файлов с неизвлеченным текстом во всех областях + // В первую очередь выполняется подсчет количества файлов + // с неизвлеченным текстом во всех областях. Для Каждого Область Из МассивОбластейДанных Цикл ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Область); КоличествоФайловСНеизвлеченнымТекстом = 0; - ФайловыеФункцииПереопределяемый.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом); + + ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом); + ПолноеКоличествоФайловСНеизвлеченнымТекстом = ПолноеКоличествоФайловСНеизвлеченнымТекстом + КоличествоФайловСНеизвлеченнымТекстом; ЧислоНеизвлеченныхДляОбластей.Вставить(Область, КоличествоФайловСНеизвлеченнымТекстом); ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); @@ -149,7 +152,7 @@ КоличествоВПорции = 100; - // для каждой области вызовем извлечение + // Вызов исключения для каждой области. КоличествоОбластей = МассивОбластейДанных.Количество(); Для Каждого Область Из МассивОбластейДанных Цикл @@ -159,7 +162,7 @@ РазмерПорцииДляОбласти = Окр((ЧислоНеизвлеченных / ПолноеКоличествоФайловСНеизвлеченнымТекстом) * КоличествоВПорции); Если РазмерПорцииДляОбласти = 0 Тогда РазмерПорцииДляОбласти = 1; - КонецЕсли; + КонецЕсли; ОбщегоНазначения.УстановитьРазделениеСеанса(Истина, Область); ИзвлечениеТекстовОднойОбластиДанных(РазмерПорцииДляОбласти); @@ -168,12 +171,12 @@ КонецЦикла; - // возвращаемся в неразделенный режим + // Возврат в неразделенный режим. ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); Исключение - // возвращаемся в неразделенный режим + // Возврат в неразделенный режим. ОбщегоНазначения.УстановитьРазделениеСеанса(Ложь); ВызватьИсключение; @@ -189,7 +192,8 @@ &НаКлиенте Процедура ИзвлечениеТекстовОднойОбластиДанных(РазмерПорции = Неопределено) - // здесь ТекущаяДата() не пишется в базу - только на клиенте показывается в информационных целях - поэтому заменять на ТекущаяДатаСеанса не надо + // Здесь ТекущаяДата() не пишется в базу, показывается только на клиенте + // в информационных целях - поэтому не нужно заменять на ТекущаяДатаСеанса. ПрогнозируемоеВремяНачалаИзвлечения = ТекущаяДата() + ИнтервалВремениВыполнения; Состояние(НСтр("ru = 'Начато извлечение текста'")); @@ -199,7 +203,7 @@ РазмерПорцииТекущий = 100; Если РазмерПорции <> Неопределено Тогда РазмерПорцииТекущий = РазмерПорции; - КонецЕсли; + КонецЕсли; МассивФайлов = ПолучитьФайлыДляИзвлеченияТекста(РазмерПорцииТекущий); @@ -213,31 +217,33 @@ Расширение = МассивФайлов[Индекс].Расширение; ФайлИлиВерсияФайла = МассивФайлов[Индекс].Ссылка; - АдресФайла = ФайловыеФункцииПереопределяемый.ПолучитьНавигационнуюСсылкуФайла(ФайлИлиВерсияФайла, УникальныйИдентификатор); + АдресФайла = ПолучитьНавигационнуюСсылкуФайла( + ФайлИлиВерсияФайла, УникальныйИдентификатор); Прогресс = Индекс * 100 / МассивФайлов.Количество(); Состояние(НСтр("ru = 'Идет извлечение текста файла'"), Прогресс, Строка(ФайлИлиВерсияФайла)); - ФайловыеФункцииКлиент.ИзвлечьТекстВерсии(ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор); + ФайловыеФункцииСлужебныйКлиент.ИзвлечьТекстВерсии( + ФайлИлиВерсияФайла, АдресФайла, Расширение, УникальныйИдентификатор); КонецЦикла; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Извлечение текста завершено. Обработано файлов: %1'"), - МассивФайлов.Количество()); + НСтр("ru = 'Извлечение текста завершено. Обработано файлов: %1'"), + МассивФайлов.Количество()); + Состояние(ТекстСообщения); Исключение ОписаниеОшибкиИнфо = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Во время извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), - Строка(ФайлИлиВерсияФайла)); - + НСтр("ru = 'Во время извлечения текста из файла ""%1"" произошла неизвестная ошибка.'"), + Строка(ФайлИлиВерсияФайла)); + ТекстСообщения = ТекстСообщения + Строка(ОписаниеОшибкиИнфо); Состояние(ТекстСообщения); - // запись в журнал регистрации ЗаписьЖурналаРегистрацииСервер(ТекстСообщения); КонецПопытки; @@ -253,7 +259,9 @@ Запрос = Новый Запрос; ПолучитьВсеФайлы = (КоличествоФайловВПорции = 0); - ФайловыеФункцииПереопределяемый.ПолучитьТекстЗапросаДляИзвлеченияТекста(Запрос.Текст, ПолучитьВсеФайлы); + + СтандартныеПодсистемыПереопределяемый.ПолучитьТекстЗапросаДляИзвлеченияТекста( + Запрос.Текст, ПолучитьВсеФайлы); Для Каждого Строка Из Запрос.Выполнить().Выгрузить() Цикл @@ -269,3 +277,20 @@ Возврат Результат; КонецФункции + +&НаСервереБезКонтекста +Функция ПолучитьНавигационнуюСсылкуФайла(Знач ФайлИлиВерсияФайла, Знач УникальныйИдентификатор) + + Возврат СтандартныеПодсистемыПереопределяемый.ПолучитьНавигационнуюСсылкуФайла( + ФайлИлиВерсияФайла, УникальныйИдентификатор); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ПолучитьКоличествоВерсийСНеизвлеченнымТекстом(КоличествоФайловСНеизвлеченнымТекстом) + + СтандартныеПодсистемыПереопределяемый.ПолучитьКоличествоВерсийСНеизвлеченнымТекстом( + КоличествоФайловСНеизвлеченнымТекстом); + +КонецПроцедуры + diff --git a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html index f1171e7c2..e83b0610a 100644 --- a/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html +++ b/SSL/src/DataProcessors/АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных/Help/ru.html @@ -1,3 +1,3 @@ - +

                Если один или несколько рабочих процессов сервера работают под Linux, а часть или все клиенты подключаются с помощью веб-клиента, то в информационной базе могут быть добавлены файлы, текст из которых не извлечен, и соответственно эти файлы не могут быть найдены полнотекстовым поиском по содержимому. В этом случае на одном из клиентских компьютеров, работающих под управлением ОС Microsoft Windows нужно запустить тонкий или толстый клиент, и на нем открыть обработку «Автоматическое извлечение текстов». Эта обработка в автоматическом режиме будет извлекать текст из файлов. По умолчанию интервал времени выполнения равен 60 секундам.

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

                \ No newline at end of file diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form index 9a434cf6a..0c8af2c92 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Form.form @@ -1,9 +1,5 @@ - - <key>ru</key> - <value>Активные пользователи</value> - СписокПользователей 2 @@ -900,6 +896,7 @@ Yes DontBlock true + true true Vertical true @@ -1326,10 +1323,6 @@ true Role.ПолныеПрава - - true - Role.УдалитьПолныеПраваОбластиДанных - CommonPicture.РазорватьСоединение diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html index 1933ce0d2..25a0a28ae 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Help/ru.html @@ -1,4 +1,4 @@ - +

                Активные пользователи - это пользователи, которые сейчас работают с информационной базой. В этом списке отображаются не только пользователи, работающие с информационной базой при помощи приложений "Тонкий клиент", "Веб-клиент" или "Конфигуратор", но и такие пользователи как "COM-соединение", "WS-соединение", "Фоновое задание" и т.п.

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

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

                \ No newline at end of file diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl index 26dcb10e2..8b3f4cdd7 100644 --- a/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl +++ b/SSL/src/DataProcessors/АктивныеПользователи/Forms/ФормаСпискаАктивныхПользователей/Module.bsl @@ -170,7 +170,11 @@ СписокПользователей.Очистить(); - Пользователи.НайтиНеоднозначныхПользователейИБ(); + Если НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() + ИЛИ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда + + Пользователи.НайтиНеоднозначныхПользователейИБ(); + КонецЕсли; СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы(); @@ -183,22 +187,26 @@ СтрПользователя.Сеанс = СеансИБ.НомерСеанса; СтрПользователя.Соединение = СеансИБ.НомерСоединения; - Если СеансИБ.Пользователь <> Неопределено Тогда + Если ТипЗнч(СеансИБ.Пользователь) = Тип("ПользовательИнформационнойБазы") + И ЗначениеЗаполнено(СеансИБ.Пользователь.Имя) Тогда - СтрПользователя.Пользователь = СеансИБ.Пользователь.Имя; - СтрПользователя.ИмяПользователя = СеансИБ.Пользователь.ПолноеИмя; - СтрПользователя.ПользовательСсылка = - НайтиСсылкуПоИдентификаторуПользователя(СеансИБ.Пользователь.УникальныйИдентификатор); + СтрПользователя.Пользователь = СеансИБ.Пользователь.Имя; + СтрПользователя.ИмяПользователя = СеансИБ.Пользователь.Имя; + СтрПользователя.ПользовательСсылка = НайтиСсылкуПоИдентификаторуПользователя( + СеансИБ.Пользователь.УникальныйИдентификатор); Если ОбщегоНазначенияПовтИсп.РазделениеВключено() И Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда - СтрПользователя.РазделениеДанных = ЗначенияРазделителейДанныхВСтроку(СеансИБ.Пользователь.РазделениеДанных); - КонецЕсли; + СтрПользователя.РазделениеДанных = ЗначенияРазделителейДанныхВСтроку( + СеансИБ.Пользователь.РазделениеДанных); + КонецЕсли; Иначе - СтрПользователя.Пользователь = ""; - СтрПользователя.ИмяПользователя = ""; + СвойстваНеУказанного = ПользователиСлужебный.СвойстваНеуказанногоПользователя(); + СтрПользователя.Пользователь = СвойстваНеУказанного.ПолноеИмя; + СтрПользователя.ИмяПользователя = ""; + СтрПользователя.ПользовательСсылка = СвойстваНеУказанного.Ссылка; КонецЕсли; Если СеансИБ.НомерСеанса = НомерСеансаИнформационнойБазы Тогда @@ -256,7 +264,7 @@ Запрос = Новый Запрос; ШаблонТекстаЗапроса = "ВЫБРАТЬ - | Ссылка + | Ссылка КАК Ссылка |ИЗ | %1 |ГДЕ diff --git a/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html b/SSL/src/DataProcessors/АктивныеПользователи/Help/ru.html index 77c7cf605..d42a6b1f8 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/БлокировкаРаботыПользователей/Help/ru.html b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html index afc7a24ac..bcb530afa 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

                • Период (время) начала действия и окончания действия блокировки; diff --git a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl index 3b67eac33..858d8cacf 100644 --- a/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl +++ b/SSL/src/DataProcessors/БлокировкаРаботыПользователей/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -84,3 +86,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form new file mode 100644 index 000000000..37f0fb173 --- /dev/null +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Form.form @@ -0,0 +1,2437 @@ + + + + ВыполнениеОбменаДанными + 1 + + ЗагрузкаДанных + 2 + + ДлительнаяОперация + 4 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперацияРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ДлительнаяОперацияКонтекстноеМеню + 5 + true + + 7 + true + 2 + true + + + CommonPicture.Информация32 + + + + + СтатусЗагрузкиДанных + 6 + + <key>ru</key> + <value>Выполняется загрузка данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + СтатусЗагрузкиДанныхРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + СтатусЗагрузкиДанныхКонтекстноеМеню + 7 + true + + Label + true + 2 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Загрузка данных</value> + + + ru + Загрузка данных + + + ЗагрузкаДанныхРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + Page + + auto + + + + ВыгрузкаДанных + 3 + + ДлительнаяОперация1 + 10 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперация1РасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + ДлительнаяОперация1КонтекстноеМеню + 11 + true + + 7 + true + 2 + true + + + CommonPicture.Информация32 + + + + + СтатусВыгрузкиДанных + 8 + + <key>ru</key> + <value>Выполняется выгрузка данных. +Пожалуйста, подождите...</value> + + true + true + + true + + + СтатусВыгрузкиДанныхРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + СтатусВыгрузкиДанныхКонтекстноеМеню + 9 + true + + Label + true + 2 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Выгрузка данных</value> + + + ru + Выгрузка данных + + + ВыгрузкаДанныхРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + Page + + auto + + + + ЗавершениеОбмена + 12 + + СтатусЗавершенияОбмена + 17 + + ОбменЗавершенУспешно + 18 + + КартинкаОбменЗавершенУспешно + 13 + + <key>ru</key> + <value>Картинка обмен завершен успешно</value> + + true + true + + true + + + КартинкаОбменЗавершенУспешноРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + КартинкаОбменЗавершенУспешноКонтекстноеМеню + 14 + true + + 7 + true + 2 + true + + + CommonPicture.Информация32 + + + + + СтатусОбменЗавершенУспешно + 15 + + <key>ru</key> + <value>Обмен данными успешно завершен.</value> + + true + true + + true + + + СтатусОбменЗавершенУспешноРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + + СтатусОбменЗавершенУспешноКонтекстноеМеню + 16 + true + + Label + true + 2 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Обмен завершен успешно</value> + + + ru + Обмен завершен успешно + + + ОбменЗавершенУспешноРасширеннаяПодсказка + 97 + Label + true + true + + Left + + + Page + + auto + + + + ОбменЗавершенСОшибкой + 19 + + КартинкаОбменЗавершенСОшибкой + 20 + + <key>ru</key> + <value>Картинка обмен завершен с ошибкой</value> + + true + true + + true + + + КартинкаОбменЗавершенСОшибкойРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + + КартинкаОбменЗавершенСОшибкойКонтекстноеМеню + 21 + true + + 7 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + СтатусОбменЗавершенСОшибкой + 22 + + <key>ru</key> + <value>Не удалось выполнить обмен данными. +Обратитесь к администратору.</value> + + true + true + + true + + + СтатусОбменЗавершенСОшибкойРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + СтатусОбменЗавершенСОшибкойКонтекстноеМеню + 23 + true + + Label + true + 2 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Обмен завершен с ошибкой</value> + + + ru + Обмен завершен с ошибкой + + + ОбменЗавершенСОшибкойРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Page + + auto + + + + ОбменЗавершенСОшибкойДляАдминистратора + 28 + + КартинкаОбменЗавершенСОшибкой1 + 29 + + <key>ru</key> + <value>Картинка обмен завершен с ошибкой</value> + + true + true + + true + + + КартинкаОбменЗавершенСОшибкой1РасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + КартинкаОбменЗавершенСОшибкой1КонтекстноеМеню + 30 + true + + 7 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + СтатусноеСообщение + 33 + + СтатусОбменЗавершенСОшибкойДляАдминистратора + 31 + + <key>ru</key> + <value>Не удалось выполнить обмен данными.</value> + + true + true + + true + + + СтатусОбменЗавершенСОшибкойДляАдминистратораРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + + СтатусОбменЗавершенСОшибкойДляАдминистратораКонтекстноеМеню + 32 + true + + Label + true + true + false + + Left + Center + + + + ПерейтиВЖурналРегистрации + 34 + true + true + + true + + + ПерейтиВЖурналРегистрацииРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + Hyperlink + Form.Command.ПерейтиВЖурналРегистрации + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Статусное сообщение</value> + + + ru + Статусное сообщение + + + СтатусноеСообщениеРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Обмен завершен с ошибкой</value> + + + ru + Обмен завершен с ошибкой + + + ОбменЗавершенСОшибкойДляАдминистратораРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + Page + + auto + + + + ОбменЗавершенСОшибкойПодключения + 81 + + КартинкаОбменЗавершенСОшибкой2 + 82 + + <key>ru</key> + <value>Картинка обмен завершен с ошибкой</value> + + true + true + + true + + + КартинкаОбменЗавершенСОшибкой2РасширеннаяПодсказка + 109 + Label + true + true + + Left + + + + КартинкаОбменЗавершенСОшибкой2КонтекстноеМеню + 83 + true + + 7 + true + 2 + true + + + CommonPicture.Предупреждение32 + + + + + СообщениеОбОшибкеПользователю + 86 + true + true + + true + + + СообщениеОбОшибкеПользователю + + None + + СообщениеОбОшибкеПользователюРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + + СообщениеОбОшибкеПользователюКонтекстноеМеню + 87 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Обмен завершен с ошибкой подключения</value> + + + ru + Обмен завершен с ошибкой + + + ОбменЗавершенСОшибкойПодключенияРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + Page + + auto + + + + ТребуетсяОбновление + 35 + + КартинкаТребуетсяОбновление + 36 + + <key>ru</key> + <value>Картинка требуется обновление</value> + + true + true + + true + + + КартинкаТребуетсяОбновлениеРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + + КартинкаТребуетсяОбновлениеКонтекстноеМеню + 37 + true + + 5 + true + 2 + true + false + + + CommonPicture.Предупреждение32 + + + + + ПанельТребуетсяОбновление + 38 + + ТребуетсяОбновлениеОграниченныеПрава + 39 + + ТекстТребуетсяОбновлениеОрганиченныеПрава + 40 + + <key>ru</key> + <value>Получено обновление программы из "%1". +Необходимо установить обновление программы, после чего обмен данными будет продолжен. Обратитесь к администратору.</value> + + true + true + + true + + + ТекстТребуетсяОбновлениеОрганиченныеПраваРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ТекстТребуетсяОбновлениеОрганиченныеПраваКонтекстноеМеню + 41 + true + + Label + 55 + true + true + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Требуется обновление ограниченные права</value> + + + ru + Требуется обновление ограниченные права + + + ТребуетсяОбновлениеОграниченныеПраваРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ТребуетсяОбновлениеПолныеПрава + 42 + + ТекстТребуетсяОбновлениеПолныеПрава + 43 + + <key>ru</key> + <value>Получено обновление программы из "%1". +Необходимо установить обновление программы, после чего обмен данными будет продолжен.</value> + + true + true + + true + + + ТекстТребуетсяОбновлениеПолныеПраваРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + + ТекстТребуетсяОбновлениеПолныеПраваКонтекстноеМеню + 44 + true + + Label + 55 + true + true + + Left + Top + + + true + true + + true + + + <key>ru</key> + <value>Требуется обновление полные права</value> + + + ru + Требуется обновление полные права + + + ТребуетсяОбновлениеПолныеПраваРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель требуется обновление</value> + + + ru + Панель требуется обновление + + 1 + + ПанельТребуетсяОбновлениеРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Требуется обновление</value> + + + ru + Требуется обновление + + + ТребуетсяОбновлениеРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Статус завершения обмена</value> + + + ru + Статус завершения обмена + + + СтатусЗавершенияОбменаРасширеннаяПодсказка + 96 + Label + true + true + + Left + + + Pages + + Auto + + + + ПанельДействий + 45 + + ДействияЗакрыть + 46 + + КоманднаяПанельЗакрыть + 47 + + ФормаЗакрыть + 48 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель закрыть</value> + + + ru + Командная панель закрыть + + + КоманднаяПанельЗакрытьРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Действия закрыть</value> + + + ru + Действия закрыть + + + ДействияЗакрытьРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ДействияУстановитьЗакрыть + 49 + + КоманднаяПанельУстановитьЗакрыть + 50 + + УстановитьОбновление + 51 + true + true + + true + + + УстановитьОбновлениеРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + Form.Command.УстановитьОбновление + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗакрыть1 + 52 + true + true + + true + + + ФормаЗакрыть1РасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельУстановитьЗакрытьРасширеннаяПодсказка + 124 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Действия установить закрыть</value> + + + ru + Действия установить закрыть + + + ДействияУстановитьЗакрытьРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель действий</value> + + + ru + Панель действий + + + ПанельДействийРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Завершение обмена</value> + + + ru + Завершение обмена + + + ЗавершениеОбменаРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ЗапросПароляПользователя + 53 + + Декорация2 + 63 + + <key>ru</key> + <value>Для того чтобы выполнить обмен данными необходимо указать пароль.</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 128 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 64 + true + + Label + true + true + true + + Left + + + + Группа1 + 59 + + WSПароль + 54 + true + true + + true + + + WSПароль + + + WSПарольРасширеннаяПодсказка + 130 + 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 + + + ЗабылиПарольРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Hyperlink + Form.Command.ЗабылиПароль + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа1РасширеннаяПодсказка + 129 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ЗапомнитьПароль + 56 + true + true + + true + + + WSЗапомнитьПароль + + Right + + ЗапомнитьПарольРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + ЗапомнитьПарольКонтекстноеМеню + 57 + true + + CheckBoxField + Enter + true + Left + true + + + + КоманднаяПанельВыполненияОбмена + 60 + + ВыполнитьОбмен + 62 + true + true + + true + + true + + ВыполнитьОбменРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + Form.Command.ВыполнитьОбмен + Auto + true + true + true + UserCmds + Auto + + + ФормаЗакрыть2 + 70 + true + true + + true + + + ФормаЗакрыть2РасширеннаяПодсказка + 137 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + true + true + + true + + + ru + Командная панель закрыть + + + КоманднаяПанельВыполненияОбменаРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + ru + Загрузка данных + + + ЗапросПароляПользователяРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ОжиданиеПроверкиПодключения + 65 + + ДлительнаяОперация2 + 66 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперация2РасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + ДлительнаяОперация2КонтекстноеМеню + 67 + true + + 7 + true + 2 + true + + + CommonPicture.Информация32 + + + + + СтатусЗагрузкиДанных1 + 68 + + <key>ru</key> + <value>Выполняется проверка подключения к Интернету. +Пожалуйста, подождите...</value> + + true + true + + true + + + СтатусЗагрузкиДанных1РасширеннаяПодсказка + 140 + Label + true + true + + Left + + + + СтатусЗагрузкиДанных1КонтекстноеМеню + 69 + true + + Label + true + 2 + true + + Left + Center + + + true + true + + true + + + ru + Загрузка данных + + + ОжиданиеПроверкиПодключенияРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Page + + auto + + + + ОжиданиеПроверкиПодключенияПарольЗадан + 76 + + ДлительнаяОперация4 + 77 + + <key>ru</key> + <value>Длительная операция</value> + + true + true + + true + + + ДлительнаяОперация4РасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + ДлительнаяОперация4КонтекстноеМеню + 78 + true + + 7 + true + 2 + true + + + CommonPicture.Информация32 + + + + + СтатусЗагрузкиДанных3 + 79 + + <key>ru</key> + <value>Выполняется проверка подключения к Интернету. +Пожалуйста, подождите...</value> + + true + true + + true + + + СтатусЗагрузкиДанных3РасширеннаяПодсказка + 143 + Label + true + true + + Left + + + + СтатусЗагрузкиДанных3КонтекстноеМеню + 80 + true + + Label + true + 2 + true + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Ожидание проверки подключения пароль задан</value> + + + ru + Загрузка данных + + + ОжиданиеПроверкиПодключенияПарольЗаданРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Выполнение обмена данными</value> + + + ru + Выполнение обмена данными + + + ВыполнениеОбменаДаннымиРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Pages + + Auto + + + None + false + + ФормаКоманднаяПанель + -1 + Right + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + Help + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 55 + LockOwner + true + true + Vertical + true + UseIfNecessary + auto + true + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 2 + + Number + + 3 + true + + + + true + + + true + + + + УзелИнформационнойБазы + + <key>ru</key> + <value>Узел информационной базы</value> + + 3 + + ExchangePlanRef + + + true + + + true + + + + ТаблицаПереходов + + <key>ru</key> + <value>Таблица переходов</value> + + 1 + + ValueTable + + + true + + + true + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 1 + + Number + + 3 + true + + + + true + + + true + + + + ИмяОсновнойСтраницы + + <key>ru</key> + <value>Имя основной страницы</value> + + 2 + + String + + + + true + + + true + + + + ИмяСтраницыДекорации + + <key>ru</key> + <value>Имя страницы декорации</value> + + 3 + + String + + + + true + + + true + + + + ИмяСтраницыНавигации + + <key>ru</key> + <value>Имя страницы навигации</value> + + 4 + + String + + + + true + + + true + + + + ИмяОбработчикаПриОткрытии + + <key>ru</key> + <value>Имя обработчика при открытии</value> + + 5 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеДалее + + <key>ru</key> + <value>Имя обработчика при переходе далее</value> + + 6 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеНазад + + <key>ru</key> + <value>Имя обработчика при переходе назад</value> + + 7 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + + <key>ru</key> + <value>Имя обработчика длительной операции</value> + + 9 + + String + + + + true + + + true + + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 4 + + Boolean + + + true + + + true + + + + ДлительнаяОперацияЗавершена + + <key>ru</key> + <value>Длительная операция завершена</value> + + 5 + + Boolean + + + true + + + true + + + + ИдентификаторФайлаСообщенияВСервисе + + <key>ru</key> + <value>Идентификатор файла сообщения в сервисе</value> + + 6 + + String + + + + true + + + true + + + + ИдентификаторДлительнойОперации + + <key>ru</key> + <value>Идентификатор длительной операции</value> + + 7 + + String + + + + true + + + true + + + + ДатаНачалаОперации + + <key>ru</key> + <value>Дата начала операции</value> + + 8 + + Date + + + + true + + + true + + + + WSURLВебСервиса + + <key>ru</key> + <value>WSURLВеб сервиса</value> + + 9 + + String + + + + true + + + true + + + + WSИмяПользователя + + <key>ru</key> + <value>WSИмя пользователя</value> + + 10 + + String + + + + true + + + true + + + + WSПароль + + <key>ru</key> + <value>Пароль</value> + + 11 + + String + + 50 + + + + true + + + true + + + + ВидТранспортаСообщений + + <key>ru</key> + <value>Вид транспорта сообщений</value> + + 12 + + EnumRef.ВидыТранспортаСообщенийОбмена + + + true + + + true + + + + СообщениеОбОшибке + + <key>ru</key> + <value>Сообщение об ошибке</value> + + 14 + + String + + + + true + + + true + + + + ДлительнаяОперацияЗавершенаСОшибкой + + <key>ru</key> + <value>Длительная операция завершена с ошибкой</value> + + 16 + + Boolean + + + true + + + true + + + + ЕстьОшибки + + <key>ru</key> + <value>Есть ошибки</value> + + 15 + + Boolean + + + true + + + true + + + + РольДоступнаДобавлениеИзменениеОбменовДанными + + <key>ru</key> + <value>Роль доступна добавление изменение обменов данными</value> + + 17 + + Boolean + + + true + + + true + + + + РольДоступнаПолныеПрава + + <key>ru</key> + <value>Роль доступна полные права</value> + + 18 + + Boolean + + + true + + + true + + + + ТребуетсяОбновление + + <key>ru</key> + <value>Требуется обновление</value> + + 19 + + Boolean + + + true + + + true + + + + WSЗапомнитьПароль + + <key>ru</key> + <value>Запомнить пароль</value> + + 20 + + Boolean + + + true + + + true + + + + АдресДляВосстановленияПароляУчетнойЗаписи + + <key>ru</key> + <value>Адрес для восстановления пароля учетной записи</value> + + 21 + + String + + + + true + + + true + + + + СинхронизацияДанныхОтключена + + <key>ru</key> + <value>Синхронизация данных отключена</value> + + 13 + + Boolean + + + true + + + true + + + + СообщениеОбОшибкеПользователю + 22 + + String + + + + true + + + true + + + + ПерейтиВЖурналРегистрации + + <key>ru</key> + <value>Перейти в журнал регистрации</value> + + 1 + + ru + Перейти в журнал регистрации + + + true + + + + ПерейтиВЖурналРегистрации + + + Auto + Auto + + + УстановитьОбновление + + <key>ru</key> + <value>Установить обновление</value> + + 2 + + ru + Установить обновление + + + true + + + + УстановитьОбновление + + + Auto + Auto + + + ЗабылиПароль + + <key>ru</key> + <value>Забыли пароль?</value> + + 3 + + ru + Забыли пароль + + + true + + + + ЗабылиПароль + + + Auto + Auto + + + ВыполнитьОбмен + + <key>ru</key> + <value>Выполнить обмен</value> + + 4 + + ru + Выполнить обмен + + + true + + + + ВыполнитьОбмен + + + Auto + Auto + + + УзелИнформационнойБазы + + ExchangePlanRef + + + + АдресДляВосстановленияПароляУчетнойЗаписи + + String + + + + + + + + diff --git a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Module.bsl b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl similarity index 65% rename from SSL/src/CommonForms/ВыполнениеОбменаДанными/Module.bsl rename to SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl index b249f4266..a7b37b9ac 100644 --- a/SSL/src/CommonForms/ВыполнениеОбменаДанными/Module.bsl +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/Forms/Форма/Module.bsl @@ -5,40 +5,33 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - УстановитьПривилегированныйРежим(Истина); - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; + УстановитьПривилегированныйРежим(Истина); + УзелИнформационнойБазы = Параметры.УзелИнформационнойБазы; Если Не ЗначениеЗаполнено(УзелИнформационнойБазы) Тогда - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Не заданы параметры формы. Форма не может быть открыта.'"), Отказ); - Возврат; - КонецЕсли; - - // выполняем проверку на то, что в подчиненном узле РИБ настройка обмена была выполнена полностью - НастройкаПодчиненногоУзлаРИБЗавершена = Истина; - - Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда - ИмяПланаОбменаРИБ = ПланыОбмена.ГлавныйУзел().Метаданные().Имя; - ИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелИнформационнойБазы); - - Если ИмяПланаОбмена = ИмяПланаОбменаРИБ - И Не Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Получить() Тогда + Если ОбменДаннымиСервер.ЭтоПодчиненныйУзелРИБ() Тогда - НастройкаПодчиненногоУзлаРИБЗавершена = Ложь; + УзелИнформационнойБазы = ПланыОбмена.ГлавныйУзел(); + + Иначе + + ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Не заданы параметры формы. Форма не может быть открыта.'"), Отказ); Возврат; - КонецЕсли; КонецЕсли; + ЕстьОшибки = КонфигурацияИзменена() И ПланыОбмена.ГлавныйУзел() = УзелИнформационнойБазы; + // устанавливаем заголовок формы - Заголовок = НСтр("ru = 'Обмен с ""%1""'"); + Заголовок = НСтр("ru = 'Обмен данными с ""%1""'"); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Заголовок, Строка(УзелИнформационнойБазы)); // @@ -53,9 +46,35 @@ КонецЕсли; - Если ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными"); + РольДоступнаПолныеПрава = Пользователи.РолиДоступны("ПолныеПрава"); + + Элементы.ПанельТребуетсяОбновление.ТекущаяСтраница = ?(РольДоступнаПолныеПрава, Элементы.ТребуетсяОбновлениеПолныеПрава, Элементы.ТребуетсяОбновлениеОграниченныеПрава); + Элементы.ТекстТребуетсяОбновлениеПолныеПрава.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстТребуетсяОбновлениеПолныеПрава.Заголовок, УзелИнформационнойБазы); + Элементы.ТекстТребуетсяОбновлениеОрганиченныеПрава.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.ТекстТребуетсяОбновлениеОрганиченныеПрава.Заголовок, УзелИнформационнойБазы); + + АдресДляВосстановленияПароляУчетнойЗаписи = Параметры.АдресДляВосстановленияПароляУчетнойЗаписи; + + Элементы.ЗабылиПароль.Видимость = Не ПустаяСтрока(АдресДляВосстановленияПароляУчетнойЗаписи); + + СинхронизацияДанныхОтключена = Ложь; + + // Устанавливаем текущий сценарий работы обмена + Если ЕстьОшибки Тогда - СценарийОбменаЧерезВебСервис(); + СценарийКогдаЕстьОшибкиПриНачалеРаботы(); + + ИначеЕсли ВидТранспортаСообщений = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда + + Если WSЗапомнитьПароль Тогда + + СценарийОбменаЧерезВебСервис(); + + Иначе + + СценарийОбменаЧерезВебСервисСЗапросомПароля(); + + КонецЕсли; Иначе @@ -63,31 +82,15 @@ КонецЕсли; - ВыполняетсяОбменДанными = Истина; - ЕстьОшибки = Ложь; - - РольДоступнаДобавлениеИзменениеОбменовДанными = Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными"); - КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) - // Позиционируемся на первом шаге помощника УстановитьПорядковыйНомерПерехода(1); КонецПроцедуры -&НаКлиенте -Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) - - Если ВыполняетсяОбменДанными Тогда - Отказ = Истина; - Возврат; - КонецЕсли; - -КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -98,6 +101,26 @@ КонецПроцедуры +&НаКлиенте +Процедура УстановитьОбновление(Команда) + Закрыть(); + ОбменДаннымиКлиент.ВыполнитьОбновлениеИнформационнойБазы(); +КонецПроцедуры + +&НаКлиенте +Процедура ЗабылиПароль(Команда) + + ПерейтиПоНавигационнойСсылке(АдресДляВосстановленияПароляУчетнойЗаписи); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбмен(Команда) + + ВыполнитьПереходДалее(); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ПОСТАВЛЯЕМАЯ ЧАСТЬ //////////////////////////////////////////////////////////////////////////////// @@ -168,28 +191,28 @@ СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); - Если СтрокиПерехода.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - СтрокаПерехода = СтрокиПерехода[0]; - - // обработчик ПриПереходеДалее - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) - И Не СтрокаПерехода.ДлительнаяОперация Тогда + Если СтрокиПерехода.Количество() > 0 Тогда - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); + СтрокаПерехода = СтрокиПерехода[0]; - Отказ = Ложь; - - А = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда + // обработчик ПриПереходеДалее + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); - Возврат; + Отказ = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; КонецЕсли; @@ -199,28 +222,28 @@ СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); - Если СтрокиПерехода.Количество() = 0 Тогда - Возврат; - КонецЕсли; - - СтрокаПерехода = СтрокиПерехода[0]; - - // обработчик ПриПереходеНазад - Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) - И Не СтрокаПерехода.ДлительнаяОперация Тогда + Если СтрокиПерехода.Количество() > 0 Тогда - ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; - ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + СтрокаПерехода = СтрокиПерехода[0]; - Отказ = Ложь; - - А = Вычислить(ИмяПроцедуры); - - Если Отказ Тогда + // обработчик ПриПереходеНазад + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда - УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); - Возврат; + Отказ = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; КонецЕсли; @@ -414,7 +437,7 @@ ДлительнаяОперацияЗавершенаСОшибкой = Ложь; СообщениеОбОшибке = ""; - СостояниеОперации = ОбменДаннымиСервер.СостояниеДлительнойОперации(ИдентификаторДлительнойОперации, + СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеДлительнойОперации(ИдентификаторДлительнойОперации, WSURLВебСервиса, WSИмяПользователя, WSПароль, @@ -519,6 +542,94 @@ // Обмен через Веб-сервис +&НаКлиенте +Функция Подключаемый_ЗапросПароляПользователя_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Элементы.ВыполнитьОбмен.КнопкаПоУмолчанию = Истина; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ЗапросПароляПользователя_ПриПереходеДалее(Отказ) + + Если ПустаяСтрока(WSПароль) Тогда + + НСтрока = НСтр("ru = 'Не указан пароль.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "WSПароль",, Отказ); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ПроверитьПодключениеИСохранитьНастройки(Отказ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Не удалось выполнить операцию.'")); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ОжиданиеПроверкиПодключенияПарольЗадан_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ПроверитьПодключение(); + +КонецФункции + +&НаСервере +Процедура ПроверитьПодключениеИСохранитьНастройки(Отказ) + + ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтаФорма); + + СообщениеПользователю = ""; + Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(УзелИнформационнойБазы, ПараметрыПодключения, СообщениеПользователю) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,,,, Отказ); + Возврат; + КонецЕсли; + + Если WSЗапомнитьПароль Тогда + + Попытка + + УстановитьПривилегированныйРежим(Истина); + + // обновляем запись в РС + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); + СтруктураЗаписи.Вставить("WSПароль", WSПароль); + РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,,, Отказ); + Возврат; + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПодключение() + + ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтаФорма); + + Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(УзелИнформационнойБазы, ПараметрыПодключения, СообщениеОбОшибкеПользователю) Тогда + СинхронизацияДанныхОтключена = Истина; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Функция Подключаемый_ЗагрузкаДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) @@ -527,14 +638,19 @@ ИдентификаторФайлаСообщенияВСервисе = ""; ИдентификаторДлительнойОперации = ""; - ЗагрузкаДанных_ОбработкаДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ДлительнаяОперация, - ИдентификаторДлительнойОперации, - ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации - ); + Если Не СинхронизацияДанныхОтключена Тогда + + ЗагрузкаДанных_ОбработкаДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторДлительнойОперации, + ИдентификаторФайлаСообщенияВСервисе, + ДатаНачалаОперации, + WSПароль + ); + + КонецЕсли; ЕстьОшибки = ЕстьОшибки ИЛИ Отказ; @@ -549,7 +665,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - ДатаНачалаОперации + ДатаНачалаОперации, + Пароль ) ДатаНачалаОперации = ТекущаяДатаСеанса(); @@ -564,7 +681,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - Истина + Истина, + Пароль ); КонецПроцедуры @@ -589,7 +707,7 @@ Если ДлительнаяОперацияЗавершенаСОшибкой Тогда - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой( + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( УзелИнформационнойБазы, "ЗагрузкаДанных", ДатаНачалаОперации, @@ -598,11 +716,12 @@ Иначе - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + ОбменДаннымиВызовСервера.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( Ложь, УзелИнформационнойБазы, ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации + ДатаНачалаОперации, + WSПароль ); КонецЕсли; @@ -619,14 +738,19 @@ ИдентификаторФайлаСообщенияВСервисе = ""; ИдентификаторДлительнойОперации = ""; - ВыгрузкаДанных_ОбработкаДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ДлительнаяОперация, - ИдентификаторДлительнойОперации, - ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации - ); + Если Не СинхронизацияДанныхОтключена Тогда + + ВыгрузкаДанных_ОбработкаДлительнойОперации( + Отказ, + УзелИнформационнойБазы, + ДлительнаяОперация, + ИдентификаторДлительнойОперации, + ИдентификаторФайлаСообщенияВСервисе, + ДатаНачалаОперации, + WSПароль + ); + + КонецЕсли; ЕстьОшибки = ЕстьОшибки ИЛИ Отказ; @@ -641,7 +765,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - ДатаНачалаОперации + ДатаНачалаОперации, + Пароль ) ДатаНачалаОперации = ТекущаяДатаСеанса(); @@ -656,7 +781,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - Истина + Истина, + Пароль ); КонецПроцедуры @@ -681,7 +807,7 @@ Если ДлительнаяОперацияЗавершенаСОшибкой Тогда - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой( + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( УзелИнформационнойБазы, "ВыгрузкаДанных", ДатаНачалаОперации, @@ -690,7 +816,7 @@ Иначе - ОбменДаннымиСервер.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации( + ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации( УзелИнформационнойБазы, ДатаНачалаОперации ); @@ -706,15 +832,35 @@ &НаКлиенте Функция Подключаемый_ЗавершениеОбмена_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + Элементы.ПанельДействий.ТекущаяСтраница = Элементы.ДействияЗакрыть; + Элементы.ФормаЗакрыть.КнопкаПоУмолчанию = Истина; + СтраницаОбменЗавершенСОшибкой = ?(РольДоступнаДобавлениеИзменениеОбменовДанными, Элементы.ОбменЗавершенСОшибкойДляАдминистратора, Элементы.ОбменЗавершенСОшибкой ); - Элементы.СтатусЗавершенияОбмена.ТекущаяСтраница = ?(ЕстьОшибки, - СтраницаОбменЗавершенСОшибкой, - Элементы.ОбменЗавершенУспешно - ); + Если СинхронизацияДанныхОтключена Тогда + + Элементы.СтатусЗавершенияОбмена.ТекущаяСтраница = Элементы.ОбменЗавершенСОшибкойПодключения; + + ИначеЕсли ЕстьОшибки Тогда + + Если ТребуетсяОбновление Или ОбменДаннымиВызовСервера.ТребуетсяУстановкаОбновления() Тогда + Если РольДоступнаПолныеПрава Тогда + Элементы.ПанельДействий.ТекущаяСтраница = Элементы.ДействияУстановитьЗакрыть; + Элементы.УстановитьОбновление.КнопкаПоУмолчанию = Истина; + КонецЕсли; + Элементы.СтатусЗавершенияОбмена.ТекущаяСтраница = Элементы.ТребуетсяОбновление; + Иначе + Элементы.СтатусЗавершенияОбмена.ТекущаяСтраница = СтраницаОбменЗавершенСОшибкой; + КонецЕсли; + + Иначе + + Элементы.СтатусЗавершенияОбмена.ТекущаяСтраница = Элементы.ОбменЗавершенУспешно; + + КонецЕсли; // Обновляем все открытые динамические списки ОбменДаннымиКлиент.ОбновитьВсеОткрытыеДинамическиеСписки(); @@ -725,12 +871,22 @@ Функция Подключаемый_ЗавершениеОбмена_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) ПерейтиДалее = Ложь; - ВыполняетсяОбменДанными = Ложь; Оповестить("ВыполненОбменДанными"); КонецФункции +&НаКлиенте +Функция Подключаемый_НачалоВыполненияОбмена_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + Если ЭтоПереходДалее Тогда + + ПропуститьСтраницу = Истина; + + КонецЕсли; + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // РАЗДЕЛ ИНИЦИАЛИЗАЦИИ ПЕРЕХОДОВ @@ -750,12 +906,39 @@ ТаблицаПереходов.Очистить(); - ТаблицаПереходовНоваяСтрока(1, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(2, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(3, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(4, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанных_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(5, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(6, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); - ТаблицаПереходовНоваяСтрока(7, "ЗавершениеОбмена",,, "ЗавершениеОбмена_ПриОткрытии",,, Истина, "ЗавершениеОбмена_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(1, "ОжиданиеПроверкиПодключенияПарольЗадан",,,,,, Истина, "ОжиданиеПроверкиПодключенияПарольЗадан_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(2, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(6, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "ЗавершениеОбмена",,, "ЗавершениеОбмена_ПриОткрытии",,, Истина, "ЗавершениеОбмена_ОбработкаДлительнойОперации"); + +КонецПроцедуры + +&НаСервере +Процедура СценарийОбменаЧерезВебСервисСЗапросомПароля() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "ЗапросПароляПользователя",,, "ЗапросПароляПользователя_ПриОткрытии", "ЗапросПароляПользователя_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(2, "ОжиданиеПроверкиПодключения",,,,,, Истина, "ОжиданиеПроверкиПодключения_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "ЗагрузкаДанных",,,,,, Истина, "ЗагрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(6, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "ВыгрузкаДанных",,,,,, Истина, "ВыгрузкаДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(9, "ЗавершениеОбмена",,, "ЗавершениеОбмена_ПриОткрытии",,, Истина, "ЗавершениеОбмена_ОбработкаДлительнойОперации"); + +КонецПроцедуры + +&НаСервере +Процедура СценарийКогдаЕстьОшибкиПриНачалеРаботы() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "ЗавершениеОбмена",,, "ЗавершениеОбмена_ПриОткрытии"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo new file mode 100644 index 000000000..000a1ca94 --- /dev/null +++ b/SSL/src/DataProcessors/ВыполнениеОбменаДанными/ВыполнениеОбменаДанными.mdo @@ -0,0 +1,23 @@ + + + + + + + ВыполнениеОбменаДанными + + ru + Выполнение обмена данными + + true + DataProcessor.ВыполнениеОбменаДанными.Form.Форма + + Форма + + ru + Форма + + PersonalComputer + MobileDevice + + diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Help/ru.html index 965b2e933..9657af29a 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Help/ru.html +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Настройка/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form index 98eff4f88..fa5f99ed5 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Form.form @@ -1428,6 +1428,28 @@ Объект.ПрерыватьПриОшибке
                  true
                  + + + Объект.Операции + + + ОписаниеТипов + + <key>ru</key> + <value>Описание типов</value> + + 1 + + TypeDescription + + + true + + + true + + + ИзменяемыеОбъекты @@ -1857,6 +1879,23 @@ true + + ВыполняетсяОбработка + + <key>ru</key> + <value>Выполняется обработка</value> + + 21 + + Boolean + + + true + + + true + + Назад @@ -1927,7 +1966,7 @@ <name>РазрешитьРедактированиеРеквизитов</name> <title> <key>ru</key> - <value>Разрешить редактирование реквизитов</value> + <value>Разрешить редактирование реквизитов...</value> 4 @@ -1985,7 +2024,7 @@ НастроитьПараметрыИзменения <key>ru</key> - <value>Настроить параметры изменения</value> + <value>Настроить параметры изменения...</value> 6 @@ -2012,7 +2051,7 @@ 7 ru - История операций + Устанавливает ранее использованные настройки изменения реквизитов true diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl index 632f99da2..1df53f806 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Forms/Форма/Module.bsl @@ -178,8 +178,8 @@ &НаКлиенте Процедура Изменить(Команда) - Если Элементы.ФормаИзменить.Заголовок = НСтр("ru = 'Изменить'") Тогда - + Если Не ВыполняетсяОбработка Тогда + Если Объект.Операции.НайтиСтроки(Новый Структура("Изменять", Истина)).Количество() = 0 Тогда ТекстВопроса = НСтр("ru = 'Не задано ни одного изменения. Выполнить перезапись данных без изменений?'"); @@ -193,15 +193,12 @@ КонецЕсли; УстановитьКнопкиНаВремяИзменения(Истина); - ПерейтиНаСтраницуИзмененияОбъектов(); - ПодключитьОбработчикОжидания("ИзменитьОбъекты", 0.1, Истина); ИначеЕсли ТекущееСостояниеИзменения <> Неопределено Тогда Если Не РезультатФоновогоЗадания.ЗаданиеВыполнено Тогда - ДлительныеОперации.ОтменитьВыполнениеЗадания(РезультатФоновогоЗадания.ИдентификаторЗадания); ОтключитьОбработчикОжидания("ПроверитьВыполнениеИзменения"); ЗавершитьИзменениеОбъектов(); Иначе @@ -485,18 +482,7 @@ Процедура УстановитьОграниченияВыбираемыхТиповИПараметрыВыбора(Элемент) Поле = Элемент.ПодчиненныеЭлементы.ТаблицаОперацийЗначение; - - ДопустимыеТипыСтрока = Элемент.ТекущиеДанные.ДопустимыеТипы; - - ДопустимыеТипыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДопустимыеТипыСтрока, ";"); - - МассивТипов = Новый Массив; - - Для Каждого ТипСтрока Из ДопустимыеТипыМассив Цикл - МассивТипов.Добавить(Тип(ТипСтрока)); - КонецЦикла; - - Поле.ОграничениеТипа = Новый ОписаниеТипов(МассивТипов); + Поле.ОграничениеТипа = Элемент.ТекущиеДанные.ОписаниеТипов; ПараметрыВыбораМассив = Новый Массив; @@ -669,6 +655,10 @@ ЗначениеВРеквизитФормы(ОбъектОбработка, "Объект"); + Для Каждого Операция Из Объект.Операции Цикл + Операция.ОписаниеТипов = XMLЗначение(Тип("ХранилищеЗначения"), Операция.ДопустимыеТипы).Получить(); + КонецЦикла; + УстановитьСостояниеЭлементовФормы(Элементы, Объект.ОбъектыДляИзменения.Количество()); КонецПроцедуры @@ -746,6 +736,8 @@ &НаКлиенте Процедура УстановитьКнопкиНаВремяИзменения(НачалоИзменения) + ВыполняетсяОбработка = НачалоИзменения; + Элементы.ФормаНазад.Доступность = НЕ НачалоИзменения; Элементы.ФормаОтмена.Доступность = НЕ НачалоИзменения; @@ -881,7 +873,7 @@ ЗаданиеВыполнено = Ложь; Попытка - ЗаданиеВыполнено = ДлительныеОперации.ЗаданиеВыполнено(РезультатФоновогоЗадания.ИдентификаторЗадания); + ЗаданиеВыполнено = ЗаданиеВыполнено(РезультатФоновогоЗадания.ИдентификаторЗадания); Исключение ПерейтиНаСтраницуИзмененияОбъектов(); ВызватьИсключение; @@ -987,9 +979,7 @@ ЗавершающиеДействияПриИзмененииСервер(); УстановитьКнопкиНаВремяИзменения(Ложь); - ОповеститьОбИзменении(ТипЗнч(Параметры.МассивОбъектов[0])); - ТекущееСостояниеИзменения = Неопределено; КонецПроцедуры @@ -997,6 +987,10 @@ &НаСервере Процедура ЗавершающиеДействияПриИзмененииСервер() + Если РезультатФоновогоЗадания.Свойство("ИдентификаторЗадания") Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(РезультатФоновогоЗадания.ИдентификаторЗадания); + КонецЕсли; + Если ТекущееСостояниеИзменения.КоличествоОшибок > 0 Тогда Элементы.СтраницыПодсказокИзмененияОбъектов.ТекущаяСтраница = @@ -1481,15 +1475,8 @@ Если ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениРеквизита()) Тогда Операция = Объект.Операции.НайтиСтроки(Новый Структура("ИмяРеквизита", СтрокаБезПрефикса(ИмяРеквизита, ПрефиксИмениРеквизита())))[0]; - ДопустимыеТипыМассив = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Операция.ДопустимыеТипы, ";"); - ТипыМассив = Новый Массив; - - Для Каждого ДопустимыйТипСтрока Из ДопустимыеТипыМассив Цикл - ТипыМассив.Добавить(Тип(ДопустимыйТипСтрока)); - КонецЦикла; - - ОписаниеТипов = Новый ОписаниеТипов(ТипыМассив); + ОписаниеТипов = Операция.ОписаниеТипов; ИначеЕсли ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениДопРеквизита()) ИЛИ ИмеетПрефикс(ИмяРеквизита, ПрефиксИмениДопСведения()) Тогда @@ -1650,3 +1637,10 @@ // числу объектов КонецФункции + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html index 33c0d13fb..96187762e 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                  diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl index 76f82f50a..fdd285505 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -362,3 +364,5 @@ Возврат Ложь; КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl index ce6eafd8e..5efe5c3a2 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // Описание обработки // Табличная часть Операции - содержит набор информации, описывающей изменения. @@ -222,21 +224,9 @@ Для Каждого СтрокаТаблицы Из ТаблицаДопСвойств Цикл НоваяОперация = Операции.Добавить(); НоваяОперация.ВидОперации = ?(ЭтоДопРеквизит, 2, 3); - НоваяОперация.Свойство = СтрокаТаблицы.Свойство; НоваяОперация.Представление = СтрокаТаблицы.Наименование; - - ДопустимыеТипыСтрока = ""; - - Для Каждого Тип Из СтрокаТаблицы.ТипЗначения.Типы() Цикл - ПредставлениеТипа = ОбщегоНазначения.СтроковоеПредставлениеТипа(Тип); - ДопустимыеТипыСтрока = ПредставлениеТипа + ";" + ДопустимыеТипыСтрока; - КонецЦикла; - - ДопустимыеТипыСтрока = Лев(ДопустимыеТипыСтрока, СтрДлина(ДопустимыеТипыСтрока)-1); - - НоваяОперация.ДопустимыеТипы = ДопустимыеТипыСтрока; - + НоваяОперация.ДопустимыеТипы = XMLСтрока(Новый ХранилищеЗначения(СтрокаТаблицы.ТипЗначения)); КонецЦикла; КонецПроцедуры @@ -328,20 +318,7 @@ КонецЕсли; КонецЕсли; - // собираем типы реквизита - ДопустимыеТипыСтрока = ""; - - Для Каждого Тип Из ОписаниеРеквизита.Тип.Типы() Цикл - ПредставлениеТипа = ОбщегоНазначения.СтроковоеПредставлениеТипа(Тип); - ДопустимыеТипыСтрока = ПредставлениеТипа + ";" + ДопустимыеТипыСтрока; - КонецЦикла; - - ДопустимыеТипыСтрока = Лев(ДопустимыеТипыСтрока, СтрДлина(ДопустимыеТипыСтрока)-1); - - // если нет доступных типов для изменения - реквизит не попадает в итоговый набор - Если ПустаяСтрока(ДопустимыеТипыСтрока) Тогда - Продолжить; - КонецЕсли; + ДопустимыеТипыСтрока = XMLСтрока(Новый ХранилищеЗначения(ОписаниеРеквизита.Тип)); ПараметрыВыбораСтрока = ""; @@ -452,3 +429,5 @@ ?(Метаданные.НайтиПоПолномуИмени("ОбщийМодуль.УправлениеСвойствами") = Неопределено, Неопределено, Вычислить("УправлениеСвойствами")); + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo index 95c0a7ae1..67ce58912 100644 --- a/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo +++ b/SSL/src/DataProcessors/ГрупповоеИзменениеОбъектов/ГрупповоеИзменениеОбъектов.mdo @@ -167,14 +167,13 @@ Number AnyRef - 10 + 30 + 10 1024 - - Date - + diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form index 7c721c7c6..9622f3cf4 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Form.form @@ -32,7 +32,7 @@ КоличествоПоказываемыхСобытийРасширеннаяПодсказка - 134 + 136 Label true true @@ -122,7 +122,7 @@ ПредставлениеОтбораРасширеннаяПодсказка - 136 + 138 Label true true @@ -161,7 +161,7 @@
                  ГруппаОтбораРасширеннаяПодсказка - 133 + 135 Label true true @@ -225,7 +225,7 @@ ДатаРасширеннаяПодсказка - 155 + 157 Label true true @@ -255,6 +255,47 @@ Normal + + ПредставлениеРазделенияДанныхСеанса + 119 + true + true + + true + + + Журнал.ПредставлениеРазделенияДанныхСеанса + + + ПредставлениеРазделенияДанныхСеансаРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + + ПредставлениеРазделенияДанныхСеансаКонтекстноеМеню + 120 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + ГруппаПользовательКомпьютерПриложение 53 @@ -275,7 +316,7 @@ ИмяПользователяРасширеннаяПодсказка - 158 + 162 Label true true @@ -322,7 +363,7 @@ КомпьютерРасширеннаяПодсказка - 160 + 164 Label true true @@ -372,7 +413,7 @@ ПредставлениеПриложенияРасширеннаяПодсказка - 163 + 167 Label true true @@ -415,7 +456,7 @@ СеансРасширеннаяПодсказка - 165 + 169 Label true true @@ -452,7 +493,7 @@ ГруппаПриложениеРасширеннаяПодсказка - 162 + 166 Label true true @@ -473,7 +514,7 @@ ГруппаПользовательКомпьютерПриложениеРасширеннаяПодсказка - 157 + 161 Label true true @@ -504,7 +545,7 @@ РабочийСерверРасширеннаяПодсказка - 168 + 172 Label true true @@ -547,7 +588,7 @@ ОсновнойIPПортРасширеннаяПодсказка - 170 + 174 Label true true @@ -594,7 +635,7 @@
                  ВспомогательныйIPПортРасширеннаяПодсказка - 172 + 176 Label true true @@ -637,7 +678,7 @@ ГруппаСерверРасширеннаяПодсказка - 167 + 171 Label true true @@ -672,7 +713,7 @@ ПредставлениеСобытияРасширеннаяПодсказка - 175 + 179 Label true true @@ -719,7 +760,7 @@ КомментарийРасширеннаяПодсказка - 177 + 181 Label true true @@ -756,7 +797,7 @@ ГруппаСобытиеРасширеннаяПодсказка - 174 + 178 Label true true @@ -791,7 +832,7 @@ СтатусТранзакцииРасширеннаяПодсказка - 180 + 184 Label true true @@ -834,7 +875,7 @@ ТранзакцияРасширеннаяПодсказка - 182 + 186 Label true true @@ -871,7 +912,7 @@ ГруппаТранзакцияРасширеннаяПодсказка - 179 + 183 Label true true @@ -906,7 +947,7 @@ ПредставлениеМетаданныхРасширеннаяПодсказка - 185 + 189 Label true true @@ -949,7 +990,7 @@ ДанныеРасширеннаяПодсказка - 187 + 191 Label true true @@ -992,7 +1033,7 @@ ПредставлениеДанныхРасширеннаяПодсказка - 189 + 193 Label true true @@ -1022,7 +1063,7 @@ ГруппаДанныеРасширеннаяПодсказка - 184 + 188 Label true true @@ -1049,10 +1090,10 @@ ЖурналСтрокаПоиска - 146 + 148 ЖурналСтрокаПоискаРасширеннаяПодсказка - 148 + 150 Label true true @@ -1062,7 +1103,7 @@ ЖурналСтрокаПоискаКонтекстноеМеню - 147 + 149 true Журнал @@ -1072,10 +1113,10 @@ ЖурналСостояниеПросмотра - 149 + 151 ЖурналСостояниеПросмотраРасширеннаяПодсказка - 151 + 153 Label true true @@ -1085,7 +1126,7 @@ ЖурналСостояниеПросмотраКонтекстноеМеню - 150 + 152 true ViewStatusAddition @@ -1096,10 +1137,10 @@ ЖурналУправлениеПоиском - 152 + 154 ЖурналУправлениеПоискомРасширеннаяПодсказка - 154 + 156 Label true true @@ -1109,7 +1150,7 @@ ЖурналУправлениеПоискомКонтекстноеМеню - 153 + 155 true SearchControlAddition @@ -1120,7 +1161,7 @@ ЖурналРасширеннаяПодсказка - 145 + 147 Label true true @@ -1145,7 +1186,7 @@ false УстановитьОтборПоЗначениюВТекущейКолонкеКонтекстРасширеннаяПодсказка - 141 + 143 Label true true @@ -1180,7 +1221,7 @@ ЖурналКонтекстноеМенюОтключитьОтборРасширеннаяПодсказка - 142 + 144 Label true true @@ -1211,7 +1252,7 @@ ОтборГруппаКонтекстРасширеннаяПодсказка - 140 + 142 Label true true @@ -1232,7 +1273,7 @@ false ПросмотрТекущегоСобытияВОтдельномОкнеКонтекстРасширеннаяПодсказка - 143 + 145 Label true true @@ -1268,7 +1309,7 @@ false ОткрытьДанныеДляПросмотраКонтекстРасширеннаяПодсказка - 144 + 146 Label true true @@ -1342,7 +1383,7 @@ ЖурналРегистрацииРасширеннаяПодсказка - 139 + 141 Label true true @@ -1373,7 +1414,7 @@ None ПолеИндикаторДлительныхОперацийРасширеннаяПодсказка - 200 + 204 Label true true @@ -1423,7 +1464,7 @@ ИндикаторДлительныхОперацийРасширеннаяПодсказка - 199 + 203 Label true true @@ -1452,7 +1493,7 @@ СтраницыРасширеннаяПодсказка - 138 + 140 Label true true @@ -1483,7 +1524,7 @@ УстановитьИнтервалДатДляПросмотраРасширеннаяПодсказка - 120 + 122 Label true true @@ -1510,7 +1551,7 @@ false УстановитьОтборРасширеннаяПодсказка - 121 + 123 Label true true @@ -1546,7 +1587,7 @@ false УстановитьОтборПоЗначениюВТекущейКолонкеРасширеннаяПодсказка - 122 + 124 Label true true @@ -1582,7 +1623,7 @@ false ОтключитьОтборРасширеннаяПодсказка - 123 + 125 Label true true @@ -1622,7 +1663,7 @@ КомандыОтбораРасширеннаяПодсказка - 119 + 121 Label true true @@ -1643,7 +1684,7 @@ false ПросмотрТекущегоСобытияВОтдельномОкнеРасширеннаяПодсказка - 124 + 126 Label true true @@ -1679,7 +1720,7 @@ false ОткрытьДанныеДляПросмотраРасширеннаяПодсказка - 125 + 127 Label true true @@ -1718,7 +1759,7 @@ false ОбновитьТекущийСписокРасширеннаяПодсказка - 127 + 129 Label true true @@ -1758,7 +1799,7 @@ КомандаОбновитьРасширеннаяПодсказка - 126 + 128 Label true true @@ -1781,7 +1822,7 @@ ФормаНайтиРасширеннаяПодсказка - 129 + 131 Label true true @@ -1807,7 +1848,7 @@ ФормаОтменитьПоискРасширеннаяПодсказка - 130 + 132 Label true true @@ -1838,7 +1879,7 @@ КомандыПоискаРасширеннаяПодсказка - 128 + 130 Label true true @@ -1859,7 +1900,7 @@ false ИзменитьФормуРасширеннаяПодсказка - 131 + 133 Label true true @@ -1887,7 +1928,7 @@ false ВывестиСписокРасширеннаяПодсказка - 132 + 134 Label true true @@ -1919,6 +1960,10 @@ ChoiceProcessing ОбработкаВыбора + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -2419,6 +2464,23 @@ true + + ПредставлениеРазделенияДанныхСеанса + + <key>ru</key> + <value>Разделение данных сеанса</value> + + 24 + + ValueList + + + true + + + true + + ОтборЖурналаРегистрации @@ -2545,6 +2607,21 @@ true + + ОтборЖурналаРегистрацииПоУмолчанию + + <key>ru</key> + <value>Отбор журнала регистрации по умолчанию</value> + + 11 + + + true + + + true + + ПросмотрТекущегоСобытияВОтдельномОкне diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl index 6bced716a..c2ae81c6b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ЖурналРегистрации/Module.bsl @@ -9,6 +9,7 @@ КонецЕсли; ОтборЖурналаРегистрации = Новый Структура; + ОтборЖурналаРегистрацииПоУмолчанию = Новый Структура; Если Не ПустаяСтрока(Параметры.Пользователь) Тогда @@ -55,10 +56,19 @@ КоличествоПоказываемыхСобытий = 200; - ПрочитатьЖурналПриСозданииНаСервере(); + ОтборПоУмолчанию = ОтборПоУмолчанию(); + ОтборЖурналаРегистрации.Вставить("Событие", ОтборПоУмолчанию); + ОтборЖурналаРегистрацииПоУмолчанию.Вставить("Событие", ОтборПоУмолчанию); + Элементы.ПредставлениеРазделенияДанныхСеанса.Видимость = Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ОбновитьТекущийСписок(); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -66,11 +76,14 @@ &НаКлиенте Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент) +#Если ВебКлиент Тогда + КоличествоПоказываемыхСобытий = ?(КоличествоПоказываемыхСобытий > 1000, 1000, КоличествоПоказываемыхСобытий); +#КонецЕсли + ОбновитьТекущийСписок(); КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "Журнал" @@ -105,12 +118,11 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ &НаКлиенте -Процедура ОбновитьТекущийСписок() +Процедура ОбновитьТекущийСписок() Элементы.Страницы.ТекущаяСтраница = Элементы.ИндикаторДлительныхОпераций; @@ -118,7 +130,7 @@ ПараметрыОбработчикаОжидания = Новый Структура; - Если Не РезультатВыполнения.ЗаданиеВыполнено Тогда + Если Не РезультатВыполнения.ЗаданиеВыполнено Тогда ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "ФормированиеОтчета"); @@ -132,7 +144,7 @@ &НаКлиенте Процедура ОтключитьОтбор() - ОтборЖурналаРегистрации = Новый ФиксированнаяСтруктура; + ОтборЖурналаРегистрации = ОтборЖурналаРегистрацииПоУмолчанию; ОбновитьТекущийСписок(); КонецПроцедуры @@ -175,7 +187,7 @@ ОткрытьФорму( "Обработка.ЖурналРегистрации.Форма.ОтборЖурналаРегистрации", - Новый Структура("Отбор", ОтборФормы), + Новый Структура("Отбор, СобытияПоУмолчанию", ОтборФормы, ОтборЖурналаРегистрацииПоУмолчанию.Событие), ЭтаФорма ); @@ -204,6 +216,27 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Функция ОтборПоУмолчанию() + + ОтборПоУмолчанию = Новый СписокЗначений; + СписокСобытий = ПолучитьЗначенияОтбораЖурналаРегистрации("Событие").Событие; + + Для Каждого СобытиеЖурнала Из СписокСобытий Цикл + + Если СобытиеЖурнала.Ключ = "_$Transaction$_.Commit" + Или СобытиеЖурнала.Ключ = "_$Transaction$_.Begin" + Или СобытиеЖурнала.Ключ = "_$Transaction$_.Rollback" Тогда + Продолжить; + КонецЕсли; + + ОтборПоУмолчанию.Добавить(СобытиеЖурнала.Ключ, СобытиеЖурнала.Значение); + + КонецЦикла; + + Возврат ОтборПоУмолчанию; +КонецФункции + &НаСервере Функция ПрочитатьЖурнал() @@ -243,23 +276,12 @@ ЗагрузитьПодготовленныеДанные(); КонецЕсли; - ЖурналРегистрации.СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаРегистрации); + ЖурналРегистрации.СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаРегистрации, ОтборЖурналаРегистрацииПоУмолчанию); Возврат РезультатВыполнения; КонецФункции -&НаСервере -Процедура ПрочитатьЖурналПриСозданииНаСервере() - Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; - ПараметрыОтчета = ПараметрыОтчета(); - АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); - - ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища); - ЗагрузитьПодготовленныеДанные(); - ЖурналРегистрации.СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаРегистрации); -КонецПроцедуры - &НаСервере Функция ПараметрыОтчета() ПараметрыОтчета = Новый Структура; @@ -269,7 +291,7 @@ ПараметрыОтчета.Вставить("МенеджерВладельца", Обработки.ЖурналРегистрации); ПараметрыОтчета.Вставить("ДобавлятьДополнительныеКолонки", Ложь); ПараметрыОтчета.Вставить("Журнал", РеквизитФормыВЗначение("Журнал")); - + Возврат ПараметрыОтчета; КонецФункции @@ -293,7 +315,7 @@ Процедура Подключаемый_ПроверитьВыполнениеЗадания() Попытка - Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда ЗагрузитьПодготовленныеДанные(); ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; @@ -312,3 +334,10 @@ ВызватьИсключение; КонецПопытки; КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form index 94e12f9bc..fa29c43cf 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Form.form @@ -878,7 +878,7 @@ <common>true</common> </userVisible> <dataPath xsi:type="form:DataPath"> - <segments>События</segments> + <segments>СобытияОтображаемые</segments> </dataPath> <titleLocation>None</titleLocation> <extendedTooltip> @@ -906,6 +906,10 @@ <event>StartChoice</event> <name>ИсполнениеВыбора</name> </handlers> + <handlers> + <event>Clearing</event> + <name>СобытияОчистка</name> + </handlers> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> <chooseType>true</chooseType> @@ -2270,6 +2274,46 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>СобытияОтображаемые</name> + <title> + <key>ru</key> + <value>События отображаемые</value> + + 21 + + ValueList + + + true + + + true + + + + + + + СобытияПоУмолчанию + + <key>ru</key> + <value>События по умолчанию</value> + + 23 + + ValueList + + + true + + + true + + + + + УстановитьОтборИЗакрытьФорму @@ -2298,6 +2342,12 @@ <types>ValueList</types> </valueType> </parameters> + <parameters> + <name>СобытияПоУмолчанию</name> + <valueType> + <types>ValueList</types> + </valueType> + </parameters> <commandInterface> <navigationPanel/> <commandBar/> diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl index d7f73a748..78e0e7a68 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ОтборЖурналаРегистрации/Module.bsl @@ -11,6 +11,11 @@ ЗаполнитьВажностьИСтатус(); ЗаполнитьПараметрыОтбора(); + СобытияПоУмолчанию = Параметры.СобытияПоУмолчанию; + Если Не ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СобытияПоУмолчанию, События) Тогда + СобытияОтображаемые = События; + КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -39,6 +44,17 @@ КонецЕсли; КонецЕсли; + СобытияОтображаемые.Очистить(); + + Если События.Количество() = 0 Тогда + События = СобытияПоУмолчанию; + Возврат; + КонецЕсли; + + Если Не ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(СобытияПоУмолчанию, События) Тогда + СобытияОтображаемые = События; + КонецЕсли; + КонецПроцедуры @@ -95,6 +111,13 @@ КонецПроцедуры +&НаКлиенте +Процедура СобытияОчистка(Элемент, СтандартнаяОбработка) + + События = СобытияПоУмолчанию; + +КонецПроцедуры + &НаКлиенте Процедура ИнтервалОтбораПриИзменении(Элемент) diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form index 457329e30..7d470e3d1 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Form.form @@ -190,7 +190,7 @@ </borderColor> <representationInContextMenu>Auto</representationInContextMenu> </items> - <horizontalAlign>Right</horizontalAlign> + <horizontalAlign>Left</horizontalAlign> </autoCommandBar> <searchStringAddition> <name>СписокСтрокаПоиска</name> @@ -519,6 +519,24 @@ <common>true</common> </edit> </columns> + <columns> + <name>ПолноеПредставление</name> + <title> + <key>ru</key> + <value>Полное представление</value> + + 4 + + String + + + + true + + + true + + РедактируемыйСписок @@ -558,6 +576,61 @@ true + + ПользовательскиеСобытия + + <key>ru</key> + <value>Пользовательские события</value> + + 5 + + ValueList + + + true + + + true + + + + + + + ПредставленияСобытий + + <key>ru</key> + <value>Представления событий</value> + + 6 + + ValueTable + + + true + + + true + + + Представление + + <key>ru</key> + <value>Представление</value> + + 1 + + String + + + + true + + + true + + + УстановитьВсе diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl index a4d0911bd..5718cf9fd 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/РедакторСоставаСвойства/Module.bsl @@ -61,6 +61,15 @@ Процедура УстановитьПараметрыРедактора(РедактируемыйСписок, ОтбираемыеПараметры) СтруктураПараметровОтбора = ПолучитьЗначенияОтбораЖурналаРегистрацииПоКолонке(ОтбираемыеПараметры); ЗначенияОтбора = СтруктураПараметровОтбора[ОтбираемыеПараметры]; + // Получение списка представлений событий + Если ОтбираемыеПараметры = "Событие" Или ОтбираемыеПараметры = "Event" Тогда + + Для Каждого ЭлементСоответствия Из ЗначенияОтбора Цикл + СтрокаПредставленияСобытий = ПредставленияСобытий.Добавить(); + СтрокаПредставленияСобытий.Представление = ЭлементСоответствия.Значение; + КонецЦикла; + + КонецЕсли; Если ТипЗнч(ЗначенияОтбора) = Тип("Массив") Тогда ЭлементыСписка = Список.ПолучитьЭлементы(); @@ -71,14 +80,25 @@ НовыйЭлемент.Представление = ЭлементМассива; КонецЦикла; ИначеЕсли ТипЗнч(ЗначенияОтбора) = Тип("Соответствие") Тогда + Если ОтбираемыеПараметры = "Событие" Или ОтбираемыеПараметры = "Event" Или ОтбираемыеПараметры = "Метаданные" Или ОтбираемыеПараметры = "Metadata" Тогда // Грузим как дерево Для Каждого ЭлементСоответствия Из ЗначенияОтбора Цикл + ПараметрыОтбораСобытий = Новый Структура("Представление", ЭлементСоответствия.Значение); + + Если ЭлементСоответствия.Ключ = ЭлементСоответствия.Значение + И ПредставленияСобытий.НайтиСтроки(ПараметрыОтбораСобытий).Количество() > 1 Тогда + ПользовательскиеСобытия.Добавить(ЭлементСоответствия.Ключ, ЭлементСоответствия.Значение); + Продолжить; + КонецЕсли; + НовыйЭлемент = ПолучитьВетвьДерева(ЭлементСоответствия.Значение); НовыйЭлемент.Пометка = Ложь; НовыйЭлемент.Значение = ЭлементСоответствия.Ключ; + НовыйЭлемент.ПолноеПредставление = ЭлементСоответствия.Значение; КонецЦикла; + Иначе // Грузим плоским списком ЭлементыСписка = Список.ПолучитьЭлементы(); @@ -86,20 +106,29 @@ НовыйЭлемент = ЭлементыСписка.Добавить(); НовыйЭлемент.Пометка = Ложь; НовыйЭлемент.Значение = ЭлементСоответствия.Ключ; + Если (ОтбираемыеПараметры = "Пользователь" Или ОтбираемыеПараметры = "User") Тогда // Для пользователей ключем служит имя НовыйЭлемент.Значение = ЭлементСоответствия.Значение; НовыйЭлемент.Представление = ЭлементСоответствия.Значение; + НовыйЭлемент.ПолноеПредставление = ЭлементСоответствия.Значение; + Если НовыйЭлемент.Значение = "" Тогда // Случай для пользователя по умолчанию НовыйЭлемент.Значение = ""; - НовыйЭлемент.Представление = Пользователи.ПолноеИмяНеУказанногоПользователя(); + НовыйЭлемент.ПолноеПредставление = ПолноеИмяНеУказанногоПользователя(); + НовыйЭлемент.Представление = ПолноеИмяНеУказанногоПользователя(); КонецЕсли; + Иначе НовыйЭлемент.Представление = ЭлементСоответствия.Значение; + НовыйЭлемент.ПолноеПредставление = ЭлементСоответствия.Значение; КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЕсли; // Помечаем элементы дерева, если им есть соотвествие в РедактируемыйСписок @@ -127,11 +156,21 @@ РедактируемыйСписок.Очистить(); ЕстьНеотмеченные = Ложь; ПолучитьСписокПоддерева(РедактируемыйСписок, Список.ПолучитьЭлементы(), ЕстьНеотмеченные); + ДобавитьПользовательскиеСобытия(); Возврат РедактируемыйСписок; КонецФункции +&НаКлиенте +Процедура ДобавитьПользовательскиеСобытия() + + Для Каждого Событие Из ПользовательскиеСобытия Цикл + РедактируемыйСписок.Добавить(Событие.Значение, Событие.Представление); + КонецЦикла; + +КонецПроцедуры + &НаКлиенте Функция ПолучитьВетвьДерева(Представление) СтрокиПути = РазложитьСтрокуПоТочкам(Представление); @@ -196,7 +235,7 @@ Если ЭлементДерева.Пометка Тогда НовыйЭлементСписка = РедактируемыйСписок.Добавить(); НовыйЭлементСписка.Значение = ЭлементДерева.Значение; - НовыйЭлементСписка.Представление = СобратьПредставление(ЭлементДерева); + НовыйЭлементСписка.Представление = ЭлементДерева.ПолноеПредставление; Иначе ЕстьНеотмеченные = Истина; КонецЕсли; @@ -206,19 +245,26 @@ &НаКлиенте Процедура ОтметитьВстречающиесяЭлементы(ЭлементыДерева, РедактируемыйСписок) + Для Каждого ЭлементДерева Из ЭлементыДерева Цикл + Если ЭлементДерева.ПолучитьЭлементы().Количество() <> 0 Тогда ОтметитьВстречающиесяЭлементы(ЭлементДерева.ПолучитьЭлементы(), РедактируемыйСписок); Иначе - СобранноеПредставление = СобратьПредставление(ЭлементДерева); + Для Каждого ЭлементСписка Из РедактируемыйСписок Цикл - Если СобранноеПредставление = ЭлементСписка.Представление Тогда + + Если ЭлементДерева.ПолноеПредставление = ЭлементСписка.Представление Тогда ОтметитьЭлементДерева(ЭлементДерева, Истина); Прервать; КонецЕсли; + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецПроцедуры &НаКлиенте @@ -301,5 +347,9 @@ КонецЦикла; КонецПроцедуры - - +&НаСервереБезКонтекста +Функция ПолноеИмяНеУказанногоПользователя() + + Возврат Пользователи.ПолноеИмяНеУказанногоПользователя(); + +КонецФункции diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Form.form b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Form.form index fceebe73b..78c43ca7b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Form.form +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Form.form @@ -8,7 +8,7 @@ <name>ГруппаОсновные</name> <id>1</id> <items xsi:type="form:FormGroup"> - <name>ГруппаДатаКомпьютер</name> + <name>ГруппаДатаПользователь</name> <id>7</id> <items xsi:type="form:FormField"> <name>ИмяПользователя</name> @@ -23,7 +23,7 @@ </dataPath> <extendedTooltip> <name>ИмяПользователяРасширеннаяПодсказка</name> - <id>109</id> + <id>111</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -67,7 +67,7 @@ </dataPath> <extendedTooltip> <name>ДатаРасширеннаяПодсказка</name> - <id>111</id> + <id>113</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -106,15 +106,15 @@ </userVisible> <title> <key>ru</key> - <value>Группа дата компьютер</value> + <value>Группа дата пользователь</value> ru - Группа дата компьютер + Группа дата пользователь - ГруппаДатаКомпьютерРасширеннаяПодсказка - 108 + ГруппаДатаПользовательРасширеннаяПодсказка + 110 Label true true @@ -133,7 +133,7 @@ - ГруппаПользовательПриложение + ГруппаКомпьютерПриложениеРазделениеДанных 8 ПредставлениеПриложения @@ -148,7 +148,7 @@ ПредставлениеПриложенияРасширеннаяПодсказка - 114 + 116 Label true true @@ -179,6 +179,52 @@ Normal + + ПредставлениеРазделенияДанныхСеанса + 107 + true + true + + true + + + ПредставлениеРазделенияДанныхСеанса + + + ПредставлениеРазделенияДанныхСеансаРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + + ПредставлениеРазделенияДанныхСеансаКонтекстноеМеню + 108 + true + + InputField + true + Enter + true + Left + true + + + Opening + РазделениеДанныхСеансаОткрытие + + true + true + true + true + true + true + Normal + + Компьютер 11 @@ -192,7 +238,7 @@ КомпьютерРасширеннаяПодсказка - 116 + 120 Label true true @@ -230,15 +276,15 @@ <key>ru</key> - <value>Группа пользователь приложение</value> + <value>Группа компьютер приложение разделение данных</value> ru - Группа пользователь приложение + Группа компьютер приложение разделение данных - ГруппаПользовательПриложениеРасширеннаяПодсказка - 113 + ГруппаКомпьютерПриложениеРазделениеДанныхРасширеннаяПодсказка + 115 Label true true @@ -271,7 +317,7 @@ ГруппаОсновныеРасширеннаяПодсказка - 107 + 109 Label true true @@ -317,7 +363,7 @@ ПредставлениеМетаданныхРасширеннаяПодсказка - 122 + 126 Label true true @@ -365,7 +411,7 @@ ДанныеРасширеннаяПодсказка - 124 + 128 Label true true @@ -414,7 +460,7 @@ Left ПредставлениеДанныхРасширеннаяПодсказка - 126 + 130 Label true true @@ -463,7 +509,7 @@ ПростыеДанныеРасширеннаяПодсказка - 121 + 125 Label true true @@ -497,7 +543,7 @@ ПредставлениеМетаданныхДоступаРасширеннаяПодсказка - 129 + 133 Label true true @@ -567,10 +613,10 @@ ТаблицаДанныхДоступаСтрокаПоиска - 133 + 137 ТаблицаДанныхДоступаСтрокаПоискаРасширеннаяПодсказка - 135 + 139 Label true true @@ -580,7 +626,7 @@ ТаблицаДанныхДоступаСтрокаПоискаКонтекстноеМеню - 134 + 138 true ТаблицаДанныхДоступа @@ -590,10 +636,10 @@ ТаблицаДанныхДоступаСостояниеПросмотра - 136 + 140 ТаблицаДанныхДоступаСостояниеПросмотраРасширеннаяПодсказка - 138 + 142 Label true true @@ -603,7 +649,7 @@ ТаблицаДанныхДоступаСостояниеПросмотраКонтекстноеМеню - 137 + 141 true ViewStatusAddition @@ -614,10 +660,10 @@ ТаблицаДанныхДоступаУправлениеПоиском - 139 + 143 ТаблицаДанныхДоступаУправлениеПоискомРасширеннаяПодсказка - 141 + 145 Label true true @@ -627,7 +673,7 @@ ТаблицаДанныхДоступаУправлениеПоискомКонтекстноеМеню - 140 + 144 true SearchControlAddition @@ -638,7 +684,7 @@ ТаблицаДанныхДоступаРасширеннаяПодсказка - 132 + 136 Label true true @@ -659,7 +705,7 @@ ТаблицаДанныхДоступаКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 131 + 135 Label true true @@ -717,7 +763,7 @@ ДанныеДоступаРасширеннаяПодсказка - 128 + 132 Label true true @@ -751,7 +797,7 @@ ПредставлениеМетаданныхОтказаПраваДоступаРасширеннаяПодсказка - 151 + 155 Label true true @@ -799,7 +845,7 @@ ОтказПраваДоступаРасширеннаяПодсказка - 153 + 157 Label true true @@ -843,7 +889,7 @@ ДанныеОтказаПраваДоступаРасширеннаяПодсказка - 150 + 154 Label true true @@ -877,7 +923,7 @@ ПредставлениеМетаданныхОтказаДействияДоступаРасширеннаяПодсказка - 156 + 160 Label true true @@ -925,7 +971,7 @@ ОтказДействияДоступаРасширеннаяПодсказка - 158 + 162 Label true true @@ -989,10 +1035,10 @@ ТаблицаДанныхОтказаДействияДоступаСтрокаПоиска - 162 + 166 ТаблицаДанныхОтказаДействияДоступаСтрокаПоискаРасширеннаяПодсказка - 164 + 168 Label true true @@ -1002,7 +1048,7 @@ ТаблицаДанныхОтказаДействияДоступаСтрокаПоискаКонтекстноеМеню - 163 + 167 true ТаблицаДанныхОтказаДействияДоступа @@ -1012,10 +1058,10 @@ ТаблицаДанныхОтказаДействияДоступаСостояниеПросмотра - 165 + 169 ТаблицаДанныхОтказаДействияДоступаСостояниеПросмотраРасширеннаяПодсказка - 167 + 171 Label true true @@ -1025,7 +1071,7 @@ ТаблицаДанныхОтказаДействияДоступаСостояниеПросмотраКонтекстноеМеню - 166 + 170 true ViewStatusAddition @@ -1036,10 +1082,10 @@ ТаблицаДанныхОтказаДействияДоступаУправлениеПоиском - 168 + 172 ТаблицаДанныхОтказаДействияДоступаУправлениеПоискомРасширеннаяПодсказка - 170 + 174 Label true true @@ -1049,7 +1095,7 @@ ТаблицаДанныхОтказаДействияДоступаУправлениеПоискомКонтекстноеМеню - 169 + 173 true SearchControlAddition @@ -1060,7 +1106,7 @@ ТаблицаДанныхОтказаДействияДоступаРасширеннаяПодсказка - 161 + 165 Label true true @@ -1081,7 +1127,7 @@ ТаблицаДанныхОтказаДействияДоступаКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 160 + 164 Label true true @@ -1139,7 +1185,7 @@ ДанныеОтказаДействияДоступаРасширеннаяПодсказка - 155 + 159 Label true true @@ -1169,7 +1215,7 @@ АутентификацияИмяПользователяРасширеннаяПодсказка - 180 + 184 Label true true @@ -1211,7 +1257,7 @@ АутентификацияПользовательОСРасширеннаяПодсказка - 182 + 186 Label true true @@ -1253,7 +1299,7 @@ АутентификацияТекущийПользовательОСРасширеннаяПодсказка - 184 + 188 Label true true @@ -1297,7 +1343,7 @@ ДанныеАутентификацииРасширеннаяПодсказка - 179 + 183 Label true true @@ -1356,10 +1402,10 @@ ТаблицаСвойствПользователяИБСтрокаПоиска - 190 + 194 ТаблицаСвойствПользователяИБСтрокаПоискаРасширеннаяПодсказка - 192 + 196 Label true true @@ -1369,7 +1415,7 @@ ТаблицаСвойствПользователяИБСтрокаПоискаКонтекстноеМеню - 191 + 195 true ТаблицаСвойствПользователяИБ @@ -1379,10 +1425,10 @@ ТаблицаСвойствПользователяИБСостояниеПросмотра - 193 + 197 ТаблицаСвойствПользователяИБСостояниеПросмотраРасширеннаяПодсказка - 195 + 199 Label true true @@ -1392,7 +1438,7 @@ ТаблицаСвойствПользователяИБСостояниеПросмотраКонтекстноеМеню - 194 + 198 true ViewStatusAddition @@ -1403,10 +1449,10 @@ ТаблицаСвойствПользователяИБУправлениеПоиском - 196 + 200 ТаблицаСвойствПользователяИБУправлениеПоискомРасширеннаяПодсказка - 198 + 202 Label true true @@ -1416,7 +1462,7 @@ ТаблицаСвойствПользователяИБУправлениеПоискомКонтекстноеМеню - 197 + 201 true SearchControlAddition @@ -1427,7 +1473,7 @@ ТаблицаСвойствПользователяИБРасширеннаяПодсказка - 189 + 193 Label true true @@ -1448,7 +1494,7 @@ ТаблицаСвойствПользователяИБКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 188 + 192 Label true true @@ -1533,10 +1579,10 @@ ТаблицаРолейПользователяИБСтрокаПоиска - 209 + 213 ТаблицаРолейПользователяИБСтрокаПоискаРасширеннаяПодсказка - 211 + 215 Label true true @@ -1546,7 +1592,7 @@ ТаблицаРолейПользователяИБСтрокаПоискаКонтекстноеМеню - 210 + 214 true ТаблицаРолейПользователяИБ @@ -1556,10 +1602,10 @@ ТаблицаРолейПользователяИБСостояниеПросмотра - 212 + 216 ТаблицаРолейПользователяИБСостояниеПросмотраРасширеннаяПодсказка - 214 + 218 Label true true @@ -1569,7 +1615,7 @@ ТаблицаРолейПользователяИБСостояниеПросмотраКонтекстноеМеню - 213 + 217 true ViewStatusAddition @@ -1580,10 +1626,10 @@ ТаблицаРолейПользователяИБУправлениеПоиском - 215 + 219 ТаблицаРолейПользователяИБУправлениеПоискомРасширеннаяПодсказка - 217 + 221 Label true true @@ -1593,7 +1639,7 @@ ТаблицаРолейПользователяИБУправлениеПоискомКонтекстноеМеню - 216 + 220 true SearchControlAddition @@ -1604,7 +1650,7 @@ ТаблицаРолейПользователяИБРасширеннаяПодсказка - 208 + 212 Label true true @@ -1625,7 +1671,7 @@ ТаблицаРолейПользователяИБКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 207 + 211 Label true true @@ -1682,7 +1728,7 @@ ГоризонтальнаяГруппаСвойствПользователяИБРасширеннаяПодсказка - 187 + 191 Label true true @@ -1714,7 +1760,7 @@ ДанныеПользователяИБРасширеннаяПодсказка - 186 + 190 Label true true @@ -1743,7 +1789,7 @@ ПредставленияДанныхРасширеннаяПодсказка - 120 + 124 Label true true @@ -1779,7 +1825,7 @@ ГруппаДанныеРасширеннаяПодсказка - 119 + 123 Label true true @@ -1819,7 +1865,7 @@ None ПредставлениеСобытияРасширеннаяПодсказка - 227 + 231 Label true true @@ -1864,7 +1910,7 @@ Top КомментарийРасширеннаяПодсказка - 229 + 233 Label true true @@ -1920,7 +1966,7 @@ ГруппаСобытиеРасширеннаяПодсказка - 226 + 230 Label true true @@ -1955,7 +2001,7 @@ ГруппаОсновоеРасширеннаяПодсказка - 118 + 122 Label true true @@ -1994,7 +2040,7 @@ СеансРасширеннаяПодсказка - 233 + 237 Label true true @@ -2038,7 +2084,7 @@ РабочийСерверРасширеннаяПодсказка - 235 + 239 Label true true @@ -2082,7 +2128,7 @@ ОсновнойIPПортРасширеннаяПодсказка - 237 + 241 Label true true @@ -2127,7 +2173,7 @@ ВспомогательныйIPПортРасширеннаяПодсказка - 239 + 243 Label true true @@ -2177,7 +2223,7 @@ ГруппаСоединениеРасширеннаяПодсказка - 232 + 236 Label true true @@ -2213,7 +2259,7 @@ ТранзакцияРасширеннаяПодсказка - 242 + 246 Label true true @@ -2257,7 +2303,7 @@ СтатусТранзакцииРасширеннаяПодсказка - 244 + 248 Label true true @@ -2310,7 +2356,7 @@ ГруппаТранзакцияРасширеннаяПодсказка - 241 + 245 Label true true @@ -2336,7 +2382,7 @@ ГруппаТранзакцияСоединениеРасширеннаяПодсказка - 231 + 235 Label true true @@ -2368,7 +2414,7 @@ false ЗакрытьРасширеннаяПодсказка - 247 + 251 Label true true @@ -2404,7 +2450,7 @@ false СправкаРасширеннаяПодсказка - 248 + 252 Label true true @@ -2435,7 +2481,7 @@ ГруппаКнопокРасширеннаяПодсказка - 246 + 250 Label true true @@ -2893,6 +2939,27 @@ true + + ПредставлениеРазделенияДанныхСеанса + + <key>ru</key> + <value>Разделение данных сеанса</value> + + 24 + + ValueList + + + true + + + true + + FunctionalOption.ИспользоватьРазделениеПоОбластямДанных + + + + ВспомогательныйIPПорт diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html index aea3c6b69..d9cb0bf1b 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl index 78aeb338b..a106f6dd0 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Forms/ФормаСобытия/Module.bsl @@ -25,6 +25,10 @@ ОсновнойIPПорт = Параметры.ОсновнойIPПорт; ВспомогательныйIPПорт = Параметры.ВспомогательныйIPПорт; + Если Параметры.Свойство("ПредставлениеРазделенияДанныхСеанса") Тогда + ПредставлениеРазделенияДанныхСеанса = Параметры.ПредставлениеРазделенияДанныхСеанса; + КонецЕсли; + // Для списка метаданных включается кнопка открытия Если ТипЗнч(ПредставлениеМетаданных) = Тип("СписокЗначений") Тогда Элементы.ПредставлениеМетаданных.КнопкаОткрытия = Истина; @@ -119,6 +123,8 @@ Элементы.ПростыеДанные.Видимость = Истина; КонецЕсли; + Элементы.ПредставлениеРазделенияДанныхСеанса.Видимость = Не ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных(); + КонецПроцедуры @@ -132,6 +138,12 @@ КонецПроцедуры +&НаКлиенте +Процедура РазделениеДанныхСеансаОткрытие(Элемент, СтандартнаяОбработка) + + ОткрытьЗначение(ПредставлениеРазделенияДанныхСеанса); + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "ТаблицаДанныхОтказаДействияДоступа" diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html index a17b0d30c..33b600545 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html +++ b/SSL/src/DataProcessors/ЖурналРегистрации/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                  diff --git a/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl b/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl index 0f52a21a0..f83f8a684 100644 --- a/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЖурналРегистрации/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -74,3 +76,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form index 1658eabc3..e0b92bba0 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Form.form @@ -24,10 +24,6 @@ Валюта 10 - - <key>ru</key> - <value>Валюта для загрузки</value> - true true @@ -38,7 +34,7 @@ ВалютаРасширеннаяПодсказка - 50 + 52 Label true true @@ -75,7 +71,7 @@ КодВалютыРасширеннаяПодсказка - 52 + 54 Label true true @@ -112,7 +108,7 @@ ДатаКурсаРасширеннаяПодсказка - 54 + 56 Label true true @@ -149,7 +145,7 @@ КурсРасширеннаяПодсказка - 56 + 58 Label true true @@ -186,7 +182,7 @@ КратностьРасширеннаяПодсказка - 58 + 60 Label true true @@ -227,10 +223,10 @@ СписокВалютСтрокаПоиска - 41 + 43 СписокВалютСтрокаПоискаРасширеннаяПодсказка - 43 + 45 Label true true @@ -240,7 +236,7 @@ СписокВалютСтрокаПоискаКонтекстноеМеню - 42 + 44 true СписокВалют @@ -250,10 +246,10 @@ СписокВалютСостояниеПросмотра - 44 + 46 СписокВалютСостояниеПросмотраРасширеннаяПодсказка - 46 + 48 Label true true @@ -263,7 +259,7 @@ СписокВалютСостояниеПросмотраКонтекстноеМеню - 45 + 47 true ViewStatusAddition @@ -274,10 +270,10 @@ СписокВалютУправлениеПоиском - 47 + 49 СписокВалютУправлениеПоискомРасширеннаяПодсказка - 49 + 51 Label true true @@ -287,7 +283,7 @@ СписокВалютУправлениеПоискомКонтекстноеМеню - 48 + 50 true SearchControlAddition @@ -298,7 +294,7 @@ СписокВалютРасширеннаяПодсказка - 40 + 42 Label true true @@ -319,7 +315,7 @@ СписокВалютКонтекстноеМенюПодобратьВалютыРасширеннаяПодсказка - 37 + 39 Label true true @@ -349,7 +345,7 @@ СписокВалютКонтекстноеМенюУдалитьРасширеннаяПодсказка - 38 + 40 Label true true @@ -376,7 +372,7 @@ СписокВалютКонтекстноеМенюОчиститьСписокРасширеннаяПодсказка - 39 + 41 Label true true @@ -427,50 +423,9 @@ ГруппаПериодКурсовВалют 16 - - КнопкаЗагрузить - 15 - true - true - - true - - false - - КнопкаЗагрузитьРасширеннаяПодсказка - 69 - Label - true - true - - Left - - - UsualButton - Form.Command.ЗагрузитьКурсыВалют - Auto - true - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - НачалоПериода 2 - - <key>ru</key> - <value>с</value> - true true @@ -481,7 +436,7 @@ НачалоПериодаРасширеннаяПодсказка - 70 + 71 Label true true @@ -515,10 +470,6 @@ ОкончаниеПериода 3 - - <key>ru</key> - <value>по</value> - true true @@ -529,7 +480,7 @@ ОкончаниеПериодаРасширеннаяПодсказка - 72 + 73 Label true true @@ -571,7 +522,7 @@ ГруппаПериодКурсовВалютРасширеннаяПодсказка - 68 + 70 Label true true @@ -591,6 +542,32 @@ ФормаКоманднаяПанель -1 + + ФормаЗагрузитьКурсыВалют + 32 + true + true + + true + + + ФормаЗагрузитьКурсыВалютРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Command.ЗагрузитьКурсыВалют + Auto + true + true + true + UserCmds + Auto + КоманднаяПанельСписокВалют 6 @@ -605,7 +582,7 @@ false КнопкаЗаполнитьРасширеннаяПодсказка - 33 + 35 Label true true @@ -641,7 +618,7 @@ false КнопкаПодборВалютРасширеннаяПодсказка - 34 + 36 Label true true @@ -680,7 +657,7 @@ СписокВалютУдалитьРасширеннаяПодсказка - 35 + 37 Label true true @@ -708,7 +685,7 @@ false КнопкаОчиститьРасширеннаяПодсказка - 36 + 38 Label true true @@ -741,7 +718,7 @@ КоманднаяПанельСписокВалютРасширеннаяПодсказка - 32 + 34 Label true true @@ -804,9 +781,6 @@ true - - CommonPicture.ЗаполнитьФорму - КомандаЗаполнитьСписокВалютВыполнить @@ -841,7 +815,7 @@ ЗагрузитьКурсыВалют <key>ru</key> - <value>Загрузить курсы валют</value> + <value>Загрузить</value> 3 @@ -864,7 +838,7 @@ ПодобратьВалюты <key>ru</key> - <value>Подобрать</value> + <value>Подобрать...</value> 4 diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Help/ru.html deleted file mode 100644 index ba1201f78..000000000 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Forms/Форма/Help/ru.html +++ /dev/null @@ -1,2 +0,0 @@ - -

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

                  \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html index 9d1c8df3f..d30df7dc9 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/Help/ru.html @@ -1 +1,25 @@ -Загрузка курсов валют с сайта РБК \ No newline at end of file + +

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

                  +

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

                  +

                  Реквизиты:

                  +

                  +

                  +
              Настройка
              + + +
              +
            • Список валют
            • +

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

              +
            • С
            • Начало периода загрузки курсов валют.
              +
            • По
            • Конец периода загрузки курсов валют.

              Команды:

              +

              +

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

               

              +

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

              +

               

              \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl index 8bebf1bfa..98161bca5 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -31,3 +33,5 @@ ); КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo index f4ca0ba88..7b6e89be9 100644 --- a/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo +++ b/SSL/src/DataProcessors/ЗагрузкаКурсовВалют/ЗагрузкаКурсовВалют.mdo @@ -20,7 +20,7 @@ НачалоПериодаЗагрузки ru - Начало периода загрузки + С Date @@ -40,7 +40,7 @@ ОкончаниеПериодаЗагрузки ru - Окончание периода загрузки + По Date @@ -78,7 +78,7 @@ КодВалюты ru - Код валюты + Код числовой String @@ -86,6 +86,10 @@ 10 + + ru + Числовой код валюты по общероссийскому классификатору валют + @@ -101,7 +105,7 @@ ru - Ссылка на валюту + Символьный код валюты по общероссийскому классификатору валют @@ -186,11 +190,6 @@ ru Форма - - - ru - - PersonalComputer MobileDevice diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl index 52f6481dd..5526a5a06 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -99,3 +101,5 @@ Возврат ШаблонДерева; КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl index df4a9de38..6b2e0e1f7 100644 --- a/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ЗагрузкаПравилРегистрацииОбъектов/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем Регистрация Экспорт; // структура, содержащая параметры регистрации Перем ПравилаРегистрацииОбъектов Экспорт; // таблица значений с правилами регистрации объектов Перем ФлагОшибки Экспорт; // глобальный флаг ошибки @@ -1230,3 +1232,5 @@ // Операторы основной программы ИнициализацияРеквизитовИМодульныхПеременных(); + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form index b238bd49e..0cb913a26 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Form.form @@ -2002,6 +2002,10 @@ -1 Left + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl index 81f043151..b10f46477 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/Forms/Форма/Module.bsl @@ -9,7 +9,12 @@ КоличествоПоказываемыхСобытий = 200; - ПрочитатьЖурналПриСозданииНаСервере(ОтборЖурналаРегистрации); +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ОбновитьТекущийСписок(); КонецПроцедуры @@ -26,6 +31,10 @@ &НаКлиенте Процедура КоличествоПоказываемыхСобытийПриИзменении(Элемент) +#Если ВебКлиент Тогда + КоличествоПоказываемыхСобытий = ?(КоличествоПоказываемыхСобытий > 1000, 1000, КоличествоПоказываемыхСобытий); +#КонецЕсли + ОбновитьТекущийСписок(); КонецПроцедуры @@ -168,17 +177,6 @@ Возврат РезультатВыполнения; КонецФункции -&НаСервере -Процедура ПрочитатьЖурналПриСозданииНаСервере(Знач ОтборЖурналаНаКлиенте) - Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; - ПараметрыОтчета = ПараметрыОтчета(ОтборЖурналаНаКлиенте); - АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); - - ЖурналРегистрации.ПрочитатьСобытияЖурналаРегистрации(ПараметрыОтчета, АдресХранилища); - ЗагрузитьПодготовленныеДанные(); - ЖурналРегистрации.СформироватьПредставлениеОтбора(ПредставлениеОтбора, ОтборЖурналаНаКлиенте, ОтборЖурналаРегистрацииПоУмолчанию); -КонецПроцедуры - &НаКлиенте Процедура ДополнитьОтборЗначениямиПоУмолчанию() @@ -229,7 +227,7 @@ Процедура Подключаемый_ПроверитьВыполнениеЗадания() Попытка - Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда ЗагрузитьПодготовленныеДанные(); ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.ПолеИндикаторДлительныхОпераций, "НеИспользовать"); Элементы.Страницы.ТекущаяСтраница = Элементы.ЖурналРегистрации; @@ -256,3 +254,9 @@ КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции diff --git a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl index 3f21561b3..34df86909 100644 --- a/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ЗащитаПерсональныхДанных/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -62,3 +64,5 @@ ЖурналСобытий.Колонки.Добавить("СведенияОСобытии", Новый ОписаниеТипов("Строка")); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form index 3fab89f63..48807a4fb 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Form.form @@ -1,9 +1,5 @@ - - <key>ru</key> - <value>Карта маршрута бизнес-процесса</value> - БизнесПроцесс 1 @@ -21,7 +17,7 @@ БизнесПроцессРасширеннаяПодсказка - 10 + 33 Label true true @@ -42,12 +38,453 @@ true true + true true true true Normal + + СвойстваБизнесПроцесса + 32 + + Автор + 9 + true + true + + true + + + Автор + + + АвторРасширеннаяПодсказка + 36 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 10 + true + + InputField + true + Enter + true + Left + true + + 43 + true + true + false + true + true + true + true + Normal + + + + ГруппаСвойстваБизнесПроцесса + 11 + + Дата + 24 + true + true + + true + + + Дата + + + ДатаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 25 + true + + InputField + true + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + ГруппаСтатус + 16 + + ГруппаНеЗавершен + 17 + + Статус + 26 + true + true + + true + + + Статус + + None + + СтатусРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + + СтатусКонтекстноеМеню + 27 + true + + LabelField + Enter + true + Left + true + + true + true + false + true + + + + Состояние + 30 + true + true + + true + + + Состояние + + None + + СостояниеРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + СостояниеКонтекстноеМеню + 31 + true + + LabelField + true + Enter + true + Left + true + + true + true + false + true + + + true + true + + true + + + <key>ru</key> + <value>Не завершен</value> + + + ГруппаНеЗавершенРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Page + + auto + + + + ГруппаЗавершен + 19 + + ДатаЗавершения + 28 + true + true + + true + + + ДатаЗавершения + + + ДатаЗавершенияРасширеннаяПодсказка + 48 + Label + true + true + + Left + + + + ДатаЗавершенияКонтекстноеМеню + 29 + true + + InputField + true + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Завершен</value> + + + ГруппаЗавершенРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + Page + + + true + true + + true + + + <key>ru</key> + <value>Статус</value> + + + ГруппаСтатусРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Свойства бизнес-процесса</value> + + true + + ГруппаСвойстваБизнесПроцессаРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Свойства бизнес процесса</value> + + + СвойстваБизнесПроцессаРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + Auto + Auto + + + + КоманднаяПанель + 8 + + ЗадачиВТочкеМаршрута + 7 + true + true + + true + + false + + ЗадачиВТочкеМаршрутаРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.Command.Задачи + Normal + Auto + true + true + UserCmds + Auto + + + Обновить + 5 + true + true + + true + + false + + ОбновитьРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + CommandBar + + Left + Form + + КартаМаршрута 3 @@ -62,7 +499,7 @@ None КартаМаршрутаРасширеннаяПодсказка - 13 + 54 Label true true @@ -84,7 +521,7 @@ false ЗадачиРасширеннаяПодсказка - 12 + 53 Label true true @@ -114,70 +551,17 @@ 80 true - 30 + 25 true true true + None + false ФормаКоманднаяПанель -1 - - ЗадачиВТочкеМаршрута - 7 - true - true - - true - - false - - ЗадачиВТочкеМаршрутаРасширеннаяПодсказка - 8 - Label - true - true - - Left - - - Form.Command.Задачи - Normal - Auto - true - true - UserCmds - Auto - - - Обновить - 5 - true - true - - true - - false - - ОбновитьРасширеннаяПодсказка - 9 - Label - true - true - - Left - - - Form.Command.Обновить - Normal - Auto - true - true - UserCmds - Auto - InAdditionalSubmenu - Left true @@ -191,6 +575,7 @@ DontBlock true + true true Vertical true @@ -249,6 +634,96 @@ + + Статус + + <key>ru</key> + <value>Статус</value> + + 5 + + String + + 12 + + + + true + + + true + + + + Состояние + + <key>ru</key> + <value>Состояние</value> + + 6 + + EnumRef.СостоянияБизнесПроцессов + + + true + + + true + + + + Автор + + <key>ru</key> + <value>Автор</value> + + 7 + + CatalogRef.Пользователи + + + true + + + true + + + + ДатаЗавершения + + <key>ru</key> + <value>Завершен</value> + + 8 + + Date + + + + true + + + true + + + + Дата + + <key>ru</key> + <value>Дата</value> + + 4 + + Date + + + + true + + + true + + Обновить @@ -284,7 +759,7 @@ <id>2</id> <toolTip> <key>ru</key> - <value>Открыть список задач, сформированных в выбранной точке маршрута</value> + <value>Открыть список задач для выбранной точки маршрута</value> </toolTip> <use> <common>true</common> diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl index 08ab252aa..ce73874f0 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/Forms/Форма/Module.bsl @@ -3,9 +3,11 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + Если ЗначениеЗаполнено(Параметры.БизнесПроцесс) Тогда БизнесПроцесс = Параметры.БизнесПроцесс; КонецЕсли; + КонецПроцедуры &НаКлиенте @@ -31,7 +33,7 @@ &НаКлиенте Процедура ОбновитьВыполнить(Команда) - ОбновитьКартуМаршрута(); + ОбновитьКартуМаршрута(); КонецПроцедуры &НаКлиенте @@ -44,15 +46,32 @@ &НаСервере Процедура ОбновитьКартуМаршрута() - + Если ЗначениеЗаполнено(БизнесПроцесс) Тогда КартаМаршрута = БизнесПроцесс.ПолучитьОбъект().ПолучитьКартуМаршрута(); ИначеЕсли БизнесПроцесс <> Неопределено Тогда КартаМаршрута = БизнесПроцессы[БизнесПроцесс.Метаданные().Имя].ПолучитьКартуМаршрута(); + Возврат; Иначе КартаМаршрута = Новый ГрафическаяСхема; + Возврат; КонецЕсли; - + + СвойстваБизнесПроцесса = ОбщегоНазначения.ПолучитьЗначенияРеквизитов( + БизнесПроцесс, "Автор,Дата,ДатаЗавершения,Завершен,Стартован" + + ?(БизнесПроцесс.Метаданные().Реквизиты.Найти("Состояние") = Неопределено, "", ",Состояние")); + ЗаполнитьЗначенияСвойств(ЭтаФорма, СвойстваБизнесПроцесса); + Если СвойстваБизнесПроцесса.Завершен Тогда + Статус = НСтр("ru = 'Завершен'"); + Элементы.ГруппаСтатус.ТекущаяСтраница = Элементы.ГруппаЗавершен; + ИначеЕсли СвойстваБизнесПроцесса.Стартован Тогда + Статус = НСтр("ru = 'Стартован'"); + Элементы.ГруппаСтатус.ТекущаяСтраница = Элементы.ГруппаНеЗавершен; + Иначе + Статус = НСтр("ru = 'Не стартован'"); + Элементы.ГруппаСтатус.ТекущаяСтраница = Элементы.ГруппаНеЗавершен; + КонецЕсли; + КонецПроцедуры &НаКлиенте diff --git a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo index c63ac4b14..60cf5fc37 100644 --- a/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo +++ b/SSL/src/DataProcessors/КартаМаршрутаБизнесПроцесса/КартаМаршрутаБизнесПроцесса.mdo @@ -15,7 +15,7 @@ <name>Форма</name> <synonym> <key>ru</key> - <value>Карта маршрута</value> + <value>Карта маршрута бизнес процесса</value> </synonym> <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl index 6a669bcd0..6ce748c99 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ИСПОЛЬЗУЕМЫЕ СОКРАЩЕНИЯ ИМЕН ПЕРЕМЕННЫХ (АББРЕВИАТУРЫ) // @@ -13,14 +15,14 @@ Перем КлючСообщенияЖурналаРегистрации Экспорт; // строка сообщения для фиксации ошибок в журнале регистрации Перем ВнешнееСоединение Экспорт; // Содержит глобальный контекст внешнего соединения или Неопределено +Перем Запросы Экспорт; // Структура, содержащая используемые запросы //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПЕРЕМЕННЫЕ МОДУЛЯ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ (ОБЩИЕ ДЛЯ ВЫГРУЗКИ И ЗАГРУЗКИ) - + Перем Конвертация; // Структура свойств конвертации (Имя, Ид, обработчики событий обмена) Перем Алгоритмы; // Структура, содержащая используемые алгоритмы -Перем Запросы; // Структура, содержащая используемые запросы Перем ДопОбработки; // Структура, содержащая используемые внешние обработки Перем Правила; // Структура, содержащая ссылки на ПКО @@ -35,6 +37,13 @@ Перем ФайлПротоколаДанных; // файл для ведения протокола обмена данными Перем ФлагКомментироватьОбработкуОбъектов; +//////////////////////////////////////////////////////////////////////////////// +// ПЕРЕМЕННЫЕ ОТЛАДКИ ОБРАБОТЧИКОВ + +Перем ОбработкаВыгрузки; +Перем ОбработкаЗагрузки; +Перем ПолеРежимСовместимостиСБСП20; + //////////////////////////////////////////////////////////////////////////////// // ФЛАГИ НАЛИЧИЯ ГЛОБАЛЬНЫХ ОБРАБОТЧИКОВ СОБЫТИЙ @@ -143,6 +152,7 @@ Перем ПолеТаблицыОписанийСвойствОбъектов; // Соответствие: Ключ - ОбъектМетаданных; Значение - ТаблицаЗначений - таблица описания свойств объекта метаданных Перем ПолеВыгруженныеПоСсылкеОбъекты; // Массив объектов, выгруженных по ссылке. Элементы массива уникальны +Перем ПолеСозданныеПриВыгрузкеОбъекты; // Массив объектов, созданных при выгрузке. Элементы массива уникальны Перем ПолеВыгружаемыеПоСсылкеОбъектыМетаданных; // (кэш) Соответствие: Ключ - ОбъектМетаданных; Значение - признак выгрузки объекта по ссылке: Истина - надо выгружать объект по ссылке, Ложь - не надо. @@ -369,12 +379,6 @@ КонецФункции -Функция РежимЗагрузкиДанныхВИнформационнуюБазу() - - Возврат ПустаяСтрока(РежимЗагрузкиДанных) ИЛИ ВРег(РежимЗагрузкиДанных) = ВРег("ЗагрузкаВИнформационнуюБазу"); - -КонецФункции - Функция РежимЗагрузкиДанныхВТаблицуЗначений() Возврат Не РежимЗагрузкиДанныхВИнформационнуюБазу(); @@ -440,7 +444,7 @@ // инициализируем таблицу для отложенного проведения документов ПолеДокументыДляОтложенногоПроведения = Новый ТаблицаЗначений; - ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументОбъект"); + ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументОбъект"); // Поле оставлено для совместимости с предыдущими версиями ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументСсылка"); ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДатаДокумента", одОписаниеТипа("Дата")); ПолеДокументыДляОтложенногоПроведения.Колонки.Добавить("ДокументПроведенУспешно", одОписаниеТипа("Булево")); @@ -461,6 +465,17 @@ Возврат ПолеВыгруженныеПоСсылкеОбъекты; КонецФункции +Функция СозданныеПриВыгрузкеОбъекты() + + Если ТипЗнч(ПолеСозданныеПриВыгрузкеОбъекты) <> Тип("Массив") Тогда + + ПолеСозданныеПриВыгрузкеОбъекты = Новый Массив; + + КонецЕсли; + + Возврат ПолеСозданныеПриВыгрузкеОбъекты; +КонецФункции + Функция ВыгружаемыеПоСсылкеОбъектыМетаданных() Если ТипЗнч(ПолеВыгружаемыеПоСсылкеОбъектыМетаданных) <> Тип("Соответствие") Тогда @@ -531,6 +546,10 @@ ПолеИмяПланаОбмена = ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелОбменаЗагрузкаДанных); + ИначеЕсли ЗначениеЗаполнено(ИмяПланаОбменаВРО) Тогда + + ПолеИмяПланаОбмена = ИмяПланаОбменаВРО; + Иначе ПолеИмяПланаОбмена = ""; @@ -613,7 +632,7 @@ Если ТипЗнч(ПолеПравилаРегистрацииОбъектов) <> Тип("ТаблицаЗначений") Тогда - ПравилаРегистрацииОбъектов = ОбменДаннымиСервер.ПараметрыСеансаПравилаРегистрацииОбъектов().Получить(); + ПравилаРегистрацииОбъектов = ОбменДаннымиВызовСервера.ПараметрыСеансаПравилаРегистрацииОбъектов().Получить(); Отбор = Новый Структура; Отбор.Вставить("ИмяПланаОбмена", ОбменДаннымиПовтИсп.ПолучитьИмяПланаОбмена(УзелПланаОбмена)); @@ -649,9 +668,11 @@ ПолеСостояниеОбменаДанными = Неопределено; ПолеРезультатВыполненияОбмена = Неопределено; ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; + ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; ПолеПравилаРегистрацииОбъектов = Неопределено; ПолеСвойстваУзлаПланаОбмена = Неопределено; + ПолеРежимСовместимостиСБСП20 = Неопределено; ПолеОбработкаДляЗагрузкиДанных = ОбработкаДляЗагрузкиДанных; ИнициализироватьВедениеПротоколаОбмена(); @@ -669,6 +690,8 @@ Возврат; КонецЕсли; + ИнициализироватьОбработки(); + Если ЭтоОбменЧерезВнешнееСоединение() Тогда ОбработкаДляЗагрузкиДанных().ВнешнееСоединениеПередЗагрузкойДанных(); @@ -709,6 +732,7 @@ ЗавершитьВедениеПротоколаОбмена(); ФайлОбмена = Неопределено; ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; + ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; Возврат; КонецПопытки; @@ -732,7 +756,9 @@ // сбрасываем модальные переменные перед помещением обработки в платформенный кэш ПолеВыгруженныеПоСсылкеОбъекты = Неопределено; + ПолеСозданныеПриВыгрузкеОбъекты = Неопределено; ПолеВыгружаемыеПоСсылкеОбъектыМетаданных = Неопределено; + ОбработкаВыгрузки = Неопределено; КонецПроцедуры @@ -755,6 +781,7 @@ ПолеДокументыДляОтложенногоПроведения = Неопределено; ПолеСвойстваУзлаПланаОбмена = Неопределено; ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ПолеРежимСовместимостиСБСП20 = Неопределено; ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; НомерПоследнегоПоискаПоСсылке = 0; @@ -780,7 +807,7 @@ Возврат; КонецЕсли; - Если ФлагРежимОтладки Тогда + Если ПродолжитьПриОшибке Тогда ИспользоватьТранзакции = Ложь; КонецЕсли; @@ -801,13 +828,25 @@ Возврат; КонецЕсли; + ИнициализироватьОбработки(); + // {Обработчик: ПередЗагрузкойДанных} Начало Отказ = Ложь; Если Не ПустаяСтрока(Конвертация.ПередЗагрузкойДанных) Тогда Попытка - Выполнить(Конвертация.ПередЗагрузкойДанных); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередЗагрузкойДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); Отказ = Истина; @@ -859,7 +898,17 @@ Если Не ПустаяСтрока(Конвертация.ПослеЗагрузкиДанных) Тогда Попытка - Выполнить(Конвертация.ПослеЗагрузкиДанных); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПослеЗагрузкиДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных(); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); КонецПопытки; @@ -901,6 +950,7 @@ ПолеДокументыДляОтложенногоПроведения = Неопределено; ПолеСоответствиеТиповДанныхДляЗагрузки = Неопределено; ГлобальныйСтекНеЗаписанныхОбъектов = Неопределено; + ОбработкаЗагрузки = Неопределено; КонецПроцедуры @@ -925,6 +975,7 @@ ПолеДокументыДляОтложенногоПроведения = Неопределено; ПолеСвойстваУзлаПланаОбмена = Неопределено; ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ПолеРежимСовместимостиСБСП20 = Неопределено; // дата начала загрузки СостояниеОбменаДанными().ДатаНачала = ТекущаяДатаСеанса(); @@ -977,6 +1028,7 @@ ПолеДокументыДляОтложенногоПроведения = Неопределено; ПолеСвойстваУзлаПланаОбмена = Неопределено; ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ПолеРежимСовместимостиСБСП20 = Неопределено; ИспользоватьТранзакции = Ложь; @@ -1043,6 +1095,8 @@ Возврат; КонецЕсли; + ИнициализироватьОбработки(); + // обнуляем значение модальной переменной ПолеТаблицаДанныхЗаголовкаПакета = Неопределено; @@ -1117,6 +1171,8 @@ ФайлОбмена.УстановитьСтроку(СтрокаXML); + ИнициализироватьОбработки(); + Попытка ПроизвестиЧтениеДанных(); Исключение @@ -1135,7 +1191,17 @@ Если Не ПустаяСтрока(Конвертация.ПередЗагрузкойДанных) Тогда Попытка - Выполнить(Конвертация.ПередЗагрузкойДанных); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередЗагрузкойДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); Отказ = Истина; @@ -1165,11 +1231,13 @@ ПолеДокументыДляОтложенногоПроведения = Неопределено; ПолеСвойстваУзлаПланаОбмена = Неопределено; ПолеВерсияФорматаВходящегоСообщенияОбмена = Неопределено; + ПолеРежимСовместимостиСБСП20 = Неопределено; ГлобальныйСтекНеЗаписанныхОбъектов = Новый Соответствие; НомерПоследнегоПоискаПоСсылке = 0; ИнициализироватьМенеджерыИСообщения(); + ИнициализироватьОбработки(); УстановитьФлагОшибки(Ложь); @@ -1207,7 +1275,17 @@ Если Не ПустаяСтрока(Конвертация.ПослеЗагрузкиДанных) Тогда Попытка - Выполнить(Конвертация.ПослеЗагрузкиДанных); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПослеЗагрузкиДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных(); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); КонецПопытки; @@ -1295,6 +1373,1183 @@ КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ПРОЦЕДУРЫ И ФУНКЦИИ, ИСПОЛЬЗУЕМЫЕ В ОБРАБОТЧИКАХ СОБЫТИЙ + +// Создает в файле обмена запись об удалении объекта. +// +// Параметры: +// Ссылка - Ссылка на удаляемый объект. +// ТипПриемника - Строка - Содрежит строковое представление типа приемника. +// ТипИсточника - Строка - Содрежит строковое представление типа источника. +// +Процедура ЗаписатьВФайлУдалениеОбъекта(Ссылка, Знач ТипПриемника, Знач ТипИсточника) Экспорт + + Приемник = СоздатьУзел("УдалениеОбъекта"); + + УстановитьАтрибут(Приемник, "ТипПриемника", ТипПриемника); + УстановитьАтрибут(Приемник, "ТипИсточника", ТипИсточника); + + УстановитьАтрибут(Приемник, "УникальныйИдентификатор", Ссылка.УникальныйИдентификатор()); + + Приемник.ЗаписатьКонецЭлемента(); // УдалениеОбъекта + + ЗаписатьВФайл(Приемник); + + УвеличитьСчетчикВыгруженныхОбъектов(); + +КонецПроцедуры + +// Регистрирует объект, созданный при выгрузке. +// +// Параметры: +// Ссылка - Ссылка на регистрируемый объект. +// +Процедура ЗарегистрироватьОбъектСозданныйПриВыгрузке(Ссылка) Экспорт + + Если СозданныеПриВыгрузкеОбъекты().Найти(Ссылка) = Неопределено Тогда + + СозданныеПриВыгрузкеОбъекты().Добавить(Ссылка); + + КонецЕсли; + +КонецПроцедуры + +// Регистрирует предупреждение в журнале регистрации. +// Если в процессе обмена данными было обращение к этой процедуре, то обмен данными остановлен не будет. +// После завершения обмена статус выполнения обмена в мониторе для пользователя будет иметь значение "Предупреждение", если не было ошибок. +// +// Параметры: +// Предупреждение - Строка. Текст предупреждения, который надо зарегистрировать. +// Информация, предупреждения и ошибки, возникающие в процессе обмена данными регистрируются в журнале регистрации. +// +Процедура ЗарегистрироватьПредупреждение(Предупреждение) Экспорт + + ЗаписатьВПротоколВыполнения(Предупреждение,,Ложь,,,, Перечисления.РезультатыВыполненияОбмена.ВыполненоСПредупреждениями); + +КонецПроцедуры + +// Признак того, что это загрузка в информационную базу. +// +// Возвращаемое значение: +// Булево - Признак режима загрузки данных +// +Функция РежимЗагрузкиДанныхВИнформационнуюБазу() Экспорт + + Возврат ПустаяСтрока(РежимЗагрузкиДанных) ИЛИ ВРег(РежимЗагрузкиДанных) = ВРег("ЗагрузкаВИнформационнуюБазу"); + +КонецФункции + +// Записывает объект в информационную базу. +// +// Параметры: +// Объект - Записываемый объект. +// Тип - Строка - Тип объекта строкой. +// +Процедура ЗаписатьОбъектВИБ(Объект, Тип, ЗаписатьОбъект = Ложь, Знач ОтправкаНазад = Ложь) Экспорт + + // в режиме загрузки в ТЗ объекты не записываем + Если РежимЗагрузкиДанныхВТаблицуЗначений() Тогда + Возврат; + КонецЕсли; + + Отказ = Ложь; + + // устанавливаем режим загрузки данных для объекта + УстановитьОбменДаннымиЗагрузка(Объект,, ОтправкаНазад); + + // выполняем проверку на пометку удаления предопределенного элемента + СнятьПометкуУдаленияСПредопределенногоЭлемента(Объект, Тип); + + ОбменДаннымиПереопределяемый.ПередЗаписьюОбъекта(Объект, Отказ); + + Если Отказ Тогда + + НайденЗапретЗагрузкиДанных = Объект.ДополнительныеСвойства.Свойство("НайденЗапретЗагрузкиДанных"); + + Если НайденЗапретЗагрузкиДанных Тогда + + // При возникновении коллизии дат запрета изменений загрузку не прерываем. Фиксируем ошибку в протоколе. + СтрокаСообщенияОбОшибке = ""; + Объект.ДополнительныеСвойства.Свойство("НайденЗапретЗагрузкиДанных", СтрокаСообщенияОбОшибке); + + ЗП = ПолучитьСтруктуруЗаписиПротокола(84, "{}: " + Строка(СтрокаСообщенияОбОшибке)); + ЗП.Объект = Объект; + ЗП.ТипОбъекта = Тип; + + ЗаписатьВПротоколВыполнения(84, ЗП, Ложь); + + КонецЕсли; + + ЗаписатьОбъект = Ложь; + Возврат; + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); + + НачатьТранзакцию(); + Попытка + + // записываем объект в транзакцию + Объект.Записать(); + + СоответствияОбъектовИнформационныхБаз = Неопределено; + Если Объект.ДополнительныеСвойства.Свойство("СоответствияОбъектовИнформационныхБаз", СоответствияОбъектовИнформационныхБаз) + И СоответствияОбъектовИнформационныхБаз <> Неопределено Тогда + + СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = Объект.Ссылка; + + РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СоответствияОбъектовИнформационныхБаз); + КонецЕсли; + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ЗаписатьОбъект = Ложь; + + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); + + Если Не ПродолжитьПриОшибке Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + КонецПопытки; + +КонецПроцедуры + +// Отменяет проведение объекта в информационной базе. +// +// Параметры: +// Объект - Объект для отмены проведения. +// Тип - Строка - Тип объекта строкой. +// +Процедура ОтменитьПроведениеОбъектаВИБ(Объект, Тип, ЗаписатьОбъект = Ложь) Экспорт + + Отказ = Ложь; + + // устанавливаем режим загрузки данных для объекта + УстановитьОбменДаннымиЗагрузка(Объект); + + ОбменДаннымиПереопределяемый.ПередЗаписьюОбъекта(Объект, Отказ); + + Если Отказ Тогда + + НайденЗапретЗагрузкиДанных = Объект.ДополнительныеСвойства.Свойство("НайденЗапретЗагрузкиДанных"); + + Если НайденЗапретЗагрузкиДанных Тогда + + // При возникновении коллизии дат запрета изменений загрузку не прерываем. Фиксируем ошибку в протоколе. + СтрокаСообщенияОбОшибке = ""; + Объект.ДополнительныеСвойства.Свойство("НайденЗапретЗагрузкиДанных", СтрокаСообщенияОбОшибке); + + ЗП = ПолучитьСтруктуруЗаписиПротокола(84, "{}: " + Строка(СтрокаСообщенияОбОшибке)); + ЗП.Объект = Объект; + ЗП.ТипОбъекта = Тип; + + ЗаписатьВПротоколВыполнения(84, ЗП, Ложь); + + КонецЕсли; + + ЗаписатьОбъект = Ложь; + Возврат; + КонецЕсли; + + Объект.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); + + НачатьТранзакцию(); + Попытка + + // отменяем проведение документа + Объект.Проведен = Ложь; + Объект.Записать(); + + СоответствияОбъектовИнформационныхБаз = Неопределено; + Если Объект.ДополнительныеСвойства.Свойство("СоответствияОбъектовИнформационныхБаз", СоответствияОбъектовИнформационныхБаз) + И СоответствияОбъектовИнформационныхБаз <> Неопределено Тогда + + СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = Объект.Ссылка; + + РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СоответствияОбъектовИнформационныхБаз); + КонецЕсли; + + УдалитьДвиженияУДокумента(Объект, Отказ); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + + ЗаписатьОбъект = Ложь; + + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); + + Если Не ПродолжитьПриОшибке Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + КонецПопытки; + +КонецПроцедуры + +// Производит выгрузку объекта в соответствии с указанным правилом конвертации +// +// Параметры: +// Источник - произвольный источник данных +// Приемник - xml-узел объекта приемника +// ВходящиеДанные - произвольные вспомогательные данные, передаваемые правилу +// для выполнения конвертации +// ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам +// конвертации свойств +// ИмяПКО - имя правила конвертации, согласно которому осуществляется выгрузка +// УзелСсылки - xml-узел ссылки объекта приемника +// ТолькоПолучитьУзелСсылки - если Истина, то выгрузка объекта не производится, только формируется +// xml-узел ссылки +// ПКО - ссылка на правило конвертации +// +// Возвращаемое значение: +// xml-узел ссылки или значение приемника +// +// +Функция ВыгрузитьПоПравилу(Источник = Неопределено, + Приемник = Неопределено, + ВходящиеДанные = Неопределено, + ИсходящиеДанные = Неопределено, + ИмяПКО = "", + УзелСсылки = Неопределено, + ТолькоПолучитьУзелСсылки = Ложь, + ПКО = Неопределено, + ВыгружатьСсылкиУПодчиненныхОбъектов = Истина, + ВыгрузкаСтрокиНабораЗаписейРегистра = Ложь, + УзелПредка = Неопределено, + ИмяКонстантыДляВыгрузки = "", + ЭтоВыгружаетсяОбъект = Неопределено, + ЭтоПравилоСГлобальнойВыгрузкойОбъектов = Ложь, + НеИспользоватьПравилоСГлобальнойВыгрузкойИНеЗапоминатьВыгруженные = Ложь) Экспорт + // + + ОпределитьПКОПоПараметрам(ПКО, Источник, ИмяПКО); + + Если ПКО = Неопределено Тогда + + ЗП = ПолучитьСтруктуруЗаписиПротокола(45); + + ЗП.Объект = Источник; + Попытка + ЗП.ТипОбъекта = ТипЗнч(Источник); + Исключение + КонецПопытки; + + ЗаписатьВПротоколВыполнения(45, ЗП, Истина); // не найдено ПКО + Возврат Неопределено; + + КонецЕсли; + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1; + + Если ФлагКомментироватьОбработкуОбъектов Тогда + + Попытка + ИсточникВСтроку = Строка(Источник); + Исключение + ИсточникВСтроку = " "; + КонецПопытки; + + ПрОбъекта = ИсточникВСтроку + " (" + ТипЗнч(Источник) + ")"; + + СтрокаНазванияПКО = " ПКО: " + СокрЛП(ИмяПКО) + " (" + СокрЛП(ПКО.Наименование) + ")"; + + Если ТолькоПолучитьУзелСсылки Тогда + СтрокаПользователю = "Конвертация ссылки на объект: "; + Иначе + СтрокаПользователю = "Конвертация объекта: "; + КонецЕсли; + + ЗаписатьВПротоколВыполнения(СтрокаПользователю + ПрОбъекта + СтрокаНазванияПКО, , Ложь, ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1, 7); + + КонецЕсли; + + ЭтоПравилоСГлобальнойВыгрузкойОбъектов = Ложь; + + ЗапоминатьВыгруженные = Ложь; + ВыгруженныеОбъекты = ПКО.Выгруженные; + ВсеОбъектыВыгружены = ПКО.ВсеОбъектыВыгружены; + НеЗамещатьОбъектПриЗагрузке = ПКО.НеЗамещать; + НеСоздаватьЕслиНеНайден = ПКО.НеСоздаватьЕслиНеНайден; + ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD = ПКО.ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD; + НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике = ПКО.НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике; + ПриоритетОбъектовОбмена = ПКО.ПриоритетОбъектовОбмена; + + РегистрироватьОбъектНаУзлеОтправителе = Ложь; + + ПрефиксАвтонумерации = ""; + РежимЗаписи = ""; + РежимПроведения = ""; + СписокВременныхФайлов = Неопределено; + + ИмяТипа = ""; + ВыгружатьСвойстваОбъекта = Истина; + + СтруктураСвойств = НайтиСтруктуруСвойствПоПараметрам(ПКО, Источник); + + Если СтруктураСвойств <> Неопределено Тогда + ИмяТипа = СтруктураСвойств.ИмяТипа; + КонецЕсли; + + КлючВыгружаемыхДанных = ИмяПКО; + + ЭтоНеСсылочныйТип = ИмяТипа = "Константы" + ИЛИ ИмяТипа = "РегистрСведений" + ИЛИ ИмяТипа = "РегистрНакопления" + ИЛИ ИмяТипа = "РегистрБухгалтерии" + ИЛИ ИмяТипа = "РегистрРасчета" + ; + + Если ЭтоНеСсылочныйТип + ИЛИ ПустаяСтрока(ИмяТипа) Тогда + + ЗапоминатьВыгруженные = Ложь; + + КонецЕсли; + + СсылкаНаИсточник = Неопределено; + ВыгружаетсяОбъект = ЭтоВыгружаетсяОбъект; + + Если (Источник <> Неопределено) + И НЕ ЭтоНеСсылочныйТип Тогда + + Если ВыгружаетсяОбъект = Неопределено Тогда + // если не указано что выгружается, то считаем что выгружается объект + ВыгружаетсяОбъект = Истина; + КонецЕсли; + + СсылкаНаИсточник = ОпределитьСсылкуПоОбъектуИлиСсылке(Источник, ВыгружаетсяОбъект); + Если ЗапоминатьВыгруженные Тогда + КлючВыгружаемыхДанных = ОпределитьВнутреннеПредставлениеДляПоиска(СсылкаНаИсточник, СтруктураСвойств); + КонецЕсли; + + Иначе + + ВыгружаетсяОбъект = Ложь; + + КонецЕсли; + + // Переменная для хранения имени предопределенного элемента + ИмяПредопределенногоЭлемента = Неопределено; + + // Глобальный обработчик ПередКонвертациейОбъекта + Отказ = Ложь; + Если ЕстьГлобальныйОбработчикПередКонвертациейОбъекта Тогда + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередКонвертациейОбъекта); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередКонвертациейОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, + ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, ЗапоминатьВыгруженные, + НеЗамещатьОбъектПриЗагрузке, ВсеОбъектыВыгружены,ТолькоПолучитьУзелСсылки, + Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден + ); + + КонецЕсли; + + + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ОписаниеОшибки(), ПКО, Источник, НСтр("ru = 'ПередКонвертациейОбъекта (глобальный)'")); + КонецПопытки; + + Если Отказ Тогда // Отказ от дальнейшей обработки правила + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат Приемник; + КонецЕсли; + + КонецЕсли; + + + // Обработчик ПередВыгрузкой + Если ПКО.ЕстьОбработчикПередВыгрузкой Тогда + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКО.ПередВыгрузкой); + + Иначе + + ВыполнитьОбработчик_ПКО_ПередВыгрузкойОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, + ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, ЗапоминатьВыгруженные, + НеЗамещатьОбъектПриЗагрузке, ВсеОбъектыВыгружены, ТолькоПолучитьУзелСсылки, + Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден + ); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ОписаниеОшибки(), ПКО, Источник, "ПередВыгрузкойОбъекта"); + КонецПопытки; + + Если Отказ Тогда // Отказ от дальнейшей обработки правила + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат Приемник; + КонецЕсли; + + КонецЕсли; + + СтрокаВСтекеВыгрузки = Неопределено; + + НужноОбновитьЛокальныйКЭШВыгруженныхОбъектов = Ложь; + ЗначениеСсылкиВДругойИБ = ""; + + // Возможно такие данные уже выгружались + Если Не ВсеОбъектыВыгружены Тогда + + Нпп = 0; + + Если ЗапоминатьВыгруженные Тогда + + СтрокаВыгруженныхОбъектов = ВыгруженныеОбъекты.Найти(КлючВыгружаемыхДанных, "Ключ"); + + Если СтрокаВыгруженныхОбъектов <> Неопределено Тогда + + СтрокаВыгруженныхОбъектов.КоличествоОбращений = СтрокаВыгруженныхОбъектов.КоличествоОбращений + 1; + СтрокаВыгруженныхОбъектов.НомерПоследнегоОбращения = СчетчикНПП; + + Если ТолькоПолучитьУзелСсылки Тогда + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Если Найти(СтрокаВыгруженныхОбъектов.УзелСсылки, "<Ссылка") > 0 + И НППЗаписанногоВФайл >= СтрокаВыгруженныхОбъектов.НППСсылки Тогда + Возврат СтрокаВыгруженныхОбъектов.НППСсылки; + Иначе + Возврат СтрокаВыгруженныхОбъектов.УзелСсылки; + КонецЕсли; + + КонецЕсли; + + НомерВыгруженнойСсылки = СтрокаВыгруженныхОбъектов.НППСсылки; + + Если НЕ СтрокаВыгруженныхОбъектов.ВыгруженаТолькоСсылка Тогда + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат СтрокаВыгруженныхОбъектов.УзелСсылки; + + Иначе + + СтрокаВСтекеВыгрузки = СтекВызововВыгрузкиДанных.Найти(КлючВыгружаемыхДанных, "Ссылка"); + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат Неопределено; + КонецЕсли; + + СтрокаВСтекеВыгрузки = СтекВызововВыгрузкиДанных.Добавить(); + СтрокаВСтекеВыгрузки.Ссылка = КлючВыгружаемыхДанных; + + Нпп = НомерВыгруженнойСсылки; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + Если Нпп = 0 Тогда + + СчетчикНПП = СчетчикНПП + 1; + Нпп = СчетчикНПП; + + + // Это позволит избежать циклических ссылок + Если ЗапоминатьВыгруженные Тогда + + Если СтрокаВыгруженныхОбъектов = Неопределено Тогда + + Если НЕ ЭтоПравилоСГлобальнойВыгрузкойОбъектов + И НЕ НужноОбновитьЛокальныйКЭШВыгруженныхОбъектов + И ВыгруженныеОбъекты.Количество() > ЧислоХранимыхВыгруженныхОбъектовПоТипам Тогда + + НужноОбновитьЛокальныйКЭШВыгруженныхОбъектов = Истина; + СоответствиеДанныхДляОбновленияВыгруженныхЭлементов.Вставить(ПКО.Приемник, ПКО); + + КонецЕсли; + + СтрокаВыгруженныхОбъектов = ВыгруженныеОбъекты.Добавить(); + + КонецЕсли; + + СтрокаВыгруженныхОбъектов.Ключ = КлючВыгружаемыхДанных; + СтрокаВыгруженныхОбъектов.УзелСсылки = НПП; + СтрокаВыгруженныхОбъектов.НППСсылки = НПП; + СтрокаВыгруженныхОбъектов.НомерПоследнегоОбращения = НПП; + + Если ТолькоПолучитьУзелСсылки Тогда + + СтрокаВыгруженныхОбъектов.ВыгруженаТолькоСсылка = Истина; + + Иначе + + СтрокаВСтекеВыгрузки = СтекВызововВыгрузкиДанных.Добавить(); + СтрокаВСтекеВыгрузки.Ссылка = КлючВыгружаемыхДанных; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + СоответствиеЗначений = ПКО.Значения; + КоличествоЭлементовСоответствияЗначений = СоответствиеЗначений.Количество(); + + // Обработка соответствий предопределенных элементов + Если ИмяПредопределенногоЭлемента = Неопределено Тогда + + Если СтруктураСвойств <> Неопределено + И КоличествоЭлементовСоответствияЗначений > 0 + И СтруктураСвойств.ВозможенПоискПоПредопределенным Тогда + + Попытка + ИмяПредопределенногоИсточник = СтруктураСвойств.Менеджер.ПолучитьИмяПредопределенного(СсылкаНаИсточник) + Исключение + ИмяПредопределенногоИсточник = ""; + КонецПопытки; + + Иначе + + ИмяПредопределенногоИсточник = ""; + + Конецесли; + + Если НЕ ПустаяСтрока(ИмяПредопределенногоИсточник) + И КоличествоЭлементовСоответствияЗначений > 0 Тогда + + ИмяПредопределенногоЭлемента = СоответствиеЗначений[СсылкаНаИсточник]; + + Иначе + ИмяПредопределенногоЭлемента = Неопределено; + КонецЕсли; + + КонецЕсли; + + Если ИмяПредопределенногоЭлемента <> Неопределено Тогда + КоличествоЭлементовСоответствияЗначений = 0; + КонецЕсли; + + НеНужноВыгружатьПоСоответствиюЗначений = (КоличествоЭлементовСоответствияЗначений = 0); + + Если Не НеНужноВыгружатьПоСоответствиюЗначений Тогда + + // если нет объекта в соответствии значений - выгружаем его штатным образом + УзелСсылки = СоответствиеЗначений[СсылкаНаИсточник]; + Если УзелСсылки = Неопределено Тогда + + // возможно это конвертация из перечисления в перечисление и мы просто не нашли по + //ПКЗ нужное свойство - тогда просто выгружаем пустую ссылку и все + Если СтруктураСвойств.ИмяТипа = "Перечисление" + И Найти(ПКО.Приемник, "ПеречислениеСсылка.") > 0 Тогда + + // записываем ошибку в протокол выполнения + ЗП = ПолучитьСтруктуруЗаписиПротокола(); + ЗП.ИмяПКО = ИмяПКО; + ЗП.Значение = Источник; + ЗП.ТипЗначения = СтруктураСвойств.ТипСсылкиСтрокой; + ЗП.КСообщенияОбОшибках = 71; + ЗП.Текст = НСтр("ru = 'В правиле конвертации значений (ПКЗ) необходимо сопоставить значение Источника значению Приемника. + |Если подходящего значения приемника нет, то указать пустое значение.'"); + // + ЗаписатьВПротоколВыполнения(71, ЗП); + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + + Возврат Неопределено; + + Иначе + + НеНужноВыгружатьПоСоответствиюЗначений = Истина; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + НЕВыгружатьПодчиненныеОбъекты = ТолькоПолучитьУзелСсылки ИЛИ НЕ ВыгружатьСсылкиУПодчиненныхОбъектов; + + НужноЗапоминатьОбъект = ЗапоминатьВыгруженные И (Не ВсеОбъектыВыгружены); + + Если НеНужноВыгружатьПоСоответствиюЗначений Тогда + + Если ПКО.СвойстваПоиска.Количество() > 0 + ИЛИ ИмяПредопределенногоЭлемента <> Неопределено Тогда + + // Формируем узел ссылки + УзелСсылки = СоздатьУзел("Ссылка"); + + Если НужноЗапоминатьОбъект Тогда + + Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда + УстановитьАтрибут(УзелСсылки, "ГНпп", Нпп); + Иначе + УстановитьАтрибут(УзелСсылки, "Нпп", Нпп); + КонецЕсли; + + КонецЕсли; + + Если НеСоздаватьЕслиНеНайден Тогда + УстановитьАтрибут(УзелСсылки, "НеСоздаватьЕслиНеНайден", НеСоздаватьЕслиНеНайден); + КонецЕсли; + + Если ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли Тогда + УстановитьАтрибут(УзелСсылки, "ПродолжитьПоиск", Истина); + КонецЕсли; + + Если РегистрироватьОбъектНаУзлеОтправителе Тогда + УстановитьАтрибут(УзелСсылки, "РегистрироватьОбъектНаУзлеОтправителе", РегистрироватьОбъектНаУзлеОтправителе); + КонецЕсли; + + ЗаписатьПриоритетОбъектовОбмена(ПриоритетОбъектовОбмена, УзелСсылки); + + Если НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике Тогда + УстановитьАтрибут(УзелСсылки, "НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике", НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике); + КонецЕсли; + + ВыгрузитьТолькоСсылку = ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ НЕВыгружатьПодчиненныеОбъекты; + + Если ВыгружатьСвойстваОбъекта = Истина Тогда + + ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.СвойстваПоиска, + УзелСсылки, , ИмяПредопределенногоЭлемента, Истина, + Истина, ВыгружаетсяОбъект, КлючВыгружаемыхДанных, , ЗначениеСсылкиВДругойИБ); + + КонецЕсли; + + УзелСсылки.ЗаписатьКонецЭлемента(); + УзелСсылки = УзелСсылки.Закрыть(); + + Если НужноЗапоминатьОбъект Тогда + + СтрокаВыгруженныхОбъектов.УзелСсылки = УзелСсылки; + + КонецЕсли; + + Иначе + УзелСсылки = Нпп; + КонецЕсли; + + Иначе + + // Поиск в соответствии значений по ПКЗ + Если УзелСсылки = Неопределено Тогда + + // записываем ошибку в протокол выполнения + ЗП = ПолучитьСтруктуруЗаписиПротокола(); + ЗП.ИмяПКО = ИмяПКО; + ЗП.Значение = Источник; + ЗП.ТипЗначения = ТипЗнч(Источник); + ЗП.КСообщенияОбОшибках = 71; + + ЗаписатьВПротоколВыполнения(71, ЗП); + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат Неопределено; + КонецЕсли; + + Если ЗапоминатьВыгруженные Тогда + СтрокаВыгруженныхОбъектов.УзелСсылки = УзелСсылки; + КонецЕсли; + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + + КонецЕсли; + + + Если ТолькоПолучитьУзелСсылки + Или ВсеОбъектыВыгружены Тогда + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + + КонецЕсли; + + Если Приемник = Неопределено Тогда + + Приемник = СоздатьУзел("Объект"); + + Если НЕ ВыгрузкаСтрокиНабораЗаписейРегистра Тогда + + Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда + УстановитьАтрибут(Приемник, "ГНпп", Нпп); + Иначе + УстановитьАтрибут(Приемник, "Нпп", Нпп); + КонецЕсли; + + УстановитьАтрибут(Приемник, "Тип", ПКО.Приемник); + УстановитьАтрибут(Приемник, "ИмяПравила", ПКО.Имя); + + Если НЕ ПустаяСтрока(ИмяКонстантыДляВыгрузки) Тогда + + УстановитьАтрибут(Приемник, "ИмяКонстанты", ИмяКонстантыДляВыгрузки); + + КонецЕсли; + + ЗаписатьПриоритетОбъектовОбмена(ПриоритетОбъектовОбмена, Приемник); + + Если НеЗамещатьОбъектПриЗагрузке Тогда + УстановитьАтрибут(Приемник, "НеЗамещать", "true"); + КонецЕсли; + + Если Не ПустаяСтрока(ПрефиксАвтонумерации) Тогда + УстановитьАтрибут(Приемник, "ПрефиксАвтонумерации", ПрефиксАвтонумерации); + КонецЕсли; + + Если Не ПустаяСтрока(РежимЗаписи) Тогда + + УстановитьАтрибут(Приемник, "РежимЗаписи", РежимЗаписи); + Если Не ПустаяСтрока(РежимПроведения) Тогда + УстановитьАтрибут(Приемник, "РежимПроведения", РежимПроведения); + КонецЕсли; + + КонецЕсли; + + Если ТипЗнч(УзелСсылки) <> ТипЧисло Тогда + ДобавитьПодчиненный(Приемник, УзелСсылки); + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + // Обработчик ПриВыгрузке + СтандартнаяОбработка = Истина; + Отказ = Ложь; + + Если ПКО.ЕстьОбработчикПриВыгрузке Тогда + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКО.ПриВыгрузке); + + Иначе + + ВыполнитьОбработчик_ПКО_ПриВыгрузкеОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, + ПКО, ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, + СтандартнаяОбработка, Приемник, УзелСсылки + ); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ОписаниеОшибки(), ПКО, Источник, "ПриВыгрузкеОбъекта"); + КонецПопытки; + + Если Отказ Тогда // отказ от записи объекта в файл + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + КонецЕсли; + + КонецЕсли; + + // Выгрузка свойств + Если СтандартнаяОбработка Тогда + + Если НЕ ПустаяСтрока(ИмяКонстантыДляВыгрузки) Тогда + + МассивСвойствДляВыгрузки = Новый Массив(); + + СтрокаТаблицы = ПКО.Свойства.Найти(ИмяКонстантыДляВыгрузки, "Источник"); + + Если СтрокаТаблицы <> Неопределено Тогда + МассивСвойствДляВыгрузки.Добавить(СтрокаТаблицы); + КонецЕсли; + + Иначе + + МассивСвойствДляВыгрузки = ПКО.Свойства; + + КонецЕсли; + + Если ВыгружатьСвойстваОбъекта Тогда + + ВыгрузитьСвойства( + Источник, // Источник + Приемник, // Приемник + ВходящиеДанные, // ВходящиеДанные + ИсходящиеДанные, // ИсходящиеДанные + ПКО, // ПКО + МассивСвойствДляВыгрузки, // КоллекцияПКС + , // УзелКоллекцииСвойств = Неопределено + , // ОбъектКоллекции = Неопределено + , // ИмяПредопределенногоЭлемента = Неопределено + Истина, // Знач ВыгрузитьТолькоСсылку = Истина + Ложь, // Знач ЭтоВыгрузкаСсылки = Ложь + ВыгружаетсяОбъект, // Знач ВыгружаетсяОбъект = Ложь + КлючВыгружаемыхДанных, // КлючПоискаСсылки = "" + , // НеИспользоватьПравилаСГлобальнойВыгрузкойИНеЗапоминатьВыгруженные = Ложь + ЗначениеСсылкиВДругойИБ, // ЗначениеСсылкиВДругойИБ + СписокВременныхФайлов, // СписокВременныхФайлов = Неопределено + ВыгрузкаСтрокиНабораЗаписейРегистра // ВыгрузкаСтрокиНабораЗаписейРегистра = Ложь + ); + + КонецЕсли; + + КонецЕсли; + + // Обработчик ПослеВыгрузки + + Если ПКО.ЕстьОбработчикПослеВыгрузки Тогда + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКО.ПослеВыгрузки); + + Иначе + + ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, + ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, Приемник, УзелСсылки + ); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ОписаниеОшибки(), ПКО, Источник, "ПослеВыгрузкиОбъекта"); + КонецПопытки; + + Если Отказ Тогда // отказ от записи объекта в файл + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + Возврат УзелСсылки; + КонецЕсли; + КонецЕсли; + + + // Запись объекта в файл + УвеличитьСчетчикВыгруженныхОбъектов(); + + ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; + + Если УзелПредка <> Неопределено Тогда + + Приемник.ЗаписатьКонецЭлемента(); + + УзелПредка.ЗаписатьБезОбработки(Приемник.Закрыть()); + + Иначе + + Если СписокВременныхФайлов = Неопределено Тогда + + Приемник.ЗаписатьКонецЭлемента(); + ЗаписатьВФайл(Приемник); + + Иначе + + ЗаписатьВФайл(Приемник); + + ВременныйФайл = Новый ЧтениеТекста; + Для каждого ИмяВременногоФайла Из СписокВременныхФайлов Цикл + + Попытка + ВременныйФайл.Открыть(ИмяВременногоФайла, КодировкаТекста.UTF8); + Исключение + Продолжить; + КонецПопытки; + + СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); + Пока СтрокаВременногоФайла <> Неопределено Цикл + ЗаписатьВФайл(СтрокаВременногоФайла); + СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); + КонецЦикла; + + ВременныйФайл.Закрыть(); + + // удалить файлы + Попытка + УдалитьФайлы(ИмяВременногоФайла); + Исключение + КонецПопытки; + + КонецЦикла; + + ЗаписатьВФайл("</Объект>"); + + КонецЕсли; + + Если НужноЗапоминатьОбъект + И ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда + + СтрокаВыгруженныхОбъектов.УзелСсылки = НПП; + + КонецЕсли; + + Если ТекущийУровеньВложенностиВыгрузитьПоПравилу = 0 Тогда + + ПровестиУстановкуПризнаковВыгруженныхОбъектовВФайл(); + + КонецЕсли; + + ПровестиОбновлениеДанныхВВыгружаемыхДанных(); + + КонецЕсли; + + Если СтрокаВСтекеВыгрузки <> Неопределено Тогда + СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); + КонецЕсли; + + // Обработчик ПослеВыгрузкиВФайл + Если ПКО.ЕстьОбработчикПослеВыгрузкиВФайл Тогда + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКО.ПослеВыгрузкиВФайл); + + Иначе + + ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъектаВФайлОбмена(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, + ИмяПКО, ПКО, ВыгруженныеОбъекты, Приемник, УзелСсылки + ); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(79, ОписаниеОшибки(), ПКО, Источник, "ЕстьОбработчикПослеВыгрузкиВФайл"); + КонецПопытки; + + КонецЕсли; + + Возврат УзелСсылки; + +КонецФункции + +// Выгружает регистр по отбору. +// +// Парметры: +// НаборЗаписейДляВыгрузки - Структура или НаборЗаписей - Отбор +// +Процедура ВыгрузитьРегистр(НаборЗаписейДляВыгрузки, + Правило = Неопределено, + ВходящиеДанные = Неопределено, + НеВыгружатьОбъектыПоСсылкам = Ложь, + ИмяПКО = "", + ПравилоВыгрузкиДанных = Неопределено) Экспорт + + ИсходящиеДанные = Неопределено; + + + ОпределитьПКОПоПараметрам(Правило, НаборЗаписейДляВыгрузки, ИмяПКО); + + Отказ = Ложь; + Свойства = Неопределено; + ВходящиеДанные = Неопределено; + ПриоритетОбъектовОбмена = Правило.ПриоритетОбъектовОбмена; + + Если ТипЗнч(НаборЗаписейДляВыгрузки) = Тип("Структура") Тогда + + ОтборНабораЗаписей = НаборЗаписейДляВыгрузки.Отбор; + СтрокиНабораЗаписей = НаборЗаписейДляВыгрузки.Строки; + + Иначе // НаборЗаписей + + ОтборНабораЗаписей = НаборЗаписейДляВыгрузки.Отбор; + СтрокиНабораЗаписей = НаборЗаписейДляВыгрузки; + + КонецЕсли; + + // записываем сначала отбор потом набор записей + // отбор + + Приемник = СоздатьУзел("НаборЗаписейРегистра"); + + КоличествоЗаписейВРегистре = СтрокиНабораЗаписей.Количество(); + + СчетчикНПП = СчетчикНПП + 1; + Нпп = СчетчикНПП; + + УстановитьАтрибут(Приемник, "Нпп", Нпп); + УстановитьАтрибут(Приемник, "Тип", СтрЗаменить(Правило.Приемник, "РегистрСведенийЗапись.", "РегистрСведенийНаборЗаписей.")); + УстановитьАтрибут(Приемник, "ИмяПравила", Правило.Имя); + + ЗаписатьПриоритетОбъектовОбмена(ПриоритетОбъектовОбмена, Приемник); + + ВыгружаемПустойНабор = КоличествоЗаписейВРегистре = 0; + Если ВыгружаемПустойНабор Тогда + УстановитьАтрибут(Приемник, "ПустойНабор", Истина); + КонецЕсли; + + Приемник.ЗаписатьНачалоЭлемента("Отбор"); + + СтруктураИсточник = Новый Структура; + МассивПКСДляВыгрузки = Новый Массив(); + + Для Каждого СтрокаОтбора Из ОтборНабораЗаписей Цикл + + Если СтрокаОтбора.Использование = Ложь Тогда + Продолжить; + КонецЕсли; + + СтрокаПКС = Правило.Свойства.Найти(СтрокаОтбора.Имя, "Источник"); + + Если СтрокаПКС = Неопределено Тогда + + СтрокаПКС = Правило.Свойства.Найти(СтрокаОтбора.Имя, "Приемник"); + + КонецЕсли; + + Если СтрокаПКС <> Неопределено + И (СтрокаПКС.ВидПриемника = "Свойство" + ИЛИ СтрокаПКС.ВидПриемника = "Измерение") Тогда + + МассивПКСДляВыгрузки.Добавить(СтрокаПКС); + + Ключ = ?(ПустаяСтрока(СтрокаПКС.Источник), СтрокаПКС.Приемник, СтрокаПКС.Источник); + + СтруктураИсточник.Вставить(Ключ, СтрокаОтбора.Значение); + + КонецЕсли; + + КонецЦикла; + + // добавляем параметры для отбора + Для Каждого СтрокаСвойстваПоиска Из Правило.СвойстваПоиска Цикл + + Если ПустаяСтрока(СтрокаСвойстваПоиска.Приемник) + И НЕ ПустаяСтрока(СтрокаСвойстваПоиска.ИмяПараметраДляПередачи) Тогда + + МассивПКСДляВыгрузки.Добавить(СтрокаСвойстваПоиска); + + КонецЕсли; + + КонецЦикла; + + ВыгрузитьСвойства(СтруктураИсточник, , ВходящиеДанные, ИсходящиеДанные, Правило, МассивПКСДляВыгрузки, Приемник, + , , Истина, , , , ВыгружаемПустойНабор); + + Приемник.ЗаписатьКонецЭлемента(); + + Приемник.ЗаписатьНачалоЭлемента("СтрокиНабораЗаписей"); + + // набор записей ВходящиеДанные = Неопределено; + Для Каждого СтрокаРегистра Из СтрокиНабораЗаписей Цикл + + ВыгрузкаОбъектаВыборки(СтрокаРегистра, ПравилоВыгрузкиДанных, , ВходящиеДанные, НеВыгружатьОбъектыПоСсылкам, Истина, + Приемник, , ИмяПКО, ЛОЖЬ); + + КонецЦикла; + + Приемник.ЗаписатьКонецЭлемента(); + + Приемник.ЗаписатьКонецЭлемента(); + + ЗаписатьВФайл(Приемник); + + ПровестиОбновлениеДанныхВВыгружаемыхДанных(); + + ПровестиУстановкуПризнаковВыгруженныхОбъектовВФайл(); + + Инкремент(ПолеСчетчикВыгруженныхОбъектов, 1 - СтрокиНабораЗаписей.Количество()); + +КонецПроцедуры + +// Устанавлявает пометку удаления. +// +// Параметры: +// Объект - Объект для установки пометки. +// ПометкаУдаления - Булево - Флаг пометки удаления. +// ИмяТипаОбъекта - Строка - Тип объекта строкой. +// +Процедура УстановитьПометкуУдаленияУОбъекта(Объект, ПометкаУдаления, ИмяТипаОбъекта) Экспорт + + Если (ПометкаУдаления = Неопределено) + И (Объект.ПометкаУдаления <> Истина) Тогда + Возврат; + КонецЕсли; + + ПометкаДляУстановки = ?(ПометкаУдаления <> Неопределено, ПометкаУдаления, Ложь); + + УстановитьОбменДаннымиЗагрузка(Объект); + + // дли иерархических объектов пометку удаления только у конкретного объекта ставим + Если ИмяТипаОбъекта = "Справочник" + ИЛИ ИмяТипаОбъекта = "ПланВидовХарактеристик" + ИЛИ ИмяТипаОбъекта = "ПланСчетов" Тогда + + Если Не ЭтоПредопределенныйЭлемент(Объект) Тогда + + Объект.УстановитьПометкуУдаления(ПометкаДляУстановки, Ложь); + + КонецЕсли; + + Иначе + + Объект.УстановитьПометкуУдаления(ПометкаДляУстановки); + + КонецЕсли; + +КонецПроцедуры + +// Устанавливает значение параметра "Загрузка" для свойства объекта "ОбменДанными". +// +// Параметры: +// Объект - объект, для которого устанавливается свойство +// Значение - значение устанавливаемого свойства "Загрузка" +// +// +Процедура УстановитьОбменДаннымиЗагрузка(Объект, Значение = Истина, Знач ОтправкаНазад = Ложь) Экспорт + + // не все объекты, которые участвуют в обмене, имеют свойство "ОбменДанными" + Попытка + Объект.ОбменДанными.Загрузка = Значение; + Исключение + КонецПопытки; + + Если Не ОтправкаНазад + И УзелОбменаЗагрузкаДанных <> Неопределено + И НЕ УзелОбменаЗагрузкаДанных.Пустая() Тогда + + Попытка + Объект.ОбменДанными.Отправитель = УзелОбменаЗагрузкаДанных; + Исключение + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры // УстановитьОбменДаннымиЗагрузка() + //////////////////////////////////////////////////////////////////////////////// // ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ ДЛЯ НАПИСАНИЯ АЛГОРИТМОВ @@ -1427,7 +2682,7 @@ // Возвращаемое значение: // Строка - код или номер, приведенная к требуемой длине. // -Функция ПривестиНомерКДлине(Знач Стр, Длина, ДобавлятьНулиЕслиДлинаНеМеньшеТекущейДлиныНомера = Истина, Префикс = "") Экспорт +Функция ПривестиНомерКДлине(Знач Стр, Длина, ДобавлятьНулиЕслиДлинаНеМеньшеТекущейДлиныНомера = Истина, Префикс = "") Стр = СокрЛП(Стр); ВходящаяДлинаНомера = СтрДлина(Стр); @@ -1457,73 +2712,6 @@ КонецФункции // ПривестиНомерКДлине() -// Добавляет к префиксу номера или кода подстроку -// Функция может быть использована в обработчиках событий, программный код -// которых хранится в правила обмена данными. Вызывается методом Выполнить() -// Сообщение "Не обнаружено ссылок на функцию" при проверке конфигурации -// не является ошибкой проверки конфигурации -// -// Параметры: -// Стр - Строка. Номер или код; -// Добавок - добавляемая к префиксу подстрока; -// Длина - требуемая результирующая длина строки; -// Режим - "Слева" - подстрока добавляется слева к префиксу, иначе - справа. -// -// Возвращаемое значение: -// Строка - номер или код, к префиксу которого добавлена указанная подстрока. -// -Функция ДобавитьКПрефиксу(Знач Стр, Добавок = "", Длина = "", Режим = "Слева", - НеДобавлятьПрефиксЕслиСНегоНачинаетсяНомер = Ложь, - ОбрезатьЧисловуюЧастьСлеваВСлучаеПревышенияНомера = Ложь) Экспорт - - Стр = СокрЛП(Формат(Стр,"ЧГ=0")); - - Если ПустаяСтрока(Длина) Тогда - Длина = СтрДлина(Стр); - КонецЕсли; - - ЧисловаяЧасть = ""; - Префикс = ПолучитьПрефиксЧислоНомера(Стр, ЧисловаяЧасть); - ДополнениеКПрефиксу = СокрЛП(Добавок); - - Если НеДобавлятьПрефиксЕслиСНегоНачинаетсяНомер Тогда - - Если Найти(Префикс, ДополнениеКПрефиксу) = 1 Тогда - Возврат Стр; - КонецЕсли; - - КонецЕсли; - - Если Режим = "Слева" Тогда - Результат = ДополнениеКПрефиксу + Префикс; - Иначе - Результат = Префикс + ДополнениеКПрефиксу; - КонецЕсли; - - СтрокаЧисловойЧасти = Формат(ЧисловаяЧасть, "ЧГ=0"); - ДлинаЧисловойЧасти = СтрДлина(СтрокаЧисловойЧасти); - ДлинаПрефикса = СтрДлина(Результат); - - Для НомерДобавления = 1 По Длина - ДлинаПрефикса - ДлинаЧисловойЧасти Цикл - Результат = Результат + "0"; - КонецЦикла; - - Если ОбрезатьЧисловуюЧастьСлеваВСлучаеПревышенияНомера - И ДлинаПрефикса + ДлинаЧисловойЧасти > Длина Тогда - - КоличествоСимволовУрезанияЧисловойЧасти = ДлинаЧисловойЧасти - Длина + ДлинаПрефикса; - Если КоличествоСимволовУрезанияЧисловойЧасти > 0 Тогда - СтрокаЧисловойЧасти = Сред(СтрокаЧисловойЧасти, КоличествоСимволовУрезанияЧисловойЧасти + 1); - КонецЕсли; - - КонецЕсли; - - Результат = Результат + СтрокаЧисловойЧасти; - - Возврат Результат; - -КонецФункции // ДобавитьКПрефиксу() - // Дополняет строку указанным символом до указанной длины. // // Параметры: @@ -1534,7 +2722,7 @@ // Возвращаемое значение: // Строка, дополненная указанным символом до указанной длины. // -Функция одДополнитьСтроку(Стр, Длина, Чем = " ") Экспорт +Функция одДополнитьСтроку(Стр, Длина, Чем = " ") Результат = СокрЛП(Стр); Пока Длина - СтрДлина(Результат) > 0 Цикл @@ -1867,7 +3055,7 @@ // Возвращаемое значение: // Объект нового xml-узла // -Функция СоздатьУзел(Имя) Экспорт +Функция СоздатьУзел(Имя) ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); @@ -1877,52 +3065,6 @@ КонецФункции // СоздатьУзел() -// Добавляет новый xml-узел к указанному узлу-родителю -// Функция может быть использована в обработчиках событий, программный код -// которых хранится в правила обмена данными. Вызывается методом Выполнить() -// Сообщение "Не обнаружено ссылок на функцию" при проверке конфигурации -// не является ошибкой проверки конфигурации -// -// Параметры: -// УзелРодитель - xml-узел-родитель -// Имя - имя добавляемого узла -// -// Возвращаемое значение: -// Новый xml-узел, добавленный к указанному узлу-родителю -// -Функция ДобавитьУзел(УзелРодитель, Имя) Экспорт - - УзелРодитель.ЗаписатьНачалоЭлемента(Имя); - - Возврат УзелРодитель; - -КонецФункции // ДобавитьУзел() - -// Копирует указанный xml-узел -// Функция может быть использована в обработчиках событий, программный код -// которых хранится в правила обмена данными. Вызывается методом Выполнить() -// Сообщение "Не обнаружено ссылок на функцию" при проверке конфигурации -// не является ошибкой проверки конфигурации -// -// Параметры: -// Узел - копируемый узел -// -// Возвращаемое значение: -// Новый xml - копия указанного узла -// -Функция КопироватьУзел(Узел) Экспорт - - Стр = Узел.Закрыть(); - - ЗаписьXML = Новый ЗаписьXML; - ЗаписьXML.УстановитьСтроку(); - - ЗаписьXML.ЗаписатьБезОбработки(Стр); - - Возврат ЗаписьXML; - -КонецФункции - // Осуществляет запись элемента и его значения в указанный объект // // Параметры: @@ -1930,7 +3072,7 @@ // Имя - Строка. Имя элемента // Значение - Значение элемента // -Процедура одЗаписатьЭлемент(Объект, Имя, Значение="") Экспорт +Процедура одЗаписатьЭлемент(Объект, Имя, Значение="") Объект.ЗаписатьНачалоЭлемента(Имя); Стр = XMLСтрока(Значение); @@ -1946,7 +3088,7 @@ // УзелРодитель - xml-узел-родитель // Узел - подчиняемый узел // -Процедура ДобавитьПодчиненный(УзелРодитель, Узел) Экспорт +Процедура ДобавитьПодчиненный(УзелРодитель, Узел) Если ТипЗнч(Узел) <> ТипСтрока Тогда Узел.ЗаписатьКонецЭлемента(); @@ -1966,7 +3108,7 @@ // Имя - имя атрибута // Значение - устанавливаемое значение // -Процедура УстановитьАтрибут(Узел, Имя, Значение) Экспорт +Процедура УстановитьАтрибут(Узел, Имя, Значение) СтрокаЗаписи = XMLСтрока(Значение); @@ -2334,7 +3476,7 @@ Уровень=0, Выравнивание=22, БезусловнаяЗаписьВПротоколОбмена = Ложь, - Знач РезультатВыполненияОбмена = Неопределено) + Знач РезультатВыполненияОбмена = Неопределено) Экспорт // Отступ = ""; Для Сч = 0 По Уровень-1 Цикл @@ -2455,7 +3597,7 @@ СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(КСообщенияОбОшибках, ЗП); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -2483,7 +3625,7 @@ СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(КСообщенияОбОшибках, ЗП); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -2504,7 +3646,7 @@ СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(КСообщенияОбОшибках, ЗП); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -2535,7 +3677,7 @@ СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(КСообщенияОбОшибках, ЗП); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -2554,7 +3696,7 @@ СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(КСообщенияОбОшибках, ЗП); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -2578,7 +3720,7 @@ // ПравилаОбмена - Объект типа XMLЧтение // ТаблицаСвойств - таблица значений, содержащая ПКС // -Процедура ЗагрузитьПКГС(ПравилаОбмена, ТаблицаСвойств, СвойстваОтключенные, СинхронизироватьПоИдентификатору) +Процедура ЗагрузитьПКГС(ПравилаОбмена, ТаблицаСвойств, СвойстваОтключенные, СинхронизироватьПоИдентификатору, ИмяПКО = "") ЭтоПолеОтключено = одАтрибут(ПравилаОбмена, ТипБулево, "Отключить"); @@ -2622,10 +3764,11 @@ ИначеЕсли ИмяУзла = "Свойство" Тогда - ЗагрузитьПКС(ПравилаОбмена, НоваяСтрока.ПравилаГруппы,, НоваяСтрока.ПравилаГруппыОтключенные, СтрокаПолейПоиска, СинхронизироватьПоИдентификатору); + РодительПКС = ?(ЗначениеЗаполнено(НоваяСтрока.Источник), "_" + НоваяСтрока.Источник, "_" + НоваяСтрока.Приемник); + ЗагрузитьПКС(ПравилаОбмена, НоваяСтрока.ПравилаГруппы,, НоваяСтрока.ПравилаГруппыОтключенные, СтрокаПолейПоиска, СинхронизироватьПоИдентификатору, ИмяПКО, РодительПКС); ИначеЕсли ИмяУзла = "ПередОбработкойВыгрузки" Тогда - НоваяСтрока.ПередОбработкойВыгрузки = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + НоваяСтрока.ПередОбработкойВыгрузки = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); НоваяСтрока.ЕстьОбработчикПередОбработкойВыгрузки = Не ПустаяСтрока(НоваяСтрока.ПередОбработкойВыгрузки); ИначеЕсли ИмяУзла = "ПослеОбработкиВыгрузки" Тогда @@ -2671,6 +3814,61 @@ КонецЦикла; + Если НоваяСтрока.ЕстьОбработчикПередОбработкойВыгрузки Тогда + + ИмяОбработчика = "ПКГС_[ИмяПКО][ИмяСвойстваПКС]_ПередОбработкойВыгрузки_[ИмяПКГС]_[ДлинаИмениПКО]"; + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", ИмяПКО); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяСвойстваПКС]", ИмяСвойстваПКС(НоваяСтрока)); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКГС]", НоваяСтрока.Имя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ДлинаИмениПКО]", СтрДлина(ИмяПКО)); + НоваяСтрока.ИмяОбработчикаПередОбработкойВыгрузки = ИмяОбработчика; + + КонецЕсли; + + Если НоваяСтрока.ЕстьОбработчикПослеОбработкиВыгрузки Тогда + + ИмяОбработчика = "ПКГС_[ИмяПКО][ИмяСвойстваПКС]_ПослеОбработкиВыгрузки_[ИмяПКГС]_[ДлинаИмениПКО]"; + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", ИмяПКО); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяСвойстваПКС]", ИмяСвойстваПКС(НоваяСтрока)); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКГС]", НоваяСтрока.Имя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ДлинаИмениПКО]", СтрДлина(ИмяПКО)); + НоваяСтрока.ИмяОбработчикаПослеОбработкиВыгрузки = ИмяОбработчика; + + КонецЕсли; + + Если НоваяСтрока.ЕстьОбработчикПередВыгрузкой Тогда + + ИмяОбработчика = "ПКГС_[ИмяПКО][ИмяСвойстваПКС]_ПередВыгрузкойСвойства_[ИмяПКГС]_[ДлинаИмениПКО]"; + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", ИмяПКО); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяСвойстваПКС]", ИмяСвойстваПКС(НоваяСтрока)); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКГС]", НоваяСтрока.Имя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ДлинаИмениПКО]", СтрДлина(ИмяПКО)); + НоваяСтрока.ИмяОбработчикаПередВыгрузкой = ИмяОбработчика; + + КонецЕсли; + + Если НоваяСтрока.ЕстьОбработчикПриВыгрузке Тогда + + ИмяОбработчика = "ПКГС_[ИмяПКО][ИмяСвойстваПКС]_ПриВыгрузкеСвойства_[ИмяПКГС]_[ДлинаИмениПКО]"; + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", ИмяПКО); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяСвойстваПКС]", ИмяСвойстваПКС(НоваяСтрока)); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКГС]", НоваяСтрока.Имя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ДлинаИмениПКО]", СтрДлина(ИмяПКО)); + НоваяСтрока.ИмяОбработчикаПриВыгрузке = ИмяОбработчика; + + КонецЕсли; + + Если НоваяСтрока.ЕстьОбработчикПослеВыгрузки Тогда + + ИмяОбработчика = "ПКГС_[ИмяПКО][ИмяСвойстваПКС]_ПослеВыгрузкиСвойства_[ИмяПКГС]_[ДлинаИмениПКО]"; + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", ИмяПКО); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяСвойстваПКС]", ИмяСвойстваПКС(НоваяСтрока)); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКГС]", НоваяСтрока.Имя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ДлинаИмениПКО]", СтрДлина(ИмяПКО)); + НоваяСтрока.ИмяОбработчикаПослеВыгрузки = ИмяОбработчика; + + КонецЕсли; + НоваяСтрока.СтрокаПолейПоиска = СтрокаПолейПоиска; НоваяСтрока.НуженУзелXMLПриВыгрузке = НоваяСтрока.ЕстьОбработчикПриВыгрузке ИЛИ НоваяСтрока.ЕстьОбработчикПослеВыгрузки; @@ -2705,7 +3903,9 @@ ТаблицаПоиска = Неопределено, СвойстваОтключенные, СтрокаПолейПоиска = "", - СинхронизироватьПоИдентификатору = Ложь) + СинхронизироватьПоИдентификатору = Ложь, + ИмяПКО = "", + ИмяРодителя = "") // ЭтоПолеОтключено = одАтрибут(ПравилаОбмена, ТипБулево, "Отключить"); @@ -2805,6 +4005,45 @@ КонецЦикла; + Если НоваяСтрока.ЕстьОбработчикПередВыгрузкой Тогда + + ИмяОбработчика = "ПКС_[ИмяПКО][ИмяРодителя][ИмяСвойстваПКС]_ПередВыгрузкойСвойства_[ИмяПКС]_[ДлинаИмениПКО]"; + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", ИмяПКО); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяРодителя]", ИмяРодителя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяСвойстваПКС]", ИмяСвойстваПКС(НоваяСтрока)); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКС]", НоваяСтрока.Имя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ДлинаИмениПКО]", СтрДлина(ИмяПКО)); + + НоваяСтрока.ИмяОбработчикаПередВыгрузкой = ИмяОбработчика; + + КонецЕсли; + + Если НоваяСтрока.ЕстьОбработчикПриВыгрузке Тогда + + ИмяОбработчика = "ПКС_[ИмяПКО][ИмяРодителя][ИмяСвойстваПКС]_ПриВыгрузкеСвойства_[ИмяПКС]_[ДлинаИмениПКО]"; + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", ИмяПКО); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяРодителя]", ИмяРодителя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяСвойстваПКС]", ИмяСвойстваПКС(НоваяСтрока)); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКС]", НоваяСтрока.Имя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ДлинаИмениПКО]", СтрДлина(ИмяПКО)); + + НоваяСтрока.ИмяОбработчикаПриВыгрузке = ИмяОбработчика; + + КонецЕсли; + + Если НоваяСтрока.ЕстьОбработчикПослеВыгрузки Тогда + + ИмяОбработчика = "ПКС_[ИмяПКО][ИмяРодителя][ИмяСвойстваПКС]_ПослеВыгрузкиСвойства_[ИмяПКС]_[ДлинаИмениПКО]"; + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", ИмяПКО); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяРодителя]", ИмяРодителя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяСвойстваПКС]", ИмяСвойстваПКС(НоваяСтрока)); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ИмяПКС]", НоваяСтрока.Имя); + ИмяОбработчика = СтрЗаменить(ИмяОбработчика, "[ДлинаИмениПКО]", СтрДлина(ИмяПКО)); + + НоваяСтрока.ИмяОбработчикаПослеВыгрузки = ИмяОбработчика; + + КонецЕсли; + НоваяСтрока.УпрощеннаяВыгрузкаСвойства = НЕ НоваяСтрока.ПолучитьИзВходящихДанных И НЕ НоваяСтрока.ЕстьОбработчикПередВыгрузкой И НЕ НоваяСтрока.ЕстьОбработчикПриВыгрузке @@ -2828,7 +4067,8 @@ ТаблицаСвойств, ТаблицаПоиска, СвойстваОтключенные, - Знач СинхронизироватьПоИдентификатору = Ложь) + Знач СинхронизироватьПоИдентификатору = Ложь, + ИмяПКО = "") // Пока ПравилаОбмена.Прочитать() Цикл @@ -2836,11 +4076,11 @@ Если ИмяУзла = "Свойство" Тогда - ЗагрузитьПКС(ПравилаОбмена, ТаблицаСвойств, ТаблицаПоиска, СвойстваОтключенные,, СинхронизироватьПоИдентификатору); + ЗагрузитьПКС(ПравилаОбмена, ТаблицаСвойств, ТаблицаПоиска, СвойстваОтключенные,, СинхронизироватьПоИдентификатору, ИмяПКО); ИначеЕсли ИмяУзла = "Группа" Тогда - ЗагрузитьПКГС(ПравилаОбмена, ТаблицаСвойств, СвойстваОтключенные, СинхронизироватьПоИдентификатору); + ЗагрузитьПКГС(ПравилаОбмена, ТаблицаСвойств, СвойстваОтключенные, СинхронизироватьПоИдентификатору, ИмяПКО); ИначеЕсли (ИмяУзла = "Свойства") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда @@ -3068,7 +4308,7 @@ КонецЕсли; - ЗагрузитьСвойства(ПравилаОбмена, НоваяСтрока.Свойства, НоваяСтрока.СвойстваПоиска, НоваяСтрока.СвойстваОтключенные, НоваяСтрока.СинхронизироватьПоИдентификатору); + ЗагрузитьСвойства(ПравилаОбмена, НоваяСтрока.Свойства, НоваяСтрока.СвойстваПоиска, НоваяСтрока.СвойстваОтключенные, НоваяСтрока.СинхронизироватьПоИдентификатору, НоваяСтрока.Имя); // Значения ИначеЕсли ИмяУзла = "Значения" Тогда @@ -3081,21 +4321,29 @@ ИначеЕсли ИмяУзла = "ПередВыгрузкой" Тогда НоваяСтрока.ПередВыгрузкой = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + ИмяОбработчика = "ПКО_[ИмяПКО]_ПередВыгрузкойОбъекта"; + НоваяСтрока.ИмяОбработчикаПередВыгрузкой = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", НоваяСтрока.Имя); НоваяСтрока.ЕстьОбработчикПередВыгрузкой = Не ПустаяСтрока(НоваяСтрока.ПередВыгрузкой); ИначеЕсли ИмяУзла = "ПриВыгрузке" Тогда НоваяСтрока.ПриВыгрузке = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + ИмяОбработчика = "ПКО_[ИмяПКО]_ПриВыгрузкеОбъекта"; + НоваяСтрока.ИмяОбработчикаПриВыгрузке = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", НоваяСтрока.Имя); НоваяСтрока.ЕстьОбработчикПриВыгрузке = Не ПустаяСтрока(НоваяСтрока.ПриВыгрузке); ИначеЕсли ИмяУзла = "ПослеВыгрузки" Тогда НоваяСтрока.ПослеВыгрузки = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + ИмяОбработчика = "ПКО_[ИмяПКО]_ПослеВыгрузкиОбъекта"; + НоваяСтрока.ИмяОбработчикаПослеВыгрузки = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", НоваяСтрока.Имя); НоваяСтрока.ЕстьОбработчикПослеВыгрузки = Не ПустаяСтрока(НоваяСтрока.ПослеВыгрузки); ИначеЕсли ИмяУзла = "ПослеВыгрузкиВФайл" Тогда НоваяСтрока.ПослеВыгрузкиВФайл = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + ИмяОбработчика = "ПКО_[ИмяПКО]_ПослеВыгрузкиОбъектаВФайлОбмена"; + НоваяСтрока.ИмяОбработчикаПослеВыгрузкиВФайл = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", НоваяСтрока.Имя); НоваяСтрока.ЕстьОбработчикПослеВыгрузкиВФайл = Не ПустаяСтрока(НоваяСтрока.ПослеВыгрузкиВФайл); // Для загрузки @@ -3107,6 +4355,8 @@ Если РежимОбмена = "Загрузка" Тогда НоваяСтрока.ПередЗагрузкой = Значение; + ИмяОбработчика = "ПКО_[ИмяПКО]_ПередЗагрузкойОбъекта"; + НоваяСтрока.ИмяОбработчикаПередЗагрузкой = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", НоваяСтрока.Имя); НоваяСтрока.ЕстьОбработчикПередЗагрузкой = Не ПустаяСтрока(Значение); Иначе @@ -3122,6 +4372,8 @@ Если РежимОбмена = "Загрузка" Тогда НоваяСтрока.ПриЗагрузке = Значение; + ИмяОбработчика = "ПКО_[ИмяПКО]_ПриЗагрузкеОбъекта"; + НоваяСтрока.ИмяОбработчикаПриЗагрузке = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", НоваяСтрока.Имя); НоваяСтрока.ЕстьОбработчикПриЗагрузке = Не ПустаяСтрока(Значение); Иначе @@ -3137,6 +4389,8 @@ Если РежимОбмена = "Загрузка" Тогда НоваяСтрока.ПослеЗагрузки = Значение; + ИмяОбработчика = "ПКО_[ИмяПКО]_ПослеЗагрузкиОбъекта"; + НоваяСтрока.ИмяОбработчикаПослеЗагрузки = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", НоваяСтрока.Имя); НоваяСтрока.ЕстьОбработчикПослеЗагрузки = Не ПустаяСтрока(Значение); Иначе @@ -3153,6 +4407,8 @@ Если РежимОбмена = "Загрузка" Тогда НоваяСтрока.ПоследовательностьПолейПоиска = Значение; + ИмяОбработчика = "ПКО_[ИмяПКО]_ПоследовательностьПолейПоиска"; + НоваяСтрока.ИмяОбработчикаПоследовательностьПолейПоиска = СтрЗаменить(ИмяОбработчика, "[ИмяПКО]", НоваяСтрока.Имя); Иначе @@ -3483,13 +4739,19 @@ ИначеЕсли ИмяУзла = "ПередОбработкойПравила" Тогда НоваяСтрока.ПередОбработкой = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + ИмяОбработчика = "ПОД_[ИмяПОД]_ПередОбработкойПравила"; + НоваяСтрока.ИмяОбработчикаПередОбработкой = СтрЗаменить(ИмяОбработчика, "[ИмяПОД]", НоваяСтрока.Имя); ИначеЕсли ИмяУзла = "ПослеОбработкиПравила" Тогда НоваяСтрока.ПослеОбработки = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - + ИмяОбработчика = "ПОД_[ИмяПОД]_ПослеОбработкиПравила"; + НоваяСтрока.ИмяОбработчикаПослеОбработки = СтрЗаменить(ИмяОбработчика, "[ИмяПОД]", НоваяСтрока.Имя); + ИначеЕсли ИмяУзла = "ПередУдалениемОбъекта" Тогда НоваяСтрока.ПередУдалением = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - + ИмяОбработчика = "ПОД_[ИмяПОД]_ПередУдалениемОбъекта"; + НоваяСтрока.ИмяОбработчикаПередУдалением = СтрЗаменить(ИмяОбработчика, "[ИмяПОД]", НоваяСтрока.Имя); + // Выход ИначеЕсли (ИмяУзла = "Правило") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда Прервать; @@ -3967,15 +5229,23 @@ ИначеЕсли ИмяУзла = "ПередОбработкойПравила" Тогда НоваяСтрока.ПередОбработкой = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + ИмяОбработчика = "ПВД_[ИмяПВД]_ПередОбработкойПравила"; + НоваяСтрока.ИмяОбработчикаПередОбработкой = СтрЗаменить(ИмяОбработчика, "[ИмяПВД]", НоваяСтрока.Имя); ИначеЕсли ИмяУзла = "ПослеОбработкиПравила" Тогда НоваяСтрока.ПослеОбработки = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + ИмяОбработчика = "ПВД_[ИмяПВД]_ПослеОбработкиПравила"; + НоваяСтрока.ИмяОбработчикаПослеОбработки = СтрЗаменить(ИмяОбработчика, "[ИмяПВД]", НоваяСтрока.Имя); ИначеЕсли ИмяУзла = "ПередВыгрузкойОбъекта" Тогда НоваяСтрока.ПередВыгрузкой = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); - + ИмяОбработчика = "ПВД_[ИмяПВД]_ПередВыгрузкойОбъекта"; + НоваяСтрока.ИмяОбработчикаПередВыгрузкой = СтрЗаменить(ИмяОбработчика, "[ИмяПВД]", НоваяСтрока.Имя); + ИначеЕсли ИмяУзла = "ПослеВыгрузкиОбъекта" Тогда НоваяСтрока.ПослеВыгрузки = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + ИмяОбработчика = "ПВД_[ИмяПВД]_ПослеВыгрузкиОбъекта"; + НоваяСтрока.ИмяОбработчикаПослеВыгрузки = СтрЗаменить(ИмяОбработчика, "[ИмяПВД]", НоваяСтрока.Имя); ИначеЕсли (ИмяУзла = "Правило") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLКонецЭлемента) Тогда Прервать; @@ -4234,8 +5504,16 @@ Если Не ПустаяСтрока(Правило.ПередУдалением) Тогда Попытка + + Если РежимСовместимостиСБСП20() Тогда - Выполнить(Правило.ПередУдалением); + Выполнить(Правило.ПередУдалением); + + Иначе + + ВыполнитьОбработчик_ПОД_ПередУдалениемОбъекта(Правило, Объект, Отказ, УдалитьНепосредственно, ВходящиеДанные); + + КонецЕсли; Исключение @@ -4283,7 +5561,15 @@ Попытка - Выполнить(Правило.ПередОбработкой); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПередОбработкой); + + Иначе + + ВыполнитьОбработчик_ПОД_ПередОбработкойПравила(Правило, Отказ, ИсходящиеДанные, ВыборкаДанных); + + КонецЕсли; Исключение @@ -4386,7 +5672,15 @@ Попытка - Выполнить(Правило.ПослеОбработки); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПослеОбработки); + + Иначе + + ВыполнитьОбработчик_ПОД_ПослеОбработкиПравила(Правило); + + КонецЕсли; Исключение @@ -4430,32 +5724,6 @@ //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ЗАГРУЗКИ ДАННЫХ -// Устанавливает значение параметра "Загрузка" для свойства объекта "ОбменДанными". -// -// Параметры: -// Объект - объект, для которого устанавливается свойство -// Значение - значение устанавливаемого свойства "Загрузка" -// -Процедура УстановитьОбменДаннымиЗагрузка(Объект, Значение = Истина) - - // не все объекты, которые участвуют в обмене, имеют свойство "ОбменДанными" - Попытка - Объект.ОбменДанными.Загрузка = Значение; - Исключение - КонецПопытки; - - Если УзелОбменаЗагрузкаДанных <> Неопределено - И НЕ УзелОбменаЗагрузкаДанных.Пустая() Тогда - - Попытка - Объект.ОбменДанными.Отправитель = УзелОбменаЗагрузкаДанных; - Исключение - КонецПопытки; - - КонецЕсли; - -КонецПроцедуры // УстановитьОбменДаннымиЗагрузка() - Функция УстановитьСсылкуНового(Объект, Менеджер, СвойстваПоиска) УИ = СвойстваПоиска["{УникальныйИдентификатор}"]; @@ -4478,7 +5746,6 @@ КонецФункции - // Ищет объект по номеру в списке уже загруженных объектов. // // Параметры: @@ -4532,144 +5799,6 @@ КонецПроцедуры -Процедура ЗаписатьОбъектВИБ(Объект, Тип, ЗаписатьОбъект = Ложь) - - // в режиме загрузки в ТЗ объекты не записываем - Если РежимЗагрузкиДанныхВТаблицуЗначений() Тогда - Возврат; - КонецЕсли; - - Отказ = Ложь; - - // устанавливаем режим загрузки данных для объекта - УстановитьОбменДаннымиЗагрузка(Объект); - - // выполняем проверку на пометку удаления предопределенного элемента - СнятьПометкуУдаленияСПредопределенногоЭлемента(Объект, Тип); - - ОбменДаннымиПереопределяемый.ПередЗаписьюОбъекта(Объект, Отказ); - - Если Отказ Тогда - - НайденЗапретЗагрузкиДанных = Объект.ДополнительныеСвойства.Свойство("НайденЗапретЗагрузкиДанных"); - - Если НайденЗапретЗагрузкиДанных Тогда - - // При возникновении коллизии дат запрета изменений загрузку не прерываем. Фиксируем ошибку в протоколе. - СтрокаСообщенияОбОшибке = ""; - Объект.ДополнительныеСвойства.Свойство("НайденЗапретЗагрузкиДанных", СтрокаСообщенияОбОшибке); - - ЗП = ПолучитьСтруктуруЗаписиПротокола(84, "{}: " + Строка(СтрокаСообщенияОбОшибке)); - ЗП.Объект = Объект; - ЗП.ТипОбъекта = Тип; - - ЗаписатьВПротоколВыполнения(84, ЗП, Ложь); - - КонецЕсли; - - ЗаписатьОбъект = Ложь; - Возврат; - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); - - НачатьТранзакцию(); - Попытка - - // записываем объект в транзакцию - Объект.Записать(); - - СоответствияОбъектовИнформационныхБаз = Неопределено; - Если Объект.ДополнительныеСвойства.Свойство("СоответствияОбъектовИнформационныхБаз", СоответствияОбъектовИнформационныхБаз) - И СоответствияОбъектовИнформационныхБаз <> Неопределено Тогда - - СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = Объект.Ссылка; - - РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СоответствияОбъектовИнформационныхБаз); - КонецЕсли; - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - ЗаписатьОбъект = Ложь; - - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); - - Если Не ФлагРежимОтладки Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - -КонецПроцедуры - -Процедура ОтменитьПроведениеОбъектаВИБ(Объект, Тип, ЗаписатьОбъект = Ложь) - - Отказ = Ложь; - - // устанавливаем режим загрузки данных для объекта - УстановитьОбменДаннымиЗагрузка(Объект); - - ОбменДаннымиПереопределяемый.ПередЗаписьюОбъекта(Объект, Отказ); - - Если Отказ Тогда - - НайденЗапретЗагрузкиДанных = Объект.ДополнительныеСвойства.Свойство("НайденЗапретЗагрузкиДанных"); - - Если НайденЗапретЗагрузкиДанных Тогда - - // При возникновении коллизии дат запрета изменений загрузку не прерываем. Фиксируем ошибку в протоколе. - СтрокаСообщенияОбОшибке = ""; - Объект.ДополнительныеСвойства.Свойство("НайденЗапретЗагрузкиДанных", СтрокаСообщенияОбОшибке); - - ЗП = ПолучитьСтруктуруЗаписиПротокола(84, "{}: " + Строка(СтрокаСообщенияОбОшибке)); - ЗП.Объект = Объект; - ЗП.ТипОбъекта = Тип; - - ЗаписатьВПротоколВыполнения(84, ЗП, Ложь); - - КонецЕсли; - - ЗаписатьОбъект = Ложь; - Возврат; - КонецЕсли; - - Объект.ДополнительныеСвойства.Вставить("НеПроверятьДатыЗапретаИзмененияДанных"); - - НачатьТранзакцию(); - Попытка - - // отменяем проведение документа - Объект.Проведен = Ложь; - Объект.Записать(); - - СоответствияОбъектовИнформационныхБаз = Неопределено; - Если Объект.ДополнительныеСвойства.Свойство("СоответствияОбъектовИнформационныхБаз", СоответствияОбъектовИнформационныхБаз) - И СоответствияОбъектовИнформационныхБаз <> Неопределено Тогда - - СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточника = Объект.Ссылка; - - РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СоответствияОбъектовИнформационныхБаз); - КонецЕсли; - - УдалитьДвиженияУДокумента(Объект, Отказ); - - ЗафиксироватьТранзакцию(); - Исключение - ОтменитьТранзакцию(); - - ЗаписатьОбъект = Ложь; - - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеВПротокол(26, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()), Объект, Тип); - - Если Не ФлагРежимОтладки Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - -КонецПроцедуры - Функция ОпределитьНаличиеДвиженийПоДокументу(ДокументСсылка) ТекстЗапроса = ""; // для исключения падения для документов, проводящимся более чем по 256 таблицам @@ -6026,18 +7155,29 @@ Пока НомерВариантаПоиска <= 10 И ЕстьАлгоритмПоиска Цикл - + Попытка - Выполнить(АлгоритмПоиска); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(АлгоритмПоиска); + + Иначе + + ВыполнитьОбработчик_ПКО_ПоследовательностьПолейПоиска(НомерВариантаПоиска, СвойстваПоиска, ПараметрыОбъекта, ПрекратитьПоиск, + СсылкаНаОбъект, УстанавливатьУОбъектаВсеСвойстваПоиска, СтрокаИменСвойствПоиска, + ПКО.ИмяОбработчикаПоследовательностьПолейПоиска + ); + + КонецЕсли; Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(73, ОписаниеОшибки(), "", "", ТипОбъекта, Неопределено, "Последовательность полей поиска"); - - КонецПопытки; + КонецПопытки; + НеНужноВыполнятьПоиск = ПрекратитьПоиск = Истина ИЛИ СтрокаИменСвойствПоиска = ПредыдущаяСтрокаПоиска ИЛИ ЗначениеЗаполнено(СсылкаНаОбъект); @@ -6191,7 +7331,7 @@ ЗП.ТипЗначения = ТипЗнч(ЗначениеСвойства); СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(26, ЗП, Истина); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -6591,7 +7731,7 @@ ЗП.ТипЗначения = ТипЗнч(ЗначениеСвойства); СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(26, ЗП, Истина); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -6809,36 +7949,6 @@ КонецФункции // ЗагрузитьТипыОбъекта() -Процедура УстановитьПометкуУдаленияУОбъекта(Объект, ПометкаУдаления, ИмяТипаОбъекта) - - Если (ПометкаУдаления = Неопределено) - И (Объект.ПометкаУдаления <> Истина) Тогда - Возврат; - КонецЕсли; - - ПометкаДляУстановки = ?(ПометкаУдаления <> Неопределено, ПометкаУдаления, Ложь); - - УстановитьОбменДаннымиЗагрузка(Объект); - - // дли иерархических объектов пометку удаления только у конкретного объекта ставим - Если ИмяТипаОбъекта = "Справочник" - ИЛИ ИмяТипаОбъекта = "ПланВидовХарактеристик" - ИЛИ ИмяТипаОбъекта = "ПланСчетов" Тогда - - Если Не ЭтоПредопределенныйЭлемент(Объект) Тогда - - Объект.УстановитьПометкуУдаления(ПометкаДляУстановки, Ложь); - - КонецЕсли; - - Иначе - - Объект.УстановитьПометкуУдаления(ПометкаДляУстановки); - - КонецЕсли; - -КонецПроцедуры - Процедура ЗаписатьДокументВБезопасномРежиме(Документ, ТипОбъекта) Если Документ.Проведен Тогда @@ -7035,7 +8145,7 @@ ЗаписатьВФайл(Приемник); - Инкремент(ПолеСчетчикВыгруженныхОбъектов); + УвеличитьСчетчикВыгруженныхОбъектов(); КонецЦикла; @@ -7095,12 +8205,15 @@ РегистрыСведений.СоответствияОбъектовИнформационныхБаз.ДобавитьЗапись(СтруктураЗаписи); - Инкремент(ПолеСчетчикЗагруженныхОбъектов); + УвеличитьСчетчикЗагруженныхОбъектов(); КонецПроцедуры Функция ПрочитатьНаборЗаписейРегистра() + // Переменные-заглушки для поддержки механизма отладки кода обработчиков событий + Перем Ссылка,ОбъектНайден, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения, ГенерироватьНовыйНомерИлиКодЕслиНеУказан, ОбъектМодифицирован; + Нпп = одАтрибут(ФайлОбмена, ТипЧисло, "Нпп"); ИмяПравила = одАтрибут(ФайлОбмена, ТипСтрока, "ИмяПравила"); ТипОбъектаСтрокой = одАтрибут(ФайлОбмена, ТипСтрока, "Тип"); @@ -7126,7 +8239,7 @@ ИмяТипаОбъекта = СтруктураСвойств.ИмяТипа; ИнформацияОТипах = СоответствиеТиповДанныхДляЗагрузки()[ТипСтрокиНабораРегистра]; - + Объект = Неопределено; Если Не ПустаяСтрока(ИмяПравила) Тогда @@ -7144,7 +8257,6 @@ КонецЕсли; - // Глобальный обработчик события ПередЗагрузкойОбъекта Если ЕстьГлобальныйОбработчикПередЗагрузкойОбъекта Тогда @@ -7153,15 +8265,26 @@ Попытка - Выполнить(Конвертация.ПередЗагрузкойОбъекта); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередЗагрузкойОбъекта); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, + ГенерироватьНовыйНомерИлиКодЕслиНеУказан,ТипОбъектаСтрокой, + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения + ); + + КонецЕсли; Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(53, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Неопределено, НСтр("ru = 'ПередЗагрузкойОбъекта (глобальный)'")); - + ТипОбъекта, Неопределено, НСтр("ru = 'ПередЗагрузкойОбъекта (глобальный)'")); + КонецПопытки; - + Если Отказ Тогда // Отказ от загрузки объекта одПропустить(ФайлОбмена, "Объект"); @@ -7172,19 +8295,33 @@ КонецЕсли; - // Обработчик события ПередЗагрузкойОбъекта + // Обработчик события ПередЗагрузкойОбъекта Если ЕстьОбработчикПередЗагрузкой Тогда Отказ = Ложь; Попытка - Выполнить(Правило.ПередЗагрузкой); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПередЗагрузкой); + + Иначе + + ВыполнитьОбработчик_ПКО_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, + ГенерироватьНовыйНомерИлиКодЕслиНеУказан, ТипОбъектаСтрокой, + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения + ); + + КонецЕсли; + + + Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Неопределено, "ПередЗагрузкойОбъекта"); + ТипОбъекта, Неопределено, "ПередЗагрузкойОбъекта"); КонецПопытки; @@ -7271,7 +8408,7 @@ ЗП.ТипЗначения = ТипЗнч(Значение); СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(26, ЗП, Истина); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -7282,23 +8419,32 @@ ИначеЕсли ИмяУзла = "СтрокиНабораЗаписей" Тогда Если ФайлОбмена.ТипУзла <> ТипУзлаXMLКонецЭлемента Тогда - + // Обработчик события ПриЗагрузкеОбъекта // срабатывает перед чтением первой записи в наборе Если РежимЧтенияОтбора = Истина - И ЕстьОбработчикПриЗагрузке Тогда - + И ЕстьОбработчикПриЗагрузке Тогда + Попытка - Выполнить(Правило.ПриЗагрузке); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПриЗагрузке); + + Иначе + + ВыполнитьОбработчик_ПКО_ПриЗагрузкеОбъекта(ФайлОбмена, ОбъектНайден, Объект, НеЗамещатьОбъект, ОбъектМодифицирован, Правило); + + + КонецЕсли; Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); + ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; - + КонецЕсли; РежимЧтенияОтбора = Ложь; @@ -7333,15 +8479,25 @@ Попытка - Выполнить(Правило.ПослеЗагрузки); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПослеЗагрузки); + + Иначе + + ВыполнитьОбработчик_ПКО_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило + ); + + КонецЕсли; Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); - + ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); + КонецПопытки; - + КонецЕсли; @@ -7664,7 +8820,18 @@ Попытка - Выполнить(Конвертация.ПередЗагрузкойОбъекта); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередЗагрузкойОбъекта); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, + ГенерироватьНовыйНомерИлиКодЕслиНеУказан,ТипОбъектаСтрокой, + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения + ); + + КонецЕсли; Исключение @@ -7683,22 +8850,33 @@ КонецЕсли; - // Обработчик события ПередЗагрузкойОбъекта + // Обработчик события ПередЗагрузкойОбъекта Если ЕстьОбработчикПередЗагрузкой Тогда Отказ = Ложь; Попытка - Выполнить(Правило.ПередЗагрузкой); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПередЗагрузкой); + + Иначе + + ВыполнитьОбработчик_ПКО_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, + ГенерироватьНовыйНомерИлиКодЕслиНеУказан, ТипОбъектаСтрокой, + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения + ); + + КонецЕсли; Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(19, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Неопределено, "ПередЗагрузкойОбъекта"); - + ТипОбъекта, Неопределено, "ПередЗагрузкойОбъекта"); + КонецПопытки; - + Если Отказ Тогда // Отказ от загрузки объекта одПропустить(ФайлОбмена, "Объект"); @@ -7735,21 +8913,30 @@ // Обработчик события ПриЗагрузкеОбъекта Если ЕстьОбработчикПриЗагрузке Тогда - - // если есть обработчик при загрузке, то объект нужно перезаписывать, так как могут быть изменения + ОбъектМодифицирован = Истина; + // если есть обработчик при загрузке, то объект нужно перезаписывать, так как могут быть изменения Попытка - Выполнить(Правило.ПриЗагрузке); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПриЗагрузке); + + Иначе + + ВыполнитьОбработчик_ПКО_ПриЗагрузкеОбъекта(ФайлОбмена, ОбъектНайден, Объект, НеЗамещатьОбъект, ОбъектМодифицирован, Правило); + + + КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(20, ОписаниеОшибки(), ИмяПравила, Источник, + ТипОбъекта, Объект, "ПриЗагрузкеОбъекта"); КонецПопытки; - + КонецЕсли; - + // так м не смогли создать объект в событии - создаем его отдельно Если Объект = Неопределено Тогда @@ -7820,7 +9007,7 @@ ЗП.ТипЗначения = ТипЗнч(Значение); СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(26, ЗП, Истина); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -7895,7 +9082,16 @@ Попытка - Выполнить(Правило.ПриЗагрузке); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПриЗагрузке); + + Иначе + + ВыполнитьОбработчик_ПКО_ПриЗагрузкеОбъекта(ФайлОбмена, ОбъектНайден, Объект, НеЗамещатьОбъект, ОбъектМодифицирован, Правило); + + + КонецЕсли; Исключение @@ -7938,7 +9134,16 @@ Попытка - Выполнить(Правило.ПриЗагрузке); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПриЗагрузке); + + Иначе + + ВыполнитьОбработчик_ПКО_ПриЗагрузкеОбъекта(ФайлОбмена, ОбъектНайден, Объект, НеЗамещатьОбъект, ОбъектМодифицирован, Правило); + + + КонецЕсли; Исключение @@ -7988,14 +9193,26 @@ // Глобальный обработчик события ПослеЗагрузкиОбъекта Если ЕстьГлобальныйОбработчикПослеЗагрузкиОбъекта Тогда + ОбъектМодифицирован = Истина; + Попытка - Выполнить(Конвертация.ПослеЗагрузкиОбъекта); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПослеЗагрузкиОбъекта); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден + ); + + КонецЕсли; Исключение - ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Объект, НСтр("ru = 'ПослеЗагрузкиОбъекта (глобальный)'")); + ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(54, ОписаниеОшибки(), ИмяПравила, Источник, + ТипОбъекта, Объект, НСтр("ru = 'ПослеЗагрузкиОбъекта (глобальный)'")); КонецПопытки; @@ -8007,21 +9224,40 @@ Попытка - Выполнить(Правило.ПослеЗагрузки); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПослеЗагрузки); + + Иначе + + ВыполнитьОбработчик_ПКО_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило + ); + + КонецЕсли; Исключение ЗаписатьИнформациюОбОшибкеЗагрузкиОбработчикаПКО(21, ОписаниеОшибки(), ИмяПравила, Источник, - ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); + ТипОбъекта, Объект, "ПослеЗагрузкиОбъекта"); КонецПопытки; КонецЕсли; + ПолучениеЭлемента = ПолучениеЭлементаДанных.Авто; + ОтправкаНазад = Ложь; + + СтандартныеПодсистемыПереопределяемый.ПриПолученииДанныхОтПодчиненного(Неопределено, Объект, ПолучениеЭлемента, ОтправкаНазад); + + Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда + Отказ = Истина; + КонецЕсли; + Если Отказ Тогда УдалитьИзСтекаНеЗаписанныхОбъектов(Нпп, ГНпп); Возврат Неопределено; - КонецЕсли; + КонецЕсли; Если ИмяТипаОбъекта = "Документ" Тогда @@ -8092,7 +9328,7 @@ // документы которые просто нужно записать - так и записываем Если РежимЗаписи = РежимЗаписиДокумента.Запись Тогда - ЗаписатьОбъектВИБ(Объект, ТипОбъекта, ЗаписатьОбъект); + ЗаписатьОбъектВИБ(Объект, ТипОбъекта,, ОтправкаНазад); ИначеЕсли РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда @@ -8109,11 +9345,11 @@ // Если документ был успешно записан и создана ссылка, // то помещаем документ в очередь для проведения. - Если Объект <> Неопределено + Если ЗаписатьОбъект + И Объект <> Неопределено И Объект.Ссылка <> Неопределено Тогда СтрокаТаблицы = ДокументыДляОтложенногоПроведения().Добавить(); - СтрокаТаблицы.ДокументОбъект = Объект; СтрокаТаблицы.ДокументСсылка = Объект.Ссылка; СтрокаТаблицы.ДатаДокумента = Объект.Дата; @@ -8191,7 +9427,7 @@ КонецЕсли; Если ЗаписатьОбъект Тогда - ЗаписатьОбъектВИБ(Объект, ТипОбъекта); + ЗаписатьОбъектВИБ(Объект, ТипОбъекта,, ОтправкаНазад); КонецЕсли; @@ -8308,7 +9544,17 @@ Отказ = Ложь; Попытка - Выполнить(ПКГС.ПередОбработкойВыгрузки); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКГС.ПередОбработкойВыгрузки); + + Иначе + + ВыполнитьОбработчик_ПКГС_ПередОбработкойВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, + ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать + ); + + КонецЕсли; Исключение @@ -8325,7 +9571,7 @@ ЗП.Обработчик = "ПередОбработкойВыгрузкиГруппыСвойств"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(48, ЗП); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -8403,7 +9649,17 @@ Попытка - Выполнить(ПКГС.ПослеОбработкиВыгрузки); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКГС.ПослеОбработкиВыгрузки); + + Иначе + + ВыполнитьОбработчик_ПКГС_ПослеОбработкиВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов + ); + + КонецЕсли; Исключение @@ -8420,7 +9676,7 @@ ЗП.Обработчик = "ПослеОбработкиВыгрузкиГруппыСвойств"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(49, ЗП); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -8465,7 +9721,7 @@ СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(66, ЗП); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -8531,7 +9787,7 @@ КонецЕсли; Для каждого ОбъектКоллекции Из КоллекцияОбъектов Цикл - + // Обработчик ПередВыгрузкой Если ПКГС.ЕстьОбработчикПередВыгрузкой Тогда @@ -8540,12 +9796,22 @@ Попытка - Выполнить(ПКГС.ПередВыгрузкой); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКГС.ПередВыгрузкой); + + Иначе + + ВыполнитьОбработчик_ПКГС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, + ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииСвойств, УзелКоллекцииОбъектов + ); + + КонецЕсли; Исключение СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(50); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -8577,12 +9843,23 @@ Попытка - Выполнить(ПКГС.ПриВыгрузке); - - Исключение + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКГС.ПриВыгрузке); + + Иначе + + ВыполнитьОбработчик_ПКГС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, + ПКГС, ОбъектКоллекции, УзелКоллекцииОбъектов, УзелОбъектаКоллекции, + УзелКоллекцииСвойств, СтандартнаяОбработка + ); + + КонецЕсли; + + Исключение СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(51); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -8613,12 +9890,23 @@ Попытка - Выполнить(ПКГС.ПослеВыгрузки); - - Исключение + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКГС.ПослеВыгрузки); + + Иначе + + ВыполнитьОбработчик_ПКГС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКО, ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииОбъектов, + УзелКоллекцииСвойств, УзелОбъектаКоллекции + ); + + КонецЕсли; + + Исключение СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(52); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -8664,7 +9952,17 @@ Попытка - Выполнить(ПКГС.ПослеОбработкиВыгрузки); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКГС.ПослеОбработкиВыгрузки); + + Иначе + + ВыполнитьОбработчик_ПКГС_ПослеОбработкиВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов + ); + + КонецЕсли; Исключение @@ -8681,7 +9979,7 @@ ЗП.Обработчик = "ПослеОбработкиВыгрузкиГруппыСвойств"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(49, ЗП); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -8799,6 +10097,9 @@ Процедура _ВыгрузитьСубконто(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКС, УзелКоллекцииСвойств = Неопределено, ОбъектКоллекции = Неопределено, Знач ВыгрузитьТолькоСсылку = Ложь) + // Переменные-заглушки для поддержки механизма отладки кода обработчиков событий + Перем ТипПриемника, Пусто, Выражение, НеЗамещать, ПКОСвойств, УзелСвойства; + // Инициализация значения Значение = Неопределено; ИмяПКО = ""; @@ -8811,7 +10112,18 @@ Попытка - Выполнить(ПКС.ПередВыгрузкой); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКС.ПередВыгрузкой); + + Иначе + + ВыполнитьОбработчик_ПКС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, ТипПриемника, ИмяПКО, + ИмяПКОВидСубконто, Пусто, Выражение, УзелКоллекцииСвойств, НеЗамещать + ); + + КонецЕсли; Исключение @@ -8849,7 +10161,19 @@ Попытка - Выполнить(ПКС.ПриВыгрузке); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКС.ПриВыгрузке); + + Иначе + + ВыполнитьОбработчик_ПКС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, + Субконто, Пусто, ИмяПКО, ПКОСвойств,УзелСвойства, УзелКоллекцииСвойств, + ИмяПКОВидСубконто + ); + + КонецЕсли; Исключение @@ -8965,26 +10289,38 @@ // Обработчик ПослеВыгрузки Если ПКС.ЕстьОбработчикПослеВыгрузки Тогда - + Отказ = Ложь; - + Попытка + + Если РежимСовместимостиСБСП20() Тогда - Выполнить(ПКС.ПослеВыгрузки); + Выполнить(ПКС.ПослеВыгрузки); + Иначе + + ВыполнитьОбработчик_ПКС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, + Субконто, ИмяПКО, ИмяПКОВидСубконто, ПКОСвойств, УзелСвойства, + УзелСсылки, УзелКоллекцииСвойств, УзелСубконто + ); + + КонецЕсли; + Исключение - + ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ОписаниеОшибки(), ПКО, ПКС, Источник, - "ПослеВыгрузкиСвойства", Значение); - + "ПослеВыгрузкиСвойства", Значение); + КонецПопытки; - + Если Отказ Тогда // Отказ от выгрузки - + Продолжить; - + КонецЕсли; - + КонецЕсли; ДобавитьПодчиненный(УзелКоллекцииСвойств, УзелСубконто); @@ -9322,6 +10658,10 @@ СписокВременныхФайлов = Неопределено, ВыгрузкаСтрокиНабораЗаписейРегистра = Ложь) + // Переменные-заглушки для поддержки механизма отладки кода обработчиков событий + Перем КлючИЗначение, ВидСубконто, Субконто, ИмяПКОВидСубконто, УзелСубконто; + + Если УзелКоллекцииСвойств = Неопределено Тогда УзелКоллекцииСвойств = Приемник; @@ -9443,13 +10783,24 @@ ЭтоNULL = Ложь; // Обработчик ПередВыгрузкой - Если ПКС.ЕстьОбработчикПередВыгрузкой Тогда + Если ПКС.ЕстьОбработчикПередВыгрузкой Тогда Отказ = Ложь; Попытка - Выполнить(ПКС.ПередВыгрузкой); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКС.ПередВыгрузкой); + + Иначе + + ВыполнитьОбработчик_ПКС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, ТипПриемника, ИмяПКО, + ИмяПКОВидСубконто, Пусто, Выражение, УзелКоллекцииСвойств, НеЗамещать + ); + + КонецЕсли; Исключение @@ -9554,7 +10905,19 @@ Попытка - Выполнить(ПКС.ПриВыгрузке); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКС.ПриВыгрузке); + + Иначе + + ВыполнитьОбработчик_ПКС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, + Субконто, Пусто, ИмяПКО, ПКОСвойств,УзелСвойства, УзелКоллекцииСвойств, + ИмяПКОВидСубконто + ); + + КонецЕсли; Исключение @@ -9727,26 +11090,39 @@ КонецЕсли; КонецЕсли; - - + + // Обработчик ПослеВыгрузки - + Если ПКС.ЕстьОбработчикПослеВыгрузки Тогда Отказ = Ложь; Попытка - Выполнить(ПКС.ПослеВыгрузки); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПКС.ПослеВыгрузки); + + Иначе + + ВыполнитьОбработчик_ПКС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, + Субконто, ИмяПКО, ИмяПКОВидСубконто, ПКОСвойств, УзелСвойства, + УзелСсылки, УзелКоллекцииСвойств, УзелСубконто + ); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиПКС(57, ОписаниеОшибки(), ПКО, ПКС, Источник, - "ПослеВыгрузкиСвойства", Значение); + "ПослеВыгрузкиСвойства", Значение); КонецПопытки; - + Если Отказ Тогда // Отказ от выгрузки свойства Продолжить; @@ -9839,704 +11215,6 @@ КонецПроцедуры -// Производит выгрузку объекта в соответствии с указанным правилом конвертации -// -// Параметры: -// Источник - произвольный источник данных -// Приемник - xml-узел объекта приемника -// ВходящиеДанные - произвольные вспомогательные данные, передаваемые правилу -// для выполнения конвертации -// ИсходящиеДанные - произвольные вспомогательные данные, передаваемые правилам -// конвертации свойств -// ИмяПКО - имя правила конвертации, согласно которому осуществляется выгрузка -// УзелСсылки - xml-узел ссылки объекта приемника -// ТолькоПолучитьУзелСсылки - если Истина, то выгрузка объекта не производится, только формируется -// xml-узел ссылки -// ПКО - ссылка на правило конвертации -// -// Возвращаемое значение: -// xml-узел ссылки или значение приемника -// -Функция ВыгрузитьПоПравилу(Источник = Неопределено, - Приемник = Неопределено, - ВходящиеДанные = Неопределено, - ИсходящиеДанные = Неопределено, - ИмяПКО = "", - УзелСсылки = Неопределено, - ТолькоПолучитьУзелСсылки = Ложь, - ПКО = Неопределено, - ВыгружатьСсылкиУПодчиненныхОбъектов = Истина, - ВыгрузкаСтрокиНабораЗаписейРегистра = Ложь, - УзелПредка = Неопределено, - ИмяКонстантыДляВыгрузки = "", - ЭтоВыгружаетсяОбъект = Неопределено, - ЭтоПравилоСГлобальнойВыгрузкойОбъектов = Ложь, - НеИспользоватьПравилоСГлобальнойВыгрузкойИНеЗапоминатьВыгруженные = Ложь) - // - - ОпределитьПКОПоПараметрам(ПКО, Источник, ИмяПКО); - - Если ПКО = Неопределено Тогда - - ЗП = ПолучитьСтруктуруЗаписиПротокола(45); - - ЗП.Объект = Источник; - Попытка - ЗП.ТипОбъекта = ТипЗнч(Источник); - Исключение - КонецПопытки; - - ЗаписатьВПротоколВыполнения(45, ЗП, Истина); // не найдено ПКО - Возврат Неопределено; - - КонецЕсли; - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1; - - Если ФлагКомментироватьОбработкуОбъектов Тогда - - Попытка - ИсточникВСтроку = Строка(Источник); - Исключение - ИсточникВСтроку = " "; - КонецПопытки; - - ПрОбъекта = ИсточникВСтроку + " (" + ТипЗнч(Источник) + ")"; - - СтрокаНазванияПКО = " ПКО: " + СокрЛП(ИмяПКО) + " (" + СокрЛП(ПКО.Наименование) + ")"; - - Если ТолькоПолучитьУзелСсылки Тогда - СтрокаПользователю = "Конвертация ссылки на объект: "; - Иначе - СтрокаПользователю = "Конвертация объекта: "; - КонецЕсли; - - ЗаписатьВПротоколВыполнения(СтрокаПользователю + ПрОбъекта + СтрокаНазванияПКО, , Ложь, ТекущийУровеньВложенностиВыгрузитьПоПравилу + 1, 7); - - КонецЕсли; - - ЭтоПравилоСГлобальнойВыгрузкойОбъектов = Ложь; - - ЗапоминатьВыгруженные = Ложь; - ВыгруженныеОбъекты = ПКО.Выгруженные; - ВсеОбъектыВыгружены = ПКО.ВсеОбъектыВыгружены; - НеЗамещатьОбъектПриЗагрузке = ПКО.НеЗамещать; - НеСоздаватьЕслиНеНайден = ПКО.НеСоздаватьЕслиНеНайден; - ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD = ПКО.ПриПереносеОбъектаПоСсылкеУстанавливатьТолькоGIUD; - НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике = ПКО.НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике; - ПриоритетОбъектовОбмена = ПКО.ПриоритетОбъектовОбмена; - - РегистрироватьОбъектНаУзлеОтправителе = Ложь; - - ПрефиксАвтонумерации = ""; - РежимЗаписи = ""; - РежимПроведения = ""; - СписокВременныхФайлов = Неопределено; - - ИмяТипа = ""; - ВыгружатьСвойстваОбъекта = Истина; - - СтруктураСвойств = НайтиСтруктуруСвойствПоПараметрам(ПКО, Источник); - - Если СтруктураСвойств <> Неопределено Тогда - ИмяТипа = СтруктураСвойств.ИмяТипа; - КонецЕсли; - - КлючВыгружаемыхДанных = ИмяПКО; - - ЭтоНеСсылочныйТип = ИмяТипа = "Константы" - ИЛИ ИмяТипа = "РегистрСведений" - ИЛИ ИмяТипа = "РегистрНакопления" - ИЛИ ИмяТипа = "РегистрБухгалтерии" - ИЛИ ИмяТипа = "РегистрРасчета" - ; - - Если ЭтоНеСсылочныйТип - ИЛИ ПустаяСтрока(ИмяТипа) Тогда - - ЗапоминатьВыгруженные = Ложь; - - КонецЕсли; - - СсылкаНаИсточник = Неопределено; - ВыгружаетсяОбъект = ЭтоВыгружаетсяОбъект; - - Если (Источник <> Неопределено) - И НЕ ЭтоНеСсылочныйТип Тогда - - Если ВыгружаетсяОбъект = Неопределено Тогда - // если не указано что выгружается, то считаем что выгружается объект - ВыгружаетсяОбъект = Истина; - КонецЕсли; - - СсылкаНаИсточник = ОпределитьСсылкуПоОбъектуИлиСсылке(Источник, ВыгружаетсяОбъект); - Если ЗапоминатьВыгруженные Тогда - КлючВыгружаемыхДанных = ОпределитьВнутреннеПредставлениеДляПоиска(СсылкаНаИсточник, СтруктураСвойств); - КонецЕсли; - - Иначе - - ВыгружаетсяОбъект = Ложь; - - КонецЕсли; - - // Переменная для хранения имени предопределенного элемента - ИмяПредопределенногоЭлемента = Неопределено; - - // Глобальный обработчик ПередКонвертациейОбъекта - Отказ = Ложь; - Если ЕстьГлобальныйОбработчикПередКонвертациейОбъекта Тогда - - Попытка - Выполнить(Конвертация.ПередКонвертациейОбъекта); - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(64, ОписаниеОшибки(), ПКО, Источник, НСтр("ru = 'ПередКонвертациейОбъекта (глобальный)'")); - КонецПопытки; - - Если Отказ Тогда // Отказ от дальнейшей обработки правила - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат Приемник; - КонецЕсли; - - КонецЕсли; - - - // Обработчик ПередВыгрузкой - Если ПКО.ЕстьОбработчикПередВыгрузкой Тогда - - Попытка - Выполнить(ПКО.ПередВыгрузкой); - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(41, ОписаниеОшибки(), ПКО, Источник, "ПередВыгрузкойОбъекта"); - КонецПопытки; - - Если Отказ Тогда // Отказ от дальнейшей обработки правила - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат Приемник; - КонецЕсли; - - КонецЕсли; - - СтрокаВСтекеВыгрузки = Неопределено; - - НужноОбновитьЛокальныйКЭШВыгруженныхОбъектов = Ложь; - ЗначениеСсылкиВДругойИБ = ""; - - // Возможно такие данные уже выгружались - Если Не ВсеОбъектыВыгружены Тогда - - Нпп = 0; - - Если ЗапоминатьВыгруженные Тогда - - СтрокаВыгруженныхОбъектов = ВыгруженныеОбъекты.Найти(КлючВыгружаемыхДанных, "Ключ"); - - Если СтрокаВыгруженныхОбъектов <> Неопределено Тогда - - СтрокаВыгруженныхОбъектов.КоличествоОбращений = СтрокаВыгруженныхОбъектов.КоличествоОбращений + 1; - СтрокаВыгруженныхОбъектов.НомерПоследнегоОбращения = СчетчикНПП; - - Если ТолькоПолучитьУзелСсылки Тогда - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Если Найти(СтрокаВыгруженныхОбъектов.УзелСсылки, "<Ссылка") > 0 - И НППЗаписанногоВФайл >= СтрокаВыгруженныхОбъектов.НППСсылки Тогда - Возврат СтрокаВыгруженныхОбъектов.НППСсылки; - Иначе - Возврат СтрокаВыгруженныхОбъектов.УзелСсылки; - КонецЕсли; - - КонецЕсли; - - НомерВыгруженнойСсылки = СтрокаВыгруженныхОбъектов.НППСсылки; - - Если НЕ СтрокаВыгруженныхОбъектов.ВыгруженаТолькоСсылка Тогда - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат СтрокаВыгруженныхОбъектов.УзелСсылки; - - Иначе - - СтрокаВСтекеВыгрузки = СтекВызововВыгрузкиДанных.Найти(КлючВыгружаемыхДанных, "Ссылка"); - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат Неопределено; - КонецЕсли; - - СтрокаВСтекеВыгрузки = СтекВызововВыгрузкиДанных.Добавить(); - СтрокаВСтекеВыгрузки.Ссылка = КлючВыгружаемыхДанных; - - Нпп = НомерВыгруженнойСсылки; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - Если Нпп = 0 Тогда - - СчетчикНПП = СчетчикНПП + 1; - Нпп = СчетчикНПП; - - - // Это позволит избежать циклических ссылок - Если ЗапоминатьВыгруженные Тогда - - Если СтрокаВыгруженныхОбъектов = Неопределено Тогда - - Если НЕ ЭтоПравилоСГлобальнойВыгрузкойОбъектов - И НЕ НужноОбновитьЛокальныйКЭШВыгруженныхОбъектов - И ВыгруженныеОбъекты.Количество() > ЧислоХранимыхВыгруженныхОбъектовПоТипам Тогда - - НужноОбновитьЛокальныйКЭШВыгруженныхОбъектов = Истина; - СоответствиеДанныхДляОбновленияВыгруженныхЭлементов.Вставить(ПКО.Приемник, ПКО); - - КонецЕсли; - - СтрокаВыгруженныхОбъектов = ВыгруженныеОбъекты.Добавить(); - - КонецЕсли; - - СтрокаВыгруженныхОбъектов.Ключ = КлючВыгружаемыхДанных; - СтрокаВыгруженныхОбъектов.УзелСсылки = НПП; - СтрокаВыгруженныхОбъектов.НППСсылки = НПП; - СтрокаВыгруженныхОбъектов.НомерПоследнегоОбращения = НПП; - - Если ТолькоПолучитьУзелСсылки Тогда - - СтрокаВыгруженныхОбъектов.ВыгруженаТолькоСсылка = Истина; - - Иначе - - СтрокаВСтекеВыгрузки = СтекВызововВыгрузкиДанных.Добавить(); - СтрокаВСтекеВыгрузки.Ссылка = КлючВыгружаемыхДанных; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - СоответствиеЗначений = ПКО.Значения; - КоличествоЭлементовСоответствияЗначений = СоответствиеЗначений.Количество(); - - // Обработка соответствий предопределенных элементов - Если ИмяПредопределенногоЭлемента = Неопределено Тогда - - Если СтруктураСвойств <> Неопределено - И КоличествоЭлементовСоответствияЗначений > 0 - И СтруктураСвойств.ВозможенПоискПоПредопределенным Тогда - - Попытка - ИмяПредопределенногоИсточник = СтруктураСвойств.Менеджер.ПолучитьИмяПредопределенного(СсылкаНаИсточник) - Исключение - ИмяПредопределенногоИсточник = ""; - КонецПопытки; - - Иначе - - ИмяПредопределенногоИсточник = ""; - - Конецесли; - - Если НЕ ПустаяСтрока(ИмяПредопределенногоИсточник) - И КоличествоЭлементовСоответствияЗначений > 0 Тогда - - ИмяПредопределенногоЭлемента = СоответствиеЗначений[СсылкаНаИсточник]; - - Иначе - ИмяПредопределенногоЭлемента = Неопределено; - КонецЕсли; - - КонецЕсли; - - Если ИмяПредопределенногоЭлемента <> Неопределено Тогда - КоличествоЭлементовСоответствияЗначений = 0; - КонецЕсли; - - НеНужноВыгружатьПоСоответствиюЗначений = (КоличествоЭлементовСоответствияЗначений = 0); - - Если Не НеНужноВыгружатьПоСоответствиюЗначений Тогда - - // если нет объекта в соответствии значений - выгружаем его штатным образом - УзелСсылки = СоответствиеЗначений[СсылкаНаИсточник]; - Если УзелСсылки = Неопределено Тогда - - // возможно это конвертация из перечисления в перечисление и мы просто не нашли по - //ПКЗ нужное свойство - тогда просто выгружаем пустую ссылку и все - Если СтруктураСвойств.ИмяТипа = "Перечисление" - И Найти(ПКО.Приемник, "ПеречислениеСсылка.") > 0 Тогда - - // записываем ошибку в протокол выполнения - ЗП = ПолучитьСтруктуруЗаписиПротокола(); - ЗП.ИмяПКО = ИмяПКО; - ЗП.Значение = Источник; - ЗП.ТипЗначения = СтруктураСвойств.ТипСсылкиСтрокой; - ЗП.КСообщенияОбОшибках = 71; - ЗП.Текст = НСтр("ru = 'В правиле конвертации значений (ПКЗ) необходимо сопоставить значение Источника значению Приемника. - |Если подходящего значения приемника нет, то указать пустое значение.'"); - // - ЗаписатьВПротоколВыполнения(71, ЗП); - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - - Возврат Неопределено; - - Иначе - - НеНужноВыгружатьПоСоответствиюЗначений = Истина; - - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - НЕВыгружатьПодчиненныеОбъекты = ТолькоПолучитьУзелСсылки ИЛИ НЕ ВыгружатьСсылкиУПодчиненныхОбъектов; - - НужноЗапоминатьОбъект = ЗапоминатьВыгруженные И (Не ВсеОбъектыВыгружены); - - Если НеНужноВыгружатьПоСоответствиюЗначений Тогда - - Если ПКО.СвойстваПоиска.Количество() > 0 - ИЛИ ИмяПредопределенногоЭлемента <> Неопределено Тогда - - // Формируем узел ссылки - УзелСсылки = СоздатьУзел("Ссылка"); - - Если НужноЗапоминатьОбъект Тогда - - Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда - УстановитьАтрибут(УзелСсылки, "ГНпп", Нпп); - Иначе - УстановитьАтрибут(УзелСсылки, "Нпп", Нпп); - КонецЕсли; - - КонецЕсли; - - Если НеСоздаватьЕслиНеНайден Тогда - УстановитьАтрибут(УзелСсылки, "НеСоздаватьЕслиНеНайден", НеСоздаватьЕслиНеНайден); - КонецЕсли; - - Если ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли Тогда - УстановитьАтрибут(УзелСсылки, "ПродолжитьПоиск", Истина); - КонецЕсли; - - Если РегистрироватьОбъектНаУзлеОтправителе Тогда - УстановитьАтрибут(УзелСсылки, "РегистрироватьОбъектНаУзлеОтправителе", РегистрироватьОбъектНаУзлеОтправителе); - КонецЕсли; - - ЗаписатьПриоритетОбъектовОбмена(ПриоритетОбъектовОбмена, УзелСсылки); - - Если НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике Тогда - УстановитьАтрибут(УзелСсылки, "НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике", НеЗамещатьОбъектСозданныйВИнформационнойБазеПриемнике); - КонецЕсли; - - ВыгрузитьТолькоСсылку = ПКО.НеВыгружатьОбъектыСвойствПоСсылкам ИЛИ НЕВыгружатьПодчиненныеОбъекты; - - Если ВыгружатьСвойстваОбъекта = Истина Тогда - - ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.СвойстваПоиска, - УзелСсылки, , ИмяПредопределенногоЭлемента, Истина, - Истина, ВыгружаетсяОбъект, КлючВыгружаемыхДанных, , ЗначениеСсылкиВДругойИБ); - - КонецЕсли; - - УзелСсылки.ЗаписатьКонецЭлемента(); - УзелСсылки = УзелСсылки.Закрыть(); - - Если НужноЗапоминатьОбъект Тогда - - СтрокаВыгруженныхОбъектов.УзелСсылки = УзелСсылки; - - КонецЕсли; - - Иначе - УзелСсылки = Нпп; - КонецЕсли; - - Иначе - - // Поиск в соответствии значений по ПКЗ - Если УзелСсылки = Неопределено Тогда - - // записываем ошибку в протокол выполнения - ЗП = ПолучитьСтруктуруЗаписиПротокола(); - ЗП.ИмяПКО = ИмяПКО; - ЗП.Значение = Источник; - ЗП.ТипЗначения = ТипЗнч(Источник); - ЗП.КСообщенияОбОшибках = 71; - - ЗаписатьВПротоколВыполнения(71, ЗП); - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат Неопределено; - КонецЕсли; - - Если ЗапоминатьВыгруженные Тогда - СтрокаВыгруженныхОбъектов.УзелСсылки = УзелСсылки; - КонецЕсли; - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - - КонецЕсли; - - - Если ТолькоПолучитьУзелСсылки - Или ВсеОбъектыВыгружены Тогда - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - - КонецЕсли; - - Если Приемник = Неопределено Тогда - - Приемник = СоздатьУзел("Объект"); - - Если НЕ ВыгрузкаСтрокиНабораЗаписейРегистра Тогда - - Если ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда - УстановитьАтрибут(Приемник, "ГНпп", Нпп); - Иначе - УстановитьАтрибут(Приемник, "Нпп", Нпп); - КонецЕсли; - - УстановитьАтрибут(Приемник, "Тип", ПКО.Приемник); - УстановитьАтрибут(Приемник, "ИмяПравила", ПКО.Имя); - - Если НЕ ПустаяСтрока(ИмяКонстантыДляВыгрузки) Тогда - - УстановитьАтрибут(Приемник, "ИмяКонстанты", ИмяКонстантыДляВыгрузки); - - КонецЕсли; - - ЗаписатьПриоритетОбъектовОбмена(ПриоритетОбъектовОбмена, Приемник); - - Если НеЗамещатьОбъектПриЗагрузке Тогда - УстановитьАтрибут(Приемник, "НеЗамещать", "true"); - КонецЕсли; - - Если Не ПустаяСтрока(ПрефиксАвтонумерации) Тогда - УстановитьАтрибут(Приемник, "ПрефиксАвтонумерации", ПрефиксАвтонумерации); - КонецЕсли; - - Если Не ПустаяСтрока(РежимЗаписи) Тогда - - УстановитьАтрибут(Приемник, "РежимЗаписи", РежимЗаписи); - Если Не ПустаяСтрока(РежимПроведения) Тогда - УстановитьАтрибут(Приемник, "РежимПроведения", РежимПроведения); - КонецЕсли; - - КонецЕсли; - - Если ТипЗнч(УзелСсылки) <> ТипЧисло Тогда - ДобавитьПодчиненный(Приемник, УзелСсылки); - КонецЕсли; - - КонецЕсли; - - КонецЕсли; - - // Обработчик ПриВыгрузке - СтандартнаяОбработка = Истина; - Отказ = Ложь; - - Если ПКО.ЕстьОбработчикПриВыгрузке Тогда - - Попытка - Выполнить(ПКО.ПриВыгрузке); - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(42, ОписаниеОшибки(), ПКО, Источник, "ПриВыгрузкеОбъекта"); - КонецПопытки; - - Если Отказ Тогда // отказ от записи объекта в файл - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - КонецЕсли; - - КонецЕсли; - - // Выгрузка свойств - Если СтандартнаяОбработка Тогда - - Если НЕ ПустаяСтрока(ИмяКонстантыДляВыгрузки) Тогда - - МассивСвойствДляВыгрузки = Новый Массив(); - - СтрокаТаблицы = ПКО.Свойства.Найти(ИмяКонстантыДляВыгрузки, "Источник"); - - Если СтрокаТаблицы <> Неопределено Тогда - МассивСвойствДляВыгрузки.Добавить(СтрокаТаблицы); - КонецЕсли; - - Иначе - - МассивСвойствДляВыгрузки = ПКО.Свойства; - - КонецЕсли; - - Если ВыгружатьСвойстваОбъекта Тогда - - ВыгрузитьСвойства( - Источник, // Источник - Приемник, // Приемник - ВходящиеДанные, // ВходящиеДанные - ИсходящиеДанные, // ИсходящиеДанные - ПКО, // ПКО - МассивСвойствДляВыгрузки, // КоллекцияПКС - , // УзелКоллекцииСвойств = Неопределено - , // ОбъектКоллекции = Неопределено - , // ИмяПредопределенногоЭлемента = Неопределено - Истина, // Знач ВыгрузитьТолькоСсылку = Истина - Ложь, // Знач ЭтоВыгрузкаСсылки = Ложь - ВыгружаетсяОбъект, // Знач ВыгружаетсяОбъект = Ложь - КлючВыгружаемыхДанных, // КлючПоискаСсылки = "" - , // НеИспользоватьПравилаСГлобальнойВыгрузкойИНеЗапоминатьВыгруженные = Ложь - ЗначениеСсылкиВДругойИБ, // ЗначениеСсылкиВДругойИБ - СписокВременныхФайлов, // СписокВременныхФайлов = Неопределено - ВыгрузкаСтрокиНабораЗаписейРегистра // ВыгрузкаСтрокиНабораЗаписейРегистра = Ложь - ); - - КонецЕсли; - - КонецЕсли; - - // Обработчик ПослеВыгрузки - - Если ПКО.ЕстьОбработчикПослеВыгрузки Тогда - - Попытка - Выполнить(ПКО.ПослеВыгрузки); - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(43, ОписаниеОшибки(), ПКО, Источник, "ПослеВыгрузкиОбъекта"); - КонецПопытки; - - Если Отказ Тогда // отказ от записи объекта в файл - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - Возврат УзелСсылки; - КонецЕсли; - КонецЕсли; - - - // Запись объекта в файл - Инкремент(ПолеСчетчикВыгруженныхОбъектов); - - ТекущийУровеньВложенностиВыгрузитьПоПравилу = ТекущийУровеньВложенностиВыгрузитьПоПравилу - 1; - - Если УзелПредка <> Неопределено Тогда - - Приемник.ЗаписатьКонецЭлемента(); - - УзелПредка.ЗаписатьБезОбработки(Приемник.Закрыть()); - - Иначе - - Если СписокВременныхФайлов = Неопределено Тогда - - Приемник.ЗаписатьКонецЭлемента(); - ЗаписатьВФайл(Приемник); - - Иначе - - ЗаписатьВФайл(Приемник); - - ВременныйФайл = Новый ЧтениеТекста; - Для каждого ИмяВременногоФайла Из СписокВременныхФайлов Цикл - - Попытка - ВременныйФайл.Открыть(ИмяВременногоФайла, КодировкаТекста.UTF8); - Исключение - Продолжить; - КонецПопытки; - - СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); - Пока СтрокаВременногоФайла <> Неопределено Цикл - ЗаписатьВФайл(СтрокаВременногоФайла); - СтрокаВременногоФайла = ВременныйФайл.ПрочитатьСтроку(); - КонецЦикла; - - ВременныйФайл.Закрыть(); - - // удалить файлы - Попытка - УдалитьФайлы(ИмяВременногоФайла); - Исключение - КонецПопытки; - - КонецЦикла; - - ЗаписатьВФайл("</Объект>"); - - КонецЕсли; - - Если НужноЗапоминатьОбъект - И ЭтоПравилоСГлобальнойВыгрузкойОбъектов Тогда - - СтрокаВыгруженныхОбъектов.УзелСсылки = НПП; - - КонецЕсли; - - Если ТекущийУровеньВложенностиВыгрузитьПоПравилу = 0 Тогда - - ПровестиУстановкуПризнаковВыгруженныхОбъектовВФайл(); - - КонецЕсли; - - ПровестиОбновлениеДанныхВВыгружаемыхДанных(); - - КонецЕсли; - - Если СтрокаВСтекеВыгрузки <> Неопределено Тогда - СтекВызововВыгрузкиДанных.Удалить(СтрокаВСтекеВыгрузки); - КонецЕсли; - - // Обработчик ПослеВыгрузкиВФайл - Если ПКО.ЕстьОбработчикПослеВыгрузкиВФайл Тогда - - Попытка - Выполнить(ПКО.ПослеВыгрузкиВФайл); - Исключение - ЗаписатьИнформациюОбОшибкеВыгрузкиОбработчикаПКО(79, ОписаниеОшибки(), ПКО, Источник, "ЕстьОбработчикПослеВыгрузкиВФайл"); - КонецПопытки; - - КонецЕсли; - - Возврат УзелСсылки; - -КонецФункции - Процедура ВыгрузитьИнформациюОЗарегистрированномОбъекте(НаборЗаписейДляВыгрузки) Если НаборЗаписейДляВыгрузки.Количество() = 0 Тогда // выгружаем пустой набор РС @@ -10576,131 +11254,7 @@ ЗаписатьВФайл(Приемник); - Инкремент(ПолеСчетчикВыгруженныхОбъектов); - -КонецПроцедуры - -Процедура ВыгрузитьРегистр(НаборЗаписейДляВыгрузки, - Правило = Неопределено, - ВходящиеДанные = Неопределено, - НеВыгружатьОбъектыПоСсылкам = Ложь, - ИмяПКО = "", - ПравилоВыгрузкиДанных = Неопределено) Экспорт - - ИсходящиеДанные = Неопределено; - - - ОпределитьПКОПоПараметрам(Правило, НаборЗаписейДляВыгрузки, ИмяПКО); - - Отказ = Ложь; - Свойства = Неопределено; - ВходящиеДанные = Неопределено; - ПриоритетОбъектовОбмена = Правило.ПриоритетОбъектовОбмена; - - Если ТипЗнч(НаборЗаписейДляВыгрузки) = Тип("Структура") Тогда - - ОтборНабораЗаписей = НаборЗаписейДляВыгрузки.Отбор; - СтрокиНабораЗаписей = НаборЗаписейДляВыгрузки.Строки; - - Иначе // НаборЗаписей - - ОтборНабораЗаписей = НаборЗаписейДляВыгрузки.Отбор; - СтрокиНабораЗаписей = НаборЗаписейДляВыгрузки; - - КонецЕсли; - - // записываем сначала отбор потом набор записей - // отбор - - Приемник = СоздатьУзел("НаборЗаписейРегистра"); - - КоличествоЗаписейВРегистре = СтрокиНабораЗаписей.Количество(); - - СчетчикНПП = СчетчикНПП + 1; - Нпп = СчетчикНПП; - - УстановитьАтрибут(Приемник, "Нпп", Нпп); - УстановитьАтрибут(Приемник, "Тип", СтрЗаменить(Правило.Приемник, "РегистрСведенийЗапись.", "РегистрСведенийНаборЗаписей.")); - УстановитьАтрибут(Приемник, "ИмяПравила", Правило.Имя); - - ЗаписатьПриоритетОбъектовОбмена(ПриоритетОбъектовОбмена, Приемник); - - ВыгружаемПустойНабор = КоличествоЗаписейВРегистре = 0; - Если ВыгружаемПустойНабор Тогда - УстановитьАтрибут(Приемник, "ПустойНабор", Истина); - КонецЕсли; - - Приемник.ЗаписатьНачалоЭлемента("Отбор"); - - СтруктураИсточник = Новый Структура; - МассивПКСДляВыгрузки = Новый Массив(); - - Для Каждого СтрокаОтбора Из ОтборНабораЗаписей Цикл - - Если СтрокаОтбора.Использование = Ложь Тогда - Продолжить; - КонецЕсли; - - СтрокаПКС = Правило.Свойства.Найти(СтрокаОтбора.Имя, "Источник"); - - Если СтрокаПКС = Неопределено Тогда - - СтрокаПКС = Правило.Свойства.Найти(СтрокаОтбора.Имя, "Приемник"); - - КонецЕсли; - - Если СтрокаПКС <> Неопределено - И (СтрокаПКС.ВидПриемника = "Свойство" - ИЛИ СтрокаПКС.ВидПриемника = "Измерение") Тогда - - МассивПКСДляВыгрузки.Добавить(СтрокаПКС); - - Ключ = ?(ПустаяСтрока(СтрокаПКС.Источник), СтрокаПКС.Приемник, СтрокаПКС.Источник); - - СтруктураИсточник.Вставить(Ключ, СтрокаОтбора.Значение); - - КонецЕсли; - - КонецЦикла; - - // добавляем параметры для отбора - Для Каждого СтрокаСвойстваПоиска Из Правило.СвойстваПоиска Цикл - - Если ПустаяСтрока(СтрокаСвойстваПоиска.Приемник) - И НЕ ПустаяСтрока(СтрокаСвойстваПоиска.ИмяПараметраДляПередачи) Тогда - - МассивПКСДляВыгрузки.Добавить(СтрокаСвойстваПоиска); - - КонецЕсли; - - КонецЦикла; - - ВыгрузитьСвойства(СтруктураИсточник, , ВходящиеДанные, ИсходящиеДанные, Правило, МассивПКСДляВыгрузки, Приемник, - , , Истина, , , , ВыгружаемПустойНабор); - - Приемник.ЗаписатьКонецЭлемента(); - - Приемник.ЗаписатьНачалоЭлемента("СтрокиНабораЗаписей"); - - // набор записей ВходящиеДанные = Неопределено; - Для Каждого СтрокаРегистра Из СтрокиНабораЗаписей Цикл - - ВыгрузкаОбъектаВыборки(СтрокаРегистра, ПравилоВыгрузкиДанных, , ВходящиеДанные, НеВыгружатьОбъектыПоСсылкам, Истина, - Приемник, , ИмяПКО, ЛОЖЬ); - - КонецЦикла; - - Приемник.ЗаписатьКонецЭлемента(); - - Приемник.ЗаписатьКонецЭлемента(); - - ЗаписатьВФайл(Приемник); - - ПровестиОбновлениеДанныхВВыгружаемыхДанных(); - - ПровестиУстановкуПризнаковВыгруженныхОбъектовВФайл(); - - Инкремент(ПолеСчетчикВыгруженныхОбъектов, 1 - СтрокиНабораЗаписей.Количество()); + УвеличитьСчетчикВыгруженныхОбъектов(); КонецПроцедуры @@ -10725,59 +11279,102 @@ Отказ = Ложь; ИсходящиеДанные = Неопределено; - + // Глобальный обработчик ПередВыгрузкойОбъекта - Если ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта Тогда + Если ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта Тогда Попытка - Выполнить(Конвертация.ПередВыгрузкойОбъекта); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередВыгрузкойОбъекта); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередВыгрузкойОбъекта(ФайлОбмена, Отказ, ИмяПКО, Правило, ВходящиеДанные, ИсходящиеДанные, Объект); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиПВД(65, ОписаниеОшибки(), Правило.Имя, Объект, НСтр("ru = 'ПередВыгрузкойОбъектаВыборки (глобальный)'")); КонецПопытки; - + Если Отказ Тогда Возврат; КонецЕсли; - КонецЕсли; - + КонецЕсли; + // Обработчик ПередВыгрузкой Если Не ПустаяСтрока(Правило.ПередВыгрузкой) Тогда Попытка - Выполнить(Правило.ПередВыгрузкой); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПередВыгрузкой); + + Иначе + + ВыполнитьОбработчик_ПВД_ПередВыгрузкойОбъекта(ФайлОбмена, Отказ, ИмяПКО, Правило, ВходящиеДанные, ИсходящиеДанные, Объект); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиПВД(33, ОписаниеОшибки(), Правило.Имя, Объект, "ПередВыгрузкойОбъектаВыборки"); КонецПопытки; КонецЕсли; - + КонецПроцедуры Процедура ВызватьСобытияПослеВыгрузкиОбъекта(Объект, Правило, Свойства=Неопределено, ВходящиеДанные=Неопределено, НеВыгружатьОбъектыСвойствПоСсылкам = Ложь, ИмяПКО, Отказ, ИсходящиеДанные) + Перем УзелСсылки; // Переменная-заглушка + // Глобальный обработчик ПослеВыгрузкиОбъекта - Если ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта Тогда + Если ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта Тогда + Попытка - Выполнить(Конвертация.ПослеВыгрузкиОбъекта); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПослеВыгрузкиОбъекта); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеВыгрузкиОбъекта(ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, ИсходящиеДанные, УзелСсылки); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиПВД(69, ОписаниеОшибки(), Правило.Имя, Объект, НСтр("ru = 'ПослеВыгрузкиОбъектаВыборки (глобальный)'")); КонецПопытки; КонецЕсли; - - // Обработчик ПослеВыгрузки + + // Обработчик ПослеВыгрузки Если Не ПустаяСтрока(Правило.ПослеВыгрузки) Тогда Попытка - Выполнить(Правило.ПослеВыгрузки); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПослеВыгрузки); + + Иначе + + ВыполнитьОбработчик_ПВД_ПослеВыгрузкиОбъекта(ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, ИсходящиеДанные, УзелСсылки, Правило); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиПВД(34, ОписаниеОшибки(), Правило.Имя, Объект, "ПослеВыгрузкиОбъектаВыборки"); КонецПопытки; КонецЕсли; - + КонецПроцедуры // Производит выгрузку объекта выборки в соответствии с указанным правилом @@ -11116,21 +11713,28 @@ // Обработчик ПередОбработкой - Отказ = Ложь; + Отказ = Ложь; ИсходящиеДанные = Неопределено; ВыборкаДанных = Неопределено; - Если Не ПустаяСтрока(Правило.ПередОбработкой) Тогда - + Попытка - Выполнить(Правило.ПередОбработкой); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПередОбработкой); + + Иначе + + ВыполнитьОбработчик_ПВД_ПередОбработкойПравила(Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных); + + КонецЕсли; Исключение ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), Правило.Имя, , "ПередОбработкойВыгрузкиДанных"); - + КонецПопытки; Если Отказ Тогда @@ -11231,14 +11835,22 @@ // Обработчик ПослеОбработки - + //ВсеОбъектыВыгружены = ПКО.ВсеОбъектыВыгружены; Если Не ПустаяСтрока(Правило.ПослеОбработки) Тогда - + Попытка - Выполнить(Правило.ПослеОбработки); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Правило.ПослеОбработки); + + Иначе + + ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, Правило, ИсходящиеДанные); + + КонецЕсли; Исключение @@ -11257,24 +11869,37 @@ ТекстСобытия = ""; Если Конвертация.Свойство("ПередОтправкойИнформацииОбУдалении", ТекстСобытия) Тогда - Отказ = Ложь; - - Попытка - Выполнить(ТекстСобытия); - Исключение - СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(76, ОписаниеОшибки(), "ПередОтправкойИнформацииОбУдалении (конвертация)"); + Если Не ПустаяСтрока(ТекстСобытия) Тогда - Если Не ФлагРежимОтладки Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; + Отказ = Ложь; + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ТекстСобытия); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередОтправкойИнформацииОбУдалении(Ссылка, Отказ); + + КонецЕсли; + + Исключение + СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(76, ОписаниеОшибки(), "ПередОтправкойИнформацииОбУдалении (конвертация)"); + + Если Не ПродолжитьПриОшибке Тогда + ВызватьИсключение СтрокаСообщенияОбОшибке; + КонецЕсли; + + Отказ = Истина; + КонецПопытки; + + Если Отказ Тогда + Возврат; КонецЕсли; - Отказ = Истина; - КонецПопытки; - - Если Отказ Тогда - Возврат; КонецЕсли; - КонецЕсли; Менеджер = Менеджеры[ТипЗнч(Ссылка)]; @@ -11296,20 +11921,7 @@ КонецЕсли; - УникальныйИдентификатор = Ссылка.УникальныйИдентификатор(); - - Приемник = СоздатьУзел("УдалениеОбъекта"); - - УстановитьАтрибут(Приемник, "ТипПриемника", Менеджер.ПКО.ТипПриемника); - УстановитьАтрибут(Приемник, "ТипИсточника", Менеджер.ПКО.ТипИсточника); - - УстановитьАтрибут(Приемник, "УникальныйИдентификатор", УникальныйИдентификатор); - - Приемник.ЗаписатьКонецЭлемента(); // УдалениеОбъекта - - ЗаписатьВФайл(Приемник); - - Инкремент(ПолеСчетчикВыгруженныхОбъектов); + ЗаписатьВФайлУдалениеОбъекта(Ссылка, Менеджер.ПКО.ТипПриемника, Менеджер.ПКО.ТипИсточника); КонецПроцедуры @@ -11510,6 +12122,9 @@ Продолжить; КонецЕсли; + ТаблицаОбщихРеквизитов = ТаблицаОбщихРеквизитов(); + ЗаполнитьТаблицуОбщихРеквизитов(ТаблицаОбщихРеквизитов); + Если ПустаяСтрока(СтрокаТаблицы.ИмяТабличнойЧасти) Тогда // реквизиты шапки Для Каждого Реквизит ИЗ СтрокаТаблицы.СтруктураРеквизитовРегистрации Цикл @@ -11518,7 +12133,8 @@ Если НЕ (ОбъектМД.Реквизиты.Найти(Реквизит.Ключ) <> Неопределено ИЛИ ОбъектМД.РеквизитыАдресации.Найти(Реквизит.Ключ) <> Неопределено - ИЛИ ОбменДаннымиСервер.ЭтоСтандартныйРеквизит(ОбъектМД.СтандартныеРеквизиты, Реквизит.Ключ)) Тогда + ИЛИ ОбменДаннымиСервер.ЭтоСтандартныйРеквизит(ОбъектМД.СтандартныеРеквизиты, Реквизит.Ключ) + ИЛИ ЭтоОбщийРеквизит(Реквизит.Ключ, ОбъектМД.ПолноеИмя(), ТаблицаОбщихРеквизитов)) Тогда СтрокаСообщения = НСтр("ru = 'Неправильно указаны реквизиты шапки объекта ""%1"". Реквизит ""%2"" не существует.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(ОбъектМД), Реквизит.Ключ); @@ -11529,7 +12145,8 @@ Иначе Если НЕ (ОбъектМД.Реквизиты.Найти(Реквизит.Ключ) <> Неопределено - ИЛИ ОбменДаннымиСервер.ЭтоСтандартныйРеквизит(ОбъектМД.СтандартныеРеквизиты, Реквизит.Ключ)) Тогда + ИЛИ ОбменДаннымиСервер.ЭтоСтандартныйРеквизит(ОбъектМД.СтандартныеРеквизиты, Реквизит.Ключ) + ИЛИ ЭтоОбщийРеквизит(Реквизит.Ключ, ОбъектМД.ПолноеИмя(), ТаблицаОбщихРеквизитов)) Тогда СтрокаСообщения = НСтр("ru = 'Неправильно указаны реквизиты шапки объекта ""%1"". Реквизит ""%2"" не существует.'"); СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, Строка(ОбъектМД), Реквизит.Ключ); @@ -11655,6 +12272,69 @@ КонецПроцедуры +// Возвращает признак того, что реквизит входит в подмножество общих реквизитов +// +Функция ЭтоОбщийРеквизит(ОбщийРеквизит, ИмяОМД, ТаблицаОбщихРеквизитов) + + ПараметрыПоиска = Новый Структура("ОбщийРеквизит, ОбъектМетаданных", ОбщийРеквизит, ИмяОМД); + НайденныеЗначения = ТаблицаОбщихРеквизитов.НайтиСтроки(ПараметрыПоиска); + + Если НайденныеЗначения.Количество() > 0 Тогда + + Возврат Истина; + + КонецЕсли; + + Возврат Ложь; + +КонецФункции + +Функция ТаблицаОбщихРеквизитов() + + ТаблицаОбщихРеквизитов = Новый ТаблицаЗначений; + ТаблицаОбщихРеквизитов.Колонки.Добавить("ОбщийРеквизит"); + ТаблицаОбщихРеквизитов.Колонки.Добавить("ОбъектМетаданных"); + + ТаблицаОбщихРеквизитов.Индексы.Добавить("ОбщийРеквизит, ОбъектМетаданных"); + + Возврат ТаблицаОбщихРеквизитов; + +КонецФункции + +Процедура ЗаполнитьТаблицуОбщихРеквизитов(ТаблицаОбщихРеквизитов) + + Если Метаданные.ОбщиеРеквизиты.Количество() <> 0 Тогда + + АвтоиспользованиеОбщегоРеквизита = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Авто; + ИспользованиеОбщегоРеквизита = Метаданные.СвойстваОбъектов.ИспользованиеОбщегоРеквизита.Использовать; + + Для Каждого ОбщийРеквизит Из Метаданные.ОбщиеРеквизиты Цикл + + Если ОбщийРеквизит.ИспользованиеРазделенияДанных = Неопределено Тогда + + Автоиспользование = (ОбщийРеквизит.Автоиспользование = Метаданные.СвойстваОбъектов.АвтоИспользованиеОбщегоРеквизита.Использовать); + + Для Каждого Элемент Из ОбщийРеквизит.Состав Цикл + + Если Элемент.Использование = ИспользованиеОбщегоРеквизита + Или (Элемент.Использование = АвтоиспользованиеОбщегоРеквизита И Автоиспользование) Тогда + + НоваяСтрока = ТаблицаОбщихРеквизитов.Добавить(); + НоваяСтрока.ОбщийРеквизит = ОбщийРеквизит.Имя; + НоваяСтрока.ОбъектМетаданных = Элемент.Метаданные.ПолноеИмя(); + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ЭКСПОРТИРУЕМЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -11976,7 +12656,7 @@ Процедура ЗагрузитьЗначенияПараметровОбменаДанными() Имя = одАтрибут(ФайлОбмена, ТипСтрока, "Имя"); - + ТипСвойства = ПолучитьТипСвойстваПоДополнительнымДанным(Неопределено, Имя); Значение = ПрочитатьСвойство(ТипСвойства); @@ -11987,10 +12667,18 @@ Если СобытияПослеЗагрузкиПараметров.Свойство(Имя, АлгоритмПослеЗагрузкиПараметра) И Не ПустаяСтрока(АлгоритмПослеЗагрузкиПараметра) Тогда - Выполнить(АлгоритмПослеЗагрузкиПараметра); - - КонецЕсли; + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(АлгоритмПослеЗагрузкиПараметра); + + Иначе + + ВыполнитьОбработчик_Параметры_ПослеЗагрузкиПараметра(Имя, Значение); + + КонецЕсли; + КонецЕсли; + КонецПроцедуры Процедура ЗагрузитьИнформациюОПользовательскихПоляхПоиска() @@ -12030,7 +12718,8 @@ Процедура ЗагрузитьПравилаОбмена( Источник="", ТипИсточника="XMLФайл", СтрокаСообщенияОбОшибке = "", - ЗагружатьТолькоЗаголовокПравил = Ложь) Экспорт + ЗагружатьТолькоЗаголовокПравил = Ложь + ) Экспорт // ИнициализироватьМенеджерыИСообщения(); @@ -12038,12 +12727,14 @@ ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта = Ложь; ЕстьГлобальныйОбработчикПередКонвертациейОбъекта = Ложь; - + ЕстьГлобальныйОбработчикПередЗагрузкойОбъекта = Ложь; ЕстьГлобальныйОбработчикПослеЗагрузкиОбъекта = Ложь; СоздатьСтруктуруКонвертации(); + ПолеРежимСовместимостиСБСП20 = Неопределено; + ТаблицаПравилКонвертацииСвойств = Новый ТаблицаЗначений; ИнициализацияТаблицыПравилКонвертацииСвойств(ТаблицаПравилКонвертацииСвойств); @@ -12085,18 +12776,18 @@ КонецЕсли; - + Если Не ((ПравилаОбмена.ЛокальноеИмя = "ПравилаОбмена") И (ПравилаОбмена.ТипУзла = ТипУзлаXMLНачалоЭлемента)) Тогда СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(7); Возврат; КонецЕсли; - - + + ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(); ЗаписьXML.ЗаписатьНачалоЭлемента("ПравилаОбмена"); - + Пока ПравилаОбмена.Прочитать() Цикл ИмяУзла = ПравилаОбмена.ЛокальноеИмя; @@ -12105,7 +12796,19 @@ Если ИмяУзла = "ВерсияФормата" Тогда Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); Конвертация.Вставить("ВерсияФормата", Значение); - одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ВерсияФормата"); + Стр = XMLСтрока(Значение); + + РежимСовместимости = ПравилаОбмена.ПолучитьАтрибут ("РежимСовместимости"); + Если РежимСовместимости <> Неопределено Тогда + Конвертация.Вставить("РежимСовместимости", РежимСовместимости); + ЗаписьXML.ЗаписатьАтрибут("РежимСовместимости", XMLСтрока(РежимСовместимости)); + КонецЕсли; + + ЗаписьXML.ЗаписатьТекст(Стр); + ЗаписьXML.ЗаписатьКонецЭлемента(); + ИначеЕсли ИмяУзла = "Ид" Тогда Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); Конвертация.Вставить("Ид", Значение); @@ -12150,6 +12853,11 @@ Возврат; КонецЕсли; + ИначеЕсли ИмяУзла = "РежимСовместимости" Тогда + Значение = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("РежимСовместимости", Значение); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Значение); + ИначеЕсли ИмяУзла = "Комментарий" Тогда одПропустить(ПравилаОбмена); @@ -12165,59 +12873,75 @@ ИначеЕсли ИмяУзла = "ПослеЗагрузкиПравилОбмена" Тогда Конвертация.Вставить("ПослеЗагрузкиПравилОбмена", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); - + Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиПравилОбмена","Конвертация_ПослеЗагрузкиПравилОбмена"); + ИначеЕсли ИмяУзла = "ПередВыгрузкойДанных" Тогда Конвертация.Вставить("ПередВыгрузкойДанных", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередВыгрузкойДанных","Конвертация_ПередВыгрузкойДанных"); ИначеЕсли ИмяУзла = "ПередПолучениемИзмененныхОбъектов" Тогда - Конвертация.Вставить("ПередПолучениемИзмененныхОбъектов", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ПередПолучениемИзмененныхОбъектов", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередПолучениемИзмененныхОбъектов","Конвертация_ПередПолучениемИзмененныхОбъектов"); ИначеЕсли ИмяУзла = "ПослеПолученияИнформацииОбУзлахОбмена" Тогда - Конвертация.Вставить("ПослеПолученияИнформацииОбУзлахОбмена", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ПослеПолученияИнформацииОбУзлахОбмена", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеПолученияИнформацииОбУзлахОбмена","Конвертация_ПослеПолученияИнформацииОбУзлахОбмена"); одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеПолученияИнформацииОбУзлахОбмена); ИначеЕсли ИмяУзла = "ПослеВыгрузкиДанных" Тогда Конвертация.Вставить("ПослеВыгрузкиДанных", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеВыгрузкиДанных","Конвертация_ПослеВыгрузкиДанных"); ИначеЕсли ИмяУзла = "ПередОтправкойИнформацииОбУдалении" Тогда Конвертация.Вставить("ПередОтправкойИнформацииОбУдалении", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередОтправкойИнформацииОбУдалении","Конвертация_ПередОтправкойИнформацииОбУдалении"); ИначеЕсли ИмяУзла = "ПередВыгрузкойОбъекта" Тогда Конвертация.Вставить("ПередВыгрузкойОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередВыгрузкойОбъекта","Конвертация_ПередВыгрузкойОбъекта"); ЕстьГлобальныйОбработчикПередВыгрузкойОбъекта = Не ПустаяСтрока(Конвертация.ПередВыгрузкойОбъекта); ИначеЕсли ИмяУзла = "ПослеВыгрузкиОбъекта" Тогда Конвертация.Вставить("ПослеВыгрузкиОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеВыгрузкиОбъекта","Конвертация_ПослеВыгрузкиОбъекта"); ЕстьГлобальныйОбработчикПослеВыгрузкиОбъекта = Не ПустаяСтрока(Конвертация.ПослеВыгрузкиОбъекта); ИначеЕсли ИмяУзла = "ПередЗагрузкойОбъекта" Тогда Конвертация.Вставить("ПередЗагрузкойОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередЗагрузкойОбъекта","Конвертация_ПередЗагрузкойОбъекта"); ЕстьГлобальныйОбработчикПередЗагрузкойОбъекта = Не ПустаяСтрока(Конвертация.ПередЗагрузкойОбъекта); одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПередЗагрузкойОбъекта); ИначеЕсли ИмяУзла = "ПослеЗагрузкиОбъекта" Тогда Конвертация.Вставить("ПослеЗагрузкиОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиОбъекта","Конвертация_ПослеЗагрузкиОбъекта"); ЕстьГлобальныйОбработчикПослеЗагрузкиОбъекта = Не ПустаяСтрока(Конвертация.ПослеЗагрузкиОбъекта); одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеЗагрузкиОбъекта); ИначеЕсли ИмяУзла = "ПередКонвертациейОбъекта" Тогда Конвертация.Вставить("ПередКонвертациейОбъекта", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПередКонвертациейОбъекта","Конвертация_ПередКонвертациейОбъекта"); ЕстьГлобальныйОбработчикПередКонвертациейОбъекта = Не ПустаяСтрока(Конвертация.ПередКонвертациейОбъекта); ИначеЕсли ИмяУзла = "ПередЗагрузкойДанных" Тогда Конвертация.ПередЗагрузкойДанных = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("ИмяОбработчикаПередЗагрузкойДанных","Конвертация_ПередЗагрузкойДанных"); одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПередЗагрузкойДанных); ИначеЕсли ИмяУзла = "ПослеЗагрузкиДанных" Тогда Конвертация.ПослеЗагрузкиДанных = одЗначениеЭлемента(ПравилаОбмена, ТипСтрока); + Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиДанных","Конвертация_ПослеЗагрузкиДанных"); одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеЗагрузкиДанных); ИначеЕсли ИмяУзла = "ПослеЗагрузкиПараметров" Тогда Конвертация.Вставить("ПослеЗагрузкиПараметров", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПослеЗагрузкиПараметров","Конвертация_ПослеЗагрузкиПараметров"); + одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПослеЗагрузкиПараметров); ИначеЕсли ИмяУзла = "ПриПолученииИнформацииОбУдалении" Тогда Конвертация.Вставить("ПриПолученииИнформацииОбУдалении", одЗначениеЭлемента(ПравилаОбмена, ТипСтрока)); + Конвертация.Вставить("ИмяОбработчикаПриПолученииИнформацииОбУдалении","Конвертация_ПриПолученииИнформацииОбУдалении"); одЗаписатьЭлемент(ЗаписьXML, ИмяУзла, Конвертация.ПриПолученииИнформацииОбУдалении); ИначеЕсли ИмяУзла = "УдалятьСопоставленныеОбъектыВПриемникеПриИхУдаленииВИсточнике" Тогда @@ -12285,18 +13009,30 @@ СтрокаТиповДляПриемника = СоздатьСтрокуСТипамиДляПриемника(СтруктураДанных); + ИнициализироватьОбработки(); + // нужно вызвать событие после загрузки правил обмена ТекстСобытияПослеЗагрузкиПравилОбмена = ""; Если Конвертация.Свойство("ПослеЗагрузкиПравилОбмена", ТекстСобытияПослеЗагрузкиПравилОбмена) И Не ПустаяСтрока(ТекстСобытияПослеЗагрузкиПравилОбмена) Тогда Попытка - Выполнить(ТекстСобытияПослеЗагрузкиПравилОбмена); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ТекстСобытияПослеЗагрузкиПравилОбмена); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПравилОбмена(); + + КонецЕсли; + Исключение СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(75, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиПравилОбмена (конвертация)'")); Отказ = Истина; - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -12310,7 +13046,7 @@ Процедура ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки) - Инкремент(ПолеСчетчикЗагруженныхОбъектов); + УвеличитьСчетчикЗагруженныхОбъектов(); Если СчетчикЗагруженныхОбъектов() % 100 = 0 И ГлобальныйСтекНеЗаписанныхОбъектов.Количество() > 100 Тогда @@ -12350,12 +13086,22 @@ Отказ = Ложь; Попытка - Выполнить(ТекстСобытия); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ТекстСобытия); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПриПолученииИнформацииОбУдалении(Объект, Отказ); + + КонецЕсли; + Исключение СтрокаСообщенияОбОшибке = ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(77, ОписаниеОшибки(), НСтр("ru = 'ПриПолученииИнформацииОбУдалении (конвертация)'")); Отказ = Истина; - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -12478,13 +13224,25 @@ Возврат; КонецЕсли; + ИнициализироватьОбработки(); + // {Обработчик: ПередЗагрузкойДанных} Начало Отказ = Ложь; Если Не ПустаяСтрока(Конвертация.ПередЗагрузкойДанных) Тогда Попытка - Выполнить(Конвертация.ПередЗагрузкойДанных); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередЗагрузкойДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(22, ОписаниеОшибки(), НСтр("ru = 'ПередЗагрузкойДанных (конвертация)'")); Отказ = Истина; @@ -12517,7 +13275,17 @@ Если Не ПустаяСтрока(Конвертация.ПослеЗагрузкиДанных) Тогда Попытка - Выполнить(Конвертация.ПослеЗагрузкиДанных); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПослеЗагрузкиДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных(); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(23, ОписаниеОшибки(), НСтр("ru = 'ПослеЗагрузкиДанных (конвертация)'")); КонецПопытки; @@ -12574,28 +13342,6 @@ ОбработатьОкончаниеЧтенияНовогоЭлемента(ПоследнийОбъектЗагрузки); - ИначеЕсли ИмяУзла = "Алгоритм" Тогда - - ТекстАлгоритма = одЗначениеЭлемента(ФайлОбмена, ТипСтрока); - - Если Не ПустаяСтрока(ТекстАлгоритма) Тогда - - Попытка - Выполнить(ТекстАлгоритма); - Исключение - - ЗП = ПолучитьСтруктуруЗаписиПротокола(39, ОписаниеОшибки()); - ЗП.Обработчик = "АлгоритмФайлаОбмена"; - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(39, ЗП, Истина); - - Если Не ФлагРежимОтладки Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - - КонецЕсли; - ИначеЕсли ИмяУзла = "ПравилаОбмена" Тогда Если ТаблицаПравилКонвертации.Количество() = 0 Тогда @@ -12622,7 +13368,7 @@ ЗагрузитьЗначенияПараметровОбменаДанными(); - ИначеЕсли ИмяУзла = "АлгоритмПослеЗагрузкиПараметров" Тогда + ИначеЕсли ИмяУзла = "АлгоритмПослеЗагрузкиПараметров" Тогда Отказ = Ложь; ПричинаОтказа = ""; @@ -12633,7 +13379,15 @@ Попытка - Выполнить(ТекстАлгоритма); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ТекстАлгоритма); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПараметров(ФайлОбмена, Отказ, ПричинаОтказа); + + КонецЕсли; Если Отказ = Истина Тогда @@ -12654,7 +13408,7 @@ ЗП.Обработчик = "ПослеЗагрузкиПараметров"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(78, ЗП, Истина); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -12759,7 +13513,7 @@ Если СтрокаТаблицы = Неопределено Тогда - Инкремент(ПолеСчетчикЗагруженныхОбъектов); + УвеличитьСчетчикЗагруженныхОбъектов(); СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Добавить(); @@ -12830,7 +13584,7 @@ Если СтрокаТаблицы = Неопределено Тогда - Инкремент(ПолеСчетчикЗагруженныхОбъектов); + УвеличитьСчетчикЗагруженныхОбъектов(); СтрокаТаблицы = ТаблицаДанныхСообщенияОбмена.Добавить(); @@ -13006,28 +13760,6 @@ ЕстьКорректировкаИнформацииОРегистрацииОбъекта = Истина; - ИначеЕсли ИмяУзла = "Алгоритм" Тогда - - ТекстАлгоритма = одЗначениеЭлемента(ФайлОбмена, ТипСтрока); - - Если Не ПустаяСтрока(ТекстАлгоритма) Тогда - - Попытка - Выполнить(ТекстАлгоритма); - Исключение - - ЗП = ПолучитьСтруктуруЗаписиПротокола(39, ОписаниеОшибки()); - ЗП.Обработчик = "АлгоритмФайлаОбмена"; - СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(39, ЗП, Истина); - - Если Не ФлагРежимОтладки Тогда - ВызватьИсключение СтрокаСообщенияОбОшибке; - КонецЕсли; - - КонецПопытки; - - КонецЕсли; - ИначеЕсли ИмяУзла = "ЗначениеПараметра" Тогда ЗагрузитьЗначенияПараметровОбменаДанными(); @@ -13043,7 +13775,15 @@ Попытка - Выполнить(ТекстАлгоритма); + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ТекстАлгоритма); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПараметров(ФайлОбмена, Отказ, ПричинаОтказа); + + КонецЕсли; Если Отказ = Истина Тогда @@ -13064,7 +13804,7 @@ ЗП.Обработчик = "ПослеЗагрузкиПараметров"; СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(78, ЗП, Истина); - Если Не ФлагРежимОтладки Тогда + Если Не ПродолжитьПриОшибке Тогда ВызватьИсключение СтрокаСообщенияОбОшибке; КонецЕсли; @@ -13168,6 +13908,26 @@ КонецЕсли; + Если Не ПустаяСтрока(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена) Тогда + + Попытка + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПослеПолученияИнформацииОбУзлахОбмена); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеПолученияИнформацииОбУзлахОбмена(УзелОбменаЗагрузкаДанных); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(176, ОписаниеОшибки(), "ПослеПолученияИнформацииОбУзлахОбмена (конвертация)"); + КонецПопытки; + + КонецЕсли; + КонецПроцедуры Процедура ПрочитатьОбщиеДанныеУзлов() @@ -13180,7 +13940,7 @@ ОбщийУзел = ПрочитатьОбъект(); - Инкремент(ПолеСчетчикЗагруженныхОбъектов); + УвеличитьСчетчикЗагруженныхОбъектов(); РежимЗагрузкиДанных = РежимЗагрузкиДанныхПредыдущий; @@ -13194,7 +13954,7 @@ ОбщийУзел.Записать(); // Обновляем повторноиспользуемые значения механизма - ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); // Удаляем регистрацию изменений на случай, если изменения были ранее зарегистрированы (в случае коллизии изменений) РегистрыСведений.ИзмененияОбщихДанныхУзлов.УдалитьРегистрациюИзменений(ОбщийУзел.Ссылка); @@ -13216,7 +13976,7 @@ КонецЕсли; // сворачиваем таблицу по уникальным полям - ДокументыДляОтложенногоПроведения().Свернуть("ДокументОбъект, ДокументСсылка, ДатаДокумента, ДокументПроведенУспешно"); + ДокументыДляОтложенногоПроведения().Свернуть("ДокументСсылка, ДатаДокумента, ДокументПроведенУспешно"); // сортируем документы по возрастанию даты документов ДокументыДляОтложенногоПроведения().Сортировать("ДатаДокумента"); @@ -13226,7 +13986,15 @@ Для Каждого СтрокаТаблицы ИЗ ДокументыДляОтложенногоПроведения() Цикл - Объект = СтрокаТаблицы.ДокументОбъект; + Если СтрокаТаблицы.ДокументСсылка.Пустая() Тогда + Продолжить; + КонецЕсли; + + Объект = СтрокаТаблицы.ДокументСсылка.ПолучитьОбъект(); + + Если Объект = Неопределено Тогда + Продолжить; + КонецЕсли; // устанавливаем узел-отправитель для предотвращения регистрации объекта на узле, для которого производим загрузку // проведение выполняем не в режиме загрузки @@ -13600,9 +14368,19 @@ Отказ = Ложь; Если Не ПустаяСтрока(Конвертация.ПередВыгрузкойДанных) Тогда - + Попытка - Выполнить(Конвертация.ПередВыгрузкойДанных); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередВыгрузкойДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередВыгрузкойДанных(ФайлОбмена, Отказ); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(62, ОписаниеОшибки(), НСтр("ru = 'ПередВыгрузкойДанных (конвертация)'")); Отказ = Истина; @@ -13723,6 +14501,13 @@ КонецЕсли; + // назначаем номер отправленного сообщения для объектов, созданных в текущей сессии выгрузки данных + Если СозданныеПриВыгрузкеОбъекты().Количество() > 0 Тогда + + ПланыОбмена.ВыбратьИзменения(ЗаписьСообщения.Получатель, ЗаписьСообщения.НомерСообщения, СозданныеПриВыгрузкеОбъекты()); + + КонецЕсли; + Если Отказ Тогда ЗаписьСообщения.ПрерватьЗапись(); Иначе @@ -13736,7 +14521,17 @@ Если Не Отказ И Не ПустаяСтрока(Конвертация.ПослеВыгрузкиДанных) Тогда Попытка - Выполнить(Конвертация.ПослеВыгрузкиДанных); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПослеВыгрузкиДанных); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПослеВыгрузкиДанных(ФайлОбмена); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(63, ОписаниеОшибки(), НСтр("ru = 'ПослеВыгрузкиДанных (конвертация)'")); КонецПопытки; @@ -13788,16 +14583,30 @@ Процедура ВыполнитьВыгрузкуЗарегистрированныхДанных(ЗаписьСообщения, СтрокаСообщенияОбОшибке, ТаблицаПравилВыгрузкиИспользуемые) + // Переменные-заглушки для поддержки механизма отладки кода обработчиков событий + Перем Отказ, ИмяПКО, ВыборкаДанных, ИсходящиеДанные; // {ОБРАБОТЧИК ПередПолучениемИзмененныхОбъектов} Если Не ПустаяСтрока(Конвертация.ПередПолучениемИзмененныхОбъектов) Тогда Попытка - Выполнить(Конвертация.ПередПолучениемИзмененныхОбъектов); + + Получатель = УзелДляОбмена; + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(Конвертация.ПередПолучениемИзмененныхОбъектов); + + Иначе + + ВыполнитьОбработчик_Конвертация_ПередПолучениемИзмененныхОбъектов(Получатель, УзелДляФоновогоОбмена); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиКонвертации(175, ОписаниеОшибки(), "ПередПолучениемИзмененныхОбъектов (конвертация)"); Возврат; КонецПопытки; - + КонецЕсли; // {ОБРАБОТЧИК ПередПолучениемИзмененныхОбъектов} @@ -13821,7 +14630,7 @@ КонецЕсли; // обновляем повторно используемые значения МРО - ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); НачальнаяВыгрузкаДанных = ОбменДаннымиСервер.УстановленПризнакНачальнойВыгрузкиДанных(ЗаписьСообщения.Получатель); @@ -13856,6 +14665,8 @@ КонецЕсли; + УзелДляОбменаОбъект = УзелДляОбмена.ПолучитьОбъект(); + Пока ВыборкаИзменений.Следующий() Цикл Данные = ВыборкаИзменений.Получить(); @@ -13880,12 +14691,22 @@ // {ОБРАБОТЧИК ПослеОбработки ПВД} Если ПравилоВыгрузкиДанныхПредыдущее <> Неопределено И Не ПустаяСтрока(ПравилоВыгрузкиДанныхПредыдущее.ПослеОбработки) Тогда + + Попытка - Попытка + Если РежимСовместимостиСБСП20() Тогда + Выполнить(ПравилоВыгрузкиДанныхПредыдущее.ПослеОбработки); - Исключение - ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанныхПредыдущее.Имя, , "ПослеОбработкиВыгрузкиДанных"); - КонецПопытки; + + Иначе + + ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, ПравилоВыгрузкиДанныхПредыдущее, ИсходящиеДанные); + + КонецЕсли; + + Исключение + ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанныхПредыдущее.Имя, , "ПослеОбработкиВыгрузкиДанных"); + КонецПопытки; КонецЕсли; // {ОБРАБОТЧИК ПослеОбработки ПВД} @@ -13928,11 +14749,22 @@ И Не ПустаяСтрока(ПравилоВыгрузкиДанных.ПередОбработкой) Тогда Попытка - Выполнить(ПравилоВыгрузкиДанных.ПередОбработкой); + + Если РежимСовместимостиСБСП20() Тогда + + Выполнить(ПравилоВыгрузкиДанных.ПередОбработкой); + + Иначе + + ВыполнитьОбработчик_ПВД_ПередОбработкойПравила(Отказ, ИмяПКО, ПравилоВыгрузкиДанных, ИсходящиеДанные, ВыборкаДанных); + + КонецЕсли; + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиПВД(31, ОписаниеОшибки(), ПравилоВыгрузкиДанных.Имя, , "ПередОбработкойВыгрузкиДанных"); КонецПопытки; + КонецЕсли; // {ОБРАБОТЧИК ПередОбработкой ПВД} @@ -13943,13 +14775,21 @@ // определяем вид отправки объекта ОтправкаЭлемента = ОтправкаЭлементаДанных.Авто; - ОбменДаннымиСобытия.ПриОтправкеДанных(Данные, ОтправкаЭлемента, УзелДляОбмена, ИмяПланаОбмена(), НачальнаяВыгрузкаДанных); + СтандартныеПодсистемыПереопределяемый.ПриОтправкеДанныхПодчиненному(УзелДляОбменаОбъект, Данные, ОтправкаЭлемента, НачальнаяВыгрузкаДанных); Если ОтправкаЭлемента = ОтправкаЭлементаДанных.Удалить Тогда - // посылаем информацию об удалении - ОтработатьУдалениеОбъекта(Данные); - Продолжить; + Если ВыгружаетсяРегистр Тогда + + // Удаление регистра отсылаем в виде пустого набора записей + + Иначе + + // посылаем информацию об удалении + ОтработатьУдалениеОбъекта(Данные); + Продолжить; + + КонецЕсли; ИначеЕсли ОтправкаЭлемента = ОтправкаЭлементаДанных.Игнорировать Тогда @@ -14008,10 +14848,20 @@ // {ОБРАБОТЧИК ПослеОбработки ПВД} Если ПравилоВыгрузкиДанных <> Неопределено И Не ПустаяСтрока(ПравилоВыгрузкиДанных.ПослеОбработки) Тогда + + Попытка - Попытка + Если РежимСовместимостиСБСП20() Тогда + Выполнить(ПравилоВыгрузкиДанных.ПослеОбработки); - Исключение + + Иначе + + ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, ПравилоВыгрузкиДанных, ИсходящиеДанные); + + КонецЕсли; + + Исключение ЗаписатьИнформациюОбОшибкеОбработчикиПВД(32, ОписаниеОшибки(), ПравилоВыгрузкиДанных.Имя, , "ПослеОбработкиВыгрузкиДанных"); КонецПопытки; @@ -14172,11 +15022,16 @@ Колонки.Добавить("ЭтоОбязательноеСвойство", одОписаниеТипа("Булево")); Колонки.Добавить("ПередВыгрузкой"); + Колонки.Добавить("ИмяОбработчикаПередВыгрузкой"); Колонки.Добавить("ПриВыгрузке"); + Колонки.Добавить("ИмяОбработчикаПриВыгрузке"); Колонки.Добавить("ПослеВыгрузки"); + Колонки.Добавить("ИмяОбработчикаПослеВыгрузки"); Колонки.Добавить("ПередОбработкойВыгрузки"); + Колонки.Добавить("ИмяОбработчикаПередОбработкойВыгрузки"); Колонки.Добавить("ПослеОбработкиВыгрузки"); + Колонки.Добавить("ИмяОбработчикаПослеОбработкиВыгрузки"); Колонки.Добавить("ЕстьОбработчикПередВыгрузкой", одОписаниеТипа("Булево")); Колонки.Добавить("ЕстьОбработчикПриВыгрузке", одОписаниеТипа("Булево")); @@ -14245,9 +15100,16 @@ Колонки.Добавить("ТипПриемника", одОписаниеТипа("Строка")); Колонки.Добавить("ПередВыгрузкой"); + Колонки.Добавить("ИмяОбработчикаПередВыгрузкой"); + Колонки.Добавить("ПриВыгрузке"); + Колонки.Добавить("ИмяОбработчикаПриВыгрузке"); + Колонки.Добавить("ПослеВыгрузки"); + Колонки.Добавить("ИмяОбработчикаПослеВыгрузки"); + Колонки.Добавить("ПослеВыгрузкиВФайл"); + Колонки.Добавить("ИмяОбработчикаПослеВыгрузкиВФайл"); Колонки.Добавить("ЕстьОбработчикПередВыгрузкой", одОписаниеТипа("Булево")); Колонки.Добавить("ЕстьОбработчикПриВыгрузке", одОписаниеТипа("Булево")); @@ -14255,10 +15117,17 @@ Колонки.Добавить("ЕстьОбработчикПослеВыгрузкиВФайл",одОписаниеТипа("Булево")); Колонки.Добавить("ПередЗагрузкой"); + Колонки.Добавить("ИмяОбработчикаПередЗагрузкой"); + Колонки.Добавить("ПриЗагрузке"); + Колонки.Добавить("ИмяОбработчикаПриЗагрузке"); + Колонки.Добавить("ПослеЗагрузки"); + Колонки.Добавить("ИмяОбработчикаПослеЗагрузки"); Колонки.Добавить("ПоследовательностьПолейПоиска"); + Колонки.Добавить("ИмяОбработчикаПоследовательностьПолейПоиска"); + Колонки.Добавить("ПоискПоТабличнымЧастям"); Колонки.Добавить("ПриоритетОбъектовОбмена"); @@ -14310,10 +15179,14 @@ Колонки.Добавить("ПравилоКонвертации"); Колонки.Добавить("ПередОбработкой"); + Колонки.Добавить("ИмяОбработчикаПередОбработкой"); Колонки.Добавить("ПослеОбработки"); + Колонки.Добавить("ИмяОбработчикаПослеОбработки"); Колонки.Добавить("ПередВыгрузкой"); + Колонки.Добавить("ИмяОбработчикаПередВыгрузкой"); Колонки.Добавить("ПослеВыгрузки"); + Колонки.Добавить("ИмяОбработчикаПослеВыгрузки"); // Колонки для поддержки отбора с помощью построителя Колонки.Добавить("ИспользоватьОтбор", одОписаниеТипа("Булево")); @@ -14353,8 +15226,11 @@ Колонки.Добавить("Непосредственно", одОписаниеТипа("Булево")); Колонки.Добавить("ПередОбработкой"); + Колонки.Добавить("ИмяОбработчикаПередОбработкой"); Колонки.Добавить("ПослеОбработки"); + Колонки.Добавить("ИмяОбработчикаПослеОбработки"); Колонки.Добавить("ПередУдалением"); + Колонки.Добавить("ИмяОбработчикаПередУдалением"); КонецПроцедуры // ИнициализацияТаблицыПравилОчистки() @@ -14403,6 +15279,71 @@ КонецФункции +Процедура ИнициализироватьОбработки() + + Если РежимСовместимостиСБСП20() Тогда + + Возврат; + + КонецЕсли; + + ИмяПланаОбмена = ИмяПланаОбмена(); + МенеджерПланаОбмена = ПланыОбмена[ИмяПланаОбмена]; + + Если РежимОбмена = "Выгрузка" Или РежимОбмена = "" Тогда + + Если ОтладкаОбработчиковВыгрузки Тогда + + ОбработкаВыгрузки = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОтладкиВыгрузки); + + Иначе + + ИмяОбработкиВыгрузки = МенеджерПланаОбмена.ИмяОбработкиВыгрузки(); + + Попытка + + ОбработкаВыгрузки = Обработки[ИмяОбработкиВыгрузки].Создать(); + + Исключение + + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(18); + Возврат; + + КонецПопытки; + + КонецЕсли; + + ОбработкаВыгрузки.ПодключитьОбработкуДляОтладки(ЭтотОбъект); + + ИначеЕсли РежимОбмена = "Загрузка" Или РежимОбмена = "" Тогда + + Если ОтладкаОбработчиковЗагрузки Тогда + + ОбработкаЗагрузки = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОтладкиЗагрузки); + + Иначе + + ИмяОбработкиЗагрузки = МенеджерПланаОбмена.ИмяОбработкиЗагрузки(); + + Попытка + + ОбработкаЗагрузки = Обработки[ИмяОбработкиЗагрузки].Создать(); + + Исключение + + СтрокаСообщенияОбОшибке = ЗаписатьВПротоколВыполнения(18); + Возврат; + + КонецПопытки; + + КонецЕсли; + + ОбработкаЗагрузки.ПодключитьОбработкуДляОтладки(ЭтотОбъект); + + КонецЕсли; + +КонецПроцедуры + // Инициализирует переменную СообщенияОбОшибках, содержащую соответствия кодов сообщений их описаниям // // Параметры: @@ -14431,7 +15372,7 @@ СообщенияОбОшибках.Вставить(16, НСтр("ru = 'Ошибка получения значения свойства подчиненного объекта (по имени свойства источника)'")); СообщенияОбОшибках.Вставить(17, НСтр("ru = 'Ошибка получения значения свойства подчиненного объекта (по имени свойства приемника)'")); - + СообщенияОбОшибках.Вставить(18, НСтр("ru = 'Ошибка при создании обработки с кодом обработчиков'")); СообщенияОбОшибках.Вставить(19, НСтр("ru = 'Ошибка в обработчике события ПередЗагрузкойОбъекта'")); СообщенияОбОшибках.Вставить(20, НСтр("ru = 'Ошибка в обработчике события ПриЗагрузкеОбъекта'")); СообщенияОбОшибках.Вставить(21, НСтр("ru = 'Ошибка в обработчике события ПослеЗагрузкиОбъекта'")); @@ -14449,8 +15390,6 @@ СообщенияОбОшибках.Вставить(33, НСтр("ru = 'Ошибка в обработчике события ПередВыгрузкойОбъекта'")); СообщенияОбОшибках.Вставить(34, НСтр("ru = 'Ошибка в обработчике события ПослеВыгрузкиОбъекта'")); - СообщенияОбОшибках.Вставить(39, НСтр("ru = 'Ошибка при выполнении алгоритма, содержащегося в файле обмена'")); - СообщенияОбОшибках.Вставить(41, НСтр("ru = 'Ошибка в обработчике события ПередВыгрузкойОбъекта'")); СообщенияОбОшибках.Вставить(42, НСтр("ru = 'Ошибка в обработчике события ПриВыгрузкеОбъекта'")); СообщенияОбОшибках.Вставить(43, НСтр("ru = 'Ошибка в обработчике события ПослеВыгрузкиОбъекта'")); @@ -14508,7 +15447,7 @@ СообщенияОбОшибках.Вставить(174, НСтр("ru = 'Сообщение обмена было принято ранее'")); СообщенияОбОшибках.Вставить(175, НСтр("ru = 'Ошибка в обработчике события ПередПолучениемИзмененныхОбъектов (конвертация)'")); СообщенияОбОшибках.Вставить(176, НСтр("ru = 'Ошибка в обработчике события ПослеПолученияИнформацииОбУзлахОбмена (конвертация)'")); - + СообщенияОбОшибках.Вставить(1000, НСтр("ru = 'Ошибка при создании временного файла выгрузки данных'")); КонецПроцедуры // ИнициализацияСообщений() @@ -14707,8 +15646,9 @@ Процедура СоздатьСтруктуруКонвертации() - Конвертация = Новый Структура("ПередВыгрузкойДанных, ПослеВыгрузкиДанных, ПередПолучениемИзмененныхОбъектов, ПослеПолученияИнформацииОбУзлахОбмена, ПередВыгрузкойОбъекта, ПослеВыгрузкиОбъекта, ПередКонвертациейОбъекта, ПередЗагрузкойОбъекта, ПослеЗагрузкиОбъекта, ПередЗагрузкойДанных, ПослеЗагрузкиДанных, ПриПолученииИнформацииОбУдалении, ПередОтправкойИнформацииОбУдалении"); + Конвертация = Новый Структура("ПередВыгрузкойДанных, ПослеВыгрузкиДанных, ПередПолучениемИзмененныхОбъектов, ПослеПолученияИнформацииОбУзлахОбмена, ПередВыгрузкойОбъекта, ПослеВыгрузкиОбъекта, ПередКонвертациейОбъекта, ПередЗагрузкойОбъекта, ПослеЗагрузкиОбъекта, ПередЗагрузкойДанных, ПослеЗагрузкиДанных, ПриПолученииИнформацииОбУдалении, ПередОтправкойИнформацииОбУдалении"); Конвертация.Вставить("УдалятьСопоставленныеОбъектыВПриемникеПриИхУдаленииВИсточнике", Ложь); + Конвертация.Вставить("РежимСовместимости", ""); Конвертация.Вставить("ВерсияФормата"); Конвертация.Вставить("ДатаВремяСоздания"); @@ -14853,6 +15793,569 @@ КонецПроцедуры +Процедура УвеличитьСчетчикВыгруженныхОбъектов() + + Инкремент(ПолеСчетчикВыгруженныхОбъектов); + +КонецПроцедуры + +Процедура УвеличитьСчетчикЗагруженныхОбъектов() + + Инкремент(ПолеСчетчикЗагруженныхОбъектов); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ПРОЦЕДУРЫ ОБРАБОТЧИКОВ + +// Возвращает интерфес обработчика во внешней обработке +// +// Параметры: +// ИмяОбработки - Строка - Имя подключенной внешней обработки +// ИмяОбработчика - Строка - Имя вызываемой процедуры +// ПараметрыОбработчика - Строка - Список параметров вызываемой процедуры +// +Функция ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика) + + СтрокаВызова = "[ИмяОбработки].[ИмяОбработчика]([ПараметрыОбработчика]);"; + СтрокаВызова = СтрЗаменить(СтрокаВызова, "[ИмяОбработки]", ИмяОбработки); + СтрокаВызова = СтрЗаменить(СтрокаВызова, "[ИмяОбработчика]", ИмяОбработчика); + СтрокаВызова = СтрЗаменить(СтрокаВызова, "[ПараметрыОбработчика]", ПараметрыОбработчика); + + Возврат СтрокаВызова; + +КонецФункции + +Функция ИмяСвойстваПКС(СтрокаТабличнойЧасти) + + Если ЗначениеЗаполнено(СтрокаТабличнойЧасти.Источник) Тогда + Свойство = "_" + СокрЛП(СтрокаТабличнойЧасти.Источник); + ИначеЕсли ЗначениеЗаполнено(СтрокаТабличнойЧасти.Приемник) Тогда + Свойство = "_" + СокрЛП(СтрокаТабличнойЧасти.Приемник); + ИначеЕсли ЗначениеЗаполнено(СтрокаТабличнойЧасти.ИмяПараметраДляПередачи) Тогда + Свойство = "_" + СокрЛП(СтрокаТабличнойЧасти.ИмяПараметраДляПередачи); + Иначе + Свойство = ""; + КонецЕсли; + + Возврат Свойство; + +КонецФункции + +// Возвращает признак Режима совместимости +// +Функция РежимСовместимостиСБСП20() + + Если ПолеРежимСовместимостиСБСП20 = Неопределено Тогда + + ЭтоМодельСервиса = ОбщегоНазначенияПовтИсп.РазделениеВключено(); + + ПолеРежимСовместимостиСБСП20 = (Конвертация.РежимСовместимости = "" + Или Конвертация.РежимСовместимости = "РежимСовместимостиСБСП20") + И Не ЭтоМодельСервиса; + + КонецЕсли; + + Возврат ПолеРежимСовместимостиСБСП20; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Глобальные обработчики + +Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПравилОбмена() + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПослеЗагрузкиПравилОбмена; + ПараметрыОбработчика = ""; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПередВыгрузкойДанных(ФайлОбмена, Отказ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПередВыгрузкойДанных; + ПараметрыОбработчика = "ФайлОбмена, Отказ"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПередПолучениемИзмененныхОбъектов(Получатель, УзелДляФоновогоОбмена) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПередПолучениемИзмененныхОбъектов; + ПараметрыОбработчика = "Получатель, УзелДляФоновогоОбмена"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПослеВыгрузкиДанных(ФайлОбмена) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПослеВыгрузкиДанных; + ПараметрыОбработчика = "ФайлОбмена"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПередВыгрузкойОбъекта(ФайлОбмена, Отказ, ИмяПКО, Правило, + ВходящиеДанные, ИсходящиеДанные, Объект + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПередВыгрузкойОбъекта; + ПараметрыОбработчика = "ФайлОбмена, Отказ, ИмяПКО, Правило, ВходящиеДанные, ИсходящиеДанные, Объект"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПослеВыгрузкиОбъекта(ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, + ИсходящиеДанные, УзелСсылки + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПослеВыгрузкиОбъекта; + ПараметрыОбработчика = "ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, ИсходящиеДанные, УзелСсылки"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПередКонвертациейОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, + ИмяПКО, ПКО, ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, + ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, + ВсеОбъектыВыгружены,ТолькоПолучитьУзелСсылки, Приемник, + РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПередКонвертациейОбъекта; + ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, + | ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, + | ВсеОбъектыВыгружены,ТолькоПолучитьУзелСсылки, Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПередОтправкойИнформацииОбУдалении(Ссылка, Отказ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПередОтправкойИнформацииОбУдалении; + ПараметрыОбработчика = "Ссылка, Отказ"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПередЗагрузкойДанных(ФайлОбмена, Отказ) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПередЗагрузкойДанных; + ПараметрыОбработчика = "ФайлОбмена, Отказ"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиДанных() + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПослеЗагрузкиДанных; + ПараметрыОбработчика = ""; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, + ГенерироватьНовыйНомерИлиКодЕслиНеУказан,ТипОбъектаСтрокой, + ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения + ) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПередЗагрузкойОбъекта; + ПараметрыОбработчика = "ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, ГенерироватьНовыйНомерИлиКодЕслиНеУказан, + | ТипОбъектаСтрокой, ТипОбъекта, НеЗамещатьОбъект, РежимЗаписи, РежимПроведения"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден + ) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПослеЗагрузкиОбъекта; + ПараметрыОбработчика = "ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПриПолученииИнформацииОбУдалении(Объект, Отказ) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПриПолученииИнформацииОбУдалении; + ПараметрыОбработчика = "Объект, Отказ"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПослеЗагрузкиПараметров(ФайлОбмена, Отказ, ПричинаОтказа) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = "Конвертация_ПослеЗагрузкиПараметров"; + ПараметрыОбработчика = "ФайлОбмена, Отказ, ПричинаОтказа"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_Конвертация_ПослеПолученияИнформацииОбУзлахОбмена(УзелОбменаЗагрузкаДанных) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Конвертация.ИмяОбработчикаПослеПолученияИнформацииОбУзлахОбмена; + ПараметрыОбработчика = "УзелОбменаЗагрузкаДанных"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ПКО + +Процедура ВыполнитьОбработчик_ПКО_ПередВыгрузкойОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, + ИмяПКО, ПКО, ВыгруженныеОбъекты, Отказ, КлючВыгружаемыхДанных, + ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, + ВсеОбъектыВыгружены, ТолькоПолучитьУзелСсылки, Приемник, + РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКО.ИмяОбработчикаПередВыгрузкой; + ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, + | Отказ, КлючВыгружаемыхДанных,ЗапоминатьВыгруженные, НеЗамещатьОбъектПриЗагрузке, ВсеОбъектыВыгружены, + | ТолькоПолучитьУзелСсылки, Приемник, РежимЗаписи, РежимПроведения, НеСоздаватьЕслиНеНайден"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКО_ПриВыгрузкеОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, + ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, СтандартнаяОбработка, + Приемник, УзелСсылки + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКО.ИмяОбработчикаПриВыгрузке; + ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, ВыгруженныеОбъекты, + | КлючВыгружаемыхДанных, Отказ, СтандартнаяОбработка, Приемник, УзелСсылки"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъекта(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, + ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, Приемник, УзелСсылки + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКО.ИмяОбработчикаПослеВыгрузки; + ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, + | ИмяПКО, ПКО, ВыгруженныеОбъекты, КлючВыгружаемыхДанных, Отказ, Приемник, УзелСсылки"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКО_ПослеВыгрузкиОбъектаВФайлОбмена(ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, ПКО, + ВыгруженныеОбъекты, Приемник, УзелСсылки + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКО.ИмяОбработчикаПослеВыгрузкиВФайл; + ПараметрыОбработчика = "ФайлОбмена, Источник, ВходящиеДанные, ИсходящиеДанные, + | ИмяПКО, ПКО, ВыгруженныеОбъекты, Приемник, УзелСсылки"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКО_ПередЗагрузкойОбъекта(ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило, + ГенерироватьНовыйНомерИлиКодЕслиНеУказан, ТипОбъектаСтрокой, + ТипОбъекта,НеЗамещатьОбъект, РежимЗаписи, РежимПроведения + ) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПередЗагрузкой; + ПараметрыОбработчика = "ФайлОбмена, Отказ, Нпп, Источник, ИмяПравила, Правило,ГенерироватьНовыйНомерИлиКодЕслиНеУказан, + | ТипОбъектаСтрокой, ТипОбъекта,НеЗамещатьОбъект, РежимЗаписи, РежимПроведения"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКО_ПриЗагрузкеОбъекта(ФайлОбмена, ОбъектНайден, Объект, НеЗамещатьОбъект, ОбъектМодифицирован, Правило) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПриЗагрузке; + ПараметрыОбработчика = "ФайлОбмена, ОбъектНайден, Объект, НеЗамещатьОбъект, ОбъектМодифицирован"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКО_ПослеЗагрузкиОбъекта(ФайлОбмена, Отказ, Ссылка, Объект, ПараметрыОбъекта, + ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден, Правило + ) + + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПослеЗагрузки; + ПараметрыОбработчика = "ФайлОбмена, Отказ, Ссылка, Объект, + | ПараметрыОбъекта, ОбъектМодифицирован, ИмяТипаОбъекта, ОбъектНайден"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКО_ПоследовательностьПолейПоиска(НомерВариантаПоиска, СвойстваПоиска, ПараметрыОбъекта, ПрекратитьПоиск, + СсылкаНаОбъект, УстанавливатьУОбъектаВсеСвойстваПоиска, + СтрокаИменСвойствПоиска, ИмяОбработчика + ) + + ИмяОбработки = "ОбработкаЗагрузки"; + ПараметрыОбработчика = "НомерВариантаПоиска, СвойстваПоиска, ПараметрыОбъекта, ПрекратитьПоиск, + | СсылкаНаОбъект, УстанавливатьУОбъектаВсеСвойстваПоиска, СтрокаИменСвойствПоиска"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ПКС + +Процедура ВыполнитьОбработчик_ПКС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, ТипПриемника, ИмяПКО, + ИмяПКОВидСубконто, Пусто, Выражение, УзелКоллекцииСвойств, НеЗамещать + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКС.ИмяОбработчикаПередВыгрузкой; + ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКС, ПКО,ОбъектКоллекции, + | Отказ, Значение, ТипПриемника, ИмяПКО, ИмяПКОВидСубконто, Пусто, Выражение, УзелКоллекцииСвойств, НеЗамещать"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, + Субконто, Пусто, ИмяПКО, ПКОСвойств,УзелСвойства, УзелКоллекцииСвойств, + ИмяПКОВидСубконто + ) + + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКС.ИмяОбработчикаПриВыгрузке; + ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + | ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, Субконто, Пусто, + | ИмяПКО, ПКОСвойств,УзелСвойства, УзелКоллекцииСвойств,ИмяПКОВидСубконто"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто, + Субконто, ИмяПКО, ИмяПКОВидСубконто, ПКОСвойств, УзелСвойства, + УзелСсылки, УзелКоллекцииСвойств, УзелСубконто + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКС.ИмяОбработчикаПослеВыгрузки; + ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + | ПКС, ПКО, ОбъектКоллекции, Отказ, Значение, КлючИЗначение, ВидСубконто,Субконто, ИмяПКО, + | ИмяПКОВидСубконто, ПКОСвойств, УзелСвойства, УзелСсылки, УзелКоллекцииСвойств, УзелСубконто"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ПКГС + +Процедура ВыполнитьОбработчик_ПКГС_ПередОбработкойВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, + ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКГС.ИмяОбработчикаПередОбработкойВыгрузки; + ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + | ПКО, ПКГС, Отказ, КоллекцияОбъектов, НеЗамещать, УзелКоллекцииСвойств, НеОчищать"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКГС_ПередВыгрузкойСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, + ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииСвойств, УзелКоллекцииОбъектов + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКГС.ИмяОбработчикаПередВыгрузкой; + ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + | ПКО, ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииСвойств, УзелКоллекцииОбъектов"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКГС_ПриВыгрузкеСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, + ПКГС, ОбъектКоллекции, УзелКоллекцииОбъектов, УзелОбъектаКоллекции, + УзелКоллекцииСвойств, СтандартнаяОбработка + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКГС.ИмяОбработчикаПриВыгрузке; + ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКГС, + | ОбъектКоллекции, УзелКоллекцииОбъектов, УзелОбъектаКоллекции, УзелКоллекцииСвойств, СтандартнаяОбработка"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКГС_ПослеВыгрузкиСвойства(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКО, ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииОбъектов, + УзелКоллекцииСвойств, УзелОбъектаКоллекции + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКГС.ИмяОбработчикаПослеВыгрузки; + ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, + | ПКГС, Отказ, ОбъектКоллекции, УзелКоллекцииОбъектов, УзелКоллекцииСвойств, УзелОбъектаКоллекции"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПКГС_ПослеОбработкиВыгрузки(ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = ПКГС.ИмяОбработчикаПослеОбработкиВыгрузки; + ПараметрыОбработчика = "ФайлОбмена, Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, + | ПКО, ПКГС, Отказ, УзелКоллекцииСвойств, УзелКоллекцииОбъектов"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ПВД + +Процедура ВыполнитьОбработчик_ПВД_ПередОбработкойПравила(Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных) + + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПередОбработкой; + ПараметрыОбработчика = "Отказ, ИмяПКО, Правило, ИсходящиеДанные, ВыборкаДанных"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПВД_ПослеОбработкиПравила(ИмяПКО, Правило, ИсходящиеДанные) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПослеОбработки; + ПараметрыОбработчика = "ИмяПКО, Правило, ИсходящиеДанные"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПВД_ПередВыгрузкойОбъекта(ФайлОбмена, Отказ, ИмяПКО, Правило, + ВходящиеДанные, ИсходящиеДанные, Объект + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПередВыгрузкой; + ПараметрыОбработчика = "ФайлОбмена, Отказ, ИмяПКО, Правило, ВходящиеДанные, ИсходящиеДанные, Объект"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПВД_ПослеВыгрузкиОбъекта(ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, + ИсходящиеДанные, УзелСсылки, Правило + ) + + ИмяОбработки = "ОбработкаВыгрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПослеВыгрузки; + ПараметрыОбработчика = "ФайлОбмена, Объект, ИмяПКО, ВходящиеДанные, ИсходящиеДанные, УзелСсылки"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики ПОД + +Процедура ВыполнитьОбработчик_ПОД_ПередОбработкойПравила(Правило, Отказ, ИсходящиеДанные, ВыборкаДанных) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПередОбработкой; + ПараметрыОбработчика = "Правило, Отказ, ИсходящиеДанные, ВыборкаДанных"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПОД_ПередУдалениемОбъекта(Правило, Объект, Отказ, УдалитьНепосредственно, ВходящиеДанные) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПередУдалением; + ПараметрыОбработчика = "Правило, Объект, Отказ, УдалитьНепосредственно, ВходящиеДанные"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +Процедура ВыполнитьОбработчик_ПОД_ПослеОбработкиПравила(Правило) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = Правило.ИмяОбработчикаПослеОбработки; + ПараметрыОбработчика = "Правило"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Обработчики Параметров + +Процедура ВыполнитьОбработчик_Параметры_ПослеЗагрузкиПараметра(Имя, Значение) + + ИмяОбработки = "ОбработкаЗагрузки"; + ИмяОбработчика = "Параметры_" + Имя + "_ПослеЗагрузкиПараметра"; + ПараметрыОбработчика = "Имя, Значение"; + + Выполнить(ИнтерфейсОбработчика(ИмяОбработки, ИмяОбработчика, ПараметрыОбработчика)); + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // КОНСТАНТЫ @@ -14870,4 +16373,5 @@ ИнициализацияТаблицыПравилКонвертации(); ИнициализацияТаблицыПравилВыгрузки(); ИнициализацияТаблицыПравилОчистки(); -ИнициализацияТаблицыНастройкиПараметров(); \ No newline at end of file +ИнициализацияТаблицыНастройкиПараметров(); +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo index ee5d5f21c..54ea8f90c 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo +++ b/SSL/src/DataProcessors/КонвертацияОбъектовИнформационныхБаз/КонвертацияОбъектовИнформационныхБаз.mdo @@ -1,15 +1,15 @@ <?xml version="1.0" encoding="UTF-8"?> -<mdclass:DataProcessor 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="8393971a-96ba-493e-a9d0-a286e8a0750a"> +<mdclass:DataProcessor 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="cae8a6f2-bbe9-4b73-b839-9bf8e5e2818d"> <producedTypes> - <objectType typeId="9826f8b1-9c40-481e-be25-d99267702b72" valueTypeId="e8720add-8310-4593-848d-8065f8a362c0"/> - <managerType typeId="0da4eeba-6738-4ccc-a1ff-021ddeb93e0b" valueTypeId="b4cbf503-40e0-4e2e-8662-ffe6e47de98c"/> + <objectType typeId="c366d829-1b48-4309-8acb-a8a2dd7eea06" valueTypeId="2245561f-67ed-4cb2-beea-9ef3383ea79c"/> + <managerType typeId="5b44c944-2a30-42c7-9e49-b25076cabbce" valueTypeId="63fa71a8-c06c-4a80-9800-abf05527a127"/> </producedTypes> <name>КонвертацияОбъектовИнформационныхБаз</name> <synonym> <key>ru</key> <value>Конвертация объектов информационных баз</value> </synonym> - <attributes uuid="9c8ec5e5-afa8-48b1-bf9c-ebaaf0a720db"> + <attributes uuid="0a79ee40-e6d6-4dbf-8378-98c2ec1e8ef9"> <name>ВыводВОкноСообщенийИнформационныхСообщений</name> <synonym> <key>ru</key> @@ -21,7 +21,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="901897a7-a2b6-40a7-a77d-d1d4c8ce5d28"> + <attributes uuid="5148d263-de26-4c92-b090-ae59f42dfb05"> <name>ВыводВПротоколИнформационныхСообщений</name> <synonym> <key>ru</key> @@ -33,7 +33,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="e6fe6a65-33e6-4cb3-8acf-b40e7b9bac04"> + <attributes uuid="dbefe81f-85cf-4d84-9600-b359598c2543"> <name>ВыводВПротоколСообщенийОбОшибках</name> <synonym> <key>ru</key> @@ -45,7 +45,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="c4492ecd-293c-4688-8198-04391c57f312"> + <attributes uuid="1a624a06-93b8-4d1f-8c14-2061e1e7927c"> <name>ВыгружатьТолькоРазрешенные</name> <synonym> <key>ru</key> @@ -57,7 +57,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="268afd29-0e5f-4220-ab29-071f3072dbeb"> + <attributes uuid="4ad54ca8-8e4a-4a35-9537-0395851fcdfb"> <name>ДописыватьДанныеВПротоколОбмена</name> <synonym> <key>ru</key> @@ -69,7 +69,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="b578b59d-8c86-4494-b27d-db976b0f3d8a"> + <attributes uuid="d5967e0f-03cd-4190-a702-7e9290eae1eb"> <name>ИмяПланаОбменаВРО</name> <synonym> <key>ru</key> @@ -84,7 +84,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="eeba912a-3676-4528-b216-2b8630ab19c9"> + <attributes uuid="27b27cc5-d1ad-4a2a-bcf4-ec2ebb3eba43"> <name>ИмяФайлаОбмена</name> <synonym> <key>ru</key> @@ -97,7 +97,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="47ed2f49-e4f2-4058-9ac5-cb3c826e92d8"> + <attributes uuid="7059b117-714c-4710-aebe-76f88c4d41d5"> <name>ИмяФайлаПравилОбмена</name> <synonym> <key>ru</key> @@ -110,7 +110,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="471c7746-c607-481e-aaac-659dcbe54d8b"> + <attributes uuid="ea050453-4947-40dc-aa2a-503ddd1a235a"> <name>ИмяФайлаПротоколаОбмена</name> <synonym> <key>ru</key> @@ -125,7 +125,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="3251cc7f-6b61-4814-b7ce-91564128d604"> + <attributes uuid="37d0e6d4-702e-46f5-ae87-4d393fa0c701"> <name>ИспользоватьТранзакции</name> <synonym> <key>ru</key> @@ -137,7 +137,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="185661aa-0553-4a27-b021-a0d96fba92fd"> + <attributes uuid="1e963c1e-f914-46e1-81d3-90d126fc6f8d"> <name>КоличествоОбработанныхОбъектовДляОбновленияСтатуса</name> <synonym> <key>ru</key> @@ -153,7 +153,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="59624fa6-74f6-4a5f-86e3-a27018683e6e"> + <attributes uuid="3a62d88e-9298-42c0-bd87-c749ecd01d19"> <name>КоличествоОбъектовНаТранзакцию</name> <synonym> <key>ru</key> @@ -169,7 +169,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="71fa1a55-cf35-4442-bcd5-fdc4f191ae51"> + <attributes uuid="abbf064e-c6ea-4712-930b-a9fef42e0ee1"> <name>КомментарийПриВыгрузкеДанных</name> <synonym> <key>ru</key> @@ -182,7 +182,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="93e30c61-c9a1-41a5-b682-23f4d0085a38"> + <attributes uuid="fc13dd80-ce44-4ed1-a9d7-dae44602b954"> <name>КомментарийПриЗагрузкеДанных</name> <synonym> <key>ru</key> @@ -195,7 +195,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="8336cc18-5d3e-477f-9245-17e7e7f0566a"> + <attributes uuid="a3fe224e-c3ef-4e30-90e4-c4ed5eb11824"> <name>НеВыгружатьОбъектыПоСсылкам</name> <synonym> <key>ru</key> @@ -207,7 +207,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="213219df-49d8-447e-b7f3-fba356b9d461"> + <attributes uuid="433b23a1-a863-4775-b2f2-1384e8f3cbbb"> <name>ОбработкиНастройкиВыгрузки</name> <synonym> <key>ru</key> @@ -219,7 +219,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="b443585d-f129-4ac6-a64c-4c37b1b4385b"> + <attributes uuid="a1677c47-b9a4-427a-972d-9bb2293445b6"> <name>ОбработкиНастройкиЗагрузки</name> <synonym> <key>ru</key> @@ -231,7 +231,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="ec1877db-8c03-45a4-a15c-a4de8ae3e86c"> + <attributes uuid="e4a328c0-e73b-465d-ae36-38e5a71690fa"> <name>ОптимизированнаяЗаписьОбъектов</name> <synonym> <key>ru</key> @@ -243,7 +243,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="e7ef29f9-dfff-402e-b49b-e006b9828519"> + <attributes uuid="85bebd81-a355-4010-889b-cff6f72dafcb"> <name>Параметры</name> <synonym> <key>ru</key> @@ -253,19 +253,17 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="bfb0be49-5f5c-4ef3-a011-8f8645aa981a"> + <attributes uuid="49521f36-fd1b-47dd-81cc-48b6fb651e22"> <name>ПостроительОтчета</name> <synonym> <key>ru</key> <value>Построитель отчета</value> </synonym> - <type> - <types>ReportBuilder</types> - </type> + <type/> <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="d50613ad-c527-4583-8855-a4bd39c33360"> + <attributes uuid="bc946e21-53bb-4332-8c63-7b0aa78826eb"> <name>РежимЗагрузкиДанных</name> <synonym> <key>ru</key> @@ -278,7 +276,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="aaa351b7-475e-4835-a5c5-23f86da8ea51"> + <attributes uuid="4be2bdad-9a43-4593-acbc-a02e9144a89f"> <name>РежимОбмена</name> <synonym> <key>ru</key> @@ -293,7 +291,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="5260c027-de8c-4612-9022-d9b492e913c9"> + <attributes uuid="eb4455f2-a5a0-44fb-8302-7312bc32df66"> <name>СохраненныеНастройки</name> <synonym> <key>ru</key> @@ -303,7 +301,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="6945660a-84cb-4546-ad3c-b5eda36c7fa6"> + <attributes uuid="cd6d2ab5-8e5c-4db3-8c8c-0526046a9b68"> <name>ТаблицаНастройкиПараметров</name> <synonym> <key>ru</key> @@ -315,7 +313,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="899be218-80f5-46ed-bccf-f9437c91e00b"> + <attributes uuid="9f20e59e-7db8-466f-b965-7045fc3f1489"> <name>ТаблицаПравилВыгрузки</name> <synonym> <key>ru</key> @@ -327,7 +325,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="67ff40c2-0954-4187-9eba-bf6360fa3620"> + <attributes uuid="cb057756-d3f7-4c50-a9d0-bac9ca2abd46"> <name>ТаблицаПравилКонвертации</name> <synonym> <key>ru</key> @@ -339,7 +337,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="19bb53e4-f7c7-475e-9d07-ebc067d62635"> + <attributes uuid="89ac3d39-1915-4e67-a4e4-5a67a155cb75"> <name>ТаблицаПравилОчистки</name> <synonym> <key>ru</key> @@ -351,7 +349,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="8ed415c6-f93b-45e4-be06-7490d60b91f1"> + <attributes uuid="d27b637d-5a51-49ff-bf73-343891534586"> <name>УзелДляОбмена</name> <synonym> <key>ru</key> @@ -363,7 +361,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="bd00e705-e1cd-4c50-89e5-4c3391e46e16"> + <attributes uuid="b5a073a2-54e2-47c9-b533-f75fd2c9f343"> <name>УзелДляФоновогоОбмена</name> <synonym> <key>ru</key> @@ -375,7 +373,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="3dffb8c9-91f0-4527-baa7-06db41d80b46"> + <attributes uuid="0c8571be-f9b6-4292-add9-980cfe7fa2ec"> <name>УзелОбменаЗагрузкаДанных</name> <synonym> <key>ru</key> @@ -387,7 +385,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="ad842d01-80b8-4ebf-9ac3-5d628ec4e321"> + <attributes uuid="989b8ccd-bc05-48c1-9969-b3733028b65f"> <name>УзелОбменаЗагрузкаФоновыхДанных</name> <synonym> <key>ru</key> @@ -399,7 +397,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="af5008bb-427d-4cd5-b9e4-8aae24f725ab"> + <attributes uuid="6c70b13d-f9d0-459f-8d38-c01c11f356f1"> <name>ФлагРежимОтладки</name> <synonym> <key>ru</key> @@ -411,7 +409,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="35ba733b-7ef8-4cbf-8cda-5b8b2ab2c30d"> + <attributes uuid="3e427c09-79ed-45f7-b4c9-d9aa7ccc01b2"> <name>ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении</name> <synonym> <key>ru</key> @@ -424,7 +422,7 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="5b94475a-cea6-4887-9882-2da8957425d0"> + <attributes uuid="1a4dd1f5-c2d6-4e06-b428-ab7870810bf3"> <name>ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение</name> <synonym> <key>ru</key> @@ -437,4 +435,82 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> + <attributes uuid="bf66612b-aec4-414b-bee6-9bcab145c7cc"> + <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="811f356f-554a-4a63-90b6-dedb5fec7c05"> + <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="78fdbce8-8479-4edd-89c0-1bbaf8ffd482"> + <name>ИмяФайлаВнешнейОбработкиОтладкиВыгрузки</name> + <synonym> + <key>ru</key> + <value>Имя файла внешней обработки отладки выгрузки</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>255</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="8eb18de5-8283-4d0c-bb11-b882e78181d5"> + <name>ИмяФайлаВнешнейОбработкиОтладкиЗагрузки</name> + <synonym> + <key>ru</key> + <value>Имя файла внешней обработки отладки загрузки</value> + </synonym> + <type> + <types>String</types> + <stringQualifiers> + <length>255</length> + </stringQualifiers> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="1491cc2a-b3be-4bcc-a181-ce68d4b5d4cb"> + <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="64a86d5d-f925-45ee-82da-76df1cc20729"> + <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> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl index 4ecbfb509..e5155d3cc 100644 --- a/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/КонвертацияОбъектовРаспределенныхИнформационныхБаз/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -211,3 +213,5 @@ Возврат НСтр("ru = 'Обмен не по правилам конвертации не поддерживается'"); КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Form.form b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Form.form deleted file mode 100644 index 11e8e7485..000000000 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Form.form +++ /dev/null @@ -1,642 +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>25</id> - <items xsi:type="form:FormField"> - <name>НачалоПериодаВыборки</name> - <id>21</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>НачалоПериодаВыборки</segments> - </dataPath> - <extendedTooltip> - <name>НачалоПериодаВыборкиРасширеннаяПодсказка</name> - <id>36</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>НачалоПериодаВыборкиКонтекстноеМеню</name> - <id>22</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <markRequiredComplete>true</markRequiredComplete> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:InputFieldExtInfo"> - <width>11</width> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <autoMarkIncomplete>true</autoMarkIncomplete> - <chooseType>true</chooseType> - <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> - <textSize>Normal</textSize> - </extInfo> - </items> - <items xsi:type="form:FormField"> - <name>ОкончаниеПериодаВыборки</name> - <id>23</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>ОкончаниеПериодаВыборки</segments> - </dataPath> - <extendedTooltip> - <name>ОкончаниеПериодаВыборкиРасширеннаяПодсказка</name> - <id>38</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ОкончаниеПериодаВыборкиКонтекстноеМеню</name> - <id>24</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <markRequiredComplete>true</markRequiredComplete> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:InputFieldExtInfo"> - <width>11</width> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <autoMarkIncomplete>true</autoMarkIncomplete> - <chooseType>true</chooseType> - <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 - Границы периода выборки данных из журнала регистрации - - - ГруппаПериодВыборкиРасширеннаяПодсказка - 35 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - Отчет - 26 - true - true - - true - - - Отчет - - None - - ОтчетРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - - ОтчетКонтекстноеМеню - 27 - true - - SpreadsheetDocumentField - Enter - true - Left - true - - 50 - true - 10 - true - true - true - Special - ScrollAlways - ScrollAlways - Auto - true - true - true - - - - ФормаКоманднаяПанель - -1 - - Сформировать - 20 - - <key>ru</key> - <value>Сформировать</value> - - true - true - - true - - false - - СформироватьРасширеннаяПодсказка - 30 - Label - true - true - - Left - - - Form.Command.ОбновитьОтчетНаФорме - PictureAndText - true - true - true - UserCmds - - StdPicture.GenerateReport - - Auto - - - ГруппаНастройки - 18 - - НастроитьРасписание - 28 - true - true - - true - - false - - НастроитьРасписаниеРасширеннаяПодсказка - 32 - Label - true - true - - Left - - - Form.Command.НастроитьРасписаниеРегламентногоЗадания - Normal - Auto - true - true - UserCmds - Auto - - - НастроитьАдресатовОтчета - 17 - true - true - - true - - false - - НастроитьАдресатовОтчетаРасширеннаяПодсказка - 33 - Label - true - true - - Left - - - Form.Command.УказатьПолучателейОтчета - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Настройка</value> - - - ru - Настройка почтового адреса отправки отчета и расписания регламентного задания - - - ГруппаНастройкиРасширеннаяПодсказка - 31 - Label - true - true - - Left - - - Popup - - Auto - Normal - - - - Справка - 29 - true - true - - true - - false - - СправкаРасширеннаяПодсказка - 34 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - Left - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Объект - 1 - - DataProcessorObject.КонтрольЖурналаРегистрации - - - true - - - true - -
              true
              -
              - - ВыгрузкаИнформацииПоОшибкам - - <key>ru</key> - <value>Выгрузка информации по ошибкам</value> - - 2 - - ValueTable - - - true - - - true - - - Дата - - <key>ru</key> - <value>Момент возникновения ошибки</value> - - 1 - - Date - - - - 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> - - 3 - - Date - - - - true - - - true - - - - ОкончаниеПериодаВыборки - - <key>ru</key> - <value>Окончание периода выборки</value> - - 4 - - Date - - - - true - - - true - - - - Отчет - - <key>ru</key> - <value>Отчет</value> - - 5 - - SpreadsheetDocument - - - 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> - - 1 - - ru - Настроить расписание регламентного задания - - - true - - - - НастроитьРасписаниеРегламентногоЗадания - - - Auto - Auto - - - УказатьПолучателейОтчета - - <key>ru</key> - <value>Получатели отчета</value> - - 3 - - ru - Указать получателей отчета - - - true - - - - УказатьПолучателейОтчета - - - Auto - Auto - - - ОбновитьОтчетНаФорме - - <key>ru</key> - <value>Обновить отчет на форме</value> - - 4 - - ru - Обновить отчет по ошибкам и предупреждениям на форме - - - true - - - StdPicture.Refresh - - - - ОбновитьОтчетНаФорме - - - Auto - Auto - - - - - - - diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Module.bsl b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Module.bsl deleted file mode 100644 index d1bb32987..000000000 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/КонтрольЖурналаРегистрации/Module.bsl +++ /dev/null @@ -1,83 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - // Инициализация реквизитов периода. - ОкончаниеПериодаВыборки = ТекущаяДатаСеанса(); - НачалоПериодаВыборки = ОкончаниеПериодаВыборки - 24*60*60; - СформироватьОтчетНаСервере(); - ИдентификаторРегламентногоЗадания = РегламентныеЗадания.НайтиПредопределенное( - Метаданные.РегламентныеЗадания.КонтрольЖурналаРегистрации).УникальныйИдентификатор; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ОбновитьОтчетНаФорме(Команда) - - ОчиститьСообщения(); - ФормироватьОтчет = Истина; - - Если Не ЗначениеЗаполнено(НачалоПериодаВыборки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не заполнено начало периода выборки.'"), - , - "НачалоПериодаВыборки"); - ФормироватьОтчет = Ложь; - КонецЕсли; - - Если Не ЗначениеЗаполнено(ОкончаниеПериодаВыборки) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - НСтр("ru = 'Не заполнено окончание периода выборки.'"), - , - "ОкончаниеПериодаВыборки"); - ФормироватьОтчет = Ложь; - КонецЕсли; - - Если ФормироватьОтчет Тогда - СформироватьОтчетНаСервере(); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура УказатьПолучателейОтчета(Команда) - - ОткрытьФорму("Обработка.КонтрольЖурналаРегистрации.Форма.УстановкаПочтовыхАдресовДляОтправкиОтчета"); - -КонецПроцедуры - -&НаКлиенте -Процедура НастроитьРасписаниеРегламентногоЗадания(Команда) - - Диалог = Новый ДиалогРасписанияРегламентногоЗадания( - РегламентныеЗаданияКлиент.ПолучитьРасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания) ); - - Если Диалог.ОткрытьМодально() Тогда - РегламентныеЗаданияКлиент.УстановитьРасписаниеРегламентногоЗадания(ИдентификаторРегламентногоЗадания, Диалог.Расписание); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура СформироватьОтчетНаСервере() - - РезультатФормированияОтчета = Обработки.КонтрольЖурналаРегистрации.СформироватьОтчет( - НачалоПериодаВыборки, ОкончаниеПериодаВыборки); - - Отчет = РезультатФормированияОтчета.Отчет; - -КонецПроцедуры - - diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Help/ru.html b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Help/ru.html deleted file mode 100644 index 6dd118d6e..000000000 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Help/ru.html +++ /dev/null @@ -1,6 +0,0 @@ - -

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

              -

              Для задания нескольких адресов следует использовать разделитель ";" (точка с запятой). Пример задания адреса:

              -

               

              -

              См. также

              - \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Module.bsl b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Module.bsl deleted file mode 100644 index 8284598cf..000000000 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Forms/УстановкаПочтовыхАдресовДляОтправкиОтчета/Module.bsl +++ /dev/null @@ -1,68 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - - EMailАдресаПолучателейОтчета = КонтрольЖурналаРегистрацииСлужебный.ПолучитьАдресатовПолученияОтчетаПоЖурналуРегистрации(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура КнопкаОК(Команда) - - Перем СообщениеОбОшибке; - - // Пытается сохранить введенную строку почтовых адресов - Результат = СохранитьEMailАдресаПолучателейОтчета(EMailАдресаПолучателейОтчета, СообщениеОбОшибке); - - // Закрывает форму если сохранение прошло успешно - Если Не Результат Тогда - Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке, , "EMailАдресаПолучателейОтчета"); - КонецЕсли; - Иначе - Закрыть(); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервереБезКонтекста -Функция СохранитьEMailАдресаПолучателейОтчета(EMailАдресаПолучателейОтчета, СообщениеОбОшибке = "") - - Если ЗначениеЗаполнено(EMailАдресаПолучателейОтчета) Тогда - Попытка - ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(EMailАдресаПолучателейОтчета); - Исключение - СообщениеОбОшибке = НСтр("ru = 'Не верно задан формат почтового адреса'"); - Возврат Ложь; - КонецПопытки; - КонецЕсли; - - Попытка - КонтрольЖурналаРегистрацииСлужебный.УстановитьАдресатовПолученияОтчетаПоЖурналуРегистрации(EMailАдресаПолучателейОтчета); - Исключение - ОшибкаИнфо = ИнформацияОбОшибке(); - Если ОшибкаИнфо.Причина = Неопределено Тогда - СообщениеОбОшибке =ОшибкаИнфо.Описание; - Иначе - СообщениеОбОшибке = ОшибкаИнфо.Причина.Описание; - КонецЕсли; - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеОбОшибке); - Возврат Ложь; - КонецПопытки; - - Возврат Истина; - -КонецФункции - diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Help/ru.html b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Help/ru.html deleted file mode 100644 index 11d99bd36..000000000 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Help/ru.html +++ /dev/null @@ -1,9 +0,0 @@ - -

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

              -

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

              \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ManagerModule.bsl b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ManagerModule.bsl deleted file mode 100644 index 3f8e5f93c..000000000 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/ManagerModule.bsl +++ /dev/null @@ -1,275 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -// Формирует отчет, записывает в файл и отправляет по почте. -// В отчет включены ошибки и предупреждения журнала регистраци, -// за указанный период (если не указан то за сутки, начиная с последнего вызова -// или текущего момента при первом вызове). -// -// Параметры: -// НачалоПериодаВыборки - Дата начала в отборе событий журнала регистрации -// ОкончаниеПериодаВыборки - Дата окончания в отборе событий журнала регистрации -// -// СохранятьВремяПоследнейВыборки - Булево - начальное значение истина, указывает -// запоминать, когда делать следующую выборку, если не указано. -// При ошибке ничего не изменится. -// -Процедура СформироватьОтчетПоОшибкамИПослатьОтчет(Знач НачалоПериодаВыборки = Неопределено, - Знач ОкончаниеПериодаВыборки = Неопределено, - Знач СохранятьВремяПоследнейВыборки = Истина) Экспорт - - Если ЗначениеЗаполнено(НачалоПериодаВыборки) - И ЗначениеЗаполнено(ОкончаниеПериодаВыборки) Тогда - ПериодВыборки = Новый Структура; - ПериодВыборки.Вставить("НачалоПериода", НачалоПериодаВыборки); - ПериодВыборки.Вставить("ОкончаниеПериода", ОкончаниеПериодаВыборки); - Иначе - ПериодВыборки = ПолучитьПериодВыборкиДанных(); - КонецЕсли; - - // Формирование отчета и запись в файл - РезультатФормированияОтчета = СформироватьОтчет(ПериодВыборки.НачалоПериода, - ПериодВыборки.ОкончаниеПериода); - - Отчет = РезультатФормированияОтчета.Отчет; - - ИмяФайлаОтчета = ПолучитьИмяВременногоФайла(); - - Отчет.Записать(ИмяФайлаОтчета); - - // Формирование и отправка письма - Вложения = Новый Соответствие; - - Вложения.Вставить("report.mxl", Новый ДвоичныеДанные(ИмяФайлаОтчета)); - - УдалитьФайлы(ИмяФайлаОтчета); - - ПараметрыПисьма = Новый Структура; - - ПолучателиОтчета = КонтрольЖурналаРегистрацииСлужебный.ПолучитьАдресатовПолученияОтчетаПоЖурналуРегистрации(); - - Если ПустаяСтрока(ПолучателиОтчета) Тогда - ВызватьИсключение НСтр("ru = 'Не указан ни один получатель отчета по ошибкам и предупреждениям журнала регистрации.'"); - КонецЕсли; - - ПараметрыПисьма.Вставить("Кому", ПолучателиОтчета); - - ПредставлениеИБ = ОбщегоНазначения.ПолучитьПредставлениеИнформационнойБазы(); - - ПараметрыПисьма.Вставить("Тема", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Контроль журнала регистрации: %1.'"), - ПредставлениеИБ)); - - ТекстТелаПисьма = - НСтр("ru = 'Информация по ошибкам и предупреждениям журнала регистрации. - |Информационная база: %1. - |Период выборки данных: c %2 по %3. - |Всего ошибок: %4. - |Всего предупреждений: %5. - |Во вложении находится подробный отчет по ошибкам и предупреждениям. - |За более детальной информацией необходимо обращаться к журналу регистрации.'"); - - ТекстТелаПисьма = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - ТекстТелаПисьма, - ПредставлениеИБ, - ПериодВыборки.НачалоПериода, - ПериодВыборки.ОкончаниеПериода, - РезультатФормированияОтчета.ИтогПоОшибкам, - РезультатФормированияОтчета.ИтогПоПредупреждениям); - - ПараметрыПисьма.Вставить("Тело", ТекстТелаПисьма); - - ПараметрыПисьма.Вставить("Вложения", Вложения); - - РаботаСПочтовымиСообщениями.ОтправитьСообщение( - РаботаСПочтовымиСообщениями.ПолучитьСистемнуюУчетнуюЗапись(), - ПараметрыПисьма); - - Если СохранятьВремяПоследнейВыборки Тогда - СохранитьВремяПоследнейВыборкиИнформации(ПериодВыборки.ОкончаниеПериода); - КонецЕсли; - -КонецПроцедуры - -// Формирует отчет по ошибкам и предупреждениями журнала регистрации за заданный период. -Функция СформироватьОтчет(Знач НачалоПериода, Знач ОкончаниеПериода) Экспорт - - Результат = Новый Структура; - Отчет = Новый ТабличныйДокумент; - - Макет = Обработки.КонтрольЖурналаРегистрации.ПолучитьМакет("МакетОтчетаПоОшибкамВЖурналеРегистрации"); - - ДанныеЖурналаРегистрации = ПолучитьИнформациюПоОшибкамЖурналаРегистрации(НачалоПериода, ОкончаниеПериода); - - // Предварительная подготовка данных - - СверткаПоКомментариям = ДанныеЖурналаРегистрации.Скопировать(); - СверткаПоКомментариям.Колонки.Добавить("ИтогПоКомментарию"); - СверткаПоКомментариям.ЗаполнитьЗначения(1, "ИтогПоКомментарию"); - СверткаПоКомментариям.Свернуть("Уровень, Комментарий", "ИтогПоКомментарию"); - - МассивСтрок_УровеньОшибка = СверткаПоКомментариям.НайтиСтроки( - Новый Структура("Уровень", УровеньЖурналаРегистрации.Ошибка)); - - МассивСтрок_УровеньПредупреждение = СверткаПоКомментариям.НайтиСтроки( - Новый Структура("Уровень", УровеньЖурналаРегистрации.Предупреждение)); - - Свертка_Ошибки = СверткаПоКомментариям.Скопировать(МассивСтрок_УровеньОшибка); - Свертка_Ошибки.Сортировать("ИтогПоКомментарию Убыв"); - Свертка_Предупреждения = СверткаПоКомментариям.Скопировать(МассивСтрок_УровеньПредупреждение); - Свертка_Предупреждения.Сортировать("ИтогПоКомментарию Убыв"); - - // Формирование отчета - - Область = Макет.ПолучитьОбласть("ШапкаОтчета"); - Область.Параметры.ПериодВыборкиНачало = НачалоПериода; - Область.Параметры.ПериодВыборкиОкончание = ОкончаниеПериода; - Область.Параметры.ПредставлениеИнформационнойБазы = ОбщегоНазначения.ПолучитьПредставлениеИнформационнойБазы(); - Отчет.Вывести(Область); - - РезультатКомпоновки = РазделОтчетаПоСвернутымДанным(Макет, ДанныеЖурналаРегистрации, Свертка_Ошибки); - - Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); - Область = Макет.ПолучитьОбласть("ЗаголовокБлокаОшибки"); - Область.Параметры.ЧислоОшибок = Строка(РезультатКомпоновки.Итог); - Отчет.Вывести(Область); - - Если РезультатКомпоновки.Итог > 0 Тогда - Отчет.Вывести(РезультатКомпоновки.ТабличнаяЧасть); - КонецЕсли; - - Результат.Вставить("ИтогПоОшибкам", РезультатКомпоновки.Итог); - - РезультатКомпоновки = РазделОтчетаПоСвернутымДанным(Макет, ДанныеЖурналаРегистрации, Свертка_Предупреждения); - - Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); - Область = Макет.ПолучитьОбласть("ЗаголовокБлокаПредупреждения"); - Область.Параметры.ЧислоПредупреждений = РезультатКомпоновки.Итог; - Отчет.Вывести(Область); - - Если РезультатКомпоновки.Итог > 0 Тогда - Отчет.Вывести(РезультатКомпоновки.ТабличнаяЧасть); - КонецЕсли; - - Результат.Вставить("ИтогПоПредупреждениям", РезультатКомпоновки.Итог); - - Отчет.ОтображатьСетку = Ложь; - - Результат.Вставить("Отчет", Отчет); - - Возврат Результат; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// Вспомогательные процедуры и функции - -Функция ПолучитьИнформациюПоОшибкамЖурналаРегистрации(Знач НачалоПериода, Знач ОкончаниеПериода) - - ДанныеЖурналаРегистрации = Новый ТаблицаЗначений; - - УровниРегистрацииОшибок = Новый Массив; - УровниРегистрацииОшибок.Добавить(УровеньЖурналаРегистрации.Ошибка); - УровниРегистрацииОшибок.Добавить(УровеньЖурналаРегистрации.Предупреждение); - - ВыгрузитьЖурналРегистрации(ДанныеЖурналаРегистрации, - Новый Структура("Уровень, ДатаНачала, ДатаОкончания", - УровниРегистрацииОшибок, - НачалоПериода, - ОкончаниеПериода)); - - Возврат ДанныеЖурналаРегистрации; - -КонецФункции - -Функция ПолучитьПериодВыборкиДанных() - - Результат = Новый Структура; - - ВремяПоследнейВыборкиИнформации = ПолучитьВремяПоследнейВыборкиИнформации(); - ОкончаниеПериода = ТекущаяДатаСеанса(); - Если ВремяПоследнейВыборкиИнформации = Неопределено Тогда // если регламентное задание еще не выполнялось - выбираем данные за сутки - НачалоПериода = ОкончаниеПериода - 86400; // - 24 часа - Иначе - НачалоПериода = ВремяПоследнейВыборкиИнформации; - КонецЕсли; - - Результат.Вставить("НачалоПериода", НачалоПериода); - Результат.Вставить("ОкончаниеПериода", ОкончаниеПериода); - - Возврат Результат; - -КонецФункции - -Функция ПолучитьВремяПоследнейВыборкиИнформации() - - ВремяПоследнейВыборкиИнформации = Неопределено; - - ПараметрыОтчета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПараметрыОтчетаПоЖурналуРегистрации"); - - Если ПараметрыОтчета <> Неопределено Тогда - ПараметрыОтчета.Свойство("ВремяПоследнейВыборкиИнформации", ВремяПоследнейВыборкиИнформации); - КонецЕсли; - - Возврат ВремяПоследнейВыборкиИнформации; - -КонецФункции - -Процедура СохранитьВремяПоследнейВыборкиИнформации(ВремяПоследнейВыборкиИнформации) - - ПараметрыОтчета = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПараметрыОтчетаПоЖурналуРегистрации"); - - Если ПараметрыОтчета = Неопределено Или ТипЗнч(ПараметрыОтчета) <> Тип("Структура") Тогда - ПараметрыОтчета = Новый Структура; - КонецЕсли; - - ПараметрыОтчета.Вставить("ВремяПоследнейВыборкиИнформации", ВремяПоследнейВыборкиИнформации); - - ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( - "ПараметрыОтчетаПоЖурналуРегистрации", - , - ПараметрыОтчета - ); - -КонецПроцедуры - -// Возвращает раздел отчета по данным журнала регистрации, сгруппированным по комментарию. -Функция РазделОтчетаПоСвернутымДанным(Макет, ДанныеЖурналаРегистрации, СвернутыеДанные) - - Отчет = Новый ТабличныйДокумент; - - Итог = 0; - - Если СвернутыеДанные.Количество() > 0 Тогда - Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); - - Для Каждого Запись Из СвернутыеДанные Цикл - Итог = Итог + Запись.ИтогПоКомментарию; - МассивСтрок = ДанныеЖурналаРегистрации.НайтиСтроки(Новый Структура( - "Уровень, - |Комментарий", - УровеньЖурналаРегистрации.Ошибка, - Запись.Комментарий)); - - Область = Макет.ПолучитьОбласть("ТелоТабличнойЧастиШапка"); - Область.Параметры.Заполнить(Запись); - Отчет.Вывести(Область); - - Отчет.НачатьГруппуСтрок(, Ложь); - Для Каждого Строка Из МассивСтрок Цикл - Область = Макет.ПолучитьОбласть("ТелоТабличнойЧастиДетализация"); - Область.Параметры.Заполнить(Строка); - Отчет.Вывести(Область); - КонецЦикла; - Отчет.ЗакончитьГруппуСтрок(); - Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); - КонецЦикла; - КонецЕсли; - - Результат = Новый Структура("ТабличнаяЧасть, Итог", Отчет, Итог); - - Возврат Результат; - -КонецФункции - diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo b/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo deleted file mode 100644 index 7377cc431..000000000 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - КонтрольЖурналаРегистрации - - ru - Контроль журнала регистрации - - true - DataProcessor.КонтрольЖурналаРегистрации.Form.КонтрольЖурналаРегистрации - - - ru - - - - КонтрольЖурналаРегистрации - - ru - Контроль журнала регистрации - - PersonalComputer - MobileDevice - - - УстановкаПочтовыхАдресовДляОтправкиОтчета - - ru - Установка почтовых адресов для отправки отчета - - - - ru - - - PersonalComputer - MobileDevice - - - МакетОтчетаПоОшибкамВЖурналеРегистрации - - ru - Макет отчета по ошибкам в журнале регистрации - - - diff --git a/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html b/SSL/src/DataProcessors/ЛегальностьПолученияОбновлений/Templates/УсловияРаспространенияОбновлений/ru.html index 170f5871c..b3658e0fb 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/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html index 27e7406a0..b51b07b9a 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 39e109262..1ec4e7a70 100644 --- a/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl +++ b/SSL/src/DataProcessors/НастройкаРезервногоКопированияИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl @@ -543,16 +543,16 @@ &НаКлиенте Процедура ОбработатьНачальнуюНастройкуПомощника() - РезервноеКопированиеИБСервер.ОстановитьАвтоматическоеРезервноеКопирование(, ПараметрыРезервногоКопированияИБ); + РезервноеКопированиеИБВызовСервера.ОстановитьАвтоматическоеРезервноеКопирование(, ПараметрыРезервногоКопированияИБ); КодПереключателя = Объект.КодТипаРезервногоКопирования; - РезервноеКопированиеИБСервер.УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБ); + РезервноеКопированиеИБВызовСервера.УстановитьКодВыбора(КодПереключателя, ПараметрыРезервногоКопированияИБ); НоваяСтраницаПомощника = Неопределено; Если КодПереключателя = 1 Тогда // Настройка автоматического резервного копирования. НоваяСтраницаПомощника = Элементы.СтраницыПомощника.ПодчиненныеЭлементы.СтраницаНастройкиПараметровРезервногоКопирования; ИначеЕсли КодПереключателя = 2 Тогда // Копирование сторонними средствами. ОповещениеПользователю(НСтр("ru ='Работа помощника завершена. С этого момента оповещения о резервном копировании поступать не будут.'")); - РезервноеКопированиеИБСервер.ОстановитьСервисОповещения(ПараметрыРезервногоКопированияИБ); + РезервноеКопированиеИБВызовСервера.ОстановитьСервисОповещения(ПараметрыРезервногоКопированияИБ); ИначеЕсли КодПереключателя = 3 Тогда // Отложенное копирование. ПриИзмененииВремениОповещения(Объект.ПериодОповещения, Объект.ЕдиницаИзмеренияПериодаОповещения, ПараметрыРезервногоКопированияИБ); ОповещениеПользователю(НСтр("ru ='Был изменен период оповещений о резервном копировании.'")); @@ -636,10 +636,10 @@ Если Объект.ВариантПроведенияРезервногоКопирования = 1 Тогда ОповещатьОРезервномКопированииПриЗавершенииСеанса = Ложь; - РезервноеКопированиеИБСервер.УстановитьДатуСледующегоАвтоматическогоКопирования(Истина, ПараметрыРезервногоКопированияИБ); + РезервноеКопированиеИБВызовСервера.УстановитьДатуСледующегоАвтоматическогоКопирования(Истина, ПараметрыРезервногоКопированияИБ); Иначе ОповещатьОРезервномКопированииПриЗавершенииСеанса = Истина; - РезервноеКопированиеИБСервер.ОстановитьАвтоматическоеРезервноеКопирование(Истина, ПараметрыРезервногоКопированияИБ); + РезервноеКопированиеИБВызовСервера.ОстановитьАвтоматическоеРезервноеКопирование(Истина, ПараметрыРезервногоКопированияИБ); КонецЕсли; ПриЗавершенииРаботыПомощника(НСтр("ru = 'Настройка расписания резервного копирования прошла успешно.'")); ОстановитьСервисОповещенияОРезервномКопировании(ПараметрыРезервногоКопированияИБ); @@ -722,13 +722,35 @@ &НаСервереБезКонтекста Функция ПолучитьИнформациюОНаличииСоединений(СообщенияДляЖурналаРегистрации = Неопределено) - // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); + УстановитьПривилегированныйРежим(Истина); - Результат = Новый Структура( - "НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", - НаличиеАктивныхСоединений(), НаличиеCOMСоединений(), - НаличиеСоединенияКонфигуратором(), ЕстьАктивныеПользователи()); + + Результат = Новый Структура("НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", + Ложь, + Ложь, + Ложь, + Ложь); + + Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда + Результат.ЕстьАктивныеПользователи = Истина; + КонецЕсли; + + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); + Если МассивСеансов.Количество() = 1 Тогда + Возврат Результат; + КонецЕсли; + + Результат.НаличиеАктивныхСоединений = Истина; + + Для Каждого Сеанс Из МассивСеансов Цикл + Если ЭтоCOMСоединение(Сеанс) Тогда + Результат.НаличиеCOMСоединений = Истина; + ИначеЕсли ЭтоСеансКонфигуратором(Сеанс) Тогда + Результат.НаличиеСоединенияКонфигуратором = Истина; + КонецЕсли; + КонецЦикла; + Возврат Результат; КонецФункции @@ -746,58 +768,3 @@ Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("COMConnection"); КонецФункции - -// Проверка наличия соединения конфигуратором. -// -// Возвращаемое значение: -// Булево - Истина, если соединение есть, -// Ложь, если соединения нет. -&НаСервереБезКонтекста -Функция НаличиеСоединенияКонфигуратором() - - МассивСеансов = ПолучитьСеансыИнформационнойБазы(); - Для Каждого Сеанс Из МассивСеансов Цикл - Если ЭтоСеансКонфигуратором(Сеанс) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; - -КонецФункции - -&НаСервереБезКонтекста -Функция НаличиеCOMСоединений() - - МассивСеансов = ПолучитьСеансыИнформационнойБазы(); - Для Каждого Сеанс Из МассивСеансов Цикл - Если ЭтоCOMСоединение(Сеанс) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; - -КонецФункции - -// Проверка наличия активных соединений с информационной базой. -// -// Возвращаемое значение: -// Булево - Истина, если соединения есть, -// Ложь, если соединений нет. -&НаСервереБезКонтекста -Функция НаличиеАктивныхСоединений(СообщенияДляЖурналаРегистрации = Неопределено) - - // запись накопленных событий ЖР - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Возврат ПолучитьСеансыИнформационнойБазы().Количество() > 1; - -КонецФункции - -&НаСервереБезКонтекста -Функция ЕстьАктивныеПользователи(СообщенияДляЖурналаРегистрации = Неопределено) - - // запись накопленных событий ЖР - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - УстановитьПривилегированныйРежим(Истина); - Возврат ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0; - -Конецфункции diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl new file mode 100644 index 000000000..75246a629 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Commands/КопированиеНастроекПользователей/CommandModule.bsl @@ -0,0 +1,8 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.КопированиеНастроекПользователей", , ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl new file mode 100644 index 000000000..159e9bd72 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Commands/НастройкиПользователя/CommandModule.bsl @@ -0,0 +1,8 @@ +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ПараметрыФормы = Новый Структура("Пользователь", ПараметрКоманды); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.НастройкиПользователей", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl new file mode 100644 index 000000000..512eb6ff3 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Commands/ОчисткаНастроекПользователей/CommandModule.bsl @@ -0,0 +1,8 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ОчисткаНастроекПользователей", , ПараметрыВыполненияКоманды.Источник, + ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form new file mode 100644 index 000000000..220d4612c --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Form.form @@ -0,0 +1,2316 @@ + + + + ОтображатьОтчет + 67 + + БыстрыйПоиск + 50 + + Поиск + 48 + true + true + + true + + + Поиск + + Left + + ru + Введите имя или часть фразы для поиска настроек. Например: отчет + + + OnChange + ПоискПриИзменении + + + ПоискРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + + ПоискКонтекстноеМеню + 49 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + false + true + false + false + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Быстрый поиск</value> + + + ru + Быстрый поиск + + + БыстрыйПоискРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + КоманднаяПанель + 51 + + Выбрать + 78 + true + true + + true + + + ВыбратьРасширеннаяПодсказка + 109 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + ПометитьВсе + 79 + true + true + + true + + + ПометитьВсеРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + Form.Command.ПометитьВсе + Normal + Auto + true + true + UserCmds + Auto + + + СнятьПометкуСоВсех + 80 + true + true + + true + + + СнятьПометкуСоВсехРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + Form.Command.СнятьПометкуСоВсех + Normal + Auto + true + true + UserCmds + Auto + + + Открыть + 61 + true + true + + true + + + ОткрытьРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + Form.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + ВидыНастроек + 13 + + НастройкиОтчетовСтраница + 14 + + НастройкиОтчетовДерево + 19 + true + true + + true + + + НастройкиОтчетов + + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + НастройкиОтчетовКартинкаНастройкаПометка + 28 + + Пометка + 81 + true + true + + true + + + НастройкиОтчетов.Пометка + + + OnChange + ПометкаПриИзменении + + + ПометкаРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + ПометкаКонтекстноеМеню + 82 + true + + CheckBoxField + Left + Auto + true + Left + true + + true + + + + Картинка + 26 + true + true + + true + + + НастройкиОтчетов.Картинка + + None + + КартинкаРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + + КартинкаКонтекстноеМеню + 27 + true + + PictureField + true + Left + true + Left + true + + true + true + true + true + + + 1 + + + + + Настройки + 22 + true + true + + true + + + НастройкиОтчетов.Настройка + + None + + НастройкиРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + + НастройкиКонтекстноеМеню + 23 + true + + LabelField + Left + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Картинка и настройка</value> + + + ru + Настройки отчетов картинка настройка пометка + + + НастройкиОтчетовКартинкаНастройкаПометкаРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + НастройкиОтчетовДеревоКоманднаяПанель + 21 + Left + + + Selection + НастройкиДеревоВыбор + + + НастройкиОтчетовДеревоСтрокаПоиска + 120 + + НастройкиОтчетовДеревоСтрокаПоискаРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + + НастройкиОтчетовДеревоСтрокаПоискаКонтекстноеМеню + 121 + true + + НастройкиОтчетовДерево + + true + + + + НастройкиОтчетовДеревоСостояниеПросмотра + 123 + + НастройкиОтчетовДеревоСостояниеПросмотраРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + + НастройкиОтчетовДеревоСостояниеПросмотраКонтекстноеМеню + 124 + true + + ViewStatusAddition + НастройкиОтчетовДерево + + true + + + + НастройкиОтчетовДеревоУправлениеПоиском + 126 + + НастройкиОтчетовДеревоУправлениеПоискомРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + + НастройкиОтчетовДеревоУправлениеПоискомКонтекстноеМеню + 127 + true + + SearchControlAddition + НастройкиОтчетовДерево + + true + + + + НастройкиОтчетовДеревоРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + НастройкиОтчетовДеревоКонтекстноеМеню + 20 + + НастройкиОтчетовДеревоКонтекстноеМенюОткрыть + 65 + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюОткрытьРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + Form.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + + + НастройкиОтчетовДеревоКонтекстноеМенюВыделитьВсе + 53 + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + Form.Item.НастройкиОтчетовДерево.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + НастройкиОтчетовДеревоКонтекстноеМенюКопироватьВБуферОбмена + 52 + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + Form.Item.НастройкиОтчетовДерево.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + НастройкиОтчетовДеревоКонтекстноеМенюВывестиСписок + 101 + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + Form.Item.НастройкиОтчетовДерево.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + + Tree + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + true + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>Настройки отчетов</value> + + + ru + Настройки отчетов страница + + + НастройкиОтчетовСтраницаРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ВнешнийВидСтраница + 15 + + ВнешнийВид + 29 + true + true + + true + + + ВнешнийВид + + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ВнешнийВидКартинкаНастройкаПометка + 38 + + ВнешнийВидПометка + 83 + true + true + + true + + + ВнешнийВид.Пометка + + + OnChange + ПометкаПриИзменении + + + ВнешнийВидПометкаРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + ВнешнийВидПометкаКонтекстноеМеню + 84 + true + + CheckBoxField + Left + Auto + true + Left + true + + true + + + + ВнешнийВидКартинка + 36 + true + true + + true + + + ВнешнийВид.Картинка + + None + + ВнешнийВидКартинкаРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + ВнешнийВидКартинкаКонтекстноеМеню + 37 + true + + PictureField + true + Left + Auto + true + Left + true + + true + true + true + true + + + 1 + + + + + ВнешнийВидНастройки + 32 + true + true + + true + + + ВнешнийВид.Настройка + + None + + ВнешнийВидНастройкиРасширеннаяПодсказка + 164 + Label + true + true + + Left + + + + ВнешнийВидНастройкиКонтекстноеМеню + 33 + true + + LabelField + Left + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Картинка и настройка</value> + + + ru + Внешний вид картинка настройка пометка + + + ВнешнийВидКартинкаНастройкаПометкаРасширеннаяПодсказка + 159 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ВнешнийВидКоманднаяПанель + 31 + Left + + + Selection + НастройкиДеревоВыбор + + + ВнешнийВидСтрокаПоиска + 150 + + ВнешнийВидСтрокаПоискаРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + ВнешнийВидСтрокаПоискаКонтекстноеМеню + 151 + true + + ВнешнийВид + + true + + + + ВнешнийВидСостояниеПросмотра + 153 + + ВнешнийВидСостояниеПросмотраРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + ВнешнийВидСостояниеПросмотраКонтекстноеМеню + 154 + true + + ViewStatusAddition + ВнешнийВид + + true + + + + ВнешнийВидУправлениеПоиском + 156 + + ВнешнийВидУправлениеПоискомРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + + ВнешнийВидУправлениеПоискомКонтекстноеМеню + 157 + true + + SearchControlAddition + ВнешнийВид + + true + + + + ВнешнийВидРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + + ВнешнийВидКонтекстноеМеню + 30 + + ВнешнийВидКонтекстноеМенюОткрыть + 76 + true + true + + true + + + ВнешнийВидКонтекстноеМенюОткрытьРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + Form.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + + + ВнешнийВидКонтекстноеМенюКопироватьВБуферОбмена + 56 + true + true + + true + + + ВнешнийВидКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + Form.Item.ВнешнийВид.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + ВнешнийВидКонтекстноеМенюВыделитьВсе + 57 + true + true + + true + + + ВнешнийВидКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.Item.ВнешнийВид.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + ВнешнийВидКонтекстноеМенюВывестиСписок + 102 + true + true + + true + + + ВнешнийВидКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + Form.Item.ВнешнийВид.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + + Tree + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>Внешний вид</value> + + + ru + Внешний вид страница + + + ВнешнийВидСтраницаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ПрочиеНастройкиСтраница + 85 + + ПрочиеНастройки + 86 + true + true + + true + + + ПрочиеНастройки + + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ПрочиеНастройкиКартинкаНастройкаПометка + 97 + + ПрочиеНастройкиПометка + 95 + true + true + + true + + + ПрочиеНастройки.Пометка + + None + + OnChange + ПометкаПриИзменении + + + ПрочиеНастройкиПометкаРасширеннаяПодсказка + 190 + Label + true + true + + Left + + + + ПрочиеНастройкиПометкаКонтекстноеМеню + 96 + true + + CheckBoxField + Left + Auto + true + Left + true + + true + + + + ПрочиеНастройкиКартинка + 91 + true + true + + true + + + ПрочиеНастройки.Картинка + + None + + ПрочиеНастройкиКартинкаРасширеннаяПодсказка + 192 + Label + true + true + + Left + + + + ПрочиеНастройкиКартинкаКонтекстноеМеню + 92 + true + + PictureField + true + Left + Auto + true + Left + true + + true + true + true + true + + + 1 + + + + + ПрочиеНастройкиНастройка + 89 + true + true + + true + + + ПрочиеНастройки.Настройка + + None + + ПрочиеНастройкиНастройкаРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + ПрочиеНастройкиНастройкаКонтекстноеМеню + 90 + true + + LabelField + Left + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Прочие настройки картинка настройка пометка</value> + + + ru + Прочие настройки картинка настройка пометка + + + ПрочиеНастройкиКартинкаНастройкаПометкаРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + ColumnGroup + + InCell + true + + + + ПрочиеНастройкиКоманднаяПанель + 88 + Left + + + Selection + НастройкиДеревоВыбор + + + ПрочиеНастройкиСтрокаПоиска + 180 + + ПрочиеНастройкиСтрокаПоискаРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + + ПрочиеНастройкиСтрокаПоискаКонтекстноеМеню + 181 + true + + ПрочиеНастройки + + true + + + + ПрочиеНастройкиСостояниеПросмотра + 183 + + ПрочиеНастройкиСостояниеПросмотраРасширеннаяПодсказка + 185 + Label + true + true + + Left + + + + ПрочиеНастройкиСостояниеПросмотраКонтекстноеМеню + 184 + true + + ViewStatusAddition + ПрочиеНастройки + + true + + + + ПрочиеНастройкиУправлениеПоиском + 186 + + ПрочиеНастройкиУправлениеПоискомРасширеннаяПодсказка + 188 + Label + true + true + + Left + + + + ПрочиеНастройкиУправлениеПоискомКонтекстноеМеню + 187 + true + + SearchControlAddition + ПрочиеНастройки + + true + + + + ПрочиеНастройкиРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + ПрочиеНастройкиКонтекстноеМеню + 87 + + ПрочиеНастройкиКонтекстноеМенюОткрыть + 100 + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюОткрытьРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + Form.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + + + ПрочиеНастройкиКонтекстноеМенюКопироватьВБуферОбмена + 98 + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + Form.Item.ПрочиеНастройки.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + ПрочиеНастройкиКонтекстноеМенюВыделитьВсе + 99 + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + Form.Item.ПрочиеНастройки.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + ПрочиеНастройкиКонтекстноеМенюВывестиСписок + 103 + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + Form.Item.ПрочиеНастройки.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + + true + true + true + true + MultiRow + 1 + 1 + AutoUse + true + true + false + false + false + true + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>Прочие настройки</value> + + + ru + Прочие настройки страница + + + ПрочиеНастройкиСтраницаРасширеннаяПодсказка + 174 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Виды настроек</value> + + + ru + Виды настроек + + + ВидыНастроекРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Pages + + + OnCurrentPageChange + ПриСменеСтраницы + + TabsOnTop + Auto + + + true + true + + true + + + <key>ru</key> + <value>Отображать отчет</value> + + + ru + Отображать отчет + + + ОтображатьОтчетРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + Right + + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + + + OnCreateAtServer + ПриСозданииНаСервере + + CustomizeForm + 50 + 20 + DontBlock + Use + true + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + НастройкиОтчетов + + <key>ru</key> + <value>Настройки отчетов</value> + + 3 + + ValueTree + + + true + + + true + + + НастройкиОтчетов + + + Настройка + + <key>ru</key> + <value>Настройка</value> + + 1 + + String + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 2 + + Picture + + + 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 + + Number + + + + true + + + true + + + + ТипСтроки + + <key>ru</key> + <value>Тип строки</value> + + 6 + + String + + + + true + + + true + + + + + ВнешнийВид + + <key>ru</key> + <value>Внешний вид</value> + + 4 + + ValueTree + + + true + + + true + + + ВнешнийВид + + + Настройка + + <key>ru</key> + <value>Настройка</value> + + 1 + + String + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 2 + + Picture + + + true + + + true + + + + Ключи + + <key>ru</key> + <value>Ключи</value> + + 3 + + ValueList + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 4 + + Number + + + + true + + + true + + + + Тип + + <key>ru</key> + <value>Тип</value> + + 6 + + String + + + + true + + + true + + + + ТипСтроки + + <key>ru</key> + <value>Тип строки</value> + + 5 + + String + + + + true + + + true + + + + + ВыбраннаяСтраницаНастроек + + <key>ru</key> + <value>Выбранная страница настроек</value> + + 9 + + String + + + + true + + + true + + + + Поиск + + <key>ru</key> + <value>Найти</value> + + 10 + + String + + + + true + + + true + + + Поиск + + + + Пользователь + + <key>ru</key> + <value>Пользователь</value> + + 5 + + String + + + + true + + + true + + + + ПрочиеНастройки + + <key>ru</key> + <value>Прочие настройки</value> + + 2 + + ValueTree + + + true + + + true + + + ПрочиеНастройки + + + Настройка + + <key>ru</key> + <value>Настройка</value> + + 1 + + String + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 2 + + Picture + + + true + + + true + + + + Ключи + + <key>ru</key> + <value>Ключи</value> + + 3 + + ValueList + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 4 + + Number + + + + 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> + + 6 + + Number + + 10 + + + + true + + + true + + + + КоличествоНастроекВнешнегоВида + + <key>ru</key> + <value>Количество настроек внешнего вида</value> + + 7 + + Number + + 10 + + + + true + + + true + + + + КоличествоПрочихНастроек + + <key>ru</key> + <value>Количество прочих настроек</value> + + 8 + + Number + + 10 + + + + true + + + true + + + + ТекущийПользователь + + <key>ru</key> + <value>Текущий пользователь</value> + + 11 + + String + + + + true + + + true + + + + ИмяФормыПерсональныхНастроек + + <key>ru</key> + <value>Имя формы персональных настроек</value> + + 12 + + String + + + + true + + + true + + + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 1 + + ru + Обновить список настроек + + + true + + F5 + + StdPicture.Refresh + + + + Обновить + + + TextPicture + Auto + Auto + + + Открыть + + <key>ru</key> + <value>Открыть</value> + + 4 + + ru + Открыть настройку + + + true + + + StdPicture.InputFieldOpen + + + + ОткрытьНастройку + + + TextPicture + Auto + Auto + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 8 + + ru + Выбрать настройки + + + true + + + StdPicture.ChooseValue + + + + Выбрать + + + TextPicture + Auto + Auto + + + ПометитьВсе + + <key>ru</key> + <value>Пометить все</value> + + 9 + + ru + Пометить все настройки + + + true + + + StdPicture.CheckAll + + + + ПометитьВсе + + + Auto + Auto + + + СнятьПометкуСоВсех + + <key>ru</key> + <value>Снять пометку со всех</value> + + 10 + + ru + Снять пометку со всех настроек + + + true + + + StdPicture.UncheckAll + + + + СнятьПометкуСоВсех + + + Auto + Auto + + + Пользователь + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + + + + + diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html new file mode 100644 index 000000000..dcfde7283 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Help/ru.html @@ -0,0 +1,6 @@ + +

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

              +
              1. Список пользовательских настроек отчетов сгруппирован по названиям вариантов отчетов. +
              2. В списке Внешний вид выводятся настройки внешнего вида форм, рабочего стола и командного интерфейса программы. +
              3. В списке Прочие настройки выводятся персональные настройки пользователя, настройки печати табличного документа, избранное и прочие настройки, не вошедшие в другие разделы.

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

              +

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

              \ 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..78547232e --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборНастроек/Module.bsl @@ -0,0 +1,593 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ПользовательСсылка = Параметры.Пользователь; + Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); + ТекущийПользовательСсылка = Пользователи.ТекущийПользователь(); + ТекущийПользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(ТекущийПользовательСсылка); + + ВыбраннаяСтраницаНастроек = Элементы.ВидыНастроек.ТекущаяСтраница.Имя; + ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек(ИмяФормыПерсональныхНастроек); + ЗаполнитьСпискиНастроек(); + +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + + Настройки.Вставить("ПоискСписокВыбора", Элементы.Поиск.СписокВыбора.ВыгрузитьЗначения()); + + Настройки.Удалить("ВнешнийВид"); + Настройки.Удалить("НастройкиОтчетов"); + Настройки.Удалить("ПрочиеНастройки"); + + НастройкиОтчетовДерево = РеквизитФормыВЗначение("НастройкиОтчетов"); + ВнешнийВидДерево = РеквизитФормыВЗначение("ВнешнийВид"); + ПрочиеНастройкиДерево = РеквизитФормыВЗначение("ПрочиеНастройки"); + + ПомеченныеНастройкиОтчетов = ПомеченныеНастройки(НастройкиОтчетовДерево); + ПомеченныеНастройкиВнешнегоВида = ПомеченныеНастройки(ВнешнийВидДерево); + ПомеченныеПрочиеНастройки = ПомеченныеНастройки(ПрочиеНастройкиДерево); + + Настройки.Вставить("ПомеченныеНастройкиОтчетов", ПомеченныеНастройкиОтчетов); + Настройки.Вставить("ПомеченныеНастройкиВнешнегоВида", ПомеченныеНастройкиВнешнегоВида); + Настройки.Вставить("ПомеченныеПрочиеНастройки", ПомеченныеПрочиеНастройки); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки); + + ПоискСписокВыбора = Настройки.Получить("ПоискСписокВыбора"); + Если ТипЗнч(ПоискСписокВыбора) = Тип("Массив") Тогда + Элементы.Поиск.СписокВыбора.ЗагрузитьЗначения(ПоискСписокВыбора); + КонецЕсли; + Поиск = ""; + + ПомеченныеНастройкиОтчетов = Настройки.Получить("ПомеченныеНастройкиОтчетов"); + ПомеченныеНастройкиВнешнегоВида = Настройки.Получить("ПомеченныеНастройкиВнешнегоВида"); + ПомеченныеПрочиеНастройки = Настройки.Получить("ПомеченныеПрочиеНастройки"); + + ЗагрузитьЗначенияПометок(НастройкиОтчетов, ПомеченныеНастройкиОтчетов, "НастройкиОтчетов"); + ЗагрузитьЗначенияПометок(ВнешнийВид, ПомеченныеНастройкиВнешнегоВида, "ВнешнийВид"); + ЗагрузитьЗначенияПометок(ПрочиеНастройки, ПомеченныеПрочиеНастройки, "ПрочиеНастройки"); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПриСменеСтраницы(Элемент, ТекущаяСтраница) + + ВыбраннаяСтраницаНастроек = ТекущаяСтраница.Имя; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоискПриИзменении(Элемент) + + Если ЗначениеЗаполнено(Поиск) Тогда + СписокВыбора = Элементы.Поиск.СписокВыбора; + ЭлементСписка = СписокВыбора.НайтиПоЗначению(Поиск); + Если ЭлементСписка = Неопределено Тогда + СписокВыбора.Вставить(0, Поиск); + Если СписокВыбора.Количество() > 10 Тогда + СписокВыбора.Удалить(10); + КонецЕсли; + Иначе + Индекс = СписокВыбора.Индекс(ЭлементСписка); + Если Индекс <> 0 Тогда + СписокВыбора.Сдвинуть(Индекс, -Индекс); + КонецЕсли; + КонецЕсли; + ТекущийЭлемент = Элементы.Поиск; + КонецЕсли; + + ЗаполнитьСпискиНастроек(); + РазвернутьДеревоЗначений(); + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиДеревоВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьОтчетИлиФорму(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПометкаПриИзменении(Элемент) + + ИзменитьПометку(Элемент); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Обновить(Команда) + + ЗаполнитьСпискиНастроек(); + РазвернутьДеревоЗначений(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьНастройку(Команда) + + ОткрытьОтчетИлиФорму(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПометитьВсе(Команда) + + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + ДеревоНастроек = НастройкиОтчетов.ПолучитьЭлементы(); + ПометитьЭлементыДерева(ДеревоНастроек, Истина); + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + ДеревоНастроек = ВнешнийВид.ПолучитьЭлементы(); + ПометитьЭлементыДерева(ДеревоНастроек, Истина); + Иначе + ДеревоНастроек = ПрочиеНастройки.ПолучитьЭлементы(); + ПометитьЭлементыДерева(ДеревоНастроек, Истина); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СнятьПометкуСоВсех(Команда) + + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + ДеревоНастроек = НастройкиОтчетов.ПолучитьЭлементы(); + ПометитьЭлементыДерева(ДеревоНастроек, Ложь); + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + ДеревоНастроек = ВнешнийВид.ПолучитьЭлементы(); + ПометитьЭлементыДерева(ДеревоНастроек, Ложь); + Иначе + ДеревоНастроек = ПрочиеНастройки.ПолучитьЭлементы(); + ПометитьЭлементыДерева(ДеревоНастроек, Ложь); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура Выбрать(Команда) + + ВыбранныеНастройкиОтчетов = ВыбранныеНастройки(НастройкиОтчетов); + ВыбранныеНастройкиВнешнегоВида = ВыбранныеНастройки(ВнешнийВид); + ПрочиеНастройкиСтруктура = ВыбранныеНастройки(ПрочиеНастройки); + КоличествоНастроек = ВыбранныеНастройкиОтчетов.КоличествоНастроек + + ВыбранныеНастройкиВнешнегоВида.КоличествоНастроек + ПрочиеНастройкиСтруктура.КоличествоНастроек; + + Если ВыбранныеНастройкиОтчетов.КоличествоНастроек = 1 Тогда + ПредставленияНастроек = ВыбранныеНастройкиОтчетов.ПредставленияНастроек; + ИначеЕсли ВыбранныеНастройкиВнешнегоВида.КоличествоНастроек = 1 Тогда + ПредставленияНастроек = ВыбранныеНастройкиВнешнегоВида.ПредставленияНастроек; + ИначеЕсли ПрочиеНастройкиСтруктура.КоличествоНастроек = 1 Тогда + ПредставленияНастроек = ПрочиеНастройкиСтруктура.ПредставленияНастроек; + КонецЕсли; + + Результат = Новый Структура(); + Результат.Вставить("НастройкиОтчетов", ВыбранныеНастройкиОтчетов.МассивНастроек); + Результат.Вставить("ВнешнийВид", ВыбранныеНастройкиВнешнегоВида.МассивНастроек); + Результат.Вставить("ПрочиеНастройки", ПрочиеНастройкиСтруктура.МассивНастроек); + Результат.Вставить("ПредставленияНастроек", ПредставленияНастроек); + Результат.Вставить("ПерсональныеНастройки", ПрочиеНастройкиСтруктура.МассивПерсональныхНастроек); + Результат.Вставить("КоличествоНастроек", КоличествоНастроек); + + Оповестить("ВыборНастроек", Результат); + Закрыть(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, отвечающие за вывод настроек пользователю + +&НаСервере +Процедура ЗаполнитьСпискиНастроек() + + Обработки.НастройкиПользователей.ЗаполнитьСпискиНастроек(ЭтаФорма); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +&НаКлиенте +Процедура ИзменитьПометку(Элемент) + + ПомеченныйЭлемент = Элемент.Родитель.Родитель.ТекущиеДанные; + ЗначениеПометки = ПомеченныйЭлемент.Пометка; + Если ЗначениеПометки = 2 Тогда + ЗначениеПометки = 0; + ПомеченныйЭлемент.Пометка = ЗначениеПометки; + КонецЕсли; + РодительЭлемента = ПомеченныйЭлемент.ПолучитьРодителя(); + ДочерниеЭлементы = ПомеченныйЭлемент.ПолучитьЭлементы(); + КоличествоНастроек = 0; + + Если РодительЭлемента = Неопределено Тогда + + Для Каждого ДочернийЭлемент Из ДочерниеЭлементы Цикл + + Если ДочернийЭлемент.Пометка <> ЗначениеПометки Тогда + КоличествоНастроек = КоличествоНастроек + 1 + КонецЕсли; + + ДочернийЭлемент.Пометка = ЗначениеПометки; + КонецЦикла; + + Если ДочерниеЭлементы.Количество() = 0 Тогда + КоличествоНастроек = КоличествоНастроек + 1; + КонецЕсли; + + Иначе + ПроверитьПометкиДочернихЭлементовИОтметитьРодителя(РодительЭлемента, ЗначениеПометки); + КоличествоНастроек = КоличествоНастроек + 1; + КонецЕсли; + + КоличествоНастроек = ?(ЗначениеПометки, КоличествоНастроек, -КоличествоНастроек); + // Обновление заголовка страницы настроек + ОбновитьЗаголовокСтраницы(КоличествоНастроек); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьЗаголовокСтраницы(КоличествоНастроек) + + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + + КоличествоНастроекОтчетов = КоличествоНастроекОтчетов + КоличествоНастроек; + ТекстЗаголовка = НСтр("ru='Настройки отчетов (%1)'"); + + Если КоличествоНастроекОтчетов = 0 Тогда + ТекстЗаголовка = НСтр("ru='Настройки отчетов'"); + КонецЕсли; + + Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстЗаголовка, КоличествоНастроекОтчетов); + + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + КоличествоНастроекВнешнегоВида = КоличествоНастроекВнешнегоВида + КоличествоНастроек; + ТекстЗаголовка = НСтр("ru='Внешний вид (%1)'"); + + Если КоличествоНастроекВнешнегоВида = 0 Тогда + ТекстЗаголовка = НСтр("ru='Внешний вид'"); + КонецЕсли; + + Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстЗаголовка, КоличествоНастроекВнешнегоВида); + + ИначеЕсли ВыбраннаяСтраницаНастроек = "ПрочиеНастройкиСтраница" Тогда + + КоличествоПрочихНастроек = КоличествоПрочихНастроек + КоличествоНастроек; + ТекстЗаголовка = НСтр("ru='Прочие настройки (%1)'"); + + Если КоличествоПрочихНастроек = 0 Тогда + ТекстЗаголовка = НСтр("ru='Прочие настройки'"); + КонецЕсли; + + Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстЗаголовка, КоличествоПрочихНастроек); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПроверитьПометкиДочернихЭлементовИОтметитьРодителя(ЭлементДерева, ЗначениеПометки) + + ЕстьНеПомеченные = Ложь; + ЕстьПомеченные = Ложь; + + ДочерниеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + Если ДочерниеЭлементы = Неопределено Тогда + ЭлементДерева.Пометка = ЗначениеПометки; + Иначе + + Для Каждого ДочернийЭлемент Из ДочерниеЭлементы Цикл + + Если ДочернийЭлемент.Пометка = 0 Тогда + ЕстьНеПомеченные = Истина; + ИначеЕсли ДочернийЭлемент.Пометка = 1 Тогда + ЕстьПомеченные = Истина; + КонецЕсли; + + КонецЦикла; + + Если ЕстьНеПомеченные + И ЕстьПомеченные Тогда + ЭлементДерева.Пометка = 2; + ИначеЕсли ЕстьПомеченные Тогда + ЭлементДерева.Пометка = 1; + Иначе + ЭлементДерева.Пометка = 0; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПометитьЭлементыДерева(ДеревоНастроек, ЗначениеПометки) + + КоличествоНастроек = 0; + Для Каждого ЭлементДерева Из ДеревоНастроек Цикл + ДочерниеЭлементы = ЭлементДерева.ПолучитьЭлементы(); + + Для Каждого ДочернийЭлемент Из ДочерниеЭлементы Цикл + + ДочернийЭлемент.Пометка = ЗначениеПометки; + КоличествоНастроек = КоличествоНастроек + 1; + + КонецЦикла; + + Если ДочерниеЭлементы.Количество() = 0 Тогда + КоличествоНастроек = КоличествоНастроек + 1; + КонецЕсли; + + ЭлементДерева.Пометка = ЗначениеПометки; + КонецЦикла; + + КоличествоНастроек = ?(ЗначениеПометки, КоличествоНастроек, 0); + + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + КоличествоНастроекОтчетов = КоличествоНастроек; + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + КоличествоНастроекВнешнегоВида = КоличествоНастроек; + ИначеЕсли ВыбраннаяСтраницаНастроек = "ПрочиеНастройкиСтраница" Тогда + КоличествоПрочихНастроек = КоличествоНастроек; + КонецЕсли; + + ОбновитьЗаголовокСтраницы(0); + +КонецПроцедуры + +&НаКлиенте +Функция ВыбранныеНастройки(ДеревоНастроек) + + МассивНастроек = Новый Массив; + МассивПерсональныхНастроек = Новый Массив; + ПредставленияНастроек = Новый Массив; + КоличествоНастроек = 0; + + Для Каждого Настройка Из ДеревоНастроек.ПолучитьЭлементы() Цикл + + Если Настройка.Пометка = 1 Тогда + + Если Настройка.Тип = "ПерсональныеНастройки" Тогда + МассивПерсональныхНастроек.Добавить(Настройка.Ключи); + Иначе + МассивНастроек.Добавить(Настройка.Ключи); + КонецЕсли; + КоличествоДочерних = Настройка.ПолучитьЭлементы().Количество(); + КоличествоНастроек = КоличествоНастроек + ?(КоличествоДочерних=0,1,КоличествоДочерних); + + Если КоличествоДочерних = 1 Тогда + + ДочерняяНастройка = Настройка.ПолучитьЭлементы()[0]; + ПредставленияНастроек.Добавить(Настройка.Настройка + " - " + ДочерняяНастройка.Настройка); + + ИначеЕсли КоличествоДочерних = 0 Тогда + ПредставленияНастроек.Добавить(Настройка.Настройка); + КонецЕсли; + + Иначе + ДочерниеНастройки = Настройка.ПолучитьЭлементы(); + + Для Каждого ДочерняяНастройка Из ДочерниеНастройки Цикл + + Если ДочерняяНастройка.Пометка = 1 Тогда + МассивНастроек.Добавить(ДочерняяНастройка.Ключи); + ПредставленияНастроек.Добавить(Настройка.Настройка + " - " + ДочерняяНастройка.Настройка); + КоличествоНастроек = КоличествоНастроек + 1; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + Возврат Новый Структура("МассивНастроек, МассивПерсональныхНастроек, ПредставленияНастроек, КоличествоНастроек", + МассивНастроек, МассивПерсональныхНастроек, ПредставленияНастроек, КоличествоНастроек); + +КонецФункции + +&НаКлиенте +Процедура ОткрытьОтчетИлиФорму() + + ЭлементДереваЗначений = ТекущийЭлемент; + + Если Пользователь <> ТекущийПользователь Тогда + ТекстПредупреждения = НСтр("ru = 'Для просмотра настроек другого пользователя необходимо запустить программу от его имени + |и открыть нужный отчет или форму.'"); + Предупреждение(ТекстПредупреждения); + Возврат; + КонецЕсли; + + Если ЭлементДереваЗначений.Имя = "НастройкиОтчетовДерево" Тогда + + КлючОбъекта = ЭлементДереваЗначений.ТекущиеДанные.Ключи[0].Значение; + КлючОбъектаМассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КлючОбъекта, "/"); + КлючВарианта = КлючОбъектаМассивСтрок[1]; + ПараметрыОтчета = Новый Структура("КлючВарианта, КлючПользовательскихНастроек", КлючВарианта, ""); + + Если ЭлементДереваЗначений.ТекущиеДанные.Тип = "НастройкаОтчета" Тогда + КлючПользовательскихНастроек = ЭлементДереваЗначений.ТекущиеДанные.Ключи[0].Представление; + ПараметрыОтчета.Вставить("КлючПользовательскихНастроек", КлючПользовательскихНастроек); + КонецЕсли; + + ОткрытьФорму(КлючОбъектаМассивСтрок[0] + ".Форма", ПараметрыОтчета); + Возврат; + + ИначеЕсли ЭлементДереваЗначений.Имя = "ВнешнийВид" Тогда + + Для Каждого КлючОбъекта Из ЭлементДереваЗначений.ТекущиеДанные.Ключи Цикл + + Если КлючОбъекта.Пометка = Истина Тогда + + ОткрытьФорму(КлючОбъекта.Значение); + Возврат; + Иначе + РодительЭлемента = ЭлементДереваЗначений.ТекущиеДанные.ПолучитьРодителя(); + + Если ЭлементДереваЗначений.ТекущиеДанные.Настройка = НСтр("ru='Рабочий стол'") Тогда + Предупреждение(НСтр("ru = 'Для просмотра настроек рабочего стола перейдите к разделу ""Рабочий стол"" + |в командном интерфейсе программы.'")); + Возврат; + КонецЕсли; + + Если ЭлементДереваЗначений.ТекущиеДанные.Настройка = НСтр("ru='Командный интерфейс'") Тогда + Предупреждение(НСтр("ru = 'Для просмотра настроек командного интерфейса выберите нужный раздел + |командного интерфейса программы.'")); + Возврат; + КонецЕсли; + + Если РодительЭлемента <> Неопределено Тогда + ТекстПредупреждения = НСтр("ru = 'Для просмотра данной настройки необходимо открыть ""%1"" + |и затем перейти к форме ""%2"".'"); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, + РодительЭлемента.Настройка, ЭлементДереваЗначений.ТекущиеДанные.Настройка); + Предупреждение(ТекстПредупреждения); + Возврат; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Предупреждение(НСтр("ru = 'Данную настройку невозможно просмотреть.'")); + Возврат; + + ИначеЕсли ЭлементДереваЗначений.Имя = "ПрочиеНастройки" Тогда + + Если ЭлементДереваЗначений.ТекущиеДанные.Тип = "ПерсональныеНастройки" + И ИмяФормыПерсональныхНастроек <> "" Тогда + ОткрытьФорму(ИмяФормыПерсональныхНастроек); + Возврат; + КонецЕсли; + + Предупреждение(НСтр("ru = 'Данную настройку невозможно просмотреть.'")); + Возврат; + + КонецЕсли; + + Предупреждение(НСтр("ru = 'Выберите настройку для просмотра.'")); + +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьДеревоЗначений() + + Строки = НастройкиОтчетов.ПолучитьЭлементы(); + Для Каждого Строка Из Строки Цикл + Элементы.НастройкиОтчетовДерево.Развернуть(Строка.ПолучитьИдентификатор(), Истина); + КонецЦикла; + + Строки = ВнешнийВид.ПолучитьЭлементы(); + Для Каждого Строка Из Строки Цикл + Элементы.ВнешнийВид.Развернуть(Строка.ПолучитьИдентификатор(), Истина); + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Функция ПомеченныеНастройки(ДеревоНастроек) + + СписокПомеченных = Новый СписокЗначений; + ОтборПомеченных = Новый Структура("Пометка", 1); + ОтборНеопределенных = Новый Структура("Пометка", 2); + + МассивПомеченных = ДеревоНастроек.Строки.НайтиСтроки(ОтборПомеченных, Истина); + Для Каждого СтрокаМассива Из МассивПомеченных Цикл + СписокПомеченных.Добавить(СтрокаМассива.ТипСтроки, , Истина); + КонецЦикла; + + МассивНеопределенных = ДеревоНастроек.Строки.НайтиСтроки(ОтборНеопределенных, Истина); + Для Каждого СтрокаМассива Из МассивНеопределенных Цикл + СписокПомеченных.Добавить(СтрокаМассива.ТипСтроки); + КонецЦикла; + + Возврат СписокПомеченных; + +КонецФункции + +&НаСервере +Процедура ЗагрузитьЗначенияПометок(ДеревоЗначений, ПомеченныеНастройки, ВидНастроек) + + Если ПомеченныеНастройки = Неопределено Тогда + Возврат; + КонецЕсли; + КоличествоПомеченных = 0; + + Для Каждого СтрокаПомеченныеНастройки Из ПомеченныеНастройки Цикл + + ПомеченнаяНастройка = СтрокаПомеченныеНастройки.Значение; + + Для Каждого СтрокаДерева Из ДеревоЗначений.ПолучитьЭлементы() Цикл + + ДочерниеЭлементы = СтрокаДерева.ПолучитьЭлементы(); + + Если СтрокаДерева.ТипСтроки = ПомеченнаяНастройка Тогда + + Если СтрокаПомеченныеНастройки.Пометка Тогда + СтрокаДерева.Пометка = 1; + + Если ДочерниеЭлементы.Количество() = 0 Тогда + КоличествоПомеченных = КоличествоПомеченных + 1; + КонецЕсли; + + Иначе + СтрокаДерева.Пометка = 2; + КонецЕсли; + + Иначе + + Для Каждого ДочернийЭлемент Из ДочерниеЭлементы Цикл + + Если ДочернийЭлемент.ТипСтроки = ПомеченнаяНастройка Тогда + ДочернийЭлемент.Пометка = 1; + КоличествоПомеченных = КоличествоПомеченных + 1; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + + КонецЦикла; + + КонецЦикла; + + Если КоличествоПомеченных > 0 Тогда + + Если ВидНастроек = "НастройкиОтчетов" Тогда + КоличествоНастроекОтчетов = КоличествоПомеченных; + Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Настройки отчетов (%1)'"), КоличествоПомеченных); + ИначеЕсли ВидНастроек = "ВнешнийВид" Тогда + КоличествоНастроекВнешнегоВида = КоличествоПомеченных; + Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Внешний вид (%1)'"), КоличествоПомеченных); + ИначеЕсли ВидНастроек = "ПрочиеНастройки" Тогда + КоличествоПрочихНастроек = КоличествоПомеченных; + Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Прочие настройки (%1)'"), КоличествоПомеченных); + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/ConditionalAppearance.dcssca b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/ConditionalAppearance.dcssca similarity index 62% rename from SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/ConditionalAppearance.dcssca rename to SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/ConditionalAppearance.dcssca index 817d11865..9430b8a59 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаПодсистем/ConditionalAppearance.dcssca +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/ConditionalAppearance.dcssca @@ -3,24 +3,20 @@ - ДеревоПодсистемИспользование + ГруппыПользователейГруппа - ДеревоПодсистем.Предопределенная - Equal - true + ГруппыПользователей.ПомеченоПользователей + Greater + 0 - ЦветТекста - #C0C0C0 - - - ТолькоПросмотр - true + Текст + ГруппыПользователей.НаименованиеГруппыИПомеченоПользователей diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form new file mode 100644 index 000000000..de3e0a468 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Form.form @@ -0,0 +1,1711 @@ + + + + <key>ru</key> + <value>Выбор пользователей для копирования настроек</value> + + + КоманднаяПанель + 50 + + Выбрать + 9 + true + true + + true + + + ВыбратьРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.Command.Выбрать + Auto + true + true + true + UserCmds + Auto + + + ПометитьВсе + 27 + true + true + + true + + + ПометитьВсеРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Command.ПометитьВсе + Normal + Auto + true + true + UserCmds + Auto + + + СнятьПометкуСоВсех + 28 + true + true + + true + + + СнятьПометкуСоВсехРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + Form.Command.СнятьПометкуСоВсех + Normal + Auto + true + true + UserCmds + Auto + + + ПометитьВыбранные + 21 + true + true + + true + + + ПометитьВыбранныеРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + Form.Command.ПометитьВыбранные + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СнятьПометкуВыбранных + 22 + true + true + + true + + + СнятьПометкуВыбранныхРасширеннаяПодсказка + 56 + Label + true + true + + Left + + + Form.Command.СнятьПометкуВыбранных + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаАктивныеПользователи + 49 + true + true + + true + + + ФормаАктивныеПользователиРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + Form.Command.АктивныеПользователи + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + Надпись + 23 + + <key>ru</key> + <value>Выберите пользователей, которым необходимо скопировать настройки:</value> + + true + true + + true + + + НадписьРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + НадписьКонтекстноеМеню + 24 + true + + Label + true + true + + Left + + + + ВыборПользователя + 17 + + ГруппыПользователей + 12 + + <key>ru</key> + <value>Группы пользователей</value> + + true + true + + true + + + ГруппыПользователей + + None + Add + Change + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ГруппаИКартинка + 20 + + ГруппыПользователейГруппа + 15 + true + true + + true + + + ГруппыПользователей.Группа + + None + + ГруппыПользователейГруппаРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + + ГруппыПользователейГруппаКонтекстноеМеню + 16 + true + + InputField + Auto + true + Left + true + + true + true + true + false + false + false + false + false + false + true + Normal + + + + ГруппыПользователейКартинка + 18 + true + true + + true + + + ГруппыПользователей.Картинка + + + ГруппыПользователейКартинкаРасширеннаяПодсказка + 76 + Label + true + true + + Left + + + + ГруппыПользователейКартинкаКонтекстноеМеню + 19 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + + 1 + + + + true + true + + true + + + <key>ru</key> + <value>Группа и картинка</value> + + + ru + Группа и картинка + + + ГруппаИКартинкаРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ГруппыПользователейКоманднаяПанель + 14 + Left + + + Selection + ГруппыПользователейВыбор + + + OnActivateRow + ГруппыПользователейПриАктивизацииСтроки + + + ГруппыПользователейСтрокаПоиска + 64 + + ГруппыПользователейСтрокаПоискаРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + + ГруппыПользователейСтрокаПоискаКонтекстноеМеню + 65 + true + + ГруппыПользователей + + true + + + + ГруппыПользователейСостояниеПросмотра + 67 + + ГруппыПользователейСостояниеПросмотраРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + + ГруппыПользователейСостояниеПросмотраКонтекстноеМеню + 68 + true + + ViewStatusAddition + ГруппыПользователей + + true + + + + ГруппыПользователейУправлениеПоиском + 70 + + ГруппыПользователейУправлениеПоискомРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ГруппыПользователейУправлениеПоискомКонтекстноеМеню + 71 + true + + SearchControlAddition + ГруппыПользователей + + true + + + + ГруппыПользователейРасширеннаяПодсказка + 63 + Label + true + true + + Left + + + + ГруппыПользователейКонтекстноеМеню + 13 + + ГруппыПользователейКонтекстноеМенюИзменить + 42 + true + true + + true + + + ГруппыПользователейКонтекстноеМенюИзменитьРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Form.Command.Изменить + Normal + Auto + true + true + UserCmds + Auto + + + ГруппыПользователейКонтекстноеМенюКопироватьВБуферОбмена + 41 + true + true + + true + + + ГруппыПользователейКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Form.Item.СписокПользователей.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + ГруппыПользователейКонтекстноеМенюВыделитьВсе + 40 + true + true + + true + + + ГруппыПользователейКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + Form.Item.ГруппыПользователей.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + Tree + true + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + true + Auto + true + true + true + true + + ГруппыПользователей.Картинка + + + CommonPicture.СостоянияПользователей + + None + None + None + true + + + СписокПользователей + 1 + + <key>ru</key> + <value>Пользователи</value> + + true + true + + true + + + СписокПользователей + + None + Add + Change + Copy + Delete + EndEdit + MoveDown + MoveUp + SortListAsc + SortListDesc + + ГруппаПользователи + 8 + + ПользователиФлажок + 6 + true + true + + true + + + СписокПользователей.Пометка + + None + + OnChange + ПользователиФлажокПриИзменении + + + ПользователиФлажокРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + + ПользователиФлажокКонтекстноеМеню + 7 + true + + CheckBoxField + Auto + true + Left + true + + + + Пользователи + 4 + true + true + + true + + + СписокПользователей.Пользователь + + None + + ПользователиРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + ПользователиКонтекстноеМеню + 5 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Группа пользователи</value> + + + ru + Группа пользователи + + + ГруппаПользователиРасширеннаяПодсказка + 99 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + None + + СписокПользователейКоманднаяПанель + 3 + Right + true + + + Selection + СписокПользователейВыбор + + + СписокПользователейСтрокаПоиска + 90 + + СписокПользователейСтрокаПоискаРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + + СписокПользователейСтрокаПоискаКонтекстноеМеню + 91 + true + + СписокПользователей + + true + + + + СписокПользователейСостояниеПросмотра + 93 + + СписокПользователейСостояниеПросмотраРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + СписокПользователейСостояниеПросмотраКонтекстноеМеню + 94 + true + + ViewStatusAddition + СписокПользователей + + true + + + + СписокПользователейУправлениеПоиском + 96 + + СписокПользователейУправлениеПоискомРасширеннаяПодсказка + 98 + Label + true + true + + Left + + + + СписокПользователейУправлениеПоискомКонтекстноеМеню + 97 + true + + SearchControlAddition + СписокПользователей + + true + + + + СписокПользователейРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + + СписокПользователейКонтекстноеМеню + 2 + + СписокПользователейКонтекстноеМенюИзменить + 43 + true + true + + true + + + СписокПользователейКонтекстноеМенюИзменитьРасширеннаяПодсказка + 86 + Label + true + true + + Left + + + Form.Command.Изменить + Normal + Auto + true + true + UserCmds + Auto + + + СписокПользователейКонтекстноеМенюКопироватьВБуферОбмена + 38 + true + true + + true + + + СписокПользователейКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + Form.Item.СписокПользователей.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + СписокПользователейКонтекстноеМенюВыделитьВсе + 39 + true + true + + true + + + СписокПользователейКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Form.Item.СписокПользователей.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + HierarchicalList + true + true + true + MultiRow + 1 + 1 + AutoUse + AutoUse + true + true + false + false + Auto + Auto + true + true + None + None + None + true + + + true + true + + true + + + <key>ru</key> + <value>Выбор пользователей</value> + + + ru + Выбор пользователя + + + ВыборПользователяРасширеннаяПодсказка + 59 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаПоказыватьПользователейДочернихГрупп + 34 + + ГруппаНельзяУстановитьСвойство + 35 + + ВсеПользователи + 32 + + <key>ru</key> + <value>Все пользователи</value> + + true + true + + true + + + ВсеПользователиРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + ВсеПользователиКонтекстноеМеню + 33 + true + + Label + true + true + + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа нельзя установить свойство</value> + + + ru + Группа нельзя установить свойство + + + ГруппаНельзяУстановитьСвойствоРасширеннаяПодсказка + 113 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ГруппаУстановитьСвойство + 36 + + ПоказыватьПользователейДочернихГрупп + 25 + + <key>ru</key> + <value>Показывать пользователей дочерних групп</value> + + true + true + + true + + + ПоказыватьПользователейДочернихГрупп + + Right + + ru + Отображать в списке пользователей выбранной группы пользователей дочерних групп + + + OnChange + ПоказыватьПользователейДочернихГруппПриИзменении + + + ПоказыватьПользователейДочернихГруппРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + + ПоказыватьПользователейДочернихГруппКонтекстноеМеню + 26 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Группа установить свойство</value> + + + ru + Группа установить свойство + + + ГруппаУстановитьСвойствоРасширеннаяПодсказка + 115 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа показывать пользователей дочерних групп</value> + + + ru + Группа показывать пользователей дочерних групп + + + ГруппаПоказыватьПользователейДочернихГруппРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаКоманднаяПанель + -1 + Left + + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + + + OnOpen + ПриОткрытии + + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + Close + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 70 + 20 + DontBlock + Use + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + СписокПользователей + + <key>ru</key> + <value>Отметьте пользователей</value> + + 2 + + ValueTable + + + true + + + true + + + Пользователь + + <key>ru</key> + <value>Пользователь</value> + + 1 + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 2 + + Boolean + + + true + + + true + + + + + Объект + 3 + + DataProcessorObject.НастройкиПользователей + + + true + + + true + +
              true
              +
              + + ГруппыПользователей + + <key>ru</key> + <value>Выберите группу пользователей</value> + + 1 + + ValueTree + + + true + + + true + + FunctionalOption.ИспользоватьГруппыПользователей + + Группа + + <key>ru</key> + <value>Группа</value> + + 1 + + CatalogRef.ГруппыВнешнихПользователей + CatalogRef.ГруппыПользователей + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 2 + + Number + + 10 + + + + true + + + true + + + + Состав + + <key>ru</key> + <value>Состав</value> + + 3 + + ValueList + + + true + + + true + + + + ПолныйСостав + + <key>ru</key> + <value>Полный состав</value> + + 4 + + ValueList + + + true + + + true + + + + ПомеченоПользователей + + <key>ru</key> + <value>Помечено пользователей</value> + + 5 + + Number + + 10 + + + + true + + + true + + + + НаименованиеГруппыИПомеченоПользователей + + <key>ru</key> + <value>Наименование группы и помечено пользователей</value> + + 6 + + String + + + + true + + + true + + + + + ПользовательИсточник + + <key>ru</key> + <value>Пользователь источник</value> + + 6 + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + true + + + true + + + + СписокВсехПользователей + + <key>ru</key> + <value>Отметьте пользователей</value> + + 7 + + ValueTable + + + true + + + true + + + СписокВсехПользователей + + + Пользователь + + <key>ru</key> + <value>Пользователь</value> + + 1 + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + true + + + true + + + + Пометка + + <key>ru</key> + <value>Пометка</value> + + 2 + + Boolean + + + true + + + true + + + + + ПоказыватьПользователейДочернихГрупп + + <key>ru</key> + <value>Показывать пользователей дочерних групп</value> + + 4 + + Boolean + + + true + + + true + + FunctionalOption.ИспользоватьГруппыПользователей + + ПоказыватьПользователейДочернихГрупп + + + + ИспользоватьГруппы + + <key>ru</key> + <value>Использовать группы</value> + + 8 + + Boolean + + + true + + + true + + + + ВсеПользователи + + <key>ru</key> + <value>Все пользователи</value> + + 9 + + CatalogRef.ГруппыВнешнихПользователей + CatalogRef.ГруппыПользователей + String + + + + true + + + true + + + + КопироватьВсе + + <key>ru</key> + <value>Копировать все</value> + + 12 + + Boolean + + + true + + + true + + + + ОчисткаНастроек + + <key>ru</key> + <value>Очистка настроек</value> + + 5 + + Boolean + + + true + + + true + + + + Выбрать + + <key>ru</key> + <value>Выбрать</value> + + 1 + + ru + Выбрать пользователей + + + true + + + StdPicture.ChooseValue + + + + Выбрать + + + TextPicture + Auto + Auto + + + ПометитьВыбранные + + <key>ru</key> + <value>Пометить выбранные</value> + + 3 + + ru + Пометить выбранные + + + true + + + + ПометитьВыбранные + + + Picture + Auto + Auto + + + СнятьПометкуВыбранных + + <key>ru</key> + <value>Снять пометку выбранных</value> + + 4 + + ru + Снять пометку выбранных + + + true + + + + СнятьПометкуВыбранных + + + Picture + Auto + Auto + + + ПометитьВсе + + <key>ru</key> + <value>Пометить всех</value> + + 2 + + ru + Пометить всех пользователей + + + true + + + StdPicture.CheckAll + + + + ПометитьВсе + + + Auto + Auto + + + СнятьПометкуСоВсех + + <key>ru</key> + <value>Снять пометку со всех</value> + + 5 + + ru + Снять пометку со всех пользователей + + + true + + + StdPicture.UncheckAll + + + + СнятьПометкуСоВсех + + + Auto + Auto + + + Изменить + + <key>ru</key> + <value>Изменить</value> + + 6 + + ru + Открыть карточку пользователя или группы + + + true + + + StdPicture.Change + + + + ИзменитьПользователяИлиГруппу + + + TextPicture + Auto + Auto + + + АктивныеПользователи + + <key>ru</key> + <value>Активные пользователи...</value> + + 7 + + ru + Открыть список пользователей, работающих в программе + + + true + + + + АктивныеПользователи + + + Auto + Auto + + + ОчисткаНастроек + + 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..d4a3160ae --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Help/ru.html @@ -0,0 +1,3 @@ + +

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

              +

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

              \ 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..3e1a18642 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ВыборПользователей/Module.bsl @@ -0,0 +1,402 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Если Параметры.ТипПользователя = Тип("СправочникСсылка.Пользователи") Тогда + ВсеПользователи = Справочники.ГруппыПользователей.ВсеПользователи; + Иначе + ВсеПользователи = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; + КонецЕсли; + + РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; + ИспользоватьГруппы = ПолучитьФункциональнуюОпцию("ИспользоватьГруппыПользователей"); + ПользовательИсточник = Параметры.Пользователь; + ТипПользователя = Параметры.ТипПользователя; + ЗаполнитьСписокПользователей(ТипПользователя, ИспользоватьГруппы); + + КопироватьВсе = Параметры.КопироватьВсе; + Если Параметры.ОчисткаНастроек Тогда + ОчисткаНастроек = Параметры.ОчисткаНастроек; + Заголовок = НСтр("ru='Выбор пользователей для очистки настроек'"); + Элементы.Надпись.Заголовок = НСтр("ru='Выберите пользователей, которым необходимо очистить настройки'"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + + ПараметрыОтбора = Новый Структура("Пометка", Истина); + СписокПомеченныхПользователей = Новый СписокЗначений; + Настройки.Удалить("СписокВсехПользователей"); + МассивПомеченныхПользователей = СписокВсехПользователей.НайтиСтроки(ПараметрыОтбора); + + Для Каждого СтрокаМассива Из МассивПомеченныхПользователей Цикл + СписокПомеченныхПользователей.Добавить(СтрокаМассива.Пользователь); + КонецЦикла; + + Настройки.Вставить("ПомеченныеПользователи", СписокПомеченныхПользователей); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки); + ПомеченныеПользователи = Настройки.Получить("ПомеченныеПользователи"); + + Для Каждого СтрокаПомеченныеПользователи Из ПомеченныеПользователи Цикл + + ПользовательСсылка = СтрокаПомеченныеПользователи.Значение; + + Для Каждого СтрокаСпискаВсехПользователей Из СписокВсехПользователей Цикл + Если СтрокаСпискаВсехПользователей.Пользователь = ПользовательСсылка Тогда + СтрокаСпискаВсехПользователей.Пометка = Истина; + КонецЕсли; + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ОбновитьЗаголовкиГруппПриПереключенииФлажка(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ГруппыПользователейПриАктивизацииСтроки(Элемент) + + ВыбраннаяГруппа = Элемент.ТекущиеДанные; + Если ВыбраннаяГруппа = Неопределено Тогда + Возврат; + КонецЕсли; + + ПрименитьФильтрГрупп(ВыбраннаяГруппа); + Если ИспользоватьГруппы Тогда + + Если ВыбраннаяГруппа.Группа = ВсеПользователи Тогда + Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаНельзяУстановитьСвойство; + Иначе + Элементы.ГруппаПоказыватьПользователейДочернихГрупп.ТекущаяСтраница = Элементы.ГруппаУстановитьСвойство; + КонецЕсли; + + Иначе + Элементы.ГруппаПоказыватьПользователейДочернихГрупп.Видимость = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура СписокПользователейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьЗначение(Элемент.ТекущиеДанные.Пользователь); + +КонецПроцедуры + +&НаКлиенте +Процедура ГруппыПользователейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + ОткрытьЗначение(Элемент.ТекущиеДанные.Группа); + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказыватьПользователейДочернихГруппПриИзменении(Элемент) + + ВыделеннаяГруппаПользователей = Элементы.ГруппыПользователей.ТекущиеДанные; + ПрименитьФильтрГрупп(ВыделеннаяГруппаПользователей); + + // Обновление заголовков групп + ОчиститьЗаголовкиГрупп(); + ОбновитьЗаголовкиГруппПриПереключенииФлажка(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПользователиФлажокПриИзменении(Элемент) + + СтрокаСпискаПользователей = Элемент.Родитель.Родитель.ТекущиеДанные; + СтрокаСпискаПользователей.Пометка = Не СтрокаСпискаПользователей.Пометка; + ПоменятьПометку(СтрокаСпискаПользователей, Не СтрокаСпискаПользователей.Пометка); + +КонецПроцедуры + +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Выбрать(Команда) + + ПользователиПриемник = Новый Массив; + Для Каждого Элемент Из СписокПользователей Цикл + + Если Элемент.Пометка Тогда + ПользователиПриемник.Добавить(Элемент.Пользователь); + КонецЕсли; + + КонецЦикла; + + Если ПользователиПриемник.Количество() = 0 Тогда + Предупреждение(НСтр("ru = 'Необходимо отметить одного или несколько пользователей.'")); + Возврат; + КонецЕсли; + + + Результат = Новый Структура("ПользователиПриемник, КопироватьВсе, ОчисткаНастроек", + ПользователиПриемник, КопироватьВсе, ОчисткаНастроек); + Оповестить("ВыборПользователя", Результат); + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПометитьВсе(Команда) + + Для Каждого СтрокаСпискаПользователей Из СписокПользователей Цикл + ПоменятьПометку(СтрокаСпискаПользователей, Истина); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПометитьВыбранные(Команда) + + ВыделенныеЭлементы = Элементы.СписокПользователей.ВыделенныеСтроки; + + Если ВыделенныеЭлементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Элемент Из ВыделенныеЭлементы Цикл + СтрокаСпискаПользователей = СписокПользователей.НайтиПоИдентификатору(Элемент); + ПоменятьПометку(СтрокаСпискаПользователей, Истина); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура СнятьПометкуСоВсех(Команда) + + Для Каждого СтрокаСпискаПользователей Из СписокПользователей Цикл + ПоменятьПометку(СтрокаСпискаПользователей, Ложь); + КонецЦикла; +КонецПроцедуры + +&НаКлиенте +Процедура СнятьПометкуВыбранных(Команда) + + ВыделенныеЭлементы = Элементы.СписокПользователей.ВыделенныеСтроки; + + Если ВыделенныеЭлементы.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Элемент Из ВыделенныеЭлементы Цикл + СтрокаСпискаПользователей = СписокПользователей.НайтиПоИдентификатору(Элемент); + ПоменятьПометку(СтрокаСпискаПользователей, Ложь); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьПользователяИлиГруппу(Команда) + + ТекущееЗначение = ТекущийЭлемент.ТекущиеДанные; + + Если ТипЗнч(ТекущееЗначение) = Тип("ДанныеФормыЭлементКоллекции") Тогда + + ОткрытьЗначение(ТекущееЗначение.Пользователь); + + ИначеЕсли ТипЗнч(ТекущееЗначение) = Тип("ДанныеФормыЭлементДерева") Тогда + + ОткрытьЗначение(ТекущееЗначение.Группа); + + КонецЕсли; + + +КонецПроцедуры + +&НаКлиенте +Процедура АктивныеПользователи(Команда) + + СтандартныеПодсистемыКлиентПереопределяемый.ОткрытьСписокАктивныхПользователей(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура ОбновитьЗаголовкиГруппПриПереключенииФлажка() + + Для Каждого ГруппаПользователей Из ГруппыПользователей.ПолучитьЭлементы() Цикл + + Для Каждого СтрокаСпискаПользователей Из СписокВсехПользователей Цикл + + Если СтрокаСпискаПользователей.Пометка Тогда + ЗначениеПометки = Истина; + СтрокаСпискаПользователей.Пометка = Ложь; + ОбновитьЗаголовокГруппы(ЭтаФорма, ГруппаПользователей, СтрокаСпискаПользователей, ЗначениеПометки); + СтрокаСпискаПользователей.Пометка = Истина; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьЗаголовкиГрупп() + + Для Каждого ГруппаПользователей Из ГруппыПользователей.ПолучитьЭлементы() Цикл + ОчиститьЗаголовокГруппы(ГруппаПользователей); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьЗаголовокГруппы(ГруппаПользователей) + + ГруппаПользователей.ПомеченоПользователей = 0; + ПодчиненныеГруппы = ГруппаПользователей.ПолучитьЭлементы(); + + Для Каждого ПодчиненнаяГруппа Из ПодчиненныеГруппы Цикл + + ОчиститьЗаголовокГруппы(ПодчиненнаяГруппа); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоменятьПометку(СтрокаСпискаПользователей, ЗначениеПометки) + + Если ИспользоватьГруппы Тогда + + ОбновитьЗаголовкиГрупп(ЭтаФорма, СтрокаСпискаПользователей, ЗначениеПометки); + + СтрокаСпискаПользователей.Пометка = ЗначениеПометки; + Отбор = Новый Структура("Пользователь", СтрокаСпискаПользователей.Пользователь); + НайденныеПользователи = СписокВсехПользователей.НайтиСтроки(Отбор); + Для Каждого НайденныйПользователь Из НайденныеПользователи Цикл + НайденныйПользователь.Пометка = ЗначениеПометки; + КонецЦикла; + Иначе + СтрокаСпискаПользователей.Пометка = ЗначениеПометки; + КонецЕсли; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьЗаголовкиГрупп(Форма, СтрокаСпискаПользователей, ЗначениеПометки) + + Для Каждого ГруппаПользователей Из Форма.ГруппыПользователей.ПолучитьЭлементы() Цикл + + ОбновитьЗаголовокГруппы(Форма, ГруппаПользователей, СтрокаСпискаПользователей, ЗначениеПометки); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура ОбновитьЗаголовокГруппы(Форма, ГруппаПользователей, СтрокаСпискаПользователей, ЗначениеПометки) + + ПользовательСсылка = СтрокаСпискаПользователей.Пользователь; + Если Форма.ПоказыватьПользователейДочернихГрупп + Или Форма.ВсеПользователи = ГруппаПользователей.Группа Тогда + Состав = ГруппаПользователей.ПолныйСостав; + Иначе + Состав = ГруппаПользователей.Состав; + КонецЕсли; + ПомеченныйПользователь = Состав.НайтиПоЗначению(ПользовательСсылка); + + Если ПомеченныйПользователь <> Неопределено И ЗначениеПометки <> СтрокаСпискаПользователей.Пометка Тогда + ПомеченоПользователей = ГруппаПользователей.ПомеченоПользователей; + ГруппаПользователей.ПомеченоПользователей = ?(ЗначениеПометки, ПомеченоПользователей + 1, ПомеченоПользователей - 1); + ГруппаПользователей.НаименованиеГруппыИПомеченоПользователей = + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 (%2)'"), + Строка(ГруппаПользователей.Группа), ГруппаПользователей.ПомеченоПользователей); + КонецЕсли; + + // Обновить заголовки у всех подчиненных групп рекурсивно + ПодчиненныеГруппы = ГруппаПользователей.ПолучитьЭлементы(); + Для Каждого ПодчиненнаяГруппа Из ПодчиненныеГруппы Цикл + ОбновитьЗаголовокГруппы(Форма, ПодчиненнаяГруппа, СтрокаСпискаПользователей, ЗначениеПометки); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ПрименитьФильтрГрупп(ТекущаяГруппа) + + СписокПользователей.Очистить(); + Если ТекущаяГруппа = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ПоказыватьПользователейДочернихГрупп Тогда + СоставГруппы = ТекущаяГруппа.ПолныйСостав; + Иначе + СоставГруппы = ТекущаяГруппа.Состав; + КонецЕсли; + Для Каждого Элемент Из СписокВсехПользователей Цикл + Если Не СоставГруппы.НайтиПоЗначению(Элемент.Пользователь) = Неопределено + Или ВсеПользователи = ТекущаяГруппа.Группа Тогда + СтрокаСписокПользователей = СписокПользователей.Добавить(); + СтрокаСписокПользователей.Пользователь = Элемент.Пользователь; + СтрокаСписокПользователей.Пометка = Элемент.Пометка; + КонецЕсли; + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписокПользователей(ТипПользователя, ИспользоватьГруппы); + + ДеревоГрупп = РеквизитФормыВЗначение("ГруппыПользователей"); + СписокВсехПользователейТаблица = РеквизитФормыВЗначение("СписокВсехПользователей"); + СписокПользователейТаблица = РеквизитФормыВЗначение("СписокПользователей"); + Обработка = РеквизитФормыВЗначение("Объект"); + + Если ТипПользователя = Тип("СправочникСсылка.ВнешниеПользователи") Тогда + ПользовательВнешний = Истина; + Иначе + ПользовательВнешний = Ложь; + КонецЕсли; + + Если ИспользоватьГруппы Тогда + Обработка.ЗаполнитьДеревоГрупп(ДеревоГрупп, ПользовательВнешний); + СписокВсехПользователейТаблица = Обработка.ПользователиДляКопирования( + ПользовательИсточник, СписокВсехПользователейТаблица, ПользовательВнешний); + Иначе + СписокПользователейТаблица = Обработка.ПользователиДляКопирования( + ПользовательИсточник, СписокПользователейТаблица, ПользовательВнешний); + КонецЕсли; + + ДеревоГрупп.Строки.Сортировать("Группа Возр"); + СтрокаДляПеремещения = ДеревоГрупп.Строки.Найти(ВсеПользователи, "Группа"); + + Если Не СтрокаДляПеремещения = Неопределено Тогда + ИндексСтроки = ДеревоГрупп.Строки.Индекс(СтрокаДляПеремещения); + ДеревоГрупп.Строки.Сдвинуть(ИндексСтроки, -ИндексСтроки); + КонецЕсли; + + ЗначениеВРеквизитФормы(ДеревоГрупп, "ГруппыПользователей"); + ЗначениеВРеквизитФормы(СписокПользователейТаблица, "СписокПользователей"); + ЗначениеВРеквизитФормы(СписокВсехПользователейТаблица, "СписокВсехПользователей"); + +КонецПроцедуры + + + + diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form new file mode 100644 index 000000000..37adf6a3b --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Form.form @@ -0,0 +1,824 @@ + + + + <key>ru</key> + <value>Копирование настроек пользователей</value> + + + ПользовательСсылка + 1 + true + true + + true + + + ПользовательСсылка + + Top + + ru + Пользователь, настройки которого требуется скопировать + + + OnChange + ПользовательСсылкаПриИзменении + + + ПользовательСсылкаРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + + ПользовательСсылкаКонтекстноеМеню + 2 + true + + InputField + true + Enter + true + Left + true + + + StartChoice + ПользовательНачалоВыбора + + 35 + true + true + false + true + true + true + true + Normal + + + + ГруппаКомуКопировать + 28 + + Приемник + 3 + + <key>ru</key> + <value>Кому скопировать</value> + + true + true + + true + + + Приемник + + None + + OnChange + ПриемникПриИзменении + + + ПриемникРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ПриемникКонтекстноеМеню + 4 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Выбранным пользователям: + + + ВыбраннымПользователям + + + + + ru + Всем пользователям + + + ВсемПользователям + + + Vertical + + + + ГруппаВыбратьПользователей + 29 + + ВыбратьПользователей + 58 + + <key>ru</key> + <value>Выбрать</value> + + true + true + + true + + + ru + Выберите пользователей, которым необходимо скопировать настройки + + + ВыбратьПользователейРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + ВыбратьПользователейКонтекстноеМеню + 59 + true + + Label + 27 + true + true + + + Click + ВыбратьПользователей + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа выбрать пользователей</value> + + + ГруппаВыбратьПользователейРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Кому копировать:</value> + + + ГруппаКомуКопироватьРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ГруппаКопируемыеНастройки + 13 + + КопируемыеНастройкиПереключатель + 62 + true + true + + true + + + КопируемыеНастройкиПереключатель + + None + + OnChange + КопируемыеНастройкиПереключательПриИзменении + + + КопируемыеНастройкиПереключательРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + КопируемыеНастройкиПереключательКонтекстноеМеню + 63 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Все настройки + + + СкопироватьВсе + + + + + ru + Отдельные настройки: + + + СкопироватьОтдельные + + + Vertical + + + + ГруппаВыбрать + 64 + + Отступ1 + 65 + true + true + + true + + + Отступ1РасширеннаяПодсказка + 83 + Label + true + true + + Left + + + + Отступ1КонтекстноеМеню + 66 + true + + Label + true + true + + Left + + + + ВыбратьНастройки + 60 + + <key>ru</key> + <value>Выбрать</value> + + true + false + + true + + + ru + Выберите настройки, которые необходимо скопировать + + + ВыбратьНастройкиРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + ВыбратьНастройкиКонтекстноеМеню + 61 + true + + Label + 28 + true + 1 + true + false + false + + + Click + ВыбратьНастройки + + true + Left + Top + 1 + + + true + true + + true + + + <key>ru</key> + <value>Группа выбрать</value> + + + ГруппаВыбратьРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Что копировать:</value> + + + ГруппаКопируемыеНастройкиРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + + Отступ + 67 + true + true + + true + + + ОтступРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ОтступКонтекстноеМеню + 68 + true + + Label + true + true + + Left + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаСкопироватьИЗакрыть + 57 + true + true + + true + + + ФормаСкопироватьИЗакрытьРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + Form.Command.СкопироватьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + Скопировать + 10 + true + true + + true + + + СкопироватьРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + Form.Command.Скопировать + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗакрыть + 56 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + Right + true + + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 49 + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.НастройкиПользователей + + + true + + + true + +
              true
              +
              + + ПользовательСсылка + + <key>ru</key> + <value>Скопировать настройки от пользователя</value> + + 2 + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + true + + + true + + + + Приемник + + <key>ru</key> + <value>Приемник</value> + + 3 + + String + + + + true + + + true + + + + ИспользоватьВнешнихПользователей + + <key>ru</key> + <value>Использовать внешних пользователей</value> + + 5 + + Boolean + + + true + + + true + + + + ПользователиПриемник + + <key>ru</key> + <value>Пользователи приемник</value> + + 6 + + + true + + + true + + + + ВыбранныеНастройки + 7 + + + true + + + true + + + + КоличествоНастроек + + <key>ru</key> + <value>Количество настроек</value> + + 4 + + Number + + 10 + + + + true + + + true + + + + КоличествоПользователей + + <key>ru</key> + <value>Количество пользователей</value> + + 8 + + Number + + 10 + + + + true + + + true + + + + ПользовательСсылкаСтарый + + <key>ru</key> + <value>Пользователь ссылка старый</value> + + 9 + + CatalogRef + + + true + + + true + + + + КопируемыеНастройкиПереключатель + + <key>ru</key> + <value>Копируемые настройки</value> + + 10 + + String + + + + true + + + true + + + + РезультатПроверки + + <key>ru</key> + <value>Результат проверки активных пользователей</value> + + 11 + + String + + + + true + + + true + + + + Скопировать + + <key>ru</key> + <value>Скопировать</value> + + 3 + + ru + Скопировать + + + true + + + + Скопировать + + + Auto + Auto + + + СкопироватьИЗакрыть + + <key>ru</key> + <value>Скопировать и закрыть</value> + + 4 + + ru + Скопировать и закрыть + + + true + + + + Скопировать + + + Auto + Auto + + + Пользователь + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + + + + + +
              diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html new file mode 100644 index 000000000..39db36393 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Help/ru.html @@ -0,0 +1,5 @@ + +

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

              +
              1. "Скопировать настройки от пользователя" - пользователь (или внешний пользователь), чьи настройки будут использоваться для копирования другим пользователям. +
              2. "Кому копировать" - выбираются пользователи, которым необходимо скопировать настройки. При отметке значения "Выбранным пользователям" становится доступен выбор пользователей. +
              3. "Что копировать" - выбирается, какие настройки копировать другому пользователю или пользователям. При выборе значения "Отдельные настройки" появляется возможность выбора нужных настроек из списка
              \ 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..8e5107282 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Module.bsl @@ -0,0 +1,449 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ИспользоватьВнешнихПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей"); + Приемник = "ВыбраннымПользователям"; + КопируемыеНастройкиПереключатель = "СкопироватьВсе"; + + Если Параметры.Пользователь <> Неопределено Тогда + МассивПользователей = Новый Массив; + МассивПользователей.Добавить(Параметры.Пользователь); + ПользователиПриемник = Новый Структура("МассивПользователей", МассивПользователей); + Элементы.ВыбратьПользователей.Заголовок = Строка(Параметры.Пользователь); + КоличествоПользователей = 1; + Иначе + ПользовательСсылка = Пользователи.ТекущийПользователь(); + КонецЕсли; + + Если ПользовательСсылка = Неопределено Тогда + Элементы.ГруппаКопируемыеНастройки.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ВРег(ИмяСобытия) = ВРег("ВыборПользователя") Тогда + ПользователиПриемник = Новый Структура("МассивПользователей", Параметр.ПользователиПриемник); + + КоличествоПользователей = Параметр.ПользователиПриемник.Количество(); + Если КоличествоПользователей = 1 Тогда + Элементы.ВыбратьПользователей.Заголовок = Строка(Параметр.ПользователиПриемник[0]); + ИначеЕсли КоличествоПользователей > 1 Тогда + + ПрописьЧисла = ЧислоПрописью( + КоличествоПользователей, + "Л = ru_RU", + НСтр("ru = ',,,,,,,,0'")); + ПрописьЧислаИПредмета = ЧислоПрописью( + КоличествоПользователей, + "Л = ru_RU", + НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); + ЧислоИПредмет = СтрЗаменить( + ПрописьЧислаИПредмета, + ПрописьЧисла, + Формат(КоличествоПользователей, "ЧДЦ=0") + " "); + + Элементы.ВыбратьПользователей.Заголовок = ЧислоИПредмет; + КонецЕсли; + Элементы.ВыбратьПользователей.Подсказка = ""; + + ИначеЕсли ВРег(ИмяСобытия) = ВРег("ВыборНастроек") Тогда + ВыбранныеНастройки = Новый Структура("НастройкиОтчетов, ВнешнийВид, ПрочиеНастройки, ПерсональныеНастройки", + Параметр.НастройкиОтчетов, Параметр.ВнешнийВид, Параметр.ПрочиеНастройки, Параметр.ПерсональныеНастройки); + + КоличествоНастроек = Параметр.КоличествоНастроек; + + Если КоличествоНастроек = 0 Тогда + ТекстЗаголовка = НСтр("ru='Выбрать'"); + ИначеЕсли КоличествоНастроек = 1 Тогда + ТекстЗаголовка = Параметр.ПредставленияНастроек[0]; + Иначе + ПрописьЧисла = ЧислоПрописью( + КоличествоНастроек, + "Л = ru_RU", + НСтр("ru = ',,,,,,,,0'")); + ПрописьЧислаИПредмета = ЧислоПрописью( + КоличествоНастроек, + "Л = ru_RU", + НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); + ТекстЗаголовка = СтрЗаменить( + ПрописьЧислаИПредмета, + ПрописьЧисла, + Формат(КоличествоНастроек, "ЧДЦ=0") + " "); + КонецЕсли; + + Элементы.ВыбратьНастройки.Заголовок = ТекстЗаголовка; + Элементы.ВыбратьНастройки.Подсказка = ""; + + ИначеЕсли ВРег(ИмяСобытия) = ВРег("СкопироватьНастройкиАктивнымПользователям") Тогда + + СкопироватьНастройки(Параметр.Действие); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПользовательНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + + ПараметрыОтбора = Новый Структура("ДоступКИнформационнойБазеРазрешен, РежимВыбора", Истина, Истина); + Если ИспользоватьВнешнихПользователей Тогда + ВыборТипаПользователей = Новый СписокЗначений; + ВыборТипаПользователей.Добавить("ВнешниеПользователи", НСтр("ru = 'Внешние пользователи'")); + ВыборТипаПользователей.Добавить("Пользователи", НСтр("ru = 'Пользователи'")); + + ВыбранныйВариант = ВыборТипаПользователей.ВыбратьЭлемент(); + Если ВыбранныйВариант = Неопределено Тогда + Возврат; + КонецЕсли; + ВыбранныйТип = ВыбранныйВариант.Значение; + Иначе + ВыбранныйТип = "Пользователи"; + КонецЕсли; + + Если ВыбранныйТип = "Пользователи" Тогда + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыОтбора, Элементы.ПользовательСсылка); + ИначеЕсли ВыбранныйТип = "ВнешниеПользователи" Тогда + ОткрытьФорму("Справочник.ВнешниеПользователи.Форма.ФормаСписка", ПараметрыОтбора, Элементы.ПользовательСсылка); + КонецЕсли; + ПользовательСсылкаСтарый = ПользовательСсылка; + +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательСсылкаПриИзменении(Элемент) + + Если ПользовательСсылка <> Неопределено + И ПользователиПриемник <> Неопределено Тогда + + Для Каждого ПользовательПриемник Из ПользователиПриемник.МассивПользователей Цикл + + Если ПользовательСсылка = ПользовательПриемник Тогда + Предупреждение(НСтр("ru = 'Пользователь, чьи настройки необходимо скопировать, + |не должен совпадать с получателем этих настроек.'")); + ПользовательСсылка = ПользовательСсылкаСтарый; + Возврат; + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Элементы.ГруппаКопируемыеНастройки.Доступность = ПользовательСсылка <> Неопределено; + + ВыбранныеНастройки = Неопределено; + КоличествоНастроек = 0; + Элементы.ВыбратьНастройки.Заголовок = НСтр("ru='Выбрать'"); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьНастройки(Элемент) + + ПараметрыФормы = Новый Структура("Пользователь", ПользовательСсылка); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборНастроек", ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьПользователей(Элемент) + + ТипПользователя = ТипЗнч(ПользовательСсылка); + ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, КопироватьВсе, ОчисткаНастроек", + ПользовательСсылка, ТипПользователя, Ложь, Ложь); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриемникПриИзменении(Элемент) + + Если Приемник = "ВыбраннымПользователям" Тогда + Элементы.ВыбратьПользователей.Доступность = Истина; + Иначе + Элементы.ВыбратьПользователей.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура КопируемыеНастройкиПереключательПриИзменении(Элемент) + + Если КопируемыеНастройкиПереключатель = "СкопироватьОтдельные" Тогда + Элементы.ВыбратьНастройки.Доступность = Истина; + Иначе + Элементы.ВыбратьНастройки.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Скопировать(Команда) + + ОчиститьСообщения(); + + Если ПользовательСсылка = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите пользователя, чьи настройки необходимо скопировать.'"), , "ПользовательСсылка"); + Возврат; + КонецЕсли; + + Если КоличествоПользователей = 0 И Приемник <> "ВсемПользователям" Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите одного или несколько пользователей, которым необходимо скопировать настройки.'"), , "Приемник"); + Возврат; + КонецЕсли; + + Если КопируемыеНастройкиПереключатель = "СкопироватьОтдельные" И КоличествоНастроек = 0 Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите настройки, которые необходимо скопировать.'"), , "КопируемыеНастройкиПереключатель"); + Возврат; + КонецЕсли; + + // При копировании настроек внешнего вида или всех настроек другим пользователям + // проверяем работают они с программой или нет. Если работают - выводим сообщение об этом. + ПроверитьАктивныхПользователей(); + Если РезультатПроверки = "ЕстьАктивныеПользователиПолучатели" Тогда + + Если КопируемыеНастройкиПереключатель = "СкопироватьВсе" + Или (КопируемыеНастройкиПереключатель = "СкопироватьОтдельные" + И ВыбранныеНастройки.ВнешнийВид.Количество() <> 0) Тогда + + ПараметрыФормы = Новый Структура("Действие", Команда.Имя); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ПредупреждениеОКопированииНастроек", ПараметрыФормы); + Возврат; + + КонецЕсли; + + КонецЕсли; + + СкопироватьНастройки(Команда.Имя); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Функция СкопироватьНастройки(ИмяКоманды) + + Состояние(НСтр("ru = 'Выполняется копирование настроек'")); + + Если КопируемыеНастройкиПереключатель = "СкопироватьОтдельные" Тогда + + СкопироватьВыбранныеНастройки(); + + ТекстПояснения = НСтр("ru = 'Скопировано настроек: %1'"); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, КоличествоНастроек); + ПоказатьОповещениеПользователя(НСтр("ru = 'Копирование настроек'"), , ТекстПояснения); + Иначе + + НастройкиСкопированы = СкопироватьВсеНастройки(); + Если Не НастройкиСкопированы Тогда + + ТекстПредупреждения = НСтр("ru = 'Настройки не были скопированы, так как у пользователя ""%1"" не было сохранено ни одной настройки.'"); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер. + ПодставитьПараметрыВСтроку(ТекстПредупреждения, Строка(ПользовательСсылка)); + Предупреждение(ТекстПредупреждения); + + Возврат Ложь; + КонецЕсли; + + ТекстПояснения = НСтр("ru = 'Скопированы все настройки'"); + ПоказатьОповещениеПользователя(НСтр("ru = 'Копирование настроек'"), , ТекстПояснения); + КонецЕсли; + + // При копировании настроек внешнего вида или всех настроек от другого пользователь предлагаем + // перезапустить программу для их принятия. + Если РезультатПроверки = "ТекущийПользовательПолучатель" Или РезультатПроверки = "ТекущийПользовательСредиПолучателей" Тогда + + Если КопируемыеНастройкиПереключатель = "СкопироватьВсе" Тогда + + Если ПредложитьПерезапускПрограммы() Тогда + Возврат Истина; + КонецЕсли; + + ИначеЕсли КопируемыеНастройкиПереключатель = "СкопироватьОтдельные" Тогда + + Если ВыбранныеНастройки.ВнешнийВид.Количество() <> 0 + Или КопируемыеНастройкиПереключатель = "СкопироватьВсе" Тогда + + Если ПредложитьПерезапускПрограммы() Тогда + Возврат Истина; + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + // Если копирование настроек от другого пользователя, оповещаем об этом форму НастройкиПользователей. + Если РезультатПроверки = "ТекущийПользовательПолучатель" Или РезультатПроверки = "ТекущийПользовательСредиПолучателей" Тогда + Оповестить("СкопированыНастройки", Истина); + КонецЕсли; + + Если ИмяКоманды = "СкопироватьИЗакрыть" Тогда + Закрыть(); + КонецЕсли; + + Возврат Истина; + +КонецФункции + +&НаКлиенте +Функция ПредложитьПерезапускПрограммы() + + ТекстСообщения = НСтр("ru = 'Для того чтобы скопированные настройки внешнего вида вступили в силу, необходимо перезапустить программу. + |Перезапустить сейчас?'"); + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить(НСтр("ru='Перезапустить сейчас'")); + КнопкиВопроса.Добавить(НСтр("ru='Не перезапускать'")); + Ответ = Вопрос(ТекстСообщения, КнопкиВопроса,, КнопкиВопроса[1].Значение); + Если Ответ = КнопкиВопроса[0].Значение Тогда + СтандартныеПодсистемыКлиент.ПропуститьПредупреждениеПередЗавершениемРаботыСистемы(); + ЗавершитьРаботуСистемы(Истина, Истина); + Возврат Истина; + КонецЕсли; + Возврат Ложь; + +КонецФункции + +&НаСервере +Процедура СкопироватьВыбранныеНастройки() + + Обработка = РеквизитФормыВЗначение("Объект"); + + Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); + + Если Приемник = "ВыбраннымПользователям" Тогда + Приемники = ПользователиПриемник.МассивПользователей; + ИначеЕсли Приемник = "ВсемПользователям" Тогда + Приемники = Новый Массив; + ТаблицаПользователей = Новый ТаблицаЗначений; + ТаблицаПользователей.Колонки.Добавить("Пользователь"); + ТаблицаПользователей = Обработка.ПользователиДляКопирования(ПользовательСсылка, ТаблицаПользователей, + ТипЗнч(ПользовательСсылка) = Тип("СправочникСсылка.ВнешниеПользователи")); + + Для Каждого СтрокаТаблицы Из ТаблицаПользователей Цикл + Приемники.Добавить(СтрокаТаблицы.Пользователь); + КонецЦикла; + + КонецЕсли; + + Если ВыбранныеНастройки.НастройкиОтчетов.Количество() > 0 Тогда + Обработка.СкопироватьНастройкиОтчетовИПерсональныеНастройки(ХранилищеПользовательскихНастроекОтчетов, + Пользователь, Приемники, ВыбранныеНастройки.НастройкиОтчетов); + КонецЕсли; + + Если ВыбранныеНастройки.ВнешнийВид.Количество() > 0 Тогда + Обработка.СкопироватьНастройкиВнешнегоВида(Пользователь, Приемники, ВыбранныеНастройки.ВнешнийВид); + КонецЕсли; + + Если ВыбранныеНастройки.ПрочиеНастройки.Количество() > 0 Тогда + Обработка.СкопироватьНастройкиВнешнегоВида(Пользователь, Приемники, ВыбранныеНастройки.ПрочиеНастройки); + КонецЕсли; + + Если ВыбранныеНастройки.ПерсональныеНастройки.Количество() > 0 Тогда + Обработка.СкопироватьНастройкиОтчетовИПерсональныеНастройки(ХранилищеОбщихНастроек, + Пользователь, Приемники, ВыбранныеНастройки.ПерсональныеНастройки); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция СкопироватьВсеНастройки() + + Обработка = РеквизитФормыВЗначение("Объект"); + + Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); + + Если Приемник = "ВыбраннымПользователям" Тогда + Приемники = ПользователиПриемник.МассивПользователей; + Иначе + Приемники = Новый Массив; + ТаблицаПользователей = Новый ТаблицаЗначений; + ТаблицаПользователей.Колонки.Добавить("Пользователь"); + ТаблицаПользователей = Обработка.ПользователиДляКопирования(ПользовательСсылка, ТаблицаПользователей, + ТипЗнч(ПользовательСсылка) = Тип("СправочникСсылка.ВнешниеПользователи")); + + Для Каждого СтрокаТаблицы Из ТаблицаПользователей Цикл + Приемники.Добавить(СтрокаТаблицы.Пользователь); + КонецЦикла; + + КонецЕсли; + + КопируемыеНастройки = Новый Массив; + КопируемыеНастройки.Добавить("НастройкиОтчетов"); + КопируемыеНастройки.Добавить("НастройкиВнешнегоВида"); + КопируемыеНастройки.Добавить("ПерсональныеНастройки"); + КопируемыеНастройки.Добавить("Избранное"); + КопируемыеНастройки.Добавить("НастройкиПечати"); + + НастройкиСкопированы = Обработки.НастройкиПользователей. + СкопироватьНастройкиПользователей(Пользователь, Приемники, КопируемыеНастройки); + + Возврат НастройкиСкопированы; + +КонецФункции + +&НаСервере +Процедура ПроверитьАктивныхПользователей() + + Если ПользователиПриемник <> Неопределено Тогда + МассивПользователей = ПользователиПриемник.МассивПользователей; + КонецЕсли; + + Если Приемник = "ВсемПользователям" Тогда + + Обработка = РеквизитФормыВЗначение("Объект"); + МассивПользователей = Новый Массив; + ТаблицаПользователей = Новый ТаблицаЗначений; + ТаблицаПользователей.Колонки.Добавить("Пользователь"); + ТаблицаПользователей = Обработка.ПользователиДляКопирования(ПользовательСсылка, ТаблицаПользователей, + ТипЗнч(ПользовательСсылка) = Тип("СправочникСсылка.ВнешниеПользователи")); + + Для Каждого СтрокаТаблицы Из ТаблицаПользователей Цикл + МассивПользователей.Добавить(СтрокаТаблицы.Пользователь); + КонецЦикла; + + КонецЕсли; + + Если МассивПользователей.Количество() = 1 + И МассивПользователей[0] = Пользователи.ТекущийПользователь() Тогда + + РезультатПроверки = "ТекущийПользовательПолучатель"; + Возврат; + + КонецЕсли; + + ЕстьАктивныеПользователиПолучатели = Ложь; + Сеансы = ПолучитьСеансыИнформационнойБазы(); + Для Каждого Получатель Из МассивПользователей Цикл + Если Получатель = Пользователи.ТекущийПользователь() Тогда + РезультатПроверки = "ТекущийПользовательСредиПолучателей"; + Возврат; + КонецЕсли; + Для Каждого Сеанс Из Сеансы Цикл + Если Получатель.ИдентификаторПользователяИБ = Сеанс.Пользователь.УникальныйИдентификатор Тогда + ЕстьАктивныеПользователиПолучатели = Истина; + КонецЕсли; + КонецЦикла; + КонецЦикла; + + РезультатПроверки = ?(ЕстьАктивныеПользователиПолучатели, "ЕстьАктивныеПользователиПолучатели", ""); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form new file mode 100644 index 000000000..80c803eaa --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Form.form @@ -0,0 +1,3209 @@ + + + + <key>ru</key> + <value>Настройки пользователей</value> + + + ОтчетИлиПредупреждение + 66 + + ОтображатьОтчет + 67 + + БыстрыйПоиск + 50 + + ПользовательСсылка + 59 + true + true + + true + + + ПользовательСсылка + + + ru + Пользователь, настройки которого требуется скопировать или очистить + + + OnChange + ПользовательСсылкаПриИзменении + + + ПользовательСсылкаРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + + ПользовательСсылкаКонтекстноеМеню + 60 + true + + InputField + Enter + true + Left + true + + + StartChoice + ПользовательСсылкаНачалоВыбора + + true + true + false + true + false + true + false + false + false + true + true + true + Normal + + + + Поиск + 48 + true + true + + true + + + Поиск + + Left + + ru + Введите имя или часть фразы для поиска настроек. Например: отчет + + + OnChange + ПоискПриИзменении + + + ПоискРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + + ПоискКонтекстноеМеню + 49 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + false + true + false + false + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Быстрый поиск</value> + + + ru + Быстрый поиск + + + БыстрыйПоискРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + КоманднаяПанель + 51 + + Открыть + 61 + true + true + + true + + + ОткрытьРасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Form.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СкопироватьОт + 102 + true + true + + true + + + СкопироватьОтРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Form.Command.СкопироватьОт + Normal + Auto + true + true + UserCmds + Auto + + + СкопироватьДругим + 94 + + СкопироватьНастройкиОтчетов + 95 + true + true + + true + + + СкопироватьНастройкиОтчетовРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + Form.Command.СкопироватьНастройкиОтчетов + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СкопироватьНастройкиВнешнегоВида + 96 + true + true + + true + + + СкопироватьНастройкиВнешнегоВидаРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + Form.Command.СкопироватьНастройкиВнешнегоВида + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СкопироватьНастройкиотчетовИВнешнегоВида + 97 + true + true + + true + + + СкопироватьНастройкиотчетовИВнешнегоВидаРасширеннаяПодсказка + 131 + Label + true + true + + Left + + + Form.Command.СкопироватьНастройкиотчетовИВнешнегоВида + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СкопироватьВсеНастройки + 75 + true + true + + true + + + СкопироватьВсеНастройкиРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Form.Command.СкопироватьВсеНастройки + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + СкопироватьДругимВыделенные + 111 + + Скопировать + 41 + + <key>ru</key> + <value>Выделенные настройки...</value> + + true + true + + true + + + СкопироватьРасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Form.Command.СкопироватьДругим + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Скопировать другим выделенные</value> + + + ru + Скопировать другим выделенные + + + СкопироватьДругимВыделенныеРасширеннаяПодсказка + 133 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Скопировать другим</value> + + + ru + Скопировать все настройки + + + СкопироватьДругимРасширеннаяПодсказка + 128 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + Очистить + 98 + + ОчиститьВсеНастройки + 99 + true + true + + true + + + ОчиститьВсеНастройкиРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + Form.Command.ОчиститьВсеНастройки + Normal + Auto + true + true + UserCmds + Auto + + + ОчиститьНастройкиОтчетовИВнешнегоВида + 100 + true + true + + true + + + ОчиститьНастройкиОтчетовИВнешнегоВидаРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + Form.Command.ОчиститьНастройкиОтчетовИВнешнегоВида + Normal + Auto + true + true + UserCmds + Auto + + + ОчиститьВыделенные + 110 + + ОчиститьНастройки + 44 + true + true + + true + + + ОчиститьНастройкиРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + Form.Command.Очистить + Normal + Auto + true + true + UserCmds + Auto + + + ОчиститьНастройкиВыбраннымПользователям + 108 + true + true + + true + + + ОчиститьНастройкиВыбраннымПользователямРасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Form.Command.ОчиститьНастройкиУПользователей + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Очистить выделенные</value> + + + ru + Очистить выделенные + + + ОчиститьВыделенныеРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + + + true + true + + true + + + <key>ru</key> + <value>Очистить</value> + + + ru + Очистить настройки + + + ОчиститьРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + Popup + + + StdPicture.Delete + + Auto + Normal + + + + ОчиститьНастройкиВсехПользователей + 74 + true + true + + true + + + ОчиститьНастройкиВсехПользователейРасширеннаяПодсказка + 141 + Label + true + true + + Left + + + Form.Command.ОчиститьНастройкиВсехПользователей + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + Обновить + 1 + true + true + + true + + + ОбновитьРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + Form.Command.Обновить + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + true + true + + true + + + <key>ru</key> + <value>Командная панель</value> + + + ru + Командная панель + + + КоманднаяПанельРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + CommandBar + + Left + Form + + + + ВидыНастроек + 13 + + НастройкиОтчетовСтраница + 14 + + НастройкиОтчетовДерево + 19 + true + true + + true + + + НастройкиОтчетов + + None + Add + Change + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + НастройкиОтчетовКартинкаНастройкаПометка + 28 + + Картинка + 26 + true + true + + true + + + НастройкиОтчетов.Картинка + + None + + КартинкаРасширеннаяПодсказка + 163 + Label + true + true + + Left + + + + КартинкаКонтекстноеМеню + 27 + true + + PictureField + true + true + Left + true + + true + true + true + true + + + 1 + + + + + Настройки + 22 + true + true + + true + + + НастройкиОтчетов.Настройка + + None + + НастройкиРасширеннаяПодсказка + 165 + Label + true + true + + Left + + + + НастройкиКонтекстноеМеню + 23 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Картинка и настройка</value> + + + ru + Настройки отчетов картинка настройка пометка + + + НастройкиОтчетовКартинкаНастройкаПометкаРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + НастройкиОтчетовДеревоКоманднаяПанель + 21 + Left + + + Selection + НастройкиДеревоВыбор + + + BeforeAddRow + НастройкиОтчетовИВнешнийВидПередНачаломДобавления + + + BeforeDeleteRow + НастройкиПередУдалением + + + НастройкиОтчетовДеревоСтрокаПоиска + 153 + + НастройкиОтчетовДеревоСтрокаПоискаРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + НастройкиОтчетовДеревоСтрокаПоискаКонтекстноеМеню + 154 + true + + НастройкиОтчетовДерево + + true + + + + НастройкиОтчетовДеревоСостояниеПросмотра + 156 + + НастройкиОтчетовДеревоСостояниеПросмотраРасширеннаяПодсказка + 158 + Label + true + true + + Left + + + + НастройкиОтчетовДеревоСостояниеПросмотраКонтекстноеМеню + 157 + true + + ViewStatusAddition + НастройкиОтчетовДерево + + true + + + + НастройкиОтчетовДеревоУправлениеПоиском + 159 + + НастройкиОтчетовДеревоУправлениеПоискомРасширеннаяПодсказка + 161 + Label + true + true + + Left + + + + НастройкиОтчетовДеревоУправлениеПоискомКонтекстноеМеню + 160 + true + + SearchControlAddition + НастройкиОтчетовДерево + + true + + + + НастройкиОтчетовДеревоРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + НастройкиОтчетовДеревоКонтекстноеМеню + 20 + + НастройкиОтчетовДеревоКонтекстноеМенюОткрыть + 65 + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюОткрытьРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + Form.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + + + НастройкиОтчетовДеревоКонтекстноеМенюСкопировать + 105 + + <key>ru</key> + <value>Скопировать другим...</value> + + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + Form.Item.НастройкиОтчетовДерево.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + НастройкиОтчетовДеревоКонтекстноеМенюОчистить + 54 + + <key>ru</key> + <value>Очистить</value> + + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюОчиститьРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + Form.Item.НастройкиОтчетовДерево.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + НастройкиОтчетовДеревоКонтекстноеМенюПрочее + 113 + + НастройкиОтчетовДеревоКонтекстноеМенюВыделитьВсе + 53 + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + Form.Item.НастройкиОтчетовДерево.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + НастройкиОтчетовДеревоКонтекстноеМенюКопироватьВБуферОбмена + 52 + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + Form.Item.НастройкиОтчетовДерево.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + НастройкиОтчетовДеревоКонтекстноеМенюВывестиСписок + 112 + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 151 + Label + true + true + + Left + + + Form.Item.НастройкиОтчетовДерево.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + НастройкиОтчетовДеревоКонтекстноеМенюПрочееРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + + + true + + Tree + true + true + true + true + MultiRow + Row + 1 + 1 + AutoUse + AutoUse + true + true + false + false + true + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>Настройки отчетов</value> + + + ru + Настройки отчетов страница + + + НастройкиОтчетовСтраницаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ВнешнийВидСтраница + 15 + + ВнешнийВид + 29 + true + true + + true + + + ВнешнийВид + + None + Add + Change + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ВнешнийВидКартинкаНастройкаПометка + 38 + + ВнешнийВидКартинка + 36 + true + true + + true + + + ВнешнийВид.Картинка + + None + + ВнешнийВидКартинкаРасширеннаяПодсказка + 194 + Label + true + true + + Left + + + + ВнешнийВидКартинкаКонтекстноеМеню + 37 + true + + PictureField + true + Auto + true + Left + true + + true + true + true + true + + + 1 + + + + + ВнешнийВидНастройки + 32 + true + true + + true + + + ВнешнийВид.Настройка + + None + + ВнешнийВидНастройкиРасширеннаяПодсказка + 196 + Label + true + true + + Left + + + + ВнешнийВидНастройкиКонтекстноеМеню + 33 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Картинка и настройка</value> + + + ru + Внешний вид картинка настройка пометка + + + ВнешнийВидКартинкаНастройкаПометкаРасширеннаяПодсказка + 193 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + ВнешнийВидКоманднаяПанель + 31 + Left + + + Selection + НастройкиДеревоВыбор + + + BeforeAddRow + НастройкиОтчетовИВнешнийВидПередНачаломДобавления + + + BeforeDeleteRow + НастройкиПередУдалением + + + ВнешнийВидСтрокаПоиска + 184 + + ВнешнийВидСтрокаПоискаРасширеннаяПодсказка + 186 + Label + true + true + + Left + + + + ВнешнийВидСтрокаПоискаКонтекстноеМеню + 185 + true + + ВнешнийВид + + true + + + + ВнешнийВидСостояниеПросмотра + 187 + + ВнешнийВидСостояниеПросмотраРасширеннаяПодсказка + 189 + Label + true + true + + Left + + + + ВнешнийВидСостояниеПросмотраКонтекстноеМеню + 188 + true + + ViewStatusAddition + ВнешнийВид + + true + + + + ВнешнийВидУправлениеПоиском + 190 + + ВнешнийВидУправлениеПоискомРасширеннаяПодсказка + 192 + Label + true + true + + Left + + + + ВнешнийВидУправлениеПоискомКонтекстноеМеню + 191 + true + + SearchControlAddition + ВнешнийВид + + true + + + + ВнешнийВидРасширеннаяПодсказка + 183 + Label + true + true + + Left + + + + ВнешнийВидКонтекстноеМеню + 30 + + ВнешнийВидКонтекстноеМенюОткрыть + 76 + true + true + + true + + + ВнешнийВидКонтекстноеМенюОткрытьРасширеннаяПодсказка + 176 + Label + true + true + + Left + + + Form.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + + + ВнешнийВидКонтекстноеМенюСкопировать + 106 + + <key>ru</key> + <value>Скопировать другим...</value> + + true + true + + true + + + ВнешнийВидКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 177 + Label + true + true + + Left + + + Form.Item.ВнешнийВид.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ВнешнийВидКонтекстноеМенюУдалить + 55 + + <key>ru</key> + <value>Очистить</value> + + true + true + + true + + + ВнешнийВидКонтекстноеМенюУдалитьРасширеннаяПодсказка + 178 + Label + true + true + + Left + + + Form.Item.ВнешнийВид.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + ВнешнийВидКонтекстноеМенюПрочее + 114 + + ВнешнийВидКонтекстноеМенюКопироватьВБуферОбмена + 56 + true + true + + true + + + ВнешнийВидКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 180 + Label + true + true + + Left + + + Form.Item.ВнешнийВид.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + ВнешнийВидКонтекстноеМенюВыделитьВсе + 57 + true + true + + true + + + ВнешнийВидКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 181 + Label + true + true + + Left + + + Form.Item.ВнешнийВид.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + ВнешнийВидКонтекстноеМенюВывестиСписок + 115 + true + true + + true + + + ВнешнийВидКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 182 + Label + true + true + + Left + + + Form.Item.ВнешнийВид.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ВнешнийВидКонтекстноеМенюПрочееРасширеннаяПодсказка + 179 + Label + true + true + + Left + + + + + true + + Tree + true + true + true + true + MultiRow + Row + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + true + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>Внешний вид</value> + + + ru + Внешний вид страница + + + ВнешнийВидСтраницаРасширеннаяПодсказка + 175 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ПрочиеНастройкиСтраница + 77 + + ПрочиеНастройки + 78 + true + true + + true + + + ПрочиеНастройки + + None + Add + Change + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ПрочиеНастройкиКартинкаНастройкаПометка + 81 + + ПрочиеНастройкиКартинка + 92 + true + true + + true + + + ПрочиеНастройки.Картинка + + + ПрочиеНастройкиКартинкаРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + + ПрочиеНастройкиКартинкаКонтекстноеМеню + 93 + true + + PictureField + Auto + true + Left + true + + true + true + true + true + + + 1 + + + + + ПрочиеНастройкиНастройка + 90 + true + true + + true + + + ПрочиеНастройки.Настройка + + None + + ПрочиеНастройкиНастройкаРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + + ПрочиеНастройкиНастройкаКонтекстноеМеню + 91 + true + + LabelField + Auto + true + Left + true + + true + true + + + true + true + + true + + + <key>ru</key> + <value>Прочие настройки картинка настройка пометка</value> + + + ru + Прочие настройки картинка настройка пометка + + + ПрочиеНастройкиКартинкаНастройкаПометкаРасширеннаяПодсказка + 224 + Label + true + true + + Left + + + ColumnGroup + + InCell + true + + + + ПрочиеНастройкиКоманднаяПанель + 80 + Left + + + Selection + НастройкиДеревоВыбор + + + BeforeAddRow + НастройкиОтчетовИВнешнийВидПередНачаломДобавления + + + BeforeDeleteRow + НастройкиПередУдалением + + + ПрочиеНастройкиСтрокаПоиска + 215 + + ПрочиеНастройкиСтрокаПоискаРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + + ПрочиеНастройкиСтрокаПоискаКонтекстноеМеню + 216 + true + + ПрочиеНастройки + + true + + + + ПрочиеНастройкиСостояниеПросмотра + 218 + + ПрочиеНастройкиСостояниеПросмотраРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + + ПрочиеНастройкиСостояниеПросмотраКонтекстноеМеню + 219 + true + + ViewStatusAddition + ПрочиеНастройки + + true + + + + ПрочиеНастройкиУправлениеПоиском + 221 + + ПрочиеНастройкиУправлениеПоискомРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + + ПрочиеНастройкиУправлениеПоискомКонтекстноеМеню + 222 + true + + SearchControlAddition + ПрочиеНастройки + + true + + + + ПрочиеНастройкиРасширеннаяПодсказка + 214 + Label + true + true + + Left + + + + ПрочиеНастройкиКонтекстноеМеню + 79 + + ПрочиеНастройкиКонтекстноеМенюОткрыть + 109 + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюОткрытьРасширеннаяПодсказка + 207 + Label + true + true + + Left + + + Form.Command.Открыть + Normal + Auto + true + true + UserCmds + Auto + + + ПрочиеНастройкиКонтекстноеМенюСкопировать + 107 + + <key>ru</key> + <value>Скопировать другим...</value> + + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюСкопироватьРасширеннаяПодсказка + 208 + Label + true + true + + Left + + + Form.Item.ПрочиеНастройки.StandardCommand.Copy + Normal + Auto + true + true + UserCmds + Auto + + + ПрочиеНастройкиКонтекстноеМенюУдалить + 104 + + <key>ru</key> + <value>Очистить</value> + + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюУдалитьРасширеннаяПодсказка + 209 + Label + true + true + + Left + + + Form.Item.ПрочиеНастройки.StandardCommand.Delete + Normal + Auto + true + true + UserCmds + Auto + + + ПрочиеНастройкиКонтекстноеМенюПрочее + 116 + + ПрочиеНастройкиКонтекстноеМенюВыделитьВсе + 89 + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюВыделитьВсеРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + Form.Item.ПрочиеНастройки.StandardCommand.SelectAll + Normal + Auto + true + true + UserCmds + Auto + + + ПрочиеНастройкиКонтекстноеМенюКопироватьВБуферОбмена + 88 + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + Form.Item.ПрочиеНастройки.StandardCommand.CopyToClipboard + Normal + Auto + true + true + UserCmds + Auto + + + ПрочиеНастройкиКонтекстноеМенюВывестиСписок + 117 + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюВывестиСписокРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + Form.Item.ПрочиеНастройки.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ПрочиеНастройкиКонтекстноеМенюПрочееРасширеннаяПодсказка + 210 + Label + true + true + + Left + + + + + true + + true + true + true + true + MultiRow + 1 + 1 + AutoUse + true + true + false + false + false + true + Auto + ExpandAllLevels + true + true + true + true + None + None + None + true + + true + true + + true + + + <key>ru</key> + <value>Прочие настройки</value> + + + ru + Прочие настройки страница + + + ПрочиеНастройкиСтраницаРасширеннаяПодсказка + 206 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Виды настроек</value> + + + ru + Виды настроек + + + ВидыНастроекРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + Pages + + + OnCurrentPageChange + ПриСменеСтраницы + + TabsOnTop + Auto + + + + ГруппаЗакрыть + 43 + + Закрыть + 42 + true + true + + true + + false + + ЗакрытьРасширеннаяПодсказка + 238 + Label + true + true + + Left + + + Form.StandardCommand.Close + true + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Закрыть</value> + + + ru + Группа закрыть + + + ГруппаЗакрытьРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Отображать отчет</value> + + + ru + Отображать отчет + + + ОтображатьОтчетРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ОтображатьПредупреждение + 68 + + ГруппаПредупреждениеИКартинка + 73 + + КартинкаИнформации + 69 + + <key>ru</key> + <value>Картинка информации</value> + + true + true + + true + + + КартинкаИнформацииРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + + КартинкаИнформацииКонтекстноеМеню + 70 + true + + 5 + true + 2 + true + + + CommonPicture.Информация32 + + + + + ТекстИнформации + 71 + + <key>ru</key> + <value>Просмотреть настройки возможно только у тех пользователей, +у которых разрешен доступ к информационной базе.</value> + + true + true + + true + + + ТекстИнформацииРасширеннаяПодсказка + 242 + Label + true + true + + Left + + + + ТекстИнформацииКонтекстноеМеню + 72 + true + + Label + 49 + true + 2 + true + + Left + Center + + + true + true + + true + + + ru + Группа предупреждение и картинка + + + ГруппаПредупреждениеИКартинкаРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Отображать предупреждение</value> + + + ru + Отображать предупреждение + + + ОтображатьПредупреждениеРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Отчет или предупреждение</value> + + + ru + Отчет или предупреждение + + + ОтчетИлиПредупреждениеРасширеннаяПодсказка + 118 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаКоманднаяПанель + -1 + Right + + + OnSaveDataInSettingsAtServer + ПриСохраненииДанныхВНастройкахНаСервере + + + NotificationProcessing + ОбработкаОповещения + + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + + + OnCreateAtServer + ПриСозданииНаСервере + + CustomizeForm + 20 + DontBlock + Use + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.НастройкиПользователей + + + true + + + true + +
              true
              +
              + + НастройкиОтчетов + + <key>ru</key> + <value>Настройки отчетов</value> + + 3 + + ValueTree + + + true + + + true + + + Настройка + + <key>ru</key> + <value>Настройка</value> + + 1 + + String + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 2 + + Picture + + + 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> + + 4 + + ValueTree + + + true + + + true + + + Настройка + + <key>ru</key> + <value>Настройка</value> + + 1 + + String + + + + true + + + true + + + + ВидОбъекта + + <key>ru</key> + <value>Вид объекта</value> + + 5 + + String + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 2 + + Picture + + + 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> + + 2 + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + 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> + + 5 + + String + + + + true + + + true + + + + ВсегоНастроек + + <key>ru</key> + <value>Всего настроек</value> + + 6 + + String + + + + true + + + true + + + + ИспользоватьВнешнихПользователей + + <key>ru</key> + <value>Использовать внешних пользователей</value> + + 7 + + Boolean + + + true + + + true + + + + ПрочиеНастройки + + <key>ru</key> + <value>Прочие настройки</value> + + 8 + + ValueTree + + + true + + + true + + + Настройка + + <key>ru</key> + <value>Настройка</value> + + 1 + + String + + + + true + + + true + + + + Картинка + + <key>ru</key> + <value>Картинка</value> + + 2 + + Picture + + + true + + + true + + + + Ключи + + <key>ru</key> + <value>Ключи</value> + + 3 + + ValueList + + + true + + + true + + + + Тип + + <key>ru</key> + <value>Тип</value> + + 5 + + String + + + + true + + + true + + + + + КопируемыеНастройки + + <key>ru</key> + <value>Копируемые настройки</value> + + 11 + + ValueList + + + true + + + true + + + + + + + ТекущийПользователь + + <key>ru</key> + <value>Текущий пользователь</value> + + 12 + + String + + + + true + + + true + + + + ИмяФормыПерсональныхНастроек + + <key>ru</key> + <value>Имя формы персональных настроек</value> + + 13 + + String + + + + true + + + true + + + + Обновить + + <key>ru</key> + <value>Обновить</value> + + 1 + + ru + Обновить список настроек + + + true + + F5 + + StdPicture.Refresh + + + + Обновить + + + TextPicture + Auto + Auto + + + СкопироватьДругим + + <key>ru</key> + <value>Скопировать другим...</value> + + 2 + + ru + Скопировать выделенные настройки другим пользователям + + + true + + F9 + + + СкопироватьДругим + + + TextPicture + Auto + Auto + + + Очистить + + <key>ru</key> + <value>Выделенные настройки</value> + + 3 + + ru + Очистить выделенные настройки + + + true + + + + Удалить + + + TextPicture + Auto + Auto + + + Открыть + + <key>ru</key> + <value>Открыть</value> + + 4 + + ru + Открыть настройку + + + true + + + StdPicture.InputFieldOpen + + + + ОткрытьНастройку + + + TextPicture + Auto + Auto + + + ОчиститьНастройкиВсехПользователей + + <key>ru</key> + <value>Очистить настройки у всех пользователей</value> + + 6 + + ru + Очистить все настройки у всех пользователей + + + true + + + + ОчиститьНастройкиВсехПользователей + + + TextPicture + Auto + Auto + + + СкопироватьВсеНастройки + + <key>ru</key> + <value>Настройки отчетов, внешнего вида и прочие...</value> + + 7 + + ru + Скопировать все настройки выбранного пользователя + + + true + + + + СкопироватьВсеНастройки + + + Text + Auto + Auto + + + СкопироватьНастройкиОтчетов + + <key>ru</key> + <value>Настройки отчетов...</value> + + 11 + + ru + Скопировать настройки отчетов + + + true + + + + СкопироватьНастройкиОтчетов + + + Text + Auto + Auto + + + СкопироватьНастройкиВнешнегоВида + + <key>ru</key> + <value>Настройки внешнего вида...</value> + + 12 + + ru + Скопировать настройки внешнего вида + + + true + + + + СкопироватьНастройкиВнешнегоВида + + + Text + Auto + Auto + + + СкопироватьНастройкиотчетовИВнешнегоВида + + <key>ru</key> + <value>Настройки отчетов и внешнего вида...</value> + + 13 + + ru + Скопировать настройкиотчетов и внешнего вида + + + true + + + + СкопироватьНастройкиотчетовИВнешнегоВида + + + Text + Auto + Auto + + + ОчиститьВсеНастройки + + <key>ru</key> + <value>Все настройки</value> + + 14 + + ru + Очистить все настройки + + + true + + + + ОчиститьВсеНастройки + + + Auto + Auto + + + ОчиститьНастройкиОтчетовИВнешнегоВида + + <key>ru</key> + <value>Настройки отчетов и внешнего вида</value> + + 15 + + ru + Очистить настройки отчетов и внешнего вида + + + true + + + + ОчиститьНастройкиОтчетовИВнешнегоВида + + + Auto + Auto + + + СкопироватьОт + + <key>ru</key> + <value>Скопировать от...</value> + + 16 + + ru + Скопировать настройки от другого пользователя + + + true + + + CommonPicture.ЗаполнитьФорму + + + + СкопироватьОт + + + TextPicture + Auto + Auto + + + ОчиститьНастройкиУПользователей + + <key>ru</key> + <value>Выделенные настройки у пользователей...</value> + + 5 + + ru + Очистить выделенные настройки у нескольких пользователей + + + true + + + + ОчиститьНастройкиВыбраннымПользователям + + + Auto + Auto + + + Пользователь + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + + + + + + +
              diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html new file mode 100644 index 000000000..94b14e4cc --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Help/ru.html @@ -0,0 +1,13 @@ + +

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

              +
                1. Список пользовательских настроек отчетов сгруппирован по названиям вариантов отчетов. +
                2. В списке Внешний вид выводятся настройки внешнего вида форм, рабочего стола и командного интерфейса программы. +
                3. В списке Прочие настройки выводятся персональные настройки пользователя, настройки печати табличного документа, избранное и прочие настройки.

               

              +

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

              +

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

              +

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

              +

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

              +

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

              +

              См. также

              + \ 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..98deb00cc --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/НастройкиПользователей/Module.bsl @@ -0,0 +1,933 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ПользовательСсылка = Пользователи.ТекущийПользователь(); + ТекущийПользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); + + Если Параметры.Пользователь <> Неопределено Тогда + + ИдентификаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(Параметры.Пользователь, "ИдентификаторПользователяИБ"); + УстановитьПривилегированныйРежим(Истина); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); + УстановитьПривилегированныйРежим(Ложь); + Если ПользовательИБ = Неопределено Тогда + Элементы.ОтчетИлиПредупреждение.ТекущаяСтраница = Элементы.ОтображатьПредупреждение; + Возврат; + КонецЕсли; + + ПользовательСсылка = Параметры.Пользователь; + Элементы.ГруппаЗакрыть.Видимость = Ложь; + Элементы.ПользовательСсылка.Видимость = Ложь; + Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Настройки пользователя: %1'"), ПользовательСсылка.Наименование); + Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); + Иначе + ПользовательСсылка = Пользователи.ТекущийПользователь(); + Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); + КонецЕсли; + + ИспользоватьВнешнихПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей"); + ОбщегоНазначенияПереопределяемый.ИмяФормыПерсональныхНастроек(ИмяФормыПерсональныхНастроек); + + ВыбраннаяСтраницаНастроек = Элементы.ВидыНастроек.ТекущаяСтраница.Имя; + ЗаполнитьСпискиНастроек(); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + + ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки); + + ПоискСписокВыбора = Настройки.Получить("ПоискСписокВыбора"); + Если ТипЗнч(ПоискСписокВыбора) = Тип("Массив") Тогда + Элементы.Поиск.СписокВыбора.ЗагрузитьЗначения(ПоискСписокВыбора); + КонецЕсли; + Поиск = ""; + +КонецПроцедуры + +&НаСервере +Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки) + + Настройки.Вставить("ПоискСписокВыбора", Элементы.Поиск.СписокВыбора.ВыгрузитьЗначения()); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ВРег(ИмяСобытия) = ВРег("ВыборПользователя") Тогда + + ПользователиПриемник = Параметр.ПользователиПриемник; + + Если Параметр.КопироватьВсе Тогда + + МассивНастроек = Новый Массив; + ИменаНастроек = ""; + Для Каждого Настройка Из КопируемыеНастройки Цикл + + ИменаНастроек = ИменаНастроек + НРег(Настройка.Представление) + ", "; + МассивНастроек.Добавить(Настройка.Значение); + + КонецЦикла; + + ИменаНастроек = Лев(ИменаНастроек, СтрДлина(ИменаНастроек)-2); + + Если МассивНастроек.Количество() = 6 Тогда + ТекстПояснения = НСтр("ru = 'Скопированы все настройки'"); + Иначе + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Скопированы настройки: %1'"), ИменаНастроек); + КонецЕсли; + + Состояние(НСтр("ru = 'Выполняется копирование настроек'")); + + СкопироватьВсеНастройкиНаСервере(Пользователь, ПользователиПриемник, МассивНастроек); + + ПоказатьОповещениеПользователя(НСтр("ru = 'Копирование настроек'"), , ТекстПояснения); + + Возврат; + КонецЕсли; + + Если Параметр.ОчисткаНастроек Тогда + + ДеревоНастроек = ТаблицаФормыВыбраннойСтраницыНастроек(); + КоличествоНастроек = КоличествоСкопированныхИлиУдаленныхНастроек(ДеревоНастроек); + + УдалитьНаСервере(ПользователиПриемник, Истина); + + ОповещениеОбУдалении(КоличествоНастроек); + Возврат; + + КонецЕсли; + + ДеревоНастроек = ТаблицаФормыВыбраннойСтраницыНастроек(); + КоличествоНастроек = КоличествоСкопированныхИлиУдаленныхНастроек(ДеревоНастроек); + + Состояние(НСтр("ru = 'Выполняется копирование настроек'")); + + СкопироватьНаСервере(ПользователиПриемник); + ТекстПояснения = НСтр("ru = 'Скопировано настроек: %1'"); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, КоличествоНастроек); + ПоказатьОповещениеПользователя(НСтр("ru = 'Копирование настроек'"), , ТекстПояснения); + + ИначеЕсли ВРег(ИмяСобытия) = ВРег("СкопированыНастройки") Тогда + ЗаполнитьСпискиНастроек(); + РазвернутьДеревоЗначений(); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательСсылкаПриИзменении(Элемент) + + Если ПустаяСтрока(Элемент.ВыделенныйТекст) Тогда + Возврат; + КонецЕсли; + ПолучитьИмяПользователяИОбновить(); + + РазвернутьДеревоЗначений(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ПриСменеСтраницы(Элемент, ТекущаяСтраница) + + ВыбраннаяСтраницаНастроек = ТекущаяСтраница.Имя; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоискПриИзменении(Элемент) + + Если ЗначениеЗаполнено(Поиск) Тогда + СписокВыбора = Элементы.Поиск.СписокВыбора; + ЭлементСписка = СписокВыбора.НайтиПоЗначению(Поиск); + Если ЭлементСписка = Неопределено Тогда + СписокВыбора.Вставить(0, Поиск); + Если СписокВыбора.Количество() > 10 Тогда + СписокВыбора.Удалить(10); + КонецЕсли; + Иначе + Индекс = СписокВыбора.Индекс(ЭлементСписка); + Если Индекс <> 0 Тогда + СписокВыбора.Сдвинуть(Индекс, -Индекс); + КонецЕсли; + КонецЕсли; + ТекущийЭлемент = Элементы.Поиск; + КонецЕсли; + + ЗаполнитьСпискиНастроек(); + РазвернутьДеревоЗначений(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПользовательСсылкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ПараметрыОтбора = Новый Структура("ДоступКИнформационнойБазеРазрешен, РежимВыбора", Истина, Истина); + + Если ИспользоватьВнешнихПользователей Тогда + ВыборТипаПользователей = Новый СписокЗначений; + ВыборТипаПользователей.Добавить("ВнешниеПользователи", "Внешние пользователи"); + ВыборТипаПользователей.Добавить("Пользователи", "Пользователи"); + + ВыбранныйВариант = ВыборТипаПользователей.ВыбратьЭлемент(); + Если ВыбранныйВариант = Неопределено Тогда + Возврат; + КонецЕсли; + Если ВыбранныйВариант.Значение = "Пользователи" Тогда + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыОтбора, Элементы.ПользовательСсылка); + ИначеЕсли ВыбранныйВариант.Значение = "ВнешниеПользователи" Тогда + ОткрытьФорму("Справочник.ВнешниеПользователи.Форма.ФормаСписка", ПараметрыОтбора, Элементы.ПользовательСсылка); + КонецЕсли; + Иначе + ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыОтбора, Элементы.ПользовательСсылка); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиОтчетовИВнешнийВидПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + + Если Не Копирование Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + СкопироватьНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиПередУдалением(Элемент, Отказ) + + ТекстВопроса = НСтр("ru = 'Удалить выбранные настройки?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + + Если Ответ = КодВозвратаДиалога.Нет Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + УдалитьНаСервере(); + + ВыделенныеСтроки = Элемент.ВыделенныеСтроки; + КоличествоНастроек = КоличествоСкопированныхИлиУдаленныхНастроек(Элемент); + + УдалитьНастройкиИЗДереваЗначений(ВыделенныеСтроки); + + ОповещениеОбУдалении(КоличествоНастроек); + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкиДеревоВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + ОткрытьОтчетИлиФорму(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Обновить(Команда) + + ЗаполнитьСпискиНастроек(); + РазвернутьДеревоЗначений(); + +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьДругим(Команда) + + СкопироватьНастройки(); + +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьВсеНастройки(Команда) + + ТипПользователя = ТипЗнч(ПользовательСсылка); + КопируемыеНастройки.Очистить(); + КопируемыеНастройки.Добавить("НастройкиОтчетов", НСтр("ru='Настройки отчетов'")); + КопируемыеНастройки.Добавить("НастройкиВнешнегоВида", НСтр("ru='Настройки внешнего вида'")); + КопируемыеНастройки.Добавить("ДанныеФорм", НСтр("ru='Данные форм'")); + КопируемыеНастройки.Добавить("ПерсональныеНастройки", НСтр("ru='Персональные настройки'")); + КопируемыеНастройки.Добавить("Избранное", НСтр("ru='Избранное'")); + КопируемыеНастройки.Добавить("НастройкиПечати", НСтр("ru='Настройки печати'")); + + ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, КопироватьВсе", + ПользовательСсылка, ТипПользователя, Истина); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); + + +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьНастройкиОтчетов(Команда) + + ТипПользователя = ТипЗнч(ПользовательСсылка); + КопируемыеНастройки.Очистить(); + КопируемыеНастройки.Добавить("НастройкиОтчетов", НСтр("ru='Настройки отчетов'")); + + ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, КопироватьВсе", + ПользовательСсылка, ТипПользователя, Истина); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьНастройкиВнешнегоВида(Команда) + + ТипПользователя = ТипЗнч(ПользовательСсылка); + КопируемыеНастройки.Очистить(); + КопируемыеНастройки.Добавить("НастройкиВнешнегоВида", НСтр("ru='Настройки внешнего вида'")); + + ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, КопироватьВсе", + ПользовательСсылка, ТипПользователя, Истина); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьНастройкиотчетовИВнешнегоВида(Команда) + + ТипПользователя = ТипЗнч(ПользовательСсылка); + КопируемыеНастройки.Очистить(); + КопируемыеНастройки.Добавить("НастройкиОтчетов", НСтр("ru='Настройки отчетов'")); + КопируемыеНастройки.Добавить("НастройкиВнешнегоВида", НСтр("ru='Настройки внешнего вида'")); + + ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, КопироватьВсе", + ПользовательСсылка, ТипПользователя, Истина); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура Удалить(Команда) + + ДеревоНастроек = ТаблицаФормыВыбраннойСтраницыНастроек(); + ВыделенныеСтроки = ДеревоНастроек.ВыделенныеСтроки; + Если ВыделенныеСтроки.Количество() = 0 Тогда + + Предупреждение(НСтр("ru = 'Необходимо выбрать настройки, которые требуется удалить.'")); + Возврат; + + КонецЕсли; + + ТекстВопроса = НСтр("ru = 'Удалить выделенные настройки?'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + + КоличествоНастроек = КоличествоСкопированныхИлиУдаленныхНастроек(ДеревоНастроек); + + УдалитьНаСервере(); + + УдалитьНастройкиИЗДереваЗначений(ВыделенныеСтроки); + + ОповещениеОбУдалении(КоличествоНастроек); + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьНастройкиВыбраннымПользователям(Команда) + + ДеревоНастроек = ТаблицаФормыВыбраннойСтраницыНастроек(); + ВыделенныеСтроки = ДеревоНастроек.ВыделенныеСтроки; + Если ВыделенныеСтроки.Количество() = 0 Тогда + + Предупреждение(НСтр("ru = 'Необходимо выбрать настройки, которые требуется удалить.'")); + Возврат; + + КонецЕсли; + + ТекстВопроса = НСтр("ru = 'Удалить выделенные настройки? + |Откроется окно выбора пользователей, которым необходимо очистить настройки.'"); + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); + Если Ответ = КодВозвратаДиалога.Нет Тогда + Возврат; + КонецЕсли; + + ТипПользователя = ТипЗнч(ПользовательСсылка); + ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, КопироватьВсе, ОчисткаНастроек", + ПользовательСсылка, ТипПользователя, Ложь, Истина); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьВсеНастройки(Команда) + + ТекстВопроса = НСтр("ru = 'Очистить все настройки у пользователя ""%1""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса, ПользовательСсылка); + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить(НСтр("ru='Очистить'")); + КнопкиВопроса.Добавить(НСтр("ru='Отмена'")); + Ответ = Вопрос(ТекстВопроса, КнопкиВопроса,, КнопкиВопроса[1].Значение); + Если Ответ = КнопкиВопроса[1].Значение Тогда + Возврат; + КонецЕсли; + + Если Ответ = КнопкиВопроса[0].Значение Тогда + ТекстПояснения = НСтр("ru = 'Очищены все настройки пользователя ""%1""'"); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПользовательСсылка); + ОчиститьВсе = Истина; + КонецЕсли; + + ПоказатьОповещениеПользователя(НСтр("ru = 'Очистка настроек'"), , ТекстПояснения); + + ОчищаемыеНастройки = Новый Массив; + ОчищаемыеНастройки.Добавить("НастройкиОтчетов"); + ОчищаемыеНастройки.Добавить("НастройкиВнешнегоВида"); + ОчищаемыеНастройки.Добавить("ДанныеФорм"); + ОчищаемыеНастройки.Добавить("ПерсональныеНастройки"); + ОчищаемыеНастройки.Добавить("Избранное"); + ОчищаемыеНастройки.Добавить("НастройкиПечати"); + + ОчиститьВсеНастройкиНаСервере(ОчищаемыеНастройки); + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьНастройкиОтчетовИВнешнегоВида(Команда) + + ТекстВопроса = НСтр("ru = 'Очистить все настройки отчетов и внешнего вида у пользователя ""%1""?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса, ПользовательСсылка); + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить(НСтр("ru='Очистить'")); + КнопкиВопроса.Добавить(НСтр("ru='Отмена'")); + Ответ = Вопрос(ТекстВопроса, КнопкиВопроса,, КнопкиВопроса[1].Значение); + Если Ответ = КнопкиВопроса[1].Значение Тогда + Возврат; + КонецЕсли; + + Если Ответ = КнопкиВопроса[0].Значение Тогда + ТекстПояснения = НСтр("ru = 'Очищены все настройки отчетов и внешнего вида у пользователя ""%1""'"); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, ПользовательСсылка); + ОчиститьВсе = Истина; + КонецЕсли; + + ПоказатьОповещениеПользователя(НСтр("ru = 'Очистка настроек'"), , ТекстПояснения); + + ОчищаемыеНастройки = Новый Массив; + ОчищаемыеНастройки.Добавить("НастройкиОтчетов"); + ОчищаемыеНастройки.Добавить("НастройкиВнешнегоВида"); + ОчищаемыеНастройки.Добавить("ДанныеФорм"); + + ОчиститьВсеНастройкиНаСервере(ОчищаемыеНастройки); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьНастройку(Команда) + + ОткрытьОтчетИлиФорму(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьНастройкиВсехПользователей(Команда) + + ТекстВопроса = НСтр("ru = 'Сейчас будут очищены все настройки всех пользователей. + |Продолжить?'"); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ТекстВопроса, ПользовательСсылка); + КнопкиВопроса = Новый СписокЗначений; + КнопкиВопроса.Добавить(НСтр("ru='Очистить все'")); + КнопкиВопроса.Добавить(НСтр("ru='Отмена'")); + Ответ = Вопрос(ТекстВопроса, КнопкиВопроса,, КнопкиВопроса[1].Значение); + + Если Ответ = КнопкиВопроса[1].Значение Тогда + Возврат; + КонецЕсли; + + ПоказатьОповещениеПользователя(НСтр("ru = 'Очистка настроек'"), , + НСтр("ru='Очищены все настройки всех пользователя'")); + ОчиститьНастройкиВсехПользователейНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьОт(Команда) + + ПараметрыФормы = Новый Структура("Пользователь", ПользовательСсылка); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.КопированиеНастроекПользователей", ПараметрыФормы); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для вывода списков настроек + +&НаСервере +Процедура ЗаполнитьСпискиНастроек() + + Обработки.НастройкиПользователей.ЗаполнитьСпискиНастроек(ЭтаФорма); + РассчитатьКоличествоНастроек(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для расчета количества настроек + +&НаСервере +Процедура РассчитатьКоличествоНастроек() + + НастройкиОтчетовДерево = РеквизитФормыВЗначение("НастройкиОтчетов"); + ВнешнийВидДерево = РеквизитФормыВЗначение("ВнешнийВид"); + ПрочиеНастройкиДерево = РеквизитФормыВЗначение("ПрочиеНастройки"); + СписокНастроек = НастройкиОтчетовДерево.Строки; + + КоличествоНастроек = КоличествоНастроекВДереве(СписокНастроек); + + Если Не КоличествоНастроек = 0 Тогда + Элементы.НастройкиОтчетовСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Настройки отчетов (%1)'"), КоличествоНастроек); + Иначе + Элементы.НастройкиОтчетовСтраница.Заголовок = НСтр("ru='Настройки отчетов'"); + КонецЕсли; + + КоличествоНастроекОтчетов = КоличествоНастроек; + СписокНастроек = ВнешнийВидДерево.Строки; + КоличествоНастроек = КоличествоНастроекВДереве(СписокНастроек); + + Если Не КоличествоНастроек = 0 Тогда + Элементы.ВнешнийВидСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Внешний вид (%1)'"), КоличествоНастроек); + Иначе + Элементы.ВнешнийВидСтраница.Заголовок = НСтр("ru='Внешний вид'"); + КонецЕсли; + + КоличествоНастроекВнешнегоВида = КоличествоНастроек; + СписокНастроек = ПрочиеНастройкиДерево.Строки; + КоличествоНастроек = КоличествоНастроекВДереве(СписокНастроек); + + Если Не КоличествоНастроек = 0 Тогда + Элементы.ПрочиеНастройкиСтраница.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Прочие настройки (%1)'"), КоличествоНастроек); + Иначе + Элементы.ПрочиеНастройкиСтраница.Заголовок = НСтр("ru='Прочие настройки'"); + КонецЕсли; + + КоличествоПрочихНастроек = КоличествоНастроек; + ВсегоНастроек = КоличествоПрочихНастроек + КоличествоНастроекОтчетов; + +КонецПроцедуры + +&НаСервере +Функция КоличествоНастроекВДереве(СписокНастроек) + + КоличествоНастроек = 0; + Для Каждого Настройка Из СписокНастроек Цикл + КоличествоПодчиненныхНастроек = Настройка.Строки.Количество(); + Если КоличествоПодчиненныхНастроек = 0 Тогда + КоличествоНастроек = КоличествоНастроек + 1; + Иначе + КоличествоНастроек = КоличествоНастроек + КоличествоПодчиненныхНастроек; + КонецЕсли; + КонецЦикла; + + Возврат КоличествоНастроек; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, отвечающие за копирование, удаление и очиству настроек + +&НаСервере +Процедура СкопироватьНаСервере(ПользователиПриемник) + + Результат = МассивВыделенныхНастроек(); + + Обработка = РеквизитФормыВЗначение("Объект"); + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + Обработка.СкопироватьНастройкиОтчетовИПерсональныеНастройки(ХранилищеПользовательскихНастроекОтчетов, + Пользователь, ПользователиПриемник, Результат.МассивНастроек); + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + Обработка.СкопироватьНастройкиВнешнегоВида(Пользователь, ПользователиПриемник, Результат.МассивНастроек); + Иначе + + Если Результат.МассивПерсональныхНастроек.Количество() <> 0 Тогда + Обработка.СкопироватьНастройкиОтчетовИПерсональныеНастройки(ХранилищеОбщихНастроек, + Пользователь, ПользователиПриемник, Результат.МассивПерсональныхНастроек); + КонецЕсли; + + Обработка.СкопироватьНастройкиВнешнегоВида(Пользователь, ПользователиПриемник, Результат.МассивНастроек); + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура СкопироватьВсеНастройкиНаСервере(Пользователь, ПользователиПриемник, МассивНастроек) + + Обработки.НастройкиПользователей.СкопироватьНастройкиПользователей( + Пользователь, ПользователиПриемник, МассивНастроек); + +КонецПроцедуры + +&НаСервере +Процедура УдалитьНаСервере(Пользователи = Неопределено, ВыбраннымПользователям = Ложь) + + Результат = МассивВыделенныхНастроек(); + НазваниеХранилища = ХранилищеНастроекДляВыбраннойСтраницы(); + Обработка = РеквизитФормыВЗначение("Объект"); + + Если ВыбраннымПользователям Тогда + + Обработка.УдалитьНастройкиВыбраннымПользователям(Пользователи, Результат.МассивНастроек, НазваниеХранилища); + Если Результат.МассивПерсональныхНастроек.Количество() <> 0 Тогда + Обработка.УдалитьНастройкиВыбраннымПользователям(Пользователи, + Результат.МассивПерсональныхНастроек, "ХранилищеОбщихНастроек"); + КонецЕсли; + Возврат; + КонецЕсли; + + Обработка.УдалитьНастройки(Пользователь, Результат.МассивНастроек, НазваниеХранилища); + Если Результат.МассивПерсональныхНастроек.Количество() <> 0 Тогда + Обработка.УдалитьНастройки(Пользователь, Результат.МассивПерсональныхНастроек, "ХранилищеОбщихНастроек"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьВсеНастройкиНаСервере(ОчищаемыеНастройки) + + МассивПользователей = Новый Массив; + МассивПользователей.Добавить(ПользовательСсылка); + Обработки.НастройкиПользователей.УдалитьНастройкиПользователей(ОчищаемыеНастройки, МассивПользователей); + + ЗаполнитьСпискиНастроек(); + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьНастройкиВсехПользователейНаСервере() + + ОчищаемыеНастройки = Новый Массив; + ОчищаемыеНастройки.Добавить("НастройкиОтчетов"); + ОчищаемыеНастройки.Добавить("НастройкиВнешнегоВида"); + ОчищаемыеНастройки.Добавить("ПерсональныеНастройки"); + ОчищаемыеНастройки.Добавить("ДанныеФорм"); + ОчищаемыеНастройки.Добавить("Избранное"); + ОчищаемыеНастройки.Добавить("НастройкиПечати"); + + Обработка = РеквизитФормыВЗначение("Объект"); + МассивПользователей = Новый Массив; + ТаблицаПользователей = Новый ТаблицаЗначений; + ТаблицаПользователей.Колонки.Добавить("Пользователь"); + ТаблицаПользователей = Обработка.ПользователиДляКопирования("", ТаблицаПользователей, ИспользоватьВнешнихПользователей); + + Для Каждого СтрокаТаблицы Из ТаблицаПользователей Цикл + МассивПользователей.Добавить(СтрокаТаблицы.Пользователь); + КонецЦикла; + + Обработки.НастройкиПользователей.УдалитьНастройкиПользователей(ОчищаемыеНастройки, МассивПользователей); + +КонецПроцедуры + +&НаКлиенте +Процедура УдалитьНастройкиИЗДереваЗначений(ВыделенныеСтроки) + + Для Каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл + + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + УдалитьСтрокуНастроек(НастройкиОтчетов, ВыделеннаяСтрока); + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + УдалитьСтрокуНастроек(ВнешнийВид, ВыделеннаяСтрока); + Иначе + УдалитьСтрокуНастроек(ПрочиеНастройки, ВыделеннаяСтрока); + КонецЕсли; + + КонецЦикла; + + РассчитатьКоличествоНастроек(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +&НаКлиенте +Процедура ОткрытьОтчетИлиФорму() + + ЭлементДереваЗначений = ТекущийЭлемент; + + Если Пользователь <> ТекущийПользователь Тогда + ТекстПредупреждения = НСтр("ru = 'Для просмотра настроек другого пользователя необходимо запустить программу от его имени + |и открыть нужный отчет или форму.'"); + Предупреждение(ТекстПредупреждения); + Возврат; + КонецЕсли; + + Если ЭлементДереваЗначений.Имя = "НастройкиОтчетовДерево" Тогда + + КлючОбъекта = ЭлементДереваЗначений.ТекущиеДанные.Ключи[0].Значение; + КлючОбъектаМассивСтрок = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(КлючОбъекта, "/"); + КлючВарианта = КлючОбъектаМассивСтрок[1]; + ПараметрыОтчета = Новый Структура("КлючВарианта, КлючПользовательскихНастроек", КлючВарианта, ""); + + Если ЭлементДереваЗначений.ТекущиеДанные.Тип = "НастройкаОтчета" Тогда + КлючПользовательскихНастроек = ЭлементДереваЗначений.ТекущиеДанные.Ключи[0].Представление; + ПараметрыОтчета.Вставить("КлючПользовательскихНастроек", КлючПользовательскихНастроек); + КонецЕсли; + + ОткрытьФорму(КлючОбъектаМассивСтрок[0] + ".Форма", ПараметрыОтчета); + Возврат; + + ИначеЕсли ЭлементДереваЗначений.Имя = "ВнешнийВид" Тогда + + Для Каждого КлючОбъекта Из ЭлементДереваЗначений.ТекущиеДанные.Ключи Цикл + + Если КлючОбъекта.Пометка = Истина Тогда + + ОткрытьФорму(КлючОбъекта.Значение); + Возврат; + Иначе + РодительЭлемента = ЭлементДереваЗначений.ТекущиеДанные.ПолучитьРодителя(); + + Если ЭлементДереваЗначений.ТекущиеДанные.Настройка = НСтр("ru='Рабочий стол'") Тогда + Предупреждение(НСтр("ru = 'Для просмотра настроек рабочего стола перейдите к разделу ""Рабочий стол"" + |в командном интерфейсе программы.'")); + Возврат; + КонецЕсли; + + Если ЭлементДереваЗначений.ТекущиеДанные.Настройка = НСтр("ru='Командный интерфейс'") Тогда + Предупреждение(НСтр("ru = 'Для просмотра настроек командного интерфейса выберите нужный раздел + |командного интерфейса программы.'")); + Возврат; + КонецЕсли; + + Если РодительЭлемента <> Неопределено Тогда + ТекстПредупреждения = НСтр("ru = 'Для просмотра данной настройки необходимо открыть ""%1"" + |и затем перейти к форме ""%2"".'"); + ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПредупреждения, + РодительЭлемента.Настройка, ЭлементДереваЗначений.ТекущиеДанные.Настройка); + Предупреждение(ТекстПредупреждения); + Возврат; + КонецЕсли; + + КонецЕсли; + + КонецЦикла; + + Предупреждение(НСтр("ru = 'Данную настройку невозможно просмотреть.'")); + Возврат; + + ИначеЕсли ЭлементДереваЗначений.Имя = "ПрочиеНастройки" Тогда + + Если ЭлементДереваЗначений.ТекущиеДанные.Тип = "ПерсональныеНастройки" + И ИмяФормыПерсональныхНастроек <> "" Тогда + ОткрытьФорму(ИмяФормыПерсональныхНастроек); + Возврат; + КонецЕсли; + + Предупреждение(НСтр("ru = 'Данную настройку невозможно просмотреть.'")); + Возврат; + + КонецЕсли; + + Предупреждение(НСтр("ru = 'Выберите настройку для просмотра.'")); + +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьДеревоЗначений() + + Строки = НастройкиОтчетов.ПолучитьЭлементы(); + Для Каждого Строка Из Строки Цикл + Элементы.НастройкиОтчетовДерево.Развернуть(Строка.ПолучитьИдентификатор(), Истина); + КонецЦикла; + + Строки = ВнешнийВид.ПолучитьЭлементы(); + Для Каждого Строка Из Строки Цикл + Элементы.ВнешнийВид.Развернуть(Строка.ПолучитьИдентификатор(), Истина); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Функция ТаблицаФормыВыбраннойСтраницыНастроек() + + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + Возврат Элементы.НастройкиОтчетовДерево; + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + Возврат Элементы.ВнешнийВид; + Иначе + Возврат Элементы.ПрочиеНастройки; + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция КоличествоСкопированныхИлиУдаленныхНастроек(ДеревоНастроек) + + ВыделенныеСтроки = ДеревоНастроек.ВыделенныеСтроки; + // Переносим массив выделенных строк в список значений, чтобы отсортировать выбранные строки + СписокВыделенныхСтрок = Новый СписокЗначений; + Для Каждого Элемент Из ВыделенныеСтроки Цикл + СписокВыделенныхСтрок.Добавить(Элемент); + КонецЦикла; + + СписокВыделенныхСтрок.СортироватьПоЗначению(); + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + ТекущееДеревоЗначений = НастройкиОтчетов; + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + ТекущееДеревоЗначений = ВнешнийВид; + Иначе + ТекущееДеревоЗначений = ПрочиеНастройки; + КонецЕсли; + КоличествоНастроек = 0; + Для Каждого ВыделеннаяСтрока Из СписокВыделенныхСтрок Цикл + ЭлементДерева = ТекущееДеревоЗначений.НайтиПоИдентификатору(ВыделеннаяСтрока.Значение); + КоличествоПодчиненныхЭлементов = ЭлементДерева.ПолучитьЭлементы().Количество(); + РодительЭлемента = ЭлементДерева.ПолучитьРодителя(); + Если Не КоличествоПодчиненныхЭлементов = 0 Тогда + КоличествоНастроек = КоличествоНастроек + КоличествоПодчиненныхЭлементов; + ЭлементВерхнегоУровня = ЭлементДерева; + ИначеЕсли КоличествоПодчиненныхЭлементов = 0 + И РодительЭлемента = Неопределено Тогда + КоличествоНастроек = КоличествоНастроек + 1; + Иначе + + Если Не РодительЭлемента = ЭлементВерхнегоУровня Тогда + КоличествоНастроек = КоличествоНастроек + 1; + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + Возврат КоличествоНастроек; +КонецФункции + +&НаКлиенте +Процедура УдалитьСтрокуНастроек(ДеревоНастроек, ВыделеннаяСтрока) + + ЭлементНастроек = ДеревоНастроек.НайтиПоИдентификатору(ВыделеннаяСтрока); + Если ЭлементНастроек = Неопределено Тогда + Возврат; + КонецЕсли; + + РодительЭлементаНастроек = ЭлементНастроек.ПолучитьРодителя(); + Если Не РодительЭлементаНастроек = Неопределено Тогда + КоличествоПодчиненныхСтрок = РодительЭлементаНастроек.ПолучитьЭлементы().Количество(); + Если КоличествоПодчиненныхСтрок = 1 Тогда + ДеревоНастроек.ПолучитьЭлементы().Удалить(РодительЭлементаНастроек); + Иначе + РодительЭлементаНастроек.ПолучитьЭлементы().Удалить(ЭлементНастроек); + КонецЕсли; + Иначе + ДеревоНастроек.ПолучитьЭлементы().Удалить(ЭлементНастроек); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОповещениеОбУдалении(КоличествоНастроек) + + ТекстПояснения = НСтр("ru = 'Удалено настроек: %1'"); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, КоличествоНастроек); + ПоказатьОповещениеПользователя(НСтр("ru = 'Удаление настроек'"), , ТекстПояснения); + +КонецПроцедуры + +&НаКлиенте +Процедура СкопироватьНастройки() + + ДеревоНастроек = ТаблицаФормыВыбраннойСтраницыНастроек(); + Если ДеревоНастроек.ВыделенныеСтроки.Количество() = 0 Тогда + Предупреждение(НСтр("ru = 'Необходимо выбрать настройки, которые требуется скопировать.'")); + Возврат; + КонецЕсли; + + ТипПользователя = ТипЗнч(ПользовательСсылка); + ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, КопироватьВсе", + ПользовательСсылка, ТипПользователя, Ложь); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); + +КонецПроцедуры + +&НаСервере +Процедура ПолучитьИмяПользователяИОбновить() + + Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательСсылка); + ЗаполнитьСпискиНастроек(); + +КонецПроцедуры + +&НаСервере +Функция ДеревоНастроекДляВыбраннойСтраницы() + + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + Возврат НастройкиОтчетов; + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + Возврат ВнешнийВид; + Иначе + Возврат ПрочиеНастройки; + КонецЕсли; + +КонецФункции + +&НаСервере +Функция ХранилищеНастроекДляВыбраннойСтраницы() + + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + Возврат "ХранилищеПользовательскихНастроекОтчетов"; + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" + Или ВыбраннаяСтраницаНастроек = "ПрочиеНастройкиСтраница" Тогда + Возврат "ХранилищеСистемныхНастроек"; + КонецЕсли; + +КонецФункции + +&НаСервере +Функция ВыделенныеЭлементыНастроек() + Если ВыбраннаяСтраницаНастроек = "НастройкиОтчетовСтраница" Тогда + Возврат Элементы.НастройкиОтчетовДерево.ВыделенныеСтроки; + ИначеЕсли ВыбраннаяСтраницаНастроек = "ВнешнийВидСтраница" Тогда + Возврат Элементы.ВнешнийВид.ВыделенныеСтроки; + Иначе + Возврат Элементы.ПрочиеНастройки.ВыделенныеСтроки; + КонецЕсли; +КонецФункции + +&НаСервере +Функция МассивВыделенныхНастроек() + + ДеревоНастроек = ДеревоНастроекДляВыбраннойСтраницы(); + МассивНастроек = Новый Массив; + МассивПерсональныхНастроек = Новый Массив; + + ВыделенныеЭлементы = ВыделенныеЭлементыНастроек(); + + Для Каждого ВыделенныйЭлемент Из ВыделенныеЭлементы Цикл + ВыделеннаяНастройка = ДеревоНастроек.НайтиПоИдентификатору(ВыделенныйЭлемент); + + Если ВыделеннаяНастройка.Тип = "ПерсональныеНастройки" Тогда + МассивПерсональныхНастроек.Добавить(ВыделеннаяНастройка.Ключи); + Продолжить; + КонецЕсли; + + МассивНастроек.Добавить(ВыделеннаяНастройка.Ключи); + КонецЦикла; + + Возврат Новый Структура("МассивПерсональныхНастроек, МассивНастроек", + МассивПерсональныхНастроек, МассивНастроек); + +КонецФункции + diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form new file mode 100644 index 000000000..fcc108e52 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Form.form @@ -0,0 +1,683 @@ + + + + <key>ru</key> + <value>Очистка настроек пользователей</value> + + + ГруппаОчиститьУПользователей + 28 + + Источник + 3 + + <key>ru</key> + <value>Кому скопировать</value> + + true + true + + true + + + Источник + + None + + OnChange + ИсточникПриИзменении + + + ИсточникРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + + ИсточникКонтекстноеМеню + 4 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + У выбранных пользователей: + + + ВыбраннымПользователям + + + + + ru + У всех пользователей + + + ВсемПользователям + + + Vertical + + + + ГруппаВыбратьПользователей + 29 + + ВыбратьПользователей + 58 + + <key>ru</key> + <value>Выбрать</value> + + true + true + + true + + + ru + Выберите пользователей, которым необходимо скопировать настройки + + + ВыбратьПользователейРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + + ВыбратьПользователейКонтекстноеМеню + 59 + true + + Label + 27 + true + true + + + Click + ВыбратьПользователейНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа выбрать пользователей</value> + + + ГруппаВыбратьПользователейРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Очистить настройки:</value> + + + ГруппаОчиститьУПользователейРасширеннаяПодсказка + 69 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + auto + Auto + Auto + + + + ГруппаОчищаемыеНастройки + 13 + + ОчищаемыеНастройки + 62 + true + true + + true + + + ОчищаемыеНастройки + + None + + OnChange + ОчищаемыеНастройкиПриИзменении + + + ОчищаемыеНастройкиРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ОчищаемыеНастройкиКонтекстноеМеню + 63 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Все настройки + + + ОчиститьВсе + + + + + ru + Отдельные настройки: + + + ОтдельныеНастройки + + + Vertical + + + + ГруппаВыбратьНастройки + 24 + + Декорация1 + 64 + true + true + + true + + + Декорация1РасширеннаяПодсказка + 78 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 65 + true + + Label + true + true + + Left + + + + ВыбратьНастройки + 60 + + <key>ru</key> + <value>Выбрать</value> + + true + false + + true + + + ru + Выберите настройки, которые необходимо скопировать + + + ВыбратьНастройкиРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + + ВыбратьНастройкиКонтекстноеМеню + 61 + true + + Label + 28 + true + 1 + true + false + false + + + Click + ВыбратьНастройки + + true + Left + Top + 1 + + + true + true + + true + + + <key>ru</key> + <value>Или</value> + + + ru + Группа выбрать настройки + + true + + ГруппаВыбратьНастройкиРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + true + false + + true + + + <key>ru</key> + <value>Что очистить:</value> + + + ГруппаОчищаемыеНастройкиРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + auto + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + ФормаОчиститьИЗакрыть + 57 + true + true + + true + + + ФормаОчиститьИЗакрытьРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + Form.Command.ОчиститьИЗакрыть + Auto + true + true + true + UserCmds + Auto + + + Очистить + 10 + true + true + + true + + + ОчиститьРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Form.Command.Очистить + Normal + Auto + true + true + UserCmds + Auto + + + ФормаЗакрыть + 56 + true + true + + true + + + ФормаЗакрытьРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + Right + true + + + NotificationProcessing + ОбработкаОповещения + + + OnCreateAtServer + ПриСозданииНаСервере + + Abort + Cancel + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 49 + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.НастройкиПользователей + + + true + + + true + +
              true
              +
              + + Источник + + <key>ru</key> + <value>Источник</value> + + 3 + + String + + + + true + + + true + + + + ИспользоватьВнешнихПользователей + + <key>ru</key> + <value>Использовать внешних пользователей</value> + + 5 + + Boolean + + + true + + + true + + + + ПользователиИсточник + + <key>ru</key> + <value>Пользователи источник</value> + + 6 + + + true + + + true + + + + ВыбранныеНастройки + 7 + + + true + + + true + + + + КоличествоНастроек + + <key>ru</key> + <value>Количество настроек</value> + + 4 + + Number + + 10 + + + + true + + + true + + + + КоличествоПользователей + + <key>ru</key> + <value>Количество пользователей</value> + + 8 + + Number + + 10 + + + + true + + + true + + + + ОчищаемыеНастройки + + <key>ru</key> + <value>Очищаемые настройки</value> + + 2 + + String + + + + true + + + true + + + + Очистить + + <key>ru</key> + <value>Очистить</value> + + 3 + + ru + Очистить + + + true + + + + Очистить + + + Auto + Auto + + + ОчиститьИЗакрыть + + <key>ru</key> + <value>Очистить и закрыть</value> + + 4 + + ru + Очистить и закрыть + + + true + + + + ОчиститьИЗакрыть + + + Auto + Auto + + + + + + +
              diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html new file mode 100644 index 000000000..46edb418b --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Help/ru.html @@ -0,0 +1,4 @@ + +

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

              +
              1. "Очистить настройки" - выбираются пользователи, которым необходимо очистить настройки. При отметке значения "Выбранным пользователям" становится доступен выбор пользователей. +
              2. "Что очистить" - выбирается, какие настройки очищать. Если в поле "Кому очистить" выбран один пользователь, то есть возможность выбора отдельных настроек. При выборе нескольких пользователей или всех пользователей возможна очистка только всех настроек каждого пользователя.
              \ 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..75fe9b5fb --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ОчисткаНастроекПользователей/Module.bsl @@ -0,0 +1,284 @@ +/////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ИспользоватьВнешнихПользователей = ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей"); + + Источник = "ВыбраннымПользователям"; + ОчищаемыеНастройки = "ОчиститьВсе"; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + Если ВРег(ИмяСобытия) = ВРег("ВыборПользователя") Тогда + + Если ПользователиИсточник <> Неопределено Тогда + Элементы.ВыбратьНастройки.Заголовок = НСтр("ru='Выбрать'"); + ВыбранныеНастройки = Неопределено; + КоличествоНастроек = Неопределено; + КонецЕсли; + + ПользователиИсточник = Новый Структура("МассивПользователей", Параметр.ПользователиПриемник); + + КоличествоПользователей = Параметр.ПользователиПриемник.Количество(); + Если КоличествоПользователей = 1 Тогда + Элементы.ВыбратьПользователей.Заголовок = Строка(Параметр.ПользователиПриемник[0]); + Элементы.ГруппаОчищаемыеНастройки.Доступность = Истина; + ИначеЕсли КоличествоПользователей > 1 Тогда + + ПрописьЧисла = ЧислоПрописью( + КоличествоПользователей, + "Л = ru_RU", + НСтр("ru = ',,,,,,,,0'")); + ПрописьЧислаИПредмета = ЧислоПрописью( + КоличествоПользователей, + "Л = ru_RU", + НСтр("ru = 'пользователь,пользователя,пользователей,,,,,,0'")); + ЧислоИПредмет = СтрЗаменить( + ПрописьЧислаИПредмета, + ПрописьЧисла, + Формат(КоличествоПользователей, "ЧДЦ=0") + " "); + + Элементы.ВыбратьПользователей.Заголовок = ЧислоИПредмет; + ОчищаемыеНастройки = "ОчиститьВсе"; + КонецЕсли; + Элементы.ВыбратьПользователей.Подсказка = ""; + + ИначеЕсли ВРег(ИмяСобытия) = ВРег("ВыборНастроек") Тогда + ВыбранныеНастройки = Новый Структура("НастройкиОтчетов, ВнешнийВид, ПрочиеНастройки, ПерсональныеНастройки", + Параметр.НастройкиОтчетов, Параметр.ВнешнийВид, Параметр.ПрочиеНастройки, Параметр.ПерсональныеНастройки); + + КоличествоНастроек = Параметр.КоличествоНастроек; + + Если КоличествоНастроек = 0 Тогда + ТекстЗаголовка = НСтр("ru='Выбрать'"); + ИначеЕсли КоличествоНастроек = 1 Тогда + ТекстЗаголовка = Параметр.ПредставленияНастроек[0]; + Иначе + ПрописьЧисла = ЧислоПрописью( + КоличествоНастроек, + "Л = ru_RU", + НСтр("ru = ',,,,,,,,0'")); + ПрописьЧислаИПредмета = ЧислоПрописью( + КоличествоНастроек, + "Л = ru_RU", + НСтр("ru = 'настройка,настройки,настроек,,,,,,0'")); + ТекстЗаголовка = СтрЗаменить( + ПрописьЧислаИПредмета, + ПрописьЧисла, + Формат(КоличествоНастроек, "ЧДЦ=0") + " "); + КонецЕсли; + + Элементы.ВыбратьНастройки.Заголовок = ТекстЗаголовка; + Элементы.ВыбратьНастройки.Подсказка = ""; + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ИсточникПриИзменении(Элемент) + + Если Источник = "ВыбраннымПользователям" + И КоличествоПользователей > 1 + Или Источник = "ВсемПользователям" Тогда + ОчищаемыеНастройки = "ОчиститьВсе"; + КонецЕсли; + + Если Источник = "ВыбраннымПользователям" + И КоличествоПользователей = 1 + Или Источник = "ВсемПользователям" Тогда + Элементы.ГруппаОчищаемыеНастройки.Доступность = Истина; + Иначе + Элементы.ГруппаОчищаемыеНастройки.Доступность = Ложь; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ОчищаемыеНастройкиПриИзменении(Элемент) + + Если Источник = "ВыбраннымПользователям" + И КоличествоПользователей > 1 + Или Источник = "ВсемПользователям" Тогда + Предупреждение(НСтр("ru = 'Очистка отдельных настроек доступна только при выборе одного пользователя.'")); + ОчищаемыеНастройки = "ОчиститьВсе"; + Элементы.ВыбратьНастройки.Доступность = Ложь; + ИначеЕсли ОчищаемыеНастройки = "ОчиститьВсе" Тогда + Элементы.ВыбратьНастройки.Доступность = Ложь; + Иначе + Элементы.ВыбратьНастройки.Доступность = Истина; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьПользователейНажатие(Элемент) + + Если ИспользоватьВнешнихПользователей Тогда + ВыборТипаПользователей = Новый СписокЗначений; + ВыборТипаПользователей.Добавить("ВнешниеПользователи", "Внешние пользователи"); + ВыборТипаПользователей.Добавить("Пользователи", "Пользователи"); + + ВыбранныйВариант = ВыборТипаПользователей.ВыбратьЭлемент(); + + Если ВыбранныйВариант = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ВыбранныйВариант.Значение = "Пользователи" Тогда + ТипПользователя = Тип("СправочникСсылка.Пользователи"); + ИначеЕсли ВыбранныйВариант.Значение = "ВнешниеПользователи" Тогда + ТипПользователя = Тип("СправочникСсылка.ВнешниеПользователи"); + КонецЕсли; + + Иначе + ТипПользователя = Тип("СправочникСсылка.Пользователи"); + КонецЕсли; + + ПараметрыФормы = Новый Структура("Пользователь, ТипПользователя, КопироватьВсе, ОчисткаНастроек", + "", ТипПользователя, Ложь, Истина); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборПользователей", ПараметрыФормы); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыбратьНастройки(Элемент) + + Если КоличествоПользователей = 1 Тогда + ПользовательСсылка = ПользователиИсточник.МассивПользователей[0]; + ПараметрыФормы = Новый Структура("Пользователь", ПользовательСсылка); + ОткрытьФорму("Обработка.НастройкиПользователей.Форма.ВыборНастроек", ПараметрыФормы); + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Очистить(Команда) + + ОчиститьСообщения(); + ОчисткаНастроек(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОчиститьИЗакрыть(Команда) + + ОчиститьСообщения(); + НастройкиОчищены = ОчисткаНастроек(); + + Если НастройкиОчищены Тогда + Закрыть(); + КонецЕсли; + +КонецПроцедуры + + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Функция ОчисткаНастроек() + + Если Источник = "ВыбраннымПользователям" + И КоличествоПользователей = 0 Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите пользователя или пользователей, + |которым необходимо очистить настройки.'"), , "Источник"); + Возврат Ложь; + КонецЕсли; + + Если ОчищаемыеНастройки = "ОтдельныеНастройки" + И КоличествоНастроек = 0 Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Выберите настройки, которые необходимо очистить.'"), , "ОчищаемыеНастройки"); + Возврат Ложь; + КонецЕсли; + + Если ОчищаемыеНастройки = "ОтдельныеНастройки" Тогда + ОчиститьВыбранныеНастройки(); + ТекстПояснения = НСтр("ru = 'Очищено настроек: %1'"); + ТекстПояснения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстПояснения, КоличествоНастроек); + ПоказатьОповещениеПользователя(НСтр("ru = 'Очистка настроек'"), , ТекстПояснения); + ИначеЕсли ОчищаемыеНастройки = "ОчиститьВсе" Тогда + ОчиститьВсеНастройки(); + + ТекстПояснения = НСтр("ru = 'Очищены все настройки'"); + ПоказатьОповещениеПользователя(НСтр("ru = 'Очистка настроек'"), , ТекстПояснения); + КонецЕсли; + + КоличествоНастроек = 0; + Элементы.ВыбратьНастройки.Заголовок = НСтр("ru='Выбрать'"); + Возврат Истина; + +КонецФункции + +&НаСервере +Процедура ОчиститьВыбранныеНастройки() + + Обработка = РеквизитФормыВЗначение("Объект"); + + Источники = ПользователиИсточник.МассивПользователей[0]; + Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(Источники); + + Если ВыбранныеНастройки.НастройкиОтчетов.Количество() > 0 Тогда + Обработка.УдалитьНастройки(Пользователь, ВыбранныеНастройки.НастройкиОтчетов, "ХранилищеПользовательскихНастроекОтчетов"); + КонецЕсли; + + Если ВыбранныеНастройки.ВнешнийВид.Количество() > 0 Тогда + Обработка.УдалитьНастройки(Пользователь, ВыбранныеНастройки.ВнешнийВид, "ХранилищеСистемныхНастроек"); + КонецЕсли; + + Если ВыбранныеНастройки.ПрочиеНастройки.Количество() > 0 Тогда + Обработка.УдалитьНастройки(Пользователь, ВыбранныеНастройки.ПрочиеНастройки, "ХранилищеСистемныхНастроек"); + КонецЕсли; + + Если ВыбранныеНастройки.ПерсональныеНастройки.Количество() > 0 Тогда + Обработка.УдалитьНастройки(Пользователь, ВыбранныеНастройки.ПерсональныеНастройки, "ХранилищеОбщихНастроек"); + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОчиститьВсеНастройки() + + Обработка = РеквизитФормыВЗначение("Объект"); + + МассивНастроек = Новый Массив; + МассивНастроек.Добавить("НастройкиОтчетов"); + МассивНастроек.Добавить("НастройкиВнешнегоВида"); + МассивНастроек.Добавить("ПерсональныеНастройки"); + МассивНастроек.Добавить("ДанныеФорм"); + МассивНастроек.Добавить("Избранное"); + МассивНастроек.Добавить("НастройкиПечати"); + + Если Источник = "ВыбраннымПользователям" Тогда + Источники = ПользователиИсточник.МассивПользователей; + Иначе + Источники = Новый Массив; + ТаблицаПользователей = Новый ТаблицаЗначений; + ТаблицаПользователей.Колонки.Добавить("Пользователь"); + ТаблицаПользователей = Обработка.ПользователиДляКопирования("", ТаблицаПользователей, ИспользоватьВнешнихПользователей); + + Для Каждого СтрокаТаблицы Из ТаблицаПользователей Цикл + Источники.Добавить(СтрокаТаблицы.Пользователь); + КонецЦикла; + + КонецЕсли; + + Обработки.НастройкиПользователей.УдалитьНастройкиПользователей(МассивНастроек, Источники); + +КонецПроцедуры + + + + diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form new file mode 100644 index 000000000..c93e97d1c --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Form.form @@ -0,0 +1,245 @@ + + + + <key>ru</key> + <value>Копирование настроек</value> + + + Сообщение + 1 + + <key>ru</key> + <value>Пользователи, которым копируются настройки внешнего вида программы, +должны завершить свои сеансы работы. +В противном случае настройки могут не примениться.</value> + + true + true + + true + + + СообщениеРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + + СообщениеКонтекстноеМеню + 2 + true + + Label + true + true + + Left + + + + ГруппаАктивныеПользователи + 7 + + СписокАктивныхПользователей + 8 + + <key>ru</key> + <value>Список активных пользователей</value> + + true + true + + true + + + СписокАктивныхПользователейРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + + СписокАктивныхПользователейКонтекстноеМеню + 9 + true + + Label + 25 + true + true + + + Click + СписокАктивныхПользователейНажатие + + true + Left + + + true + true + + true + + + <key>ru</key> + <value>Группа активные пользователи</value> + + + ГруппаАктивныеПользователиРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + Bottom + true + + ФормаКоманднаяПанель + -1 + + Скопировать + 15 + true + true + + true + + + СкопироватьРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + Form.Command.Скопировать + Auto + true + true + true + UserCmds + Auto + + + Отмена + 17 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + + Right + + Abort + Close + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Действие + + <key>ru</key> + <value>Действие</value> + + 1 + + String + + + + true + + + true + + + + Скопировать + + <key>ru</key> + <value>Скопировать</value> + + 1 + + ru + Скопировать + + + true + + + + Скопировать + + + Auto + Auto + + + Действие + + String + + + true + + + + + + diff --git a/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl new file mode 100644 index 000000000..bf7cf9be5 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/Forms/ПредупреждениеОКопированииНастроек/Module.bsl @@ -0,0 +1,24 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СписокАктивныхПользователейНажатие(Элемент) + + СтандартныеПодсистемыКлиентПереопределяемый.ОткрытьСписокАктивныхПользователей(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Скопировать(Команда) + + Если Параметры.Действие <> "СкопироватьИЗакрыть" Тогда + Закрыть(); + КонецЕсли; + + Результат = Новый Структура("Действие", Параметры.Действие); + Оповестить("СкопироватьНастройкиАктивнымПользователям", Результат); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl new file mode 100644 index 000000000..ce388661d --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/ManagerModule.bsl @@ -0,0 +1,1121 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, отвечающие за получение настроек форм + +// Получить список настроек форм для указанного пользователя Пользователь. +// +// Параметры +// ИмяПользователя - Строка - имя пользователя информационной базы, для которого нужно +// получить настройки форм +// +// Возвращаемое значение +// СписокЗначений - Список форм, для которых у переданного пользователя есть настройки +// +Функция НастройкиВсехФорм(ИмяПользователя) Экспорт + + СписокФорм = ФормыОбъектовМетаданных(); + + // Добавление стандартных форм в список + СписокФорм.Добавить("ВнешняяОбработка.StandardEventLog.Форма.EventsJournal", + НСтр("ru='Стандартные.Журнал регистрации'") , Ложь, БиблиотекаКартинок.Форма); + СписокФорм.Добавить("ВнешняяОбработка.StandardEventLog.Форма.EventForm", + НСтр("ru='Стандартные.Журнал регистрации, Событие'") , Ложь, БиблиотекаКартинок.Форма); + СписокФорм.Добавить("ВнешняяОбработка.StandardEventLog.Форма.EventsJournalFilter", + НСтр("ru='Стандартные.Журнал регистрации, Настройка отбора событий'") , Ложь, БиблиотекаКартинок.Форма); + СписокФорм.Добавить("ВнешняяОбработка.StandardFindByRef.Форма.MainForm", + НСтр("ru='Стандартные.Поиск ссылок на объект'") , Ложь, БиблиотекаКартинок.Форма); + СписокФорм.Добавить("ВнешняяОбработка.StandardFullTextSearchManagement.Форма.MainForm", + НСтр("ru='Стандартные.Управление полнотекстовым поиском'") , Ложь, БиблиотекаКартинок.Форма); + СписокФорм.Добавить("ВнешняяОбработка.StandardDocumentsPosting.Форма.MainForm", + НСтр("ru='Стандартные.Проведение документов'") , Ложь, БиблиотекаКартинок.Форма); + СписокФорм.Добавить("ВнешняяОбработка.StandardDeleteMarkedObjects.Форма.Form", + НСтр("ru='Стандартные.Удаление помеченных объектов'") , Ложь, БиблиотекаКартинок.Форма); + СписокФорм.Добавить("ВнешняяОбработка.StandardExternalDataSourceManagement.Форма.Form", + НСтр("ru='Стандартные.Управление внешними источниками данных'") , Ложь, БиблиотекаКартинок.Форма); + СписокФорм.Добавить("ВнешняяОбработка.StandardTotalsManagement.Форма.MainForm", + НСтр("ru='Стандартные.Управление итогами'") , Ложь, БиблиотекаКартинок.Форма); + СписокФорм.Добавить("ВнешняяОбработка.StandardActiveUsers.Форма.ActiveUsersListForm", + НСтр("ru='Стандартные.Активные пользователи'") , Ложь, БиблиотекаКартинок.Форма); + + Возврат СписокНастроекФорм(СписокФорм, ИмяПользователя); + +КонецФункции + +// Получает список форм, в конфигурации, при этом заполняются следующие поля: +// Значение - имя формы, идентифицирующее ее. +// Представление - синоним формы +// Картинка - картинка соответствующая объекту, к которому форма имеет отношение +// +// Параметры +// Список - СписокЗначений - список значений, в который будут добавлены описания форм +// +// Возвращаемое значение +// СписокЗначений - Список всех форм объектов метаданных +// +Функция ФормыОбъектовМетаданных() + + СписокФорм = Новый СписокЗначений; + + Для Каждого Форма Из Метаданные.ОбщиеФормы Цикл + СписокФорм.Добавить("ОбщаяФорма." + Форма.Имя, Форма.Синоним, Ложь, БиблиотекаКартинок.Форма); + КонецЦикла; + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("Форма"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.КритерииОтбора, "КритерийОтбора", НСтр("ru='Критерий отбора'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.КритерийОтбора, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ПолучитьСписокФормОбъектаМетаданных(Метаданные.ХранилищаНастроек, "ХранилищеНастроек", НСтр("ru='Хранилище настроек'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.ХранилищеНастроек, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); + ИменаСтандартныхФорм.Добавить("ФормаГруппы"); + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.Справочники, "Справочник", НСтр("ru='Справочник'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.Справочник, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.Документы, "Документ", НСтр("ru='Документ'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.Документ, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("Форма"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.ЖурналыДокументов, "ЖурналДокументов", НСтр("ru='Журнал документов'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.ЖурналДокументов, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.Перечисления, "Перечисление", НСтр("ru='Перечисление'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.Перечисление, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("Форма"); + ИменаСтандартныхФорм.Добавить("ФормаНастроек"); + ИменаСтандартныхФорм.Добавить("ФормаВарианта"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.Отчеты, "Отчет", НСтр("ru='Отчет'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.Отчет, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("Форма"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.Обработки, "Обработка", НСтр("ru='Обработка'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.Обработка, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); + ИменаСтандартныхФорм.Добавить("ФормаГруппы"); + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.ПланыВидовХарактеристик, "ПланВидовХарактеристик", НСтр("ru='План видов характеристик'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.ПланВидовХарактеристик, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.ПланыСчетов, "ПланСчетов", НСтр("ru='План счетов'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.ПланСчетов, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.ПланыВидовРасчета, "ПланВидовРасчета", НСтр("ru='План видов расчета'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.ПланВидовРасчета, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаЗаписи"); + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыСведений, "РегистрСведений", НСтр("ru='Регистр сведений'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.РегистрСведений, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыНакопления, "РегистрНакопления", НСтр("ru='Регистр накопления'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.РегистрНакопления, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыБухгалтерии, "РегистрБухгалтерии", НСтр("ru='Регистр бухгалтерии'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.РегистрБухгалтерии, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыРасчета, "РегистрРасчета", НСтр("ru='Регистр расчета'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.РегистрРасчета, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.БизнесПроцессы, "БизнесПроцесс", НСтр("ru='Бизнес-процесс'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.БизнесПроцесс, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаОбъекта"); + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ИменаСтандартныхФорм.Добавить("ФормаДляВыбора"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.Задачи, "Задача", НСтр("ru='Задача'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.Задача, СписокФорм); + + ИменаСтандартныхФорм = Новый СписокЗначений; + ИменаСтандартныхФорм.Добавить("ФормаЗаписи"); + ИменаСтандартныхФорм.Добавить("ФормаСписка"); + ПолучитьСписокФормОбъектаМетаданных(Метаданные.ВнешниеИсточникиДанных, "ВнешнийИсточникДанных", НСтр("ru='Внешние источники данных'"), + ИменаСтандартныхФорм, БиблиотекаКартинок.ВнешнийИсточникДанныхТаблица, СписокФорм); + + Возврат СписокФорм; +КонецФункции + +// Возвращает список настроек для указанных форм СписокФормы и указанного пользователя Пользователь. +// +Функция СписокНастроекФорм(СписокФорм, ИмяПользователя) + + Результат = Новый СписокЗначений; + Настройки = ПрочитатьНастройкиИзХранилища(ХранилищеСистемныхНастроек, ИмяПользователя); + МассивНастроекФорм = ПредопределенныеНастройки(); + Для Каждого Элемент Из СписокФорм Цикл + + Для Каждого НастройкаФормы Из МассивНастроекФорм Цикл + + ПоискНастройки = Настройки.Найти(Элемент.Значение + НастройкаФормы); + Если ПоискНастройки <> Неопределено Тогда + Результат.Добавить(Элемент.Значение, Элемент.Представление, Элемент.Пометка, Элемент.Картинка); + Прервать; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + Возврат Результат; + +КонецФункции + +Процедура ПолучитьСписокФормОбъектаМетаданных(СписокОбъектовМетаданных, ТипОбъектаМетаданных, + ПредставлениеОбъектаМетаданных, ИменаСтандартныхФорм, Картинка, СписокФорм) + + Для Каждого Объект Из СписокОбъектовМетаданных Цикл + + Если ТипОбъектаМетаданных = "ВнешнийИсточникДанных" Тогда + ПолучитьСписокФормВнешнихИсточниковДанных(Объект, ТипОбъектаМетаданных, ПредставлениеОбъектаМетаданных, Картинка, СписокФорм); + Продолжить; + КонецЕсли; + + ПрефиксИмени = ТипОбъектаМетаданных + "." + Объект.Имя; + ПрефиксПредставления = Объект.Синоним + "."; + + Для Каждого Форма Из Объект.Формы Цикл + ПредставлениеФормыИПометка = ПредставлениеФормы(Объект, Форма, ТипОбъектаМетаданных); + ПредставлениеФормы = ПредставлениеФормыИПометка.ИмяФормы; + Пометка = ПредставлениеФормыИПометка.ФормаОткрываемая; + СписокФорм.Добавить(ПрефиксИмени + ".Форма." + Форма.Имя, ПрефиксПредставления + ПредставлениеФормы, Пометка, Картинка); + КонецЦикла; + + Для Каждого ИмяСтандартнойФормы Из ИменаСтандартныхФорм Цикл + + Если Объект["Основная" + ИмяСтандартнойФормы] = Неопределено Тогда + ПредставлениеФормыИПометка = ПредставлениеАвтогенерируемойФормы(Объект, ИмяСтандартнойФормы.Значение, ТипОбъектаМетаданных); + ПредставлениеФормы = ПредставлениеФормыИПометка.ИмяФормы; + Пометка = ПредставлениеФормыИПометка.ФормаОткрываемая; + СписокФорм.Добавить(ПрефиксИмени + "." + ИмяСтандартнойФормы.Значение, ПрефиксПредставления + ПредставлениеФормы, Пометка, Картинка); + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +Процедура ПолучитьСписокФормВнешнихИсточниковДанных(Объект, ТипОбъектаМетаданных, + ПредставлениеОбъектаМетаданных, Картинка, СписокФорм) + + Для Каждого Таблица Из Объект.Таблицы Цикл + + ПрефиксИмени = ТипОбъектаМетаданных + "." + Объект.Имя + ".Таблица."; + ПрефиксПредставления = Таблица.Синоним + "."; + + Для Каждого Форма Из Таблица.Формы Цикл + ПредставлениеФормы = ПредставлениеФормы(Таблица, Форма, ТипОбъектаМетаданных).ИмяФормы; + СписокФорм.Добавить(ПрефиксИмени + Таблица.Имя + ".Форма." + Форма.Имя, ПрефиксПредставления + ПредставлениеФормы, Ложь, Картинка); + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, отвечающие за копирование и удаление всех настроек пользователя + +// Удаляет настройки пользователей из хранилища +// +// Параметры: +// ОчищаемыеНастройки - Массив, где элемент массива - тип настроек, которые необходимо +// очистить. Например, НастройкиОтчетов или НастройкиВнешнегоВида. +// Источники - Массив, где элемент массива - Справочник.ПользовательСсылка. Массив пользователей, +// у которых необходимо очистить настройки +// +Процедура УдалитьНастройкиПользователей(ОчищаемыеНастройки, Источники) Экспорт + + СоответствиеНастройкаХранилище = Новый Соответствие; + СоответствиеНастройкаХранилище.Вставить("НастройкиОтчетов", ХранилищеПользовательскихНастроекОтчетов); + СоответствиеНастройкаХранилище.Вставить("НастройкиВнешнегоВида", ХранилищеСистемныхНастроек); + СоответствиеНастройкаХранилище.Вставить("ДанныеФорм", ХранилищеНастроекДанныхФорм); + СоответствиеНастройкаХранилище.Вставить("ПерсональныеНастройки", ХранилищеОбщихНастроек); + СоответствиеНастройкаХранилище.Вставить("Избранное", ХранилищеСистемныхНастроек); + СоответствиеНастройкаХранилище.Вставить("НастройкиПечати", ХранилищеСистемныхНастроек); + + Для Каждого ОчищаемаяНастройка Из ОчищаемыеНастройки Цикл + МенеджерНастроек = СоответствиеНастройкаХранилище[ОчищаемаяНастройка]; + + Для Каждого Источник Из Источники Цикл + Источник = ИмяПользователяИБ(Источник); + НастройкиИзХранилища = СписокНастроек(Источник, МенеджерНастроек, ОчищаемаяНастройка); + УдалитьНастройки(МенеджерНастроек, НастройкиИзХранилища, Источник) + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +Процедура УдалитьНастройки(МенеджерНастроек, НастройкиИзХранилища, Пользователь) + + Для Каждого Настройка Из НастройкиИзХранилища Цикл + КлючОбъекта = Настройка.КлючОбъекта; + КлючНастроек = Настройка.КлючНастроек; + МенеджерНастроек.Удалить(КлючОбъекта, КлючНастроек, Пользователь); + КонецЦикла; + +КонецПроцедуры + +Функция СкопироватьНастройкиПользователей(ПользовательИсточник, ПользователиПриемник, КопируемыеНастройки) Экспорт + + СоответствиеНастройкаХранилище = Новый Соответствие; + СоответствиеНастройкаХранилище.Вставить("НастройкиОтчетов", ХранилищеПользовательскихНастроекОтчетов); + СоответствиеНастройкаХранилище.Вставить("НастройкиВнешнегоВида", ХранилищеСистемныхНастроек); + СоответствиеНастройкаХранилище.Вставить("ДанныеФорм", ХранилищеНастроекДанныхФорм); + СоответствиеНастройкаХранилище.Вставить("ПерсональныеНастройки", ХранилищеОбщихНастроек); + СоответствиеНастройкаХранилище.Вставить("Избранное", ХранилищеСистемныхНастроек); + СоответствиеНастройкаХранилище.Вставить("НастройкиПечати", ХранилищеСистемныхНастроек); + ЕстьНастройки = Ложь; + + Для Каждого КопируемаяНастройка Из КопируемыеНастройки Цикл + МенеджерНастроек = СоответствиеНастройкаХранилище[КопируемаяНастройка]; + НастройкиИзХранилища = СписокНастроек(ПользовательИсточник, МенеджерНастроек, КопируемаяНастройка); + Если НастройкиИзХранилища.Количество() <> 0 Тогда + ЕстьНастройки = Истина; + КонецЕсли; + + Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл + ПользовательПриемник = ИмяПользователяИБ(ПользовательПриемник); + СкопироватьНастройки(МенеджерНастроек, НастройкиИзХранилища, ПользовательИсточник, ПользовательПриемник); + КонецЦикла; + + КонецЦикла; + + Возврат ЕстьНастройки; + +КонецФункции + +Функция СписокНастроек(ИмяПользователя, МенеджерНастроек, КопируемаяНастройка) + + ПолучитьИзбранное = Ложь; + ПолучитьНастройкиПечати = Ложь; + Если КопируемаяНастройка = "Избранное" Тогда + ПолучитьИзбранное = Истина; + КонецЕсли; + + Если КопируемаяНастройка = "НастройкиПечати" Тогда + ПолучитьНастройкиПечати = Истина; + КонецЕсли; + + ТаблицаНастроек = Новый ТаблицаЗначений; + ТаблицаНастроек.Колонки.Добавить("КлючОбъекта"); + ТаблицаНастроек.Колонки.Добавить("КлючНастроек"); + + Отбор = Новый Структура; + Отбор.Вставить("Пользователь", ИмяПользователя); + + ВыборкаНастроек = МенеджерНастроек.Выбрать(Отбор); + + Пропустить = Ложь; + Пока СледующаяНастройка(ВыборкаНастроек, Пропустить) Цикл + + Если Пропустить Тогда + Продолжить; + КонецЕсли; + + Если Не ПолучитьИзбранное + И Найти(ВыборкаНастроек.КлючОбъекта, "ИзбранноеРаботыПользователя") <> 0 Тогда + Продолжить; + ИначеЕсли ПолучитьИзбранное Тогда + + Если Найти(ВыборкаНастроек.КлючОбъекта, "ИзбранноеРаботыПользователя") = 0 Тогда + Продолжить; + ИначеЕсли Найти(ВыборкаНастроек.КлючОбъекта, "ИзбранноеРаботыПользователя") <> 0 Тогда + ДобавитьСтрокуВТаблицуЗначений(ТаблицаНастроек, ВыборкаНастроек); + Продолжить; + КонецЕсли; + + КонецЕсли; + + Если Не ПолучитьНастройкиПечати + И Найти(ВыборкаНастроек.КлючОбъекта, "НастройкиПечатиТабличногоДокумента") <> 0 Тогда + Продолжить; + ИначеЕсли ПолучитьНастройкиПечати Тогда + + Если Найти(ВыборкаНастроек.КлючОбъекта, "НастройкиПечатиТабличногоДокумента") = 0 Тогда + Продолжить; + ИначеЕсли Найти(ВыборкаНастроек.КлючОбъекта, "НастройкиПечатиТабличногоДокумента") <> 0 Тогда + ДобавитьСтрокуВТаблицуЗначений(ТаблицаНастроек, ВыборкаНастроек); + Продолжить; + КонецЕсли; + + КонецЕсли; + + ДобавитьСтрокуВТаблицуЗначений(ТаблицаНастроек, ВыборкаНастроек); + КонецЦикла; + + Возврат ТаблицаНастроек; + +КонецФункции + +Функция СледующаяНастройка(ВыборкаНастроек, Пропустить) + + Попытка + Пропустить = Ложь; + Возврат ВыборкаНастроек.Следующий(); + Исключение + Пропустить = Истина; + Возврат Истина; + КонецПопытки; + +КонецФункции + +Процедура СкопироватьНастройки(МенеджерНастроек, ТаблицаНастроек, ПользовательИсточник, ПользовательПриемник) + + Для Каждого Настройка Из ТаблицаНастроек Цикл + КлючОбъекта = Настройка.КлючОбъекта; + КлючНастроек = Настройка.КлючНастроек; + Попытка + Значение = МенеджерНастроек.Загрузить(КлючОбъекта, КлючНастроек, , ПользовательИсточник); + Исключение + Продолжить; + КонецПопытки; + ОписаниеНастроек = МенеджерНастроек.ПолучитьОписание(КлючОбъекта, КлючНастроек, ПользовательИсточник); + МенеджерНастроек.Сохранить(КлючОбъекта, КлючНастроек, Значение, + ОписаниеНастроек, ПользовательПриемник); + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +// Получает имя пользователя информационной базы по переданной ссылке +// справочника +// Параметры +// ПользовательСсылка - СправочникСсылка - Пользователь, для которого нужно получить +// имя пользователя информационной базы +// +// Возвращаемое значение +// Строка - Имя пользователя информационной базы. Если Пользователь ИБ не найден - Неопределено. +// +Функция ИмяПользователяИБ(ПользовательСсылка) Экспорт + УстановитьПривилегированныйРежим(Истина); + ИдентификаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательСсылка, "ИдентификаторПользователяИБ"); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); + + Если Не ПользовательИБ = Неопределено Тогда + Возврат ПользовательИБ.Имя; + Иначе + Возврат Неопределено; + КонецЕсли; +КонецФункции + +Функция ПредопределенныеНастройки() + + МассивНастроекФорм = Новый Массив; + МассивНастроекФорм.Добавить("/НастройкиФормы"); + МассивНастроекФорм.Добавить("/НастройкиОкна"); + МассивНастроекФорм.Добавить("/НастройкиОкнаВебКлиента"); + МассивНастроекФорм.Добавить("/ТекущиеДанные"); + + Возврат МассивНастроекФорм; +КонецФункции + +Функция ПредставлениеФормы(Объект, Форма, ТипОбъектаМетаданных) + + ФормаОткрываемая = Ложь; + + Если ТипОбъектаМетаданных = "КритерийОтбора" + Или ТипОбъектаМетаданных = "ЖурналДокументов" Тогда + + Если Форма = Объект.ОсновнаяФорма Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = Истина; + Иначе + ИмяФормы = Форма.Синоним; + КонецЕсли; + + ИначеЕсли ТипОбъектаМетаданных = "РегистрНакопления" + Или ТипОбъектаМетаданных = "РегистрБухгалтерии" + Или ТипОбъектаМетаданных = "РегистрРасчета" Тогда + + Если Форма = Объект.ОсновнаяФормаСписка Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = Истина; + Иначе + ИмяФормы = Форма.Синоним; + КонецЕсли; + + ИначеЕсли ТипОбъектаМетаданных = "РегистрСведений" Тогда + + Если Форма = Объект.ОсновнаяФормаЗаписи Тогда + + Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеЗаписи) Тогда + ИмяФормы = Объект.РасширенноеПредставлениеЗаписи; + ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеЗаписи) Тогда + ИмяФормы = Объект.ПредставлениеЗаписи; + Иначе + ИмяФормы = Объект.Представление(); + КонецЕсли; + + ИначеЕсли Форма = Объект.ОсновнаяФормаСписка Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = Истина; + Иначе + ИмяФормы = Форма.Синоним; + КонецЕсли; + + ИначеЕсли ТипОбъектаМетаданных = "Отчет" + Или ТипОбъектаМетаданных = "Обработка" Тогда + + Если Форма = Объект.ОсновнаяФорма Тогда + Если Не ПустаяСтрока(Объект.РасширенноеПредставление) Тогда + ИмяФормы = Объект.РасширенноеПредставление; + Иначе + ИмяФормы = Объект.Представление(); + КонецЕсли; + ФормаОткрываемая = Истина; + Иначе + ИмяФормы = Форма.Синоним; + КонецЕсли; + + ИначеЕсли ТипОбъектаМетаданных = "ХранилищеНастроек" Тогда + ИмяФормы = Форма.Синоним; + ИначеЕсли ТипОбъектаМетаданных = "Перечисление" Тогда + + Если Форма = Объект.ОсновнаяФормаСписка + Или Форма = Объект.ОсновнаяФормаДляВыбора Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = ?(Форма = Объект.ОсновнаяФормаСписка, Истина, Ложь); + Иначе + ИмяФормы = Форма.Синоним; + КонецЕсли; + + ИначеЕсли ТипОбъектаМетаданных = "Справочник" + Или ТипОбъектаМетаданных = "ПланВидовХарактеристик" Тогда + + Если Форма = Объект.ОсновнаяФормаСписка + Или Форма = Объект.ОсновнаяФормаДляВыбора + Или Форма = Объект.ОсновнаяФормаГруппы + Или Форма = Объект.ОсновнаяФормаДляВыбораГруппы Тогда + + ИмяФормы = ПредставлениеФормыСписка(Объект); + ДобавитьТипФормыВПредставление(Объект, Форма, ИмяФормы); + ФормаОткрываемая = ?(Форма = Объект.ОсновнаяФормаСписка, Истина, Ложь); + + ИначеЕсли Форма = Объект.ОсновнаяФормаОбъекта Тогда + ИмяФормы = ПредставлениеФормыОбъекта(Объект); + Иначе + ИмяФормы = Форма.Синоним; + КонецЕсли; + + ИначеЕсли ТипОбъектаМетаданных = "ВнешнийИсточникДанных" Тогда + + Если Форма = Объект.ОсновнаяФормаСписка Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = Истина; + ИначеЕсли Форма = Объект.ОсновнаяФормаЗаписи Тогда + + Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеЗаписи) Тогда + ИмяФормы = Объект.РасширенноеПредставлениеЗаписи ; + ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеЗаписи) Тогда + ИмяФормы = Объект.ПредставлениеЗаписи; + Иначе + ИмяФормы = Объект.Представление(); + КонецЕсли; + + ИначеЕсли Форма = Объект.ОсновнаяФормаОбъекта Тогда + ПредставлениеФормыОбъекта(Объект); + Иначе + ИмяФормы = Форма.Синоним; + КонецЕсли; + + Иначе // Получение представления формы для Документа, Плана счетов, Плана видов расчета, Бизнесс-процесса и Задачи + + Если Форма = Объект.ОсновнаяФормаСписка + Или Форма = Объект.ОсновнаяФормаДляВыбора Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = ?(Форма = Объект.ОсновнаяФормаСписка, Истина, Ложь); + ИначеЕсли Форма = Объект.ОсновнаяФормаОбъекта Тогда + ИмяФормы = ПредставлениеФормыОбъекта(Объект); + Иначе + ИмяФормы = Форма.Синоним; + КонецЕсли; + + КонецЕсли; + + Возврат Новый Структура("ИмяФормы, ФормаОткрываемая", ИмяФормы, ФормаОткрываемая); + +КонецФункции + +Функция ПредставлениеАвтогенерируемойФормы(Объект, Форма, ТипОбъектаМетаданных) + + ФормаОткрываемая = Ложь; + + Если ТипОбъектаМетаданных = "КритерийОтбора" + Или ТипОбъектаМетаданных = "ЖурналДокументов" Тогда + + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = Истина; + + ИначеЕсли ТипОбъектаМетаданных = "РегистрНакопления" + Или ТипОбъектаМетаданных = "РегистрБухгалтерии" + Или ТипОбъектаМетаданных = "РегистрРасчета" Тогда + + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = Истина; + + ИначеЕсли ТипОбъектаМетаданных = "РегистрСведений" Тогда + + Если Форма = "ФормаЗаписи" Тогда + + Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеЗаписи) Тогда + ИмяФормы = Объект.РасширенноеПредставлениеЗаписи; + ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеЗаписи) Тогда + ИмяФормы = Объект.ПредставлениеЗаписи; + Иначе + ИмяФормы = Объект.Представление(); + КонецЕсли; + + ИначеЕсли Форма = "ФормаСписка" Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = Истина; + КонецЕсли; + + ИначеЕсли ТипОбъектаМетаданных = "Отчет" + Или ТипОбъектаМетаданных = "Обработка" Тогда + + Если Не ПустаяСтрока(Объект.РасширенноеПредставление) Тогда + ИмяФормы = Объект.РасширенноеПредставление; + Иначе + ИмяФормы = Объект.Представление(); + КонецЕсли; + ФормаОткрываемая = Истина; + + ИначеЕсли ТипОбъектаМетаданных = "Перечисление" Тогда + + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = ?(Форма = "ФормаСписка", Истина, Ложь); + + ИначеЕсли ТипОбъектаМетаданных = "Справочник" + Или ТипОбъектаМетаданных = "ПланВидовХарактеристик" Тогда + + Если Форма = "ФормаСписка" + Или Форма = "ФормаДляВыбора" + Или Форма = "ФормаГруппы" + Или Форма = "ФормаДляВыбораГруппы" Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ДобавитьТипФормыВПредставлениеАвтогенерируемойФормы(Объект, Форма, ИмяФормы); + ФормаОткрываемая = ?(Форма = "ФормаСписка", Истина, Ложь); + ИначеЕсли Форма = "ФормаОбъекта" Тогда + ИмяФормы = ПредставлениеФормыОбъекта(Объект); + КонецЕсли; + + ИначеЕсли ТипОбъектаМетаданных = "ВнешнийИсточникДанных" Тогда + + Если Форма = "ФормаСписка" Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = Истина; + ИначеЕсли Форма = "ФормаЗаписи" Тогда + Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеЗаписи) Тогда + ИмяФормы = Объект.РасширенноеПредставлениеЗаписи ; + ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеЗаписи) Тогда + ИмяФормы = Объект.ПредставлениеЗаписи; + Иначе + ИмяФормы = Объект.Представление(); + КонецЕсли; + ИначеЕсли Форма = "ФормаОбъекта" Тогда + ПредставлениеФормыОбъекта(Объект); + КонецЕсли; + + Иначе // Получение представления формы для Документа, Плана счетов, Плана видов расчета, Бизнесс-процесса и Задачи + + Если Форма = "ФормаСписка" + Или Форма = "ФормаДляВыбора" Тогда + ИмяФормы = ПредставлениеФормыСписка(Объект); + ФормаОткрываемая = ?(Форма = "ФормаСписка", Истина, Ложь); + ИначеЕсли Форма = "ФормаОбъекта" Тогда + ИмяФормы = ПредставлениеФормыОбъекта(Объект); + КонецЕсли; + + КонецЕсли; + + Возврат Новый Структура("ИмяФормы, ФормаОткрываемая", ИмяФормы, ФормаОткрываемая); + +КонецФункции + +Функция ПредставлениеФормыСписка(Объект) + + Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеСписка) Тогда + ИмяФормы = Объект.РасширенноеПредставлениеСписка; + ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеСписка) Тогда + ИмяФормы = Объект.ПредставлениеСписка; + Иначе + ИмяФормы = Объект.Представление(); + КонецЕсли; + + Возврат ИмяФормы; +КонецФункции + +Функция ПредставлениеФормыОбъекта(Объект) + Если Не ПустаяСтрока(Объект.РасширенноеПредставлениеОбъекта) Тогда + ИмяФормы = Объект.РасширенноеПредставлениеОбъекта; + ИначеЕсли Не ПустаяСтрока(Объект.ПредставлениеОбъекта) Тогда + ИмяФормы = Объект.ПредставлениеОбъекта; + Иначе + ИмяФормы = Объект.Представление(); + КонецЕсли;; + + Возврат ИмяФормы; +КонецФункции + +Процедура ДобавитьТипФормыВПредставление(Объект, Форма, ИмяФормы) + + Если Форма = Объект.ОсновнаяФормаСписка Тогда + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (список)'"), ИмяФормы); + ИначеЕсли Форма = Объект.ОсновнаяФормаДляВыбора Тогда + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (выбор)'"), ИмяФормы); + ИначеЕсли Форма = Объект.ОсновнаяФормаГруппы Тогда + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (группа)'"), ИмяФормы); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьТипФормыВПредставлениеАвтогенерируемойФормы(Объект, Форма, ИмяФормы) + + Если Форма = "ФормаСписка" Тогда + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (список)'"), ИмяФормы); + ИначеЕсли Форма = "ФормаДляВыбора" Тогда + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (выбор)'"), ИмяФормы); + ИначеЕсли Форма = "ФормаДляВыбораГруппы" Тогда + ИмяФормы = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 (группа)'"), ИмяФормы); + КонецЕсли; + +КонецПроцедуры + +Процедура ДобавитьСтрокуВТаблицуЗначений(ТаблицаНастроек, ВыборкаНастроек) + + НоваяСтрока = ТаблицаНастроек.Добавить(); + НоваяСтрока.КлючОбъекта = ВыборкаНастроек.КлючОбъекта; + НоваяСтрока.КлючНастроек = ВыборкаНастроек.КлючНастроек; + +КонецПроцедуры + +Функция ПредставлениеВариантаОтчета(НастройкаОбъект, НастройкаКлюч) Экспорт + + ИмяВариантаОтчета = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(НастройкаОбъект, "/"); + ИмяОтчета = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяВариантаОтчета[0], "."); + Отчет = Метаданные.Отчеты.Найти(ИмяОтчета[1]); + + Если Отчет = Неопределено Тогда + Возврат Неопределено; + КонецЕсли; + + ХранилищеВариантов = Отчет.ХранилищеВариантов; + + Если ХранилищеВариантов = Неопределено Тогда + ХранилищеВариантов = Метаданные.ХранилищеВариантовОтчетов; + КонецЕсли; + Если ХранилищеВариантов = Неопределено Тогда + ХранилищеВариантов = ХранилищеВариантовОтчетов; + Иначе + ХранилищеВариантов = ХранилищаНастроек[ХранилищеВариантов.Имя]; + КонецЕсли; + + Если ИмяВариантаОтчета.Количество() = 1 Тогда + ИдентификаторВарианта = ИмяОтчета[1]; + Иначе + ИдентификаторВарианта = ИмяВариантаОтчета[1]; + КонецЕсли; + + ПредставлениеВариантаОтчета = ХранилищеВариантов.ПолучитьОписание(ИмяВариантаОтчета[0], ИдентификаторВарианта); + + Если ПредставлениеВариантаОтчета <> Неопределено Тогда + Возврат ПредставлениеВариантаОтчета.Представление; + Иначе + Возврат ИмяОтчета[1]; + КонецЕсли; + +КонецФункции + +Функция ПрочитатьНастройкиИзХранилища(МенеджерНастроек, Пользователь) + + Настройки = Новый ТаблицаЗначений; + Настройки.Колонки.Добавить("КлючОбъекта"); + Настройки.Колонки.Добавить("КлючНастроек"); + Настройки.Колонки.Добавить("Представление"); + + Отбор = Новый Структура; + Отбор.Вставить("Пользователь", Пользователь); + + Пропустить = Ложь; + ВыборкаНастроек = МенеджерНастроек.Выбрать(Отбор); + Пока СледующаяНастройка(ВыборкаНастроек, Пропустить) Цикл + + Если Пропустить Тогда + Продолжить; + КонецЕсли; + + НоваяСтрока = Настройки.Добавить(); + НоваяСтрока.КлючОбъекта = ВыборкаНастроек.КлючОбъекта; + НоваяСтрока.КлючНастроек = ВыборкаНастроек.КлючНастроек; + НоваяСтрока.Представление = ВыборкаНастроек.Представление; + КонецЦикла; + + Возврат Настройки; + +КонецФункции + +Функция КлючиПользовательскихНастроек() + + МассивКлючей = Новый Массив; + МассивКлючей.Добавить("КлючТекущегоВарианта"); + МассивКлючей.Добавить("КлючТекущихПользовательскихНастроек"); + МассивКлючей.Добавить("ТекущиеПользовательскиеНастройки"); + МассивКлючей.Добавить("КлючТекущихНастроекДанных"); + МассивКлючей.Добавить("НастройкиКлиентскогоПриложения"); + МассивКлючей.Добавить("НастройкиВнешнейКомпоненты"); + МассивКлючей.Добавить("НастройкиСправки"); + МассивКлючей.Добавить("НастройкиСравнения"); + МассивКлючей.Добавить("ПараметрыПоискаТаблиц"); + + Возврат МассивКлючей; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для форм НастройкиПользователей и ВыборНастроек + +Процедура ЗаполнитьСпискиНастроек(Форма) Экспорт + + ЗаполнитьСписокНастроекОтчетов(Форма); + ЗаполнитьСписокНастроекВнешнегоВида(Форма); + ЗаполнитьСписокПрочихНастроек(Форма); + +КонецПроцедуры + +Процедура ЗаполнитьСписокНастроекОтчетов(Форма) + + Форма.НастройкиОтчетов.ПолучитьЭлементы().Очистить(); + НастройкиОтчетовДерево = Форма.РеквизитФормыВЗначение("НастройкиОтчетов"); + Настройки = ПрочитатьНастройкиИзХранилища(ХранилищеПользовательскихНастроекОтчетов, Форма.Пользователь); + + ТекущийОбъект = Неопределено; + Для Каждого Настройка Из Настройки Цикл + НастройкаОбъект = Настройка.КлючОбъекта; + НастройкаКлюч = Настройка.КлючНастроек; + НазваниеНастройки = Настройка.Представление; + + ПредставлениеВариантаОтчета = Обработки.НастройкиПользователей.ПредставлениеВариантаОтчета(НастройкаОбъект, НастройкаКлюч); + + Если ПредставлениеВариантаОтчета = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если Не ПустаяСтрока(Форма.Поиск) Тогда + Если Найти(ВРег(ПредставлениеВариантаОтчета), ВРег(Форма.Поиск)) = 0 + И Найти(ВРег(НазваниеНастройки), ВРег(Форма.Поиск)) = 0 Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + // Заполняем строку варианта отчета + Если ТекущийОбъект <> ПредставлениеВариантаОтчета Тогда + НоваяСтрокаВариантОтчета = НастройкиОтчетовДерево.Строки.Добавить(); + НоваяСтрокаВариантОтчета.Настройка = ПредставлениеВариантаОтчета; + НоваяСтрокаВариантОтчета.Картинка = БиблиотекаКартинок.Отчет; + НоваяСтрокаВариантОтчета.Тип = "Отчет"; + КонецЕсли; + // Заполняем строку настройки + НоваяСтрокаНастройка = НоваяСтрокаВариантОтчета.Строки.Добавить(); + НоваяСтрокаНастройка.Настройка = ?(Не ПустаяСтрока(НазваниеНастройки), НазваниеНастройки, ПредставлениеВариантаОтчета); + НоваяСтрокаНастройка.Картинка = БиблиотекаКартинок.Форма; + НоваяСтрокаНастройка.Тип = "НастройкаОтчета"; + НоваяСтрокаНастройка.Ключи.Добавить(НастройкаОбъект, НастройкаКлюч); + // Заполняем ключ объекта и ключ настройки для варианта отчета + НоваяСтрокаВариантОтчета.Ключи.Добавить(НастройкаОбъект, НастройкаКлюч); + + ТекущийОбъект = ПредставлениеВариантаОтчета; + КонецЦикла; + + НастройкиОтчетовДерево.Строки.Сортировать("Настройка Возр", Истина); + Форма.ЗначениеВРеквизитФормы(НастройкиОтчетовДерево, "НастройкиОтчетов"); + +КонецПроцедуры + +Процедура ДобавитьНастройкиРабочегоСтолаИКомандногоИнтерфейса(Форма, ДеревоНастроек) + + Если Не ПустаяСтрока(Форма.Поиск) Тогда + Если Найти(ВРег(НСтр("ru='Рабочий стол и командный интерфейс'")), ВРег(Форма.Поиск)) = 0 Тогда + Возврат; + КонецЕсли; + КонецЕсли; + + Настройки = ПрочитатьНастройкиИзХранилища(ХранилищеСистемныхНастроек, Форма.Пользователь); + КлючиНастроекРабочегоСтола = Новый СписокЗначений; + КлючиНастроекИнтерфейса = Новый СписокЗначений; + КлючиВсехНастроек = Новый СписокЗначений; + + Для Каждого Настройка Из Настройки Цикл + ИмяНастройки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Настройка.КлючОбъекта, "/"); + ЧастьИмениНастройки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяНастройки[0], "."); + Если ЧастьИмениНастройки[0] = "Подсистема" Тогда + + КлючиНастроекИнтерфейса.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + КлючиВсехНастроек.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + + ИначеЕсли ИмяНастройки[0] = "Общее" Тогда + + Если ИмяНастройки[1] = "ПанельРазделов" + Или ИмяНастройки[1] = "ПанельДействий" Тогда + КлючиНастроекИнтерфейса.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + КлючиВсехНастроек.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + ИначеЕсли ИмяНастройки[1] = "НастройкиРабочегоСтола" Тогда + КлючиНастроекРабочегоСтола.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + КлючиВсехНастроек.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + КонецЕсли; + + ИначеЕсли ИмяНастройки[0] = "РабочийСтол" Тогда + + Если ИмяНастройки[1] = "НастройкиОкна" Тогда + КлючиНастроекРабочегоСтола.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + КлючиВсехНастроек.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + Иначе + КлючиНастроекИнтерфейса.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + КлючиВсехНастроек.Добавить(Настройка.КлючОбъекта, "Интерфейс"); + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + Если КлючиВсехНастроек.Количество() > 0 Тогда + // Добавление группы верхнего уровня для настроек рабочего стола и интерфейса + НоваяСтрокаИнтерфейса = ДеревоНастроек.Строки.Добавить(); + НоваяСтрокаИнтерфейса.Настройка = НСтр("ru='Рабочий стол и командный интерфейс'"); + НоваяСтрокаИнтерфейса.Картинка = БиблиотекаКартинок.Картинка; + НоваяСтрокаИнтерфейса.Ключи = КлючиВсехНастроек.Скопировать(); + КонецЕсли; + Если КлючиНастроекРабочегоСтола.Количество() > 0 Тогда + // Добавление строки настроек рабочего стола + НоваяПодстрокаИнтерфейса = НоваяСтрокаИнтерфейса.Строки.Добавить(); + НоваяПодстрокаИнтерфейса.Настройка = НСтр("ru='Рабочий стол'"); + НоваяПодстрокаИнтерфейса.Картинка = БиблиотекаКартинок.Картинка; + НоваяПодстрокаИнтерфейса.Ключи = КлючиНастроекРабочегоСтола.Скопировать(); + КонецЕсли; + Если КлючиНастроекИнтерфейса.Количество() > 0 Тогда + // Добавление строки настроек интерфейса + НоваяПодстрокаИнтерфейса = НоваяСтрокаИнтерфейса.Строки.Добавить(); + НоваяПодстрокаИнтерфейса.Настройка = НСтр("ru='Командный интерфейс'"); + НоваяПодстрокаИнтерфейса.Картинка = БиблиотекаКартинок.Картинка; + НоваяПодстрокаИнтерфейса.Ключи = КлючиНастроекИнтерфейса.Скопировать(); + КонецЕсли; + +КонецПроцедуры + +Процедура ЗаполнитьСписокНастроекВнешнегоВида(Форма) + + Форма.ВнешнийВид.ПолучитьЭлементы().Очистить(); + НастройкиВнешнегоВида = Форма.РеквизитФормыВЗначение("ВнешнийВид"); + + ТекущийОбъект = Неопределено; + НастройкиФорм = НастройкиВсехФорм(Форма.Пользователь); + + Для Каждого НастройкаФормы Из НастройкиФорм Цикл + ИмяОбъектаМетаданных = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(НастройкаФормы.Значение, "."); + ПредставлениеОбъектаМетаданных = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(НастройкаФормы.Представление, "."); + + Если Не ПустаяСтрока(Форма.Поиск) Тогда + Если Найти(НастройкаФормы.Представление, ВРег(Форма.Поиск)) = 0 Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Если ИмяОбъектаМетаданных[0] = "ОбщаяФорма" Тогда + НоваяСтрокаОбщиеФормы = НастройкиВнешнегоВида.Строки.Добавить(); + НоваяСтрокаОбщиеФормы.Настройка = НастройкаФормы.Представление; + НоваяСтрокаОбщиеФормы.Картинка = БиблиотекаКартинок.Форма; + НоваяСтрокаОбщиеФормы.Ключи.Добавить(НастройкаФормы.Значение, ""); + ИначеЕсли ИмяОбъектаМетаданных[0] = "ХранилищеНастроек" Тогда + НоваяСтрокаХранилищеНастроек = НастройкиВнешнегоВида.Строки.Добавить(); + НоваяСтрокаХранилищеНастроек.Настройка = НастройкаФормы.Представление; + НоваяСтрокаХранилищеНастроек.Картинка = БиблиотекаКартинок.Форма; + НоваяСтрокаХранилищеНастроек.Ключи.Добавить(НастройкаФормы.Значение, ""); + ИначеЕсли ПредставлениеОбъектаМетаданных[0] = НСтр("ru = 'Стандартные'") Тогда + + // Группа дерева настроек + Если ТекущийОбъект <> ПредставлениеОбъектаМетаданных[0] Тогда + НоваяСтрокаОбъектМетаданных = НастройкиВнешнегоВида.Строки.Добавить(); + НоваяСтрокаОбъектМетаданных.Настройка = ПредставлениеОбъектаМетаданных[0]; + НоваяСтрокаОбъектМетаданных.Картинка = НастройкаФормы.Картинка; + КонецЕсли; + + // Элемент дерева настроек + НоваяСтрокаВнешнегоВидаФорм = НоваяСтрокаОбъектМетаданных.Строки.Добавить(); + НоваяСтрокаВнешнегоВидаФорм.Настройка = ПредставлениеОбъектаМетаданных[1]; + НоваяСтрокаВнешнегоВидаФорм.Картинка = БиблиотекаКартинок.Форма; + НоваяСтрокаВнешнегоВидаФорм.Ключи.Добавить(НастройкаФормы.Значение, "", НастройкаФормы.Пометка); + НоваяСтрокаОбъектМетаданных.Ключи.Добавить(НастройкаФормы.Значение, "", НастройкаФормы.Пометка); + + ТекущийОбъект = ПредставлениеОбъектаМетаданных[0]; + + Иначе + + // Группа дерева настроек + Если ТекущийОбъект <> ИмяОбъектаМетаданных[1] Тогда + НоваяСтрокаОбъектМетаданных = НастройкиВнешнегоВида.Строки.Добавить(); + НоваяСтрокаОбъектМетаданных.Настройка = ПредставлениеОбъектаМетаданных[0]; + НоваяСтрокаОбъектМетаданных.Картинка = НастройкаФормы.Картинка; + КонецЕсли; + + // Элемент дерева настроек + НоваяСтрокаВнешнегоВидаФорм = НоваяСтрокаОбъектМетаданных.Строки.Добавить(); + НоваяСтрокаВнешнегоВидаФорм.Настройка = ПредставлениеОбъектаМетаданных[1]; + НоваяСтрокаВнешнегоВидаФорм.Картинка = БиблиотекаКартинок.Форма; + НоваяСтрокаВнешнегоВидаФорм.Ключи.Добавить(НастройкаФормы.Значение, "", НастройкаФормы.Пометка); + НоваяСтрокаОбъектМетаданных.Ключи.Добавить(НастройкаФормы.Значение, "", НастройкаФормы.Пометка); + + ТекущийОбъект = ИмяОбъектаМетаданных[1]; + КонецЕсли; + + КонецЦикла; + + ДобавитьНастройкиРабочегоСтолаИКомандногоИнтерфейса(Форма, НастройкиВнешнегоВида); + + НастройкиВнешнегоВида.Строки.Сортировать("Настройка Возр", Истина); + РабочийСтолИКомандныйИнтерфейс = НастройкиВнешнегоВида.Строки.Найти(НСтр("ru='Рабочий стол и командный интерфейс'"), "Настройка"); + Если РабочийСтолИКомандныйИнтерфейс <> Неопределено Тогда + ИндексСтроки = НастройкиВнешнегоВида.Строки.Индекс(РабочийСтолИКомандныйИнтерфейс); + НастройкиВнешнегоВида.Строки.Сдвинуть(ИндексСтроки, -ИндексСтроки); + КонецЕсли; + + Форма.ЗначениеВРеквизитФормы(НастройкиВнешнегоВида, "ВнешнийВид"); + +КонецПроцедуры + +Процедура ЗаполнитьСписокПрочихНастроек(Форма) + + Форма.ПрочиеНастройки.ПолучитьЭлементы().Очистить(); + ПрочиеНастройкиДерево = Форма.РеквизитФормыВЗначение("ПрочиеНастройки"); + Настройки = ПрочитатьНастройкиИзХранилища(ХранилищеОбщихНастроек, Форма.Пользователь); + Ключи = Новый СписокЗначений; + ПрочиеКлючи = Новый СписокЗначений; + + // Заполнение произвольных пользовательских настроек + Для Каждого Настройка Из Настройки Цикл + Ключи.Добавить(Настройка.КлючОбъекта, Настройка.КлючНастроек); + КонецЦикла; + + Если Ключи.Количество() > 0 Тогда + Настройка = НСтр("ru='Персональные настройки'"); + Тип = "ПерсональныеНастройки"; + Картинка = БиблиотекаКартинок.СостояниеПользователя02; + ДобавитьСтрокуДерева(ПрочиеНастройкиДерево, Настройка, Картинка, Ключи, Тип); + КонецЕсли; + + // Заполнение настроек избранного и печати + Настройки = ПрочитатьНастройкиИзХранилища(ХранилищеСистемныхНастроек, Форма.Пользователь); + + Ключи.Очистить(); + ЕстьИзбранное = Ложь; + ЕстьНастройкиПечати = Ложь; + ОкончанияКлючей = КлючиПользовательскихНастроек(); + Для Каждого Настройка Из Настройки Цикл + + ИмяНастройки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Настройка.КлючОбъекта, "/"); + Если ИмяНастройки.Количество() = 1 Тогда + Продолжить; + КонецЕсли; + + Если ОкончанияКлючей.Найти(ИмяНастройки[1]) <> Неопределено Тогда + ПрочиеКлючи.Добавить(Настройка.КлючОбъекта, "Прочие"); + КонецЕсли; + + Если ИмяНастройки[1] = "ИзбранноеРаботыПользователя" Тогда + ЕстьИзбранное = Истина; + ИначеЕсли ИмяНастройки[1] = "НастройкиПечатиТабличногоДокумента" Тогда + Ключи.Добавить(Настройка.КлючОбъекта, "Прочие"); + ЕстьНастройкиПечати = Истина; + КонецЕсли; + + КонецЦикла; + + // Добавление строки дерева "Настройки печати" + Если ЕстьНастройкиПечати Тогда + Настройка = НСтр("ru='Настройки печати табличных документов'"); + Картинка = БиблиотекаКартинок.Печать; + ДобавитьСтрокуДерева(ПрочиеНастройкиДерево, Настройка, Картинка, Ключи); + КонецЕсли; + + // Добавление строки дерева "Избранное" + Если ЕстьИзбранное Тогда + + Настройка = НСтр("ru='Избранное'"); + Картинка = БиблиотекаКартинок.ДобавитьВИзбранное; + Ключи.Очистить(); + Ключи.Добавить("Общее/ИзбранноеРаботыПользователя", "Прочие"); + ДобавитьСтрокуДерева(ПрочиеНастройкиДерево, Настройка, Картинка, Ключи); + + КонецЕсли; + + Если ПрочиеКлючи.Количество() <> 0 Тогда + Настройка = НСтр("ru='Прочие настройки'"); + Картинка = БиблиотекаКартинок.ПрочиеПользовательскиеНастройки; + ДобавитьСтрокуДерева(ПрочиеНастройкиДерево, Настройка, Картинка, ПрочиеКлючи); + КонецЕсли; + + Форма.ЗначениеВРеквизитФормы(ПрочиеНастройкиДерево, "ПрочиеНастройки"); + +КонецПроцедуры + +Процедура ДобавитьСтрокуДерева(ДеревоЗначений, Настройка, Картинка, Ключи, Тип = "") + + НоваяСтрока = ДеревоЗначений.Строки.Добавить(); + НоваяСтрока.Настройка = Настройка; + НоваяСтрока.Картинка = Картинка; + НоваяСтрока.Тип = Тип; + НоваяСтрока.Ключи = Ключи.Скопировать(); + +КонецПроцедуры + + +#КонецЕсли \ 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..8f6280864 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/ObjectModule.bsl @@ -0,0 +1,385 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции, отвечающие за копирование и удаление настроек + +// Копирует пользовательские настройки отчетов +// +// Параметры +// ПользовательИсточник - Строка - Имя пользователя информационной базы, от которого берутся настройки для копирования +// ПользователиПриемник - Массив элементов ПользовательСсылка - Пользователи, которым необходимо скопировать выбранные настройки +// МассивНастроекДляКопирования - Массив - элемент массива - СписокЗначений, в котором содержатся ключи выбранных настроек +// +Процедура СкопироватьНастройкиОтчетовИПерсональныеНастройки(МенеджерНастроек, ПользовательИсточник, + ПользователиПриемник, МассивНастроекДляКопирования) Экспорт + + Для Каждого Элемент Из МассивНастроекДляКопирования Цикл + + Для Каждого ЭлементНастроек Из Элемент Цикл + КлючНастроек = ЭлементНастроек.Представление; + КлючОбъекта = ЭлементНастроек.Значение; + Настройка = МенеджерНастроек.Загрузить(КлючОбъекта, КлючНастроек, , ПользовательИсточник); + ОписаниеНастройки = МенеджерНастроек.ПолучитьОписание(КлючОбъекта, КлючНастроек, ПользовательИсточник); + + Если Настройка <> Неопределено Тогда + + Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл + ПользовательПриемникИБ = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательПриемник); + МенеджерНастроек.Сохранить(КлючОбъекта, КлючНастроек, Настройка, ОписаниеНастройки, ПользовательПриемникИБ); + КонецЦикла; + + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Копирует настройки внешнего вида +// +// Параметры +// ПользовательИсточник - Строка - Имя пользователя информационной базы, от которого берутся настройки для копирования +// ПользователиПриемник - Массив элементов ПользовательСсылка - Пользователи, которым необходимо скопировать выбранные настройки +// МассивНастроекДляКопирования - Массив - элемент массива - СписокЗначений, в котором содержатся ключи выбранных настроек +// +Процедура СкопироватьНастройкиВнешнегоВида(ПользовательИсточник, ПользователиПриемник, МассивНастроекДляКопирования) Экспорт + МассивНастроекФорм = ПредопределенныеНастройки(); + + Для Каждого Элемент Из МассивНастроекДляКопирования Цикл + Для Каждого ЭлементНастроек Из Элемент Цикл + КлючНастроек = ЭлементНастроек.Представление; + КлючОбъекта = ЭлементНастроек.Значение; + Если КлючНастроек = "Интерфейс" + Или КлючНастроек = "Прочие" Тогда + СкопироватьНастройкиРабочегоСтола(КлючОбъекта, ПользовательИсточник, ПользователиПриемник); + Продолжить; + КонецЕсли; + + Для Каждого Элемент Из МассивНастроекФорм Цикл + Настройка = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта + Элемент, КлючНастроек, , ПользовательИсточник); + Если Настройка <> Неопределено Тогда + Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл + ПользовательПриемникИБ = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательПриемник); + ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта + Элемент, КлючНастроек, Настройка, , ПользовательПриемникИБ); + КонецЦикла; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + +КонецПроцедуры + +Процедура СкопироватьНастройкиРабочегоСтола(КлючОбъекта, ПользовательИсточник, ПользователиПриемник) + + Настройка = ХранилищеСистемныхНастроек.Загрузить(КлючОбъекта, "", , ПользовательИсточник); + Если Настройка <> Неопределено Тогда + Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл + ПользовательПриемникИБ = Обработки.НастройкиПользователей.ИмяПользователяИБ(ПользовательПриемник); + ХранилищеСистемныхНастроек.Сохранить(КлючОбъекта, "", Настройка, , ПользовательПриемникИБ); + КонецЦикла; + КонецЕсли; + +КонецПроцедуры + +Процедура УдалитьНастройкиВыбраннымПользователям(Пользователи, МассивНастроекДляУдаления, НазваниеХранилища) Экспорт + + Для Каждого Пользователь Из Пользователи Цикл + Пользователь = Обработки.НастройкиПользователей.ИмяПользователяИБ(Пользователь); + УдалитьНастройки(Пользователь, МассивНастроекДляУдаления, НазваниеХранилища); + КонецЦикла; + +КонецПроцедуры + +// Удаляет выбранные настройки +// +// Параметры +// Пользователь - Строка - Имя пользователя информационной базы, у которого необходимо удалить настройки +// МассивНастроекДляУдаления - Массив - элемент массива - СписокЗначений, в котором содержатся ключи выбранных настроек +// НазваниеХранилища - Строка - название хранилища, из которого необходимо удалить настройки +// +Процедура УдалитьНастройки(Пользователь, МассивНастроекДляУдаления, НазваниеХранилища) Экспорт + + МенеджерНастроек = ХранилищеНастроекПоИмени(НазваниеХранилища); + Если НазваниеХранилища = "ХранилищеПользовательскихНастроекОтчетов" + Или НазваниеХранилища = "ХранилищеОбщихНастроек" Тогда + + Для Каждого Элемент Из МассивНастроекДляУдаления Цикл + + Для Каждого Настройка Из Элемент Цикл + МенеджерНастроек.Удалить(Настройка.Значение, Настройка.Представление, Пользователь); + КонецЦикла; + + КонецЦикла; + + ИначеЕсли НазваниеХранилища = "ХранилищеСистемныхНастроек" Тогда + МассивНастроекФорм = ПредопределенныеНастройки(); + Для Каждого Элемент Из МассивНастроекДляУдаления Цикл + + Для Каждого Настройка Из Элемент Цикл + + Если Настройка.Представление = "Интерфейс" + Или Настройка.Представление = "Прочие" Тогда + МенеджерНастроек.Удалить(Настройка.Значение, , Пользователь); + Иначе + Для Каждого ЭлементФорм Из МассивНастроекФорм Цикл + МенеджерНастроек.Удалить(Настройка.Значение + ЭлементФорм, Настройка.Представление, Пользователь); + КонецЦикла; + КонецЕсли; + + КонецЦикла; + + КонецЦикла; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Процедуры и функции для получения списка пользователей и групп пользователей + +// Получает список пользователей из справочника Пользователи, отсеивая недействительных пользователей, неразделенных +// пользователей при включенном разделителе, а так же пользователей с пустым идентификатором +// +// Параметры +// ПользовательИсточник - СправочникСсылка - Пользователь, которого необходимо убрать из итоговой таблицы пользователей +// ТаблицаПользователей - ТаблицаЗначений - Таблица, в которую записываются отобранные пользователи +// ПользовательВнешний - Булево - Если Истина, то отбираются пользователи из справочника ВнешниеПользователи +// +Функция ПользователиДляКопирования(ПользовательИсточник, ТаблицаПользователей, ПользовательВнешний) Экспорт + + СписокПользователей = ?(ПользовательВнешний, СписокВсехВнешнихПользователей(ПользовательИсточник), + СписокВсехПользователей(ПользовательИсточник)); + Для Каждого ПользовательСсылка Из СписокПользователей Цикл + СтрокаТаблицыПользователей = ТаблицаПользователей.Добавить(); + СтрокаТаблицыПользователей.Пользователь = ПользовательСсылка.Пользователь; + КонецЦикла; + ТаблицаПользователей.Сортировать("Пользователь Возр"); + + Возврат ТаблицаПользователей; + +КонецФункции + +Функция СписокВсехПользователей(ПользовательИсточник) + + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь + |ИЗ + | Справочник.Пользователи КАК Пользователи + |ГДЕ + | НЕ Пользователи.Недействителен + | И НЕ Пользователи.Служебный + | И НЕ Пользователи.ПометкаУдаления + | И Пользователи.Ссылка <> &ПользовательИсточник + | И Пользователи.ИдентификаторПользователяИБ <> &ПустойИдентификаторПользователяИБ"; + Запрос.Параметры.Вставить("ПользовательИсточник", ПользовательИсточник); + Запрос.Параметры.Вставить("ПустойИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +Функция СписокВсехВнешнихПользователей(ПользовательИсточник) + + УстановитьПривилегированныйРежим(Истина); + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | Пользователи.Ссылка КАК Пользователь + |ИЗ + | Справочник.ВнешниеПользователи КАК Пользователи + |ГДЕ + | НЕ Пользователи.Недействителен + | И НЕ Пользователи.ПометкаУдаления + | И Пользователи.Ссылка <> &ПользовательИсточник + | И Пользователи.ИдентификаторПользователяИБ <> &ПустойИдентификаторПользователяИБ"; + Запрос.Параметры.Вставить("ПользовательИсточник", ПользовательИсточник); + Запрос.Параметры.Вставить("ПустойИдентификаторПользователяИБ", Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); + Возврат Запрос.Выполнить().Выгрузить(); + +КонецФункции + +// Формирует дерево значений групп пользователей +// +// Параметры +// ДеревоГрупп - ДеревоЗначений - Дерево, которое заполняется группами пользователей +// ПользовательВнешний - Булево - Если Истина, то отбираются пользователи из справочника ГруппыВнешнихПользователей +Процедура ЗаполнитьДеревоГрупп(ДеревоГрупп, ПользовательВнешний) Экспорт + ГруппыМассив = Новый Массив; + МассивГруппРодителей = Новый Массив; + СписокГруппИПолныйСостав = ГруппыПользователей(ПользовательВнешний); + ГруппыПользователейСписок = СписокГруппИПолныйСостав.ГруппыПользователейСписок; + ТаблицаГруппыИСостав = СписокГруппИПолныйСостав.ТаблицаГруппыИСостав; + + ПустаяГруппа = Справочники.ГруппыПользователей.ПустаяСсылка(); + СформироватьОтбор(ГруппыПользователейСписок, ПустаяГруппа, ГруппыМассив); + + Пока ГруппыМассив.Количество() > 0 Цикл + МассивГруппРодителей.Очистить(); + Для Каждого Группа Из ГруппыМассив Цикл + Если Группа.Родитель = ПустаяГруппа Тогда + НоваяСтрокаГрупп = ДеревоГрупп.Строки.Добавить(); + НоваяСтрокаГрупп.Группа = Группа.Ссылка; + СоставГруппы = СоставГруппыПользователей(Группа.Ссылка); + ПолныйСоставГруппы = ПолныйСоставГруппыПользователей(ТаблицаГруппыИСостав, Группа.Ссылка); + НоваяСтрокаГрупп.Состав = СоставГруппы; + НоваяСтрокаГрупп.ПолныйСостав = ПолныйСоставГруппы; + НоваяСтрокаГрупп.Картинка = 3; + Иначе + ГруппаРодитель = ДеревоГрупп.Строки.НайтиСтроки(Новый Структура("Группа", Группа.Родитель), Истина); + НоваяСтрокаПодчиненныхГрупп = ГруппаРодитель[0].Строки.Добавить(); + НоваяСтрокаПодчиненныхГрупп.Группа = Группа.Ссылка; + СоставГруппы = СоставГруппыПользователей(Группа.Ссылка); + ПолныйСоставГруппы = ПолныйСоставГруппыПользователей(ТаблицаГруппыИСостав, Группа.Ссылка); + НоваяСтрокаПодчиненныхГрупп.Состав = СоставГруппы; + НоваяСтрокаПодчиненныхГрупп.ПолныйСостав = ПолныйСоставГруппы; + НоваяСтрокаПодчиненныхГрупп.Картинка = 3; + КонецЕсли; + МассивГруппРодителей.Добавить(Группа.Ссылка); + КонецЦикла; + ГруппыМассив.Очистить(); + Для Каждого Элемент Из МассивГруппРодителей Цикл + СформироватьОтбор(ГруппыПользователейСписок, Элемент, ГруппыМассив); + КонецЦикла; + КонецЦикла; +КонецПроцедуры + +Функция ГруппыПользователей(ПользовательВнешний) + ГруппыПользователейСписок = Новый ТаблицаЗначений; + ГруппыПользователейСписок.Колонки.Добавить("Ссылка"); + ГруппыПользователейСписок.Колонки.Добавить("Родитель"); + + УстановитьПривилегированныйРежим(Истина); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СправочникГруппыПользователей.Ссылка КАК Ссылка, + | СправочникГруппыПользователей.Родитель КАК Родитель + |ИЗ + | Справочник.ГруппыПользователей КАК СправочникГруппыПользователей"; + Если ПользовательВнешний Тогда + Запрос.Текст = СтрЗаменить(Запрос.Текст, "Справочник.ГруппыПользователей", "Справочник.ГруппыВнешнихПользователей"); + КонецЕсли; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СтрокаГруппыПользователей = ГруппыПользователейСписок.Добавить(); + СтрокаГруппыПользователей.Ссылка = Выборка.Ссылка; + СтрокаГруппыПользователей.Родитель = Выборка.Родитель; + КонецЦикла; + + ГруппыПользователейСостав = Новый ТаблицаЗначений; + ГруппыПользователейСостав.Колонки.Добавить("Группа"); + ГруппыПользователейСостав.Колонки.Добавить("Пользователь"); + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | СоставыГруппПользователей.ГруппаПользователей КАК ГруппаПользователей, + | СоставыГруппПользователей.Пользователь КАК Пользователь + |ИЗ + | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей + | + |УПОРЯДОЧИТЬ ПО + | ГруппаПользователей"; + + Выборка = Запрос.Выполнить().Выбрать(); + Пока Выборка.Следующий() Цикл + СтрокаГруппыПользователейСостав = ГруппыПользователейСостав.Добавить(); + СтрокаГруппыПользователейСостав.Группа = Выборка.ГруппаПользователей; + СтрокаГруппыПользователейСостав.Пользователь= Выборка.Пользователь; + КонецЦикла; + + ТаблицаГруппыИСостав = СформироватьПолныйСоставГруппПользователей(ГруппыПользователейСостав); + + Возврат Новый Структура("ГруппыПользователейСписок, ТаблицаГруппыИСостав", + ГруппыПользователейСписок, ТаблицаГруппыИСостав); +КонецФункции + +Функция СформироватьПолныйСоставГруппПользователей(ГруппыПользователейСостав) + ТаблицаГруппыИСостав = Новый ТаблицаЗначений; + ТаблицаГруппыИСостав.Колонки.Добавить("Группа"); + ТаблицаГруппыИСостав.Колонки.Добавить("Состав"); + СоставГруппы = Новый СписокЗначений; + ТекущаяГруппа = Неопределено; + Для Каждого СтрокаСостава Из ГруппыПользователейСостав Цикл + Если ТипЗнч(СтрокаСостава.Группа) = Тип("СправочникСсылка.ГруппыПользователей") + Или ТипЗнч(СтрокаСостава.Группа) = Тип("СправочникСсылка.ГруппыВнешнихПользователей") Тогда + + Если Не ТекущаяГруппа = СтрокаСостава.Группа + И Не ТекущаяГруппа = Неопределено Тогда + СтрокаТаблицаГруппыИСостав = ТаблицаГруппыИСостав.Добавить(); + СтрокаТаблицаГруппыИСостав.Группа = ТекущаяГруппа; + СтрокаТаблицаГруппыИСостав.Состав = СоставГруппы.Скопировать(); + СоставГруппы.Очистить(); + КонецЕсли; + СоставГруппы.Добавить(СтрокаСостава.Пользователь); + + ТекущаяГруппа = СтрокаСостава.Группа; + КонецЕсли; + КонецЦикла; + + СтрокаТаблицаГруппыИСостав = ТаблицаГруппыИСостав.Добавить(); + СтрокаТаблицаГруппыИСостав.Группа = ТекущаяГруппа; + СтрокаТаблицаГруппыИСостав.Состав = СоставГруппы.Скопировать(); + + Возврат ТаблицаГруппыИСостав; +КонецФункции + +Функция СоставГруппыПользователей(ГруппаСсылка) + СоставГруппы = Новый СписокЗначений; + Для Каждого Элемент Из ГруппаСсылка.Состав Цикл + СоставГруппы.Добавить(Элемент.Пользователь); + КонецЦикла; + + Возврат СоставГруппы; +КонецФункции + +Функция ПолныйСоставГруппыПользователей(ТаблицаГруппыИСостав, ГруппаСсылка) + ПолныйСоставГруппы = ТаблицаГруппыИСостав.НайтиСтроки(Новый Структура("Группа", ГруппаСсылка)); + Если Не ПолныйСоставГруппы.Количество() = 0 Тогда + Возврат ПолныйСоставГруппы[0].Состав; + КонецЕсли; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Вспомогательные процедуры и функции + +Функция ПредопределенныеНастройки() + + МассивНастроекФорм = Новый Массив; + МассивНастроекФорм.Добавить("/НастройкиФормы"); + МассивНастроекФорм.Добавить("/НастройкиОкна"); + МассивНастроекФорм.Добавить("/ТекущиеДанные"); + МассивНастроекФорм.Добавить("/НастройкиОкнаВебКлиента"); + + Возврат МассивНастроекФорм; +КонецФункции + +Функция ХранилищеНастроекПоИмени(НазваниеХранилища) + + Если НазваниеХранилища = "ХранилищеПользовательскихНастроекОтчетов" Тогда + Возврат ХранилищеПользовательскихНастроекОтчетов; + ИначеЕсли НазваниеХранилища = "ХранилищеОбщихНастроек" Тогда + Возврат ХранилищеОбщихНастроек; + Иначе + Возврат ХранилищеСистемныхНастроек; + КонецЕсли; + +КонецФункции + +Процедура СформироватьОтбор(ГруппыПользователейСписок, ГруппаСсылка, ГруппыМассив) + ПараметрыОтбора = Новый Структура("Родитель", ГруппаСсылка); + ОтобранныеСтроки = ГруппыПользователейСписок.НайтиСтроки(ПараметрыОтбора); + Для Каждого Элемент Из ОтобранныеСтроки Цикл + ГруппыМассив.Добавить(Элемент); + КонецЦикла; +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/НастройкиПользователей/НастройкиПользователей.mdo b/SSL/src/DataProcessors/НастройкиПользователей/НастройкиПользователей.mdo new file mode 100644 index 000000000..8c08c6849 --- /dev/null +++ b/SSL/src/DataProcessors/НастройкиПользователей/НастройкиПользователей.mdo @@ -0,0 +1,140 @@ + + + + + + + НастройкиПользователей + + ru + Настройки пользователей + + true + DataProcessor.НастройкиПользователей.Form.НастройкиПользователей + + ВыборПользователей + + ru + Выбор пользователей + + + + ru + + + PersonalComputer + MobileDevice + + + НастройкиПользователей + + ru + Настройки пользователей + + + + ru + + + PersonalComputer + MobileDevice + + ru + Настройки пользователей + + + + ОчисткаНастроекПользователей + + ru + Очистка настроек пользователей + + + + ru + + + PersonalComputer + MobileDevice + + + ВыборНастроек + + ru + Выбор настроек пользователя + + + + ru + + + PersonalComputer + MobileDevice + + + КопированиеНастроекПользователей + + ru + Копирование настроек пользователей + + + + ru + + + PersonalComputer + MobileDevice + + + ПредупреждениеОКопированииНастроек + + ru + Предупреждение о копировании настроек + + PersonalComputer + MobileDevice + + + НастройкиПользователя + + ru + Настройки + + FormNavigationPanelSeeAlso + + CatalogRef.ВнешниеПользователи + CatalogRef.Пользователи + + Auto + + ru + Настройки пользователя + + + + КопированиеНастроекПользователей + + ru + Копирование настроек + + ActionsPanelTools + Auto + + ru + Копирование настроек пользователей + + + + ОчисткаНастроекПользователей + + ru + Очистка настроек + + ActionsPanelTools + Auto + + ru + Очистка настроек пользователей + + + diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Form.form index 1b637fdba..06eef3c48 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Form.form @@ -81,7 +81,7 @@ 7 <key>ru</key> - <value>Открыть расписание</value> + <value>Расписание</value> true true @@ -301,9 +301,6 @@ Объект.ПарольАдминистратораИБ - - Объект.ПарольАдминистратораИБПроверка - Объект.ПарольАдминистратораКластера diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl index 455cdfdef..2e6e65951 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРасписания/Module.bsl @@ -90,8 +90,8 @@ &НаКлиентеНаСервереБезКонтекста Функция ЗаписатьНастройки(НастройкиОбновленияКонфигурации) - ОбновлениеКонфигурации.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации); + ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации); ОбновитьПовторноИспользуемыеЗначения(); // сбрысываем кеш для применения настроек - + КонецФункции diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Form.form index f000bf6e2..44d206da5 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/НастройкаРезервнойКопии/Form.form @@ -45,7 +45,7 @@ ru - &Не создавать резервную копию ИБ + Не создавать резервную копию 0 @@ -54,7 +54,7 @@ ru - &Создавать временную резервную копию ИБ + Создать временную резервную копию 1 @@ -63,7 +63,7 @@ ru - Со&здавать резервную копию ИБ и сохранять в указанном каталоге + Создать резервную копию и сохранить в указанном каталоге 2 @@ -166,52 +166,13 @@ АвтоматическийОткат 7 - - ДекорацияКартинка3 - 34 - - <key>ru</key> - <value>Декорация картинка</value> - - true - true - - true - - - ДекорацияКартинка3РасширеннаяПодсказка - 49 - Label - true - true - - Left - - - - ДекорацияКартинка3КонтекстноеМеню - 35 - true - - 5 - true - 2 - true - true - false - - - CommonPicture.Информация32 - - - НадписьВосстанавливать1 36 <key>ru</key> - <value>Система автоматически выполнит откат -при возникновении нештатной ситуации в процессе обновления конфигурации.</value> + <value>Автоматически будет выполнен откат к резервной копии +при возникновении нештатной ситуации в процессе обновления программы.</value> true true @@ -220,7 +181,7 @@ НадписьВосстанавливать1РасширеннаяПодсказка - 50 + 49 Label true true @@ -238,6 +199,9 @@ true true false + + Style.ПоясняющийТекст + Left Center @@ -295,7 +259,7 @@ ВосстанавливатьИнформационнуюБазуРасширеннаяПодсказка - 53 + 52 Label true true @@ -321,44 +285,6 @@ Восстанавливать 26 - - ДекорацияКартинка - 9 - - <key>ru</key> - <value>Декорация картинка</value> - - true - true - - true - - - ДекорацияКартинкаРасширеннаяПодсказка - 57 - Label - true - true - - Left - - - - ДекорацияКартинкаКонтекстноеМеню - 10 - true - - 5 - true - 2 - true - false - - - CommonPicture.Информация32 - - - НадписьВосстанавливать 11 @@ -374,7 +300,7 @@ НадписьВосстанавливатьРасширеннаяПодсказка - 58 + 56 Label true true @@ -392,6 +318,9 @@ true true false + + Style.ПоясняющийТекст + Left Center @@ -408,7 +337,7 @@ ВосстанавливатьРасширеннаяПодсказка - 56 + 55 Label true true @@ -424,44 +353,6 @@ НеВосстанавливать 27 - - ДекорацияКартинка2 - 30 - - <key>ru</key> - <value>Декорация картинка</value> - - true - true - - true - - - ДекорацияКартинка2РасширеннаяПодсказка - 60 - Label - true - true - - Left - - - - ДекорацияКартинка2КонтекстноеМеню - 31 - true - - 5 - true - 2 - true - false - - - CommonPicture.Предупреждение32 - - - НадписьНеВосстанавливать 28 @@ -477,7 +368,7 @@ НадписьНеВосстанавливатьРасширеннаяПодсказка - 61 + 58 Label true true @@ -495,6 +386,9 @@ true true false + + Style.ПоясняющийТекст + Left Center @@ -511,7 +405,7 @@ НеВосстанавливатьРасширеннаяПодсказка - 59 + 57 Label true true @@ -536,7 +430,7 @@ true СтраницыНадписиРучногоОткатаРасширеннаяПодсказка - 55 + 54 Label true true @@ -557,7 +451,7 @@ true ВертикальнаяГруппа1РасширеннаяПодсказка - 52 + 51 Label true true @@ -586,7 +480,7 @@ РучнойОткатРасширеннаяПодсказка - 51 + 50 Label true true @@ -603,94 +497,22 @@ БезОтката 13 - - Группа2 - 14 - - ДекорацияКартинка1 - 15 - - <key>ru</key> - <value>Декорация картинка1</value> - - true - true - - true - - - ДекорацияКартинка1РасширеннаяПодсказка - 64 - Label - true - true - - Left - - - - ДекорацияКартинка1КонтекстноеМеню - 16 - true - - 4 - true - 2 - true - false - - - CommonPicture.Предупреждение32 - - - - - Надпись1 - 17 - - <key>ru</key> - <value>Система не будет выполнять откат при возникновении нештатной ситуации в процессе обновления конфигурации. Рекомендуется выбирать этот вариант, только если выполняется резервное копирование ИБ другими средствами.</value> - - true - true - - true - - - Надпись1РасширеннаяПодсказка - 65 - Label - true - true - - Left - - - - Надпись1КонтекстноеМеню - 18 - true - - Label - true - true - true - false - - Left - Center - 2 - - + + Надпись1 + 17 + + <key>ru</key> + <value>Откат к резервной копии НЕ будет выполняться при возникновении нештатной ситуации в процессе обновления программы. +Рекомендуется выбирать этот вариант, только если резервное копирование ИБ уже выполняется другими средствами.</value> + true true true - false - Группа2РасширеннаяПодсказка - 63 + Надпись1РасширеннаяПодсказка + 60 Label true true @@ -698,13 +520,23 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + Надпись1КонтекстноеМеню + 18 + true + + Label + true + true + true + false + + Style.ПоясняющийТекст + + + Left + Center + 2 true @@ -722,7 +554,7 @@ БезОткатаРасширеннаяПодсказка - 62 + 59 Label true true diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form index c5758a59a..f5f88ca4c 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Обозреватель/Form.form @@ -7,62 +7,6 @@ АдреснаяСтрока 11 - - КнопкаНазад - 10 - true - true - - true - - false - - КнопкаНазадРасширеннаяПодсказка - 14 - Label - true - true - - Left - - - UsualButton - Form.Command.Назад - Normal - Picture - true - true - UserCmds - Auto - - - КнопкаВперед - 9 - true - true - - true - - false - - КнопкаВпередРасширеннаяПодсказка - 15 - Label - true - true - - Left - - - UsualButton - Form.Command.Вперед - Normal - Picture - true - true - UserCmds - Auto - АдресСтраницы 2 @@ -98,6 +42,7 @@ true true + true true true true @@ -106,8 +51,8 @@ - ДополнительныеДействия - 12 + Кнопки + 14 Сформировать 7 @@ -127,7 +72,6 @@ Left - UsualButton Form.Command.Перейти Auto true @@ -136,6 +80,60 @@ UserCmds Auto + + КнопкаНазад + 10 + true + true + + true + + false + + КнопкаНазадРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Form.Command.Назад + Normal + Picture + true + true + UserCmds + Auto + + + КнопкаВперед + 9 + true + true + + true + + false + + КнопкаВпередРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + Form.Command.Вперед + Normal + Picture + true + true + UserCmds + Auto + true true @@ -143,10 +141,11 @@ <key>ru</key> - <value>Дополнительные действия</value> + <value>Кнопки</value> + false - ДополнительныеДействияРасширеннаяПодсказка + КнопкиРасширеннаяПодсказка 18 Label true @@ -155,13 +154,9 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + CommandBar + + Left true @@ -173,9 +168,10 @@ ru Адресная строка + true АдреснаяСтрокаРасширеннаяПодсказка - 13 + 15 Label true true @@ -206,7 +202,7 @@ None HTMLТекстРасширеннаяПодсказка - 20 + 22 Label true true diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Form.form index bd454ab7c..21909c39b 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/ПредупреждениеWMI/Form.form @@ -5,7 +5,7 @@ 3 <key>ru</key> - <value>Невозможно продолжить обновление конфигурации, так как на Вашем компьютере + <value>Невозможно продолжить обновление программы, так как на компьютере не установлен компонент Windows Management Instrumentation (WMI).</value> true @@ -229,7 +229,6 @@
              Form.StandardCommand.Close - PictureAndText true true true diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form index e111ee387..af97c8145 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Form.form @@ -15,7 +15,7 @@ 3 <key>ru</key> - <value>Вас приветствует помощник обновления конфигурации!</value> + <value>Вас приветствует помощник обновления конфигурации</value> true true @@ -24,7 +24,7 @@ НадписьШапкаДоброПожаловатьРасширеннаяПодсказка - 617 + 646 Label true true @@ -60,7 +60,7 @@ 7 <key>ru</key> - <value>Выберите, каким образом система будет получать обновления:</value> + <value>Выберите, каким образом программа будет получать обновления:</value> true true @@ -69,7 +69,7 @@ Декорация3РасширеннаяПодсказка - 618 + 647 Label true true @@ -113,7 +113,7 @@ ДекорацияЧерезИнтернетРасширеннаяПодсказка - 622 + 651 Label true true @@ -153,7 +153,7 @@ ЕстьКартинкаРасширеннаяПодсказка - 621 + 650 Label true true @@ -179,7 +179,7 @@ ДекорацияПустаяКартинкаРасширеннаяПодсказка - 624 + 653 Label true true @@ -216,7 +216,7 @@ НетКартинкиРасширеннаяПодсказка - 623 + 652 Label true true @@ -236,7 +236,7 @@ СтраницыКартинкиИнтернетРасширеннаяПодсказка - 620 + 649 Label true true @@ -266,7 +266,7 @@ НадписьПользовательскийСайтРасширеннаяПодсказка - 626 + 655 Label true true @@ -306,7 +306,7 @@ Right ПропускатьПриветствиеРасширеннаяПодсказка - 627 + 656 Label true true @@ -336,7 +336,7 @@ false Группа8РасширеннаяПодсказка - 625 + 654 Label true true @@ -361,7 +361,7 @@ ГруппаИнтеренетРасширеннаяПодсказка - 619 + 648 Label true true @@ -398,7 +398,7 @@ ДекорацияЧерезИТСРасширеннаяПодсказка - 632 + 661 Label true true @@ -438,7 +438,7 @@ ЕстьКартинка1РасширеннаяПодсказка - 631 + 660 Label true true @@ -464,7 +464,7 @@ ДекорацияПустаяКартинка1РасширеннаяПодсказка - 634 + 663 Label true true @@ -501,7 +501,7 @@ НетКартинки1РасширеннаяПодсказка - 633 + 662 Label true true @@ -521,7 +521,7 @@ СтраницыКартинкиИТСРасширеннаяПодсказка - 630 + 659 Label true true @@ -551,7 +551,7 @@ НадписьИТСРасширеннаяПодсказка - 636 + 665 Label true true @@ -578,7 +578,7 @@ 426 <key>ru</key> - <value>Выберите этот вариант, чтобы выполнить обновление с диска Информационно-Технологического Сопровождения (ИТС)</value> + <value>Выберите этот вариант, чтобы выполнить обновление с диска Информационно-Технологического Сопровождения (ИТС).</value> true true @@ -587,7 +587,7 @@ Декорация2РасширеннаяПодсказка - 637 + 666 Label true true @@ -619,7 +619,7 @@ false Группа19РасширеннаяПодсказка - 635 + 664 Label true true @@ -644,7 +644,7 @@ ГруппаИТСРасширеннаяПодсказка - 629 + 658 Label true true @@ -682,7 +682,7 @@ ДекорацияИзФайлаРасширеннаяПодсказка - 641 + 670 Label true true @@ -722,7 +722,7 @@ ЕстьКартинка2РасширеннаяПодсказка - 640 + 669 Label true true @@ -748,7 +748,7 @@ ДекорацияПустаяКартинка2РасширеннаяПодсказка - 643 + 672 Label true true @@ -785,7 +785,7 @@ НетКартинки2РасширеннаяПодсказка - 642 + 671 Label true true @@ -805,7 +805,7 @@ СтраницыКартинкиФайлРасширеннаяПодсказка - 639 + 668 Label true true @@ -835,7 +835,7 @@ НадписьЛокальныйКаталогРасширеннаяПодсказка - 645 + 674 Label true true @@ -871,7 +871,7 @@ Декорация18РасширеннаяПодсказка - 646 + 675 Label true true @@ -903,7 +903,7 @@ false Группа22РасширеннаяПодсказка - 644 + 673 Label true true @@ -928,7 +928,7 @@ ГруппаФайлРасширеннаяПодсказка - 638 + 667 Label true true @@ -957,7 +957,7 @@ Отступ3РасширеннаяПодсказка - 647 + 676 Label true true @@ -996,7 +996,7 @@ НадписьПроверкиНаличияОбновленияРасширеннаяПодсказка - 649 + 678 Label true true @@ -1031,7 +1031,7 @@ ГиперссылкаПроверятьНаличиеОбновленияПриЗапускеРасширеннаяПодсказка - 650 + 679 Label true true @@ -1065,7 +1065,7 @@ ГруппаПроверкиНаличияОбновленияРасширеннаяПодсказка - 648 + 677 Label true true @@ -1088,7 +1088,7 @@ 16 <key>ru</key> - <value>Нажмите кнопку "Далее" для поиска обновления конфигурации.</value> + <value>Нажмите кнопку "Далее" для поиска обновления программы.</value> true true @@ -1097,7 +1097,7 @@ НадписьСообщениеДалееРасширеннаяПодсказка - 651 + 680 Label true true @@ -1129,7 +1129,7 @@ ДоброПожаловатьРасширеннаяПодсказка - 616 + 645 Label true true @@ -1160,7 +1160,7 @@ НадписьШапкаПодключениеКИнтернетРасширеннаяПодсказка - 653 + 682 Label true true @@ -1204,7 +1204,7 @@ ДекорацияКартинкаРасширеннаяПодсказка - 655 + 684 Label true true @@ -1228,184 +1228,21 @@ - - Декорация6 - 27 - - <key>ru</key> - <value>Системе не удалось подключиться к сети Интернет, чтобы получить информацию об обновлении. Возможные причины: -• Нет подключения к Интернету; -• На веб-узле возникли неполадки; -• Брандмауэр блокирует попытки программы подключиться к Интернету.</value> - - true - true - - true - - - Декорация6РасширеннаяПодсказка - 656 - Label - true - true - - Left - - - - Декорация6КонтекстноеМеню - 28 - true - - Label - true - 3 - true - false - - Left - - - true - true - - true - - - Группа3РасширеннаяПодсказка - 654 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - Группа1 - 611 - - НадписьНастройкаПараметровПрокси - 436 - - <key>ru</key> - <value>Настройка параметров прокси</value> - - true - true - - true - - - НадписьНастройкаПараметровПроксиРасширеннаяПодсказка - 658 - Label - true - true - - Left - - - - НадписьНастройкаПараметровПроксиКонтекстноеМеню - 437 - true - - Label - true - true - false - - - Click - НадписьНастройкаПараметровПроксиНажатие - - true - Left - - - true - true - - true - - - Группа1РасширеннаяПодсказка - 657 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - NormalSeparation - true - true - Auto - Auto - - - - ПанельЖурналРегистрации3 - 569 - - Картинка10 - 570 - true - true - - true - - - Картинка10РасширеннаяПодсказка - 660 - Label - true - true - - Left - - - - Картинка10КонтекстноеМеню - 571 - true - - 6 - true - 2 - true - false - - - CommonPicture.Информация32 - - - ВертикальнаяГруппаНадписиЖР2 572 - Декорация7 - 30 + Декорация6 + 27 <key>ru</key> - <value>Подробности см. в Журнале регистрации. Рекомендуется обратиться к системному администратору.</value> + <value>Не удалось подключиться к сети Интернет, чтобы получить информацию об обновлении. +Возможные причины: +• Нет подключения к Интернету; +• На веб-узле возникли неполадки; +• Брандмауэр или другое промежуточное ПО (антивирусы и т.п.) блокируют + попытки программы подключиться к Интернету; +• Подключение к Интернету выполняется через прокси-сервер, но его параметры не заданы в программе.</value> true true @@ -1413,8 +1250,8 @@ true - Декорация7РасширеннаяПодсказка - 662 + Декорация6РасширеннаяПодсказка + 686 Label true true @@ -1423,34 +1260,107 @@ - Декорация7КонтекстноеМеню - 31 + Декорация6КонтекстноеМеню + 28 true Label true - 1 + 7 true false Left - - НадписьПерейтиВЖурналРегистрации - 503 - - <key>ru</key> - <value>Перейти в журнал регистрации</value> - + + Группа4 + 622 + + Декорация7 + 30 + + <key>ru</key> + <value>Технические подробности см. в журнале регистрации.</value> + + true + true + + true + + + Декорация7РасширеннаяПодсказка + 688 + Label + true + true + + Left + + + + Декорация7КонтекстноеМеню + 31 + true + + Label + true + 1 + true + false + + Left + + + + НадписьПерейтиВЖурналРегистрации + 503 + + <key>ru</key> + <value>Перейти в журнал регистрации</value> + + true + true + + true + + + НадписьПерейтиВЖурналРегистрацииРасширеннаяПодсказка + 689 + Label + true + true + + Left + + + + НадписьПерейтиВЖурналРегистрацииКонтекстноеМеню + 504 + true + + Label + true + true + true + false + + + Click + НадписьПерейтиВЖурналРегистрацииНажатие + + true + Left + + true true true - НадписьПерейтиВЖурналРегистрацииРасширеннаяПодсказка - 663 + Группа4РасширеннаяПодсказка + 687 Label true true @@ -1458,23 +1368,13 @@ Left - - НадписьПерейтиВЖурналРегистрацииКонтекстноеМеню - 504 - true - - Label - true - true - true - false - - - Click - НадписьПерейтиВЖурналРегистрацииНажатие - - true - Left + UsualGroup + + Auto + true + true + Auto + Auto true @@ -1485,7 +1385,7 @@ false ВертикальнаяГруппаНадписиЖР2РасширеннаяПодсказка - 661 + 685 Label true true @@ -1508,10 +1408,9 @@ true - false - ПанельЖурналРегистрации3РасширеннаяПодсказка - 659 + Группа3РасширеннаяПодсказка + 683 Label true true @@ -1521,6 +1420,61 @@ UsualGroup + Auto + true + true + Auto + Auto + + + + ГруппаНастроитьПараметрыПроксиСервера + 611 + + НастроитьПараметрыПроксиСервера + 620 + true + true + + true + + + НастроитьПараметрыПроксиСервераРасширеннаяПодсказка + 691 + Label + true + true + + Left + + + UsualButton + Form.Command.НастроитьПараметрыПроксиСервера + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаНастроитьПараметрыПроксиСервераРасширеннаяПодсказка + 690 + Label + true + true + + Left + + + UsualGroup + + Vertical Auto NormalSeparation true @@ -1539,7 +1493,7 @@ Отступ9РасширеннаяПодсказка - 664 + 692 Label true true @@ -1566,7 +1520,7 @@ 39 <key>ru</key> - <value>Нажмите кнопку "Далее", чтобы повторить поиск обновления конфигурации на пользовательском сайте.</value> + <value>Нажмите кнопку "Далее", чтобы повторить поиск обновления программы на пользовательском сайте.</value> true true @@ -1575,7 +1529,7 @@ НадписьДалееРасширеннаяПодсказка - 665 + 693 Label true true @@ -1607,7 +1561,7 @@ ПодключениеКИнтернетРасширеннаяПодсказка - 652 + 681 Label true true @@ -1638,7 +1592,7 @@ Декорация9РасширеннаяПодсказка - 667 + 695 Label true true @@ -1684,7 +1638,7 @@ Декорация10РасширеннаяПодсказка - 668 + 696 Label true true @@ -1728,7 +1682,7 @@ КодПользователяСервераОбновленийРасширеннаяПодсказка - 671 + 699 Label true true @@ -1774,7 +1728,7 @@ ПарольСервераОбновленийРасширеннаяПодсказка - 673 + 701 Label true true @@ -1811,7 +1765,7 @@ Группа2РасширеннаяПодсказка - 670 + 698 Label true true @@ -1846,7 +1800,7 @@ НадписьИнформацияОПолученииДоступаРасширеннаяПодсказка - 676 + 704 Label true true @@ -1891,7 +1845,7 @@ Right ЗапомнитьПарольСервераОбновленийРасширеннаяПодсказка - 677 + 705 Label true true @@ -1918,7 +1872,7 @@ Группа5РасширеннаяПодсказка - 675 + 703 Label true true @@ -1947,7 +1901,7 @@ ГруппаДоступНаПользовательскийСайтРасширеннаяПодсказка - 669 + 697 Label true true @@ -1976,7 +1930,7 @@ НадписьТехническаяИнформацияОбОшибкеРасширеннаяПодсказка - 679 + 707 Label true true @@ -2010,7 +1964,7 @@ ДекорацияКартинка1РасширеннаяПодсказка - 681 + 709 Label true true @@ -2045,8 +1999,10 @@ 54 <key>ru</key> - <value>Системе не удалось подключиться к пользовательскому сайту с указанными кодом и паролем. -Пожалуйста, убедитесь, что:</value> + <value>Не удалось подключиться к пользовательскому сайту с указанными кодом и паролем. +Пожалуйста, убедитесь, что: +• продлена подписка на Информационно-технологическое сопровождение (ИТС) +• код пользователя и пароль указаны верно</value> true true @@ -2055,7 +2011,7 @@ Декорация11РасширеннаяПодсказка - 684 + 712 Label true true @@ -2076,41 +2032,6 @@ Left - - Декорация12 - 56 - - <key>ru</key> - <value>• продлена подписка на Информационно-технологическое сопровождение (ИТС)</value> - - true - true - - true - - - Декорация12РасширеннаяПодсказка - 685 - Label - true - true - - Left - - - - Декорация12КонтекстноеМеню - 57 - true - - Label - true - true - false - - Left - - НадписьКакОформитьПодпискуИТС 59 @@ -2125,7 +2046,7 @@ НадписьКакОформитьПодпискуИТСРасширеннаяПодсказка - 686 + 713 Label true true @@ -2151,78 +2072,6 @@ Left - - Декорация14 - 61 - - <key>ru</key> - <value>• код пользователя и пароль указаны верно</value> - - true - true - - true - - - Декорация14РасширеннаяПодсказка - 687 - Label - true - true - - Left - - - - Декорация14КонтекстноеМеню - 62 - true - - Label - true - true - false - - Left - - - - ТехническаяИнформацияОбОшибке - 379 - true - true - - true - - - Объект.ТехническаяИнформацияОбОшибке - - None - - ТехническаяИнформацияОбОшибкеРасширеннаяПодсказка - 688 - Label - true - true - - Left - - - - ТехническаяИнформацияОбОшибкеКонтекстноеМеню - 380 - true - - LabelField - Enter - true - Left - true - - true - true - - true true @@ -2234,7 +2083,7 @@ ПРОФРасширеннаяПодсказка - 683 + 711 Label true true @@ -2256,7 +2105,7 @@ 71 <key>ru</key> - <value>Системе не удалось подключиться к пользовательскому сайту с указанными кодом и паролем. + <value>Не удалось подключиться к пользовательскому сайту с указанными кодом и паролем. Пожалуйста, убедитесь, что код пользователя и пароль указаны верно.</value> true @@ -2266,7 +2115,7 @@ Декорация15РасширеннаяПодсказка - 691 + 715 Label true true @@ -2303,7 +2152,7 @@ Декорация16РасширеннаяПодсказка - 692 + 716 Label true true @@ -2339,7 +2188,7 @@ НадписьПодробнееОбИТСРасширеннаяПодсказка - 693 + 717 Label true true @@ -2367,43 +2216,6 @@ Left - - ТехническаяИнформацияОбОшибке1 - 381 - true - true - - true - - - Объект.ТехническаяИнформацияОбОшибке - - None - - ТехническаяИнформацияОбОшибке1РасширеннаяПодсказка - 694 - Label - true - true - - Left - - - - ТехническаяИнформацияОбОшибке1КонтекстноеМеню - 382 - true - - LabelField - Enter - true - Left - true - - true - true - - true true @@ -2415,7 +2227,7 @@ БазоваяРасширеннаяПодсказка - 690 + 714 Label true true @@ -2440,7 +2252,7 @@ ГруппаДоступаНаСайтРасширеннаяПодсказка - 682 + 710 Label true true @@ -2464,7 +2276,7 @@ ПанельОшибкаПодключенияРасширеннаяПодсказка - 680 + 708 Label true true @@ -2484,17 +2296,21 @@ ПанельЖурналРегистрации 544 - - Картинка8 - 545 + + ТехническаяИнформацияОбОшибке + 379 true true true + + Объект.ТехническаяИнформацияОбОшибке + + None - Картинка8РасширеннаяПодсказка - 697 + ТехническаяИнформацияОбОшибкеРасширеннаяПодсказка + 719 Label true true @@ -2503,30 +2319,29 @@ - Картинка8КонтекстноеМеню - 546 + ТехническаяИнформацияОбОшибкеКонтекстноеМеню + 380 true - 6 - true - 2 - true - false - - - CommonPicture.Информация32 - + LabelField + Enter + true + Left + true + + true + true - ВертикальнаяГруппаНадписиЖР - 549 + Группа6 + 623 НадписьИнфоЖР 550 <key>ru</key> - <value>Подробности см. в Журнале регистрации. Рекомендуется обратиться к системному администратору.</value> + <value>Технические подробности см. в журнале регистрации.</value> true true @@ -2535,7 +2350,7 @@ НадписьИнфоЖРРасширеннаяПодсказка - 699 + 722 Label true true @@ -2571,7 +2386,7 @@ НадписьОткрытьЖурналРегистрации1РасширеннаяПодсказка - 700 + 723 Label true true @@ -2605,10 +2420,9 @@ true - false - ВертикальнаяГруппаНадписиЖРРасширеннаяПодсказка - 698 + Группа6РасширеннаяПодсказка + 721 Label true true @@ -2618,7 +2432,6 @@ UsualGroup - Vertical Auto true true @@ -2634,7 +2447,7 @@ false ПанельЖурналРегистрацииРасширеннаяПодсказка - 696 + 718 Label true true @@ -2644,6 +2457,7 @@ UsualGroup + Vertical Auto true true @@ -2661,7 +2475,7 @@ Декорация66РасширеннаяПодсказка - 701 + 724 Label true true @@ -2688,7 +2502,7 @@ 79 <key>ru</key> - <value>Нажмите кнопку "Далее", чтобы продолжить обновление конфигурации с пользовательского сайта, + <value>Нажмите кнопку "Далее", чтобы повторить получение обновления с пользовательского сайта, или выберите "Назад", чтобы повторить поиск обновления в других источниках.</value> true @@ -2698,7 +2512,7 @@ НадписьДалее2РасширеннаяПодсказка - 702 + 725 Label true true @@ -2730,7 +2544,7 @@ ПодключениеКСайтуРасширеннаяПодсказка - 666 + 694 Label true true @@ -2761,7 +2575,7 @@ НадписьШапкаМестоположениеДискаИТСРасширеннаяПодсказка - 704 + 727 Label true true @@ -2813,7 +2627,7 @@ ИсточникДискаИТСРасширеннаяПодсказка - 705 + 728 Label true true @@ -2880,7 +2694,7 @@ ДискИТСРасширеннаяПодсказка - 710 + 733 Label true true @@ -2903,8 +2717,10 @@ StartChoice ДискИТСНачалоВыбора + 30 true true + false true true true @@ -2924,7 +2740,7 @@ УказаниеКаталогаРасширеннаяПодсказка - 709 + 732 Label true true @@ -2955,7 +2771,7 @@ Декорация21РасширеннаяПодсказка - 713 + 736 Label true true @@ -2985,7 +2801,7 @@ ИнфНадписьИТСРасширеннаяПодсказка - 712 + 735 Label true true @@ -3010,7 +2826,7 @@ СтраницыНаличияДискаИТСРасширеннаяПодсказка - 708 + 731 Label true true @@ -3030,7 +2846,7 @@ Отступ5РасширеннаяПодсказка - 707 + 730 Label true true @@ -3059,7 +2875,7 @@ Отступ6РасширеннаяПодсказка - 714 + 737 Label true true @@ -3086,7 +2902,7 @@ 471 <key>ru</key> - <value>Нажмите кнопку "Далее" для поиска обновления конфигурации.</value> + <value>Нажмите кнопку "Далее" для поиска обновления программы на диске ИТС.</value> true true @@ -3095,7 +2911,7 @@ НадписьСообщениеДалее4РасширеннаяПодсказка - 715 + 738 Label true true @@ -3127,7 +2943,7 @@ МестоположениеДискаИТСРасширеннаяПодсказка - 703 + 726 Label true true @@ -3158,7 +2974,7 @@ НадписьШапкаФайлОбновленияРасширеннаяПодсказка - 717 + 740 Label true true @@ -3207,7 +3023,7 @@ ПереключательНуженФайлОбновленияРасширеннаяПодсказка - 718 + 741 Label true true @@ -3265,7 +3081,7 @@ None ПолеФайлОбновленияРасширеннаяПодсказка - 721 + 744 Label true true @@ -3288,8 +3104,10 @@ StartChoice ПолеФайлОбновленияНачалоВыбора + 50 true true + false true true true @@ -3309,7 +3127,7 @@ ОтступРасширеннаяПодсказка - 720 + 743 Label true true @@ -3341,7 +3159,7 @@ Картинка5РасширеннаяПодсказка - 724 + 747 Label true true @@ -3376,7 +3194,7 @@ 291 <key>ru</key> - <value>Основная конфигурация отличается от конфигурации информационной базы данных! + <value>Основная конфигурация отличается от конфигурации информационной базы данных. Рекомендуется провести обновление из основной конфигурации.</value> true @@ -3386,7 +3204,7 @@ НадписьКонфигурацияИзмененаРасширеннаяПодсказка - 727 + 750 Label true true @@ -3418,9 +3236,10 @@ ru Есть изменения + true ЕстьИзмененияРасширеннаяПодсказка - 726 + 749 Label true true @@ -3451,7 +3270,7 @@ НадписьНетИзмененийРасширеннаяПодсказка - 729 + 752 Label true true @@ -3483,9 +3302,10 @@ ru Нет изменений + true НетИзмененийРасширеннаяПодсказка - 728 + 751 Label true true @@ -3508,9 +3328,10 @@ ru Страницы надписи измененной конфигурации + true СтраницыНадписиИзмененнойКонфигурацииРасширеннаяПодсказка - 725 + 748 Label true true @@ -3535,7 +3356,7 @@ false ПанельОбновлениеИзОсновнойКонфигурацииРасширеннаяПодсказка - 723 + 746 Label true true @@ -3563,7 +3384,7 @@ НадписьОтступРасширеннаяПодсказка - 730 + 753 Label true true @@ -3590,7 +3411,7 @@ 293 <key>ru</key> - <value>Нажмите кнопку "Далее", чтобы продолжить обновление конфигурации.</value> + <value>Нажмите кнопку "Далее", чтобы продолжить обновление программы.</value> true true @@ -3599,7 +3420,7 @@ Декорация51РасширеннаяПодсказка - 731 + 754 Label true true @@ -3631,7 +3452,7 @@ ФайлОбновленияРасширеннаяПодсказка - 716 + 739 Label true true @@ -3653,7 +3474,7 @@ 116 <key>ru</key> - <value>Обнаружено обновление конфигурации!</value> + <value>Обнаружено обновление конфигурации</value> true true @@ -3662,7 +3483,7 @@ НадписьШапкаДоступноеОбновлениеРасширеннаяПодсказка - 733 + 756 Label true true @@ -3709,7 +3530,7 @@ ДекорацияКартинка2РасширеннаяПодсказка - 736 + 759 Label true true @@ -3750,7 +3571,7 @@ НадписьДоступноеОбновлениеРасширеннаяПодсказка - 738 + 761 Label true true @@ -3766,8 +3587,16 @@ Label true true + true true false + + System.DefaultGUIFont + true + false + false + false + Left Center @@ -3787,7 +3616,7 @@ НадписьИнформацияОбОбновленииРасширеннаяПодсказка - 739 + 762 Label true true @@ -3814,6 +3643,111 @@ Center + + Группа11 + 95 + + Декорация19 + 91 + + <key>ru</key> + <value>Размер обновления:</value> + + true + true + + true + + + Декорация19РасширеннаяПодсказка + 764 + Label + true + true + + Left + + + + Декорация19КонтекстноеМеню + 92 + true + + Label + true + true + false + + Left + + + + НадписьРазмерОбновления + 93 + + <key>ru</key> + <value><Мбайт></value> + + true + true + + true + + + НадписьРазмерОбновленияРасширеннаяПодсказка + 765 + Label + true + true + + Left + + + + НадписьРазмерОбновленияКонтекстноеМеню + 94 + true + + Label + true + true + true + false + + System.DefaultGUIFont + true + false + false + false + + + Left + + + true + true + + true + + + Группа11РасширеннаяПодсказка + 763 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + true true @@ -3822,7 +3756,7 @@ false Группа10РасширеннаяПодсказка - 737 + 760 Label true true @@ -3849,9 +3783,10 @@ ru Группа номер версии + true ГруппаНомерВерсииРасширеннаяПодсказка - 735 + 758 Label true true @@ -3868,103 +3803,40 @@ Auto - - Группа11 - 95 - - Декорация19 - 91 - - <key>ru</key> - <value>Размер обновления:</value> - - true - true - - true - - - Декорация19РасширеннаяПодсказка - 741 - Label - true - true - - Left - - - - Декорация19КонтекстноеМеню - 92 - true - - Label - true - true - false - - Left - - - - НадписьРазмерОбновления - 93 - - <key>ru</key> - <value><Мбайт></value> - - true - true - - true - - - НадписьРазмерОбновленияРасширеннаяПодсказка - 742 - Label - true - true - - Left - - - - НадписьРазмерОбновленияКонтекстноеМеню - 94 - true - - Label - true - true - false - - Left - - - true - true - - true - - - Группа11РасширеннаяПодсказка - 740 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto + true + true + + true + + + <key>ru</key> + <value>Информация о доступном обновлении</value> + + + ИнформацияОДоступномОбновленииРасширеннаяПодсказка + 757 + Label + true + true + + Left - + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + Группа1 + 621 Группа12 98 @@ -3973,7 +3845,7 @@ 96 <key>ru</key> - <value>Текущая версия конфигурации:</value> + <value>Текущая версия программы:</value> true true @@ -3982,7 +3854,7 @@ Декорация20РасширеннаяПодсказка - 744 + 768 Label true true @@ -4017,7 +3889,7 @@ НадписьТекущаяКонфигурацияРасширеннаяПодсказка - 745 + 769 Label true true @@ -4045,7 +3917,7 @@ Группа12РасширеннаяПодсказка - 743 + 767 Label true true @@ -4076,7 +3948,7 @@ НадписьОписаниеКонфигурацииРасширеннаяПодсказка - 746 + 770 Label true true @@ -4102,15 +3974,9 @@ true - - <key>ru</key> - <value>Информация о доступном обновлении</value> - - 80 - false - ИнформацияОДоступномОбновленииРасширеннаяПодсказка - 734 + Группа1РасширеннаяПодсказка + 766 Label true true @@ -4122,10 +3988,9 @@ Vertical Auto - StrongSeparation + NormalSeparation true true - auto Auto Auto @@ -4143,7 +4008,7 @@ ДекорацияКартинка21РасширеннаяПодсказка - 748 + 772 Label true true @@ -4184,7 +4049,7 @@ Декорация22РасширеннаяПодсказка - 750 + 774 Label true true @@ -4219,7 +4084,7 @@ НадписьПорядокОбновленияРасширеннаяПодсказка - 751 + 775 Label true true @@ -4252,7 +4117,7 @@ Группа14РасширеннаяПодсказка - 749 + 773 Label true true @@ -4281,7 +4146,7 @@ ПанельПорядокОбновленияРасширеннаяПодсказка - 747 + 771 Label true true @@ -4309,7 +4174,7 @@ Отступ10РасширеннаяПодсказка - 752 + 776 Label true true @@ -4348,7 +4213,7 @@ НадписьПроверкиНаличияОбновления1РасширеннаяПодсказка - 754 + 778 Label true true @@ -4383,7 +4248,7 @@ ГиперссылкаПроверятьНаличиеОбновленияПриЗапуске1РасширеннаяПодсказка - 755 + 779 Label true true @@ -4417,7 +4282,7 @@ ГруппаПроверкиНаличияОбновления1РасширеннаяПодсказка - 753 + 777 Label true true @@ -4446,7 +4311,7 @@ 113 <key>ru</key> - <value>Нажмите кнопку "Далее" для получения обновления конфигурации с пользовательского сайта.</value> + <value>Нажмите кнопку "Далее" для получения обновления программы с пользовательского сайта.</value> true true @@ -4455,7 +4320,7 @@ Декорация23РасширеннаяПодсказка - 758 + 782 Label true true @@ -4483,7 +4348,7 @@ Интернет1РасширеннаяПодсказка - 757 + 781 Label true true @@ -4505,7 +4370,7 @@ 369 <key>ru</key> - <value>Нажмите кнопку "Далее" для выбора режима обновления конфигурации.</value> + <value>Нажмите кнопку "Далее" для выбора способа обновления программы.</value> true true @@ -4514,7 +4379,7 @@ Декорация63РасширеннаяПодсказка - 760 + 784 Label true true @@ -4542,7 +4407,7 @@ ИТС1РасширеннаяПодсказка - 759 + 783 Label true true @@ -4567,7 +4432,7 @@ ПанельПереходаНаСледующийШагРасширеннаяПодсказка - 756 + 780 Label true true @@ -4591,7 +4456,7 @@ ДоступноеОбновлениеРасширеннаяПодсказка - 732 + 755 Label true true @@ -4622,7 +4487,7 @@ ЗаголовокОбновленияРасширеннаяПодсказка - 762 + 786 Label true true @@ -4675,7 +4540,7 @@ Картинка26РасширеннаяПодсказка - 767 + 791 Label true true @@ -4705,7 +4570,7 @@ 126 <key>ru</key> - <value>У Вас установлена последняя версия конфигурации!</value> + <value>Установлена последняя версия программы.</value> true true @@ -4714,7 +4579,7 @@ НадписьУВасПоследняяВерсияРасширеннаяПодсказка - 768 + 792 Label true true @@ -4745,7 +4610,7 @@ false ГоризонтальнаяГруппа12РасширеннаяПодсказка - 766 + 790 Label true true @@ -4774,7 +4639,7 @@ false ОбновлениеНеТребуетсяРасширеннаяПодсказка - 765 + 789 Label true true @@ -4803,7 +4668,7 @@ Картинка24РасширеннаяПодсказка - 771 + 795 Label true true @@ -4835,7 +4700,7 @@ 129 <key>ru</key> - <value>Для этой версии конфигурации обновление не обнаружено. </value> + <value>Для этой версии программы обновление не обнаружено. </value> true true @@ -4844,7 +4709,7 @@ НадписьОбновлениеНеОбнаруженоРасширеннаяПодсказка - 773 + 797 Label true true @@ -4884,7 +4749,7 @@ НадписьНеобходимыеДискиИТСРасширеннаяПодсказка - 774 + 798 Label true true @@ -4931,7 +4796,7 @@ НадписьПереченьРелизовНаДискахИТСРасширеннаяПодсказка - 776 + 800 Label true true @@ -4970,7 +4835,7 @@ false ГруппаПодходящихОбновленийИТСРасширеннаяПодсказка - 772 + 796 Label true true @@ -4996,7 +4861,7 @@ false ГоризонтальнаяГруппа16РасширеннаяПодсказка - 770 + 794 Label true true @@ -5025,7 +4890,7 @@ false ОбновлениеНеОбнаруженоРасширеннаяПодсказка - 769 + 793 Label true true @@ -5055,7 +4920,7 @@ Картинка14РасширеннаяПодсказка - 779 + 803 Label true true @@ -5094,7 +4959,7 @@ НадписьВключенаВозможностьИзмененийРасширеннаяПодсказка - 780 + 804 Label true true @@ -5126,7 +4991,7 @@ false ГоризонтальнаяГруппа3РасширеннаяПодсказка - 778 + 802 Label true true @@ -5155,7 +5020,132 @@ false ВключенаВозможностьИзмененийРасширеннаяПодсказка - 777 + 801 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ОбновлениеПроизводитсяВГлавномУзле + 614 + + ГоризонтальнаяГруппа13 + 615 + + Картинка27 + 616 + true + true + + true + + + Картинка27РасширеннаяПодсказка + 807 + Label + true + true + + Left + + + + Картинка27КонтекстноеМеню + 617 + true + + 6 + true + 2 + true + false + false + + + CommonPicture.Информация32 + + + + + НадписьОбновлениеКонфигурацииВыполняетсяПриОбменеДаннымиСГлавнымУзлом + 618 + + <key>ru</key> + <value>Обновление программы выполняется при обмене данными с "%1".</value> + + true + true + + true + + + НадписьОбновлениеКонфигурацииВыполняетсяПриОбменеДаннымиСГлавнымУзломРасширеннаяПодсказка + 808 + Label + true + true + + Left + + + + НадписьОбновлениеКонфигурацииВыполняетсяПриОбменеДаннымиСГлавнымУзломКонтекстноеМеню + 619 + true + + Label + true + true + true + false + + Left + Center + + + true + true + + true + + false + + ГоризонтальнаяГруппа13РасширеннаяПодсказка + 806 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + false + + ОбновлениеПроизводитсяВГлавномУзлеРасширеннаяПодсказка + 805 Label true true @@ -5181,7 +5171,7 @@ false ПанельИнформацияОбОбновленииРасширеннаяПодсказка - 764 + 788 Label true true @@ -5202,7 +5192,7 @@ 134 <key>ru</key> - <value>Текущая версия конфигурации:</value> + <value>Текущая версия программы:</value> true true @@ -5211,7 +5201,7 @@ Декорация30РасширеннаяПодсказка - 782 + 810 Label true true @@ -5246,7 +5236,7 @@ НадписьВерсияТекущейКонфигурацииРасширеннаяПодсказка - 783 + 811 Label true true @@ -5281,7 +5271,7 @@ НадписьВерсияДляОбновленияРасширеннаяПодсказка - 784 + 812 Label true true @@ -5314,7 +5304,7 @@ false ГруппаТекущаяВерсияРасширеннаяПодсказка - 781 + 809 Label true true @@ -5345,7 +5335,7 @@ НадписьОписаниеТекущейКонфигурацииРасширеннаяПодсказка - 785 + 813 Label true true @@ -5379,7 +5369,7 @@ false ГруппаРезультатПоискаОбновленияРасширеннаяПодсказка - 763 + 787 Label true true @@ -5416,7 +5406,7 @@ Декорация4РасширеннаяПодсказка - 787 + 815 Label true true @@ -5452,7 +5442,7 @@ false КнопкаПроверитьДискИТСРасширеннаяПодсказка - 788 + 816 Label true true @@ -5476,7 +5466,7 @@ ГруппаПроверкиДискаИТСРасширеннаяПодсказка - 786 + 814 Label true true @@ -5504,7 +5494,7 @@ Отступ7РасширеннаяПодсказка - 789 + 817 Label true true @@ -5532,7 +5522,7 @@ <key>ru</key> <value>Нажмите кнопку "Закрыть" для выхода из помощника обновления конфигурации, -или выберите "Назад", чтобы повторить поиск обновления по другим источникам.</value> +или выберите "Назад", чтобы повторить поиск обновления в других источниках.</value> true true @@ -5541,7 +5531,7 @@ НадписьСообщениеДалее1РасширеннаяПодсказка - 790 + 818 Label true true @@ -5573,7 +5563,7 @@ ОбновленияНеОбнаруженоРасширеннаяПодсказка - 761 + 785 Label true true @@ -5604,7 +5594,7 @@ НадписьШапкаДлительнаяОперацияРасширеннаяПодсказка - 792 + 820 Label true true @@ -5654,7 +5644,7 @@ ДекорацияКартинка33РасширеннаяПодсказка - 796 + 824 Label true true @@ -5667,14 +5657,14 @@ 148 true - 4 + 7 true - 2 + 3 true false - CommonPicture.Информация32 + CommonPicture.ДлительнаяОперация48 @@ -5683,7 +5673,7 @@ 149 <key>ru</key> - <value>Процесс получения обновления конфигурации может занять от нескольких минут до нескольких часов в зависимости от размера обновления, скорости подключения к Интернету и производительности компьютера.</value> + <value>Получение обновления программы может занять от нескольких минут до нескольких часов в зависимости от размера обновления, скорости подключения к Интернету и производительности компьютера.</value> true true @@ -5692,7 +5682,7 @@ Декорация34РасширеннаяПодсказка - 797 + 825 Label true true @@ -5709,6 +5699,7 @@ true true true + true false Left @@ -5724,7 +5715,7 @@ false Группа18РасширеннаяПодсказка - 795 + 823 Label true true @@ -5752,7 +5743,7 @@ ИнтернетРасширеннаяПодсказка - 794 + 822 Label true true @@ -5779,7 +5770,7 @@ ДекорацияКартинка35РасширеннаяПодсказка - 799 + 827 Label true true @@ -5808,7 +5799,7 @@ 156 <key>ru</key> - <value>Копирование файлов обновления конфигурации может занять несколько минут.</value> + <value>Копирование файлов обновления программы может занять несколько минут.</value> true true @@ -5817,7 +5808,7 @@ Декорация36РасширеннаяПодсказка - 800 + 828 Label true true @@ -5832,9 +5823,9 @@ Label true + 2 true true - true false Left @@ -5853,7 +5844,7 @@ false ИТСРасширеннаяПодсказка - 798 + 826 Label true true @@ -5879,7 +5870,7 @@ false ПанельОжиданиеДлительнойОперацииРасширеннаяПодсказка - 793 + 821 Label true true @@ -5909,7 +5900,7 @@ НадписьПрогрессРасширеннаяПодсказка - 802 + 830 Label true true @@ -5924,7 +5915,6 @@ Label true - 10 true false @@ -5943,7 +5933,7 @@ ГруппаПрогрессРасширеннаяПодсказка - 801 + 829 Label true true @@ -5973,7 +5963,7 @@ ДлительнаяОперацияРасширеннаяПодсказка - 791 + 819 Label true true @@ -5995,7 +5985,7 @@ 161 <key>ru</key> - <value>Все готово к обновлению конфигурации!</value> + <value>Установка обновления</value> true true @@ -6004,7 +5994,7 @@ НадписьШапкаВыборРежимаОбнФайлРасширеннаяПодсказка - 804 + 832 Label true true @@ -6042,11 +6032,11 @@ ВсеГотово 164 - Декорация38 + НадписьДляОбновленияПотребуетсяПерезагрузка 165 <key>ru</key> - <value>Для продолжения необходимо перезапустить "1С:Предприятие". </value> + <value>Для установки обновления потребуется перезапустить программу. </value> true true @@ -6054,8 +6044,8 @@ true - Декорация38РасширеннаяПодсказка - 807 + НадписьДляОбновленияПотребуетсяПерезагрузкаРасширеннаяПодсказка + 835 Label true true @@ -6064,12 +6054,13 @@ - Декорация38КонтекстноеМеню + НадписьДляОбновленияПотребуетсяПерезагрузкаКонтекстноеМеню 166 true Label true + 2 true false @@ -6087,7 +6078,7 @@ ВсеГотовоРасширеннаяПодсказка - 806 + 834 Label true true @@ -6114,7 +6105,7 @@ Декорация8РасширеннаяПодсказка - 809 + 837 Label true true @@ -6127,7 +6118,7 @@ 535 true - 4 + 5 true 2 true @@ -6155,7 +6146,7 @@ Декорация39РасширеннаяПодсказка - 811 + 839 Label true true @@ -6190,7 +6181,7 @@ НадписьПорядокОбновления1РасширеннаяПодсказка - 812 + 840 Label true true @@ -6223,7 +6214,7 @@ ВертикальнаяГруппа1РасширеннаяПодсказка - 810 + 838 Label true true @@ -6252,7 +6243,7 @@ ВсеГотовоПорядокОбновленияРасширеннаяПодсказка - 808 + 836 Label true true @@ -6276,7 +6267,7 @@ ПанельВсеГотовоФайлРасширеннаяПодсказка - 805 + 833 Label true true @@ -6289,6 +6280,65 @@ Auto + + ПереключательОбновленияФайл + 612 + true + true + + true + + + Объект.РежимОбновления + + None + + OnChange + ПереключательОбновленияПриИзменении + + + ПереключательОбновленияФайлРасширеннаяПодсказка + 841 + Label + true + true + + Left + + + + ПереключательОбновленияФайлКонтекстноеМеню + 613 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Выполнить установку обновления прямо сейчас + + + 0 + + + + + ru + Напомнить при завершении работы + + + 1 + + + Vertical + + ГруппаСоединений 179 @@ -6302,7 +6352,7 @@ Картинка1РасширеннаяПодсказка - 814 + 844 Label true true @@ -6337,7 +6387,7 @@ 183 <key>ru</key> - <value>С информационной базой сейчас работают другие пользователи. Для продолжения необходимо завершить их работу.</value> + <value>С программой сейчас работают другие пользователи. Для продолжения необходимо завершить их работу.</value> true true @@ -6346,7 +6396,7 @@ Надпись43РасширеннаяПодсказка - 817 + 847 Label true true @@ -6381,7 +6431,7 @@ НадписьСписокДействийРасширеннаяПодсказка - 818 + 848 Label true true @@ -6419,7 +6469,7 @@ АктивныеПользователиРасширеннаяПодсказка - 816 + 846 Label true true @@ -6441,7 +6491,7 @@ 190 <key>ru</key> - <value>С информационной базой сейчас работают внешние приложения. Для продолжения необходимо завершить их работу.</value> + <value>С программой сейчас работают внешние приложения. Для продолжения необходимо завершить их работу.</value> true true @@ -6450,7 +6500,7 @@ Надпись42РасширеннаяПодсказка - 820 + 850 Label true true @@ -6485,7 +6535,7 @@ НадписьСписокДействий1РасширеннаяПодсказка - 821 + 851 Label true true @@ -6523,7 +6573,7 @@ АктивныеСоединенияРасширеннаяПодсказка - 819 + 849 Label true true @@ -6545,7 +6595,7 @@ 195 <key>ru</key> - <value>С информационной базой сейчас установлено соединение из Конфигуратора. Для продолжения необходимо завершить работу Конфигуратора.</value> + <value>Открыт Конфигуратор. Для продолжения необходимо завершить работу Конфигуратора.</value> true true @@ -6554,7 +6604,7 @@ Надпись45РасширеннаяПодсказка - 823 + 853 Label true true @@ -6569,7 +6619,6 @@ Label true - 2 true false @@ -6591,7 +6640,7 @@ НадписьСписокДействий3РасширеннаяПодсказка - 824 + 854 Label true true @@ -6630,7 +6679,7 @@ СоединениеКонфигуратораРасширеннаяПодсказка - 822 + 852 Label true true @@ -6657,7 +6706,7 @@ false ПанельАктивныеПользователиРасширеннаяПодсказка - 815 + 845 Label true true @@ -6681,7 +6730,7 @@ ГруппаСоединенийРасширеннаяПодсказка - 813 + 843 Label true true @@ -6700,11 +6749,12 @@ - Надпись41 + НадписьПроцессОбновленияМожетЗанятьМногоВремени 177 <key>ru</key> - <value>Процесс обновления может занять от нескольких минут до часа. Не выключайте питание компьютера до завершения процесса. Если в "1С:Предприятии" сейчас есть несохраненные данные, сохраните их (закройте все формы редактирования). </value> + <value>Процесс обновления может занять длительное время. Не выключайте питание компьютера до завершения процесса установки. +Если в программе сейчас есть несохраненные данные, сохраните их (закройте все формы редактирования). </value> true true @@ -6712,8 +6762,8 @@ true - Надпись41РасширеннаяПодсказка - 825 + НадписьПроцессОбновленияМожетЗанятьМногоВремениРасширеннаяПодсказка + 855 Label true true @@ -6722,7 +6772,7 @@ - Надпись41КонтекстноеМеню + НадписьПроцессОбновленияМожетЗанятьМногоВремениКонтекстноеМеню 178 true @@ -6735,6 +6785,38 @@ 2 + + НадписьОтступ3 + 400 + true + true + + true + + + НадписьОтступ3РасширеннаяПодсказка + 856 + Label + true + true + + Left + + + + НадписьОтступ3КонтекстноеМеню + 401 + true + + Label + true + true + true + false + + Left + + ГруппаРезервнаяКопия 204 @@ -6752,7 +6834,7 @@ Надпись46РасширеннаяПодсказка - 827 + 858 Label true true @@ -6787,7 +6869,7 @@ НадписьРезервнаяКопияФайлРасширеннаяПодсказка - 828 + 859 Label true true @@ -6821,7 +6903,7 @@ ГруппаРезервнаяКопияРасширеннаяПодсказка - 826 + 857 Label true true @@ -6839,38 +6921,6 @@ Auto - - НадписьОтступ3 - 400 - true - true - - true - - - НадписьОтступ3РасширеннаяПодсказка - 829 - Label - true - true - - Left - - - - НадписьОтступ3КонтекстноеМеню - 401 - true - - Label - true - true - true - false - - Left - - ПанельПереходаНаСледующийШагРежимаОбновленияФайл 333 @@ -6882,7 +6932,7 @@ 207 <key>ru</key> - <value>Нажмите кнопку "Далее", чтобы перезапустить "1С:Предприятие".</value> + <value>Нажмите кнопку "Далее", чтобы перезапустить программу.</value> true true @@ -6891,7 +6941,7 @@ Декорация41РасширеннаяПодсказка - 832 + 862 Label true true @@ -6923,7 +6973,7 @@ ДалееРасширеннаяПодсказка - 831 + 861 Label true true @@ -6954,7 +7004,7 @@ Декорация56РасширеннаяПодсказка - 834 + 864 Label true true @@ -6986,7 +7036,7 @@ ГотовоРасширеннаяПодсказка - 833 + 863 Label true true @@ -7008,7 +7058,7 @@ 339 <key>ru</key> - <value>Продолжение невозможно, так как с базой работают другие пользователи или внешние приложения.</value> + <value>Продолжение невозможно, так как с программой работают другие пользователи или внешние приложения.</value> true true @@ -7017,7 +7067,7 @@ Декорация57РасширеннаяПодсказка - 836 + 866 Label true true @@ -7045,7 +7095,7 @@ АктивныеСоединения2РасширеннаяПодсказка - 835 + 865 Label true true @@ -7067,7 +7117,7 @@ 342 <key>ru</key> - <value>Продолжение невозможно, так как установлено соединение Конфигуратором.</value> + <value>Продолжение невозможно, так как открыт Конфигуратор.</value> true true @@ -7076,7 +7126,7 @@ Декорация58РасширеннаяПодсказка - 838 + 868 Label true true @@ -7104,7 +7154,7 @@ СоединениеКонфигуратора2РасширеннаяПодсказка - 837 + 867 Label true true @@ -7129,7 +7179,7 @@ ПанельПереходаНаСледующийШагРежимаОбновленияФайлРасширеннаяПодсказка - 830 + 860 Label true true @@ -7153,7 +7203,7 @@ ВыборРежимаОбновленияФайлРасширеннаяПодсказка - 803 + 831 Label true true @@ -7175,7 +7225,7 @@ 210 <key>ru</key> - <value>Все готово к обновлению конфигурации!</value> + <value>Установка обновления</value> true true @@ -7184,7 +7234,7 @@ НадписьШапкаВыборРежимаОбнСерверРасширеннаяПодсказка - 840 + 870 Label true true @@ -7226,7 +7276,7 @@ 212 <key>ru</key> - <value>Выберите режим обновления конфигурации "1С:Предприятие":</value> + <value>Выберите способ установки обновления программы:</value> true true @@ -7235,7 +7285,7 @@ Декорация43РасширеннаяПодсказка - 843 + 873 Label true true @@ -7250,10 +7300,12 @@ Label true + 2 true false Left + Center true @@ -7263,7 +7315,7 @@ ВсеГотово1РасширеннаяПодсказка - 842 + 872 Label true true @@ -7290,7 +7342,7 @@ Декорация1РасширеннаяПодсказка - 845 + 875 Label true true @@ -7331,7 +7383,7 @@ Декорация59РасширеннаяПодсказка - 847 + 877 Label true true @@ -7366,7 +7418,7 @@ НадписьПорядокОбновления3РасширеннаяПодсказка - 848 + 878 Label true true @@ -7399,7 +7451,7 @@ ВертикальнаяГруппа7РасширеннаяПодсказка - 846 + 876 Label true true @@ -7424,7 +7476,7 @@ ВсеГотовоПорядокОбновления1РасширеннаяПодсказка - 844 + 874 Label true true @@ -7448,7 +7500,7 @@ ПанельВсеГотовоСерверРасширеннаяПодсказка - 841 + 871 Label true true @@ -7465,7 +7517,7 @@ Отступ4 458 - ПереключательОбновления + ПереключательОбновленияСервер 214 true true @@ -7481,8 +7533,8 @@ ПереключательОбновленияПриИзменении - ПереключательОбновленияРасширеннаяПодсказка - 850 + ПереключательОбновленияСерверРасширеннаяПодсказка + 880 Label true true @@ -7491,7 +7543,7 @@ - ПереключательОбновленияКонтекстноеМеню + ПереключательОбновленияСерверКонтекстноеМеню 215 true @@ -7505,7 +7557,7 @@ ru - О&бновить конфигурацию прямо сейчас + Выполнить установку обновления прямо сейчас 0 @@ -7514,7 +7566,16 @@ ru - &Запланировать обновление конфигурации + Напомнить при завершении работы + + + 1 + + + + + ru + Запланировать установку обновления на указанное время 2 @@ -7528,9 +7589,17 @@ true + + <key>ru</key> + <value>Отступ4</value> + + + ru + Отступ4 + Отступ4РасширеннаяПодсказка - 849 + 879 Label true true @@ -7572,7 +7641,7 @@ ПолеДатаВремяОбновленияРасширеннаяПодсказка - 854 + 884 Label true true @@ -7605,7 +7674,7 @@ 240 <key>ru</key> - <value>Обновление будет выполнено с этого компьютера в фоновом режиме. + <value>Установка обновления будет выполнена с этого компьютера в фоновом режиме. Питание компьютера должно быть включено в указанные дату и время.</value> true @@ -7615,7 +7684,7 @@ Надпись51РасширеннаяПодсказка - 856 + 886 Label true true @@ -7664,7 +7733,7 @@ ВыслатьОтчетНаПочтуРасширеннаяПодсказка - 858 + 888 Label true true @@ -7698,7 +7767,7 @@ None АдресЭлектроннойПочтыРасширеннаяПодсказка - 860 + 890 Label true true @@ -7740,7 +7809,7 @@ false ПанельПочтаРасширеннаяПодсказка - 857 + 887 Label true true @@ -7768,7 +7837,7 @@ СтраницаЗапланированнойПерезагрузкиРасширеннаяПодсказка - 853 + 883 Label true true @@ -7790,7 +7859,7 @@ 218 <key>ru</key> - <value>Будет произведен перезапуск и обновление "1С:Предприятия". Процесс обновления может занять от нескольких минут до часа. Не выключайте питание компьютера до завершения процесса.</value> + <value>Будет установлено обновление, и программа перезапустится. Процесс обновления может занять от нескольких минут до часа. Не выключайте питание компьютера до завершения процесса.</value> true true @@ -7799,7 +7868,7 @@ Надпись47РасширеннаяПодсказка - 863 + 893 Label true true @@ -7836,7 +7905,7 @@ Картинка2РасширеннаяПодсказка - 865 + 895 Label true true @@ -7871,7 +7940,7 @@ 225 <key>ru</key> - <value>С информационной базой сейчас работают другие пользователи. Их работа будет завершена автоматически!</value> + <value>С программой сейчас работают другие пользователи. Их работа будет завершена автоматически.</value> true true @@ -7880,7 +7949,7 @@ Надпись48РасширеннаяПодсказка - 868 + 898 Label true true @@ -7916,7 +7985,7 @@ НадписьСписокДействий2РасширеннаяПодсказка - 869 + 899 Label true true @@ -7954,7 +8023,7 @@ АктивныеПользователи1РасширеннаяПодсказка - 867 + 897 Label true true @@ -7977,7 +8046,7 @@ <key>ru</key> <value>С информационной базой сейчас работают другие пользователи, а также внешние приложения. -Их работа будет завершена автоматически!</value> +Их работа будет завершена автоматически.</value> true true @@ -7986,7 +8055,7 @@ Надпись49РасширеннаяПодсказка - 871 + 901 Label true true @@ -8022,7 +8091,7 @@ НадписьСписокДействий4РасширеннаяПодсказка - 872 + 902 Label true true @@ -8061,7 +8130,7 @@ АктивныеСоединения1РасширеннаяПодсказка - 870 + 900 Label true true @@ -8082,7 +8151,7 @@ ПанельАктивныеПользователи1РасширеннаяПодсказка - 866 + 896 Label true true @@ -8103,7 +8172,7 @@ false ГруппаСоединений1РасширеннаяПодсказка - 864 + 894 Label true true @@ -8131,7 +8200,7 @@ СтраницаПерезагрузкиСейчас1РасширеннаяПодсказка - 862 + 892 Label true true @@ -8154,10 +8223,9 @@ ru Страницы информации перезагрузки - 80 СтраницыИнформацииПерезагрузки1РасширеннаяПодсказка - 852 + 882 Label true true @@ -8170,6 +8238,38 @@ Auto + + НадписьОтступ2 + 398 + true + true + + true + + + НадписьОтступ2РасширеннаяПодсказка + 903 + Label + true + true + + Left + + + + НадписьОтступ2КонтекстноеМеню + 399 + true + + Label + true + true + true + false + + Left + + ГруппаРезервнаяКопияСервер 539 @@ -8183,7 +8283,7 @@ Декорация13РасширеннаяПодсказка - 874 + 905 Label true true @@ -8212,7 +8312,7 @@ 537 <key>ru</key> - <value>Перед обновлением рекомендуется выполнить резервное копирование информационной базы средствами СУБД (SQL-сервера).</value> + <value>Перед установкой обновления рекомендуется выполнить резервное копирование информационной базы средствами СУБД (SQL-сервера).</value> true true @@ -8221,7 +8321,7 @@ НадписьРезервнаяКопияСерверРасширеннаяПодсказка - 875 + 906 Label true true @@ -8255,7 +8355,7 @@ ГруппаРезервнаяКопияСерверРасширеннаяПодсказка - 873 + 904 Label true true @@ -8273,38 +8373,6 @@ Auto - - НадписьОтступ2 - 398 - true - true - - true - - - НадписьОтступ2РасширеннаяПодсказка - 876 - Label - true - true - - Left - - - - НадписьОтступ2КонтекстноеМеню - 399 - true - - Label - true - true - true - false - - Left - - ПанельПереходаНаСледующийШагРежимаОбновленияСервер 352 @@ -8316,7 +8384,7 @@ 254 <key>ru</key> - <value>Нажмите кнопку "Далее", чтобы перезапустить "1С:Предприятие".</value> + <value>Нажмите кнопку "Далее", чтобы перезапустить программу.</value> true true @@ -8325,7 +8393,7 @@ Декорация44РасширеннаяПодсказка - 879 + 909 Label true true @@ -8357,7 +8425,7 @@ СейчасРасширеннаяПодсказка - 878 + 908 Label true true @@ -8379,7 +8447,7 @@ 355 <key>ru</key> - <value>Нажмите кнопку "Готово", чтобы запланировать автоматическое обновление конфигурации.</value> + <value>Нажмите кнопку "Готово", чтобы запланировать установку обновления на заданное время.</value> true true @@ -8388,7 +8456,7 @@ Декорация60РасширеннаяПодсказка - 881 + 911 Label true true @@ -8420,7 +8488,7 @@ ОтложитьРасширеннаяПодсказка - 880 + 910 Label true true @@ -8451,7 +8519,7 @@ Декорация61РасширеннаяПодсказка - 883 + 913 Label true true @@ -8483,7 +8551,7 @@ ОтменаРасширеннаяПодсказка - 882 + 912 Label true true @@ -8508,7 +8576,7 @@ ПанельПереходаНаСледующийШагРежимаОбновленияСерверРасширеннаяПодсказка - 877 + 907 Label true true @@ -8532,7 +8600,7 @@ ВыборРежимаОбновленияСерверРасширеннаяПодсказка - 839 + 869 Label true true @@ -8554,7 +8622,7 @@ 257 <key>ru</key> - <value>Обновление успешно завершено!</value> + <value>Обновление успешно завершено</value> true true @@ -8563,7 +8631,7 @@ НадписьШапкаУспешноеОбновлениеРасширеннаяПодсказка - 885 + 915 Label true true @@ -8599,7 +8667,7 @@ 259 <key>ru</key> - <value>Благодарим Вас за обновление "1С:Предприятие". </value> + <value>Благодарим Вас за обновление программы. </value> true true @@ -8608,7 +8676,7 @@ Декорация46РасширеннаяПодсказка - 886 + 916 Label true true @@ -8643,7 +8711,7 @@ НадписьИнформацияОбОбновленииПриЗавершенииРасширеннаяПодсказка - 887 + 917 Label true true @@ -8683,7 +8751,7 @@ Картинка3РасширеннаяПодсказка - 889 + 919 Label true true @@ -8715,7 +8783,7 @@ 265 <key>ru</key> - <value>Для завершения обновления может потребоваться выполнение дополнительных действий.</value> + <value>Пожалуйста, ознакомьтесь с дополнительными инструкциями для завершения обновления.</value> true true @@ -8724,7 +8792,7 @@ Декорация47РасширеннаяПодсказка - 891 + 921 Label true true @@ -8759,7 +8827,7 @@ НадписьПорядокОбновления2РасширеннаяПодсказка - 892 + 922 Label true true @@ -8792,7 +8860,7 @@ Группа30РасширеннаяПодсказка - 890 + 920 Label true true @@ -8821,7 +8889,7 @@ ПанельПорядокОбновленияПриЗавершенииРасширеннаяПодсказка - 888 + 918 Label true true @@ -8849,7 +8917,7 @@ Отступ45РасширеннаяПодсказка - 893 + 923 Label true true @@ -8885,7 +8953,7 @@ НадписьСообщениеДалее2РасширеннаяПодсказка - 894 + 924 Label true true @@ -8917,7 +8985,7 @@ УспешноеОбновлениеРасширеннаяПодсказка - 884 + 914 Label true true @@ -8939,7 +9007,7 @@ 272 <key>ru</key> - <value>Не удалось провести обновление!</value> + <value>Не удалось установить обновление</value> true true @@ -8948,7 +9016,7 @@ НадписьШапкаНеудачноеОбновлениеРасширеннаяПодсказка - 896 + 926 Label true true @@ -8984,7 +9052,7 @@ 274 <key>ru</key> - <value>Во время обновления конфигурации 1С:Предприятие произошли ошибки. Информация об ошибках сохранена в журнал регистрации. Рекомендуется обратиться к системному администратору.</value> + <value>Во время обновления программы произошли ошибки. Информация об ошибках сохранена в журнал регистрации.</value> true true @@ -8993,7 +9061,7 @@ Надпись54РасширеннаяПодсказка - 897 + 927 Label true true @@ -9021,7 +9089,7 @@ 279 <key>ru</key> - <value>Перейти в журнал регистрации</value> + <value>Журнал регистрации</value> true true @@ -9030,7 +9098,7 @@ НадписьОткрытьЖурналРегистрацииРасширеннаяПодсказка - 898 + 928 Label true true @@ -9044,6 +9112,7 @@ true Label + 21 true true false @@ -9067,7 +9136,7 @@ ОтступНеуспешноеОбновлениеРасширеннаяПодсказка - 899 + 929 Label true true @@ -9104,7 +9173,7 @@ Надпись56РасширеннаяПодсказка - 900 + 930 Label true true @@ -9136,7 +9205,7 @@ НеуспешноеОбновлениеРасширеннаяПодсказка - 895 + 925 Label true true @@ -9158,7 +9227,7 @@ 299 <key>ru</key> - <value>Параметры авторизации</value> + <value>Дополнительные параметры для обновления</value> true true @@ -9167,7 +9236,7 @@ НадписьШапкаПараметрыАвторизацииРасширеннаяПодсказка - 902 + 932 Label true true @@ -9214,7 +9283,7 @@ Картинка6РасширеннаяПодсказка - 905 + 935 Label true true @@ -9243,8 +9312,8 @@ 304 <key>ru</key> - <value>Почти все готово к обновлению конфигурации! -Для продолжения необходимо указать параметры авторизации и подключения к серверу. </value> + <value>Почти все готово к обновлению программы. +Для продолжения необходимо указать параметры авторизации и подключения к серверу приложений "1С:Предприятие". </value> true true @@ -9253,7 +9322,7 @@ Декорация53РасширеннаяПодсказка - 906 + 936 Label true true @@ -9291,7 +9360,7 @@ ПочтиВсеГотовоРасширеннаяПодсказка - 904 + 934 Label true true @@ -9320,7 +9389,7 @@ Картинка7РасширеннаяПодсказка - 909 + 939 Label true true @@ -9349,7 +9418,7 @@ 514 <key>ru</key> - <value>Ошибка проверки подключения</value> + <value>Не удалось проверить подключение</value> true true @@ -9359,9 +9428,10 @@ ОбнаруженнаяОшибкаПодключения + None ОбнаруженнаяОшибкаПодключенияРасширеннаяПодсказка - 910 + 940 Label true true @@ -9404,7 +9474,7 @@ false ГоризонтальнаяГруппа10РасширеннаяПодсказка - 908 + 938 Label true true @@ -9434,7 +9504,7 @@ Картинка9РасширеннаяПодсказка - 913 + 943 Label true true @@ -9452,11 +9522,7 @@ 2 true false - - - CommonPicture.Информация32 - - + ВертикальнаяГруппаНадписиЖР1 @@ -9466,7 +9532,7 @@ 564 <key>ru</key> - <value>Подробности см. в Журнале регистрации. Рекомендуется обратиться к системному администратору.</value> + <value>Технические подробности см. в журнале регистрации. </value> true true @@ -9475,7 +9541,7 @@ НадписьИнфоЖР2РасширеннаяПодсказка - 915 + 945 Label true true @@ -9511,7 +9577,7 @@ НадписьОткрытьЖурналРегистрации3РасширеннаяПодсказка - 916 + 946 Label true true @@ -9548,7 +9614,7 @@ false ВертикальнаяГруппаНадписиЖР1РасширеннаяПодсказка - 914 + 944 Label true true @@ -9558,7 +9624,6 @@ UsualGroup - Vertical Auto true true @@ -9574,7 +9639,7 @@ false ПанельЖурналРегистрации2РасширеннаяПодсказка - 912 + 942 Label true true @@ -9603,7 +9668,7 @@ true ОбнаруженаОшибкаПодключенияРасширеннаяПодсказка - 907 + 937 Label true true @@ -9629,7 +9694,7 @@ false СтраницыНадписиПроверкиПодключенияРасширеннаяПодсказка - 903 + 933 Label true true @@ -9642,122 +9707,24 @@ Auto - - ГруппаComcntr - 406 - - НадписьОбновитьВерсиюКомпоненты - 403 - - <key>ru</key> - <value>При ошибке версии компоненты "comcntr", рекомендуется выполнить ее перерегистрацию (потребуется перезапуск сеанса).</value> - - true - true - - true - - - НадписьОбновитьВерсиюКомпонентыРасширеннаяПодсказка - 918 - Label - true - true - - Left - - - - НадписьОбновитьВерсиюКомпонентыКонтекстноеМеню - 404 - true - - Label - true - true - false - - Left - 2 - - - - КнопкаОбновитьВерсиюКомпоненты - 405 - - <key>ru</key> - <value>Исправить</value> - - true - true - - true - - false - - КнопкаОбновитьВерсиюКомпонентыРасширеннаяПодсказка - 919 - Label - true - true - - Left - - - UsualButton - Form.Command.ОбновитьВерсиюКомпоненты - Normal - Auto - true - true - UserCmds - Auto - - true - true - - true - - - ГруппаComcntrРасширеннаяПодсказка - 917 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - ПанельАвторизацияИБ 306 - - ИмяАдминистратораИБ - 307 + + НадписьОбновитьВерсиюКомпоненты2 + 624 <key>ru</key> - <value>Имя</value> + <value>При обновлении в первый раз, введите свой пароль для входа в программу.</value> true - false + true true - - Объект.ИмяАдминистратораИБ - - ИмяАдминистратораИБРасширеннаяПодсказка - 921 + НадписьОбновитьВерсиюКомпоненты2РасширеннаяПодсказка + 948 Label true true @@ -9766,32 +9733,70 @@ - ИмяАдминистратораИБКонтекстноеМеню - 308 + НадписьОбновитьВерсиюКомпоненты2КонтекстноеМеню + 625 true - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - Normal + Label + true + true + false + + Left - Группа35 - 313 + Группа7 + 626 Группа36 314 + + ИмяАдминистратораИБ + 307 + + <key>ru</key> + <value>Администратор</value> + + true + false + + true + + + Объект.ИмяАдминистратораИБ + + + ИмяАдминистратораИБРасширеннаяПодсказка + 951 + Label + true + true + + Left + + + + ИмяАдминистратораИБКонтекстноеМеню + 308 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + ПолеПарольАдминистратораИБ 309 @@ -9809,7 +9814,7 @@ ПолеПарольАдминистратораИБРасширеннаяПодсказка - 925 + 953 Label true true @@ -9839,53 +9844,6 @@ Normal - - ПолеПарольАдминистратораИБПроверка - 311 - - <key>ru</key> - <value>Пароль (проверка)</value> - - true - true - - true - - - Объект.ПарольАдминистратораИБПроверка - - - ПолеПарольАдминистратораИБПроверкаРасширеннаяПодсказка - 927 - Label - true - true - - Left - - - - ПолеПарольАдминистратораИБПроверкаКонтекстноеМеню - 312 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - true - Normal - - true true @@ -9893,7 +9851,7 @@ Группа36РасширеннаяПодсказка - 924 + 950 Label true true @@ -9919,7 +9877,7 @@ 315 <key>ru</key> - <value>Для этого пользователя дополнительно к аутентификации Windows будет явно включена аутентификация по имени и паролю.</value> + <value>Внимание: дополнительно к аутентификации ОС будет включена возможность входа в программу по имени и паролю.</value> true true @@ -9928,7 +9886,7 @@ Декорация54РасширеннаяПодсказка - 930 + 956 Label true true @@ -9963,7 +9921,7 @@ true ПанельПредупреждениеОWindowsАвторизацииРасширеннаяПодсказка - 929 + 955 Label true true @@ -9987,8 +9945,8 @@ true - Группа35РасширеннаяПодсказка - 923 + Группа7РасширеннаяПодсказка + 949 Label true true @@ -10012,11 +9970,11 @@ <key>ru</key> - <value>Авторизация администратора информационной базы</value> + <value>Пароль администратора для входа в программу</value> ПанельАвторизацияИБРасширеннаяПодсказка - 920 + 947 Label true true @@ -10047,7 +10005,7 @@ 317 <key>ru</key> - <value>&Требуется авторизация для подключения к кластеру серверов</value> + <value>Имя и пароль администратора кластера серверов</value> true true @@ -10064,7 +10022,7 @@ КластерТребуетАутентификацииРасширеннаяПодсказка - 933 + 959 Label true true @@ -10092,7 +10050,7 @@ 320 <key>ru</key> - <value>Пользователь</value> + <value>Администратор</value> true true @@ -10104,7 +10062,7 @@ ИмяАдминистратораКластераРасширеннаяПодсказка - 936 + 962 Label true true @@ -10150,7 +10108,7 @@ ПарольАдминистратораКластераРасширеннаяПодсказка - 938 + 964 Label true true @@ -10191,7 +10149,7 @@ ПанельДоступККластеруРасширеннаяПодсказка - 935 + 961 Label true true @@ -10206,7 +10164,6 @@ StrongSeparation true true - auto Auto Auto @@ -10222,7 +10179,7 @@ ПанельАдминистраторКластераСерверовРасширеннаяПодсказка - 932 + 958 Label true true @@ -10234,6 +10191,7 @@ Vertical Auto + NormalSeparation true true Auto @@ -10246,6 +10204,10 @@ НестандартныеПортыСервера 324 + + <key>ru</key> + <value>Нестандартные номера портов сервера</value> + true true @@ -10261,7 +10223,7 @@ НестандартныеПортыСервераРасширеннаяПодсказка - 941 + 967 Label true true @@ -10289,7 +10251,7 @@ 327 <key>ru</key> - <value>&Кластер серверов</value> + <value>Кластер серверов</value> true true @@ -10301,7 +10263,7 @@ ПортКластераСерверовРасширеннаяПодсказка - 944 + 970 Label true true @@ -10334,7 +10296,7 @@ 329 <key>ru</key> - <value>&Агент сервера</value> + <value>Агент сервера</value> true true @@ -10346,7 +10308,7 @@ ПортАгентаСервераРасширеннаяПодсказка - 946 + 972 Label true true @@ -10385,7 +10347,7 @@ ПанельНестандартныеПортыСервераРасширеннаяПодсказка - 943 + 969 Label true true @@ -10400,7 +10362,6 @@ StrongSeparation true true - auto Auto Auto @@ -10417,7 +10378,7 @@ false ПанельПортыСервераРасширеннаяПодсказка - 940 + 966 Label true true @@ -10429,6 +10390,7 @@ Vertical Auto + NormalSeparation true true Auto @@ -10446,7 +10408,98 @@ ПанельАвторизацияКластераСерверовРасширеннаяПодсказка - 931 + 957 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаComcntr + 406 + + НадписьОбновитьВерсиюКомпоненты + 403 + + <key>ru</key> + <value>При ошибке версии компоненты "comcntr", рекомендуется выполнить ее перерегистрацию (потребуется перезапуск программы).</value> + + true + true + + true + + + НадписьОбновитьВерсиюКомпонентыРасширеннаяПодсказка + 975 + Label + true + true + + Left + + + + НадписьОбновитьВерсиюКомпонентыКонтекстноеМеню + 404 + true + + Label + true + true + false + + Left + 2 + + + + КнопкаОбновитьВерсиюКомпоненты + 405 + true + true + + true + + false + + КнопкаОбновитьВерсиюКомпонентыРасширеннаяПодсказка + 976 + Label + true + true + + Left + + + UsualButton + Form.Command.ОбновитьВерсиюКомпоненты + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ГруппаComcntrРасширеннаяПодсказка + 974 Label true true @@ -10457,7 +10510,6 @@ UsualGroup Auto - NormalSeparation true true Auto @@ -10474,7 +10526,7 @@ НадписьОтступ1РасширеннаяПодсказка - 948 + 977 Label true true @@ -10501,7 +10553,7 @@ 331 <key>ru</key> - <value>Нажмите кнопку "Далее" для выбора режима обновления конфигурации.</value> + <value>Нажмите кнопку "Далее" для выбора способа обновления программы.</value> true true @@ -10510,7 +10562,7 @@ НадписьСообщениеДалее3РасширеннаяПодсказка - 949 + 978 Label true true @@ -10538,11 +10590,11 @@ <key>ru</key> - <value>Параметры авторизации</value> + <value>Параметры авторизации (клиент-серверная ИБ)</value> ПараметрыАвторизацииРасширеннаяПодсказка - 901 + 931 Label true true @@ -10564,7 +10616,7 @@ 408 <key>ru</key> - <value>Не удалось проверить подключение к базе</value> + <value>Дополнительные параметры для обновления</value> true true @@ -10573,7 +10625,7 @@ НадписьШапкаДополнительныеНастройкиРасширеннаяПодсказка - 951 + 980 Label true true @@ -10617,7 +10669,7 @@ Картинка12РасширеннаяПодсказка - 953 + 982 Label true true @@ -10659,7 +10711,7 @@ None ОбнаруженнаяОшибкаПодключения1РасширеннаяПодсказка - 954 + 983 Label true true @@ -10702,7 +10754,7 @@ false ГоризонтальнаяГруппаОшибкаПодключенияРасширеннаяПодсказка - 952 + 981 Label true true @@ -10720,23 +10772,19 @@ - ГруппаComcntrФайловыйРежим - 410 + ПанельЖурналРегистрации3 + 627 - НадписьОбновитьВерсиюКомпоненты1 - 411 - - <key>ru</key> - <value>При ошибке версии компоненты "comcntr", рекомендуется выполнить ее перерегистрацию (потребуется перезапуск сеанса).</value> - + Картинка10 + 628 true true true - НадписьОбновитьВерсиюКомпоненты1РасширеннаяПодсказка - 957 + Картинка10РасширеннаяПодсказка + 986 Label true true @@ -10745,35 +10793,108 @@ - НадписьОбновитьВерсиюКомпоненты1КонтекстноеМеню - 412 + Картинка10КонтекстноеМеню + 629 true - Label + 6 true + 2 true false - - Left - 2 - + - - КнопкаОбновитьВерсиюКомпоненты1 - 413 - - <key>ru</key> - <value>Исправить</value> - + + ВертикальнаяГруппаНадписиЖР3 + 630 + + НадписьИнфоЖР3 + 631 + + <key>ru</key> + <value>Технические подробности см. в журнале регистрации. </value> + + true + true + + true + + + НадписьИнфоЖР3РасширеннаяПодсказка + 988 + Label + true + true + + Left + + + + НадписьИнфоЖР3КонтекстноеМеню + 632 + true + + Label + true + true + false + false + + Left + + + + НадписьОткрытьЖурналРегистрации4 + 633 + + <key>ru</key> + <value>Перейти в журнал регистрации</value> + + true + true + + true + + + НадписьОткрытьЖурналРегистрации4РасширеннаяПодсказка + 989 + Label + true + true + + Left + + + + НадписьОткрытьЖурналРегистрации4КонтекстноеМеню + 634 + true + + Label + true + true + true + true + false + + + Click + НадписьОткрытьЖурналРегистрацииНажатие + + true + Left + Center + + true true true - false + false - КнопкаОбновитьВерсиюКомпоненты1РасширеннаяПодсказка - 958 + ВертикальнаяГруппаНадписиЖР3РасширеннаяПодсказка + 987 Label true true @@ -10781,23 +10902,24 @@ Left - UsualButton - Form.Command.ОбновитьВерсиюКомпоненты - Normal - Auto - true - true - UserCmds - Auto + UsualGroup + + Auto + true + true + Auto + Auto + true true true + false - ГруппаComcntrФайловыйРежимРасширеннаяПодсказка - 956 + ПанельЖурналРегистрации3РасширеннаяПодсказка + 985 Label true true @@ -10808,7 +10930,6 @@ UsualGroup Auto - NormalSeparation true true Auto @@ -10818,24 +10939,21 @@ ПанельАвторизацияИБ1 597 - - ИмяАдминистратораИБ1 - 598 + + НадписьОбновитьВерсиюКомпоненты3 + 635 <key>ru</key> - <value>Имя</value> + <value>При обновлении в первый раз, введите свой пароль для входа в программу.</value> true - false + true true - - Объект.ИмяАдминистратораИБ - - ИмяАдминистратораИБ1РасширеннаяПодсказка - 960 + НадписьОбновитьВерсиюКомпоненты3РасширеннаяПодсказка + 991 Label true true @@ -10844,24 +10962,16 @@ - ИмяАдминистратораИБ1КонтекстноеМеню - 599 + НадписьОбновитьВерсиюКомпоненты3КонтекстноеМеню + 636 true - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - Normal + Label + true + true + false + + Left @@ -10871,7 +10981,53 @@ Группа38 601 - ПолеПарольАдминистратораИБ1 + ИмяАдминистратораИБФайл + 598 + + <key>ru</key> + <value>Администратор</value> + + true + false + + true + + + Объект.ИмяАдминистратораИБ + + + ИмяАдминистратораИБФайлРасширеннаяПодсказка + 994 + Label + true + true + + Left + + + + ИмяАдминистратораИБФайлКонтекстноеМеню + 599 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + ПарольАдминистратораИБФайл 602 <key>ru</key> @@ -10886,8 +11042,8 @@ <segments>Объект.ПарольАдминистратораИБ</segments> </dataPath> <extendedTooltip> - <name>ПолеПарольАдминистратораИБ1РасширеннаяПодсказка</name> - <id>964</id> + <name>ПарольАдминистратораИБФайлРасширеннаяПодсказка</name> + <id>996</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -10896,7 +11052,7 @@ </extInfo> </extendedTooltip> <contextMenu> - <name>ПолеПарольАдминистратораИБ1КонтекстноеМеню</name> + <name>ПарольАдминистратораИБФайлКонтекстноеМеню</name> <id>603</id> <autoFill>true</autoFill> </contextMenu> @@ -10917,53 +11073,6 @@ <textSize>Normal</textSize> </extInfo> </items> - <items xsi:type="form:FormField"> - <name>ПолеПарольАдминистратораИБПроверка1</name> - <id>604</id> - <title> - <key>ru</key> - <value>Пароль (проверка)</value> - - true - true - - true - - - Объект.ПарольАдминистратораИБПроверка - - - ПолеПарольАдминистратораИБПроверка1РасширеннаяПодсказка - 966 - Label - true - true - - Left - - - - ПолеПарольАдминистратораИБПроверка1КонтекстноеМеню - 605 - true - - InputField - Enter - true - Left - true - - true - true - false - true - true - true - true - true - Normal - - true true @@ -10971,7 +11080,7 @@ Группа38РасширеннаяПодсказка - 963 + 993 Label true true @@ -10990,14 +11099,14 @@ - ПанельПредупреждениеОWindowsАвторизации1 + ПредупреждениеОWindowsАвторизацииФайл 606 Декорация55 607 <key>ru</key> - <value>Для этого пользователя дополнительно к аутентификации Windows будет явно включена аутентификация по имени и паролю.</value> + <value>Внимание: дополнительно к аутентификации ОС будет включена возможность входа в программу по имени и паролю.</value> true true @@ -11006,7 +11115,7 @@ Декорация55РасширеннаяПодсказка - 969 + 999 Label true true @@ -11034,14 +11143,10 @@ true - - <key>ru</key> - <value>Панель предупреждение о windows авторизации</value> - true - ПанельПредупреждениеОWindowsАвторизации1РасширеннаяПодсказка - 968 + ПредупреждениеОWindowsАвторизацииФайлРасширеннаяПодсказка + 998 Label true true @@ -11066,7 +11171,7 @@ Группа37РасширеннаяПодсказка - 962 + 992 Label true true @@ -11090,11 +11195,11 @@ <key>ru</key> - <value>Авторизация администратора информационной базы</value> + <value>Пароль администратора для входа в программу</value> ПанельАвторизацияИБ1РасширеннаяПодсказка - 959 + 990 Label true true @@ -11115,19 +11220,23 @@ - ПанельЖурналРегистрации4 - 573 + ГруппаComcntrФайловыйРежим + 410 - Картинка11 - 574 + НадписьОбновитьВерсиюКомпоненты1 + 411 + + <key>ru</key> + <value>При ошибке версии компоненты "comcntr", рекомендуется выполнить ее перерегистрацию (потребуется перезапуск программы).</value> + true true true - Картинка11РасширеннаяПодсказка - 971 + НадписьОбновитьВерсиюКомпоненты1РасширеннаяПодсказка + 1001 Label true true @@ -11136,110 +11245,31 @@ - Картинка11КонтекстноеМеню - 575 + НадписьОбновитьВерсиюКомпоненты1КонтекстноеМеню + 412 true - 6 + Label true - 2 true false - - - CommonPicture.Информация32 - + + Left + 2 - - ВертикальнаяГруппаНадписиЖР3 - 576 - - Декорация17 - 577 - - <key>ru</key> - <value>Подробности см. в Журнале регистрации. Рекомендуется обратиться к системному администратору.</value> - - true - true - - true - - - Декорация17РасширеннаяПодсказка - 973 - Label - true - true - - Left - - - - Декорация17КонтекстноеМеню - 578 - true - - Label - true - 1 - true - false - - Left - - - - НадписьПерейтиВЖурналРегистрации1 - 579 - - <key>ru</key> - <value>Перейти в журнал регистрации</value> - - true - true - - true - - - НадписьПерейтиВЖурналРегистрации1РасширеннаяПодсказка - 974 - Label - true - true - - Left - - - - НадписьПерейтиВЖурналРегистрации1КонтекстноеМеню - 580 - true - - Label - true - true - true - false - - - Click - НадписьПерейтиВЖурналРегистрацииНажатие - - true - Left - - + + КнопкаОбновитьВерсиюКомпоненты1 + 413 true true true - false + false - ВертикальнаяГруппаНадписиЖР3РасширеннаяПодсказка - 972 + КнопкаОбновитьВерсиюКомпоненты1РасширеннаяПодсказка + 1002 Label true true @@ -11247,25 +11277,23 @@ Left - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - + UsualButton + Form.Command.ОбновитьВерсиюКомпоненты + Normal + Auto + true + true + UserCmds + Auto true true true - false - ПанельЖурналРегистрации4РасширеннаяПодсказка - 970 + ГруппаComcntrФайловыйРежимРасширеннаяПодсказка + 1000 Label true true @@ -11283,6 +11311,73 @@ Auto + + НадписьОтступ4 + 637 + true + true + + true + + + НадписьОтступ4РасширеннаяПодсказка + 1003 + Label + true + true + + Left + + + + НадписьОтступ4КонтекстноеМеню + 638 + true + + Label + true + true + true + false + + Left + + + + НадписьСообщениеДалее5 + 639 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для выбора способа обновления программы.</value> + + true + true + + true + + + НадписьСообщениеДалее5РасширеннаяПодсказка + 1004 + Label + true + true + + Left + + + + НадписьСообщениеДалее5КонтекстноеМеню + 640 + true + + Label + true + true + false + + Left + + true true @@ -11290,11 +11385,11 @@ <key>ru</key> - <value>Дополнительные настройки</value> + <value>Параметры авторизации (файловая ИБ)</value> ДополнительныеНастройкиРасширеннаяПодсказка - 950 + 979 Label true true @@ -11319,7 +11414,7 @@ СтраницыПомощникаРасширеннаяПодсказка - 615 + 644 Label true true @@ -11348,7 +11443,7 @@ false КнопкаНазадРасширеннаяПодсказка - 612 + 641 Label true true @@ -11375,7 +11470,7 @@ false КнопкаДалееРасширеннаяПодсказка - 613 + 642 Label true true @@ -11402,7 +11497,7 @@ false КнопкаЗакрытьРасширеннаяПодсказка - 614 + 643 Label true true @@ -11442,7 +11537,6 @@ Retry SaveValues Yes - 100 LockOwner true true @@ -11798,24 +11892,6 @@ true - - ИмяФайлаЗапускаПриложенияВРежимеПредприятия - - <key>ru</key> - <value>Имя файла запуска приложения в режиме предприятия</value> - - 8 - - String - - - - true - - - true - - Назад @@ -11864,12 +11940,12 @@ <name>ОбновитьВерсиюКомпоненты</name> <title> <key>ru</key> - <value>Обновить версию компоненты</value> + <value>Исправить</value> 3 ru - Обновить версию компоненты + Выполнить перерегистрацию компоненты "comcntr" true @@ -11904,6 +11980,42 @@ Auto Auto + + НастроитьПараметрыПроксиСервера + + <key>ru</key> + <value>Настроить параметры прокси-сервера</value> + + 5 + + ru + Настроить параметры прокси сервера + + + true + + + + НастроитьПараметрыПроксиСервера + + + Auto + Auto + + + ЗавершениеРаботыСистемы + + Boolean + + true + + + ВыполнитьОбновление + + Boolean + + true + diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl index b7f0931ed..c86f26710 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Forms/Форма/Module.bsl @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -20,6 +20,17 @@ // Проверяем каждый раз при открытии помощника. КонфигурацияИзменена = КонфигурацияИзменена(); + Если Параметры.ЗавершениеРаботыСистемы Тогда + Элементы.ПанельВсеГотовоФайл.Видимость = Ложь; + Элементы.ПереключательОбновленияСервер.Видимость = Ложь; + КонецЕсли; + + ИнформацияОНаличииСоединений = ПолучитьИнформациюОНаличииСоединений(Неопределено); + Параметры.ВыполнитьОбновление = ?(ИнформацияОНаличииСоединений.НаличиеАктивныхСоединений, Ложь, Параметры.ВыполнитьОбновление); + + Элементы.НадписьОбновлениеКонфигурацииВыполняетсяПриОбменеДаннымиСГлавнымУзлом.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Элементы.НадписьОбновлениеКонфигурацииВыполняетсяПриОбменеДаннымиСГлавнымУзлом.Заголовок, ПланыОбмена.ГлавныйУзел()); + Элементы.НадписьПроцессОбновленияМожетЗанятьМногоВремени.Видимость = Не Параметры.ЗавершениеРаботыСистемы; + КонецПроцедуры &НаКлиенте @@ -32,9 +43,19 @@ Предупреждение(ТекстСообщения); Возврат; #КонецЕсли - + ВосстановитьНастройкиОбновленияКонфигурации(); + Если Параметры.ВыполнитьОбновление Тогда + Если ПроверитьДоступКИБ() Тогда + ВыполнитьОбновление = Истина; + ОбновлениеКонфигурацииКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(); + ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; + ЗавершитьРаботуСистемы(Ложь); + Закрыть(); + КонецЕсли; + КонецЕсли; + Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; ИмяСтраницы = Страницы.ДоброПожаловать.Имя; @@ -53,7 +74,7 @@ Если Объект.КодЗадачиПланировщика <> 0 Тогда Если ПолучитьЗадачуПланировщика(Объект.КодЗадачиПланировщика) = Неопределено Тогда - Объект.КодЗадачиПланировщика = 0; + Объект.КодЗадачиПланировщика = 0; КонецЕсли; КонецЕсли; @@ -91,14 +112,20 @@ ИмяСтраницы = Страницы.ФайлОбновления.Имя; ИначеЕсли Объект.ПропускатьПриветствие = Истина И Объект.ИсточникОбновления = 0 Тогда ИмяСтраницы = ОбработатьСтраницуДоброПожаловать(Истина); + КонецЕсли; + + Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда + Если КонфигурацияИзменена Тогда + ИмяСтраницы = ПерейтиКВыборуРежимаОбновления(); + Иначе + ИмяСтраницы = Страницы.ОбновленияНеОбнаружено.Имя; + КонецЕсли; КонецЕсли + КонецЕсли; ПередОткрытиемСтраницы(Страницы[ИмяСтраницы]); Элементы.СтраницыПомощника.ТекущаяСтраница = Страницы[ИмяСтраницы]; - - ИмяФайлаЗапускаПриложенияВРежимеПредприятия = ПолучитьИмяФайлаЗапускаПриложенияВРежимеПредприятия(); - КонецПроцедуры &НаКлиенте @@ -149,11 +176,6 @@ //////////////////////////////////////////////////////////////////////////////// // Страница ПодключениеКИнтернет -&НаКлиенте -Процедура НадписьНастройкаПараметровПроксиНажатие(Элемент) - ОткрытьФормуМодально("ОбщаяФорма.ПараметрыПроксиСервера"); -КонецПроцедуры - &НаКлиенте Процедура НадписьПерейтиВЖурналРегистрацииНажатие(Элемент) ОткрытьФорму("Обработка.ЖурналРегистрации.Форма", Новый Структура("Пользователь", ИмяПользователя())); @@ -404,6 +426,9 @@ Если Объект.ИсточникОбновления = 1 Тогда // диск ИТС НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС; КонецЕсли; + Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда + НоваяТекущаяСтраница = Страницы[ПерейтиКВыборуРежимаОбновления()]; + КонецЕсли; ИначеЕсли ТекущаяСтраница = Страницы.ФайлОбновления Тогда НоваяТекущаяСтраница = Страницы.ДоброПожаловать; ИначеЕсли ТекущаяСтраница = Страницы.ДоступноеОбновление Тогда @@ -426,6 +451,7 @@ ОбновлениеКонфигурацииКлиентПереопределяемый.ПередЗавершениемРаботыСистемы(); ПропуститьПредупреждениеПередЗавершениемРаботыСистемы = Истина; ЗавершитьРаботуСистемы(Ложь); + Закрыть(); Конецесли; КонецПроцедуры @@ -442,55 +468,28 @@ ОбработатьНажатиеКнопкиДалее(); КонецПроцедуры +&НаКлиенте +Процедура НастроитьПараметрыПроксиСервера(Команда) + ОткрытьФормуМодально("ОбщаяФорма.ПараметрыПроксиСервера"); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаКлиенте -Функция ПолучитьИмяФайлаЗапускаПриложенияВРежимеПредприятия() -#Если ТонкийКлиент Тогда - Возврат "1cv8c.exe"; -#Иначе - Возврат "1cv8.exe"; -#КонецЕсли -КонецФункции - &НаСервереБезКонтекста Функция ЭтоСеансКонфигуратором(СеансИнформационнойБазы) + Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("Designer"); + КонецФункции &НаСервереБезКонтекста Функция ЭтоCOMСоединение(СеансИнформационнойБазы) + Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("COMConnection"); + КонецФункции -// Проверка наличия соединения конфигуратором. -// -// Возвращаемое значение: -// Булево - Истина, если соединение есть, -// Ложь, если соединения нет. -&НаСервереБезКонтекста -Функция НаличиеСоединенияКонфигуратором() - МассивСеансов = ПолучитьСеансыИнформационнойБазы(); - Для Каждого Сеанс Из МассивСеансов Цикл - Если ЭтоСеансКонфигуратором(Сеанс) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; -КонецФункции - -&НаСервереБезКонтекста -Функция НаличиеCOMСоединений() - МассивСеансов = ПолучитьСеансыИнформационнойБазы(); - Для Каждого Сеанс Из МассивСеансов Цикл - Если ЭтоCOMСоединение(Сеанс) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; -КонецФункции - // Проверка наличия активных соединений с информационной базой. // // Возвращаемое значение: @@ -500,7 +499,7 @@ Функция НаличиеАктивныхСоединений(СообщенияДляЖурналаРегистрации = Неопределено) // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Возврат ПолучитьСеансыИнформационнойБазы().Количество() > 1; + Возврат СоединенияИБ.КоличествоСеансовИнформационнойБазы(Ложь) > 1; КонецФункции &НаСервере @@ -557,9 +556,13 @@ СтрокаСоединенияИнформационнойБазы = СтруктураПараметров.ПараметрыСкрипта.СтрокаСоединенияИнформационнойБазы + СтруктураПараметров.ПараметрыСкрипта.СтрокаПодключения; + + Если Прав(СтрокаСоединенияИнформационнойБазы, 1) = ";" Тогда + СтрокаСоединенияИнформационнойБазы = Лев(СтрокаСоединенияИнформационнойБазы, СтрДлина(СтрокаСоединенияИнформационнойБазы) - 1); + КонецЕсли; - ИмяИсполняемогоФайлаПрограммы = СтруктураПараметров.КаталогПрограммы + СтруктураПараметров.ИмяФайлаПрограммы; - ИмяФайлаЗапускаПриложенияВРежимеПредприятия = СтруктураПараметров.КаталогПрограммы + ИмяФайлаЗапускаПриложенияВРежимеПредприятия; + ИмяИсполняемогоФайлаКонфигуратора = СтруктураПараметров.КаталогПрограммы + СтруктураПараметров.ИмяИсполняемогоФайлаКонфигуратора; + ИмяИсполняемогоФайлаКлиента = СтруктураПараметров.КаталогПрограммы + СтруктураПараметров.ИмяИсполняемогоФайлаКлиента; // Определение пути к информационной базе. ПризнакФайловогоРежима = Неопределено; @@ -571,8 +574,8 @@ Результат = СтрЗаменить(Результат, "[ИменаФайловОбновления]" , ИменаФайловОбновления); Результат = СтрЗаменить(Результат, "[ИмяФайлаРекламы]" , СтруктураПараметров.ИмяФайлаРекламы); - Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаПрограммы]" , Подг(ИмяИсполняемогоФайлаПрограммы)); - Результат = СтрЗаменить(Результат, "[ИмяФайлаЗапускаПриложенияВРежимеПредприятия]", Подг(ИмяФайлаЗапускаПриложенияВРежимеПредприятия)); + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКонфигуратора]" , Подг(ИмяИсполняемогоФайлаКонфигуратора)); + Результат = СтрЗаменить(Результат, "[ИмяИсполняемогоФайлаКлиента]" , Подг(ИмяИсполняемогоФайлаКлиента)); Результат = СтрЗаменить(Результат, "[ПараметрПутиКИнформационнойБазе]" , Подг(ПараметрПутиКИнформационнойБазе)); Результат = СтрЗаменить(Результат, "[СтрокаПутиКФайлуИнформационнойБазы]" , Подг(ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(СтрЗаменить(СтрокаПутиКИнформационнойБазе, """", "")) + "1Cv8.1CD")); @@ -591,6 +594,7 @@ Результат = СтрЗаменить(Результат, "[БлокироватьСоединенияИБ]" , ?(БлокироватьСоединенияИБ, "true", "false")); Результат = СтрЗаменить(Результат, "[ИмяCOMСоединителя]" , Подг(СтруктураПараметров.ИмяCOMСоединителя)); Результат = СтрЗаменить(Результат, "[ИспользоватьCOMСоединитель]" , ?(СтруктураПараметров.ЭтоБазоваяВерсияКонфигурации, "false", "true")); + Результат = СтрЗаменить(Результат, "[ЗапускСеансаПослеОбновления]" , ?(Параметры.ЗавершениеРаботыСистемы, "false", "true")); Возврат Результат; @@ -881,14 +885,37 @@ &НаСервереБезКонтекста Функция ПолучитьИнформациюОНаличииСоединений(СообщенияДляЖурналаРегистрации = Неопределено) - // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); + УстановитьПривилегированныйРежим(Истина); - Результат = Новый Структура( - "НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", - НаличиеАктивныхСоединений(), НаличиеCOMСоединений(), - НаличиеСоединенияКонфигуратором(), ЕстьАктивныеПользователи()); + + Результат = Новый Структура("НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", + Ложь, + Ложь, + Ложь, + Ложь); + + Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда + Результат.ЕстьАктивныеПользователи = Истина; + КонецЕсли; + + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); + Если МассивСеансов.Количество() = 1 Тогда + Возврат Результат; + КонецЕсли; + + Результат.НаличиеАктивныхСоединений = Истина; + + Для Каждого Сеанс Из МассивСеансов Цикл + Если ЭтоCOMСоединение(Сеанс) Тогда + Результат.НаличиеCOMСоединений = Истина; + ИначеЕсли ЭтоСеансКонфигуратором(Сеанс) Тогда + Результат.НаличиеСоединенияКонфигуратором = Истина; + КонецЕсли; + КонецЦикла; + Возврат Результат; + КонецФункции &НаСервере @@ -934,10 +961,12 @@ ПараметрыРаботыКлиента = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента(); Настройки = ОбновлениеКонфигурацииКлиентСервер.ПолучитьОбновленныеНастройкиОбновленияКонфигурации(НастройкиОбновленияКонфигурации); + Настройки.ПропускатьПриветствие = Объект.ПропускатьПриветствие; Настройки.КодПользователяСервераОбновлений = Объект.КодПользователяСервераОбновлений; Настройки.ПарольСервераОбновлений = ?(Объект.ЗапомнитьПарольСервераОбновлений, Объект.ПарольСервераОбновлений, ""); Настройки.ЗапомнитьПарольСервераОбновлений = Объект.ЗапомнитьПарольСервераОбновлений; + Настройки.ПроверятьНаличиеОбновленияПриЗапуске = Объект.ПроверятьНаличиеОбновленияПриЗапуске; Настройки.РасписаниеПроверкиНаличияОбновления = ОбщегоНазначенияКлиентСервер.РасписаниеВСтруктуру(Объект.РасписаниеПроверкиНаличияОбновления); Настройки.ИсточникОбновления = Объект.ИсточникОбновления; @@ -949,38 +978,61 @@ Настройки.ПовторныйЗапуск = Объект.ПовторныйЗапуск; Настройки.ИмяФайлаОбновления = Объект.ИмяФайлаОбновления; Настройки.НуженФайлОбновления = Объект.НуженФайлОбновления; + Настройки.СоздаватьРезервнуюКопию = Объект.СоздаватьРезервнуюКопию; Настройки.ВосстанавливатьИнформационнуюБазу = Объект.ВосстанавливатьИнформационнуюБазу; Настройки.ИмяКаталогаРезервнойКопииИБ = Объект.ИмяКаталогаРезервнойКопииИБ; + Настройки.АдресСервераДляПроверкиНаличияОбновления = ПараметрыРаботыКлиента.НастройкиОбновления.АдресСервераДляПроверкиНаличияОбновления; Настройки.КаталогОбновлений = ПараметрыРаботыКлиента.НастройкиОбновления.КаталогОбновлений; Настройки.КороткоеИмяКонфигурации = ПараметрыРаботыКлиента.НастройкиОбновления.КороткоеИмяКонфигурации; Настройки.АдресРесурсаДляПроверкиНаличияОбновления = ПараметрыРаботыКлиента.НастройкиОбновления.АдресРесурсаДляПроверкиНаличияОбновления; + Настройки.ДискИТС = ДискИТС; Настройки.ИсточникДискаИТС = Объект.ИсточникДискаИТС; + Настройки.КластерТребуетАутентификации = Объект.КластерТребуетАутентификации; Настройки.ИмяАдминистратораКластера = Объект.ИмяАдминистратораКластера; Настройки.ПарольАдминистратораКластера = Объект.ПарольАдминистратораКластера; Настройки.НестандартныеПортыСервера = Объект.НестандартныеПортыСервера; Настройки.ПортАгентаСервера = Объект.ПортАгентаСервера; Настройки.ПортКластераСерверов = Объект.ПортКластераСерверов; - - ОбновлениеКонфигурации.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации); - Если ПараметрыРаботыКлиента.НастройкиОбновления.ЕстьДоступДляОбновления - И НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда + ОбновлениеКонфигурацииВызовСервера.ЗаписатьСтруктуруНастроекПомощника(НастройкиОбновленияКонфигурации); + + Если ПараметрыРаботыКлиента.НастройкиОбновления.ЕстьДоступДляОбновления Тогда - АдминистрированияИБ = СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); - АдминистрированияИБ.ИмяАдминистратораКластера = ?(Объект.КластерТребуетАутентификации, Объект.ИмяАдминистратораКластера, ""); - АдминистрированияИБ.ПарольАдминистратораКластера = ?(Объект.КластерТребуетАутентификации, Объект.ПарольАдминистратораКластера, ""); - АдминистрированияИБ.ПортКластераСерверов = ?(Объект.НестандартныеПортыСервера, Объект.ПортКластераСерверов, 0); - АдминистрированияИБ.ПортАгентаСервера = ?(Объект.НестандартныеПортыСервера, Объект.ПортАгентаСервера, 0); - СоединенияИБ.ЗаписатьПараметрыАдминистрированияИБ(АдминистрированияИБ); + АдминистрированияИБ = ПолучитьПараметрыАдминистрированияИБ(); + + АдминистрированияИБ.ИмяАдминистратораИБ = Объект.ИмяАдминистратораИБ; + АдминистрированияИБ.ПарольАдминистратораИБ = Объект.ПарольАдминистратораИБ; + + Если НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда + АдминистрированияИБ.ИмяАдминистратораКластера = ?(Объект.КластерТребуетАутентификации, Объект.ИмяАдминистратораКластера, ""); + АдминистрированияИБ.ПарольАдминистратораКластера = ?(Объект.КластерТребуетАутентификации, Объект.ПарольАдминистратораКластера, ""); + АдминистрированияИБ.ПортКластераСерверов = ?(Объект.НестандартныеПортыСервера, Объект.ПортКластераСерверов, 0); + АдминистрированияИБ.ПортАгентаСервера = ?(Объект.НестандартныеПортыСервера, Объект.ПортАгентаСервера, 0); + КонецЕсли; + ЗаписатьПараметрыАдминистрированияИБ(АдминистрированияИБ); КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция ПолучитьПараметрыАдминистрированияИБ() + + Возврат СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); + +КонецФункции + +&НаСервереБезКонтекста +Процедура ЗаписатьПараметрыАдминистрированияИБ(АдминистрированияИБ) + + СоединенияИБ.ЗаписатьПараметрыАдминистрированияИБ(АдминистрированияИБ); + +КонецПроцедуры + &НаКлиенте Процедура ВосстановитьНастройкиОбновленияКонфигурации() @@ -988,7 +1040,7 @@ // Восстановление настроек Если НастройкиОбновленияКонфигурации = Неопределено Тогда - НастройкиОбновленияКонфигурации = ОбновлениеКонфигурации.ПолучитьСтруктуруНастроекПомощника(); + НастройкиОбновленияКонфигурации = ОбновлениеКонфигурацииВызовСервера.ПолучитьСтруктуруНастроекПомощника(); ОбновлениеКонфигурацииКлиентСервер.ПолучитьОбновленныеНастройкиОбновленияКонфигурации(НастройкиОбновленияКонфигурации); КонецЕсли; ЗаполнитьЗначенияСвойств(Объект, НастройкиОбновленияКонфигурации); @@ -1005,35 +1057,44 @@ ПараметрыОбновления.ФлагАвтоПереходаНаСтраницуСОбновлением = Истина; КонецЕсли; - Если ПараметрыРаботыКлиента.НастройкиОбновления.ЕстьДоступДляОбновления - И НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда + Если ПараметрыРаботыКлиента.НастройкиОбновления.ЕстьДоступДляОбновления Тогда - Настройка = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); - Объект.ИмяАдминистратораКластера = Настройка.ИмяАдминистратораКластера; - Объект.ПарольАдминистратораКластера = Настройка.ПарольАдминистратораКластера; - Объект.КластерТребуетАутентификации = НЕ ПустаяСтрока(Объект.ИмяАдминистратораКластера); - Объект.НестандартныеПортыСервера = Настройка.ПортКластераСерверов <> 0 ИЛИ Настройка.ПортАгентаСервера <> 0; - Если Объект.НестандартныеПортыСервера Тогда - Объект.ПортКластераСерверов = Настройка.ПортКластераСерверов; - Объект.ПортАгентаСервера = Настройка.ПортАгентаСервера; - Иначе - Попытка - ПортыПоУмолчанию = ПортыСервераПоУмолчанию(ПараметрыРаботыКлиента.ИмяCOMСоединителя); - Объект.ПортКластераСерверов = ПортыПоУмолчанию.ПортКластераСерверов; - Объект.ПортАгентаСервера = ПортыПоУмолчанию.ПортАгентаСервера; - Исключение - ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); - - ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала,, - НСтр("ru = 'Ошибка при восстановлении настроек обновления:'") + " " + - ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); - - КонецПопытки; + + Настройка = СоединенияИБПовтИсп.ПолучитьПараметрыАдминистрированияИБ(); + + Объект.ИмяАдминистратораИБ = Настройка.ИмяАдминистратораИБ; + Объект.ПарольАдминистратораИБ = Настройка.ПарольАдминистратораИБ; + + Если НЕ ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая Тогда + Объект.ИмяАдминистратораКластера = Настройка.ИмяАдминистратораКластера; + Объект.ПарольАдминистратораКластера = Настройка.ПарольАдминистратораКластера; + Объект.КластерТребуетАутентификации = НЕ ПустаяСтрока(Объект.ИмяАдминистратораКластера); + Объект.НестандартныеПортыСервера = Настройка.ПортКластераСерверов <> 0 ИЛИ Настройка.ПортАгентаСервера <> 0; + Если Объект.НестандартныеПортыСервера Тогда + Объект.ПортКластераСерверов = Настройка.ПортКластераСерверов; + Объект.ПортАгентаСервера = Настройка.ПортАгентаСервера; + Иначе + Попытка + ПортыПоУмолчанию = ПортыСервераПоУмолчанию(ПараметрыРаботыКлиента.ИмяCOMСоединителя); + Объект.ПортКластераСерверов = ПортыПоУмолчанию.ПортКластераСерверов; + Объект.ПортАгентаСервера = ПортыПоУмолчанию.ПортАгентаСервера; + Исключение + ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); + + ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала,, + НСтр("ru = 'Ошибка при восстановлении настроек обновления:'") + " " + + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); + + КонецПопытки; + КонецЕсли; КонецЕсли; - - КонецЕсли; + КонецЕсли; -КонецПроцедуры + Если Параметры.ЗавершениеРаботыСистемы Тогда + Объект.РежимОбновления = 0; + КонецЕсли; + +КонецПроцедуры &НаКлиенте Функция ПортыСервераПоУмолчанию(ИмяCOMСоединителя) @@ -1133,8 +1194,11 @@ Элементы.ПанельИнформацияОбОбновлении.ТекущаяСтраница = Элементы.ПанельИнформацияОбОбновлении.ПодчиненныеЭлементы.ОбновлениеНеТребуется; Элементы.ЗаголовокОбновления.Заголовок = НСтр("ru = 'Обновление не требуется'"); + ИначеЕсли СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ГлавныйУзел <> Неопределено Тогда + Элементы.ПанельИнформацияОбОбновлении.ТекущаяСтраница = Элементы.ОбновлениеПроизводитсяВГлавномУзле; + Элементы.ЗаголовокОбновления.Заголовок = НСтр("ru = 'Обновление не требуется'"); Иначе - Элементы.ПанельИнформацияОбОбновлении.ТекущаяСтраница = Элементы.ПанельИнформацияОбОбновлении.ПодчиненныеЭлементы.ОбновлениеНеОбнаружено; + Элементы.ПанельИнформацияОбОбновлении.ТекущаяСтраница = Элементы.ПанельИнформацияОбОбновлении.ПодчиненныеЭлементы.ОбновлениеНеОбнаружено; Элементы.ЗаголовокОбновления.Заголовок = НСтр("ru = 'Обновления конфигурации не обнаружено'"); КонецЕсли; @@ -1143,6 +1207,11 @@ Элементы.НадписьПереченьРелизовНаДискахИТС.Видимость = НЕ ПустаяСтрока(ПереченьРелизовНаДискахИТС); Элементы.ГруппаПроверкиДискаИТС.Видимость = Объект.ИсточникОбновления = 1 И Объект.ИсточникДискаИТС <> 1; + Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда + ДоступностьКнопкиНазад = Ложь; + Элементы.ГруппаПроверкиДискаИТС.Видимость = Ложь; + КонецЕсли; + ИначеЕсли НоваяТекущаяСтраница = Страницы.ДлительнаяОперация Тогда ДоступностьКнопкиДалее = Ложь; @@ -1184,6 +1253,9 @@ Элементы.НадписьРезервнаяКопияФайл.Заголовок = ТекстНадписиРезервнойКопииИБ(); + Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда + ДоступностьКнопкиНазад = Ложь; + КонецЕсли; ИначеЕсли НоваяТекущаяСтраница = Страницы.ВыборРежимаОбновленияСервер Тогда Если Объект.КодЗадачиПланировщика = 0 И НЕ ДатаВремяОбновленияУстановлена Тогда @@ -1224,10 +1296,14 @@ КонецЕсли; Элементы.ПанельПереходаНаСледующийШагРежимаОбновленияСервер.ТекущаяСтраница = СледСтраница; + Если Не СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоГлавныйУзел Тогда + ДоступностьКнопкиНазад = Ложь; + КонецЕсли; ИначеЕсли НоваяТекущаяСтраница = Страницы.УспешноеОбновление Тогда Элементы.ПанельПорядокОбновленияПриЗавершении.Видимость = НЕ ПустаяСтрока(ИмяФайлаПорядокОбновления); ФункцияКнопкиДалее = Ложь; + ДоступностьКнопкиНазад = Ложь; ИначеЕсли НоваяТекущаяСтраница = Страницы.НеуспешноеОбновление Тогда @@ -1254,16 +1330,13 @@ Если ЗапрашиватьАвторизациюИБ Тогда УстановкаПароля = ВводитьПарольАдминистратора(); Элементы.ПанельПредупреждениеОWindowsАвторизации.Видимость = УстановкаПароля; - ПоследнийЭлементГруппы = ?(УстановкаПароля, - Элементы.ПолеПарольАдминистратораИБПроверка, - Элементы.ПолеПарольАдминистратораИБ); - Элементы.ПолеПарольАдминистратораИБПроверка.Видимость = УстановкаПароля; Объект.ИмяАдминистратораИБ = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе.Имя; КонецЕсли; Элементы.ПанельАвторизацияКластераСерверов.Видимость = НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформационнаяБазаФайловая; Элементы.ПанельДоступККластеру.Доступность = Объект.КластерТребуетАутентификации; Элементы.ПанельНестандартныеПортыСервера.Доступность = Объект.НестандартныеПортыСервера; + ТекущийЭлемент = Элементы.ПарольАдминистратораИБСервер; ИначеЕсли НоваяТекущаяСтраница = Страницы.МестоположениеДискаИТС Тогда @@ -1280,14 +1353,11 @@ Элементы.ПанельАвторизацияИБ.Видимость = ЗапрашиватьАвторизациюИБ; Если ЗапрашиватьАвторизациюИБ Тогда УстановкаПароля = ВводитьПарольАдминистратора(); - Элементы.ПанельПредупреждениеОWindowsАвторизации1.Видимость = УстановкаПароля; - ПоследнийЭлементГруппы = ?(УстановкаПароля, - Элементы.ПолеПарольАдминистратораИБПроверка1, - Элементы.ПолеПарольАдминистратораИБ1); - Элементы.ПолеПарольАдминистратораИБПроверка1.Видимость = УстановкаПароля; + Элементы.ПредупреждениеОWindowsАвторизацииФайл.Видимость = УстановкаПароля; Объект.ИмяАдминистратораИБ = СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИнформацияОПользователе.Имя; КонецЕсли; Элементы.ГруппаComcntrФайловыйРежим.Видимость = НЕ СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ЭтоБазоваяВерсияКонфигурации; + ТекущийЭлемент = Элементы.ПарольАдминистратораИБФайл; КонецЕсли; @@ -1453,8 +1523,8 @@ ВыполнитьОбновление = Истина; ФлагЗавершенияРаботы = Истина; Возврат ТекущаяСтраница.Имя; - ИначеЕсли Объект.РежимОбновления = 1 Тогда // Не обновлять сейчас - УдалитьЗадачуПланировщика(Объект.КодЗадачиПланировщика); + ИначеЕсли Объект.РежимОбновления = 1 Тогда // При завершении работы + ИначеЕсли Объект.РежимОбновления = 2 Тогда // Запланировать обновление Если НЕ ПроверитьДопустимуюДатуОбновления(Объект.ДатаВремяОбновления, ВыдаватьСообщения) Тогда ТекущийЭлемент = Элементы.ПолеДатаВремяОбновления; @@ -1480,11 +1550,14 @@ Возврат ТекущаяСтраница.Имя; КонецЕсли; + // Емец + ПредлагатьОбновлениеИнформационнойБазыПриЗавершенииСеанса = Объект.РежимОбновления = 1; + Сообщение = НСтр("ru = 'Выбран режим обновления: '"); Если Объект.РежимОбновления = 0 Тогда // Обновить сейчас Сообщение = Сообщение + НСтр("ru = 'сейчас.'"); - ИначеЕсли Объект.РежимОбновления = 1 Тогда // Не обновлять сейчас - Сообщение = Сообщение + НСтр("ru = 'отмена.'"); + ИначеЕсли Объект.РежимОбновления = 1 Тогда // при завершении работы // Емец + Сообщение = Сообщение + НСтр("ru = 'при завершении работы.'"); ИначеЕсли Объект.РежимОбновления = 2 Тогда // Запланировать обновление Сообщение = Сообщение + НСтр("ru = 'запланировать.'"); КонецЕсли; @@ -1652,15 +1725,6 @@ Страницы = Элементы.СтраницыПомощника.ПодчиненныеЭлементы; ЗапрашиватьАвторизациюИБ = ЗапрашиватьПарольАдминистратора(); УстановкаПароля = ВводитьПарольАдминистратора(); - Если ЗапрашиватьАвторизациюИБ И УстановкаПароля Тогда - Если Объект.ПарольАдминистратораИБ <> Объект.ПарольАдминистратораИБПроверка Тогда - Если ВыдаватьСообщения Тогда - Предупреждение(НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'")); - КонецЕсли; - ТекущийЭлемент = Элементы.ПолеПарольАдминистратораИБ; - Возврат Страницы.ПараметрыАвторизации.Имя; - КонецЕсли; - КонецЕсли; Если Объект.КластерТребуетАутентификации Тогда @@ -1908,7 +1972,8 @@ &НаКлиенте Функция ПроверитьДоступКИБ() - ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); + + ИмяСобытияЖурнала = ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(); Результат = Истина; ОбнаруженнаяОшибкаПодключения = ""; // В базовых версиях проверку подключения не осуществляем; @@ -1926,6 +1991,8 @@ ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ИмяСобытияЖурнала, "Информация", ТекстСообщения); + + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); Попытка ComConnector = Новый COMОбъект(ИмяCOMСоединителя); СтрокаСоединенияИнформационнойБазы = ПараметрыПодключения.СтрокаСоединенияИнформационнойБазы + ПараметрыПодключения.СтрокаПодключения; @@ -2015,8 +2082,8 @@ ПутьЗапускаемогоСкрипта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1 %2 //nologo ""%3""", ИмяЗапускаемогоСкрипта, ?(РежимОтладкиСкрипта(), "//X //D", ""), ИмяГлавногоФайлаСкрипта); - Объект.КодЗадачиПланировщика = СоздатьЗадачуПланировщика(ПутьЗапускаемогоСкрипта, Объект.ДатаВремяОбновления); - ОбновлениеКонфигурации.ЗаписатьСтатусОбновления(ИмяПользователя(), Объект.КодЗадачиПланировщика <> 0, Ложь, Ложь); + Объект.КодЗадачиПланировщика = СоздатьЗадачуПланировщика(ПутьЗапускаемогоСкрипта, Объект.ДатаВремяОбновления); + ЗаписатьСтатусОбновления(ИмяПользователя(), Объект.КодЗадачиПланировщика <> 0, Ложь, Ложь); Возврат Объект.КодЗадачиПланировщика <> 0; КонецФункции @@ -2061,7 +2128,7 @@ КонецПопытки; Возврат КодЗадачи; - + КонецФункции &НаКлиенте @@ -2090,12 +2157,14 @@ СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("ИмяФайлаРекламы", Подг(?(Объект.ИсточникОбновления <> 2, ПараметрыОбновления.ИмяКаталогаРекламы + ПараметрыОбновления.ФайлРекламы, ""))); - СтруктураПараметров.Вставить("ИмяФайлаПрограммы" , ПараметрыОбновления.ИмяФайлаПрограммы); - СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации" , ПараметрыОбновления.СобытиеЖурналаРегистрации); - СтруктураПараметров.Вставить("ИмяCOMСоединителя" , ПараметрыРаботыКлиента.ИмяCOMСоединителя); - СтруктураПараметров.Вставить("ЭтоБазоваяВерсияКонфигурации" , ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации); - СтруктураПараметров.Вставить("ИнформационнаяБазаФайловая" , ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая); - СтруктураПараметров.Вставить("ПараметрыСкрипта" , ПолучитьПараметрыАутентификацииАдминистратораОбновления()); + СтруктураПараметров.Вставить("ИмяИсполняемогоФайлаКонфигуратора", ПараметрыОбновления.ИмяИсполняемогоФайлаКонфигуратора); + СтруктураПараметров.Вставить("ИмяИсполняемогоФайлаКлиента" , ПараметрыОбновления.ИмяИсполняемогоФайлаКлиента); + СтруктураПараметров.Вставить("СобытиеЖурналаРегистрации" , ПараметрыОбновления.СобытиеЖурналаРегистрации); + СтруктураПараметров.Вставить("ИмяCOMСоединителя" , ПараметрыРаботыКлиента.ИмяCOMСоединителя); + СтруктураПараметров.Вставить("ЭтоБазоваяВерсияКонфигурации" , ПараметрыРаботыКлиента.ЭтоБазоваяВерсияКонфигурации); + СтруктураПараметров.Вставить("ИнформационнаяБазаФайловая" , ПараметрыРаботыКлиента.ИнформационнаяБазаФайловая); + СтруктураПараметров.Вставить("ПараметрыСкрипта" , ПолучитьПараметрыАутентификацииАдминистратораОбновления()); + //Добавим в структуру и имя запускаемой программы #Если Не ВебКлиент Тогда @@ -2127,8 +2196,8 @@ ИмяГлавногоФайлаСкрипта = Неопределено; Если ИнтерактивныйРежим Тогда - // Вспомогательный файл: splash.bmp - БиблиотекаКартинок.ЗаставкаВнешнейОперации.Записать(ПараметрыОбновления.КаталогВременныхФайловОбновления + "splash.bmp"); + // Вспомогательный файл: splash.png + БиблиотекаКартинок.ЗаставкаВнешнейОперации.Записать(ПараметрыОбновления.КаталогВременныхФайловОбновления + "splash.png"); // Вспомогательный файл: splash.ico БиблиотекаКартинок.ЗначокЗаставкиВнешнейОперации.Записать(ПараметрыОбновления.КаталогВременныхФайловОбновления + "splash.ico"); // Вспомогательный файл: progress.gif @@ -2941,17 +3010,23 @@ &НаКлиенте Функция ТекстНадписиРезервнойКопииИБ() - Результат = НСтр("ru = 'Не создавать резервную копию ИБ и не выполнять откат при нештатной ситуации'"); + + Результат = НСтр("ru = 'Не создавать резервную копию ИБ'"); + Если Объект.СоздаватьРезервнуюКопию = 1 Тогда - Результат = НСтр("ru = 'Создавать временную резервную копию ИБ и выполнять откат при нештатной ситуации'"); + Результат = НСтр("ru = 'Создавать временную резервную копию ИБ'"); ИначеЕсли Объект.СоздаватьРезервнуюКопию = 2 Тогда - Если Объект.ВосстанавливатьИнформационнуюБазу Тогда - Результат = НСтр("ru = 'Создавать резервную копию ИБ и выполнять откат при нештатной ситуации'"); - Иначе - Результат = НСтр("ru = 'Создавать резервную копию ИБ и не выполнять откат при нештатной ситуации'"); - КонецЕсли; + Результат = НСтр("ru = 'Создавать резервную копию ИБ'"); КонецЕсли; + + Если Объект.ВосстанавливатьИнформационнуюБазу Тогда + Результат = Результат + " " + НСтр("ru = 'и выполнять откат при нештатной ситуации'"); + Иначе + Результат = Результат + " " + НСтр("ru = 'и не выполнять откат при нештатной ситуации'"); + КонецЕсли; + Возврат Результат; + КонецФункции &НаКлиенте @@ -2973,11 +3048,25 @@ ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(ОбновлениеКонфигурацииКлиент.СобытиеЖурналаРегистрации(), "Информация", НСтр("ru = 'Выполняется процедура обновления конфигурации: '") + ИмяГлавногоФайлаСкрипта); - ОбновлениеКонфигурации.ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь, СообщенияДляЖурналаРегистрации); + ЗаписатьСтатусОбновления(ИмяПользователя(), Истина, Ложь, Ложь, СообщенияДляЖурналаРегистрации); ЗапуститьПриложение("""" + ИмяГлавногоФайлаСкрипта + """", ОбновлениеКонфигурацииКлиент.ПолучитьКаталогФайла(ИмяГлавногоФайлаСкрипта)); КонецПроцедуры +&НаСервереБезКонтекста +Процедура ЗаписатьСтатусОбновления(ИмяАдминистратораОбновления, ОбновлениеЗапланировано, ОбновлениеВыполнено, РезультатОбновления, + СообщенияДляЖурналаРегистрации = Неопределено) + + ОбновлениеКонфигурации.ЗаписатьСтатусОбновления( + ИмяАдминистратораОбновления, + ОбновлениеЗапланировано, + ОбновлениеВыполнено, + РезультатОбновления, + СообщенияДляЖурналаРегистрации + ); + +КонецПроцедуры + &НаКлиенте Функция ОбъектWMI() // WMI: http://www.microsoft.com/technet/scriptcenter/resources/wmifaq.mspx @@ -2997,3 +3086,4 @@ Возврат Неопределено; КонецПопытки; КонецФункции + diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html index 466233e3c..904999954 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

              diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/ManagerModule.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/ManagerModule.bsl index f16d0c654..619111c9c 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/ManagerModule.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + @@ -5,3 +7,5 @@ + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/ObjectModule.bsl b/SSL/src/DataProcessors/ОбновлениеКонфигурации/ObjectModule.bsl index 8b1378917..dc862d04c 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/ObjectModule.bsl @@ -1 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt index 007fda328..981d4558d 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/ЗаставкаОбновленияКонфигурации/Template.txt @@ -1,216 +1,194 @@ - - - -Обновление конфигурации "1C:Предприятие"... + + + Обновление конфигурации "1C:Предприятие"... + + + + - - + - - - -
              - -
              - -
              - Пожалуйста, подождите. Выполняется обновление конфигурации. -
              - -
              -   -
              - + +
              + +
              +
              + Пожалуйста, подождите.
              + Выполняется обновление конфигурации. +
              +
              +   +
              - - \ No newline at end of file + diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt index bcf07172b..cf14b9af7 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/Templates/МакетФайлаОбновленияКонфигурации/Template.txt @@ -4,8 +4,8 @@ var now = new Date(); var outFileName = "log" + now.valueOf() + ".txt"; // Путь к log-файлу var advFileName = [ИмяФайлаРекламы]; // Путь к файлу рекламы. var cfgFileNames = [ИменаФайловОбновления]; // Пути к .cf/.cfu-файлам с обновлениями -var v8exe = [ИмяИсполняемогоФайлаПрограммы]; // Путь к исполняемому файлу 1С:Предприятия 8 -var v8exeEnterprise = [ИмяФайлаЗапускаПриложенияВРежимеПредприятия]; // Путь к исполняемому файлу 1С:Предприятия 8 для запуска тонкого или толстоко клиентов +var v8conf = [ИмяИсполняемогоФайлаКонфигуратора] // Путь к исполняемому файлу 1С:Предприятия 8 +var v8client = [ИмяИсполняемогоФайлаКлиента] // Путь к исполняемому файлу 1С:Предприятия 8 var infoBasePath = [ПараметрПутиКИнформационнойБазе]; var BaseFileName = [СтрокаПутиКФайлуИнформационнойБазы]; var connectionString = [СтрокаСоединенияИнформационнойБазы] + ';UC=ПакетноеОбновлениеКонфигурацииИБ'; @@ -19,6 +19,7 @@ var adminName = [ИмяАдминистратораОбновления]; // и var doBlockUsers = [БлокироватьСоединенияИБ]; // устанавливать блокировку соединений перед обновлением var comConnectorName = [ИмяCOMСоединителя]; // имя COM-класса для работы с 1С:Предприятием 8 через COM-соединение var useComConnector = [ИспользоватьCOMСоединитель]; // флаг использования COM-соединения для работы с 1С:Предприятием 8 +var startEnterprise = [ЗапускСеансаПослеОбновления]; // выполнять запуск предприятия после обновления var tempLogFileName = "templog.txt"; #КонецОбласти @@ -29,17 +30,15 @@ var oFileSystemObject = new ActiveXObject("Scripting.FileSystemObject"); var thisFileName; var thisFileDir; -if (oHTA != null) -{ - thisFileName = eval("oHTA.commandLine"); - thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf("\\") - 1); +if (oHTA != null) { + thisFileName = eval("oHTA.commandLine"); + thisFileDir = thisFileName.substr(1, thisFileName.lastIndexOf("\\") - 1); } -else -{ - thisFileName = eval("WScript.ScriptFullName"); - thisFileDir = thisFileName.substr(0, thisFileName.lastIndexOf("\\") + 1); +else { + thisFileName = eval("WScript.ScriptFullName"); + thisFileDir = thisFileName.substr(0, thisFileName.lastIndexOf("\\") + 1); } -var oShell = new ActiveXObject("WScript.Shell"); +var oShell = new ActiveXObject("WScript.Shell"); oShell.CurrentDirectory = thisFileDir; var errorMarker = "{ERR}"; @@ -51,272 +50,225 @@ var connectionsDenied = false; var logging1C = false; // Глобальная переменная com-соединения - var ComConnection = null; // Переменные состояния функции doDisconnectAndBlockUsersHTA() var disconnectionStep = 0; -var connection = null; var disconnectionInterval; var disconnectionStartDateTime; // Открыть файл sFilePath. -function runApp(sFilePath, sFileArgs, show, bWaitOnReturn) -{ - if (bWaitOnReturn == undefined) - bWaitOnReturn = false; - if (show == undefined) - show = SW_SHOW; - if (sFileArgs == undefined) - sFileArgs = ""; - var ret = 1; - log(format("Запускается: {0}; параметры: {1}; окно: {2}; ожидание: {3}", +function runApp(sFilePath, sFileArgs, show, bWaitOnReturn) { + if (bWaitOnReturn == undefined) + bWaitOnReturn = false; + if (show == undefined) + show = SW_SHOW; + if (sFileArgs == undefined) + sFileArgs = ""; + var ret = 1; + log(format("Запускается: {0}; параметры: {1}; окно: {2}; ожидание: {3}", sFilePath, sFileArgs, SWtoString(show), bWaitOnReturn)); - if (oFileSystemObject.FileExists(sFilePath)) - { - try - { - ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn); - } - catch(e) - { + if (oFileSystemObject.FileExists(sFilePath)) { + try { + ret = oShell.Run(format('"{0}" {1}', sFilePath, sFileArgs), show, bWaitOnReturn); + } + catch (e) { log(format("Исключение в runApp: {0}, {1}.", e.name, e.message), true); return 1; } - log(format("Код возврата: {0}", ret), ret != 0); - return ret; + log(format("Код возврата: {0}", ret), ret != 0); + return ret; } else - log(format("Запускаемый файл не существует: {0}", sFilePath), true); - return ret; + log(format("Запускаемый файл не существует: {0}", sFilePath), true); + return ret; } -function clearLogFile() -{ +function clearLogFile() { var outFile = oFileSystemObject.OpenTextFile(outFileName, ForWriting, true, TristateTrue); outFile.Close(); } // Записать текст в лог -function log(text, failed) -{ - if (failed == undefined) - failed = false; - - logFile(text, failed); +function log(text, failed) { + if (failed == undefined) + failed = false; + + logFile(text, failed); } // Записать текст в лог-файл -function logFile(text, failed) -{ - var now = new Date(); +function logFile(text, failed) { + var now = new Date(); var f; - try - { + try { f = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); } - catch(e) { return; } - try - { - var status = (failed == false ? successMarker : errorMarker); - f.WriteLine(format("{0} {1} {2}", now, status, text)); - } - finally - { - try - { - f.Close(); - } - catch(e) { return; } - } + catch (e) { return; } + try { + var status = (failed == false ? successMarker : errorMarker); + f.WriteLine(format("{0} {1} {2}", now, status, text)); + } + finally { + try { + f.Close(); + } + catch (e) { return; } + } } // Записать текст из временного лог-файла -function appendLog() -{ - var f; - var outf; - var text; - try - { - f = oFileSystemObject.OpenTextFile(tempLogFileName, ForReading, false, TristateFalse); - outf = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); - } - catch(e) { return; } - try - { - if (!f.AtEndOfStream) - { - text = f.ReadAll(); - outf.WriteLine(text); - } - } - finally - { - try - { - f.Close(); - outf.Close(); - } - catch(e) { return; } +function appendLog() { + var f; + var outf; + var text; + try { + f = oFileSystemObject.OpenTextFile(tempLogFileName, ForReading, false, TristateFalse); + outf = oFileSystemObject.OpenTextFile(outFileName, ForAppending, true, TristateTrue); + } + catch (e) { return; } + try { + if (!f.AtEndOfStream) { + text = f.ReadAll(); + outf.WriteLine(text); + } + } + finally { + try { + f.Close(); + outf.Close(); + } + catch (e) { return; } } } // Записать текст в журнал регистрации -function log1C(text, failed) -{ +function log1C(text, failed) { if (logging1C) return; var connection = createConnection(); if (connection == null) return; - try - { + try { log1CInternal(connection, text, failed); - } - finally - { - connection = null; - } + } finally { }; } // Записать текст в журнал регистрации -function log1CInternal(connection, text, failed) -{ +function log1CInternal(connection, text, failed) { if (logging1C) return; logging1C = true; - try - { - try - { + try { + try { var eventLogLevel = failed ? connection.EventLogLevel.Error : connection.EventLogLevel.Information; - connection.WriteLogEvent(eventLogID, eventLogLevel, null, null, text, + connection.WriteLogEvent(eventLogID, eventLogLevel, null, null, text, connection.EventLogEntryTransactionMode.Independent); } - catch(e) - { + catch (e) { log(format("Исключение в log1CInternal: {0}, {1}.", e.name, e.message), true); return; } } - finally - { + finally { logging1C = false; } } // Инициализация -function initialize() -{ +function initialize() { clearLogFile(); log(format("Файл скрипта: {0}", thisFileName)); log(format("Количество файлов обновления: {0}", cfgFileNames.length)); - for(var i = 0; i < cfgFileNames.length; i++) + for (var i = 0; i < cfgFileNames.length; i++) log(format("{0}. {1}", i + 1, cfgFileNames[i])); - + // Отображение рекламы. if (advFileName.length > 0) - runApp(advFileName); + runApp(advFileName); - return 0; + return 0; } // Финализация -function finalize(success) -{ +function finalize(success) { if (success == undefined) success = false; // Запись результата обновления в Event Log writeEventLog(success); - if (!success) - { - if (UseRestore) - { - restoreDB(); // Восстановление ИБ из временного архива - } + if (!success) { + if (UseRestore) { + restoreDB(); // Восстановление ИБ из временного архива + } allowConnections(false); // Разрешение подключений } write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации setResult(success); - + // очистка глобального COM-соединения ComConnection = null; - + } - -function createConnection() -{ + +function createConnection() { if (!useComConnector) - return null; - - if (ComConnection != null) - return ComConnection; - - - try - { + return null; + + if (ComConnection != null) + return ComConnection; + + + try { + log("Начат сеанс внешнего соединения с ИБ", false); var ComConnector = new ActiveXObject(comConnectorName); ComConnection = ComConnector.Connect(connectionString); return ComConnection; } - catch(e) - { + catch (e) { log(format("Исключение в createConnection: {0}, {1}", e.name, e.message), true); return null; } } // Записать весь log-файл в журнал регистрации -function write1CEventLog() -{ +function write1CEventLog() { if (!oFileSystemObject.FileExists(outFileName)) return; - + var connection = createConnection(); if (connection == null) return; - try - { + try { var f = oFileSystemObject.OpenTextFile(outFileName, ForReading, false, TristateTrue); - + var text; - while (!f.AtEndOfStream) - { + while (!f.AtEndOfStream) { text = f.ReadLine(); while ((text.indexOf(successMarker) < 0) && (text.indexOf(errorMarker) < 0) && !f.AtEndOfStream) - text += "\n" + f.ReadLine(); + text += "\n" + f.ReadLine(); var failed = text.indexOf(errorMarker) > 0; log1CInternal(connection, text, failed); } } - catch(e) - { + catch (e) { log(format("Исключение в write1CEventLog: {0}, {1}.", e.name, e.message), true); return; } - finally - { - connection = null; - } } -function doSetResult(success) -{ +function doSetResult(success) { var connection = createConnection(); if (connection == null) return (useComConnector ? 1 : 0); var res = 0; - try - { + try { connection.ОбновлениеКонфигурации.ЗавершитьОбновление(success, emailAddress, adminName); } - catch(e) - { + catch (e) { log(format("Исключение при вызове ОбновлениеКонфигурации.ЗавершитьОбновление: {0}, {1}.", e.name, e.message), true); res = 2; } @@ -325,18 +277,15 @@ function doSetResult(success) // Передать в приложение результат выполнения -function setResult(success) -{ +function setResult(success) { var result = doSetResult(success); CollectGarbage(); // освобождает соединения с COM-объектом return result; } // Записать результат выполнения процедуры обновления в Event Log -function writeEventLog(success) -{ - try - { +function writeEventLog(success) { + try { var eventKind = success ? EVENT_SUCCESS : EVENT_CRITICAL; var message; if (success) @@ -348,164 +297,143 @@ function writeEventLog(success) message += " Протокол обновления сохранен в журнал регистрации."; oShell.LogEvent(eventKind, message); } - catch(e) - { + catch (e) { log(format("Исключение в writeEventLog: {0}, {1}.", e.name, e.message), true); } } // Cоздание резервной копии информационной базы -function backupDB() -{ - if (!createBackup) - return 0; - try - { - var newpath = oFileSystemObject.CopyFile(BaseFileName, backupFileName, true); - ret = 0; - log(format("Резервной копия базы создана", ret), ret != 0); - } - catch(e) - { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при создании резервной копии базы", e.name, e.message), true); - ret = -1; - } - if (ret == 0) - backupCreated = true; - return ret; +function backupDB() { + if (!createBackup) + return 0; + try { + var newpath = oFileSystemObject.CopyFile(BaseFileName, backupFileName, true); + ret = 0; + log(format("Резервной копия базы создана", ret), ret != 0); + } + catch (e) { + CollectGarbage(); // предотвращает исключение out of memory + log(format("Исключение при создании резервной копии базы", e.name, e.message), true); + ret = -1; + } + if (ret == 0) + backupCreated = true; + return ret; } // Восстановление информационной базы из резервной копии -function restoreDB() -{ +function restoreDB() { if (!backupCreated) return 0; - try - { - oFileSystemObject.CopyFile(backupFileName, BaseFileName, true); - ret = 0; - log(format("База данных восстановлена из резервной копии", ret), ret != 0); - } - catch(e) - { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при восстановлении базы из резервной копии", e.name, e.message), true); - ret = -1; - } - return ret; + try { + oFileSystemObject.CopyFile(backupFileName, BaseFileName, true); + ret = 0; + log(format("База данных восстановлена из резервной копии", ret), ret != 0); + } + catch (e) { + CollectGarbage(); // предотвращает исключение out of memory + log(format("Исключение при восстановлении базы из резервной копии", e.name, e.message), true); + ret = -1; + } + return ret; } -function doAllowConnections(updateAndFillDB) -{ +function doAllowConnections(updateAndFillDB) { if (updateAndFillDB == undefined) updateAndFillDB = true; - + var connection = createConnection(); if (connection == null) return (useComConnector ? 1 : 0); - + if (updateAndFillDB) - try - { - connection.ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы(); + try { + connection.ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы(); } - catch(e) - { + catch (e) { CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове ОбновлениеИнформационнойБазы.ВыполнитьОбновлениеИнформационнойБазы: {0}, {1}.", e.name, e.message), true); + log(format("Исключение при вызове ОбновлениеИнформационнойБазыВызовСервера.ВыполнитьОбновлениеИнформационнойБазы: {0}, {1}.", e.name, e.message), true); return 2; } - if (connectionsDenied) - try - { - connection.СоединенияИБ.РазрешитьРаботуПользователей(); - connectionsDenied = false; - } - catch(e) - { - CollectGarbage(); // предотвращает исключение out of memory - log(format("Исключение при вызове СоединенияИБ.РазрешитьРаботуПользователей: {0}, {1}.", e.name, e.message), true); - return 3; - } + if (connectionsDenied) + try { + connection.СоединенияИБ.РазрешитьРаботуПользователей(); + connectionsDenied = false; + } + catch (e) { + CollectGarbage(); // предотвращает исключение out of memory + log(format("Исключение при вызове СоединенияИБ.РазрешитьРаботуПользователей: {0}, {1}.", e.name, e.message), true); + return 3; + } return 0; } // Первоначальное заполнение информационной базы, разрешение подключений новых соединений, // и оповещение о результате обновления -function allowConnections(updateAndFillDB) -{ +function allowConnections(updateAndFillDB) { var result = doAllowConnections(updateAndFillDB); CollectGarbage(); // освобождает соединения с COM-объектом return result; } -function doDisconnectAndBlockUsersHTA(connection) -{ +function doDisconnectAndBlockUsersHTA(connection) { if (connection == null) return 1; var result = 0; - try - { - while (true) - { - switch(disconnectionStep) - { - case 0: - { - connection.СоединенияИБ.УстановитьБлокировкуСоединений("в связи с необходимостью обновления конфигурации.", - "ПакетноеОбновлениеКонфигурацииИБ"); - disconnectionInterval = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().ИнтервалОжиданияЗавершенияРаботыПользователей * 1000; - disconnectionStartDateTime = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().Начало; - if (connection.ЗначениеЗаполнено(disconnectionStartDateTime)) - disconnectionStep++; - else - disconnectionStep += 2; - break; - } - case 1: - { - if (!connection.СоединенияИБ.УстановленаБлокировкаСоединений() || - connection.ПолучитьСеансыИнформационнойБазы().Количество() <= 1) + try { + while (true) { + switch (disconnectionStep) { + case 0: { + connection.СоединенияИБ.УстановитьБлокировкуСоединений("в связи с необходимостью обновления конфигурации.", + "ПакетноеОбновлениеКонфигурацииИБ"); + disconnectionInterval = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().ИнтервалОжиданияЗавершенияРаботыПользователей * 1000; + disconnectionStartDateTime = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().Начало; + if (connection.ЗначениеЗаполнено(disconnectionStartDateTime)) + disconnectionStep++; + else + disconnectionStep += 2; + break; + } + case 1: + { + if (!connection.СоединенияИБ.УстановленаБлокировкаСоединений() || + connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) <= 1) { + disconnectionStep++; + break; + } + + var now = new Date(); + if (now - disconnectionInterval <= disconnectionStartDateTime) // если интервал ожидания еще не истек, то ждем еще раз + return -1; disconnectionStep++; break; } - - var now = new Date(); - if (now - disconnectionInterval <= disconnectionStartDateTime) - return -1; - disconnectionStep++; - break; - } case 2: - { - if (!connection.СоединенияИБ.УстановленаБлокировкаСоединений()) { - log("Попытка завершения работы пользователей завершилась безуспешно: отменена блокировка ИБ.", true); - return 3; - } + if (!connection.СоединенияИБ.УстановленаБлокировкаСоединений()) { + log("Попытка завершения работы пользователей завершилась безуспешно: отменена блокировка ИБ.", true); + return 3; + } - if (connection.ПолучитьСеансыИнформационнойБазы().Количество() <= 1) - return 0; - - // после начала блокировки сеансы всех пользователей должны быть отключены - // если этого не произошло пробуем принудительно прервать соединение. - doDisconnectConnections(connection); - if (connection.ПолучитьСеансыИнформационнойБазы().Количество() > 1) - { - connection.СоединенияИБ.РазрешитьРаботуПользователей(); - var message = connection.СоединенияИБ.ПолучитьНазванияСоединенийИБ("Не удалось отключить соединения:"); - log(message, true); - return 3; - } - return 0; - } + if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) <= 1) + return 0; + + // после начала блокировки сеансы всех пользователей должны быть отключены + // если этого не произошло пробуем принудительно прервать соединение. + doDisconnectConnections(connection); + if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) > 1) { + connection.СоединенияИБ.РазрешитьРаботуПользователей(); + var message = connection.СоединенияИБ.ПолучитьНазванияСоединенийИБ("Не удалось отключить соединения:"); + log(message, true); + return 3; + } + return 0; + } } } } - catch(e) - { + catch (e) { CollectGarbage(); // предотвращает исключение out of memory log(format("Исключение при вызове doDisconnectAndBlockUsersHTA: {0}, {1}.", e.name, e.message), true); result = 2; @@ -519,148 +447,131 @@ function doDisconnectAndBlockUsersHTA(connection) // 0 - функция выполнена успешно // другое число - код ошибки // -function disconnectAndBlockUsersHTA() -{ - if (!doBlockUsers) - { +function disconnectAndBlockUsersHTA() { + if (!doBlockUsers) { connectionsDenied = true; return 0; } - if (disconnectionStep == 0) - { - connection = createConnection(); - if (connection == null && useComConnector) - return 1; - } + var connection = createConnection(); + if (connection == null && useComConnector) + return 1; var result = -1; if (useComConnector) - try - { - result = doDisconnectAndBlockUsersHTA(connection); - } - finally - { - if (result != -1) - { - connection = null; - ComConnection = null; - CollectGarbage(); // освобождает соединения с COM-объектом - } - } - else - result = 0; + try { + result = doDisconnectAndBlockUsersHTA(connection); + } + finally { + if (result != -1) { + connection = null; + ComConnection = null; + CollectGarbage(); // освобождает соединения с COM-объектом + log("Завершен сеанс внешнего соединения с ИБ", false); + } + } + else + result = 0; if (result == 0) connectionsDenied = true; return result; } -function doDisconnectAndBlockUsers() -{ +function doDisconnectAndBlockUsers() { var connection = createConnection(); if (connection == null) return (useComConnector ? 1 : 0); - var result = 0; - try - { - connection.СоединенияИБ.УстановитьБлокировкуСоединений("в связи с необходимостью обновления конфигурации.", + try { + connection.СоединенияИБ.УстановитьБлокировкуСоединений("в связи с необходимостью обновления конфигурации.", "ПакетноеОбновлениеКонфигурацииИБ"); - + var interval = connection.СоединенияИБ.ПараметрыБлокировкиСеансов().ИнтервалОжиданияЗавершенияРаботыПользователей * 1000; var startDateTime = connection.ПолучитьБлокировкуУстановкиСоединений().Начало; var now = new Date(); - + if (connection.ЗначениеЗаполнено(startDateTime)) - while (now - interval <= startDateTime) - { + while (now - interval <= startDateTime) { if (!connection.ПолучитьБлокировкуУстановкиСоединений().Установлена) break; - if (connection.ПолучитьСеансыИнформационнойБазы().Количество() <= 1) + if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) <= 1) break; - WScript.Sleep(18 * 1000); - now = new Date(); + WScript.Sleep(18 * 1000); // Ждем 18 секунд до следующей проверки. + now = new Date(); } - - if (!connection.ПолучитьБлокировкуУстановкиСоединений().Установлена) - { + + if (!connection.ПолучитьБлокировкуУстановкиСоединений().Установлена) { log("Попытка завершения работы пользователей завершилась безуспешно: отменена блокировка ИБ.", true); return 3; } - // после начала блокировки сеансы всех пользователей должны быть отключены - // если этого не произошло пробуем принудительно прервать соединения. + // после начала блокировки сеансы всех пользователей должны быть отключены + // если этого не произошло, пробуем принудительно прервать соединения. doDisconnectConnections(connection); - if (connection.ПолучитьСеансыИнформационнойБазы().Количество() > 1) - { - connection.СоединенияИБ.РазрешитьРаботуПользователей(); - var message = connection.СоединенияИБ.ПолучитьНазванияСоединенийИБ("Не удалось отключить соединения:"); - log(message, true); - return 3; - } - - if (result != 0) - log("Попытка завершения работы пользователей завершилась безуспешно.", true); + if (connection.СоединенияИБ.КоличествоСеансовИнформационнойБазы(false) > 1) { + connection.СоединенияИБ.РазрешитьРаботуПользователей(); + var message = connection.СоединенияИБ.ПолучитьНазванияСоединенийИБ("Не удалось отключить соединения:"); + log(message, true); + return 3; + } } - catch(e) - { + catch (e) { CollectGarbage(); // предотвращает исключение out of memory log(format("Исключение при вызове doDisconnectAndBlockUsers: {0}, {1}.", e.name, e.message), true); - result = 2; + return 2; } - return result; + return 0; } -function doDisconnectConnections(connection) -{ +function doDisconnectConnections(connection) { var adminParams = connection.СоединенияИБ.ПолучитьПараметрыАдминистрированияИБ(); connection.СоединенияИБКлиентСервер.ОтключитьСоединенияИБ(adminParams); } // Завершение работы пользователей и запрет на подключение новых соединений -function disconnectAndBlockUsers() -{ +function disconnectAndBlockUsers() { var result = 0; if (doBlockUsers) - result = doDisconnectAndBlockUsers(); + result = doDisconnectAndBlockUsers(); + + ComConnection = null; CollectGarbage(); // освобождает соединения с COM-объектом + WScript.Sleep(1000); // ждем 1 секунду (достаточно для завершения COM-соединения). + if (result == 0 && doBlockUsers) connectionsDenied = true; return result; } // Загрузка файла обновления в основную базу -function loadCfg(fileName) -{ - // /LoadCfg<имя cf файла> (для базовых версий не используется) загрузка конфигурации из файла - var ret = runApp(v8exe, format('CONFIG {0} {1} /LoadCfg "{2}" /Out "{3}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages', +function loadCfg(fileName) { + // /LoadCfg<имя cf файла> (для базовых версий не используется) загрузка конфигурации из файла + var ret = runApp(v8conf, format('CONFIG {0} {1} /LoadCfg "{2}" /Out "{3}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages', infoBasePath, infoBaseAuthorization, fileName, tempLogFileName), SW_SHOW, true); - appendLog(); - return ret; + appendLog(); + return ret; } // Загрузка файла обновления в основную базу -function updateCfg(fileName) -{ - // /UpdateCfg<имя cf | cfu файла> обновление конфигурации, находящейся на поддержке - var ret = runApp(v8exe, format('CONFIG {0} {1} /UpdateCfg "{2}" /Out "{3}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages', +function updateCfg(fileName) { + // /UpdateCfg<имя cf | cfu файла> обновление конфигурации, находящейся на поддержке + var ret = runApp(v8conf, format('CONFIG {0} {1} /UpdateCfg "{2}" /Out "{3}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages', infoBasePath, infoBaseAuthorization, fileName, tempLogFileName), SW_SHOW, true); - appendLog(); - return ret; + appendLog(); + return ret; } // Обновление конфигурации информационной базы -function updateDbCfg() -{ - // /UpdateDBCfg - обновление конфигурации базы данных - var ret = runApp(v8exe, format('CONFIG {0} {1} /UpdateDBCfg /Out "{2}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages', +function updateDbCfg() { + // /UpdateDBCfg - обновление конфигурации базы данных + var ret = runApp(v8conf, format('CONFIG {0} {1} /UpdateDBCfg /Out "{2}" /UCПакетноеОбновлениеКонфигурацииИБ /DisableStartupMessages', infoBasePath, infoBaseAuthorization, tempLogFileName), SW_SHOW, true); - appendLog(); - return ret; + appendLog(); + return ret; } // Интерактивный запуск "1С:Предприятие" -function runEnterprise() -{ - return runApp(v8exeEnterprise, format('ENTERPRISE {0} {1}', infoBasePath, infoBaseAuthorization), SW_SHOW, false); +function runEnterprise() { + if (startEnterprise) + return runApp(v8client, format('ENTERPRISE {0} {1}', infoBasePath, infoBaseAuthorization), SW_SHOW, false); + return 0; } #КонецОбласти diff --git a/SSL/src/DataProcessors/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo b/SSL/src/DataProcessors/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo index 77688ecc0..8c1a4969e 100644 --- a/SSL/src/DataProcessors/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo +++ b/SSL/src/DataProcessors/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo @@ -227,19 +227,6 @@ - - ПарольАдминистратораИБПроверка - - ru - Пароль администратора ИБ (проверка) - - - String - - - - - ПарольАдминистратораКластера @@ -401,6 +388,7 @@ String
              + true @@ -678,7 +666,7 @@ - + Форма ru @@ -687,24 +675,6 @@ PersonalComputer MobileDevice - - ПредупреждениеWMI - - ru - Предупреждение WMI - - PersonalComputer - MobileDevice - - - НастройкаРезервнойКопии - - ru - Настройка резервной копии - - PersonalComputer - MobileDevice - НастройкаРасписания @@ -714,6 +684,15 @@ PersonalComputer MobileDevice + + НастройкаРезервнойКопии + + ru + Настройка резервной копии + + PersonalComputer + MobileDevice + Обозреватель @@ -723,6 +702,15 @@ PersonalComputer MobileDevice + + ПредупреждениеWMI + + ru + Предупреждение WMI + + PersonalComputer + MobileDevice + МакетФайлаОбновленияКонфигурации 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/ИсторияВыполнения/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнеия/Module.bsl similarity index 82% rename from SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl rename to SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнеия/Module.bsl index d51d5f9aa..f19f14870 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнения/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ИсторияВыполнеия/Module.bsl @@ -1,14 +1,7 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". - Если Параметры.Свойство("АвтоТест") Тогда - Возврат; - КонецЕсли; - КлючеваяОперация = Параметры.НастройкиИстории.КлючеваяОперация; ДатаНачала = Параметры.НастройкиИстории.ДатаНачала; ДатаОкончания = Параметры.НастройкиИстории.ДатаОкончания; @@ -47,9 +40,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - // Запрещает редактирование ключевой операции из формы обработки // т.к. могут пострадать внутренние механизмы // diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Form.form index e101bcaa9..a1b3c4197 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Form.form @@ -14,7 +14,7 @@ Right ВыполнятьЗамерыПроизводительностиРасширеннаяПодсказка - 21 + 25 Label true true @@ -49,7 +49,7 @@ ОсновныеНастройкиРасширеннаяПодсказка - 20 + 24 Label true true @@ -86,7 +86,7 @@ Right ВыполнятьЭкспортДанныхРасширеннаяПодсказка - 24 + 28 Label true true @@ -116,7 +116,7 @@ ДатаНачалаЭкспортаРезультатовЗамеровПроизводительностиРасширеннаяПодсказка - 26 + 30 Label true true @@ -157,7 +157,7 @@ КаталогФайловЭкспортаРасширеннаяПодсказка - 28 + 32 Label true true @@ -200,7 +200,7 @@ НастроитьРасписаниеЭкспортаРасширеннаяПодсказка - 30 + 34 Label true true @@ -217,6 +217,80 @@ UserCmds Auto + + ИспользоватьПользовательскуюВК + 20 + true + true + + true + + + ИспользоватьПользовательскуюВК + + + ИспользоватьПользовательскуюВКРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ИспользоватьПользовательскуюВККонтекстноеМеню + 21 + true + + CheckBoxField + Enter + true + Left + true + + + + ПутьДоВК + 18 + true + true + + true + + + ПутьДоВК + + + ПутьДоВКРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ПутьДоВККонтекстноеМеню + 19 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + true true @@ -232,7 +306,7 @@ НастройкиЭкспортаРасширеннаяПодсказка - 23 + 27 Label true true @@ -265,7 +339,7 @@ ФормаСохранитьНастройкиРасширеннаяПодсказка - 18 + 22 Label true true @@ -291,7 +365,7 @@ ФормаСохранитьЗакрытьРасширеннаяПодсказка - 19 + 23 Label true true @@ -378,6 +452,41 @@ true + + ПутьДоВК + + <key>ru</key> + <value>Путь до файла внешней компаненты</value> + + 1 + + String + + + + true + + + true + + + + ИспользоватьПользовательскуюВК + + <key>ru</key> + <value>Использовать пользовательскую внешнюю компоненту</value> + + 4 + + Boolean + + + true + + + true + + НастроитьРасписаниеЭкспорта diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Module.bsl index 8c386c968..e8bb2a051 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/НастройкаПодсистемы/Module.bsl @@ -7,9 +7,9 @@ ВыполнятьЭкспортДанных = ПолучитьИспользованиеРегламентногоЗадания(); КаталогЭкспорта = ПолучитьКаталогЭкспорта(); - + КонецПроцедуры - + &НаКлиенте Процедура КаталогФайловЭкспортаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form index f76b118ed..d1185efe5 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Form.form @@ -16,7 +16,7 @@ </dataPath> <extendedTooltip> <name>ДатаНачалаРасширеннаяПодсказка</name> - <id>79</id> + <id>78</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -57,7 +57,7 @@ </dataPath> <extendedTooltip> <name>ДатаОкончанияРасширеннаяПодсказка</name> - <id>81</id> + <id>80</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -98,7 +98,7 @@ </dataPath> <extendedTooltip> <name>ШагРасширеннаяПодсказка</name> - <id>83</id> + <id>82</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -167,7 +167,7 @@ </toolTip> <extendedTooltip> <name>НастройкиРасширеннаяПодсказка</name> - <id>78</id> + <id>77</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -222,7 +222,7 @@ </dataPath> <extendedTooltip> <name>КлючеваяОперацияРасширеннаяПодсказка</name> - <id>101</id> + <id>100</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -272,7 +272,7 @@ </dataPath> <extendedTooltip> <name>ПриоритетРасширеннаяПодсказка</name> - <id>103</id> + <id>102</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -321,7 +321,7 @@ </handlers> <extendedTooltip> <name>ЦелевоеВремяРасширеннаяПодсказка</name> - <id>105</id> + <id>104</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -362,7 +362,7 @@ </userVisible> <extendedTooltip> <name>ПроизводительностьПереместитьВверхРасширеннаяПодсказка</name> - <id>88</id> + <id>87</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -391,7 +391,7 @@ </userVisible> <extendedTooltip> <name>ПроизводительностьПереместитьВнизРасширеннаяПодсказка</name> - <id>89</id> + <id>88</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -420,7 +420,7 @@ </userVisible> <extendedTooltip> <name>ПроизводительностьУстановитьОтборРасширеннаяПодсказка</name> - <id>90</id> + <id>89</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -452,10 +452,10 @@ </handlers> <searchStringAddition> <name>ПроизводительностьСтрокаПоиска</name> - <id>92</id> + <id>91</id> <extendedTooltip> <name>ПроизводительностьСтрокаПоискаРасширеннаяПодсказка</name> - <id>94</id> + <id>93</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -465,7 +465,7 @@ </extendedTooltip> <contextMenu> <name>ПроизводительностьСтрокаПоискаКонтекстноеМеню</name> - <id>93</id> + <id>92</id> <autoFill>true</autoFill> </contextMenu> <source>Производительность</source> @@ -475,10 +475,10 @@ </searchStringAddition> <viewStatusAddition> <name>ПроизводительностьСостояниеПросмотра</name> - <id>95</id> + <id>94</id> <extendedTooltip> <name>ПроизводительностьСостояниеПросмотраРасширеннаяПодсказка</name> - <id>97</id> + <id>96</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -488,7 +488,7 @@ </extendedTooltip> <contextMenu> <name>ПроизводительностьСостояниеПросмотраКонтекстноеМеню</name> - <id>96</id> + <id>95</id> <autoFill>true</autoFill> </contextMenu> <type>ViewStatusAddition</type> @@ -499,10 +499,10 @@ </viewStatusAddition> <searchControlAddition> <name>ПроизводительностьУправлениеПоиском</name> - <id>98</id> + <id>97</id> <extendedTooltip> <name>ПроизводительностьУправлениеПоискомРасширеннаяПодсказка</name> - <id>100</id> + <id>99</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -512,7 +512,7 @@ </extendedTooltip> <contextMenu> <name>ПроизводительностьУправлениеПоискомКонтекстноеМеню</name> - <id>99</id> + <id>98</id> <autoFill>true</autoFill> </contextMenu> <type>SearchControlAddition</type> @@ -523,7 +523,7 @@ </searchControlAddition> <extendedTooltip> <name>ПроизводительностьРасширеннаяПодсказка</name> - <id>91</id> + <id>90</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -548,7 +548,7 @@ </userVisible> <extendedTooltip> <name>ПроизводительностьКонтекстноеМенюУказатьAPDEXРасширеннаяПодсказка</name> - <id>87</id> + <id>86</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -606,7 +606,7 @@ </toolTip> <extendedTooltip> <name>СтраницаТаблицаРасширеннаяПодсказка</name> - <id>86</id> + <id>85</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -640,7 +640,7 @@ </dataPath> <extendedTooltip> <name>ДиаграммаРасширеннаяПодсказка</name> - <id>116</id> + <id>115</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -682,7 +682,7 @@ </toolTip> <extendedTooltip> <name>СтраницаДиаграммаРасширеннаяПодсказка</name> - <id>115</id> + <id>114</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -711,7 +711,7 @@ </toolTip> <extendedTooltip> <name>ФормаРасширеннаяПодсказка</name> - <id>85</id> + <id>84</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -765,36 +765,6 @@ </picture> <representationInContextMenu>Auto</representationInContextMenu> </items> - <items xsi:type="form:Button"> - <name>ФормаЭкспортДанных</name> - <id>65</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <extendedTooltip> - <name>ФормаЭкспортДанныхРасширеннаяПодсказка</name> - <id>76</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <commandName>Form.Command.ЭкспортДанных</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <picture xsi:type="core:PictureRef"> - <picture>StdPicture.WriteChanges</picture> - </picture> - <representationInContextMenu>Auto</representationInContextMenu> - <locationInCommandBar>InAdditionalSubmenu</locationInCommandBar> - </items> <items xsi:type="form:Button"> <name>ФормаНастройка</name> <id>66</id> @@ -809,7 +779,7 @@ </userVisible> <extendedTooltip> <name>ФормаНастройкаРасширеннаяПодсказка</name> - <id>77</id> + <id>76</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl index 24c4233cf..071b4174d 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/Форма/Module.bsl @@ -1,6 +1,10 @@ -//////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ +// Процедура загружает настройки ТЧ, если это первое открытие +// то в ТЧ добавляются все ключевые операции из справочника +// &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) @@ -21,26 +25,6 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -&НаКлиенте -Процедура ФормаПриСменеСтраницы(Элемент, ТекущаяСтраница) - - Если Не ТаблицаОбновлена Или Не ДиаграммаОбновлена Тогда - Если Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаДиаграмма" Тогда - ДиаграммаОбновлена = Истина; - ИначеЕсли Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаТаблица" Тогда - ТаблицаОбновлена = Истина; - КонецЕсли; - ОбновитьПоказатели(); - КонецЕсли; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Производительность - &НаКлиенте Процедура ПроизводительностьПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) @@ -60,6 +44,45 @@ КонецПроцедуры +&НаКлиенте +Процедура ФормаПриСменеСтраницы(Элемент, ТекущаяСтраница) + + Если Не ТаблицаОбновлена Или Не ДиаграммаОбновлена Тогда + Если Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаДиаграмма" Тогда + ДиаграммаОбновлена = Истина; + ИначеЕсли Элементы.Форма.ТекущаяСтраница.Имя = "СтраницаТаблица" Тогда + ТаблицаОбновлена = Истина; + КонецЕсли; + ОбновитьПоказатели(); + КонецЕсли; + +КонецПроцедуры + +// Запрещает редактирование ключевой операции из формы обработки +// т.к. могут пострадать внутренние механизмы +// +&НаКлиенте +Процедура КлючеваяОперацияОткрытие(Элемент, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ЦелевоеВремяПриИзменении(Элемент) + + ТД = Элементы.Производительность.ТекущиеДанные; + Если ТД = Неопределено Тогда + Возврат; + КонецЕсли; + + ИзменитьЦелевоеВремя(ТД.КлючеваяОперация, ТД.ЦелевоеВремя); + ОбновитьПоказатели(); + +КонецПроцедуры + +// Отображение истории выполнения ключевой операции +// &НаКлиенте Процедура ПроизводительностьВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) @@ -82,33 +105,13 @@ НастройкиИстории = Новый Структура("КлючеваяОперация, ДатаНачала, ДатаОкончания", СтрокаТЧ.КлючеваяОперация, НачалоПериода, ОкончаниеПериода); ПараметрыОткрытия = Новый Структура("НастройкиИстории", НастройкиИстории); - ОткрытьФормуМодально("Обработка.ОценкаПроизводительности.Форма.ИсторияВыполнения", ПараметрыОткрытия); - -КонецПроцедуры - -&НаКлиенте -Процедура КлючеваяОперацияОткрытие(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - -КонецПроцедуры - -&НаКлиенте -Процедура ЦелевоеВремяПриИзменении(Элемент) - - ТД = Элементы.Производительность.ТекущиеДанные; - Если ТД = Неопределено Тогда - Возврат; - КонецЕсли; - - ИзменитьЦелевоеВремя(ТД.КлючеваяОперация, ТД.ЦелевоеВремя); - ОбновитьПоказатели(); + ОткрытьФормуМодально("Обработка.ОценкаПроизводительности.Форма.ИсторияВыполнеия", ПараметрыОткрытия); КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +/////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ КОМАНД &НаКлиенте Процедура Обновить(Команда) @@ -185,7 +188,7 @@ Состояние(НСтр("ru = 'Экспорт данных...'")); Экспортировать(АдресВХранилище, ПараметрыЭкспорта); - СохранитьФайлНаКлиент(АдресВХранилище, ИмяФайла); + //ОценкаПроизводительностиКлиент.СохранитьФайлНаКлиент(АдресВХранилище, ИмяФайла); КонецПроцедуры @@ -249,8 +252,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +/////////////////////////////////////////////////////////////////////// +// ОСНОВНЫЕ ПРОЦЕДУРЫ (СЕРВЕР) // Процедура рассчитывает показатели производительности // @@ -377,7 +381,7 @@ /////////////////////////////////////////////////////////////////////// -// Работа с формой (сервер) +// РАБОТА С ФОРМОЙ (СЕРВЕР) // Обрабатывает реквизиты табличной части "Производительность" // @@ -692,7 +696,9 @@ Для Каждого Серия Из Диаграмма.Серии Цикл ЗначениеТочки = ТЗ[Строка][Столбец]; - Диаграмма.УстановитьЗначение(Точка, Серия, ?(ЗначениеТочки = 0.001 ИЛИ ЗначениеТочки = 0, ЗначениеТочки, ЗначениеТочки - 0.001)); + Если ЗначениеТочки <> Неопределено И ЗначениеТочки <> Null Тогда + Диаграмма.УстановитьЗначение(Точка, Серия, ?(ЗначениеТочки = 0.001 ИЛИ ЗначениеТочки = 0, ЗначениеТочки, ЗначениеТочки - 0.001)); + КонецЕсли; Строка = Строка + 1; КонецЦикла; @@ -707,7 +713,7 @@ /////////////////////////////////////////////////////////////////////// -// Экспорт данных +// ЭКСПОРТ ДАННЫХ &НаКлиенте Функция ПодготовитьПараметрыЭкспорта() @@ -906,7 +912,7 @@ ЗаписьXML.ЗаписатьАтрибут("Version", "1.0.0.3"); ЗаписьXML.ЗаписатьАтрибут("BeginDate", Строка(Начало)); ЗаписьXML.ЗаписатьАтрибут("EndDate", Строка(Конец)); - ЗаписьXML.ЗаписатьАтрибут("ExportDate", Строка(ТекущаяДатаСеанса())); + ЗаписьXML.ЗаписатьАтрибут("ExportDate", Строка(ТекущаяДата())); Для а = 0 По МассивКО.Количество() - 1 Цикл ЗаписьXML.ЗаписатьНачалоЭлемента("KeyOperation"); @@ -947,38 +953,9 @@ КонецПроцедуры -// Записывает файл из хранилища по указанному пути. -&НаКлиенте -Процедура СохранитьФайлНаКлиент(Знач Адрес, Знач ИмяФайла) - - #Если Не ВебКлиент Тогда - - ПолучитьФайл(Адрес, ИмяФайла, Ложь); - Предупреждение(НСтр("ru = 'Экспорт завершен.'")); - - #Иначе - - Если ИмяФайла <> Неопределено Тогда - ОписаниеПередаваемогоФайла = Новый ОписаниеПередаваемогоФайла; - ОписаниеПередаваемогоФайла.Хранение = Адрес; - ОписаниеПередаваемогоФайла.Имя = ИмяФайла; - МассивФайлов = Новый Массив; - МассивФайлов.Добавить(ОписаниеПередаваемогоФайла); - - ПолучитьФайлы(МассивФайлов, , ,Ложь); - Иначе - // Интерактивное получение с запросом имени файла - // зависит от настроек браузера - ПолучитьФайл(Адрес, , Истина); - КонецЕсли; - - #КонецЕсли - -КонецПроцедуры - /////////////////////////////////////////////////////////////////////// -// Прочие процедуры и функции +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ // Сдвигает строки табличной части и меняет приоритеты ключевых операций // @@ -1009,6 +986,65 @@ КонецПроцедуры +/////////////////////////////////////////////////////////////////////////////// +// Блокировки объектов при изменении + +// Устанавливает исключительную управляемую блокировку на ссылку +// +&НаСервереБезКонтекста +Процедура ЗаблокироватьСсылку(Ссылка) + + БлокировкаДанных = Новый БлокировкаДанных; + ЭлементБлокировки = БлокировкаДанных.Добавить(Ссылка.Метаданные().ПолноеИмя()); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + ЭлементБлокировки.УстановитьЗначение("Ссылка", Ссылка); + БлокировкаДанных.Заблокировать(); + +КонецПроцедуры + +// Начинает транзакцию и устанавливает исключительную +// управляемую блокировку по значению ссылки +// +// Параметры: +// Ссылка - ЛюбаяСсылка, ссылка, которую надо заблокировать +// +// Возвращаемое значение: +// Объект - объект полученный из ссылки +// +&НаСервереБезКонтекста +Функция НачатьИзменениеОбъекта(Ссылка) + + НачатьТранзакцию(); + + ЗаблокироватьСсылку(Ссылка); + + Объект = Ссылка.ПолучитьОбъект(); + + Возврат Объект; + +КонецФункции + +// Фиксирует транзакцию и записывает объект +// +// Параметры: +// Объект - ЛюбойОбъект, объект, изменения которого следует зафиксировать +// Записывать - Булево, необходимость записи объекта перед фиксацией транзакции +// +&НаСервереБезКонтекста +Процедура ЗафиксироватьИзменениеОбъекта(Объект, Записывать = Истина) + + Если Записывать Тогда + Объект.Записать(); + КонецЕсли; + + ЗафиксироватьТранзакцию(); + +КонецПроцедуры + + +/////////////////////////////////////////////////////////////////////// +// Прочие процедуры и функции + // Выполняет обмен приоритетами ключевых операций // // Параметры: @@ -1017,19 +1053,19 @@ // КлючеваяОперация2 - СправочникСсылка.КлючевыеОперации // Приоритет2 - Число, будет присвоен КлючеваяОперация1 // -&НаСервереБезКонтекста +&НаСервере Процедура ОбментяьПриоритеты(КлючеваяОперация1, Приоритет1, КлючеваяОперация2, Приоритет2) НачатьТранзакцию(); - ОбъектКлючевойОперации = ОценкаПроизводительностиВызовСервераПолныеПрава.НачатьИзменениеОбъекта(КлючеваяОперация1); + ОбъектКлючевойОперации = НачатьИзменениеОбъекта(КлючеваяОперация1); ОбъектКлючевойОперации.Приоритет = Приоритет2; ОбъектКлючевойОперации.ДополнительныеСвойства.Вставить(ОценкаПроизводительностиВызовСервераПолныеПрава.НеПроверятьПриоритет()); - ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьИзменениеОбъекта(ОбъектКлючевойОперации); + ЗафиксироватьИзменениеОбъекта(ОбъектКлючевойОперации); - ОбъектКлючевойОперации = ОценкаПроизводительностиВызовСервераПолныеПрава.НачатьИзменениеОбъекта(КлючеваяОперация2); + ОбъектКлючевойОперации = НачатьИзменениеОбъекта(КлючеваяОперация2); ОбъектКлючевойОперации.Приоритет = Приоритет1; - ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьИзменениеОбъекта(ОбъектКлючевойОперации); + ЗафиксироватьИзменениеОбъекта(ОбъектКлючевойОперации); ЗафиксироватьТранзакцию(); @@ -1164,6 +1200,10 @@ КонецФункции + +/////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ (ОФОРМЛЕНИЕ, НАСТРОЙКИ) + // Функция возвращает цвет значения Неприемлимо // // Возвращаемое значение: @@ -1341,12 +1381,12 @@ // КлючеваяОперация - СправочникСсылка.КлючевыеОперации, операция, у которой необходимо изменить целеове время // ЦелевоеВремя - Число, новое целевое время // -&НаСервереБезКонтекста +&НаСервере Процедура ИзменитьЦелевоеВремя(КлючеваяОперация, ЦелевоеВремя) - КлючеваяОперацияОбъект = ОценкаПроизводительностиВызовСервераПолныеПрава.НачатьИзменениеОбъекта(КлючеваяОперация); + КлючеваяОперацияОбъект = НачатьИзменениеОбъекта(КлючеваяОперация); КлючеваяОперацияОбъект.ЦелевоеВремя = ЦелевоеВремя; - ОценкаПроизводительностиВызовСервераПолныеПрава.ЗафиксироватьИзменениеОбъекта(КлючеваяОперацияОбъект); + ЗафиксироватьИзменениеОбъекта(КлючеваяОперацияОбъект); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl index 61528bfce..ec432a92a 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/Forms/ФормаОтбора/Module.bsl @@ -1,5 +1,21 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +/////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ КОМАНД + +&НаКлиенте +Процедура ОК(Команда) + + Структура = Новый Структура("Направление, Состояние"); + Структура.Направление = Направление; + Структура.Состояние = Состояние; + + ЭтаФорма.Закрыть(Структура); + +КонецПроцедуры + + +/////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаКлиенте Процедура НаправлениеПриИзменении(Элемент) @@ -15,22 +31,9 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ -&НаКлиенте -Процедура ОК(Команда) - - Структура = Новый Структура("Направление, Состояние"); - Структура.Направление = Направление; - Структура.Состояние = Состояние; - - ЭтаФорма.Закрыть(Структура); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +/////////////////////////////////////////////////////////////////////// +// ВСПОМОГАТЕЛЬНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ &НаКлиенте Процедура СформироватьУсловие() diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html b/SSL/src/DataProcessors/ОценкаПроизводительности/Help/ru.html index f4becfdeb..7ff037be8 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.16447"></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.16446"></meta></head><body> <p>Интерпретация полученных значений APDEX: </p> <table border="1"><tbody><tr><td colspan="3"> <p align="center"><strong>Шкала APDEX</strong> </p></td></tr><tr><td colspan="2"> diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl index e69769463..cf10d2386 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ObjectModule.bsl @@ -1,5 +1,8 @@ -//////////////////////////////////////////////////////////////////////////////// -// ПРОГРАММНЫЙ ИНТЕРФЕЙС +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +/////////////////////////////////////////////////////////////////////// +// ОСНОВНЫЕ МЕТОДЫ ОБРАБОТКИ ДАННЫХ //Функция формирует таблицу значений которая будет выведена пользователю // @@ -228,58 +231,6 @@ КонецФункции -// Вычисляет размер и количество шагов на заднном интервале -// -// Параметры: -// ШагЧисло [OUT] - Число, количество секунд, которое надо прибавить к дате начала чтобы выполнить следующий шаг -// КоличествоШагов [OUT] - Число, количество шагов на заданном интервале -// -// Возвращаемое значение: -// Булево - -// Истина, параметры рассчитаны -// Ложь, параметры не рассчитаны -// -Функция ПолучитьПериодичность(ШагЧисло, КоличествоШагов) Экспорт - - РазницаВремени = ДатаОкончания - ДатаНачала + 1; - - Если РазницаВремени <= 0 Тогда - Возврат Ложь; - КонецЕсли; - - //КоличествоШагов - целое число, округленное вверх - КоличествоШагов = 0; - Если Шаг = "Час" Тогда - ШагЧисло = 86400 / 24; - КоличествоШагов = РазницаВремени / ШагЧисло; - КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); - ИначеЕсли Шаг = "День" Тогда - ШагЧисло = 86400; - КоличествоШагов = РазницаВремени / ШагЧисло; - КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); - ИначеЕсли Шаг = "Неделя" Тогда - ШагЧисло = 86400 * 7; - КоличествоШагов = РазницаВремени / ШагЧисло; - КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); - ИначеЕсли Шаг = "Месяц" Тогда - ШагЧисло = 86400 * 30; - Врем = КонецДня(ДатаНачала); - Пока Врем < ДатаОкончания Цикл - Врем = ДобавитьМесяц(Врем, 1); - КоличествоШагов = КоличествоШагов + 1; - КонецЦикла; - Иначе - ШагЧисло = 0; - КоличествоШагов = 1; - КонецЕсли; - - Возврат Истина; - -КонецФункции - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - // Процедура рассчитывает итоговое значение APDEX // // Параметры: @@ -339,6 +290,59 @@ КонецПроцедуры + +/////////////////////////////////////////////////////////////////////// +// ДОПОЛНИТЕЛЬНЫЕ МЕТОДЫ ОБРАБОТКИ ДАННЫХ + +// Вычисляет размер и количество шагов на заднном интервале +// +// Параметры: +// ШагЧисло [OUT] - Число, количество секунд, которое надо прибавить к дате начала чтобы выполнить следующий шаг +// КоличествоШагов [OUT] - Число, количество шагов на заданном интервале +// +// Возвращаемое значение: +// Булево - +// Истина, параметры рассчитаны +// Ложь, параметры не рассчитаны +// +Функция ПолучитьПериодичность(ШагЧисло, КоличествоШагов) Экспорт + + РазницаВремени = ДатаОкончания - ДатаНачала + 1; + + Если РазницаВремени <= 0 Тогда + Возврат Ложь; + КонецЕсли; + + //КоличествоШагов - целое число, округленное вверх + КоличествоШагов = 0; + Если Шаг = "Час" Тогда + ШагЧисло = 86400 / 24; + КоличествоШагов = РазницаВремени / ШагЧисло; + КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); + ИначеЕсли Шаг = "День" Тогда + ШагЧисло = 86400; + КоличествоШагов = РазницаВремени / ШагЧисло; + КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); + ИначеЕсли Шаг = "Неделя" Тогда + ШагЧисло = 86400 * 7; + КоличествоШагов = РазницаВремени / ШагЧисло; + КоличествоШагов = Цел(КоличествоШагов) + ?(КоличествоШагов - Цел(КоличествоШагов) > 0, 1, 0); + ИначеЕсли Шаг = "Месяц" Тогда + ШагЧисло = 86400 * 30; + Врем = КонецДня(ДатаНачала); + Пока Врем < ДатаОкончания Цикл + Врем = ДобавитьМесяц(Врем, 1); + КоличествоШагов = КоличествоШагов + 1; + КонецЦикла; + Иначе + ШагЧисло = 0; + КоличествоШагов = 1; + КонецЕсли; + + Возврат Истина; + +КонецФункции + // Создает структуру параметров необходимую для рассчета APDEX // // Возвращаеоме значение: @@ -380,3 +384,5 @@ КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo index 6a2871ab8..f8b308a36 100644 --- a/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo +++ b/SSL/src/DataProcessors/ОценкаПроизводительности/ОценкаПроизводительности.mdo @@ -16,6 +16,32 @@ <lang>ru</lang> </pages> </help> + <attributes uuid="e20593fd-b3e3-41d2-8c8d-97b5d6148fa4"> + <name>ДатаНачала</name> + <synonym> + <key>ru</key> + <value>Дата начала</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> + <attributes uuid="4b9771a7-b924-4e61-8468-4633e3c54706"> + <name>ДатаОкончания</name> + <synonym> + <key>ru</key> + <value>Дата окончания</value> + </synonym> + <type> + <types>Date</types> + <dateQualifiers/> + </type> + <minValue xsi:type="core:UndefinedValue"/> + <maxValue xsi:type="core:UndefinedValue"/> + </attributes> <attributes uuid="bc846fc8-3c67-45f8-9c5c-69bf1190baf9"> <name>Диаграмма</name> <synonym> @@ -43,32 +69,6 @@ <minValue xsi:type="core:UndefinedValue"/> <maxValue xsi:type="core:UndefinedValue"/> </attributes> - <attributes uuid="e20593fd-b3e3-41d2-8c8d-97b5d6148fa4"> - <name>ДатаНачала</name> - <synonym> - <key>ru</key> - <value>Дата начала</value> - </synonym> - <type> - <types>Date</types> - <dateQualifiers/> - </type> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - </attributes> - <attributes uuid="4b9771a7-b924-4e61-8468-4633e3c54706"> - <name>ДатаОкончания</name> - <synonym> - <key>ru</key> - <value>Дата окончания</value> - </synonym> - <type> - <types>Date</types> - <dateQualifiers/> - </type> - <minValue xsi:type="core:UndefinedValue"/> - <maxValue xsi:type="core:UndefinedValue"/> - </attributes> <tabularSections uuid="f6e85eeb-d81b-4526-9a33-ab77bd447236"> <producedTypes> <objectType typeId="66185458-821c-4381-afac-97fe177bfea8" valueTypeId="dece21e7-5c47-417e-855a-aebb69b9a506"/> @@ -137,6 +137,24 @@ <fillValue xsi:type="core:UndefinedValue"/> </attributes> </tabularSections> + <forms uuid="1773ff66-ebe4-46e1-b505-d07d87c7fe3e"> + <name>ИсторияВыполнеия</name> + <synonym> + <key>ru</key> + <value>История выполнеия</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> + <forms uuid="f5b66759-8102-4cba-a3fd-ee96db5bc809"> + <name>НастройкаПодсистемы</name> + <synonym> + <key>ru</key> + <value>Настройка подсистемы</value> + </synonym> + <usePurposes>PersonalComputer</usePurposes> + <usePurposes>MobileDevice</usePurposes> + </forms> <forms uuid="6c205eae-9113-46c1-a245-25d29173646e"> <name>Форма</name> <synonym> @@ -146,15 +164,6 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> - <forms uuid="1773ff66-ebe4-46e1-b505-d07d87c7fe3e"> - <name>ИсторияВыполнения</name> - <synonym> - <key>ru</key> - <value>История выполнения</value> - </synonym> - <usePurposes>PersonalComputer</usePurposes> - <usePurposes>MobileDevice</usePurposes> - </forms> <forms uuid="4cc4aa90-49fb-4602-9f9c-d4d47d223988"> <name>ФормаОтбора</name> <synonym> @@ -164,13 +173,4 @@ <usePurposes>PersonalComputer</usePurposes> <usePurposes>MobileDevice</usePurposes> </forms> - <forms uuid="8503a211-ad5e-41e5-98c1-1109523bb630"> - <name>НастройкаПодсистемы</name> - <synonym> - <key>ru</key> - <value>Настройка подсистемы</value> - </synonym> - <usePurposes>PersonalComputer</usePurposes> - <usePurposes>MobileDevice</usePurposes> - </forms> </mdclass:DataProcessor> diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form index 365784341..746ff68f1 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Form.form @@ -422,6 +422,21 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ДополнительныеПараметры</name> + <title> + <key>ru</key> + <value>Дополнительные параметры</value> + + 5 + + + true + + + true + + ВыполнитьПереносВерсийВТома diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl index 14621df4b..634d03db4 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Forms/Форма/Module.bsl @@ -8,6 +8,17 @@ РазмерВерсийВБазеВБайтах = ПолучитьРазмерВерсийВБазе(); РазмерВерсийВБазе = РазмерВерсийВБазеВБайтах / 1048576; + + ДополнительныеПараметры = Новый Структура; + + ДополнительныеПараметры.Вставить( + "ПриОткрытииХранитьФайлыВТомахНаДиске", + ФайловыеФункцииСлужебный.ПолучитьКонстантуХранитьФайлыВТомахНаДиске()); + + ДополнительныеПараметры.Вставить( + "ПриОткрытииЕстьТомаХраненияФайлов", + ФайловыеФункцииСлужебный.ЕстьТомаХраненияФайлов()); + КонецПроцедуры &НаСервере @@ -97,29 +108,32 @@ &НаКлиенте Процедура ВыполнитьПереносФайловВТома(Команда) - Если ФайловыеФункции.ПолучитьТипХраненияФайлов() <> ТипХраненияВТомах Тогда + СвойстваХраненияФайлов = СвойстваХраненияФайлов(); + + Если СвойстваХраненияФайлов.ТипХраненияФайлов <> ТипХраненияВТомах Тогда Предупреждение(НСтр("ru = 'Не установлен тип хранения файлов ""В томах на диске""'")); Возврат; - КонецЕсли; + КонецЕсли; - Если Не ФайловыеФункции.ЕстьТомаХраненияФайлов() Тогда + Если НЕ СвойстваХраненияФайлов.ЕстьТомаХраненияФайлов Тогда Предупреждение(НСтр("ru = 'Нет ни одного тома для размещения файлов'")); Возврат; - КонецЕсли; + КонецЕсли; Если ЧислоВерсийВБазе = 0 Тогда Предупреждение(НСтр("ru = 'Нет ни одного файла в информационной базе'")); Возврат; - КонецЕсли; + КонецЕсли; Результат = Вопрос( - НСтр("ru = 'Выполнить перенос файлов в информационной базе в тома хранения файлов? - | Эта операция может занять продолжительное время.'"), + НСтр("ru = 'Выполнить перенос файлов в информационной базе в тома хранения файлов? + | + |Эта операция может занять продолжительное время.'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да); Если Результат <> КодВозвратаДиалога.Да Тогда Возврат; - КонецЕсли; + КонецЕсли; Состояние(НСтр("ru = 'Выполняется получение списка файлов...'")); @@ -138,7 +152,7 @@ Прогресс = 0; Если ЧислоВерсийВБазе <> 0 Тогда Прогресс = НомерЦикла * 100 / ЧислоВерсийВБазе; - КонецЕсли; + КонецЕсли; Состояние(НСтр("ru = 'Выполняется перенос файла в том...'"), Прогресс, ВерсияСтруктура.Текст, БиблиотекаКартинок.УстановитьВремя); @@ -202,13 +216,28 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция СвойстваХраненияФайлов() + + СвойстваХраненияФайлов = Новый Структура; + + СвойстваХраненияФайлов.Вставить( + "ТипХраненияФайлов", ФайловыеФункцииСлужебный.ПолучитьТипХраненияФайлов()); + + СвойстваХраненияФайлов.Вставить( + "ЕстьТомаХраненияФайлов", ФайловыеФункцииСлужебный.ЕстьТомаХраненияФайлов()); + + Возврат СвойстваХраненияФайлов; + +КонецФункции + &НаСервере Функция ПеренестиМассивВерсийВТом(ПакетВерсий, МассивФайловСОшибками) УстановитьПривилегированныйРежим(Истина); ЧислоОбработанных = 0; - МаксимальныйРазмерФайла = ФайловыеФункции.ПолучитьМаксимальныйРазмерФайла(); + МаксимальныйРазмерФайла = ФайловыеФункцииСлужебный.ПолучитьМаксимальныйРазмерФайла(); Для Каждого ВерсияСтруктура Из ПакетВерсий Цикл @@ -284,7 +313,7 @@ ДвоичныеДанныеФайла = ХранилищеФайла.Получить(); ПутьКФайлуНаТоме = ""; - ФайловыеФункции.ДобавитьНаДиск(ДвоичныеДанныеФайла, ПутьКФайлуНаТоме, СсылкаНаТом, + ФайловыеФункцииСлужебный.ДобавитьНаДиск(ДвоичныеДанныеФайла, ПутьКФайлуНаТоме, СсылкаНаТом, ВерсияСсылка.ДатаМодификацииУниверсальная, ВерсияСсылка.НомерВерсии, ВерсияСсылка.ПолноеНаименование, ВерсияСсылка.Расширение, ВерсияСсылка.Размер, @@ -339,16 +368,16 @@ &НаКлиенте Процедура ПриОткрытии(Отказ) - Если Не ФайловыеФункции.ПолучитьКонстантуХранитьФайлыВТомахНаДиске() Тогда + Если НЕ ДополнительныеПараметры.ПриОткрытииХранитьФайлыВТомахНаДиске Тогда Предупреждение(НСтр("ru = 'Не установлен тип хранения файлов ""В томах на диске""'")); Отказ = Истина; Возврат; - КонецЕсли; + КонецЕсли; - Если Не ФайловыеФункции.ЕстьТомаХраненияФайлов() Тогда + Если НЕ ДополнительныеПараметры.ПриОткрытииЕстьТомаХраненияФайлов Тогда Предупреждение(НСтр("ru = 'Нет ни одного тома для размещения файлов'")); Отказ = Истина; Возврат; - КонецЕсли; + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html b/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html index 12ab7408a..a8a4b8ba7 100644 --- a/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html +++ b/SSL/src/DataProcessors/ПереносФайловВТома/Help/ru.html @@ -1 +1 @@ -<!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.16447"></meta></head><body>Обработка предназначена для переноса файлов, хранящихся в информационной базе в тома хранения файлов. При этом в настройках программы должна быть включена настройка "Хранить файлы в томах на диске".</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.16446"></meta></head><body>Обработка предназначена для переноса файлов, хранящихся в информационной базе в тома хранения файлов. При этом в настройках программы должна быть включена настройка "Хранить файлы в томах на диске".</body></html> \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form index b9c210500..a6c40efa2 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Form.form @@ -86,9 +86,10 @@ </extendedTooltip> <type>UsualButton</type> <commandName>Form.Command.Найти</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Picture</representation> + <representation>PictureAndText</representation> + <defaultButton>true</defaultButton> <autoMaxWidth>true</autoMaxWidth> + <height>1</height> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> <textColor xsi:type="core:ColorRef"> @@ -192,7 +193,7 @@ <id>2</id> <toolTip> <key>ru</key> - <value>Найти</value> + <value>Найти текст</value> </toolTip> <use> <common>true</common> diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl index 9215cdb67..2376873e2 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/УпрощеннаяФорма/Module.bsl @@ -1,25 +1,13 @@ -// Обработка команды Найти -// -&НаКлиенте -Процедура ИскатьВыполнить() - - ПодключитьОбработчикОжидания("ОбработкаОжидания", 0.1, Истина); - -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ЗагрузитьСтрокиПоиска(); КонецПроцедуры -&НаСервере -Процедура ЗагрузитьСтрокиПоиска() - Массив = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска"); - - Если Массив <> Неопределено Тогда - Элементы.ПолеВводаПоиска.СписокВыбора.ЗагрузитьЗначения(Массив); - КонецЕсли; -КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура ПолеВводаПоискаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) @@ -31,6 +19,19 @@ ИскатьВыполнить(); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ИскатьВыполнить() + + ПодключитьОбработчикОжидания("ОбработкаОжидания", 0.1, Истина); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаКлиенте Процедура ОбработкаОжидания() @@ -44,4 +45,14 @@ ЗагрузитьСтрокиПоиска(); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьСтрокиПоиска() + Массив = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска"); + + Если Массив <> Неопределено Тогда + Элементы.ПолеВводаПоиска.СписокВыбора.ЗагрузитьЗначения(Массив); + КонецЕсли; +КонецПроцедуры + diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Form.form b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Form.form index 0d181c911..2f55acefa 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Form.form +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Form.form @@ -19,13 +19,17 @@ <segments>СтрокаПоиска</segments> </dataPath> <titleLocation>None</titleLocation> + <toolTip> + <key>ru</key> + <value>Введите искомый текст или часть фразы</value> + </toolTip> <handlers> <event>OnChange</event> <name>СтрокаПоискаПриИзменении</name> </handlers> <extendedTooltip> <name>СтрокаПоискаРасширеннаяПодсказка</name> - <id>52</id> + <id>53</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -76,7 +80,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>НайтиРасширеннаяПодсказка</name> - <id>54</id> + <id>55</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -84,16 +88,15 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <type>Hyperlink</type> + <type>UsualButton</type> <commandName>Form.Command.Найти</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Picture</representation> + <representation>PictureAndText</representation> + <defaultButton>true</defaultButton> + <width>10</width> <autoMaxWidth>true</autoMaxWidth> + <height>1</height> <autoMaxHeight>true</autoMaxHeight> <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorRef"> - <color>Style.ButtonTextColor</color> - </textColor> <backColor xsi:type="core:ColorRef"> <color>Style.ButtonBackColor</color> </backColor> @@ -113,7 +116,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>СправкаРасширеннаяПодсказка</name> - <id>55</id> + <id>56</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -150,7 +153,7 @@ </toolTip> <extendedTooltip> <name>ГруппаПоискаРасширеннаяПодсказка</name> - <id>51</id> + <id>52</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -170,6 +173,98 @@ <items xsi:type="form:FormGroup"> <name>ГруппаИнформацияОНайденном</name> <id>31</id> + <items xsi:type="form:FormGroup"> + <name>ГруппаНавигация</name> + <id>51</id> + <items xsi:type="form:Button"> + <name>Назад</name> + <id>8</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <skipOnInput>false</skipOnInput> + <extendedTooltip> + <name>НазадРасширеннаяПодсказка</name> + <id>59</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.Предыдущие</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>Auto</representation> + <autoMaxWidth>true</autoMaxWidth> + <height>1</height> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <backColor xsi:type="core:ColorRef"> + <color>Style.ButtonBackColor</color> + </backColor> + <borderColor xsi:type="core:ColorRef"> + <color>Style.BorderColor</color> + </borderColor> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <items xsi:type="form:Button"> + <name>Далее</name> + <id>9</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <skipOnInput>false</skipOnInput> + <extendedTooltip> + <name>ДалееРасширеннаяПодсказка</name> + <id>60</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.Command.Следующие</commandName> + <buttonImportance>Normal</buttonImportance> + <representation>PictureAndText</representation> + <autoMaxWidth>true</autoMaxWidth> + <height>1</height> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <backColor xsi:type="core:ColorRef"> + <color>Style.ButtonBackColor</color> + </backColor> + <borderColor xsi:type="core:ColorRef"> + <color>Style.BorderColor</color> + </borderColor> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <horizontalStretch>false</horizontalStretch> + <extendedTooltip> + <name>ГруппаНавигацияРасширеннаяПодсказка</name> + <id>58</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <type>CommandBar</type> + <extInfo xsi:type="form:CommandBarExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </items> <items xsi:type="form:FormField"> <name>ПоказаныРезультаты_С_По</name> <id>16</id> @@ -184,7 +279,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>ПоказаныРезультаты_С_ПоРасширеннаяПодсказка</name> - <id>57</id> + <id>61</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -206,88 +301,12 @@ <extInfo xsi:type="form:LabelFieldExtInfo"> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>true</horizontalStretch> + <textColor xsi:type="core:ColorRef"> + <color>Style.ПоясняющийТекст</color> + </textColor> </extInfo> </items> - <items xsi:type="form:Button"> - <name>Назад</name> - <id>8</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>НазадРасширеннаяПодсказка</name> - <id>59</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <type>Hyperlink</type> - <commandName>Form.Command.Назад</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <height>1</height> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorDef"> - <red>28</red> - <green>85</green> - <blue>174</blue> - </textColor> - <backColor xsi:type="core:ColorRef"> - <color>Style.ButtonBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <items xsi:type="form:Button"> - <name>Далее</name> - <id>9</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ДалееРасширеннаяПодсказка</name> - <id>60</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <type>Hyperlink</type> - <commandName>Form.Command.Далее</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Picture</representation> - <autoMaxWidth>true</autoMaxWidth> - <height>1</height> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorDef"> - <red>28</red> - <green>85</green> - <blue>174</blue> - </textColor> - <backColor xsi:type="core:ColorRef"> - <color>Style.ButtonBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <representationInContextMenu>Auto</representationInContextMenu> - </items> <visible>true</visible> <enabled>true</enabled> <userVisible> @@ -295,7 +314,7 @@ </userVisible> <extendedTooltip> <name>ГруппаИнформацияОНайденномРасширеннаяПодсказка</name> - <id>56</id> + <id>57</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -326,7 +345,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>HTMLТекстРасширеннаяПодсказка</name> - <id>61</id> + <id>63</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -371,7 +390,7 @@ <skipOnInput>false</skipOnInput> <extendedTooltip> <name>ОбновитьИндексРасширеннаяПодсказка</name> - <id>64</id> + <id>66</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -402,7 +421,7 @@ <titleLocation>None</titleLocation> <extendedTooltip> <name>СостояниеИндексаРасширеннаяПодсказка</name> - <id>65</id> + <id>67</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -423,6 +442,9 @@ <extInfo xsi:type="form:LabelFieldExtInfo"> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> + <textColor xsi:type="core:ColorRef"> + <color>Style.ПоясняющийТекст</color> + </textColor> </extInfo> </items> <visible>true</visible> @@ -440,7 +462,7 @@ </toolTip> <extendedTooltip> <name>ГруппаОбновлениеИндексаРасширеннаяПодсказка</name> - <id>63</id> + <id>65</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> <autoMaxHeight>true</autoMaxHeight> @@ -500,7 +522,7 @@ <name>СтрокаПоиска</name> <title> <key>ru</key> - <value>Строка поиска</value> + <value>СтрокаПоиска</value> 2 @@ -652,7 +674,7 @@ 2 ru - Найти + Найти текст true @@ -662,33 +684,33 @@ - ИскатьВыполнить + НайтиВыполнить - Picture + Text Auto Auto - Далее + Следующие <key>ru</key> - <value>Далее</value> + <value>Следующие</value> 3 ru - Далее + Следующие результаты поиска true - CommonPicture.ПолнотекстовыйПоискДалее + StdPicture.MoveRight - ДалееВыполнить + Следующие Picture @@ -696,25 +718,25 @@ Auto - Назад + Предыдущие <key>ru</key> - <value>Назад</value> + <value>Предыдущие</value> 4 ru - Назад + Предыдущие результаты поиска true - CommonPicture.ПолнотекстовыйПоискНазад + StdPicture.MoveLeft - НазадВыполнить + Предыдущие Picture @@ -730,7 +752,7 @@ 1 ru - Обновить индекс + Обновить индекс полнотекстового поиска true diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Module.bsl b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Module.bsl index 57084417d..0eb55a261 100644 --- a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Module.bsl +++ b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Forms/ФормаПоиска/Module.bsl @@ -1,3 +1,161 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы(); + ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединенияСБД); + ОбновитьАктуальностьИндекса(); + + ТекущаяПозиция = 0; + + Элементы.Далее.Доступность = Ложь; + Элементы.Назад.Доступность = Ложь; + + Массив = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска"); + + Если Массив <> Неопределено Тогда + Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(Массив); + КонецЕсли; + + Если Не ПустаяСтрока(Параметры.ПереданнаяСтрокаПоиска) Тогда + СтрокаПоиска = Параметры.ПереданнаяСтрокаПоиска; + + СохранитьСтрокуПоиска(Элементы.СтрокаПоиска.СписокВыбора, СтрокаПоиска); + Попытка + Результат = ИскатьВыполнитьСервер(0, ТекущаяПозиция, СтрокаПоиска); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + + РезультатыПоиска = Результат.РезультатПоиска; + HTMLТекст = Результат.HTMLТекст; + ТекущаяПозиция = Результат.ТекущаяПозиция; + ПолноеКоличество = Результат.ПолноеКоличество; + + Если РезультатыПоиска.Количество() <> 0 Тогда + + ПоказаныРезультатыСПо = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Показаны %1 - %2 из %3'"), + Строка(ТекущаяПозиция + 1), + Строка(ТекущаяПозиция + РезультатыПоиска.Количество()), + Строка(ПолноеКоличество) ); + + Элементы.Далее.Доступность = (ПолноеКоличество - ТекущаяПозиция) > РезультатыПоиска.Количество(); + Элементы.Назад.Доступность = (ТекущаяПозиция > 0); + Иначе + ПоказаныРезультатыСПо = НСтр("ru = 'Не найдено'"); + Элементы.Далее.Доступность = Ложь; + Элементы.Назад.Доступность = Ложь; + КонецЕсли; + Иначе + HTMLТекст = " + | + | + | + | + | + |
              + | + |"; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СтрокаПоискаПриИзменении(Элемент) + + Искать(0, Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура СтрокаПоискаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) + + СтандартнаяОбработка = Ложь; + СтрокаПоиска = ВыбранноеЗначение; + Искать(0); + +КонецПроцедуры + +&НаКлиенте +Процедура HTMLТекстПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) + ЭлементHTML = ДанныеСобытия.Anchor; + + Если ЭлементHTML = Неопределено Тогда + Возврат; + КонецЕсли; + + Если (ЭлементHTML.id = "FullTextSearchListItem") Тогда + ЧастьURL = ЭлементHTML.pathName; + Позиция = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(ЧастьURL, "/"); + Если Позиция <> 0 Тогда + ЧастьURL = Сред(ЧастьURL, Позиция + 1); + КонецЕсли; + + НомерВСписке = Число(ЧастьURL); + СтруктураРезультата = РезультатыПоиска[НомерВСписке].Значение; + ВыбраннаяСтрока = СтруктураРезультата.Значение; + МассивОбъектов = СтруктураРезультата.ЗначенияДляОткрытия; + + Если МассивОбъектов.Количество() = 1 Тогда + ОткрытьЗначениеПоиска(МассивОбъектов[0]); + ИначеЕсли МассивОбъектов.Количество() <> 0 Тогда + Список = Новый СписокЗначений; + Для Каждого ЭлементМассива Из МассивОбъектов Цикл + Список.Добавить(ЭлементМассива); + КонецЦикла; + ВыбранныйОбъект = ВыбратьИзСписка(Список, Элементы.HTMLТекст); + Если ВыбранныйОбъект <> Неопределено Тогда + ОткрытьЗначениеПоиска(ВыбранныйОбъект.Значение); + КонецЕсли; + КонецЕсли; + + СтандартнаяОбработка = Ложь; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура НайтиВыполнить() + + Искать(0); + +КонецПроцедуры + +&НаКлиенте +Процедура Следующие() + + Искать(1); + +КонецПроцедуры + +&НаКлиенте +Процедура Предыдущие() + Искать(-1); +КонецПроцедуры + +&НаКлиенте +Процедура ОбновитьИндекс(Команда) + + Состояние(НСтр("ru = 'Идет обновление полнотекстового индекса... + |Пожалуйста, подождите.'")); + + ОбновитьИндексСервер(); + + Состояние(НСтр("ru = 'Обновление полнотекстового индекса завершено.'")); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + &НаКлиенте Функция ЭтоНавигационнаяСсылка(Ссылка) @@ -12,7 +170,7 @@ &НаКлиенте Процедура ОткрытьЗначениеПоиска(Значение) СтандартнаяОбработка = Истина; - ПолнотекстовыйПоискКлиентПереопределяемый.ПриОткрытииОбъекта(Значение, СтандартнаяОбработка); + СтандартныеПодсистемыКлиентПереопределяемый.ПолнотекстовыйПоискПриОткрытииОбъекта(Значение, СтандартнаяОбработка); Если СтандартнаяОбработка = Истина Тогда ОткрытьЗначение(Значение); @@ -30,10 +188,10 @@ Возврат Результат; КонецЕсли; - МетаданныеОбъекта = Объект.Метаданные(); + МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипЗнч(Объект)); ИмяМетаданного = МетаданныеОбъекта.Имя; - ПолноеИмяОбъекта = ВРЕГ(МетаданныеОбъекта.ПолноеИмя()); + ПолноеИмяОбъекта = ВРег(Метаданные.НайтиПоТипу(ТипЗнч(Объект)).ПолноеИмя()); ЭтоРегистрСведений = (Найти(ПолноеИмяОбъекта, "РЕГИСТРСВЕДЕНИЙ.") > 0); Если Не ЭтоРегистрСведений Тогда // Регистр бухгалтерии или накопления или расчета @@ -80,10 +238,6 @@ Возврат Результат; КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Служебные Функции -// - &НаСервереБезКонтекста Процедура СохранитьСтрокуПоиска(СписокВыбора, СтрокаПоиска) @@ -109,31 +263,31 @@ Строки ); -КонецПроцедуры +КонецПроцедуры &НаСервере Процедура ОбновитьИндексСервер() + // Ускорение обновления индекса полнотекстового поиска УстановитьПривилегированныйРежим(Истина); ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Ложь); + УстановитьПривилегированныйРежим(Ложь); ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности(); - ИндексАктуален = ПолнотекстовыйПоиск.ИндексАктуален(); + ИндексАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); Элементы.ГруппаОбновлениеИндекса.Видимость = Не ИндексАктуален; Элементы.ОбновитьИндекс.Доступность = Не ИндексАктуален; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Функции на которые замэплены обработчики -// - // Процедура поиска, получение и отображение результата // &НаКлиенте -Процедура Искать(Направление) +Процедура Искать(Направление, ПредупреждатьОПустойСтрокеПоиска = Истина) Попытка Если ПустаяСтрока(СтрокаПоиска) Тогда - Предупреждение(НСтр("ru = 'Введите, что нужно найти.'")); + Если ПредупреждатьОПустойСтрокеПоиска Тогда + Предупреждение(НСтр("ru = 'Введите, что нужно найти.'")); + КонецЕсли; Возврат; КонецЕсли; @@ -178,6 +332,36 @@ ПоказаныРезультатыСПо = НСтр("ru = 'Не найдено'"); Элементы.Далее.Доступность = Ложь; Элементы.Назад.Доступность = Ложь; + HTMLТекст = " + | + | + | + | + | + |Искомая комбинация слов нигде не встречается.
              + |Рекомендации: + |
                + |
              • Убедитесь, что все слова написаны без ошибок.
              • + |
              • Попробуйте использовать другие ключевые слова.
              • + |
              • Попробуйте уменьшить количество искомых слов.
              • + |
              + |
            + | + |"; КонецЕсли; Если Направление = 0 И Результат.ТекущаяПозиция = 0 И Результат.СлишкомМногоРезультатов Тогда @@ -202,11 +386,11 @@ Элементы.СостояниеИндекса.Подсказка = НСтр("ru = 'Последнее обновление индекса: '") + Строка(ДатаАктуальностиИндекса); КонецЕсли; - ИндексАктуален = ПолнотекстовыйПоиск.ИндексАктуален(); + ИндексАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); Элементы.ГруппаОбновлениеИндекса.Видимость = Не ИндексАктуален; Элементы.ОбновитьИндекс.Доступность = Не ИндексАктуален; Если Не ИндексАктуален Тогда - СостояниеИндекса = НСтр("ru = 'Требуется обновление индекса'"); + СостояниеИндекса = НСтр("ru = 'Индекс давно не обновлялся, поэтому результаты поиска могут быть неточными.'"); КонецЕсли; Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); @@ -279,159 +463,4 @@ КонецФункции -//////////////////////////////////////////////////////////////////////////////// -// Обработчики событий формы и элементов формы -// - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - СтрокаСоединенияСБД = СтрокаСоединенияИнформационнойБазы(); - ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(СтрокаСоединенияСБД); - ОбновитьАктуальностьИндекса(); - - Попытка - ПоказаныРезультатыСПо = НСтр("ru = 'Введите, что нужно найти.'"); - ТекущаяПозиция = 0; - - Элементы.Далее.Доступность = Ложь; - Элементы.Назад.Доступность = Ложь; - - Массив = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПолнотекстовыйПоискСтрокиПолнотекстовогоПоиска"); - - Если Массив <> Неопределено Тогда - Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(Массив); - КонецЕсли; - - Если Не ПустаяСтрока(Параметры.ПереданнаяСтрокаПоиска) Тогда - СтрокаПоиска = Параметры.ПереданнаяСтрокаПоиска; - - СохранитьСтрокуПоиска(Элементы.СтрокаПоиска.СписокВыбора, СтрокаПоиска); - Результат = ИскатьВыполнитьСервер(0, ТекущаяПозиция, СтрокаПоиска); - - РезультатыПоиска = Результат.РезультатПоиска; - HTMLТекст = Результат.HTMLТекст; - ТекущаяПозиция = Результат.ТекущаяПозиция; - ПолноеКоличество = Результат.ПолноеКоличество; - - Если РезультатыПоиска.Количество() <> 0 Тогда - - ПоказаныРезультатыСПо = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Показаны %1 - %2 из %3'"), - Строка(ТекущаяПозиция + 1), - Строка(ТекущаяПозиция + РезультатыПоиска.Количество()), - Строка(ПолноеКоличество) ); - - Элементы.Далее.Доступность = (ПолноеКоличество - ТекущаяПозиция) > РезультатыПоиска.Количество(); - Элементы.Назад.Доступность = (ТекущаяПозиция > 0); - Иначе - ПоказаныРезультатыСПо = НСтр("ru = 'Не найдено'"); - Элементы.Далее.Доступность = Ложь; - Элементы.Назад.Доступность = Ложь; - КонецЕсли; - Иначе - HTMLТекст = " - | - | - | - | - | - |
            - | - |"; - КонецЕсли; - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - КонецПопытки; -КонецПроцедуры - -&НаКлиенте -Процедура СтрокаПоискаПриИзменении(Элемент) - - Искать(0); - -КонецПроцедуры - -&НаКлиенте -Процедура СтрокаПоискаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; - СтрокаПоиска = ВыбранноеЗначение; - Искать(0); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Обработчики команд формы -// - -// Обработка команды Найти -// -&НаКлиенте -Процедура ИскатьВыполнить() - - Искать(0); - -КонецПроцедуры - -&НаКлиенте -Процедура ДалееВыполнить() - - Искать(1); - -КонецПроцедуры - -&НаКлиенте -Процедура НазадВыполнить() - Искать(-1); -КонецПроцедуры - -&НаКлиенте -Процедура ОбновитьИндекс(Команда) - - Состояние(НСтр("ru = 'Идет обновление полнотекстового индекса... - |Пожалуйста, подождите.'")); - - ОбновитьИндексСервер(); - - Состояние(НСтр("ru = 'Обновление полнотекстового индекса завершено.'")); - -КонецПроцедуры - -&НаКлиенте -Процедура HTMLТекстПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка) - ЭлементHTML = ДанныеСобытия.Anchor; - - Если ЭлементHTML = Неопределено Тогда - Возврат; - КонецЕсли; - - Если (ЭлементHTML.id = "FullTextSearchListItem") Тогда - ЧастьURL = ЭлементHTML.pathName; - Позиция = СтроковыеФункцииКлиентСервер.НайтиСимволСКонца(ЧастьURL, "/"); - Если Позиция <> 0 Тогда - ЧастьURL = Сред(ЧастьURL, Позиция + 1); - КонецЕсли; - - НомерВСписке = Число(ЧастьURL); - СтруктураРезультата = РезультатыПоиска[НомерВСписке].Значение; - ВыбраннаяСтрока = СтруктураРезультата.Значение; - МассивОбъектов = СтруктураРезультата.ЗначенияДляОткрытия; - - Если МассивОбъектов.Количество() = 1 Тогда - ОткрытьЗначениеПоиска(МассивОбъектов[0]); - ИначеЕсли МассивОбъектов.Количество() <> 0 Тогда - Список = Новый СписокЗначений; - Для Каждого ЭлементМассива Из МассивОбъектов Цикл - Список.Добавить(ЭлементМассива); - КонецЦикла; - ВыбранныйОбъект = ВыбратьИзСписка(Список, Элементы.HTMLТекст); - Если ВыбранныйОбъект <> Неопределено Тогда - ОткрытьЗначениеПоиска(ВыбранныйОбъект.Значение); - КонецЕсли; - КонецЕсли; - - СтандартнаяОбработка = Ложь; - КонецЕсли; -КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html b/SSL/src/DataProcessors/ПолнотекстовыйПоискВДанных/Help/ru.html index 1201f3494..a1fa77975 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 cdbeb29f0..b2ebc2dfc 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Form.form @@ -24,7 +24,7 @@ ЗаголовокСтраницыРасширеннаяПодсказка - 502 + 517 Label true true @@ -76,7 +76,7 @@ Left УзелИнформационнойБазыРасширеннаяПодсказка - 504 + 519 Label true true @@ -117,7 +117,7 @@ ГруппаНастройкиОбменаДаннымиРасширеннаяПодсказка - 503 + 518 Label true true @@ -160,7 +160,7 @@ ВидТранспортаСообщенийОбменаРасширеннаяПодсказка - 508 + 523 Label true true @@ -201,7 +201,7 @@ false ОткрытьКаталогОбменаИнформацией1РасширеннаяПодсказка - 510 + 525 Label true true @@ -229,7 +229,7 @@ false НастроитьПараметрыТранспортаСообщенийОбмена1РасширеннаяПодсказка - 511 + 526 Label true true @@ -261,7 +261,7 @@ СтраницаВыборВидаТранспортаИзДоступныхРасширеннаяПодсказка - 507 + 522 Label true true @@ -291,7 +291,7 @@ ВидТранспортаСообщенийОбменаСтрокойРасширеннаяПодсказка - 513 + 528 Label true true @@ -329,7 +329,7 @@ false ОткрытьКаталогОбменаИнформациейРасширеннаяПодсказка - 514 + 529 Label true true @@ -357,7 +357,7 @@ false НастроитьПараметрыТранспортаСообщенийОбменаРасширеннаяПодсказка - 515 + 530 Label true true @@ -389,7 +389,7 @@ СтраницаДоступенТолькоОдинВидТранспортаРасширеннаяПодсказка - 512 + 527 Label true true @@ -417,7 +417,7 @@ СтраницыНастроекТранспортаРасширеннаяПодсказка - 506 + 521 Label true true @@ -430,6 +430,118 @@ Auto
            + + ПолучениеПароляПользователя + 500 + + WSПароль + 501 + true + true + + true + + + WSПароль + + + WSПарольРасширеннаяПодсказка + 532 + Label + true + true + + Left + + + + WSПарольКонтекстноеМеню + 502 + true + + InputField + true + Enter + true + Left + true + + 20 + true + true + false + true + true + true + true + true + true + Normal + + + + WSЗапомнитьПароль + 503 + true + true + + true + + + WSЗапомнитьПароль + + Right + + WSЗапомнитьПарольРасширеннаяПодсказка + 534 + Label + true + true + + Left + + + + WSЗапомнитьПарольКонтекстноеМеню + 504 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Получение пароля пользователя</value> + + + ПолучениеПароляПользователяРасширеннаяПодсказка + 531 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + Декорация2 251 @@ -440,7 +552,7 @@ Декорация2РасширеннаяПодсказка - 516 + 536 Label true true @@ -476,7 +588,7 @@ Декорация8РасширеннаяПодсказка - 517 + 537 Label true true @@ -512,7 +624,7 @@ СтраницаНачалаРасширеннаяПодсказка - 501 + 516 Label true true @@ -543,7 +655,7 @@ ЗаголовокСтраницыИнформацииСтатистикиРасширеннаяПодсказка - 519 + 539 Label true true @@ -591,7 +703,7 @@ КартинкаИнформацияОНаличииНесопоставленныхОбъектовРасширеннаяПодсказка - 521 + 541 Label true true @@ -629,7 +741,7 @@ ПояснениеОНаличииНесопоставленныхОбъектовРасширеннаяПодсказка - 522 + 542 Label true true @@ -668,7 +780,7 @@ ГруппаДополнительнойИнформацииРасширеннаяПодсказка - 520 + 540 Label true true @@ -699,7 +811,7 @@ false ОткрытьФормуСопоставленияРасширеннаяПодсказка - 524 + 544 Label true true @@ -726,7 +838,7 @@ false ОбновитьИнформациюСопоставленияПолностьюРасширеннаяПодсказка - 525 + 545 Label true true @@ -753,7 +865,7 @@ false ВыполнитьАвтоматическоеСопоставлениеПоУмолчаниюРасширеннаяПодсказка - 526 + 546 Label true true @@ -780,7 +892,7 @@ false ВыполнитьЗагрузкуДанныхВсехТаблицРасширеннаяПодсказка - 527 + 547 Label true true @@ -811,7 +923,7 @@ КоманднаяПанельТаблицыСтатистикиРасширеннаяПодсказка - 523 + 543 Label true true @@ -868,7 +980,7 @@ None ДеревоИнформацииСтатистикиКартинкаРасширеннаяПодсказка - 542 + 562 Label true true @@ -910,7 +1022,7 @@ ДеревоИнформацииСтатистикиСинонимРасширеннаяПодсказка - 544 + 564 Label true true @@ -951,7 +1063,7 @@ ДеревоИнформацииСтатистикиКоличествоОбъектовВИсточникеРасширеннаяПодсказка - 546 + 566 Label true true @@ -994,7 +1106,7 @@ ДеревоИнформацииСтатистикиГруппаРасширеннаяПодсказка - 541 + 561 Label true true @@ -1023,7 +1135,7 @@ None ДеревоИнформацииСтатистикиИндексКартинкиРасширеннаяПодсказка - 548 + 568 Label true true @@ -1071,7 +1183,7 @@ ДеревоИнформацииСтатистикиКоличествоОбъектовВПриемникеРасширеннаяПодсказка - 551 + 571 Label true true @@ -1106,7 +1218,7 @@ ДеревоИнформацииСтатистикиГруппа1РасширеннаяПодсказка - 550 + 570 Label true true @@ -1133,7 +1245,7 @@ ДеревоИнформацииСтатистикиКоличествоОбъектовНесопоставленныхРасширеннаяПодсказка - 553 + 573 Label true true @@ -1174,7 +1286,7 @@ ДеревоИнформацииСтатистикиПроцентСопоставленияОбъектовРасширеннаяПодсказка - 555 + 575 Label true true @@ -1215,10 +1327,10 @@ ДеревоИнформацииСтатистикиСтрокаПоиска - 532 + 552 ДеревоИнформацииСтатистикиСтрокаПоискаРасширеннаяПодсказка - 534 + 554 Label true true @@ -1228,7 +1340,7 @@ ДеревоИнформацииСтатистикиСтрокаПоискаКонтекстноеМеню - 533 + 553 true ДеревоИнформацииСтатистики @@ -1238,10 +1350,10 @@ ДеревоИнформацииСтатистикиСостояниеПросмотра - 535 + 555 ДеревоИнформацииСтатистикиСостояниеПросмотраРасширеннаяПодсказка - 537 + 557 Label true true @@ -1251,7 +1363,7 @@ ДеревоИнформацииСтатистикиСостояниеПросмотраКонтекстноеМеню - 536 + 556 true ViewStatusAddition @@ -1262,10 +1374,10 @@ ДеревоИнформацииСтатистикиУправлениеПоиском - 538 + 558 ДеревоИнформацииСтатистикиУправлениеПоискомРасширеннаяПодсказка - 540 + 560 Label true true @@ -1275,7 +1387,7 @@ ДеревоИнформацииСтатистикиУправлениеПоискомКонтекстноеМеню - 539 + 559 true SearchControlAddition @@ -1286,7 +1398,7 @@ ДеревоИнформацииСтатистикиРасширеннаяПодсказка - 531 + 551 Label true true @@ -1308,7 +1420,7 @@ false КонтекстноеМенюИнформацияСтатистикиОткрытьФормуСопоставленияРасширеннаяПодсказка - 528 + 548 Label true true @@ -1335,7 +1447,7 @@ false КонтекстноеМенюИнформацияСтатистикиВыполнитьЗагрузкуДанныхДляСтрокиРасширеннаяПодсказка - 529 + 549 Label true true @@ -1362,7 +1474,7 @@ false КонтекстноеМенюИнформацияСтатистикиОбновитьИнформациюСопоставленияДляСтрокиРасширеннаяПодсказка - 530 + 550 Label true true @@ -1422,7 +1534,7 @@ Декорация7РасширеннаяПодсказка - 565 + 585 Label true true @@ -1458,7 +1570,7 @@ СтраницаИнформацииСтатистикиРасширеннаяПодсказка - 518 + 538 Label true true @@ -1489,7 +1601,7 @@ ЗаголовокСтраницыОкончанияСопоставленияРасширеннаяПодсказка - 567 + 587 Label true true @@ -1546,7 +1658,7 @@ КартинкаНеопределеноРасширеннаяПодсказка - 572 + 592 Label true true @@ -1581,7 +1693,7 @@ СтатусЗагрузкиНеопределеноРасширеннаяПодсказка - 571 + 591 Label true true @@ -1612,7 +1724,7 @@ КартинкаУспехРасширеннаяПодсказка - 574 + 594 Label true true @@ -1651,7 +1763,7 @@ СтатусЗагрузкиУспехРасширеннаяПодсказка - 573 + 593 Label true true @@ -1682,7 +1794,7 @@ КартинкаОшибкаРасширеннаяПодсказка - 576 + 596 Label true true @@ -1721,7 +1833,7 @@ СтатусЗагрузкиОшибкаРасширеннаяПодсказка - 575 + 595 Label true true @@ -1752,7 +1864,7 @@ КартинкаПредупреждение1РасширеннаяПодсказка - 578 + 598 Label true true @@ -1791,7 +1903,7 @@ СтатусЗагрузкиПредупреждениеРасширеннаяПодсказка - 577 + 597 Label true true @@ -1820,7 +1932,7 @@ СтраницыСтатусаЗагрузкиДанныхРасширеннаяПодсказка - 570 + 590 Label true true @@ -1848,7 +1960,7 @@ false ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанныхРасширеннаяПодсказка - 579 + 599 Label true true @@ -1880,7 +1992,7 @@ ГруппаЗагрузкиДанныхРасширеннаяПодсказка - 569 + 589 Label true true @@ -1920,7 +2032,7 @@ КартинкаНеопределено1РасширеннаяПодсказка - 583 + 603 Label true true @@ -1955,7 +2067,7 @@ СтатусВыгрузкиНеопределеноРасширеннаяПодсказка - 582 + 602 Label true true @@ -1986,7 +2098,7 @@ КартинкаУспех1РасширеннаяПодсказка - 585 + 605 Label true true @@ -2025,7 +2137,7 @@ СтатусВыгрузкиУспехРасширеннаяПодсказка - 584 + 604 Label true true @@ -2056,7 +2168,7 @@ КартинкаОшибка1РасширеннаяПодсказка - 587 + 607 Label true true @@ -2095,7 +2207,7 @@ СтатусВыгрузкиОшибкаРасширеннаяПодсказка - 586 + 606 Label true true @@ -2126,7 +2238,7 @@ КартинкаПредупреждениеРасширеннаяПодсказка - 589 + 609 Label true true @@ -2165,7 +2277,7 @@ СтатусВыгрузкиПредупреждениеРасширеннаяПодсказка - 588 + 608 Label true true @@ -2194,7 +2306,7 @@ СтраницыСтатусаВыгрузкиДанныхРасширеннаяПодсказка - 581 + 601 Label true true @@ -2222,7 +2334,7 @@ false ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанныхРасширеннаяПодсказка - 590 + 610 Label true true @@ -2254,7 +2366,7 @@ ГруппаВыгрузкиДанныхРасширеннаяПодсказка - 580 + 600 Label true true @@ -2286,7 +2398,7 @@ ГруппаРезультатаВыполненияОбменаДаннымиРасширеннаяПодсказка - 568 + 588 Label true true @@ -2321,7 +2433,7 @@ Декорация14РасширеннаяПодсказка - 593 + 613 Label true true @@ -2363,7 +2475,7 @@ Декорация15РасширеннаяПодсказка - 595 + 615 Label true true @@ -2406,7 +2518,7 @@ Right ОткрытьПомощникСозданияСценарияОбменаДаннымиРасширеннаяПодсказка - 596 + 616 Label true true @@ -2433,7 +2545,7 @@ Группа1РасширеннаяПодсказка - 594 + 614 Label true true @@ -2466,7 +2578,7 @@ ГруппировкаРасширеннаяПодсказка - 592 + 612 Label true true @@ -2498,7 +2610,7 @@ ИнформационнаяНадписьНастройкиРасписанияРасширеннаяПодсказка - 591 + 611 Label true true @@ -2527,7 +2639,7 @@ Декорация12РасширеннаяПодсказка - 598 + 618 Label true true @@ -2563,7 +2675,7 @@ Декорация10РасширеннаяПодсказка - 599 + 619 Label true true @@ -2599,7 +2711,7 @@ СтраницаОкончанияСопоставленияРасширеннаяПодсказка - 566 + 586 Label true true @@ -2630,7 +2742,7 @@ ЗаголовокСтраницы7РасширеннаяПодсказка - 601 + 621 Label true true @@ -2677,7 +2789,7 @@ Декорация6РасширеннаяПодсказка - 604 + 624 Label true true @@ -2716,7 +2828,7 @@ ГруппаКартинки1РасширеннаяПодсказка - 603 + 623 Label true true @@ -2753,7 +2865,7 @@ Декорация9РасширеннаяПодсказка - 606 + 626 Label true true @@ -2795,7 +2907,7 @@ ГруппаСообщения1РасширеннаяПодсказка - 605 + 625 Label true true @@ -2824,7 +2936,7 @@ ГруппировкаСообщения1РасширеннаяПодсказка - 602 + 622 Label true true @@ -2857,265 +2969,7 @@ СтраницаОжиданияЗагрузкиДанныхРасширеннаяПодсказка - 600 - Label - true - true - - Left - - - Page - - Vertical - auto - - - - СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация - 468 - - ЗаголовокСтраницы8 - 469 - - <key>ru</key> - <value>Анализ данных для загрузки</value> - - true - true - - true - - - ЗаголовокСтраницы8РасширеннаяПодсказка - 608 - Label - true - true - - Left - - - - ЗаголовокСтраницы8КонтекстноеМеню - 470 - true - - Label - true - 2 - true - true - false - - System.DefaultGUIFont - 10.0 - true - false - false - false - - - Left - - - - ГруппировкаСообщения2 - 471 - - ГруппаКартинки2 - 472 - - ДекорацияДлительнаяОперация - 473 - - <key>ru</key> - <value>Декорация длительная операция</value> - - true - true - - true - - - ДекорацияДлительнаяОперацияРасширеннаяПодсказка - 611 - Label - true - true - - Left - - - - ДекорацияДлительнаяОперацияКонтекстноеМеню - 474 - true - - 8 - true - 3 - true - false - - - CommonPicture.ДлительнаяОперация48 - - - - true - true - - true - - - <key>ru</key> - <value>Группа картинки</value> - - - ru - Группа картинки - - - ГруппаКартинки2РасширеннаяПодсказка - 610 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - - ГруппаСообщения2 - 475 - - Декорация13 - 476 - - <key>ru</key> - <value> -Выполняется анализ данных. -Пожалуйста, подождите...</value> - - true - true - - true - - - Декорация13РасширеннаяПодсказка - 613 - Label - true - true - - Left - - - - Декорация13КонтекстноеМеню - 477 - true - - Label - true - 3 - true - true - false - - System.DefaultGUIFont - 10.0 - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Группа сообщения</value> - - - ru - Группа сообщения - - - ГруппаСообщения2РасширеннаяПодсказка - 612 - Label - true - true - - Left - - - UsualGroup - - Vertical - Auto - true - true - Auto - Auto - - - true - true - - true - - - ru - Группировка сообщения - - - ГруппировкаСообщения2РасширеннаяПодсказка - 609 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - auto - Auto - Auto - - - true - true - - true - - - ru - Страница ожидания - - - СтраницаОжиданияЗагрузкиДанныхДлительнаяОперацияРасширеннаяПодсказка - 607 + 620 Label true true @@ -3146,7 +3000,7 @@ ЗаголовокСтраницы6РасширеннаяПодсказка - 615 + 628 Label true true @@ -3193,7 +3047,7 @@ Декорация5РасширеннаяПодсказка - 618 + 631 Label true true @@ -3232,7 +3086,7 @@ ГруппаКартинкиРасширеннаяПодсказка - 617 + 630 Label true true @@ -3269,7 +3123,7 @@ Декорация4РасширеннаяПодсказка - 620 + 633 Label true true @@ -3311,7 +3165,7 @@ ГруппаСообщенияРасширеннаяПодсказка - 619 + 632 Label true true @@ -3340,7 +3194,7 @@ ГруппировкаСообщенияРасширеннаяПодсказка - 616 + 629 Label true true @@ -3373,7 +3227,7 @@ СтраницаОжиданияВыгрузкиДанныхРасширеннаяПодсказка - 614 + 627 Label true true @@ -3388,14 +3242,14 @@ - СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация - 479 + СтраницаОжиданияПроверкиПодключения + 505 - ЗаголовокСтраницы9 - 480 + ЗаголовокСтраницы10 + 506 <key>ru</key> - <value>Выгрузка данных</value> + <value>Проверка подключения</value> true true @@ -3403,8 +3257,8 @@ true - ЗаголовокСтраницы9РасширеннаяПодсказка - 622 + ЗаголовокСтраницы10РасширеннаяПодсказка + 635 Label true true @@ -3413,8 +3267,8 @@ - ЗаголовокСтраницы9КонтекстноеМеню - 481 + ЗаголовокСтраницы10КонтекстноеМеню + 507 true Label @@ -3436,22 +3290,22 @@ - ГруппировкаСообщения3 - 482 + ГруппировкаСообщения4 + 508 - ГруппаКартинки3 - 483 + ГруппаКартинки4 + 509 - Декорация11 - 484 + Декорация17 + 510 true true true - Декорация11РасширеннаяПодсказка - 625 + Декорация17РасширеннаяПодсказка + 638 Label true true @@ -3460,8 +3314,8 @@ - Декорация11КонтекстноеМеню - 485 + Декорация17КонтекстноеМеню + 511 true 8 @@ -3471,7 +3325,7 @@ false - CommonPicture.ДлительнаяОперация48 + CommonPicture.Информация32 @@ -3489,8 +3343,8 @@ Группа картинки - ГруппаКартинки3РасширеннаяПодсказка - 624 + ГруппаКартинки4РасширеннаяПодсказка + 637 Label true true @@ -3509,15 +3363,14 @@ - ГруппаСообщения3 - 486 + ГруппаСообщения4 + 512 - Декорация16 - 487 + Декорация18 + 513 <key>ru</key> - <value> -Выполняется выгрузка данных. + <value>Выполняется проверка подключения к Интернету. Пожалуйста, подождите...</value> true @@ -3526,8 +3379,8 @@ true - Декорация16РасширеннаяПодсказка - 627 + Декорация18РасширеннаяПодсказка + 640 Label true true @@ -3536,8 +3389,8 @@ - Декорация16КонтекстноеМеню - 488 + Декорация18КонтекстноеМеню + 514 true Label @@ -3552,6 +3405,7 @@ Left + Center true @@ -3568,8 +3422,8 @@ Группа сообщения - ГруппаСообщения3РасширеннаяПодсказка - 626 + ГруппаСообщения4РасширеннаяПодсказка + 639 Label true true @@ -3597,8 +3451,8 @@ Группировка сообщения - ГруппировкаСообщения3РасширеннаяПодсказка - 623 + ГруппировкаСообщения4РасширеннаяПодсказка + 636 Label true true @@ -3621,13 +3475,17 @@ true + + <key>ru</key> + <value>Страница ожидания проверки подключения</value> + ru Страница ожидания выгрузки данных - СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияРасширеннаяПодсказка - 621 + СтраницаОжиданияПроверкиПодключенияРасширеннаяПодсказка + 634 Label true true @@ -3656,7 +3514,7 @@ ПанельОсновнаяРасширеннаяПодсказка - 500 + 515 Label true true @@ -3691,7 +3549,7 @@ КомандаНазад4РасширеннаяПодсказка - 632 + 645 Label true true @@ -3718,7 +3576,7 @@ true КомандаДалееРасширеннаяПодсказка - 633 + 646 Label true true @@ -3744,7 +3602,7 @@ КомандаОтмена1РасширеннаяПодсказка - 634 + 647 Label true true @@ -3770,7 +3628,7 @@ СправкаРасширеннаяПодсказка - 635 + 648 Label true true @@ -3794,7 +3652,7 @@ true КоманднаяПанель1РасширеннаяПодсказка - 631 + 644 Label true true @@ -3822,7 +3680,7 @@ СтраницаНавигацииНачалоРасширеннаяПодсказка - 630 + 643 Label true true @@ -3851,7 +3709,7 @@ КомандаНазад5РасширеннаяПодсказка - 638 + 651 Label true true @@ -3878,7 +3736,7 @@ true КомандаДалее4РасширеннаяПодсказка - 639 + 652 Label true true @@ -3904,7 +3762,7 @@ КомандаОтмена5РасширеннаяПодсказка - 640 + 653 Label true true @@ -3930,7 +3788,7 @@ Справка1РасширеннаяПодсказка - 641 + 654 Label true true @@ -3954,7 +3812,7 @@ true КоманднаяПанель2РасширеннаяПодсказка - 637 + 650 Label true true @@ -3982,7 +3840,7 @@ СтраницаНавигацииПродолжениеРасширеннаяПодсказка - 636 + 649 Label true true @@ -4005,13 +3863,13 @@ КомандаНазад6 444 true - true + false true КомандаНазад6РасширеннаяПодсказка - 644 + 657 Label true true @@ -4037,7 +3895,7 @@ КомандаГотово1РасширеннаяПодсказка - 645 + 658 Label true true @@ -4063,7 +3921,7 @@ КомандаОтмена6РасширеннаяПодсказка - 646 + 659 Label true true @@ -4089,7 +3947,7 @@ Справка2РасширеннаяПодсказка - 647 + 660 Label true true @@ -4113,7 +3971,7 @@ true КоманднаяПанель3РасширеннаяПодсказка - 643 + 656 Label true true @@ -4141,7 +3999,7 @@ СтраницаНавигацииОкончаниеРасширеннаяПодсказка - 642 + 655 Label true true @@ -4170,7 +4028,7 @@ КомандаНазад7РасширеннаяПодсказка - 650 + 663 Label true true @@ -4201,7 +4059,7 @@ true КомандаДалее5РасширеннаяПодсказка - 651 + 664 Label true true @@ -4227,7 +4085,7 @@ КомандаОтмена7РасширеннаяПодсказка - 652 + 665 Label true true @@ -4253,7 +4111,7 @@ Справка3РасширеннаяПодсказка - 653 + 666 Label true true @@ -4277,7 +4135,7 @@ true КоманднаяПанель4РасширеннаяПодсказка - 649 + 662 Label true true @@ -4305,7 +4163,7 @@ СтраницаНавигацииОжиданиеРасширеннаяПодсказка - 648 + 661 Label true true @@ -4330,7 +4188,7 @@ true ПанельНавигацииРасширеннаяПодсказка - 629 + 642 Label true true @@ -4358,7 +4216,7 @@ ГруппаКнопокМастераРасширеннаяПодсказка - 628 + 641 Label true true @@ -4414,7 +4272,7 @@ Retry SaveValues Yes - DontBlock + LockOwner true true Vertical @@ -5230,7 +5088,7 @@ WSПароль <key>ru</key> - <value>WSПароль</value> + <value>Пароль</value> 19 @@ -5315,6 +5173,92 @@ true + + WSЗапомнитьПароль + + <key>ru</key> + <value>Запомнить пароль</value> + + 24 + + Boolean + + + true + + + true + + + + ОбменЧерезВебСервис + + <key>ru</key> + <value>Обмен через веб сервис</value> + + 25 + + Boolean + + + true + + + true + + + + ДлительнаяОперацияЗавершена + + <key>ru</key> + <value>Длительная операция завершена</value> + + 26 + + Boolean + + + true + + + true + + + + ДлительнаяОперацияЗавершенаСОшибкой + + <key>ru</key> + <value>Длительная операция завершена с ошибкой</value> + + 27 + + Boolean + + + true + + + true + + + + ДлительнаяОперацияСтрокаСообщенияОбОшибке + + <key>ru</key> + <value>Длительная операция строка сообщения об ошибке</value> + + 28 + + String + + + + true + + + true + + ОбновитьИнформациюСопоставленияДляСтроки diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl index 4bbc4de82..92ebcdd10 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/Форма/Module.bsl @@ -191,13 +191,6 @@ ИзменитьПорядковыйНомерПерехода(+1); - Если Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияВыгрузкиДанных - ИЛИ Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.СтраницаОжиданияЗагрузкиДанных Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияКомандаДалее", 0.1, Истина); - - КонецЕсли; - КонецПроцедуры &НаКлиенте @@ -237,6 +230,13 @@ //////////////////////////////////////////////////////////////////////////////// // Страница СтраницаНачала +&НаКлиенте +Процедура ВыполнитьПереходДалее() + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + &НаКлиенте Процедура ОткрытьКаталогОбменаИнформацией(Команда) @@ -530,7 +530,7 @@ ПараметрыФормы.Вставить("УзелИнформационнойБазы", Объект.УзелИнформационнойБазы); ПараметрыФормы.Вставить("ИмяФайлаСообщенияОбмена", Объект.ИмяФайлаСообщенияОбмена); - ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма", ПараметрыФормы, ЭтаФорма, ТекущиеДанные.Ключ); + ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма", ПараметрыФормы, ЭтаФорма, ТекущиеДанные.Ключ, ВариантОткрытияОкна.ОтдельноеОкно); КонецПроцедуры @@ -560,21 +560,17 @@ ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ОбработкаОбъект.ПолучитьСообщениеОбменаВоВременныйКаталог( - Отказ, - ИдентификаторФайлаПакетаДанных, - ИдентификаторФайла, - ДлительнаяОперация, - ИдентификаторОперации + Отказ, + ИдентификаторФайлаПакетаДанных, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + WSПароль ); ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); Если ДлительнаяОперация Тогда - - // Получаем настройки подключения к веб-сервису корреспондента. - // Настройки нужны для периодического опроса корреспондента на предмет окончания длительной операции выгрузки данных. - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(Объект.УзелИнформационнойБазы); - ЗаполнитьЗначенияСвойств(ЭтаФорма, СтруктураНастроек, "WSURLВебСервиса, WSИмяПользователя, WSПароль"); Возврат; КонецЕсли; @@ -594,9 +590,10 @@ ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); ОбработкаОбъект.ПолучитьСообщениеОбменаВоВременныйКаталогОкончаниеДлительнойОперации( - Отказ, - ИдентификаторФайлаПакетаДанных, - ИдентификаторФайла + Отказ, + ИдентификаторФайлаПакетаДанных, + ИдентификаторФайла, + WSПароль ); ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); @@ -839,6 +836,19 @@ УстановитьВидимостьКнопкиОткрытияКаталогаОбмена(); + Элементы.ПолучениеПароляПользователя.Видимость = Ложь; + + Если ОбменЧерезВебСервис Тогда + + // Получаем настройки подключения к веб-сервису корреспондента. + // Настройки нужны, например, для периодического опроса корреспондента на предмет окончания длительной операции выгрузки данных. + СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(Объект.УзелИнформационнойБазы); + ЗаполнитьЗначенияСвойств(ЭтаФорма, СтруктураНастроек, "WSURLВебСервиса, WSИмяПользователя, WSПароль, WSЗапомнитьПароль"); + + Элементы.ПолучениеПароляПользователя.Видимость = Не WSЗапомнитьПароль; + + КонецЕсли; + КонецПроцедуры // Удаляет заданный литерал (префикс) в именах ключей переданной структуры. @@ -990,16 +1000,10 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - Истина + Истина, + WSПароль ); - Если ДлительнаяОперация Тогда - // Получаем настройки подключения к веб-сервису корреспондента. - // Настройки нужны для периодического опроса корреспондента на предмет окончания длительной операции выгрузки данных. - СтруктураНастроек = РегистрыСведений.НастройкиТранспортаОбмена.ПолучитьНастройкиТранспортаWS(Объект.УзелИнформационнойБазы); - ЗаполнитьЗначенияСвойств(ЭтаФорма, СтруктураНастроек, "WSURLВебСервиса, WSИмяПользователя, WSПароль"); - КонецЕсли; - КонецПроцедуры &НаСервере @@ -1061,6 +1065,40 @@ //////////////////////////////////////////////////////////////////////////////// // Обработчики ожидания +&НаКлиенте +Процедура ОбработчикОжиданияДлительнойОперации() + + ДлительнаяОперацияЗавершенаСОшибкой = Ложь; + ДлительнаяОперацияСтрокаСообщенияОбОшибке = ""; + + СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеДлительнойОперации(ИдентификаторОперации, + WSURLВебСервиса, + WSИмяПользователя, + WSПароль, + ДлительнаяОперацияСтрокаСообщенияОбОшибке + ); + + Если СостояниеОперации = "Active" Тогда + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + Иначе + + Если СостояниеОперации <> "Completed" Тогда + + ДлительнаяОперацияЗавершенаСОшибкой = Истина; + + КонецЕсли; + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Истина; + + ВыполнитьПереходДалее(); + + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбработчикОжиданияКомандаДалее() @@ -1068,127 +1106,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработчикОжиданияЗагрузкиДанных() - - СтрокаСообщенияОбОшибке = ""; - - СостояниеОперации = ОбменДаннымиСервер.СостояниеДлительнойОперации( - ИдентификаторОперации, - WSURLВебСервиса, - WSИмяПользователя, - WSПароль, - СтрокаСообщенияОбОшибке - ); - - Если СостояниеОперации = "Active" Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияЗагрузкиДанных", 5, Истина); - - ИначеЕсли СостояниеОперации = "Completed" Тогда - - ДлительнаяОперация = Ложь; - - Отказ = Ложь; - ИнформацияСтатистикиАктуальна = Истина; - - ПолучитьЗаголовокПакетаДанныхНаСервереОкончаниеДлительнойОперации(Отказ, ИнформацияСтатистикиАктуальна); - - Если Отказ Тогда - - // Устанавливаем новый сценарий в случае ошибки при загрузке данных - Если ОбменЧерезПодключениеККорреспонденту Тогда - - СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки(); - - Иначе - - СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки(); - - КонецЕсли; - - КомандаДалее(Неопределено); - - ИначеЕсли Не ИнформацияСтатистикиАктуальна Тогда - - // если информация устарела (есть новый файл пакета данных), то обновляем ее - ОбновитьИнформациюСопоставленияПолностью(Неопределено); - - КомандаДалее(Неопределено); - - Иначе - - РазвернутьДеревоИнформацииСтатистики(КлючТекущейСтрокиТаблицыИнформацииСтатистики); - - КомандаДалее(Неопределено); - - КонецЕсли; - - Иначе // Failed, Canceled - - ДлительнаяОперация = Ложь; - - ЗаписатьОшибкуВЖурналРегистрации(СтрокаСообщенияОбОшибке, СобытиеЖурналаРегистрацииЗагрузкаДанных); - - // Устанавливаем новый сценарий в случае ошибки при загрузке данных - Если ОбменЧерезПодключениеККорреспонденту Тогда - - СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки(); - - Иначе - - СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки(); - - КонецЕсли; - - КомандаДалее(Неопределено); - - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ОбработчикОжиданияВыгрузкиДанных() - - СтрокаСообщенияОбОшибке = ""; - - СостояниеОперации = ОбменДаннымиСервер.СостояниеДлительнойОперации( - ИдентификаторОперации, - WSURLВебСервиса, - WSИмяПользователя, - WSПароль, - СтрокаСообщенияОбОшибке - ); - - Если СостояниеОперации = "Active" Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияВыгрузкиДанных", 5, Истина); - - ИначеЕсли СостояниеОперации = "Completed" Тогда - - ДлительнаяОперация = Ложь; - - ОбменДаннымиСервер.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); - - КомандаДалее(Неопределено); - - Иначе // Failed, Canceled - - ДлительнаяОперация = Ложь; - - ОбменДаннымиСервер.ЗафиксироватьЗавершениеОбменаСОшибкой( - Объект.УзелИнформационнойБазы, - "ВыгрузкаДанных", - ДатаНачалаОперации, - СтрокаСообщенияОбОшибке - ); - - КомандаДалее(Неопределено); - - КонецЕсли; - -КонецПроцедуры - &НаКлиенте Процедура ВыполнитьОбработчикДлительнойОперации() @@ -1548,9 +1465,10 @@ ИмяСтраницыДекорации = "", ИмяОбработчикаПриОткрытии = "", ИмяОбработчикаПриПереходеДалее = "", - ИмяОбработчикаПриПереходеНазад = "" - ) - // + ИмяОбработчикаПриПереходеНазад = "", + ДлительнаяОперация = Ложь, + ИмяОбработчикаДлительнойОперации = "" + ) НоваяСтрока = ТаблицаПереходов.Добавить(); НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; @@ -1562,8 +1480,12 @@ НоваяСтрока.ИмяОбработчикаПриПереходеНазад = ИмяОбработчикаПриПереходеНазад; НоваяСтрока.ИмяОбработчикаПриОткрытии = ИмяОбработчикаПриОткрытии; + НоваяСтрока.ДлительнаяОперация = ДлительнаяОперация; + НоваяСтрока.ИмяОбработчикаДлительнойОперации = ИмяОбработчикаДлительнойОперации; + КонецПроцедуры + &НаКлиенте Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) @@ -1608,19 +1530,259 @@ НСтрока = НСтр("ru = 'Укажите узел информационной базы'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.УзелИнформационнойБазы",, Отказ); - Возврат Неопределено; ИначеЕсли Объект.ВидТранспортаСообщенийОбмена.Пустая() Тогда НСтрока = НСтр("ru = 'Укажите вид транспорта сообщений обмена'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "Объект.ВидТранспортаСообщенийОбмена",, Отказ); - Возврат Неопределено; + + ИначеЕсли ОбменЧерезВебСервис И ПустаяСтрока(WSПароль) Тогда + + НСтрока = НСтр("ru = 'Не указан пароль.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "WSПароль",, Отказ); КонецЕсли; - Возврат Неопределено; КонецФункции +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ОбменЧерезВебСервис Тогда + + ПроверитьПодключениеИСохранитьНастройки(Отказ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Не удалось выполнить операцию.'")); + + КонецЕсли; + + КонецЕсли; + +КонецФункции + +&НаСервере +Процедура ПроверитьПодключениеИСохранитьНастройки(Отказ) + + ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтаФорма); + + СообщениеПользователю = ""; + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения,, СообщениеПользователю); + Если WSПрокси = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,,"WSПароль",, Отказ); + Возврат; + КонецЕсли; + + Если WSЗапомнитьПароль Тогда + + Попытка + + УстановитьПривилегированныйРежим(Истина); + + // обновляем запись в РС + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("Узел", Объект.УзелИнформационнойБазы); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); + СтруктураЗаписи.Вставить("WSПароль", WSПароль); + РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); + + Исключение + ЗаписьЖурналаРегистрации(НСтр("ru = 'Обмен данными'"), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),,,, Отказ); + Возврат; + КонецПопытки; + + КонецЕсли; + +КонецПроцедуры + +// Загрузка данных + +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияЗагрузкиДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ДлительнаяОперацияЗавершенаСОшибкой = Ложь; + ИдентификаторФайла = ""; + ИдентификаторОперации = ""; + + ТекущиеДанные = Элементы.ДеревоИнформацииСтатистики.ТекущиеДанные; + + Если ТекущиеДанные <> Неопределено Тогда + + КлючТекущейСтроки = ТекущиеДанные.Ключ; + КлючТекущейСтрокиТаблицыИнформацииСтатистики = ТекущиеДанные.Ключ; + + КонецЕсли; + + ИнформацияСтатистикиАктуальна = Истина; + + ПолучитьЗаголовокПакетаДанныхНаСервере(Отказ, ИнформацияСтатистикиАктуальна); + + Если ДлительнаяОперация Тогда + Возврат Неопределено; + КонецЕсли; + + Если Отказ Тогда + + Отказ = Ложь; + + // Устанавливаем новый сценарий в случае ошибки при загрузке данных + Если ОбменЧерезПодключениеККорреспонденту Тогда + + СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки(); + + Иначе + + СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки(); + + КонецЕсли; + + ИначеЕсли Не ИнформацияСтатистикиАктуальна Тогда + + // если информация устарела (есть новый файл пакета данных), то обновляем ее + ОбновитьИнформациюСопоставленияПолностью(Неопределено); + + Иначе + + РазвернутьДеревоИнформацииСтатистики(КлючТекущейСтроки); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияЗагрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + Если ДлительнаяОперацияЗавершенаСОшибкой Тогда + + // Устанавливаем новый сценарий в случае ошибки при загрузке данных + Если ОбменЧерезПодключениеККорреспонденту Тогда + + СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки(); + + Иначе + + СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки(); + + КонецЕсли; + + ЗаписатьОшибкуВЖурналРегистрации(ДлительнаяОперацияСтрокаСообщенияОбОшибке, СобытиеЖурналаРегистрацииЗагрузкаДанных); + + Иначе + + ИнформацияСтатистикиАктуальна = Истина; + + ПолучитьЗаголовокПакетаДанныхНаСервереОкончаниеДлительнойОперации(Отказ, ИнформацияСтатистикиАктуальна); + + Если Отказ Тогда + + // Устанавливаем новый сценарий в случае ошибки при загрузке данных + Если ОбменЧерезПодключениеККорреспонденту Тогда + + СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки(); + + Иначе + + СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки(); + + КонецЕсли; + + Отказ = Ложь; + + ИначеЕсли Не ИнформацияСтатистикиАктуальна Тогда + + // если информация устарела (есть новый файл пакета данных), то обновляем ее + ОбновитьИнформациюСопоставленияПолностью(Неопределено); + + Иначе + + РазвернутьДеревоИнформацииСтатистики(КлючТекущейСтрокиТаблицыИнформацииСтатистики); + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецФункции + +// Выгрузка данных + +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ДлительнаяОперацияЗавершенаСОшибкой = Ложь; + ИдентификаторФайла = ""; + ИдентификаторОперации = ""; + + ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыНаСервере(Отказ); + + Отказ = Ложь; // Позволяем выполнить переход на следующую страницу + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + Если ДлительнаяОперацияЗавершенаСОшибкой Тогда + + ОбменДаннымиВызовСервера.ЗафиксироватьЗавершениеОбменаСОшибкой( + Объект.УзелИнформационнойБазы, + "ВыгрузкаДанных", + ДатаНачалаОперации, + ДлительнаяОперацияСтрокаСообщенияОбОшибке + ); + + Иначе + + ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); + + КонецЕсли; + + КонецЕсли; + +КонецФункции + +// + &НаКлиенте Функция Подключаемый_СтраницаИнформацииСтатистики_ПриПереходеДалее(Отказ) @@ -1655,149 +1817,6 @@ Возврат Неопределено; КонецФункции -&НаКлиенте -Функция Подключаемый_СтраницаОжиданияЗагрузкиДанных_ПриПереходеДалее(Отказ) - - ТекущиеДанные = Элементы.ДеревоИнформацииСтатистики.ТекущиеДанные; - - Если ТекущиеДанные <> Неопределено Тогда - - КлючТекущейСтроки = ТекущиеДанные.Ключ; - КлючТекущейСтрокиТаблицыИнформацииСтатистики = ТекущиеДанные.Ключ; - - КонецЕсли; - - ИнформацияСтатистикиАктуальна = Истина; - - ИдентификаторФайла = ""; - ДлительнаяОперация = Ложь; - ИдентификаторОперации = ""; - - ПолучитьЗаголовокПакетаДанныхНаСервере(Отказ, ИнформацияСтатистикиАктуальна); - - Если ДлительнаяОперация Тогда - Возврат Неопределено; - КонецЕсли; - - Если Отказ Тогда - - Отказ = Ложь; - - // Устанавливаем новый сценарий в случае ошибки при загрузке данных - Если ОбменЧерезПодключениеККорреспонденту Тогда - - СценарийОбменаЧерезВнешнееСоединениеИлиВебСервисПриОшибкеЗагрузки(); - - Иначе - - СценарийОбменаЧерезОбычныеКаналыСвязиПриОшибкеЗагрузки(); - - КонецЕсли; - - ИначеЕсли Не ИнформацияСтатистикиАктуальна Тогда - - // если информация устарела (есть новый файл пакета данных), то обновляем ее - ОбновитьИнформациюСопоставленияПолностью(Неопределено); - - Иначе - - РазвернутьДеревоИнформацииСтатистики(КлючТекущейСтроки); - - КонецЕсли; - - Возврат Неопределено; -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаОжиданияЗагрузкиДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) - - Если Не ЭтоПереходДалее Тогда - - ПропуститьСтраницу = Истина; - - КонецЕсли; - - Возврат Неопределено; -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) - - Если Не ЭтоПереходДалее Тогда - - ПропуститьСтраницу = Истина; - Возврат Неопределено; - - ИначеЕсли Не ДлительнаяОперация Тогда - - ПропуститьСтраницу = Истина; - Возврат Неопределено; - - КонецЕсли; - - Если ДлительнаяОперация Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияЗагрузкиДанных", 5, Истина); - - КонецЕсли; - - Возврат Неопределено; -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) - - Если Не ЭтоПереходДалее Тогда - - ПропуститьСтраницу = Истина; - Возврат Неопределено; - - ИначеЕсли Не ДлительнаяОперация Тогда - - ПропуститьСтраницу = Истина; - Возврат Неопределено; - - КонецЕсли; - - Если ДлительнаяОперация Тогда - - ПодключитьОбработчикОжидания("ОбработчикОжиданияВыгрузкиДанных", 5, Истина); - - КонецЕсли; - - Возврат Неопределено; -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее(Отказ) - - ДлительнаяОперация = Ложь; - ИдентификаторОперации = ""; - ИдентификаторФайла = ""; - - ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыНаСервере(Отказ); - - Если ДлительнаяОперация Тогда - Возврат Неопределено; - КонецЕсли; - - Отказ = Ложь; // Позволяем выполнить переход на следующую страницу - - Возврат Неопределено; -КонецФункции - -&НаКлиенте -Функция Подключаемый_СтраницаОжиданияВыгрузкиДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) - - Если Не ЭтоПереходДалее Тогда - - ПропуститьСтраницу = Истина; - - КонецЕсли; - - Возврат Неопределено; -КонецФункции - &НаКлиенте Функция Подключаемый_СтраницаОкончанияСопоставления_ПриОткрытии(Отказ, ПропуститьСтраницу, Знач ЭтоПереходДалее) @@ -1816,11 +1835,22 @@ ТаблицаПереходов.Очистить(); - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанных_ПриОткрытии", "СтраницаОжиданияЗагрузкиДанных_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(3, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение",,, "СтраницаИнформацииСтатистики_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(4, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанных_ПриОткрытии", "СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(5, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); + + // Загрузка данных + ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Сопоставление данных + ТаблицаПереходовНоваяСтрока(5, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение",,, "СтраницаИнформацииСтатистики_ПриПереходеДалее"); + + // Выгрузка данных + ТаблицаПереходовНоваяСтрока(6, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + ТаблицаПереходовНоваяСтрока(9, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры @@ -1829,10 +1859,19 @@ ТаблицаПереходов.Очистить(); - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанных_ПриОткрытии", "СтраницаОжиданияЗагрузкиДанных_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанных_ПриОткрытии", "СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(4, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); + ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); + + // Загрузка данных + ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Выгрузка данных + ТаблицаПереходовНоваяСтрока(5, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(6, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + ТаблицаПереходовНоваяСтрока(8, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры @@ -1841,13 +1880,24 @@ ТаблицаПереходов.Очистить(); - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанных_ПриОткрытии", "СтраницаОжиданияЗагрузкиДанных_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ПриОткрытии"); - ТаблицаПереходовНоваяСтрока(4, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение",,, "СтраницаИнформацииСтатистики_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(5, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанных_ПриОткрытии", "СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(6, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ПриОткрытии"); - ТаблицаПереходовНоваяСтрока(7, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); + // Проверка подключения + ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияПроверкиПодключения", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); + + // Загрузка данных + ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Сопоставление данных + ТаблицаПереходовНоваяСтрока(6, "СтраницаИнформацииСтатистики", "СтраницаНавигацииПродолжение",,, "СтраницаИнформацииСтатистики_ПриПереходеДалее"); + + // Выгрузка данных + ТаблицаПереходовНоваяСтрока(7, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(9, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + ТаблицаПереходовНоваяСтрока(10, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры @@ -1856,11 +1906,20 @@ ТаблицаПереходов.Очистить(); - ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанных_ПриОткрытии", "СтраницаОжиданияЗагрузкиДанных_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация", "СтраницаНавигацииОжидание",, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ПриОткрытии"); - ТаблицаПереходовНоваяСтрока(4, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанных_ПриОткрытии", "СтраницаОжиданияВыгрузкиДанных_ПриПереходеДалее"); - ТаблицаПереходовНоваяСтрока(5, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация", "СтраницаНавигацииОжидание",, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ПриОткрытии"); - ТаблицаПереходовНоваяСтрока(6, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); + // Проверка подключения + ТаблицаПереходовНоваяСтрока(1, "СтраницаНачала", "СтраницаНавигацииНачало",,, "СтраницаНачала_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(2, "СтраницаОжиданияПроверкиПодключения", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияПроверкиПодключения_ОбработкаДлительнойОперации"); + + // Загрузка данных + ТаблицаПереходовНоваяСтрока(3, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "СтраницаОжиданияЗагрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияЗагрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + // Выгрузка данных + ТаблицаПереходовНоваяСтрока(6, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанных_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(7, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(8, "СтраницаОжиданияВыгрузкиДанных", "СтраницаНавигацииОжидание",,,,, Истина, "СтраницаОжиданияВыгрузкиДанныхДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + + ТаблицаПереходовНоваяСтрока(9, "СтраницаОкончанияСопоставления", "СтраницаНавигацииОкончание",, "СтраницаОкончанияСопоставления_ПриОткрытии"); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Help/ru.html index 065722fbb..21270fdce 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.16447"></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.16446"></meta></head><body> <p>Помощник интерактивного обмена данными предназначен для выполнения обмена данными с возможностью предварительного просмотра загружаемых данных. Помощник позволяет выполнять сопоставления объектов двух информационных баз, между которыми настроен обмен данными. После выполнения сопоставления и загрузки данных выполняется выгрузка данных.</p> <p>На первой странице помощника следует выбрать вид транспорта сообщений обмена и нажать кнопку <strong>Далее</strong>. При необходимости можно перейти в каталог обмена информацией и убедиться в физическом существовании требуемых файлов или проверить параметры транспорта сообщений обмена.</p> <p align="left">На второй странице помощника отображается информация о загрузке данных и статистика сопоставления объектов. <br>По кнопке командной панели <strong>Выполнить сопоставление</strong> открывается форма для предварительно просмотра загружаемых данных и выполнения сопоставления объектов.<br>По кнопке командной панели <strong>Автоматическое сопоставление (по умолчанию)</strong> выполняется процесс сопоставления объектов для всех строк таблицы. Автоматическое сопоставление выполняется по заданным по умолчанию полям сопоставления, при этом соблюдаются самые строгие правила сопоставления. Рекомендуется вначале выполнять автоматическое сопоставление, а затем выполнять сопоставление вручную для объектов, которые не были сопоставлены автоматически.<br>По кнопке командной панели <strong>Выполнить загрузку данных</strong> выполняется загрузка данных для всех строк таблицы. Выполнять загрузку данных рекомендуется только после выполнения сопоставления объектов. Если объекты не были сопоставлены, то после загрузки данных будут созданы дубли несопоставленных объектов.<br>Перечисленные команды доступны для вызова из контекстного меню таблицы статистики сопоставления. При вызове из контекстного меню эти команды актуальны для множества выделенных строк таблицы.<br>После того как будет выполнено сопоставление всех объектов и все данные будут загружены следует нажать на кнопку <strong>Далее</strong> для выгрузки ответного сообщения обмена. </p> diff --git a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl index c82412ff8..9601d1483 100644 --- a/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникИнтерактивногоОбменаДанными/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -227,11 +229,12 @@ // выступает в качестве идентификатора файла для подсистемы обмена данными // Процедура ПолучитьСообщениеОбменаВоВременныйКаталог( - Отказ, - ИдентификаторФайлаПакетаДанных = Неопределено, - ИдентификаторФайла = "", - ДлительнаяОперация = Ложь, - ИдентификаторОперации = "" + Отказ, + ИдентификаторФайлаПакетаДанных = Неопределено, + ИдентификаторФайла = "", + ДлительнаяОперация = Ложь, + ИдентификаторОперации = "", + Пароль = "" ) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -246,11 +249,12 @@ ИначеЕсли ВидТранспортаСообщенийОбмена = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла, - ДлительнаяОперация, - ИдентификаторОперации + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + ДлительнаяОперация, + ИдентификаторОперации, + Пароль ); Иначе // FILE, FTP, EMAIL @@ -269,9 +273,10 @@ // во временный каталог пользователя операционной системы // Процедура ПолучитьСообщениеОбменаВоВременныйКаталогОкончаниеДлительнойОперации( - Отказ, - ИдентификаторФайлаПакетаДанных, - ИдентификаторФайла + Отказ, + ИдентификаторФайлаПакетаДанных, + ИдентификаторФайла, + Знач Пароль = "" ) Экспорт УстановитьПривилегированныйРежим(Истина); @@ -280,9 +285,10 @@ УдалитьВременныйКаталогСообщенийОбмена(ИмяВременногоКаталогаСообщенийОбмена); СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( - Отказ, - УзелИнформационнойБазы, - ИдентификаторФайла + Отказ, + УзелИнформационнойБазы, + ИдентификаторФайла, + Пароль ); ИмяВременногоКаталогаСообщенийОбмена = СтруктураДанных.ИмяВременногоКаталогаСообщенийОбмена; @@ -510,3 +516,5 @@ Возврат ИнформацияСтатистики.Выгрузить(); КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Form.form b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Form.form new file mode 100644 index 000000000..bf70c9b8c --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Form.form @@ -0,0 +1,124 @@ +<?xml version="1.0" encoding="UTF-8"?> +<form:Form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:form="http://g5.1c.ru/v8/dt/form"> + <items xsi:type="form:FormField"> + <name>ПолеHTMLДокумента</name> + <id>1</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <dataPath xsi:type="form:DataPath"> + <segments>ПолеHTMLДокумента</segments> + </dataPath> + <skipOnInput>true</skipOnInput> + <titleLocation>None</titleLocation> + <extendedTooltip> + <name>ПолеHTMLДокументаРасширеннаяПодсказка</name> + <id>5</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <contextMenu> + <name>ПолеHTMLДокументаКонтекстноеМеню</name> + <id>2</id> + <autoFill>true</autoFill> + </contextMenu> + <type>HTMLDocumentField</type> + <editMode>Enter</editMode> + <showInHeader>true</showInHeader> + <headerHorizontalAlign>Left</headerHorizontalAlign> + <showInFooter>true</showInFooter> + <extInfo xsi:type="form:HtmlFieldExtInfo"> + <width>50</width> + <autoMaxWidth>true</autoMaxWidth> + <height>10</height> + <autoMaxHeight>true</autoMaxHeight> + <horizontalStretch>true</horizontalStretch> + <verticalStretch>true</verticalStretch> + </extInfo> + </items> + <commandBarLocation>Bottom</commandBarLocation> + <showCommandBar>true</showCommandBar> + <autoCommandBar> + <name>ФормаКоманднаяПанель</name> + <id>-1</id> + <items xsi:type="form:Button"> + <name>ФормаЗакрыть</name> + <id>3</id> + <visible>true</visible> + <enabled>true</enabled> + <userVisible> + <common>true</common> + </userVisible> + <extendedTooltip> + <name>ФормаЗакрытьРасширеннаяПодсказка</name> + <id>4</id> + <type>Label</type> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <extInfo xsi:type="form:LabelDecorationExtInfo"> + <horizontalAlign>Left</horizontalAlign> + </extInfo> + </extendedTooltip> + <commandName>Form.StandardCommand.Close</commandName> + <representation>PictureAndText</representation> + <defaultButton>true</defaultButton> + <autoMaxWidth>true</autoMaxWidth> + <autoMaxHeight>true</autoMaxHeight> + <placementArea>UserCmds</placementArea> + <representationInContextMenu>Auto</representationInContextMenu> + </items> + <horizontalAlign>Right</horizontalAlign> + </autoCommandBar> + <handlers> + <event>OnCreateAtServer</event> + <name>ПриСозданииНаСервере</name> + </handlers> + <excludedCommands>Abort</excludedCommands> + <excludedCommands>Cancel</excludedCommands> + <excludedCommands>Help</excludedCommands> + <excludedCommands>Ignore</excludedCommands> + <excludedCommands>No</excludedCommands> + <excludedCommands>OK</excludedCommands> + <excludedCommands>RestoreValues</excludedCommands> + <excludedCommands>Retry</excludedCommands> + <excludedCommands>SaveValues</excludedCommands> + <excludedCommands>Yes</excludedCommands> + <width>70</width> + <height>15</height> + <windowOpeningMode>LockOwner</windowOpeningMode> + <saveWindowSettings>true</saveWindowSettings> + <autoUrl>true</autoUrl> + <group>Vertical</group> + <enabled>true</enabled> + <verticalScroll>UseIfNecessary</verticalScroll> + <showTitle>auto</showTitle> + <showCloseButton>true</showCloseButton> + <attributes> + <name>ПолеHTMLДокумента</name> + <title> + <key>ru</key> + <value>Поле HTMLДокумента</value> + + 2 + + String + + + + true + + + true + + + + + + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Module.bsl new file mode 100644 index 000000000..3f21d5755 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/ДополнительноеОписание/Module.bsl @@ -0,0 +1,16 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ПолеHTMLДокумента = АвтономнаяРаботаСлужебный.ТекстИнструкцииИзМакета(Параметры.ИмяМакета); + + Заголовок = Параметры.Заголовок; + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Form.form b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Form.form new file mode 100644 index 000000000..8b6ad5e77 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеАвтономногоРабочегоМеста/Form.form @@ -0,0 +1,1874 @@ + + + + <key>ru</key> + <value>Помощник настройки автономного рабочего места</value> + + + ПанельОсновная + 12 + + Начало + 13 + + Заголовок1 + 64 + + <key>ru</key> + <value>Вас приветствует помощник настройки автономного рабочего места</value> + + true + true + + true + + + Заголовок1РасширеннаяПодсказка + 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 + + + КартинкаСозданиеЛокальногоРабочегоМестаРасширеннаяПодсказка + 95 + Label + true + true + + Left + + + + КартинкаСозданиеЛокальногоРабочегоМестаКонтекстноеМеню + 67 + true + + 64 + true + 9 + true + + + + + + Группа8 + 83 + + Декорация2 + 84 + + <key>ru</key> + <value>Для того чтобы выполнять синхронизацию данных необходимо указать пароль. +Укажите пароль, который Вы вводили при регистрации.</value> + + true + true + + true + + + Декорация2РасширеннаяПодсказка + 97 + Label + true + true + + Left + + + + Декорация2КонтекстноеМеню + 85 + true + + Label + true + true + true + + Left + + + + Группа7 + 86 + + Пароль + 87 + true + true + + true + + + Пароль + + Left + + ПарольРасширеннаяПодсказка + 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 + + + ЗабылиПарольРасширеннаяПодсказка + 101 + Label + true + true + + Left + + + Hyperlink + Form.Command.ЗабылиПароль + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа7РасширеннаяПодсказка + 98 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ЗапомнитьПароль + 90 + true + true + + true + + + ЗапомнитьПароль + + Right + + ЗапомнитьПарольРасширеннаяПодсказка + 102 + Label + true + true + + Left + + + + ЗапомнитьПарольКонтекстноеМеню + 91 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + false + + Группа8РасширеннаяПодсказка + 96 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + НадписьДалее1 + 68 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для проверки подключения к Интернету.</value> + + true + true + + true + + + НадписьДалее1РасширеннаяПодсказка + 104 + Label + true + true + + Left + + + + НадписьДалее1КонтекстноеМеню + 69 + true + + Label + true + 3 + true + true + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Начало</value> + + + ru + Страница навигации1 + + + НачалоРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ОжиданиеПроверкиПодключения + 28 + + Заголовок4 + 70 + + <key>ru</key> + <value>Проверка подключения</value> + + true + true + + true + + + Заголовок4РасширеннаяПодсказка + 106 + 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 + + + Декорация14РасширеннаяПодсказка + 109 + Label + true + true + + Left + + + + Декорация14КонтекстноеМеню + 75 + true + + 8 + true + 3 + true + false + + + CommonPicture.ДлительнаяОперация48 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинкиРасширеннаяПодсказка + 108 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения + 76 + + Декорация15 + 77 + + <key>ru</key> + <value>Выполняется проверка подключения к Интернету. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация15РасширеннаяПодсказка + 111 + 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 + Группа сообщения + + + ГруппаСообщенияРасширеннаяПодсказка + 110 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщенияРасширеннаяПодсказка + 107 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + ru + Страница 14 + + + ОжиданиеПроверкиПодключенияРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + Окончание + 16 + + Заголовок2 + 79 + + <key>ru</key> + <value>Настройка автономного рабочего места завершена</value> + + true + true + + true + + + Заголовок2РасширеннаяПодсказка + 113 + 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 + + + НадписьДалее2РасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + НадписьДалее2КонтекстноеМеню + 82 + true + + Label + true + 3 + true + true + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Окончание</value> + + + ru + Страница навигации1 + + + ОкончаниеРасширеннаяПодсказка + 112 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + + ru + Панель навигации + + true + true + + ПанельОсновнаяРасширеннаяПодсказка + 92 + Label + true + true + + Left + + + Pages + + Auto + + + + РамкаПанелиНавигации + 38 + + ПанельНавигации + 39 + + СтраницаНавигацииНачало + 40 + + КоманднаяПанель1 + 41 + + КомандаНазад + 42 + true + false + + true + + + КомандаНазадРасширеннаяПодсказка + 119 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + + КомандаДалее + 43 + true + true + + true + + true + + КомандаДалееРасширеннаяПодсказка + 120 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Auto + true + true + true + UserCmds + Auto + + + КомандаОтмена + 44 + true + true + + true + + + КомандаОтменаРасширеннаяПодсказка + 121 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 45 + true + true + + true + + + СправкаРасширеннаяПодсказка + 122 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанель1РасширеннаяПодсказка + 118 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации начало</value> + + + ru + Страница навигации начало + + + СтраницаНавигацииНачалоРасширеннаяПодсказка + 117 + Label + true + true + + Left + + + Page + + auto + + + + СтраницаНавигацииПродолжение + 46 + + КоманднаяПанель2 + 47 + + КомандаНазад1 + 48 + true + true + + true + + + КомандаНазад1РасширеннаяПодсказка + 125 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + + КомандаДалее1 + 49 + true + true + + true + + true + + КомандаДалее1РасширеннаяПодсказка + 126 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОтмена1 + 50 + true + true + + true + + + КомандаОтмена1РасширеннаяПодсказка + 127 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка1 + 51 + true + true + + true + + + Справка1РасширеннаяПодсказка + 128 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанель2РасширеннаяПодсказка + 124 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации продолжение</value> + + + ru + Страница навигации1 + + + СтраницаНавигацииПродолжениеРасширеннаяПодсказка + 123 + Label + true + true + + Left + + + Page + + auto + + + + СтраницаНавигацииОкончание + 52 + + КоманднаяПанель3 + 53 + + КомандаНазад2 + 54 + true + false + + true + + + КомандаНазад2РасширеннаяПодсказка + 131 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + + КомандаГотово + 55 + true + true + + true + + + КомандаГотовоРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + Form.Command.КомандаГотово + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОтмена2 + 56 + true + true + + true + + + КомандаОтмена2РасширеннаяПодсказка + 133 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка2 + 57 + true + true + + true + + + Справка2РасширеннаяПодсказка + 134 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанель3РасширеннаяПодсказка + 130 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации окончание</value> + + + ru + Страница навигации1 + + + СтраницаНавигацииОкончаниеРасширеннаяПодсказка + 129 + Label + true + true + + Left + + + Page + + auto + + + + СтраницаНавигацииОжидание + 58 + + КоманднаяПанель4 + 59 + + КомандаНазад3 + 60 + true + false + + true + + + КомандаНазад3РасширеннаяПодсказка + 137 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + + КомандаДалее3 + 61 + + <key>ru</key> + <value>Далее >></value> + + true + false + + true + + + КомандаДалее3РасширеннаяПодсказка + 138 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОтмена3 + 62 + true + false + + true + + + КомандаОтмена3РасширеннаяПодсказка + 139 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка3 + 63 + true + false + + true + + + Справка3РасширеннаяПодсказка + 140 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + false + + true + + true + true + + КоманднаяПанель4РасширеннаяПодсказка + 136 + Label + true + true + + Left + + + CommandBar + + Right + + + true + false + + true + + + <key>ru</key> + <value>Страница навигации ожидание</value> + + + ru + Страница навигации1 + + true + true + + СтраницаНавигацииОжиданиеРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель навигации</value> + + true + + ПанельНавигацииРасширеннаяПодсказка + 116 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Рамка панели навигации</value> + + + ru + Рамка панели навигации + + + РамкаПанелиНавигацииРасширеннаяПодсказка + 115 + 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> + + 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 new file mode 100644 index 0000000000000000000000000000000000000000..8cec9ae00b777161fdb564972f02341fd838c87b GIT binary patch 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 new file mode 100644 index 000000000..fa854b491 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Form.form @@ -0,0 +1,2863 @@ + + + + <key>ru</key> + <value>Помощник создания автономного рабочего места</value> + + + ПанельОсновная + 29 + + Начало + 30 + + Заголовок1 + 31 + + <key>ru</key> + <value>Вас приветствует помощник создания автономного рабочего места</value> + + true + true + + true + + + Заголовок1РасширеннаяПодсказка + 221 + Label + true + true + + Left + + + + Заголовок1КонтекстноеМеню + 32 + true + + Label + true + 2 + true + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + КартинкаСозданиеЛокальногоРабочегоМеста + 91 + true + true + + true + + + КартинкаСозданиеЛокальногоРабочегоМестаРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + + КартинкаСозданиеЛокальногоРабочегоМестаКонтекстноеМеню + 92 + true + + 64 + true + 9 + true + + + + + + Группа3 + 153 + + Декорация5 + 154 + true + true + + true + + + Декорация5РасширеннаяПодсказка + 224 + Label + true + true + + Left + + + + Декорация5КонтекстноеМеню + 155 + true + + 2 + true + 2 + true + + + CommonPicture.Информация + + + + + ПоясняющаяНадписьОВерсииПлатформы + 151 + + <key>ru</key> + <value>Для автономной работы на Вашем компьютере должна быть установлена +платформа "1С:Предприятие 8.2" версии <ВерсияПриложения></value> + + true + true + + true + + + ПоясняющаяНадписьОВерсииПлатформыРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + + ПоясняющаяНадписьОВерсииПлатформыКонтекстноеМеню + 152 + true + + Label + true + 2 + true + + Style.ПоясняющийТекст + + + Left + Center + + + true + true + + true + + + Группа3РасширеннаяПодсказка + 223 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Группа5 + 173 + + Декорация8 + 174 + true + true + + true + + + Декорация8РасширеннаяПодсказка + 227 + Label + true + true + + Left + + + + Декорация8КонтекстноеМеню + 175 + true + + Label + true + true + + Left + + + + КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие + 194 + true + true + + true + + true + + КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятиеРасширеннаяПодсказка + 228 + Label + true + true + + Left + + + Hyperlink + Form.Command.КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа5РасширеннаяПодсказка + 226 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + НадписьДалее1 + 93 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для настройки параметров автономной работы.</value> + + true + true + + true + + + НадписьДалее1РасширеннаяПодсказка + 229 + Label + true + true + + Left + + + + НадписьДалее1КонтекстноеМеню + 94 + true + + Label + true + 3 + true + true + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Начало</value> + + + ru + Страница навигации1 + + + НачалоРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НастройкаВыгрузки + 33 + + Заголовок2 + 81 + + <key>ru</key> + <value>Настройка параметров</value> + + true + true + + true + + + Заголовок2РасширеннаяПодсказка + 231 + Label + true + true + + Left + + + + Заголовок2КонтекстноеМеню + 82 + true + + Label + true + 2 + true + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + НаименованиеАвтономногоРабочегоМеста + 139 + + <key>ru</key> + <value>Наименование автономного рабочего места</value> + + true + true + + true + + + Объект.НаименованиеАвтономногоРабочегоМеста + + Top + + НаименованиеАвтономногоРабочегоМестаРасширеннаяПодсказка + 232 + Label + true + true + + Left + + + + НаименованиеАвтономногоРабочегоМестаКонтекстноеМеню + 140 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + Декорация4 + 195 + + <key>ru</key> + <value>Например, "Для работы дома" или "Командировка к партнеру".</value> + + true + true + + true + + + Декорация4РасширеннаяПодсказка + 234 + Label + true + true + + Left + + + + Декорация4КонтекстноеМеню + 196 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + Группа2 + 143 + + Группа1 + 108 + + НастроитьОграниченияПередачиДанных + 105 + true + true + + true + + + НастроитьОграниченияПередачиДанныхРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + UsualButton + Form.Command.НастроитьОграниченияПередачиДанных + Normal + Auto + true + true + UserCmds + Auto + + + ОписаниеОграниченийПередачиДанных + 206 + + <key>ru</key> + <value><В автономном рабочем месте доступны все данные.></value> + + true + true + + true + + + ОписаниеОграниченийПередачиДанныхРасширеннаяПодсказка + 238 + Label + true + true + + Left + + + + ОписаниеОграниченийПередачиДанныхКонтекстноеМеню + 207 + true + + Label + true + true + + Left + + + true + true + + true + + + Группа1РасширеннаяПодсказка + 236 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + Группа2РасширеннаяПодсказка + 235 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + NormalSeparation + true + true + Auto + Auto + + + + ПарольДляСинхронизацииДанных + 212 + + Пароль + 213 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + Объект.ПарольДляСинхронизацииДанных + + + ПарольРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + + ПарольКонтекстноеМеню + 214 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + true + Normal + + + + ПодтверждениеПароля + 215 + true + true + + true + + + ПодтверждениеПароля + + + ПодтверждениеПароляРасширеннаяПодсказка + 242 + Label + true + true + + Left + + + + ПодтверждениеПароляКонтекстноеМеню + 216 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + true + Normal + + + + ПояснениеКПаролю + 217 + + <key>ru</key> + <value>Пароль должен содержать 7 и более символов, используйте буквы и цифры. +Необходимо наличие строчных и заглавных букв (например: Qazx123)</value> + + true + true + + true + + + ПояснениеКПаролюРасширеннаяПодсказка + 244 + Label + true + true + + Left + + + + ПояснениеКПаролюКонтекстноеМеню + 218 + true + + Label + 50 + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Пароль для синхронизации данных</value> + + + ru + Пароль для синхронизации данных + + true + + ПарольДляСинхронизацииДанныхРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + Декорация6 + 197 + true + true + + true + + + Декорация6РасширеннаяПодсказка + 245 + Label + true + true + + Left + + + + Декорация6КонтекстноеМеню + 198 + true + + Label + true + true + true + + Style.ПоясняющийТекст + + + Left + + + + НадписьДалее2 + 95 + + <key>ru</key> + <value>Нажмите кнопку "Далее" для подготовки данных для загрузки.</value> + + true + true + + true + + + НадписьДалее2РасширеннаяПодсказка + 246 + Label + true + true + + Left + + + + НадписьДалее2КонтекстноеМеню + 96 + true + + Label + true + true + + Left + Bottom + + + true + true + + true + + + <key>ru</key> + <value>Настройка выгрузки</value> + + + ru + Страница навигации1 + + + НастройкаВыгрузкиРасширеннаяПодсказка + 230 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ОжиданиеСозданияНачальногоОбраза + 45 + + Заголовок4 + 85 + + <key>ru</key> + <value>Подготовка данных для загрузки</value> + + true + true + + true + + + Заголовок4РасширеннаяПодсказка + 248 + Label + true + true + + Left + + + + Заголовок4КонтекстноеМеню + 86 + true + + Label + true + 2 + true + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + ГруппировкаСообщения + 48 + + ГруппаКартинки + 49 + + Декорация14 + 50 + true + true + + true + + + Декорация14РасширеннаяПодсказка + 251 + Label + true + true + + Left + + + + Декорация14КонтекстноеМеню + 51 + true + + 8 + true + 3 + true + false + + + CommonPicture.ДлительнаяОперация48 + + + + true + true + + true + + + <key>ru</key> + <value>Группа картинки</value> + + + ru + Группа картинки + + + ГруппаКартинкиРасширеннаяПодсказка + 250 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаСообщения + 52 + + Декорация15 + 53 + + <key>ru</key> + <value>Выполняется подготовка данных для загрузки на Ваш компьютер. +Это может занять несколько минут. +Пожалуйста, подождите...</value> + + true + true + + true + + + Декорация15РасширеннаяПодсказка + 253 + Label + true + true + + Left + + + + Декорация15КонтекстноеМеню + 54 + true + + Label + true + 3 + true + true + false + + System.DefaultGUIFont + 10.0 + + + Left + Center + + + true + true + + true + + + <key>ru</key> + <value>Группа сообщения</value> + + + ru + Группа сообщения + + + ГруппаСообщенияРасширеннаяПодсказка + 252 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Группировка сообщения + + + ГруппировкаСообщенияРасширеннаяПодсказка + 249 + Label + true + true + + Left + + + UsualGroup + + Auto + NormalSeparation + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Ожидание создания начального образа</value> + + + ru + Страница 14 + + + ОжиданиеСозданияНачальногоОбразаРасширеннаяПодсказка + 247 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + Окончание + 42 + + Заголовок6 + 89 + + <key>ru</key> + <value>Создание автономного рабочего места успешно завершено</value> + + true + true + + true + + + Заголовок6РасширеннаяПодсказка + 255 + Label + true + true + + Left + + + + Заголовок6КонтекстноеМеню + 90 + true + + Label + true + 2 + true + + System.DefaultGUIFont + 10.0 + true + false + false + false + + + Left + Top + + + + Группа4 + 167 + + Декорация3 + 168 + + <key>ru</key> + <value>1. Загрузите данные к себе на компьютер:</value> + + true + true + + true + + + Декорация3РасширеннаяПодсказка + 257 + Label + true + true + + Left + + + + Декорация3КонтекстноеМеню + 169 + true + + Label + true + true + + Left + + + + ЗагрузитьНачальныйОбразНаКомпьютерПользователя + 170 + + <key>ru</key> + <value>Автономная работа.zip (<РазмерФайла> Мб)</value> + + true + true + + true + + + ЗагрузитьНачальныйОбразНаКомпьютерПользователяРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + Hyperlink + Form.Command.ЗагрузитьНачальныйОбразНаКомпьютерПользователя + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа4РасширеннаяПодсказка + 256 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Декорация1 + 210 + + <key>ru</key> + <value>2. Следуйте инструкции:</value> + + true + true + + true + + + Декорация1РасширеннаяПодсказка + 259 + Label + true + true + + Left + + + + Декорация1КонтекстноеМеню + 211 + true + + Label + true + true + + Left + + + + Группа9 + 201 + + Группа6 + 180 + + ИнструкцияПоНастройкеАвтономногоРабочегоМестаПечатьИнструкции + 208 + true + true + + true + + + ИнструкцияПоНастройкеАвтономногоРабочегоМестаПечатьИнструкцииРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + Form.Command.ПечатьИнструкции + Normal + Auto + true + true + UserCmds + Auto + + + ИнструкцияПоНастройкеАвтономногоРабочегоМестаСохранитьИнструкциюКак + 209 + true + true + + true + + + ИнструкцияПоНастройкеАвтономногоРабочегоМестаСохранитьИнструкциюКакРасширеннаяПодсказка + 263 + Label + true + true + + Left + + + Form.Command.СохранитьИнструкциюКак + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа6РасширеннаяПодсказка + 261 + Label + true + true + + Left + + + CommandBar + + Left + Item.ИнструкцияПоНастройкеАвтономногоРабочегоМеста + + + + ИнструкцияПоНастройкеАвтономногоРабочегоМеста + 171 + true + true + + true + + + ИнструкцияПоНастройкеАвтономногоРабочегоМеста + + None + + ИнструкцияПоНастройкеАвтономногоРабочегоМестаРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + + ИнструкцияПоНастройкеАвтономногоРабочегоМестаКонтекстноеМеню + 172 + true + + HTMLDocumentField + Enter + true + Left + true + + 50 + true + 10 + true + true + true + + + true + true + + true + + + Группа9РасширеннаяПодсказка + 260 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + Auto + Auto + + + true + true + + true + + + ru + Страница навигации1 + + + ОкончаниеРасширеннаяПодсказка + 254 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель основная</value> + + + ru + Панель навигации + + true + true + + ПанельОсновнаяРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + Pages + + Auto + + + + РамкаПанелиНавигации + 55 + + ПанельНавигации + 56 + + СтраницаНавигацииНачало + 57 + + КоманднаяПанель1 + 58 + + КомандаНазад + 59 + true + false + + true + + + КомандаНазадРасширеннаяПодсказка + 270 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + + КомандаДалее + 60 + true + true + + true + + true + + КомандаДалееРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Auto + true + true + true + UserCmds + true + Auto + + + КомандаОтмена + 61 + true + true + + true + + + КомандаОтменаРасширеннаяПодсказка + 272 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка + 62 + true + true + + true + + + СправкаРасширеннаяПодсказка + 273 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанель1РасширеннаяПодсказка + 269 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации начало</value> + + + ru + Страница навигации начало + + + СтраницаНавигацииНачалоРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + Page + + auto + + + + СтраницаНавигацииПродолжение + 63 + + КоманднаяПанель2 + 64 + + КомандаНазад1 + 65 + true + true + + true + + + КомандаНазад1РасширеннаяПодсказка + 276 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + + КомандаДалее1 + 66 + true + true + + true + + true + + КомандаДалее1РасширеннаяПодсказка + 277 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОтмена1 + 67 + true + true + + true + + + КомандаОтмена1РасширеннаяПодсказка + 278 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка1 + 68 + true + true + + true + + + Справка1РасширеннаяПодсказка + 279 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанель2РасширеннаяПодсказка + 275 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации продолжение</value> + + + ru + Страница навигации1 + + + СтраницаНавигацииПродолжениеРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + Page + + auto + + + + СтраницаНавигацииОкончание + 69 + + КоманднаяПанель3 + 70 + + КомандаНазад2 + 71 + true + false + + true + + + КомандаНазад2РасширеннаяПодсказка + 282 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + + КомандаГотово + 72 + true + true + + true + + + КомандаГотовоРасширеннаяПодсказка + 283 + Label + true + true + + Left + + + Form.Command.КомандаГотово + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОтмена2 + 73 + true + false + + true + + + КомандаОтмена2РасширеннаяПодсказка + 284 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка2 + 74 + true + true + + true + + + Справка2РасширеннаяПодсказка + 285 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + true + + КоманднаяПанель3РасширеннаяПодсказка + 281 + Label + true + true + + Left + + + CommandBar + + Right + + + true + true + + true + + + <key>ru</key> + <value>Страница навигации окончание</value> + + + ru + Страница навигации1 + + + СтраницаНавигацииОкончаниеРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + Page + + auto + + + + СтраницаНавигацииОжидание + 75 + + КоманднаяПанель4 + 76 + + КомандаНазад3 + 77 + true + false + + true + + + КомандаНазад3РасширеннаяПодсказка + 288 + Label + true + true + + Left + + + Form.Command.КомандаНазад + Normal + Auto + true + true + UserCmds + Auto + + + КомандаДалее3 + 78 + + <key>ru</key> + <value>Далее >></value> + + true + false + + true + + + КомандаДалее3РасширеннаяПодсказка + 289 + Label + true + true + + Left + + + Form.Command.КомандаДалее + Normal + Auto + true + true + UserCmds + Auto + + + КомандаОтмена3 + 79 + true + false + + true + + + КомандаОтмена3РасширеннаяПодсказка + 290 + Label + true + true + + Left + + + Form.Command.КомандаОтмена + Normal + Auto + true + true + UserCmds + Auto + + + Справка3 + 80 + true + false + + true + + + Справка3РасширеннаяПодсказка + 291 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + true + false + + true + + true + true + + КоманднаяПанель4РасширеннаяПодсказка + 287 + Label + true + true + + Left + + + CommandBar + + Right + + + true + false + + true + + + <key>ru</key> + <value>Страница навигации ожидание</value> + + + ru + Страница навигации1 + + true + true + + СтраницаНавигацииОжиданиеРасширеннаяПодсказка + 286 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель навигации</value> + + true + + ПанельНавигацииРасширеннаяПодсказка + 267 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Рамка панели навигации</value> + + + ru + Рамка панели навигации + + + РамкаПанелиНавигацииРасширеннаяПодсказка + 266 + 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 + + Number + + 3 + true + + + + true + + + true + + + + ТаблицаПереходов + + <key>ru</key> + <value>Таблица переходов</value> + + 3 + + ValueTable + + + true + + + true + + + ПорядковыйНомерПерехода + + <key>ru</key> + <value>Порядковый номер перехода</value> + + 1 + + Number + + 3 + true + + + + true + + + true + + + + ИмяОсновнойСтраницы + + <key>ru</key> + <value>Имя основной страницы</value> + + 2 + + String + + + + true + + + true + + + + ИмяСтраницыДекорации + + <key>ru</key> + <value>Имя страницы декорации</value> + + 3 + + String + + + + true + + + true + + + + ИмяСтраницыНавигации + + <key>ru</key> + <value>Имя страницы навигации</value> + + 4 + + String + + + + true + + + true + + + + ИмяОбработчикаПриОткрытии + + <key>ru</key> + <value>Имя обработчика при открытии</value> + + 5 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеДалее + + <key>ru</key> + <value>Имя обработчика при переходе далее</value> + + 6 + + String + + + + true + + + true + + + + ИмяОбработчикаПриПереходеНазад + + <key>ru</key> + <value>Имя обработчика при переходе назад</value> + + 7 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 8 + + Boolean + + + true + + + true + + + + ИмяОбработчикаДлительнойОперации + + <key>ru</key> + <value>Имя обработчика длительной операции</value> + + 9 + + String + + + + true + + + true + + + + + НастройкаОтборовНаУзле + + <key>ru</key> + <value>Настройка отборов на узле</value> + + 9 + + + true + + + true + + + + ИнструкцияПоНастройкеАвтономногоРабочегоМеста + + <key>ru</key> + <value>Инструкция по настройке автономного рабочего места</value> + + 13 + + String + + + + true + + + true + + + + ИмяПланаОбмена + + <key>ru</key> + <value>Имя плана обмена</value> + + 14 + + String + + + + true + + + true + + + + ДлительнаяОперация + + <key>ru</key> + <value>Длительная операция</value> + + 6 + + Boolean + + + true + + + true + + + + ДлительнаяОперацияЗавершена + + <key>ru</key> + <value>Длительная операция завершена</value> + + 7 + + Boolean + + + true + + + true + + + + СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста + + <key>ru</key> + <value>Событие журнала регистрации создание автономного рабочего места</value> + + 10 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 11 + + + true + + + true + + + + АдресВременногоХранилищаНачальногоОбраза + + <key>ru</key> + <value>Адрес временного хранилища начального образа</value> + + 8 + + String + + + + true + + + true + + + + ИмяФайлаПакетаУстановки + + <key>ru</key> + <value>Имя файла пакета установки</value> + + 12 + + String + + + + true + + + true + + + + АдресВременногоХранилищаИнформацииОПакетеУстановки + + <key>ru</key> + <value>Адрес временного хранилища информации о пакете установки</value> + + 15 + + String + + + + true + + + true + + + + РазмерФайлаПакетаУстановки + + <key>ru</key> + <value>Размер файла пакета установки</value> + + 16 + + Number + + 10 + 1 + + + + true + + + true + + + + ПодтверждениеПароля + + <key>ru</key> + <value>Подтверждение пароля</value> + + 4 + + String + + 50 + + + + true + + + true + + ShowError + + + КлассОшибкиСозданиеСлужебногоПользователя + + <key>ru</key> + <value>Класс ошибки создание служебного пользователя</value> + + 5 + + String + + + + true + + + true + + + + КомандаГотово + + <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 + + true + + + + КомандаОтмена + + + Auto + Auto + + + НастроитьОграниченияПередачиДанных + + <key>ru</key> + <value>Изменить...</value> + + 6 + + true + + + StdPicture.FilterCriterion + + + + НастроитьОграниченияПередачиДанных + + + TextPicture + Auto + Auto + + + ЗагрузитьНачальныйОбразНаКомпьютерПользователя + + <key>ru</key> + <value>Загрузить</value> + + 8 + + true + + + StdPicture.MoveDown + + + + ЗагрузитьНачальныйОбразНаКомпьютерПользователя + + + TextPicture + Auto + Auto + + + КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие + + <key>ru</key> + <value>Как установить или обновить версию платформы 1С:Предприятие</value> + + 1 + + true + + + + КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие + + + Auto + Auto + + + ПечатьИнструкции + + <key>ru</key> + <value>Печать</value> + + 9 + + ru + Печать инструкции + + + true + + + StdPicture.Print + + + + ПечатьИнструкции + + + TextPicture + Auto + Auto + + + СохранитьИнструкциюКак + + <key>ru</key> + <value>Сохранить как...</value> + + 10 + + true + + + StdPicture.Write + + + + СохранитьИнструкциюКак + + + TextPicture + Auto + Auto + + + + + + +
            diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Items/КартинкаСозданиеЛокальногоРабочегоМеста/Picture.png b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Forms/НастройкаНаСторонеСервиса/Items/КартинкаСозданиеЛокальногоРабочегоМеста/Picture.png new file mode 100644 index 0000000000000000000000000000000000000000..8cec9ae00b777161fdb564972f02341fd838c87b GIT binary patch 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 Тогда + + ПодробноеПредставлениеОшибки = СтрЗаменить(ПодробноеПредставлениеОшибки, КлассОшибки, ""); + КраткоеПредставлениеОшибки = СтрЗаменить(КраткоеПредставлениеОшибки, КлассОшибки, ""); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки,, "Объект.ПарольДляСинхронизацииДанных"); + + Иначе + + Предупреждение(НСтр("ru = 'Не удалось выполнить операцию.'")); + + КонецЕсли; + + ЗаписатьОшибкуВЖурналРегистрации( + ПодробноеПредставлениеОшибки, СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста + ); + КонецПопытки; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +// Поставляемая часть + +&НаКлиенте +Процедура КомандаДалее(Команда) + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаНазад(Команда) + + ИзменитьПорядковыйНомерПерехода(-1); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаГотово(Команда) + + ЗакрытьФормуБезусловно = Истина; + + Закрыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура КомандаОтмена(Команда) + + Закрыть(); + +КонецПроцедуры + +// Переопределяемая часть + +&НаКлиенте +Процедура НастроитьОграниченияПередачиДанных(Команда) + + ИмяФормыНастройкиУзла = "ПланОбмена.[ИмяПланаОбмена].Форма.ФормаНастройкиУзла"; + ИмяФормыНастройкиУзла = СтрЗаменить(ИмяФормыНастройкиУзла, "[ИмяПланаОбмена]", ИмяПланаОбмена); + + РезультатОткрытия = ОткрытьФормуМодально(ИмяФормыНастройкиУзла, Новый Структура("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле), ЭтаФорма); + + Если РезультатОткрытия <> Неопределено Тогда + + Для Каждого НастройкаОтбора ИЗ НастройкаОтборовНаУзле Цикл + + НастройкаОтборовНаУзле[НастройкаОтбора.Ключ] = РезультатОткрытия[НастройкаОтбора.Ключ]; + + КонецЦикла; + + Элементы.ОписаниеОграниченийПередачиДанных.Заголовок = ОписаниеОграниченийПередачиДанных(ИмяПланаОбмена, НастройкаОтборовНаУзле); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗагрузитьНачальныйОбразНаКомпьютерПользователя(Команда) + + ПолучитьФайл(АдресВременногоХранилищаНачальногоОбраза, ИмяФайлаПакетаУстановки); + +КонецПроцедуры + +&НаКлиенте +Процедура КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие(Команда) + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("ИмяМакета", "КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие"); + ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Как установить или обновить версию платформы 1С:Предприятие'")); + + ОткрытьФорму("Обработка.ПомощникСозданияАвтономногоРабочегоМеста.Форма.ДополнительноеОписание", ПараметрыФормы, ЭтаФорма, "КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПечатьИнструкции(Команда) + + Элементы.ИнструкцияПоНастройкеАвтономногоРабочегоМеста.Документ.execCommand("Print"); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьИнструкциюКак(Команда) + + Элементы.ИнструкцияПоНастройкеАвтономногоРабочегоМеста.Документ.execCommand("SaveAs"); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +//////////////////////////////////////////////////////////////////////////////// +// Поставляемая часть + +&НаКлиенте +Процедура ИзменитьПорядковыйНомерПерехода(Итератор) + + ОчиститьСообщения(); + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + Итератор); + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьПорядковыйНомерПерехода(Знач Значение) + + ЭтоПереходДалее = (Значение > ПорядковыйНомерПерехода); + + ПорядковыйНомерПерехода = Значение; + + Если ПорядковыйНомерПерехода < 0 Тогда + + ПорядковыйНомерПерехода = 0; + + КонецЕсли; + + ПорядковыйНомерПереходаПриИзменении(ЭтоПереходДалее); + +КонецПроцедуры + +&НаКлиенте +Процедура ПорядковыйНомерПереходаПриИзменении(Знач ЭтоПереходДалее) + + // Выполняем обработчики событий перехода + ВыполнитьОбработчикиСобытийПерехода(ЭтоПереходДалее); + + // Устанавливаем отображение страниц + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Элементы.ПанельОсновная.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяОсновнойСтраницы]; + Элементы.ПанельНавигации.ТекущаяСтраница = Элементы[СтрокаПереходаТекущая.ИмяСтраницыНавигации]; + + // Устанавливаем текущую кнопку по умолчанию + КнопкаДалее = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаДалее"); + + Если КнопкаДалее <> Неопределено Тогда + + КнопкаДалее.КнопкаПоУмолчанию = Истина; + + Иначе + + КнопкаГотово = ПолучитьКнопкуФормыПоИмениКоманды(Элементы.ПанельНавигации.ТекущаяСтраница, "КомандаГотово"); + + Если КнопкаГотово <> Неопределено Тогда + + КнопкаГотово.КнопкаПоУмолчанию = Истина; + + КонецЕсли; + + КонецЕсли; + + Если ЭтоПереходДалее И СтрокаПереходаТекущая.ДлительнаяОперация Тогда + + ПодключитьОбработчикОжидания("ВыполнитьОбработчикДлительнойОперации", 1, Истина); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикиСобытийПерехода(Знач ЭтоПереходДалее) + + // Обработчики событий переходов + Если ЭтоПереходДалее Тогда + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода - 1)); + + Если СтрокиПерехода.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаПерехода = СтрокиПерехода[0]; + + // обработчик ПриПереходеДалее + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеДалее) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеДалее); + + Отказ = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + Иначе + + СтрокиПерехода = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода + 1)); + + Если СтрокиПерехода.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + СтрокаПерехода = СтрокиПерехода[0]; + + // обработчик ПриПереходеНазад + Если Не ПустаяСтрока(СтрокаПерехода.ИмяОбработчикаПриПереходеНазад) + И Не СтрокаПерехода.ДлительнаяОперация Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПерехода.ИмяОбработчикаПриПереходеНазад); + + Отказ = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + Если СтрокаПереходаТекущая.ДлительнаяОперация И Не ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + Возврат; + КонецЕсли; + + // обработчик ПриОткрытии + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПропуститьСтраницу, ЭтоПереходДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаПриОткрытии); + + Отказ = Ложь; + ПропуститьСтраницу = Ложь; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПропуститьСтраницу Тогда + + Если ЭтоПереходДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьОбработчикДлительнойОперации() + + СтрокиПереходаТекущие = ТаблицаПереходов.НайтиСтроки(Новый Структура("ПорядковыйНомерПерехода", ПорядковыйНомерПерехода)); + + Если СтрокиПереходаТекущие.Количество() = 0 Тогда + ВызватьИсключение НСтр("ru = 'Не определена страница для отображения.'"); + КонецЕсли; + + СтрокаПереходаТекущая = СтрокиПереходаТекущие[0]; + + // обработчик ОбработкаДлительнойОперации + Если Не ПустаяСтрока(СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации) Тогда + + ИмяПроцедуры = "Подключаемый_[ИмяОбработчика](Отказ, ПерейтиДалее)"; + ИмяПроцедуры = СтрЗаменить(ИмяПроцедуры, "[ИмяОбработчика]", СтрокаПереходаТекущая.ИмяОбработчикаДлительнойОперации); + + Отказ = Ложь; + ПерейтиДалее = Истина; + + А = Вычислить(ИмяПроцедуры); + + Если Отказ Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода - 1); + + Возврат; + + ИначеЕсли ПерейтиДалее Тогда + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + + Иначе + + УстановитьПорядковыйНомерПерехода(ПорядковыйНомерПерехода + 1); + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ТаблицаПереходовНоваяСтрока(ПорядковыйНомерПерехода, + ИмяОсновнойСтраницы, + ИмяСтраницыНавигации, + ИмяСтраницыДекорации = "", + ИмяОбработчикаПриОткрытии = "", + ИмяОбработчикаПриПереходеДалее = "", + ИмяОбработчикаПриПереходеНазад = "", + ДлительнаяОперация = Ложь, + ИмяОбработчикаДлительнойОперации = "" + ) + НоваяСтрока = ТаблицаПереходов.Добавить(); + + НоваяСтрока.ПорядковыйНомерПерехода = ПорядковыйНомерПерехода; + НоваяСтрока.ИмяОсновнойСтраницы = ИмяОсновнойСтраницы; + НоваяСтрока.ИмяСтраницыДекорации = ИмяСтраницыДекорации; + НоваяСтрока.ИмяСтраницыНавигации = ИмяСтраницыНавигации; + + НоваяСтрока.ИмяОбработчикаПриПереходеДалее = ИмяОбработчикаПриПереходеДалее; + НоваяСтрока.ИмяОбработчикаПриПереходеНазад = ИмяОбработчикаПриПереходеНазад; + НоваяСтрока.ИмяОбработчикаПриОткрытии = ИмяОбработчикаПриОткрытии; + + НоваяСтрока.ДлительнаяОперация = ДлительнаяОперация; + НоваяСтрока.ИмяОбработчикаДлительнойОперации = ИмяОбработчикаДлительнойОперации; + +КонецПроцедуры + +&НаКлиенте +Функция ПолучитьКнопкуФормыПоИмениКоманды(ЭлементФормы, ИмяКоманды) + + Для Каждого Элемент Из ЭлементФормы.ПодчиненныеЭлементы Цикл + + Если ТипЗнч(Элемент) = Тип("ГруппаФормы") Тогда + + ЭлементФормыПоИмениКоманды = ПолучитьКнопкуФормыПоИмениКоманды(Элемент, ИмяКоманды); + + Если ЭлементФормыПоИмениКоманды <> Неопределено Тогда + + Возврат ЭлементФормыПоИмениКоманды; + + КонецЕсли; + + ИначеЕсли ТипЗнч(Элемент) = Тип("КнопкаФормы") + И Найти(Элемент.ИмяКоманды, ИмяКоманды) > 0 Тогда + + Возврат Элемент; + + Иначе + + Продолжить; + + КонецЕсли; + + КонецЦикла; + + Возврат Неопределено; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Переопределяемая часть – Служебные процедуры и функции + +&НаСервере +Процедура СоздатьНачальныйОбразАвтономногоРабочегоМестаНаСервере(Отказ) + + Попытка + + Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда + + АдресВременногоХранилищаНачальногоОбраза = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + АдресВременногоХранилищаИнформацииОПакетеУстановки = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + + ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); + + УстановитьПривилегированныйРежим(Истина); + + Попытка + ОбработкаОбъект.СоздатьНачальныйОбразАвтономногоРабочегоМеста(НастройкаОтборовНаУзле, + АдресВременногоХранилищаНачальногоОбраза, + АдресВременногоХранилищаИнформацииОПакетеУстановки + ); + Исключение + Отказ = Истина; + Возврат; + КонецПопытки; + + ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); + + ИнформацияОПакетеУстановки = ПолучитьИзВременногоХранилища(АдресВременногоХранилищаИнформацииОПакетеУстановки); + РазмерФайлаПакетаУстановки = ИнформацияОПакетеУстановки.РазмерФайлаПакетаУстановки; + + Иначе + + // Получаем контекст помощника в виде структуры + КонтекстПомощника = Новый Структура; + Для Каждого Реквизит Из Метаданные.Обработки.ПомощникСозданияАвтономногоРабочегоМеста.Реквизиты Цикл + КонтекстПомощника.Вставить(Реквизит.Имя, Объект[Реквизит.Имя]); + КонецЦикла; + КонтекстПомощника.Вставить("НастройкаОтборовНаУзле", НастройкаОтборовНаУзле); + + Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "АвтономнаяРаботаСлужебный.СоздатьНачальныйОбразАвтономногоРабочегоМеста", + КонтекстПомощника, + НСтр("ru = 'Создание начального образа автономного рабочего места'"), + Истина + ); + + АдресВременногоХранилищаНачальногоОбраза = Результат.АдресХранилища; + АдресВременногоХранилищаИнформацииОПакетеУстановки = Результат.АдресХранилищаДополнительный; + + Если Результат.ЗаданиеВыполнено Тогда + + ИнформацияОПакетеУстановки = ПолучитьИзВременногоХранилища(АдресВременногоХранилищаИнформацииОПакетеУстановки); + РазмерФайлаПакетаУстановки = ИнформацияОПакетеУстановки.РазмерФайлаПакетаУстановки; + + Иначе + + ДлительнаяОперация = Истина; + ИдентификаторЗадания = Результат.ИдентификаторЗадания; + + КонецЕсли; + + КонецЕсли; + + Исключение + + Отказ = Истина; + + КлассОшибки = КлассОшибкиСозданиеСлужебногоПользователя; + + ПодробноеПредставлениеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); + КраткоеПредставлениеОшибки = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); + + Если Найти(ПодробноеПредставлениеОшибки, КлассОшибки) > 0 Тогда + + ПодробноеПредставлениеОшибки = АвтономнаяРаботаСлужебный.УдалитьКлассОшибки(ПодробноеПредставлениеОшибки, КлассОшибки); + КраткоеПредставлениеОшибки = АвтономнаяРаботаСлужебный.УдалитьКлассОшибки(КраткоеПредставлениеОшибки, КлассОшибки); + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки,, "Объект.ПарольДляСинхронизацииДанных",, Отказ); + + КонецЕсли; + + ЗаписатьОшибкуВЖурналРегистрации( + ПодробноеПредставлениеОшибки, СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста + ); + Возврат; + КонецПопытки; + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ОписаниеОграниченийПередачиДанных(Знач ИмяПланаОбмена, НастройкаОтборовНаУзле) + + Возврат ПланыОбмена[ИмяПланаОбмена].ОписаниеОграниченийПередачиДанных(НастройкаОтборовНаУзле); + +КонецФункции + +&НаКлиенте +Функция АдресПриложенияВИнтернете() + + ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПолучитьПараметрыИзСтроки(СтрокаСоединенияИнформационнойБазы()); + + Если Не ПараметрыСоединения.Свойство("ws") Тогда + ВызватьИсключение НСтр("ru = 'Создать автономное рабочее место можно только в режиме веб-клиента.'"); + КонецЕсли; + + Возврат ПараметрыСоединения.ws; +КонецФункции + +&НаКлиенте +Процедура ПерейтиДалее() + + ИзменитьПорядковыйНомерПерехода(+1); + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиНазад() + + ИзменитьПорядковыйНомерПерехода(-1); + +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ЗаписатьОшибкуВЖурналРегистрации(СтрокаСообщенияОбОшибке, Событие) + + ЗаписьЖурналаРегистрации(Событие, УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщенияОбОшибке); + +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Переопределяемая часть - Обработчики событий переходов + +&НаКлиенте +Функция Подключаемый_НастройкаВыгрузки_ПриПереходеДалее(Отказ) + + Если ПустаяСтрока(Объект.НаименованиеАвтономногоРабочегоМеста) Тогда + + НСтрока = НСтр("ru = 'Не задано наименование автономного рабочего места.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Объект.НаименованиеАвтономногоРабочегоМеста",, Отказ); + + КонецЕсли; + + Если ПустаяСтрока(Объект.ПарольДляСинхронизацииДанных) Тогда + + НСтрока = НСтр("ru = 'Не задан пароль для синхронизации данных.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,,"Объект.ПарольДляСинхронизацииДанных",, Отказ); + + ИначеЕсли Объект.ПарольДляСинхронизацииДанных <> ПодтверждениеПароля Тогда + + НСтрока = НСтр("ru = 'Пароль и подтверждение пароля не совпадают.'"); + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтрока,, "ПодтверждениеПароля",, Отказ); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ОжиданиеСозданияНачальногоОбраза_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + ДлительнаяОперация = Ложь; + ДлительнаяОперацияЗавершена = Ложь; + ИдентификаторЗадания = Неопределено; + + СоздатьНачальныйОбразАвтономногоРабочегоМестаНаСервере(Отказ); + + Если Отказ Тогда + + // + + ИначеЕсли Не ДлительнаяОперация Тогда + + Оповестить("Создание_АвтономноеРабочееМесто"); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ОжиданиеСозданияНачальногоОбразаДлительнаяОперация_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперация Тогда + + ПерейтиДалее = Ложь; + + ПодключитьОбработчикОжидания("ОбработчикОжиданияДлительнойОперации", 5, Истина); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_ОжиданиеСозданияНачальногоОбразаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) + + Если ДлительнаяОперацияЗавершена Тогда + + ИнформацияОПакетеУстановки = ПолучитьИзВременногоХранилища(АдресВременногоХранилищаИнформацииОПакетеУстановки); + РазмерФайлаПакетаУстановки = ИнформацияОПакетеУстановки.РазмерФайлаПакетаУстановки; + + Оповестить("Создание_АвтономноеРабочееМесто"); + + КонецЕсли; + +КонецФункции + +&НаКлиенте +Функция Подключаемый_Окончание_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее) + + ЗаголовокЭлемента = "[ИмяФайлаПакетаУстановки] ([РазмерФайлаПакетаУстановки] [ЕдиницаИзмерения])"; + ЗаголовокЭлемента = СтрЗаменить(ЗаголовокЭлемента, "[ИмяФайлаПакетаУстановки]", ИмяФайлаПакетаУстановки); + ЗаголовокЭлемента = СтрЗаменить(ЗаголовокЭлемента, "[РазмерФайлаПакетаУстановки]", Формат(РазмерФайлаПакетаУстановки, "ЧДЦ=1; ЧГ=3,0")); + ЗаголовокЭлемента = СтрЗаменить(ЗаголовокЭлемента, "[ЕдиницаИзмерения]", НСтр("ru = 'Мб'")); + + Элементы.ЗагрузитьНачальныйОбразНаКомпьютерПользователя.Заголовок = ЗаголовокЭлемента; + +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Переопределяемая часть - Инициализация переходов помощника + +&НаСервере +Процедура СценарийСозданияАвтономногоРабочегоМеста() + + ТаблицаПереходов.Очистить(); + + ТаблицаПереходовНоваяСтрока(1, "Начало", "СтраницаНавигацииНачало"); + ТаблицаПереходовНоваяСтрока(2, "НастройкаВыгрузки", "СтраницаНавигацииПродолжение",,, "НастройкаВыгрузки_ПриПереходеДалее"); + ТаблицаПереходовНоваяСтрока(3, "ОжиданиеСозданияНачальногоОбраза", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСозданияНачальногоОбраза_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(4, "ОжиданиеСозданияНачальногоОбраза", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСозданияНачальногоОбразаДлительнаяОперация_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(5, "ОжиданиеСозданияНачальногоОбраза", "СтраницаНавигацииОжидание",,,,, Истина, "ОжиданиеСозданияНачальногоОбразаДлительнаяОперацияОкончание_ОбработкаДлительнойОперации"); + ТаблицаПереходовНоваяСтрока(6, "Окончание", "СтраницаНавигацииОкончание",, "Окончание_ПриОткрытии"); + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ManagerModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ManagerModule.bsl new file mode 100644 index 000000000..ba1661d93 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ManagerModule.bsl @@ -0,0 +1,16 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если АвтономнаяРаботаСлужебный.ЭтоАвтономноеРабочееМесто() Тогда + + СтандартнаяОбработка = Ложь; + + ВыбраннаяФорма = "НастройкаНаСторонеАвтономногоРабочегоМеста"; + + КонецЕсли; + +КонецПроцедуры + +#КонецЕсли \ 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..4a72524b6 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ObjectModule.bsl @@ -0,0 +1,362 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +Процедура СоздатьНачальныйОбразАвтономногоРабочегоМеста(Настройки, + Знач АдресВременногоХранилищаНачальногоОбраза, + Знач АдресВременногоХранилищаИнформацииОПакетеУстановки + ) Экспорт + + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); + + НачатьТранзакцию(); + Попытка + + // Создаем служебного пользователя для выполнения синхронизации данных + ИмяПользователя = ""; + Попытка + Пользователь = СоздатьСлужебногоПользователяДляСинхронизацииДанных(ИмяПользователя); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение АвтономнаяРаботаСлужебный.ДобавитьКлассОшибки( + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), + АвтономнаяРаботаСлужебный.КлассОшибкиСозданиеСлужебногоПользователя() + ); + КонецПопытки; + + // Формируем префикс для нового автономного рабочего места + Блокировка = Новый БлокировкаДанных; + ЭлементБлокировки = Блокировка.Добавить("Константа.ПрефиксПоследнегоАвтономногоРабочегоМеста"); + ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; + Блокировка.Заблокировать(); + + ПоследнийПрефикс = Константы.ПрефиксПоследнегоАвтономногоРабочегоМеста.Получить(); + ПрефиксАвтономногоРабочегоМеста = АвтономнаяРаботаСлужебный.СформироватьПрефиксАвтономногоРабочегоМеста(ПоследнийПрефикс); + + Константы.ПрефиксПоследнегоАвтономногоРабочегоМеста.Установить(ПрефиксАвтономногоРабочегоМеста); + + // Создаем узел автономного рабочего места + АвтономноеРабочееМесто = СоздатьНовоеАвтономноеРабочееМесто(Настройки); + + ДатаСозданияНачальногоОбраза = ТекущаяДатаСеанса(); + + // Выгружаем параметры настройки в начальный образ автономного рабочего места + ВыгрузитьПараметрыВНачальныйОбраз(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто, ИмяПользователя); + + // Устанавливаем дату создания начального образа, как дату первой успешной синхронизации данных. + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", АвтономноеРабочееМесто); + СтруктураЗаписи.Вставить("ДействиеПриОбмене", Перечисления.ДействияПриОбмене.ВыгрузкаДанных); + СтруктураЗаписи.Вставить("ДатаОкончания", ДатаСозданияНачальногоОбраза); + РегистрыСведений.СостоянияУспешныхОбменовДанными.ДобавитьЗапись(СтруктураЗаписи); + + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", АвтономноеРабочееМесто); + СтруктураЗаписи.Вставить("ДействиеПриОбмене", Перечисления.ДействияПриОбмене.ЗагрузкаДанных); + СтруктураЗаписи.Вставить("ДатаОкончания", ДатаСозданияНачальногоОбраза); + РегистрыСведений.СостоянияУспешныхОбменовДанными.ДобавитьЗапись(СтруктураЗаписи); + + // Добавляем связь автономного рабочего места со служебным пользователем + СтруктураЗаписи = Новый Структура; + СтруктураЗаписи.Вставить("УзелИнформационнойБазы", АвтономноеРабочееМесто); + СтруктураЗаписи.Вставить("ПользовательДляСинхронизацииДанных", Пользователь); + РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.ДобавитьЗапись(СтруктураЗаписи); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + ВызватьИсключение; + КонецПопытки; + + КаталогНачальногоОбраза = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогВременныхФайлов(), + ИмяВременногоКаталогаНачальногоОбраза() + ); + + КаталогУстановки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогНачальногоОбраза, + "1" + ); + + КаталогАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогУстановки, + "InfoBase" + ); + + ИмяФайлаДанныхНачальногоОбраза = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогАрхива, + "data.xml" + ); + + СоздатьКаталог(КаталогАрхива); + + // Создаем начальный образ автономного рабочего места + СтрокаСоединения = "File = ""&КаталогИнформационнойБазы"""; + СтрокаСоединения = СтрЗаменить(СтрокаСоединения, "&КаталогИнформационнойБазы", СокрЛП(КаталогНачальногоОбраза)); + + ВыгруженныеДанные = Новый ЗаписьXML; + ВыгруженныеДанные.ОткрытьФайл(ИмяФайлаДанныхНачальногоОбраза); + ВыгруженныеДанные.ЗаписатьОбъявлениеXML(); + ВыгруженныеДанные.ЗаписатьНачалоЭлемента("Data"); + ВыгруженныеДанные.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema"); + ВыгруженныеДанные.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + ВыгруженныеДанные.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); + + АвтономноеРабочееМестоОбъект = АвтономноеРабочееМесто.ПолучитьОбъект(); + АвтономноеРабочееМестоОбъект.ДополнительныеСвойства.Вставить("ВыгруженныеДанные", ВыгруженныеДанные); + АвтономноеРабочееМестоОбъект.ДополнительныеСвойства.Вставить("РазмещатьФайлыВНачальномОбразе"); + + Попытка + ПланыОбмена.СоздатьНачальныйОбраз(АвтономноеРабочееМестоОбъект, СтрокаСоединения); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), + УровеньЖурналаРегистрации.Ошибка,,, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + + // Хранить настройки для автономного рабочего места в ИБ небезопасно. + Константы.НастройкиПодчиненногоУзлаРИБ.Установить(""); + ВыгруженныеДанные = Неопределено; + + Попытка + УдалитьФайлы(КаталогНачальногоОбраза); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + + // Удаляем автономное рабочее место + АвтономнаяРаботаСлужебный.УдалитьАвтономноеРабочееМесто(Новый Структура("АвтономноеРабочееМесто", АвтономноеРабочееМесто), ""); + + ВызватьИсключение; + КонецПопытки; + + ВыгруженныеДанные.ЗаписатьКонецЭлемента(); // Data + ВыгруженныеДанные.Закрыть(); + + ИмяФайлаНачальногоОбраза = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогНачальногоОбраза, "1Cv8.1CD" + ); + + ИмяФайлаНачальногоОбразаВКаталогеАрхива = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогАрхива, "1Cv8.1CD" + ); + + ИмяФайлаПакетаУстановки = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогНачальногоОбраза, АвтономнаяРаботаСлужебный.ИмяФайлаПакетаУстановки() + ); + + ИмяФайлаИнструкции = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла( + КаталогАрхива, "ReadMe.html" + ); + + ТекстИнструкции = АвтономнаяРаботаСлужебный.ТекстИнструкцииИзМакета("ИнструкцияПоНастройкеАвтономногоРабочегоМеста"); + + Текст = Новый ЗаписьТекста(ИмяФайлаИнструкции); + Текст.Записать(ТекстИнструкции); + Текст.Закрыть(); + + ПереместитьФайл(ИмяФайлаНачальногоОбраза, ИмяФайлаНачальногоОбразаВКаталогеАрхива); + + Архиватор = Новый ЗаписьZipФайла(ИмяФайлаПакетаУстановки,,,, УровеньСжатияZIP.Максимальный); + Архиватор.Добавить(ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогУстановки, "*.*"), + РежимСохраненияПутейZIP.СохранятьОтносительныеПути, + РежимОбработкиПодкаталоговZIP.ОбрабатыватьРекурсивно + ); + Архиватор.Записать(); + + ДанныеПакетаУстановки = Новый ДвоичныеДанные(ИмяФайлаПакетаУстановки); + + РазмерФайлаПакетаУстановки = Окр(ДанныеПакетаУстановки.Размер() / 1024 / 1024, 1); // размер пакета в Мб, например, 155.2 Мб + + ИнформацияОПакетеУстановки = Новый Структура; + ИнформацияОПакетеУстановки.Вставить("РазмерФайлаПакетаУстановки", РазмерФайлаПакетаУстановки); + + ПоместитьВоВременноеХранилище(ДанныеПакетаУстановки, АдресВременногоХранилищаНачальногоОбраза); + + ПоместитьВоВременноеХранилище(ИнформацияОПакетеУстановки, АдресВременногоХранилищаИнформацииОПакетеУстановки); + + Попытка + УдалитьФайлы(КаталогНачальногоОбраза); + Исключение + ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Ошибка,,, + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + КонецПопытки; + + // Хранить настройки для автономного рабочего места в ИБ небезопасно. + Константы.НастройкиПодчиненногоУзлаРИБ.Установить(""); + +КонецПроцедуры + +// + +Процедура ВыгрузитьПараметрыВНачальныйОбраз(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто, ИмяПользователя) + + Константы.НастройкиПодчиненногоУзлаРИБ.Установить(ВыгрузитьПараметрыВСтрокуXML(ПрефиксАвтономногоРабочегоМеста, ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто, ИмяПользователя)); + +КонецПроцедуры + +Функция СоздатьНовоеАвтономноеРабочееМесто(Настройки) + + // Обновляем узел приложения в сервисе при необходимости + Если ПустаяСтрока(ОбщегоНазначения.ПолучитьЗначениеРеквизита(АвтономнаяРаботаСлужебный.ПриложениеВСервисе(), "Код")) Тогда + + ПриложениеВСервисеОбъект = СоздатьПриложениеВСервисе(); + ПриложениеВСервисеОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + ПриложениеВСервисеОбъект.Записать(); + + КонецЕсли; + + // Создаем узел автономного рабочего места + АвтономноеРабочееМестоОбъект = СоздатьАвтономноеРабочееМесто(); + АвтономноеРабочееМестоОбъект.Наименование = НаименованиеАвтономногоРабочегоМеста; + АвтономноеРабочееМестоОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); + + // Устанавливаем значения отборов на узле + ОбменДаннымиСобытия.УстановитьЗначенияОтборовНаУзле(АвтономноеРабочееМестоОбъект, Настройки); + + АвтономноеРабочееМестоОбъект.Записать(); + + Возврат АвтономноеРабочееМестоОбъект.Ссылка; +КонецФункции + +Функция СоздатьСлужебногоПользователяДляСинхронизацииДанных(ИмяПользователя) + + ИмяПользователя = НСтр("ru = '(АР) [НаименованиеАвтономногоРабочегоМеста]'"); + ИмяПользователя = СтрЗаменить(ИмяПользователя, "[НаименованиеАвтономногоРабочегоМеста]", НаименованиеАвтономногоРабочегоМеста); + ИмяПользователя = АвтономнаяРаботаСлужебный.ЗаменитьНедопустимыеСимволыВИмениПользователя(ИмяПользователя); + + Роли = Новый Массив; + Роли.Добавить("ВыполнениеОбменовДанными"); + Роли.Добавить("УдаленныйДоступБазоваяФункциональность"); + + ОписаниеПользователяИБ = Новый Структура; + ОписаниеПользователяИБ.Вставить("Действие", "Записать"); + ОписаниеПользователяИБ.Вставить("Имя", Лев(ИмяПользователя, 64)); + ОписаниеПользователяИБ.Вставить("ПолноеИмя", ИмяПользователя); + ОписаниеПользователяИБ.Вставить("Роли", Роли); + ОписаниеПользователяИБ.Вставить("Пароль", ПарольДляСинхронизацииДанных); + ОписаниеПользователяИБ.Вставить("АутентификацияСтандартная", Истина); + ОписаниеПользователяИБ.Вставить("ПоказыватьВСпискеВыбора", Ложь); + + Пользователь = Справочники.Пользователи.СоздатьЭлемент(); + Пользователь.Наименование = ИмяПользователя; + Пользователь.Служебный = Истина; + Пользователь.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); + Пользователь.Записать(); + + Возврат Пользователь.Ссылка; +КонецФункции + +Функция ВыгрузитьПараметрыВСтрокуXML(ПрефиксАвтономногоРабочегоМеста, Знач ДатаСозданияНачальногоОбраза, АвтономноеРабочееМесто, Знач ИмяПользователя) + + ПараметрыАвтономногоРабочегоМеста = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(АвтономноеРабочееМесто, "Код, Наименование"); + ПараметрыПриложенияВСервисе = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(АвтономнаяРаботаСлужебный.ПриложениеВСервисе(), "Код, Наименование"); + ПараметрыВладельца = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Пользователи.АвторизованныйПользователь(), "Наименование"); + + ЗаписьXML = Новый ЗаписьXML; + ЗаписьXML.УстановитьСтроку("UTF-8"); + ЗаписьXML.ЗаписатьОбъявлениеXML(); + + ЗаписьXML.ЗаписатьНачалоЭлемента("Параметры"); + ЗаписьXML.ЗаписатьАтрибут("ВерсияФормата", ВерсияФорматаФайлаНастроекОбменаДанными()); + + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance"); + ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("v8", "http://v8.1c.ru/data"); + + ЗаписьXML.ЗаписатьНачалоЭлемента("ПараметрыАвтономногоРабочегоМеста"); + + ЗаписатьXML(ЗаписьXML, ДатаСозданияНачальногоОбраза, "ДатаСозданияНачальногоОбраза", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, ПрефиксАвтономногоРабочегоМеста, "Префикс", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, ЗаголовокСистемы(), "ЗаголовокСистемы", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, WSURLВебСервиса, "URL", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, ИмяПользователя, "ИмяПользователя", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, ПараметрыВладельца.Наименование, "ИмяВладельца", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, Строка(Пользователи.АвторизованныйПользователь().УникальныйИдентификатор()), "Владелец", НазначениеТипаXML.Явное); + + ЗаписатьXML(ЗаписьXML, ПараметрыАвтономногоРабочегоМеста.Код, "КодАвтономногоРабочегоМеста", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, ПараметрыАвтономногоРабочегоМеста.Наименование, "НаименованиеАвтономногоРабочегоМеста", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, ПараметрыПриложенияВСервисе.Код, "КодПриложенияВСервисе", НазначениеТипаXML.Явное); + ЗаписатьXML(ЗаписьXML, ПараметрыПриложенияВСервисе.Наименование, "НаименованиеПриложенияВСервисе", НазначениеТипаXML.Явное); + + ЗаписьXML.ЗаписатьКонецЭлемента(); // ПараметрыАвтономногоРабочегоМеста + ЗаписьXML.ЗаписатьКонецЭлемента(); // Параметры + + Возврат ЗаписьXML.Закрыть(); +КонецФункции + +Функция ВерсияФорматаФайлаНастроекОбменаДанными() + + Возврат "1.0"; + +КонецФункции + +Функция СобытиеЖурналаРегистрации() + + Возврат АвтономнаяРаботаСлужебный.СобытиеЖурналаРегистрацииСозданиеАвтономногоРабочегоМеста(); + +КонецФункции + +Функция ИмяВременногоКаталогаНачальногоОбраза() + + Возврат СтрЗаменить("Replica {GUID}", "GUID", Строка(Новый УникальныйИдентификатор)); + +КонецФункции + +Функция СоздатьПриложениеВСервисе() + + Результат = ПланыОбмена[АвтономнаяРаботаСлужебный.ПланОбменаАвтономнойРаботы()].ЭтотУзел().ПолучитьОбъект(); + Результат.Код = Строка(Новый УникальныйИдентификатор); + Результат.Наименование = СформироватьНаименованиеПриложенияВСервисе(); + + Возврат Результат; +КонецФункции + +Функция СоздатьАвтономноеРабочееМесто() + + Результат = ПланыОбмена[АвтономнаяРаботаСлужебный.ПланОбменаАвтономнойРаботы()].СоздатьУзел(); + Результат.Код = Строка(Новый УникальныйИдентификатор); + + Возврат Результат; +КонецФункции + +Функция СформироватьНаименованиеПриложенияВСервисе() + + НаименованиеПриложения = ОбменДаннымиВМоделиСервиса.СформироватьНаименованиеПредопределенногоУзла(); + + Результат = "[НаименованиеПриложения] ([Пояснение])"; + Результат = СтрЗаменить(Результат, "[НаименованиеПриложения]", НаименованиеПриложения); + Результат = СтрЗаменить(Результат, "[Пояснение]", НСтр("ru = 'приложение в Интернете'")); + + Возврат Результат; +КонецФункции + +Функция ЗаголовокСистемы() + + Результат = ""; + + Параметры = Новый Структура; + СтандартныеПодсистемыСервер.ДобавитьПараметрыРаботыКлиента(Параметры); + + Результат = Параметры.ЗаголовокПриложения; + + Если ПустаяСтрока(Результат) Тогда + + Если Параметры.Свойство("ПредставлениеОбластиДанных") Тогда + + Результат = Параметры.ПредставлениеОбластиДанных; + + КонецЕсли; + + КонецЕсли; + + Возврат ?(ПустаяСтрока(Результат), НСтр("ru = 'Автономное рабочее место'"), Результат); +КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/Template.htmldoc b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/Template.htmldoc new file mode 100644 index 000000000..1621f1d23 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/Template.htmldoc @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html new file mode 100644 index 000000000..e3bf40728 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/ИнструкцияПоНастройкеАвтономногоРабочегоМеста/ru.html @@ -0,0 +1,39 @@ + +

            Настройка автономного рабочего места на компьютере

            +

            +

            +

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

            +
            1. Создайте новую папку, в которой на Вашем компьютере будет размещаться информационная база автономного рабочего места. Например, в папке "Мои документы". +
            2. Откройте загруженный файл Автономная работа.zip и скопируйте (извлеките) все файлы из него в эту папку. +
            3. Запустите 1С:Предприятие и в открывшемся окне "Запуск 1С:Предприятия" нажмите на кнопку "Добавить..." +
            4. Укажите вариант "Добавление в список существующей информационной базы" и нажмите "Далее". +
            5. На следующей странице помощника укажите вариант "На данном компьютере или на компьютере в локальной сети" и введите название информационной базы. Рекомендуется указывать такое же имя, как и название автономного рабочего места. +
            6. На следующей странице укажите папку с информационной базой, созданную на шаге 1, и затем на финальной странице помощника нажмите "Готово". +
            7. Запустите программу, воспользовавшись кнопкой "1С:Предприятие" (в правом верхнем углу окна "Запуск 1С:Предприятия").
              В окне доступа к информационной базе в поле "Пользователь" выберите из списка пользователя, от имени которого было создано автономное рабочее место. Поле "Пароль" оставьте пустым.

             

            +

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

            +
            +

             

            +

            1. Как установить или обновить версию платформы 1С:Предприятие?

            +

            Для автономной работы без подключения к сети Интернет необходимо предварительно приобрести и установить локально на компьютере программу [НазваниеПрограммы]. Программы системы 1С:Предприятие распространяются через сеть партнерских организаций во всех регионах России, странах СНГ и Балтии.

            +

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

            +

            См. также

            +

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

            +

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

            +

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

            +

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

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/Template.htmldoc b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/Template.htmldoc new file mode 100644 index 000000000..1621f1d23 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/Template.htmldoc @@ -0,0 +1,4 @@ + + + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html new file mode 100644 index 000000000..6fd97e522 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/Templates/КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие/ru.html @@ -0,0 +1,21 @@ + +

            Для автономной работы без подключения к сети Интернет необходимо приобрести и установить локально на компьютере программу [НазваниеПрограммы]. Программы системы 1С:Предприятие распространяются через сеть партнерских организаций во всех регионах России, странах СНГ и Балтии.

            +

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

            +

            См. также

            + \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ПомощникСозданияАвтономногоРабочегоМеста.mdo b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ПомощникСозданияАвтономногоРабочегоМеста.mdo new file mode 100644 index 000000000..7ebbefaf3 --- /dev/null +++ b/SSL/src/DataProcessors/ПомощникСозданияАвтономногоРабочегоМеста/ПомощникСозданияАвтономногоРабочегоМеста.mdo @@ -0,0 +1,102 @@ + + + + + + + ПомощникСозданияАвтономногоРабочегоМеста + + ru + Помощник создания автономного рабочего места + + true + DataProcessor.ПомощникСозданияАвтономногоРабочегоМеста.Form.НастройкаНаСторонеСервиса + + WSURLВебСервиса + + ru + Адрес + + + String + + + + + + + НаименованиеАвтономногоРабочегоМеста + + ru + Наименование автономного рабочего места + + + String + + 150 + + + + + + + ПарольДляСинхронизацииДанных + + ru + Пароль для синхронизации данных + + + String + + 50 + + + true + + + ShowError + + + НастройкаНаСторонеСервиса + + ru + Настройка на стороне сервиса + + PersonalComputer + MobileDevice + + + НастройкаНаСторонеАвтономногоРабочегоМеста + + ru + Настройка на стороне автономного рабочего места + + PersonalComputer + MobileDevice + + + ДополнительноеОписание + + ru + Дополнительное описание + + PersonalComputer + MobileDevice + + + ИнструкцияПоНастройкеАвтономногоРабочегоМеста + + ru + Инструкция по настройке автономного рабочего места + + HTMLDocument + + + КакУстановитьИлиОбновитьВерсиюПлатформы1СПредприятие + + ru + Как установить или обновить версию платформы 1С:Предприятие + + HTMLDocument + + diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Form.form index 52d608fe1..f15968395 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Form.form @@ -89,7 +89,7 @@ Retry SaveValues Yes - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl index 4b0ce4013..12ba1dee3 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/ДополнительноеОписание/Module.bsl @@ -13,6 +13,13 @@ ПолеHTMLДокумента = Макет.ПолучитьТекст(); + Если ВРег(Параметры.ИмяМакета) = ВРег("КакОпределитьПараметрыПодключенияКСервису") + ИЛИ ВРег(Параметры.ИмяМакета) = ВРег("КакОпределитьПараметрыПодключенияКВебСервису") Тогда + + ПолеHTMLДокумента = СтрЗаменить(ПолеHTMLДокумента, "[НедопустимыеСимволы]", ОбменДаннымиКлиентСервер.НедопустимыеСимволыВИмениПользователяWSПрокси()); + + КонецЕсли; + Заголовок = Параметры.Заголовок; КонецПроцедуры diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form index 39a67a853..c6a1977e8 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/УзнатьПрефиксЭтойИнформационнойБазы/Form.form @@ -226,7 +226,7 @@ Retry SaveValues Yes - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form index 975b039cf..c2045b8bf 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Form.form @@ -24,7 +24,7 @@ ЗаголовокСтраницыМастера1РасширеннаяПодсказка - 1795 + 1799 Label true true @@ -71,7 +71,7 @@ Декорация6РасширеннаяПодсказка - 1796 + 1800 Label true true @@ -116,7 +116,7 @@ ВариантРаботыМастераРасширеннаяПодсказка - 1798 + 1802 Label true true @@ -174,7 +174,7 @@ false ГруппаПереключателяВыбораРежимаРаботыПомощникаРасширеннаяПодсказка - 1797 + 1801 Label true true @@ -214,7 +214,7 @@ Декорация11РасширеннаяПодсказка - 1802 + 1806 Label true true @@ -265,7 +265,7 @@ ИмяФайлаНастроекОбменаДаннымиДляЗагрузкиРасширеннаяПодсказка - 1804 + 1808 Label true true @@ -307,7 +307,7 @@ Группа20РасширеннаяПодсказка - 1803 + 1807 Label true true @@ -334,7 +334,7 @@ УтерянФайлСНастройкамиОбменаДаннымиРасширеннаяПодсказка - 1806 + 1810 Label true true @@ -366,7 +366,7 @@ СтраницаВыбораФайлаСНастройкамиОбменаРасширеннаяПодсказка - 1801 + 1805 Label true true @@ -393,7 +393,7 @@ ПустаяКартинкаРасширеннаяПодсказка - 1808 + 1812 Label true true @@ -427,7 +427,7 @@ СтраницаВыбораФайлаСНастройкамиОбменаПустаяРасширеннаяПодсказка - 1807 + 1811 Label true true @@ -456,7 +456,7 @@ СтраницыВыбораФайлаСНастройкамиОбменаРасширеннаяПодсказка - 1800 + 1804 Label true true @@ -492,7 +492,7 @@ КартинкаПервойИнформационнойБазыРасширеннаяПодсказка - 1812 + 1816 Label true true @@ -528,7 +528,7 @@ СтраницаПервойИнформационнойБазыАктивнаяРасширеннаяПодсказка - 1811 + 1815 Label true true @@ -559,7 +559,7 @@ КартинкаПервойИнформационнойБазы1РасширеннаяПодсказка - 1814 + 1818 Label true true @@ -600,7 +600,7 @@ СтраницаПервойИнформационнойБазыНеактивнаяРасширеннаяПодсказка - 1813 + 1817 Label true true @@ -629,7 +629,7 @@ СтраницыПервойИнформационнойБазыРасширеннаяПодсказка - 1810 + 1814 Label true true @@ -655,7 +655,7 @@ Декорация2РасширеннаяПодсказка - 1816 + 1820 Label true true @@ -694,7 +694,7 @@ КартинкаФайлаНастроекРасширеннаяПодсказка - 1817 + 1821 Label true true @@ -733,7 +733,7 @@ КартинкаФайлаСообщенияОбменаРасширеннаяПодсказка - 1818 + 1822 Label true true @@ -769,7 +769,7 @@ КартинкиФайловНастроекИСообщенияОбменаРасширеннаяПодсказка - 1815 + 1819 Label true true @@ -807,7 +807,7 @@ КартинкаВторойИнформационнойБазыРасширеннаяПодсказка - 1821 + 1825 Label true true @@ -843,7 +843,7 @@ СтраницаВторойИнформационнойБазыАктивнаяРасширеннаяПодсказка - 1820 + 1824 Label true true @@ -874,7 +874,7 @@ КартинкаВторойИнформационнойБазы1РасширеннаяПодсказка - 1823 + 1827 Label true true @@ -915,7 +915,7 @@ СтраницаВторойИнформационнойБазыНеактивнаяРасширеннаяПодсказка - 1822 + 1826 Label true true @@ -944,7 +944,7 @@ СтраницыВторойИнформационнойБазыРасширеннаяПодсказка - 1819 + 1823 Label true true @@ -972,7 +972,7 @@ КомпозицияКартинокПервойСтраницыПомощникаРасширеннаяПодсказка - 1809 + 1813 Label true true @@ -999,7 +999,7 @@ Декорация1РасширеннаяПодсказка - 1824 + 1828 Label true true @@ -1030,7 +1030,7 @@ УзнатьПрефиксЭтойИнформационнойБазыРасширеннаяПодсказка - 1825 + 1829 Label true true @@ -1061,7 +1061,7 @@ НадписьДалееВариантРаботыМастераРасширеннаяПодсказка - 1826 + 1830 Label true true @@ -1097,7 +1097,7 @@ СтраницаМастераНачалоРасширеннаяПодсказка - 1794 + 1798 Label true true @@ -1128,7 +1128,7 @@ ЗаголовокСтраницыМастера3РасширеннаяПодсказка - 1828 + 1832 Label true true @@ -1171,7 +1171,7 @@ КартинкаНастройкаОбменаССервисомРасширеннаяПодсказка - 1829 + 1833 Label true true @@ -1213,7 +1213,7 @@ WSURLВебСервиса1РасширеннаяПодсказка - 1831 + 1835 Label true true @@ -1263,7 +1263,7 @@ WSИмяПользователя1РасширеннаяПодсказка - 1834 + 1838 Label true true @@ -1311,7 +1311,7 @@ WSПароль1РасширеннаяПодсказка - 1836 + 1840 Label true true @@ -1343,6 +1343,40 @@ Normal

            Дополнительная информация

            + + WSЗапомнитьПароль + 1793 + true + true + + true + + + Объект.WSЗапомнитьПароль + + Right + + WSЗапомнитьПарольРасширеннаяПодсказка + 1842 + Label + true + true + + Left + + + + WSЗапомнитьПарольКонтекстноеМеню + 1794 + true + + CheckBoxField + Enter + true + Left + true + + true true @@ -1351,7 +1385,7 @@ false Группа3РасширеннаяПодсказка - 1833 + 1837 Label true true @@ -1380,7 +1414,7 @@ КакОпределитьПараметрыПодключенияКСервисуРасширеннаяПодсказка - 1838 + 1844 Label true true @@ -1410,7 +1444,7 @@ false ПараметрыТранспортаПодключенияКСервисуРасширеннаяПодсказка - 1830 + 1834 Label true true @@ -1440,7 +1474,7 @@ Декорация15РасширеннаяПодсказка - 1839 + 1845 Label true true @@ -1476,7 +1510,7 @@ НадписьДалееСтраницаМастераНачалоНастройкиОбменаССервисомРасширеннаяПодсказка - 1840 + 1846 Label true true @@ -1508,7 +1542,7 @@ СтраницаМастераНачалоНастройкиОбменаССервисомРасширеннаяПодсказка - 1827 + 1831 Label true true @@ -1539,7 +1573,7 @@ ЗаголовокСтраницыМастера14РасширеннаяПодсказка - 1842 + 1848 Label true true @@ -1590,7 +1624,7 @@ Top НаименованиеЭтойБазы3РасширеннаяПодсказка - 1843 + 1849 Label true true @@ -1636,7 +1670,7 @@ ПрефиксИнформационнойБазыИсточникаОбменССервисомРасширеннаяПодсказка - 1845 + 1851 Label true true @@ -1685,7 +1719,7 @@ Top НаименованиеВторойБазы1РасширеннаяПодсказка - 1848 + 1854 Label true true @@ -1731,7 +1765,7 @@ ПрефиксИнформационнойБазыПриемникаОбменССервисомРасширеннаяПодсказка - 1850 + 1856 Label true true @@ -1767,7 +1801,7 @@ Группа9РасширеннаяПодсказка - 1847 + 1853 Label true true @@ -1806,7 +1840,7 @@ Декорация3РасширеннаяПодсказка - 1854 + 1860 Label true true @@ -1836,7 +1870,7 @@ ВыполнитьНастройкуВыгрузкиДанныхРасширеннаяПодсказка - 1855 + 1861 Label true true @@ -1860,7 +1894,7 @@ Группа8РасширеннаяПодсказка - 1853 + 1859 Label true true @@ -1891,7 +1925,7 @@ None ОписаниеНастроекВыгрузкиДанныхРасширеннаяПодсказка - 1856 + 1862 Label true true @@ -1928,7 +1962,7 @@ Группа7РасширеннаяПодсказка - 1852 + 1858 Label true true @@ -1961,7 +1995,7 @@ НадписьДалееПодтверждениеНастроек6РасширеннаяПодсказка - 1858 + 1864 Label true true @@ -1999,7 +2033,7 @@ СтраницаМастераНастройкаПараметровОбменаДаннымиРасширеннаяПодсказка - 1841 + 1847 Label true true @@ -2030,7 +2064,7 @@ ЗаголовокСтраницыМастера16РасширеннаяПодсказка - 1860 + 1866 Label true true @@ -2081,7 +2115,7 @@ Top НаименованиеЭтойБазы5РасширеннаяПодсказка - 1861 + 1867 Label true true @@ -2128,7 +2162,7 @@ ПрефиксИнформационнойБазыИсточникаОбменЧерезВебСервисРасширеннаяПодсказка - 1863 + 1869 Label true true @@ -2177,7 +2211,7 @@ Top НаименованиеВторойБазы3РасширеннаяПодсказка - 1866 + 1872 Label true true @@ -2224,7 +2258,7 @@ ПрефиксИнформационнойБазыПриемникаОбменЧерезВебСервисРасширеннаяПодсказка - 1868 + 1874 Label true true @@ -2259,7 +2293,7 @@ Группа14РасширеннаяПодсказка - 1865 + 1871 Label true true @@ -2298,7 +2332,7 @@ Декорация22РасширеннаяПодсказка - 1872 + 1878 Label true true @@ -2328,7 +2362,7 @@ ВыполнитьНастройкуВыгрузкиДанных1РасширеннаяПодсказка - 1873 + 1879 Label true true @@ -2352,7 +2386,7 @@ Группа17РасширеннаяПодсказка - 1871 + 1877 Label true true @@ -2383,7 +2417,7 @@ None ОписаниеНастроекВыгрузкиДанных1РасширеннаяПодсказка - 1874 + 1880 Label true true @@ -2420,7 +2454,7 @@ Группа16РасширеннаяПодсказка - 1870 + 1876 Label true true @@ -2453,7 +2487,7 @@ НадписьДалееПодтверждениеНастроек7РасширеннаяПодсказка - 1876 + 1882 Label true true @@ -2491,7 +2525,7 @@ СтраницаМастераНастройкаПараметровОбменаДаннымиЧерезВебСервисРасширеннаяПодсказка - 1859 + 1865 Label true true @@ -2522,7 +2556,7 @@ ЗаголовокСтраницыМастераРасширеннаяПодсказка - 1878 + 1884 Label true true @@ -2578,7 +2612,7 @@ ПояснениеОНаличииНесопоставленныхОбъектов1РасширеннаяПодсказка - 1881 + 1887 Label true true @@ -2641,7 +2675,7 @@ None ДеревоИнформацииСтатистикиКартинкаРасширеннаяПодсказка - 1895 + 1901 Label true true @@ -2683,7 +2717,7 @@ ДеревоИнформацииСтатистикиСинонимРасширеннаяПодсказка - 1897 + 1903 Label true true @@ -2720,7 +2754,7 @@ true ДеревоИнформацииСтатистикиГруппаРасширеннаяПодсказка - 1894 + 1900 Label true true @@ -2748,7 +2782,7 @@ ДеревоИнформацииСтатистикиПроцентСопоставленияОбъектовРасширеннаяПодсказка - 1899 + 1905 Label true true @@ -2792,7 +2826,7 @@ ДеревоИнформацииСтатистикиВыполнитьСопоставлениеДанныхРасширеннаяПодсказка - 1883 + 1889 Label true true @@ -2816,10 +2850,10 @@ ДеревоИнформацииСтатистикиСтрокаПоиска - 1885 + 1891 ДеревоИнформацииСтатистикиСтрокаПоискаРасширеннаяПодсказка - 1887 + 1893 Label true true @@ -2829,7 +2863,7 @@ ДеревоИнформацииСтатистикиСтрокаПоискаКонтекстноеМеню - 1886 + 1892 true ДеревоИнформацииСтатистики @@ -2839,10 +2873,10 @@ ДеревоИнформацииСтатистикиСостояниеПросмотра - 1888 + 1894 ДеревоИнформацииСтатистикиСостояниеПросмотраРасширеннаяПодсказка - 1890 + 1896 Label true true @@ -2852,7 +2886,7 @@ ДеревоИнформацииСтатистикиСостояниеПросмотраКонтекстноеМеню - 1889 + 1895 true ViewStatusAddition @@ -2863,10 +2897,10 @@ ДеревоИнформацииСтатистикиУправлениеПоиском - 1891 + 1897 ДеревоИнформацииСтатистикиУправлениеПоискомРасширеннаяПодсказка - 1893 + 1899 Label true true @@ -2876,7 +2910,7 @@ ДеревоИнформацииСтатистикиУправлениеПоискомКонтекстноеМеню - 1892 + 1898 true SearchControlAddition @@ -2887,7 +2921,7 @@ ДеревоИнформацииСтатистикиРасширеннаяПодсказка - 1884 + 1890 Label true true @@ -2908,7 +2942,7 @@ ДеревоИнформацииСтатистикиКонтекстноеМенюВыполнитьСопоставлениеДанныхРасширеннаяПодсказка - 1882 + 1888 Label true true @@ -2965,7 +2999,7 @@ СтатусСопоставленияЕстьНесопоставленныеДанныеРасширеннаяПодсказка - 1880 + 1886 Label true true @@ -2995,7 +3029,7 @@ Декорация35РасширеннаяПодсказка - 1911 + 1917 Label true true @@ -3034,7 +3068,7 @@ Декорация36РасширеннаяПодсказка - 1912 + 1918 Label true true @@ -3073,7 +3107,7 @@ ГруппировкаСообщения8РасширеннаяПодсказка - 1910 + 1916 Label true true @@ -3106,7 +3140,7 @@ СтатусСопоставленияВсеДанныеСопоставленыРасширеннаяПодсказка - 1909 + 1915 Label true true @@ -3134,7 +3168,7 @@ СтраницыСтатусаСопоставленияДанныхРасширеннаяПодсказка - 1879 + 1885 Label true true @@ -3161,7 +3195,7 @@ НадписьДалееНаСтраницеСопоставленияДанныхРасширеннаяПодсказка - 1913 + 1919 Label true true @@ -3199,7 +3233,7 @@ СтраницаМастераСопоставлениеДанныхРасширеннаяПодсказка - 1877 + 1883 Label true true @@ -3230,7 +3264,7 @@ ЗаголовокСтраницыМастера15РасширеннаяПодсказка - 1915 + 1921 Label true true @@ -3280,7 +3314,7 @@ КартинкаЧасыРасширеннаяПодсказка - 1917 + 1923 Label true true @@ -3322,7 +3356,7 @@ ВыполнятьОбменДаннымиАвтоматическиРасширеннаяПодсказка - 1919 + 1925 Label true true @@ -3369,7 +3403,7 @@ ПредопределенноеРасписаниеОбменаДаннымиРасширеннаяПодсказка - 1924 + 1930 Label true true @@ -3453,7 +3487,7 @@ ИзменитьПользовательскоеРасписаниеРасширеннаяПодсказка - 1928 + 1934 Label true true @@ -3485,7 +3519,7 @@ None ПредставлениеПользовательскогоОписанияРасширеннаяПодсказка - 1929 + 1935 Label true true @@ -3528,7 +3562,7 @@ СтраницаПользовательскогоРасписанияРасширеннаяПодсказка - 1927 + 1933 Label true true @@ -3555,7 +3589,7 @@ Декорация10РасширеннаяПодсказка - 1932 + 1938 Label true true @@ -3590,7 +3624,7 @@ ПустаяСтраницаПользовательскогоРасписанияРасширеннаяПодсказка - 1931 + 1937 Label true true @@ -3612,7 +3646,7 @@ true СтраницыПользовательскогоРасписанияРасширеннаяПодсказка - 1926 + 1932 Label true true @@ -3632,7 +3666,7 @@ СтраницаПредопределенногоРасписанияРасширеннаяПодсказка - 1923 + 1929 Label true true @@ -3667,7 +3701,7 @@ ПредопределенноеРасписаниеОбменаДанными1РасширеннаяПодсказка - 1934 + 1940 Label true true @@ -3747,7 +3781,7 @@ true НедоступнаяСтраницаПредопределенногоРасписанияРасширеннаяПодсказка - 1933 + 1939 Label true true @@ -3768,7 +3802,7 @@ СтраницыПредопределенногоРасписанияРасширеннаяПодсказка - 1922 + 1928 Label true true @@ -3792,7 +3826,7 @@ ГруппаПредопределенногоРасписанияРасширеннаяПодсказка - 1921 + 1927 Label true true @@ -3826,7 +3860,7 @@ ГруппаРасписания1РасширеннаяПодсказка - 1918 + 1924 Label true true @@ -3855,7 +3889,7 @@ ГруппаРасписанияРасширеннаяПодсказка - 1916 + 1922 Label true true @@ -3883,7 +3917,7 @@ Декорация32РасширеннаяПодсказка - 1936 + 1942 Label true true @@ -3921,7 +3955,7 @@ Right ВключитьРегистрациюВсехСобытийВЖурналеРегистрацииРасширеннаяПодсказка - 1938 + 1944 Label true true @@ -3955,7 +3989,7 @@ Декорация9РасширеннаяПодсказка - 1940 + 1946 Label true true @@ -3993,7 +4027,7 @@ ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрацииРасширеннаяПодсказка - 1937 + 1943 Label true true @@ -4026,7 +4060,7 @@ НадписьГотово12РасширеннаяПодсказка - 1941 + 1947 Label true true @@ -4060,7 +4094,7 @@ СтраницаМастераСозданиеОбменаДаннымиУспешноЗавершеноРасширеннаяПодсказка - 1914 + 1920 Label true true @@ -4091,7 +4125,7 @@ ЗаголовокСтраницыМастера4РасширеннаяПодсказка - 1943 + 1949 Label true true @@ -4144,7 +4178,7 @@ None НаименованиеЭтойБазы4РасширеннаяПодсказка - 1946 + 1952 Label true true @@ -4187,7 +4221,7 @@ Декорация99РасширеннаяПодсказка - 1949 + 1955 Label true true @@ -4224,7 +4258,7 @@ None НастройкиПараметровУчетаПоясняющаяНадписьРасширеннаяПодсказка - 1950 + 1956 Label true true @@ -4268,7 +4302,7 @@ НастройкиПараметровУчетаРасширеннаяПодсказка - 1948 + 1954 Label true true @@ -4305,7 +4339,7 @@ Декорация97РасширеннаяПодсказка - 1954 + 1960 Label true true @@ -4336,7 +4370,7 @@ НастройкаЗначенийПоУмолчанию6РасширеннаяПодсказка - 1955 + 1961 Label true true @@ -4360,7 +4394,7 @@ Группа44РасширеннаяПодсказка - 1953 + 1959 Label true true @@ -4391,7 +4425,7 @@ None ОписаниеЗначенийПоУмолчанию6РасширеннаяПодсказка - 1956 + 1962 Label true true @@ -4433,7 +4467,7 @@ РамкаГруппыЗначенийПоУмолчанию6РасширеннаяПодсказка - 1952 + 1958 Label true true @@ -4470,7 +4504,7 @@ Группа43РасширеннаяПодсказка - 1945 + 1951 Label true true @@ -4506,7 +4540,7 @@ None НаименованиеВторойБазы4РасширеннаяПодсказка - 1959 + 1965 Label true true @@ -4549,7 +4583,7 @@ Декорация98РасширеннаяПодсказка - 1962 + 1968 Label true true @@ -4586,7 +4620,7 @@ None НастройкиПараметровУчетаКорреспондентаПоясняющаяНадписьРасширеннаяПодсказка - 1963 + 1969 Label true true @@ -4630,7 +4664,7 @@ НастройкиПараметровУчетаКорреспондентаРасширеннаяПодсказка - 1961 + 1967 Label true true @@ -4667,7 +4701,7 @@ Декорация100РасширеннаяПодсказка - 1967 + 1973 Label true true @@ -4698,7 +4732,7 @@ НастройкаЗначенийПоУмолчаниюБазыКорреспондентаЧерезВебСервисРасширеннаяПодсказка - 1968 + 1974 Label true true @@ -4722,7 +4756,7 @@ Группа46РасширеннаяПодсказка - 1966 + 1972 Label true true @@ -4753,7 +4787,7 @@ None ОписаниеЗначенийПоУмолчаниюБазыКорреспондентаРасширеннаяПодсказка - 1969 + 1975 Label true true @@ -4791,7 +4825,7 @@ РамкаГруппыЗначенийПоУмолчаниюБазыКорреспондентаРасширеннаяПодсказка - 1965 + 1971 Label true true @@ -4823,7 +4857,7 @@ Группа45РасширеннаяПодсказка - 1958 + 1964 Label true true @@ -4853,7 +4887,7 @@ Группа40РасширеннаяПодсказка - 1944 + 1950 Label true true @@ -4885,7 +4919,7 @@ НадписьДалее3РасширеннаяПодсказка - 1971 + 1977 Label true true @@ -4919,7 +4953,7 @@ СтраницаМастераНастройкиОтраженияДокументовВУчетеРасширеннаяПодсказка - 1942 + 1948 Label true true @@ -4950,7 +4984,7 @@ ЗаголовокСтраницыМастера2РасширеннаяПодсказка - 1973 + 1979 Label true true @@ -5004,7 +5038,7 @@ РежимРаботыМастераРасширеннаяПодсказка - 1975 + 1981 Label true true @@ -5061,7 +5095,7 @@ Группа4РасширеннаяПодсказка - 1974 + 1980 Label true true @@ -5099,7 +5133,7 @@ КартинкаОбменЧерезВнешнееСоединениеРасширеннаяПодсказка - 1979 + 1985 Label true true @@ -5131,7 +5165,7 @@ КартинкаДляОбменаЧерезВнешнееСоединениеРасширеннаяПодсказка - 1978 + 1984 Label true true @@ -5162,7 +5196,7 @@ КартинкаОбменЧерезВебСервисРасширеннаяПодсказка - 1981 + 1987 Label true true @@ -5194,7 +5228,7 @@ КартинкаДляОбменаЧерезВебСервисРасширеннаяПодсказка - 1980 + 1986 Label true true @@ -5225,7 +5259,7 @@ КартинкаОбменЧерезОбычныеКаналыСвязиРасширеннаяПодсказка - 1983 + 1989 Label true true @@ -5261,7 +5295,7 @@ КартинкаДляОбменаЧерезОбычныеКаналыСвязиРасширеннаяПодсказка - 1982 + 1988 Label true true @@ -5286,7 +5320,7 @@ КартинкиВыбораРежимаРаботыПомощникаРасширеннаяПодсказка - 1977 + 1983 Label true true @@ -5330,7 +5364,7 @@ COMВариантРаботыИнформационнойБазыРасширеннаяПодсказка - 1987 + 1993 Label true true @@ -5390,7 +5424,7 @@ COMКаталогИнформационнойБазыРасширеннаяПодсказка - 1991 + 1997 Label true true @@ -5447,7 +5481,7 @@ СтраницаВариантРаботыФайловыйРасширеннаяПодсказка - 1990 + 1996 Label true true @@ -5481,7 +5515,7 @@ COMИмяСервера1СПредприятияРасширеннаяПодсказка - 1994 + 2000 Label true true @@ -5530,7 +5564,7 @@ COMИмяИнформационнойБазыНаСервере1СПредприятияРасширеннаяПодсказка - 1996 + 2002 Label true true @@ -5577,7 +5611,7 @@ СтраницаВариантРаботыКлиентСерверныйРасширеннаяПодсказка - 1993 + 1999 Label true true @@ -5606,7 +5640,7 @@ ВариантыРаботыИнформационнойБазыРасширеннаяПодсказка - 1989 + 1995 Label true true @@ -5629,7 +5663,7 @@ ГиперСсылкаКакОпределитьПараметрыПодключенияРасширеннаяПодсказка - 1998 + 2004 Label true true @@ -5664,7 +5698,7 @@ COMАутентификацияОперационнойСистемыРасширеннаяПодсказка - 1999 + 2005 Label true true @@ -5700,7 +5734,7 @@ COMИмяПользователяРасширеннаяПодсказка - 2002 + 2008 Label true true @@ -5741,7 +5775,7 @@ COMПарольПользователяРасширеннаяПодсказка - 2004 + 2010 Label true true @@ -5786,7 +5820,7 @@ false COMГруппаПользовательПарольРасширеннаяПодсказка - 2001 + 2007 Label true true @@ -5817,7 +5851,7 @@ ПроверитьПодключениеCOMРасширеннаяПодсказка - 2007 + 2013 Label true true @@ -5845,7 +5879,7 @@ ИсправитьОшибкиУстановкиВнешнегоСоединенияРасширеннаяПодсказка - 2008 + 2014 Label true true @@ -5877,7 +5911,7 @@ ГруппаКнопокПроверкиПодключенияCOMРасширеннаяПодсказка - 2006 + 2012 Label true true @@ -5908,7 +5942,7 @@ НадписьДалееРасширеннаяПодсказка - 2009 + 2015 Label true true @@ -5946,7 +5980,7 @@ СтраницаПараметровТранспортаCOMРасширеннаяПодсказка - 1986 + 1992 Label true true @@ -5976,7 +6010,7 @@ WSURLВебСервисаРасширеннаяПодсказка - 2011 + 2017 Label true true @@ -6022,7 +6056,7 @@ WSИмяПользователяРасширеннаяПодсказка - 2014 + 2020 Label true true @@ -6066,7 +6100,7 @@ WSПарольРасширеннаяПодсказка - 2016 + 2022 Label true true @@ -6097,6 +6131,40 @@ Normal
            + + WSЗапомнитьПароль1 + 1795 + true + true + + true + + + Объект.WSЗапомнитьПароль + + Right + + WSЗапомнитьПароль1РасширеннаяПодсказка + 2024 + Label + true + true + + Left + + + + WSЗапомнитьПароль1КонтекстноеМеню + 1796 + true + + CheckBoxField + Enter + true + Left + true + + true true @@ -6105,7 +6173,7 @@ false Группа2РасширеннаяПодсказка - 2013 + 2019 Label true true @@ -6134,7 +6202,7 @@ КакОпределитьПараметрыПодключенияКВебСервисуРасширеннаяПодсказка - 2018 + 2026 Label true true @@ -6161,7 +6229,7 @@ ПроверитьПодключениеWSРасширеннаяПодсказка - 2019 + 2027 Label true true @@ -6193,7 +6261,7 @@ НадписьДалееСтраницаМастераНачалоНастройкиОбменаЧерезВебСервисРасширеннаяПодсказка - 2020 + 2028 Label true true @@ -6233,7 +6301,7 @@ false СтраницаПараметровТранспортаWSРасширеннаяПодсказка - 2010 + 2016 Label true true @@ -6264,7 +6332,7 @@ НадписьДалее1РасширеннаяПодсказка - 2022 + 2030 Label true true @@ -6302,7 +6370,7 @@ СтраницаПараметровТранспортаРасширеннаяПодсказка - 2021 + 2029 Label true true @@ -6331,7 +6399,7 @@ СтраницыПараметровТранспортаРасширеннаяПодсказка - 1985 + 1991 Label true true @@ -6359,7 +6427,7 @@ ГруппаОтступРасширеннаяПодсказка - 1984 + 1990 Label true true @@ -6393,7 +6461,7 @@ СтраницаМастераВыборРежимаРаботыПомощникаРасширеннаяПодсказка - 1972 + 1978 Label true true @@ -6424,7 +6492,7 @@ ЗаголовокСтраницыМастера7РасширеннаяПодсказка - 2024 + 2032 Label true true @@ -6475,7 +6543,7 @@ ИспользоватьПараметрыТранспортаFILEРасширеннаяПодсказка - 2025 + 2033 Label true true @@ -6512,7 +6580,7 @@ ПояснениеВыбораКаталогаОбменаИнформациейНаСервереРасширеннаяПодсказка - 2028 + 2036 Label true true @@ -6548,7 +6616,7 @@ FILEКаталогОбменаИнформациейРасширеннаяПодсказка - 2029 + 2037 Label true true @@ -6602,7 +6670,7 @@ Right FILEСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 2031 + 2039 Label true true @@ -6635,7 +6703,7 @@ ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка - 2033 + 2041 Label true true @@ -6680,7 +6748,7 @@ false ПроверитьПодключениеFILEРасширеннаяПодсказка - 2036 + 2044 Label true true @@ -6704,7 +6772,7 @@ ОтступКнопкиПроверкиПодключенияFILEРасширеннаяПодсказка - 2035 + 2043 Label true true @@ -6738,7 +6806,7 @@ НастройкиТранспортаFILEРасширеннаяПодсказка - 2027 + 2035 Label true true @@ -6767,7 +6835,7 @@ Декорация4РасширеннаяПодсказка - 2037 + 2045 Label true true @@ -6803,7 +6871,7 @@ НадписьДалееFILEРасширеннаяПодсказка - 2038 + 2046 Label true true @@ -6839,7 +6907,7 @@ СтраницаМастераЗаданиеПараметровТранспортаFILEРасширеннаяПодсказка - 2023 + 2031 Label true true @@ -6870,7 +6938,7 @@ ЗаголовокСтраницыМастера9РасширеннаяПодсказка - 2040 + 2048 Label true true @@ -6921,7 +6989,7 @@ ИспользоватьПараметрыТранспортаFTPРасширеннаяПодсказка - 2041 + 2049 Label true true @@ -6960,7 +7028,7 @@ FTPСоединениеПутьРасширеннаяПодсказка - 2045 + 2053 Label true true @@ -7003,7 +7071,7 @@ FTPСоединениеПортРасширеннаяПодсказка - 2047 + 2055 Label true true @@ -7052,7 +7120,7 @@ ГруппаСерверПортРасширеннаяПодсказка - 2044 + 2052 Label true true @@ -7085,7 +7153,7 @@ FTPСоединениеПользовательРасширеннаяПодсказка - 2050 + 2058 Label true true @@ -7126,7 +7194,7 @@ FTPСоединениеПарольРасширеннаяПодсказка - 2052 + 2060 Label true true @@ -7171,7 +7239,7 @@ ГруппаПользовательПарольРасширеннаяПодсказка - 2049 + 2057 Label true true @@ -7201,7 +7269,7 @@ FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 2054 + 2062 Label true true @@ -7244,7 +7312,7 @@ Right FTPСоединениеПассивноеСоединениеРасширеннаяПодсказка - 2056 + 2064 Label true true @@ -7278,7 +7346,7 @@ Right FTPСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 2058 + 2066 Label true true @@ -7314,7 +7382,7 @@ ПарольАрхиваСообщенияОбмена1РасширеннаяПодсказка - 2061 + 2069 Label true true @@ -7360,7 +7428,7 @@ ГруппаЗаданияПароляСообщенияОбменаFTPРасширеннаяПодсказка - 2060 + 2068 Label true true @@ -7392,7 +7460,7 @@ false ПроверитьПодключениеFTPРасширеннаяПодсказка - 2064 + 2072 Label true true @@ -7420,7 +7488,7 @@ ОтступКнопкиПроверкиПодключенияFTPРасширеннаяПодсказка - 2063 + 2071 Label true true @@ -7454,7 +7522,7 @@ НастройкиТранспортаFTPРасширеннаяПодсказка - 2043 + 2051 Label true true @@ -7483,7 +7551,7 @@ Декорация8РасширеннаяПодсказка - 2065 + 2073 Label true true @@ -7519,7 +7587,7 @@ НадписьДалееFTPРасширеннаяПодсказка - 2066 + 2074 Label true true @@ -7555,7 +7623,7 @@ СтраницаМастераЗаданиеПараметровТранспортаFTPРасширеннаяПодсказка - 2039 + 2047 Label true true @@ -7586,7 +7654,7 @@ ЗаголовокСтраницыМастера8РасширеннаяПодсказка - 2068 + 2076 Label true true @@ -7637,7 +7705,7 @@ ИспользоватьПараметрыТранспортаEMAILРасширеннаяПодсказка - 2069 + 2077 Label true true @@ -7673,7 +7741,7 @@ EMAILУчетнаяЗаписьРасширеннаяПодсказка - 2072 + 2080 Label true true @@ -7716,7 +7784,7 @@ EMAILМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 2074 + 2082 Label true true @@ -7759,7 +7827,7 @@ Right EMAILСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 2076 + 2084 Label true true @@ -7792,7 +7860,7 @@ ПарольАрхиваСообщенияОбмена2РасширеннаяПодсказка - 2078 + 2086 Label true true @@ -7837,7 +7905,7 @@ false ПроверитьПодключениеEMAILРасширеннаяПодсказка - 2081 + 2089 Label true true @@ -7861,7 +7929,7 @@ ОтступКнопкиПроверкиПодключенияEMAILРасширеннаяПодсказка - 2080 + 2088 Label true true @@ -7895,7 +7963,7 @@ НастройкиТранспортаEMAILРасширеннаяПодсказка - 2071 + 2079 Label true true @@ -7924,7 +7992,7 @@ Декорация7РасширеннаяПодсказка - 2082 + 2090 Label true true @@ -7960,7 +8028,7 @@ НадписьДалееEMAILРасширеннаяПодсказка - 2083 + 2091 Label true true @@ -7996,7 +8064,7 @@ СтраницаМастераЗаданиеПараметровТранспортаEMAILРасширеннаяПодсказка - 2067 + 2075 Label true true @@ -8027,7 +8095,7 @@ ЗаголовокСтраницыМастера5РасширеннаяПодсказка - 2085 + 2093 Label true true @@ -8078,7 +8146,7 @@ Left НаименованиеЭтойБазыРасширеннаяПодсказка - 2086 + 2094 Label true true @@ -8125,7 +8193,7 @@ НаименованиеВторойБазыРасширеннаяПодсказка - 2088 + 2096 Label true true @@ -8168,7 +8236,7 @@ ВидТранспортаСообщенийОбменаРасширеннаяПодсказка - 2090 + 2098 Label true true @@ -8245,7 +8313,7 @@ ПрефиксИнформационнойБазыИсточникаРасширеннаяПодсказка - 2092 + 2100 Label true true @@ -8295,7 +8363,7 @@ ПрефиксИнформационнойБазыПриемника1РасширеннаяПодсказка - 2095 + 2103 Label true true @@ -8335,7 +8403,7 @@ КакОпределитьПрефиксВторойИнформационнойБазыРасширеннаяПодсказка - 2097 + 2105 Label true true @@ -8367,7 +8435,7 @@ ГруппаЗаданияПрефиксаВторойИнформационнойБазыРасширеннаяПодсказка - 2094 + 2102 Label true true @@ -8404,7 +8472,7 @@ None ОписаниеОграниченийПередачиДанныхРасширеннаяПодсказка - 2100 + 2108 Label true true @@ -8450,7 +8518,7 @@ false НастройкаОграниченийРегистрацииДанныхРасширеннаяПодсказка - 2103 + 2111 Label true true @@ -8474,7 +8542,7 @@ Группа10РасширеннаяПодсказка - 2102 + 2110 Label true true @@ -8508,7 +8576,7 @@ false РамкаГруппыОграниченийРасширеннаяПодсказка - 2099 + 2107 Label true true @@ -8544,7 +8612,7 @@ None ОписаниеЗначенийПоУмолчаниюРасширеннаяПодсказка - 2105 + 2113 Label true true @@ -8590,7 +8658,7 @@ false НастройкаЗначенийПоУмолчаниюРасширеннаяПодсказка - 2108 + 2116 Label true true @@ -8614,7 +8682,7 @@ Группа102РасширеннаяПодсказка - 2107 + 2115 Label true true @@ -8644,7 +8712,7 @@ false РамкаГруппыЗначенийПоУмолчаниюРасширеннаяПодсказка - 2104 + 2112 Label true true @@ -8678,7 +8746,7 @@ НастройкиУзлаРасширеннаяПодсказка - 2098 + 2106 Label true true @@ -8706,7 +8774,7 @@ Декорация5РасширеннаяПодсказка - 2109 + 2117 Label true true @@ -8742,7 +8810,7 @@ НадписьДалееПодтверждениеНастроекРасширеннаяПодсказка - 2110 + 2118 Label true true @@ -8778,7 +8846,7 @@ СтраницаМастераНастройкаПараметровРасширеннаяПодсказка - 2084 + 2092 Label true true @@ -8809,7 +8877,7 @@ ЗаголовокСтраницыМастера11РасширеннаяПодсказка - 2112 + 2120 Label true true @@ -8855,7 +8923,7 @@ ВидТранспортаСообщенийОбмена1РасширеннаяПодсказка - 2113 + 2121 Label true true @@ -8935,7 +9003,7 @@ None ОписаниеОграниченийПередачиДанных2РасширеннаяПодсказка - 2117 + 2125 Label true true @@ -8981,7 +9049,7 @@ false НастройкаОграниченийРегистрацииДанных2РасширеннаяПодсказка - 2120 + 2128 Label true true @@ -9005,7 +9073,7 @@ Группа13РасширеннаяПодсказка - 2119 + 2127 Label true true @@ -9039,7 +9107,7 @@ false РамкаГруппыОграничений2РасширеннаяПодсказка - 2116 + 2124 Label true true @@ -9075,7 +9143,7 @@ None ОписаниеЗначенийПоУмолчанию2РасширеннаяПодсказка - 2122 + 2130 Label true true @@ -9121,7 +9189,7 @@ false НастройкаЗначенийПоУмолчанию2РасширеннаяПодсказка - 2125 + 2133 Label true true @@ -9145,7 +9213,7 @@ Группа104РасширеннаяПодсказка - 2124 + 2132 Label true true @@ -9175,7 +9243,7 @@ false РамкаГруппыЗначенийПоУмолчанию2РасширеннаяПодсказка - 2121 + 2129 Label true true @@ -9209,7 +9277,7 @@ НастройкиУзла2РасширеннаяПодсказка - 2115 + 2123 Label true true @@ -9237,7 +9305,7 @@ Декорация23РасширеннаяПодсказка - 2126 + 2134 Label true true @@ -9273,7 +9341,7 @@ НадписьДалееПодтверждениеНастроек3РасширеннаяПодсказка - 2127 + 2135 Label true true @@ -9309,7 +9377,7 @@ СтраницаМастераНастройкаПараметровВторогоЭтапаНастройкиРасширеннаяПодсказка - 2111 + 2119 Label true true @@ -9340,7 +9408,7 @@ ЗаголовокСтраницыМастера6РасширеннаяПодсказка - 2129 + 2137 Label true true @@ -9391,7 +9459,7 @@ Left НаименованиеЭтойБазы1РасширеннаяПодсказка - 2130 + 2138 Label true true @@ -9437,7 +9505,7 @@ ПрефиксИнформационнойБазыИсточника1РасширеннаяПодсказка - 2133 + 2141 Label true true @@ -9478,7 +9546,7 @@ ОтступРасширеннаяПодсказка - 2132 + 2140 Label true true @@ -9516,7 +9584,7 @@ None ОписаниеОграниченийПередачиДанных1РасширеннаяПодсказка - 2137 + 2145 Label true true @@ -9562,7 +9630,7 @@ false НастройкаОграниченийРегистрацииДанных1РасширеннаяПодсказка - 2140 + 2148 Label true true @@ -9586,7 +9654,7 @@ Группа12РасширеннаяПодсказка - 2139 + 2147 Label true true @@ -9620,7 +9688,7 @@ false РамкаГруппыОграничений1РасширеннаяПодсказка - 2136 + 2144 Label true true @@ -9656,7 +9724,7 @@ None ОписаниеЗначенийПоУмолчанию1РасширеннаяПодсказка - 2142 + 2150 Label true true @@ -9702,7 +9770,7 @@ false НастройкаЗначенийПоУмолчанию1РасширеннаяПодсказка - 2145 + 2153 Label true true @@ -9726,7 +9794,7 @@ Группа103РасширеннаяПодсказка - 2144 + 2152 Label true true @@ -9756,7 +9824,7 @@ false РамкаГруппыЗначенийПоУмолчанию1РасширеннаяПодсказка - 2141 + 2149 Label true true @@ -9790,7 +9858,7 @@ НастройкиУзла1РасширеннаяПодсказка - 2135 + 2143 Label true true @@ -9818,7 +9886,7 @@ Декорация20РасширеннаяПодсказка - 2146 + 2154 Label true true @@ -9854,7 +9922,7 @@ НадписьДалееПодтверждениеНастроек1РасширеннаяПодсказка - 2147 + 2155 Label true true @@ -9890,7 +9958,7 @@ СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияПервойБазыРасширеннаяПодсказка - 2128 + 2136 Label true true @@ -9921,7 +9989,7 @@ ЗаголовокСтраницыМастера10РасширеннаяПодсказка - 2149 + 2157 Label true true @@ -9971,7 +10039,7 @@ НаименованиеВторойБазы2РасширеннаяПодсказка - 2150 + 2158 Label true true @@ -10017,7 +10085,7 @@ ПрефиксИнформационнойБазыПриемникаРасширеннаяПодсказка - 2153 + 2161 Label true true @@ -10056,7 +10124,7 @@ Отступ1РасширеннаяПодсказка - 2152 + 2160 Label true true @@ -10094,7 +10162,7 @@ None ОписаниеОграниченийПередачиДанных4РасширеннаяПодсказка - 2157 + 2165 Label true true @@ -10140,7 +10208,7 @@ false НастройкаОграниченийРегистрацииДанных4РасширеннаяПодсказка - 2160 + 2168 Label true true @@ -10164,7 +10232,7 @@ Группа15РасширеннаяПодсказка - 2159 + 2167 Label true true @@ -10198,7 +10266,7 @@ false РамкаГруппыОграничений4РасширеннаяПодсказка - 2156 + 2164 Label true true @@ -10234,7 +10302,7 @@ None ОписаниеЗначенийПоУмолчанию4РасширеннаяПодсказка - 2162 + 2170 Label true true @@ -10280,7 +10348,7 @@ false НастройкаЗначенийПоУмолчанию4РасширеннаяПодсказка - 2165 + 2173 Label true true @@ -10304,7 +10372,7 @@ Группа106РасширеннаяПодсказка - 2164 + 2172 Label true true @@ -10334,7 +10402,7 @@ false РамкаГруппыЗначенийПоУмолчанию4РасширеннаяПодсказка - 2161 + 2169 Label true true @@ -10368,7 +10436,7 @@ НастройкиУзлаБазыКорреспондента1РасширеннаяПодсказка - 2155 + 2163 Label true true @@ -10396,7 +10464,7 @@ Декорация21РасширеннаяПодсказка - 2166 + 2174 Label true true @@ -10432,7 +10500,7 @@ НадписьДалееПодтверждениеНастроек2РасширеннаяПодсказка - 2167 + 2175 Label true true @@ -10468,7 +10536,7 @@ СтраницаМастераНастройкаПараметровДляВнешнегоСоединенияВторойБазыРасширеннаяПодсказка - 2148 + 2156 Label true true @@ -10499,7 +10567,7 @@ ЗаголовокСтраницыМастераГотовоРасширеннаяПодсказка - 2169 + 2177 Label true true @@ -10551,7 +10619,7 @@ Top ПредставлениеРезультатаНастройкиОбменаРасширеннаяПодсказка - 2170 + 2178 Label true true @@ -10600,7 +10668,7 @@ ДекорацияИнформацияРасширеннаяПодсказка - 2173 + 2181 Label true true @@ -10637,7 +10705,7 @@ НадписьИнформацияОбОткрытииПомощникаСопоставленияРасширеннаяПодсказка - 2174 + 2182 Label true true @@ -10675,7 +10743,7 @@ ГруппаНадписиИнформацииОбОткрытииПомощникаСопоставленияРасширеннаяПодсказка - 2172 + 2180 Label true true @@ -10707,7 +10775,7 @@ СтраницаМастераИтогНастройкиОбменаРасширеннаяПодсказка - 2168 + 2176 Label true true @@ -10738,7 +10806,7 @@ ЗаголовокСтраницыМастераЗакрытьРасширеннаяПодсказка - 2176 + 2184 Label true true @@ -10787,7 +10855,7 @@ Декорация111РасширеннаяПодсказка - 2179 + 2187 Label true true @@ -10818,7 +10886,7 @@ Группа91РасширеннаяПодсказка - 2178 + 2186 Label true true @@ -10853,7 +10921,7 @@ Декорация141РасширеннаяПодсказка - 2181 + 2189 Label true true @@ -10893,7 +10961,7 @@ None ИмяФайлаНастроекОбменаДаннымиРасширеннаяПодсказка - 2183 + 2191 Label true true @@ -10935,7 +11003,7 @@ false СохранитьФайлНастроекОбменаДаннымиРасширеннаяПодсказка - 2185 + 2193 Label true true @@ -10962,7 +11030,7 @@ Группа11РасширеннаяПодсказка - 2182 + 2190 Label true true @@ -10986,7 +11054,7 @@ Группа101РасширеннаяПодсказка - 2180 + 2188 Label true true @@ -11019,7 +11087,7 @@ ГруппаФайлаНастроекОбмена1РасширеннаяПодсказка - 2177 + 2185 Label true true @@ -11055,7 +11123,7 @@ Декорация181РасширеннаяПодсказка - 2189 + 2197 Label true true @@ -11095,7 +11163,7 @@ Right ВыполнитьОбменДаннымиСейчас21РасширеннаяПодсказка - 2191 + 2199 Label true true @@ -11133,7 +11201,7 @@ ПоясняющаяНадписьКФлагуСопоставленияРасширеннаяПодсказка - 2193 + 2201 Label true true @@ -11165,7 +11233,7 @@ Группа261РасширеннаяПодсказка - 2190 + 2198 Label true true @@ -11200,7 +11268,7 @@ true СтраницаВыполнитьВыгрузкуДанныхДляСопоставленияРасширеннаяПодсказка - 2188 + 2196 Label true true @@ -11226,7 +11294,7 @@ Декорация182РасширеннаяПодсказка - 2195 + 2203 Label true true @@ -11263,7 +11331,7 @@ Right ВыполнитьСозданиеНачальногоОбразаСейчасРасширеннаяПодсказка - 2197 + 2205 Label true true @@ -11297,7 +11365,7 @@ ПоясняющаяНадписьКФлагуСозданияНачальногоОбразаРасширеннаяПодсказка - 2199 + 2207 Label true true @@ -11329,7 +11397,7 @@ Группа1РасширеннаяПодсказка - 2196 + 2204 Label true true @@ -11363,7 +11431,7 @@ СтраницаВыполнитьСозданиеНачальногоОбразаПодчиненногоУзлаРасширеннаяПодсказка - 2194 + 2202 Label true true @@ -11391,7 +11459,7 @@ СтраницыОтображенияФинальногоДействияРасширеннаяПодсказка - 2187 + 2195 Label true true @@ -11415,7 +11483,7 @@ ГруппаДляСтраницФинальногоДействияРасширеннаяПодсказка - 2186 + 2194 Label true true @@ -11444,7 +11512,7 @@ Декорация103РасширеннаяПодсказка - 2200 + 2208 Label true true @@ -11483,7 +11551,7 @@ Right ВключитьРегистрациюВсехСобытийВЖурналеРегистрации1РасширеннаяПодсказка - 2202 + 2210 Label true true @@ -11517,7 +11585,7 @@ Декорация18РасширеннаяПодсказка - 2204 + 2212 Label true true @@ -11555,7 +11623,7 @@ ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации1РасширеннаяПодсказка - 2201 + 2209 Label true true @@ -11588,7 +11656,7 @@ НадписьГотовоРасширеннаяПодсказка - 2205 + 2213 Label true true @@ -11624,7 +11692,7 @@ СтраницаМастераОкончаниеСВыгрузкойНастройкиРасширеннаяПодсказка - 2175 + 2183 Label true true @@ -11655,7 +11723,7 @@ ЗаголовокСтраницыМастераЗакрыть2РасширеннаяПодсказка - 2207 + 2215 Label true true @@ -11701,7 +11769,7 @@ Декорация183РасширеннаяПодсказка - 2209 + 2217 Label true true @@ -11738,7 +11806,7 @@ Right ВыполнитьИнтерактивныйОбменДаннымиСейчасРасширеннаяПодсказка - 2211 + 2219 Label true true @@ -11776,7 +11844,7 @@ ПоясняющаяНадписьКФлагуСопоставления1РасширеннаяПодсказка - 2213 + 2221 Label true true @@ -11812,7 +11880,7 @@ ЗапуститьПриложение1СПредприятиеИВыполнитьИнтерактивнуюЗагрузкуДанных1РасширеннаяПодсказка - 2214 + 2222 Label true true @@ -11844,7 +11912,7 @@ ГруппаРасширеннаяПодсказка - 2210 + 2218 Label true true @@ -11869,7 +11937,7 @@ Группа5РасширеннаяПодсказка - 2208 + 2216 Label true true @@ -11897,7 +11965,7 @@ Декорация104РасширеннаяПодсказка - 2215 + 2223 Label true true @@ -11936,7 +12004,7 @@ Right ВключитьРегистрациюВсехСобытийВЖурналеРегистрации2РасширеннаяПодсказка - 2217 + 2225 Label true true @@ -11970,7 +12038,7 @@ Декорация19РасширеннаяПодсказка - 2219 + 2227 Label true true @@ -12008,7 +12076,7 @@ ГруппаВключитьРегистрациюВсехСобытийВЖурналеРегистрации2РасширеннаяПодсказка - 2216 + 2224 Label true true @@ -12041,7 +12109,7 @@ НадписьГотово1РасширеннаяПодсказка - 2220 + 2228 Label true true @@ -12077,7 +12145,7 @@ СтраницаМастераОкончаниеСОбменомПоВнешнемуСоединениюРасширеннаяПодсказка - 2206 + 2214 Label true true @@ -12108,7 +12176,7 @@ ЗаголовокСтраницыМастераЗакрыть1РасширеннаяПодсказка - 2222 + 2230 Label true true @@ -12157,7 +12225,7 @@ Декорация16РасширеннаяПодсказка - 2225 + 2233 Label true true @@ -12196,7 +12264,7 @@ ГруппаКартинкиРасширеннаяПодсказка - 2224 + 2232 Label true true @@ -12233,7 +12301,7 @@ Декорация12РасширеннаяПодсказка - 2227 + 2235 Label true true @@ -12275,7 +12343,7 @@ ГруппаСообщенияРасширеннаяПодсказка - 2226 + 2234 Label true true @@ -12304,7 +12372,7 @@ ГруппировкаСообщенияРасширеннаяПодсказка - 2223 + 2231 Label true true @@ -12337,7 +12405,7 @@ СтраницаМастераОжиданиеСозданияНастройкиОбменаДаннымиРасширеннаяПодсказка - 2221 + 2229 Label true true @@ -12368,7 +12436,7 @@ ЗаголовокСтраницыМастераЗакрыть6РасширеннаяПодсказка - 2229 + 2237 Label true true @@ -12417,7 +12485,7 @@ Декорация26РасширеннаяПодсказка - 2232 + 2240 Label true true @@ -12456,7 +12524,7 @@ ГруппаКартинки4РасширеннаяПодсказка - 2231 + 2239 Label true true @@ -12492,7 +12560,7 @@ Декорация33РасширеннаяПодсказка - 2234 + 2242 Label true true @@ -12535,7 +12603,7 @@ ГруппаСообщения4РасширеннаяПодсказка - 2233 + 2241 Label true true @@ -12564,7 +12632,7 @@ ГруппировкаСообщения4РасширеннаяПодсказка - 2230 + 2238 Label true true @@ -12597,7 +12665,7 @@ СтраницаМастераОжиданиеАнализаДанныхСозданиеНастройкиОбменаРасширеннаяПодсказка - 2228 + 2236 Label true true @@ -12628,7 +12696,7 @@ ЗаголовокСтраницыМастераЗакрыть5РасширеннаяПодсказка - 2236 + 2244 Label true true @@ -12677,7 +12745,7 @@ Декорация25РасширеннаяПодсказка - 2239 + 2247 Label true true @@ -12716,7 +12784,7 @@ ГруппаКартинки3РасширеннаяПодсказка - 2238 + 2246 Label true true @@ -12752,7 +12820,7 @@ Декорация17РасширеннаяПодсказка - 2241 + 2249 Label true true @@ -12795,7 +12863,7 @@ ГруппаСообщения3РасширеннаяПодсказка - 2240 + 2248 Label true true @@ -12824,7 +12892,7 @@ ГруппировкаСообщения3РасширеннаяПодсказка - 2237 + 2245 Label true true @@ -12857,7 +12925,7 @@ СтраницаМастераОжиданиеАнализаДанныхПолучениеСообщенияРасширеннаяПодсказка - 2235 + 2243 Label true true @@ -12888,7 +12956,7 @@ ЗаголовокСтраницыМастераЗакрыть18РасширеннаяПодсказка - 2243 + 2251 Label true true @@ -12937,7 +13005,7 @@ Декорация75РасширеннаяПодсказка - 2246 + 2254 Label true true @@ -12976,7 +13044,7 @@ ГруппаКартинки16РасширеннаяПодсказка - 2245 + 2253 Label true true @@ -13012,7 +13080,7 @@ Декорация76РасширеннаяПодсказка - 2248 + 2256 Label true true @@ -13055,7 +13123,7 @@ ГруппаСообщения16РасширеннаяПодсказка - 2247 + 2255 Label true true @@ -13084,7 +13152,7 @@ ГруппировкаСообщения16РасширеннаяПодсказка - 2244 + 2252 Label true true @@ -13117,7 +13185,7 @@ СтраницаМастераОжиданиеАнализаДанныхАвтоматическоеСопоставлениеРасширеннаяПодсказка - 2242 + 2250 Label true true @@ -13148,7 +13216,7 @@ ЗаголовокСтраницыМастераЗакрыть15РасширеннаяПодсказка - 2250 + 2258 Label true true @@ -13197,7 +13265,7 @@ Декорация63РасширеннаяПодсказка - 2253 + 2261 Label true true @@ -13236,7 +13304,7 @@ ГруппаКартинки13РасширеннаяПодсказка - 2252 + 2260 Label true true @@ -13272,7 +13340,7 @@ Декорация64РасширеннаяПодсказка - 2255 + 2263 Label true true @@ -13315,7 +13383,7 @@ ГруппаСообщения13РасширеннаяПодсказка - 2254 + 2262 Label true true @@ -13344,7 +13412,7 @@ ГруппировкаСообщения13РасширеннаяПодсказка - 2251 + 2259 Label true true @@ -13373,7 +13441,7 @@ СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузкаРасширеннаяПодсказка - 2249 + 2257 Label true true @@ -13404,7 +13472,7 @@ ЗаголовокСтраницыМастераЗакрыть16РасширеннаяПодсказка - 2257 + 2265 Label true true @@ -13453,7 +13521,7 @@ Декорация67РасширеннаяПодсказка - 2260 + 2268 Label true true @@ -13492,7 +13560,7 @@ ГруппаКартинки14РасширеннаяПодсказка - 2259 + 2267 Label true true @@ -13528,7 +13596,7 @@ Декорация68РасширеннаяПодсказка - 2262 + 2270 Label true true @@ -13571,7 +13639,7 @@ ГруппаСообщения14РасширеннаяПодсказка - 2261 + 2269 Label true true @@ -13600,7 +13668,7 @@ ГруппировкаСообщения14РасширеннаяПодсказка - 2258 + 2266 Label true true @@ -13629,7 +13697,7 @@ СтраницаМастераОжиданиеСинхронизацииСправочниковВыгрузкаРасширеннаяПодсказка - 2256 + 2264 Label true true @@ -13660,7 +13728,7 @@ ЗаголовокСтраницыМастераЗакрыть8РасширеннаяПодсказка - 2264 + 2272 Label true true @@ -13709,7 +13777,7 @@ Декорация29РасширеннаяПодсказка - 2267 + 2275 Label true true @@ -13748,7 +13816,7 @@ ГруппаКартинки6РасширеннаяПодсказка - 2266 + 2274 Label true true @@ -13784,7 +13852,7 @@ Декорация30РасширеннаяПодсказка - 2269 + 2277 Label true true @@ -13827,7 +13895,7 @@ ГруппаСообщения6РасширеннаяПодсказка - 2268 + 2276 Label true true @@ -13856,7 +13924,7 @@ ГруппировкаСообщения6РасширеннаяПодсказка - 2265 + 2273 Label true true @@ -13885,7 +13953,7 @@ СтраницаМастераОжиданиеСохраненияНастроекРасширеннаяПодсказка - 2263 + 2271 Label true true @@ -13916,7 +13984,7 @@ ЗаголовокСтраницыМастераЗакрыть7РасширеннаяПодсказка - 2271 + 2279 Label true true @@ -13965,7 +14033,7 @@ Декорация27РасширеннаяПодсказка - 2274 + 2282 Label true true @@ -14004,7 +14072,7 @@ ГруппаКартинки5РасширеннаяПодсказка - 2273 + 2281 Label true true @@ -14040,7 +14108,7 @@ Декорация28РасширеннаяПодсказка - 2276 + 2284 Label true true @@ -14083,7 +14151,7 @@ ГруппаСообщения5РасширеннаяПодсказка - 2275 + 2283 Label true true @@ -14112,7 +14180,7 @@ ГруппировкаСообщения5РасширеннаяПодсказка - 2272 + 2280 Label true true @@ -14141,7 +14209,7 @@ СтраницаМастераОжиданиеСинхронизацииДанныхЗагрузкаРасширеннаяПодсказка - 2270 + 2278 Label true true @@ -14172,7 +14240,7 @@ ЗаголовокСтраницыМастераЗакрыть11РасширеннаяПодсказка - 2278 + 2286 Label true true @@ -14221,7 +14289,7 @@ Декорация38РасширеннаяПодсказка - 2281 + 2289 Label true true @@ -14260,7 +14328,7 @@ ГруппаКартинки9РасширеннаяПодсказка - 2280 + 2288 Label true true @@ -14296,7 +14364,7 @@ Декорация39РасширеннаяПодсказка - 2283 + 2291 Label true true @@ -14339,7 +14407,7 @@ ГруппаСообщения9РасширеннаяПодсказка - 2282 + 2290 Label true true @@ -14368,7 +14436,7 @@ ГруппировкаСообщения9РасширеннаяПодсказка - 2279 + 2287 Label true true @@ -14397,7 +14465,7 @@ СтраницаМастераОжиданиеСинхронизацииДанныхВыгрузкаРасширеннаяПодсказка - 2277 + 2285 Label true true @@ -14428,7 +14496,7 @@ ЗаголовокСтраницыМастераОжидание1РасширеннаяПодсказка - 2285 + 2293 Label true true @@ -14477,7 +14545,7 @@ Декорация31РасширеннаяПодсказка - 2288 + 2296 Label true true @@ -14516,7 +14584,7 @@ ГруппаКартинки7РасширеннаяПодсказка - 2287 + 2295 Label true true @@ -14552,7 +14620,7 @@ Декорация34РасширеннаяПодсказка - 2290 + 2298 Label true true @@ -14595,7 +14663,7 @@ ГруппаСообщения7РасширеннаяПодсказка - 2289 + 2297 Label true true @@ -14624,7 +14692,7 @@ ГруппировкаСообщения7РасширеннаяПодсказка - 2286 + 2294 Label true true @@ -14653,7 +14721,7 @@ СтраницаМастераОжиданиеПроверкиПодключенияКСервисуРасширеннаяПодсказка - 2284 + 2292 Label true true @@ -14684,7 +14752,7 @@ ЗаголовокСтраницыМастераОжиданиеРасширеннаяПодсказка - 2292 + 2300 Label true true @@ -14733,7 +14801,7 @@ Декорация13РасширеннаяПодсказка - 2295 + 2303 Label true true @@ -14772,7 +14840,7 @@ ГруппаКартинки1РасширеннаяПодсказка - 2294 + 2302 Label true true @@ -14809,7 +14877,7 @@ Декорация14РасширеннаяПодсказка - 2297 + 2305 Label true true @@ -14851,7 +14919,7 @@ ГруппаСообщения1РасширеннаяПодсказка - 2296 + 2304 Label true true @@ -14880,7 +14948,7 @@ ГруппировкаСообщения1РасширеннаяПодсказка - 2293 + 2301 Label true true @@ -14913,7 +14981,7 @@ СтраницаМастераОжиданиеПроверкиПодключенияВнешнегоСоединенияРасширеннаяПодсказка - 2291 + 2299 Label true true @@ -14938,7 +15006,7 @@ ПанельОсновнаяРасширеннаяПодсказка - 1793 + 1797 Label true true @@ -14973,7 +15041,7 @@ КомандаНазад5РасширеннаяПодсказка - 2302 + 2310 Label true true @@ -15000,7 +15068,7 @@ true КомандаДалее3РасширеннаяПодсказка - 2303 + 2311 Label true true @@ -15026,7 +15094,7 @@ КомандаОтмена6РасширеннаяПодсказка - 2304 + 2312 Label true true @@ -15052,7 +15120,7 @@ СправкаРасширеннаяПодсказка - 2305 + 2313 Label true true @@ -15076,7 +15144,7 @@ true КоманднаяПанель1РасширеннаяПодсказка - 2301 + 2309 Label true true @@ -15104,7 +15172,7 @@ СтраницаНавигацииНачалоРасширеннаяПодсказка - 2300 + 2308 Label true true @@ -15133,7 +15201,7 @@ КомандаНазад6РасширеннаяПодсказка - 2308 + 2316 Label true true @@ -15160,7 +15228,7 @@ true КомандаДалее4РасширеннаяПодсказка - 2309 + 2317 Label true true @@ -15186,7 +15254,7 @@ КомандаОтмена7РасширеннаяПодсказка - 2310 + 2318 Label true true @@ -15212,7 +15280,7 @@ Справка1РасширеннаяПодсказка - 2311 + 2319 Label true true @@ -15236,7 +15304,7 @@ true КоманднаяПанель2РасширеннаяПодсказка - 2307 + 2315 Label true true @@ -15264,7 +15332,7 @@ СтраницаНавигацииПродолжениеРасширеннаяПодсказка - 2306 + 2314 Label true true @@ -15293,7 +15361,7 @@ КомандаНазад7РасширеннаяПодсказка - 2314 + 2322 Label true true @@ -15320,7 +15388,7 @@ true КомандаДалее6РасширеннаяПодсказка - 2315 + 2323 Label true true @@ -15346,7 +15414,7 @@ КомандаОтмена8РасширеннаяПодсказка - 2316 + 2324 Label true true @@ -15372,7 +15440,7 @@ Справка2РасширеннаяПодсказка - 2317 + 2325 Label true true @@ -15396,7 +15464,7 @@ true КоманднаяПанель3РасширеннаяПодсказка - 2313 + 2321 Label true true @@ -15420,7 +15488,7 @@ СтраницаНавигацииПродолжениеТолькоДалееРасширеннаяПодсказка - 2312 + 2320 Label true true @@ -15449,7 +15517,7 @@ КомандаНазад8РасширеннаяПодсказка - 2320 + 2328 Label true true @@ -15480,7 +15548,7 @@ true КомандаДалее5РасширеннаяПодсказка - 2321 + 2329 Label true true @@ -15506,7 +15574,7 @@ КомандаОтмена9РасширеннаяПодсказка - 2322 + 2330 Label true true @@ -15532,7 +15600,7 @@ Справка3РасширеннаяПодсказка - 2323 + 2331 Label true true @@ -15556,7 +15624,7 @@ true КоманднаяПанель4РасширеннаяПодсказка - 2319 + 2327 Label true true @@ -15584,7 +15652,7 @@ СтраницаНавигацииОжиданиеРасширеннаяПодсказка - 2318 + 2326 Label true true @@ -15613,7 +15681,7 @@ КомандаНазад11РасширеннаяПодсказка - 2326 + 2334 Label true true @@ -15639,7 +15707,7 @@ КомандаГотово6РасширеннаяПодсказка - 2327 + 2335 Label true true @@ -15665,7 +15733,7 @@ КомандаОтмена11РасширеннаяПодсказка - 2328 + 2336 Label true true @@ -15691,7 +15759,7 @@ Справка6РасширеннаяПодсказка - 2329 + 2337 Label true true @@ -15715,7 +15783,7 @@ true КоманднаяПанель7РасширеннаяПодсказка - 2325 + 2333 Label true true @@ -15739,7 +15807,7 @@ СтраницаНавигацииОкончаниеРасширеннаяПодсказка - 2324 + 2332 Label true true @@ -15764,7 +15832,7 @@ true ПанельНавигацииРасширеннаяПодсказка - 2299 + 2307 Label true true @@ -15792,7 +15860,7 @@ РамкаПанелиНавигацииРасширеннаяПодсказка - 2298 + 2306 Label true true @@ -15849,7 +15917,7 @@ Retry SaveValues Yes - DontBlock + LockOwner true true Vertical diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl index b2ef866e7..bd2b010d0 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Forms/Форма/Module.bsl @@ -12,10 +12,7 @@ Возврат; КонецЕсли; - Если Не Пользователи.РолиДоступны("ДобавлениеИзменениеОбменовДанными") Тогда - ОбменДаннымиСервер.СообщитьОбОшибке(НСтр("ru = 'Нет прав на добавление/изменение обменов данными.'"), Отказ); - Возврат; - КонецЕсли; + ОбменДаннымиСервер.ПроверитьВозможностьАдминистрированияОбменов(); // параметризация мастера по имени плана обмена (обязательно) Если Не Параметры.Свойство("ИмяПланаОбмена", Объект.ИмяПланаОбмена) Тогда @@ -557,6 +554,10 @@ Предупреждение(Предупреждение); + Предупреждение(НСтр("ru = 'Запись сообщений об ошибках в журнал регистрации отключена, + |поэтому будет затруднена диагностика возможных проблем с обменом данными. + |Рекомендуется обратиться к администратору для того, чтобы включить запись сообщений об ошибках.'") + ); КонецЕсли; КонецЕсли; @@ -589,6 +590,8 @@ Возврат; КонецЕсли; + ОбновитьИнтерфейс(); + ОбменДаннымиКлиентПереопределяемый.ПриЗавершенииРаботыПомощникаСозданияОбмена(ЭтаФорма, ЗапуститьМенеджерЗаданий()); ЗакрытьФормуБезусловно = Истина; @@ -811,7 +814,7 @@ Отказ = Ложь; ОшибкаПодключенияКомпоненты = Ложь; - ОбменДаннымиСервер.ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, СтруктураНастроек, ОшибкаПодключенияКомпоненты); + ОбменДаннымиВызовСервера.ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, СтруктураНастроек, ОшибкаПодключенияКомпоненты); Если Отказ Тогда @@ -1267,7 +1270,7 @@ СтрокаСообщенияОбОшибке = ""; - СостояниеОперации = ОбменДаннымиСервер.СостояниеДлительнойОперации(ИдентификаторДлительнойОперации, + СостояниеОперации = ОбменДаннымиВызовСервера.СостояниеДлительнойОперации(ИдентификаторДлительнойОперации, Объект.WSURLВебСервиса, Объект.WSИмяПользователя, Объект.WSПароль, @@ -1511,7 +1514,7 @@ Состояние(НСтр("ru = 'Выполняется выгрузка данных...'")); // выполняем выгрузку данных - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, Объект.УзелИнформационнойБазы, Ложь, Истина, Объект.ВидТранспортаСообщенийОбмена); + ОбменДаннымиВызовСервера.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазы(Отказ, Объект.УзелИнформационнойБазы, Ложь, Истина, Объект.ВидТранспортаСообщенийОбмена); Состояние(НСтр("ru = 'Выгрузка данных завершена'")); @@ -1662,8 +1665,18 @@ ВерсииКорреспондента = ОбменДаннымиПовтИсп.ВерсииКорреспондента(ПараметрыПодключения); Объект.ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); + Объект.ВерсияКорреспондента_2_1_1_7 = (ВерсииКорреспондента.Найти("2.1.1.7") <> Неопределено); - Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения); + + Если WSПрокси = Неопределено Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения); @@ -1679,10 +1692,18 @@ // Получаем параметры второй информационной базы ПредлагатьПерейтиВЖурналРегистрации = Ложь; - Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда + ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(Объект.ИмяПланаОбмена, "", "")); + + ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда + + ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(Объект.ИмяПланаОбмена, "", "")); + Иначе + ПараметрыПриемника = ЗначениеИзСтрокиВнутр(WSПрокси.GetIBParameters(Объект.ИмяПланаОбмена, "", "")); + КонецЕсли; Если Не ПараметрыПриемника.ПланОбменаСуществует Тогда @@ -1746,6 +1767,13 @@ Иначе + Попытка + ОбменДаннымиКлиентСервер.ПроверитьНедопустимыеСимволыВИмениПользователяWSПрокси(Объект.WSИмяПользователя); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()),, "Объект.WSИмяПользователя",, Отказ); + Возврат; + КонецПопытки; + ПредлагатьПерейтиВЖурналРегистрации = Истина; ПроверитьПодключениеWSНаСервере(Отказ, РасширеннаяПроверка, ПредлагатьПерейтиВЖурналРегистрации); @@ -1753,7 +1781,7 @@ Если Отказ И ПредлагатьПерейтиВЖурналРегистрации Тогда ТекстВопроса = НСтр("ru = 'Ошибка установки подключения. - |Перейти в журнал регистрации?'" + |Перейти в журнал регистрации?'" ); ПредложитьПерейтиВЖурналРегистрации(ТекстВопроса, СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису); @@ -1963,6 +1991,7 @@ Результат.Вставить("ТипСоединения", ТипСоединения); Результат.Вставить("ВерсияКорреспондента_2_0_1_6", Объект.ВерсияКорреспондента_2_0_1_6); + Результат.Вставить("ВерсияКорреспондента_2_1_1_7", Объект.ВерсияКорреспондента_2_1_1_7); ИначеЕсли ТипСоединения = "ВебСервис" Тогда @@ -1975,6 +2004,7 @@ Результат.Вставить("ТипСоединения", ТипСоединения); Результат.Вставить("ВерсияКорреспондента_2_0_1_6", Объект.ВерсияКорреспондента_2_0_1_6); + Результат.Вставить("ВерсияКорреспондента_2_1_1_7", Объект.ВерсияКорреспондента_2_1_1_7); КонецЕсли; @@ -2243,7 +2273,7 @@ ПараметрыФормы.Вставить("ВыполнятьЗагрузкуДанных", Ложь); - ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма", ПараметрыФормы, ЭтаФорма, ТекущиеДанные.Ключ); + ОткрытьФорму("Обработка.СопоставлениеОбъектовИнформационныхБаз.Форма", ПараметрыФормы, ЭтаФорма, ТекущиеДанные.Ключ, ВариантОткрытияОкна.ОтдельноеОкно); КонецПроцедуры @@ -2686,10 +2716,9 @@ Если ЭтоПереходДалее Тогда - // Получаем описание контекста формы настройки узлов - + // Получаем контекст и описание контекста формы настройки узлов ПараметрыФормы = Новый Структура; - ПараметрыФормы.Вставить("ПолучениеОписанияКонтекста"); + ПараметрыФормы.Вставить("ПолучитьЗначенияПоУмолчанию"); ПараметрыФормы.Вставить("Настройки", КонтекстФормыНастройкиУзлов); ИмяФормыНастройки = "ПланОбмена.[ИмяПланаОбмена].Форма.ФормаНастройкиУзлов"; @@ -2697,6 +2726,7 @@ ФормаНастройки = ПолучитьФорму(ИмяФормыНастройки, ПараметрыФормы, ЭтаФорма); + КонтекстФормыНастройкиУзлов = ФормаНастройки.Контекст; ОписаниеНастроекВыгрузкиДанных = ФормаНастройки.ОписаниеКонтекста; КонецЕсли; @@ -2938,12 +2968,13 @@ ИдентификаторФайлаСообщенияВСервисе = ""; ИдентификаторДлительнойОперации = ""; - СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( + СтруктураДанных = ОбменДаннымиВызовСервера.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервис( Отказ, Объект.УзелИнформационнойБазы, ИдентификаторФайлаСообщенияВСервисе, ДлительнаяОперация, - ИдентификаторДлительнойОперации + ИдентификаторДлительнойОперации, + Объект.WSПароль ); Если Отказ Тогда @@ -2979,10 +3010,11 @@ Если ДлительнаяОперацияЗавершена Тогда - СтруктураДанных = ОбменДаннымиСервер.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( + СтруктураДанных = ОбменДаннымиВызовСервера.ПолучитьСообщениеОбменаВоВременныйКаталогИзИнформационнойБазыКорреспондентаЧерезВебСервисЗавершениеДлительнойОперации( Отказ, Объект.УзелИнформационнойБазы, - ИдентификаторФайлаСообщенияВСервисе + ИдентификаторФайлаСообщенияВСервисе, + Объект.WSПароль ); Если Отказ Тогда @@ -3118,7 +3150,7 @@ &НаКлиенте Функция Подключаемый_СтраницаМастераОжиданиеСинхронизацииСправочниковЗагрузка_ОбработкаДлительнойОперации(Отказ, ПерейтиДалее) - ОбменДаннымиСервер.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Объект.УзелИнформационнойБазы, Объект.ИмяФайлаСообщенияОбмена); + ОбменДаннымиВызовСервера.ВыполнитьЗагрузкуДляУзлаИнформационнойБазыЧерезФайл(Отказ, Объект.УзелИнформационнойБазы, Объект.ИмяФайлаСообщенияОбмена); Если Отказ Тогда @@ -3144,7 +3176,8 @@ ДлительнаяОперация, ИдентификаторДлительнойОперации, ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации + ДатаНачалаОперации, + Объект.WSПароль ); Если Отказ Тогда @@ -3164,7 +3197,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - ДатаНачалаОперации + ДатаНачалаОперации, + Пароль ) ДатаНачалаОперации = ТекущаяДатаСеанса(); @@ -3179,7 +3213,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - Истина + Истина, + Пароль ); КонецПроцедуры @@ -3202,7 +3237,7 @@ Если ДлительнаяОперацияЗавершена Тогда - ОбменДаннымиСервер.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); + ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); КонецЕсли; @@ -3260,7 +3295,8 @@ ДлительнаяОперация, ИдентификаторДлительнойОперации, ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации + ДатаНачалаОперации, + Объект.WSПароль ); Если Отказ Тогда @@ -3280,7 +3316,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - ДатаНачалаОперации + ДатаНачалаОперации, + Пароль ) ДатаНачалаОперации = ТекущаяДатаСеанса(); @@ -3295,7 +3332,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - Истина + Истина, + Пароль ); КонецПроцедуры @@ -3318,11 +3356,12 @@ Если ДлительнаяОперацияЗавершена Тогда - ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( + ОбменДаннымиВызовСервера.ВыполнитьОбменДаннымиДляУзлаИнформационнойБазыЗавершениеДлительнойОперации( Отказ, Объект.УзелИнформационнойБазы, ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации + ДатаНачалаОперации, + Объект.WSПароль ); Если Отказ Тогда @@ -3351,7 +3390,8 @@ ДлительнаяОперация, ИдентификаторДлительнойОперации, ИдентификаторФайлаСообщенияВСервисе, - ДатаНачалаОперации + ДатаНачалаОперации, + Объект.WSПароль ); Если Отказ Тогда @@ -3371,7 +3411,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - ДатаНачалаОперации + ДатаНачалаОперации, + Пароль ) ДатаНачалаОперации = ТекущаяДатаСеанса(); @@ -3386,7 +3427,8 @@ ДлительнаяОперация, ИдентификаторОперации, ИдентификаторФайла, - Истина + Истина, + Пароль ); КонецПроцедуры @@ -3409,7 +3451,7 @@ Если ДлительнаяОперацияЗавершена Тогда - ОбменДаннымиСервер.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); + ОбменДаннымиВызовСервера.ЗафиксироватьВыполнениеВыгрузкиДанныхВРежимеДлительнойОперации(Объект.УзелИнформационнойБазы, ДатаНачалаОперации); КонецЕсли; @@ -3510,10 +3552,18 @@ СтрокаСообщенияОбОшибке = ""; - Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + + ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + Иначе + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения, СтрокаСообщенияОбОшибке); + КонецЕсли; Если WSПрокси = Неопределено Тогда @@ -3521,13 +3571,21 @@ Возврат; КонецЕсли; - КодУзла = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(Объект.ИмяПланаОбмена); + КодУзла = ОбменДаннымиВызовСервера.ПолучитьКодЭтогоУзлаДляПланаОбмена(Объект.ИмяПланаОбмена); // Получаем параметры второй информационной базы - Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда + ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + + ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда + + ПараметрыПриемника = СериализаторXDTO.ПрочитатьXDTO(WSПрокси.GetIBParameters(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + Иначе + ПараметрыПриемника = ЗначениеИзСтрокиВнутр(WSПрокси.GetIBParameters(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + КонецЕсли; НастройкиПараметровУчетаКорреспондентаЗаданы = ПараметрыПриемника.НастройкиПараметровУчетаЗаданы; @@ -3543,13 +3601,21 @@ Возврат; КонецЕсли; - КодУзла = ОбменДаннымиПовтИсп.ПолучитьКодЭтогоУзлаДляПланаОбмена(Объект.ИмяПланаОбмена); + КодУзла = ОбменДаннымиВызовСервера.ПолучитьКодЭтогоУзлаДляПланаОбмена(Объект.ИмяПланаОбмена); // Получаем параметры второй информационной базы - Если Объект.ВерсияКорреспондента_2_0_1_6 Тогда + Если Объект.ВерсияКорреспондента_2_1_1_7 Тогда + ПараметрыПриемника = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + + ИначеЕсли Объект.ВерсияКорреспондента_2_0_1_6 Тогда + + ПараметрыПриемника = ОбщегоНазначения.ЗначениеИзСтрокиXML(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы_2_0_1_6(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + Иначе + ПараметрыПриемника = ЗначениеИзСтрокиВнутр(ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПолучитьПараметрыИнформационнойБазы(ИмяПланаОбмена, КодУзла, СообщениеОбОшибкеКорреспондента)); + КонецЕсли; НастройкиПараметровУчетаКорреспондентаЗаданы = ПараметрыПриемника.НастройкиПараметровУчетаЗаданы; @@ -3840,6 +3906,7 @@ ВерсииКорреспондента = ОбменДаннымиСервер.ВерсииКорреспондентаЧерезВнешнееСоединение(ВнешнееСоединение); Объект.ВерсияКорреспондента_2_0_1_6 = (ВерсииКорреспондента.Найти("2.0.1.6") <> Неопределено); + Объект.ВерсияКорреспондента_2_1_1_7 = (ВерсииКорреспондента.Найти("2.1.1.7") <> Неопределено); Попытка ПланОбменаСуществует = ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.ПланОбменаСуществует(Объект.ИмяПланаОбмена); diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html index 51b9f1196..ca54f6214 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            • Способ обмена данными с заданием настроек транспорта и проверкой работоспособности выбранного способа обмена; diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl index 0aec02a79..04f4bed33 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем ПолеСтрокаСообщенияОбОшибке; // Строка - переменная содержит строку с сообщением об ошибке //////////////////////////////////////////////////////////////////////////////// @@ -62,10 +64,18 @@ ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтотОбъект); - Если ВерсияКорреспондента_2_0_1_6 Тогда + Если ВерсияКорреспондента_2_1_1_7 Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения); + + ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения); + Иначе + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); + КонецЕсли; Если WSПрокси = Неопределено Тогда @@ -99,7 +109,17 @@ ВызватьИсключение НСтр("ru = 'При создании настройки обмена во второй информационной базе возникли ошибки.'"); КонецЕсли; - Если ВерсияКорреспондента_2_0_1_6 Тогда + Если ВерсияКорреспондента_2_1_1_7 Тогда + + Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); + + WSПрокси.CreateExchange(ИмяПланаОбмена, + СтрокаПараметровМастераXML, + Сериализатор.ЗаписатьXDTO(НастройкаОтборовНаУзле), + Сериализатор.ЗаписатьXDTO(ЗначенияПоУмолчаниюНаУзле) + ); + + ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); @@ -136,7 +156,7 @@ КонецЕсли; // обновляем повторно используемые значения МРО - ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); // выполняем регистрацию изменений только справочников и ПВХ ЗарегистрироватьИзмененияСправочников(Отказ); @@ -214,7 +234,7 @@ КонецЕсли; // Выполняем создание настройки обмена во второй ИБ через внешнее соединение - Если ВерсияКорреспондента_2_0_1_6 Тогда + Если ВерсияКорреспондента_2_1_1_7 ИЛИ ВерсияКорреспондента_2_0_1_6 Тогда ПомощникСозданияОбменаДанными.ВнешнееСоединениеВыполнитьДействияПоНастройкеНовогоОбменаДанными_2_0_1_6(Отказ, ОбщегоНазначения.ЗначениеВСтрокуXML(НастройкаОтборовНаУзлеБазыКорреспондента), @@ -257,7 +277,7 @@ КонецЕсли; // обновляем повторно используемые значения МРО - ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); // выполняем регистрацию изменений на узле плана обмена ЗарегистрироватьИзмененияДляОбмена(Отказ); @@ -281,10 +301,18 @@ ЗаполнитьЗначенияСвойств(ПараметрыПодключения, ЭтотОбъект); - Если ВерсияКорреспондента_2_0_1_6 Тогда + Если ВерсияКорреспондента_2_1_1_7 Тогда + + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_1_1_7(ПараметрыПодключения); + + ИначеЕсли ВерсияКорреспондента_2_0_1_6 Тогда + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси_2_0_1_6(ПараметрыПодключения); + Иначе + WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); + КонецЕсли; Если WSПрокси = Неопределено Тогда @@ -299,7 +327,7 @@ УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); // установка значений по умолчанию - УстановитьЗначенияПоУмолчаниюНаУзле(УзелИнформационнойБазыОбъект, ЗначенияПоУмолчаниюНаУзле); + ОбменДаннымиСобытия.УстановитьЗначенияПоУмолчаниюНаУзле(УзелИнформационнойБазыОбъект, ЗначенияПоУмолчаниюНаУзле); УзелИнформационнойБазыОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); УзелИнформационнойБазыОбъект.Записать(); @@ -307,7 +335,7 @@ // устанавливаем признак начальной выгрузки данных для узла РегистрыСведений.ОбщиеНастройкиУзловИнформационныхБаз.УстановитьПризнакНачальнойВыгрузкиДанных(УзелИнформационнойБазы); - Если ВерсияКорреспондента_2_0_1_6 Тогда + Если ВерсияКорреспондента_2_1_1_7 ИЛИ ВерсияКорреспондента_2_0_1_6 Тогда Сериализатор = Новый СериализаторXDTO(WSПрокси.ФабрикаXDTO); @@ -494,7 +522,7 @@ Процедура ВнешнееСоединениеЗарегистрироватьИзмененияДляОбмена() Экспорт // обновляем повторно используемые значения МРО - ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); // выполняем регистрацию изменений на узле плана обмена ЗарегистрироватьИзмененияДляОбмена(Ложь); @@ -518,7 +546,7 @@ УзелИнформационнойБазыОбъект = УзелИнформационнойБазы.ПолучитьОбъект(); // установка значений по умолчанию - УстановитьЗначенияПоУмолчаниюНаУзле(УзелИнформационнойБазыОбъект, ЗначенияПоУмолчаниюНаУзле); + ОбменДаннымиСобытия.УстановитьЗначенияПоУмолчаниюНаУзле(УзелИнформационнойБазыОбъект, ЗначенияПоУмолчаниюНаУзле); УзелИнформационнойБазыОбъект.ДополнительныеСвойства.Вставить("ПолучениеСообщенияОбмена"); УзелИнформационнойБазыОбъект.Записать(); @@ -749,6 +777,7 @@ И ВариантРаботыМастера = "ПродолжитьНастройкуОбменаДанными" Тогда Константы.НастройкаПодчиненногоУзлаРИБЗавершена.Установить(Истина); + Константы.ИспользоватьОбменДанными.Установить(Истина); КонецЕсли; @@ -771,7 +800,7 @@ Если РегистрироватьДанныеДляВыгрузки Тогда // обновляем повторно используемые значения МРО - ОбменДаннымиСервер.ОбновитьПовторноИспользуемыеЗначенияМРОПриНеобходимости(); + ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов(); Если Не ЭтоНастройкаРаспределеннойИнформационнойБазы Тогда @@ -836,10 +865,10 @@ КонецЕсли; // установка значений отборов на новом узле - УстановитьЗначенияОтборовНаУзле(НовыйУзел, НастройкаОтборовНаУзле); + ОбменДаннымиСобытия.УстановитьЗначенияОтборовНаУзле(НовыйУзел, НастройкаОтборовНаУзле); // установка значений по умолчанию на новом узле - УстановитьЗначенияПоУмолчаниюНаУзле(НовыйУзел, ЗначенияПоУмолчаниюНаУзле); + ОбменДаннымиСобытия.УстановитьЗначенияПоУмолчаниюНаУзле(НовыйУзел, ЗначенияПоУмолчаниюНаУзле); // сбрасываем счетчики сообщений НовыйУзел.НомерОтправленного = 0; @@ -879,6 +908,7 @@ ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSURLВебСервиса"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSИмяПользователя"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSПароль"); + ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "WSЗапомнитьПароль"); ДополнитьСтруктуруЗначениемРеквизита(СтруктураЗаписи, "ПарольАрхиваСообщенияОбмена"); // добавляем запись в РС @@ -927,22 +957,6 @@ КонецПроцедуры -Процедура ЗаполнитьТаблицуУзлаПланаОбмена(Узел, СтруктураТабличнойЧасти, ИмяТаблицы) - - ТаблицаУзла = Узел[ИмяТаблицы]; - - ТаблицаУзла.Очистить(); - - Для Каждого Элемент ИЗ СтруктураТабличнойЧасти Цикл - - УстановитьКоличествоСтрокТаблицы(ТаблицаУзла, Элемент.Значение.Количество()); - - ТаблицаУзла.ЗагрузитьКолонку(Элемент.Значение, Элемент.Ключ); - - КонецЦикла; - -КонецПроцедуры - Процедура ЗарегистрироватьИзмененияДляОбмена(Отказ, Данные = Неопределено) Попытка @@ -978,122 +992,6 @@ КонецПроцедуры -Процедура УстановитьЗначенияОтборовНаУзле(УзелПланаОбмена, Настройки) - - НастройкаОтборов = ПланыОбмена[ИмяПланаОбмена].НастройкаОтборовНаУзле(); - - Для Каждого Элемент Из НастройкаОтборов Цикл - - Ключ = Элемент.Ключ; - Значение = Неопределено; - - Если Настройки.Свойство(Ключ, Значение) Тогда - - Если ТипЗнч(Значение) = Тип("Массив") Тогда - - ДанныеРеквизита = ПолучитьСсылочныйТипИзПервогоРеквизитаТабличнойЧастиПланаОбмена(ИмяПланаОбмена, Ключ); - - Если ДанныеРеквизита = Неопределено Тогда - Продолжить; - КонецЕсли; - - ТаблицаУзла = УзелПланаОбмена[Ключ]; - - ТаблицаУзла.Очистить(); - - Для Каждого СтрокаТаблицы Из Значение Цикл - - Если СтрокаТаблицы.Использовать Тогда - - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеРеквизита.Тип.ПривестиЗначение()); - - ЗначениеРеквизита = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаТаблицы.УникальныйИдентификаторСсылки)); - - ТаблицаУзла.Добавить()[ДанныеРеквизита.Имя] = ЗначениеРеквизита; - - КонецЕсли; - - КонецЦикла; - - ИначеЕсли ТипЗнч(Значение) = Тип("Структура") Тогда - - ЗаполнитьТаблицуУзлаПланаОбмена(УзелПланаОбмена, Значение, Ключ); - - Иначе // примитивные типы - - УзелПланаОбмена[Ключ] = Значение; - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура УстановитьЗначенияПоУмолчаниюНаУзле(УзелПланаОбмена, Настройки) - - НастройкаОтборов = ПланыОбмена[ИмяПланаОбмена].ЗначенияПоУмолчаниюНаУзле(); - - Для Каждого Элемент Из НастройкаОтборов Цикл - - Ключ = Элемент.Ключ; - Значение = Неопределено; - - Если Настройки.Свойство(Ключ, Значение) Тогда - - Если ТипЗнч(Значение) = Тип("Массив") Тогда - - ДанныеРеквизита = ПолучитьСсылочныйТипИзПервогоРеквизитаТабличнойЧастиПланаОбмена(ИмяПланаОбмена, Ключ); - - Если ДанныеРеквизита = Неопределено Тогда - Продолжить; - КонецЕсли; - - ТаблицаУзла = УзелПланаОбмена[Ключ]; - - ТаблицаУзла.Очистить(); - - Для Каждого СтрокаТаблицы Из Значение Цикл - - Если СтрокаТаблицы.Использовать Тогда - - МенеджерОбъекта = ОбщегоНазначения.МенеджерОбъектаПоСсылке(ДанныеРеквизита.Тип.ПривестиЗначение()); - - ЗначениеРеквизита = МенеджерОбъекта.ПолучитьСсылку(Новый УникальныйИдентификатор(СтрокаТаблицы.УникальныйИдентификаторСсылки)); - - ТаблицаУзла.Добавить()[ДанныеРеквизита.Имя] = ЗначениеРеквизита; - - КонецЕсли; - - КонецЦикла; - - ИначеЕсли ТипЗнч(Значение) = Тип("Структура") Тогда - - ЗаполнитьТаблицуУзлаПланаОбмена(УзелПланаОбмена, Значение, Ключ); - - Иначе // примитивные типы - - УзелПланаОбмена[Ключ] = Значение; - - КонецЕсли; - - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -Процедура УстановитьКоличествоСтрокТаблицы(Таблица, КоличествоСтрок) - - Пока Таблица.Количество() < КоличествоСтрок Цикл - - Таблица.Добавить(); - - КонецЦикла; - -КонецПроцедуры - Функция ВыполнитьВыгрузкуПараметровМастера(Отказ) Попытка @@ -1291,25 +1189,6 @@ Возврат ОбменДаннымиСервер.КодУзлаПланаОбменаСтрокой(ПрефиксИнформационнойБазыПриемника); КонецФункции -Функция ПолучитьСсылочныйТипИзПервогоРеквизитаТабличнойЧастиПланаОбмена(Знач ИмяПланаОбмена, Знач ИмяТабличнойЧасти) - - ТабличнаяЧасть = Метаданные.ПланыОбмена[ИмяПланаОбмена].ТабличныеЧасти[ИмяТабличнойЧасти]; - - Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл - - Тип = Реквизит.Тип.Типы()[0]; - - Если ОбщегоНазначения.ЭтоСсылка(Тип) Тогда - - Возврат Новый Структура("Имя, Тип", Реквизит.Имя, Реквизит.Тип); - - КонецЕсли; - - КонецЦикла; - - Возврат Неопределено; -КонецФункции - Процедура ПрочитатьПараметрыВСтруктуру(Отказ, СтрокаXML, СтруктураНастроек) Попытка @@ -1549,3 +1428,5 @@ Возврат "1.1"; КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключения/ru.html index ad1486d4c..1836a46f8 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 d519d8693..131bae5aa 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКВебСервису/ru.html @@ -1,7 +1,7 @@ - +

              Параметры подключения

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

              Обратите внимание на следующие параметры (все они могут быть скопированы из формы "О программе..."):

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

               

              \ 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 35841bbc0..25400d2dd 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПараметрыПодключенияКСервису/ru.html @@ -1,4 +1,5 @@ - +

            Параметры подключения

            -

            Для настройки обмена данными с приложением, расположенном в Интернете, необходимо указать в поле Адрес веб-ссылку к этому приложению (точно такую же, как при открытии этого приложения в браузере).
            Например: http://www.1cfresh.com/ea_demo/123/
            В полях Пользователь и Пароль необходимо указать имя и пароль администратора приложения.

            \ No newline at end of file +

            Для настройки обмена данными с приложением, расположенном в Интернете, необходимо указать в поле Адрес веб-ссылку к этому приложению (точно такую же, как при открытии этого приложения в браузере).
            Например: http://www.1cfresh.com/ea_demo/123/
            В полях Пользователь и Пароль необходимо указать имя и пароль администратора приложения.

            +

            Важно! Имя пользователя не должно содержать служебных символов [НедопустимыеСимволы]. В противном случае в приложении, расположенном в Интернете, необходимо создать пользователя, в имени которого не будут содержаться служебные символы. Этот пользователь должен быть администратором приложения.

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html index 49679d6c2..9d1771707 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакОпределитьПрефиксВторойИнформационнойБазы/ru.html @@ -1,4 +1,4 @@ - +

            Префикс второй информационной базы

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

            \ No newline at end of file diff --git a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/Templates/КакСформироватьФайлСНастройкамиОбменаДанными/ru.html index 263628636..fe9cc0422 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 a1018c292..0144e544e 100644 --- a/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo +++ b/SSL/src/DataProcessors/ПомощникСозданияОбменаДанными/ПомощникСозданияОбменаДанными.mdo @@ -332,6 +332,18 @@ + + WSЗапомнитьПароль + + ru + Запомнить пароль + + + Boolean + + + + WSИмяПользователя @@ -390,6 +402,18 @@ + + ВерсияКорреспондента_2_1_1_7 + + ru + Версия корреспондента 2 1 1 7 + + + Boolean + + + + ВерсияФорматаФайлаНастроекОбменаДанными diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl index f3fb759a4..3f245858b 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ВыполнениеРегламентныхЗаданий/Module.bsl @@ -86,7 +86,7 @@ &НаСервере Функция ВыполнитьРегламентныеЗаданияСервер(ПараметрЗапуска) - РегламентныеЗаданияСервер.ВыполнитьРегламентныеЗадания(); + РегламентныеЗаданияСлужебный.ВыполнитьРегламентныеЗадания(); ОбновитьТаблицуРегламентныхЗаданий(); Результат = Новый Структура; @@ -94,8 +94,8 @@ Результат.Вставить( "ПрекратитьВыполнение", Результат.Перезапустить - ИЛИ РегламентныеЗаданияСервер.РодительскийСеансЗаданИЗавершен(ПараметрЗапуска) - ИЛИ НЕ РегламентныеЗаданияСервер.ТекущийСеансВыполняетРегламентныеЗадания() ); + ИЛИ РегламентныеЗаданияСлужебный.РодительскийСеансЗаданИЗавершен(ПараметрЗапуска) + ИЛИ НЕ РегламентныеЗаданияСлужебный.ТекущийСеансВыполняетРегламентныеЗадания() ); Возврат Результат; @@ -114,11 +114,11 @@ СтрокаЗадания = НоваяТаблицаЗаданий.Добавить(); СтрокаЗадания.РегламентноеЗадание - = РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания(Задание); + = РегламентныеЗаданияСлужебный.ПредставлениеРегламентногоЗадания(Задание); СтрокаЗадания.Выполнено = Дата(1, 1, 1); СтрокаЗадания.Идентификатор = Задание.УникальныйИдентификатор; - СвойстваПоследнегоФоновогоЗадания = РегламентныеЗаданияСервер + СвойстваПоследнегоФоновогоЗадания = РегламентныеЗаданияСлужебный .ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); Если СвойстваПоследнегоФоновогоЗадания <> Неопределено diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Help/ru.html index 198820e1e..6fe9bf7a9 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 913167d87..eb43f1c3f 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/НастройкаВыполненияРегламентныхЗаданий/Module.bsl @@ -8,7 +8,9 @@ Отказ = Истина; КонецЕсли; - Настройки = РегламентныеЗаданияСервер.ПолучитьНастройкиВыполненияРегламентныхЗаданий(); + УстановитьПривилегированныйРежим(Истина); + Настройки = РегламентныеЗаданияСлужебный.ПолучитьНастройкиВыполненияРегламентныхЗаданий(); + УстановитьПривилегированныйРежим(Ложь); ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки); Если НЕ Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда @@ -76,12 +78,12 @@ ЗаписатьИзмененияНаСервере(); Модифицированность = Ложь; - РегламентныеЗаданияКлиент.ОтключитьГлобальныйОбработчикОжидания( + РегламентныеЗаданияСлужебныйКлиент.ОтключитьГлобальныйОбработчикОжидания( "УведомлятьОНекорректномВыполненииРегламентныхЗаданий"); Если УведомлятьОНекорректномВыполненииРегламентныхЗаданий Тогда - РегламентныеЗаданияКлиент.ПодключитьГлобальныйОбработчикОжидания( + РегламентныеЗаданияСлужебныйКлиент.ПодключитьГлобальныйОбработчикОжидания( "УведомлятьОНекорректномВыполненииРегламентныхЗаданий", ПериодУведомленияОНекорректномВыполненииРегламентныхЗаданий * 60, Истина); @@ -92,9 +94,10 @@ &НаСервере Процедура ЗаписатьИзмененияНаСервере() - Настройки = РегламентныеЗаданияСервер.ПолучитьНастройкиВыполненияРегламентныхЗаданий(); + УстановитьПривилегированныйРежим(Истина); + Настройки = РегламентныеЗаданияСлужебный.ПолучитьНастройкиВыполненияРегламентныхЗаданий(); - Если Пользователи.ЭтоПолноправныйПользователь(, Истина) Тогда + Если Пользователи.ЭтоПолноправныйПользователь(, Истина, Ложь) Тогда ЗаполнитьЗначенияСвойств(Настройки, ЭтаФорма); Иначе ЗаполнитьЗначенияСвойств( @@ -104,7 +107,7 @@ "АвтоматическиЗапускатьОтдельныйСеансДляВыполненияРегламентныхЗаданий"); КонецЕсли; - РегламентныеЗаданияСервер.УстановитьНастройкиВыполненияРегламентныхЗаданий(Настройки); + РегламентныеЗаданияСлужебный.УстановитьНастройкиВыполненияРегламентныхЗаданий(Настройки); ЗаполнитьЗначенияСвойств(ЭтаФорма, Настройки); КонецПроцедуры diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form index 4b9f15318..e41b1c9d9 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Form.form @@ -7,6 +7,103 @@ Основное 30 + + Предопределенное + 38 + true + true + + true + + + Предопределенное + + + ru + Предопределенное задание, +созданное в конфигураторе, +которое нельзя удалить. + + + ПредопределенноеРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + ПредопределенноеКонтекстноеМеню + 39 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Использование + 9 + + <key>ru</key> + <value>Включено</value> + + true + true + + true + + + Использование + + + ru + Включено - выполнять задание. + + + ИспользованиеРасширеннаяПодсказка + 46 + Label + true + true + + Left + + + + ИспользованиеКонтекстноеМеню + 10 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + Наименование 7 @@ -18,13 +115,17 @@ Наименование + + ru + Пользовательское представление регламентного задания + OnChange НаименованиеПриИзменении НаименованиеРасширеннаяПодсказка - 39 + 48 Label true true @@ -51,39 +152,6 @@ Normal - - Использование - 9 - true - true - - true - - - Использование - - - ИспользованиеРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - - ИспользованиеКонтекстноеМеню - 10 - true - - CheckBoxField - Enter - true - Left - true - - КоличествоПовторовПриАварийномЗавершении 13 @@ -97,7 +165,7 @@ КоличествоПовторовПриАварийномЗавершенииРасширеннаяПодсказка - 43 + 50 Label true true @@ -137,7 +205,7 @@ ИнтервалПовтораПриАварийномЗавершенииРасширеннаяПодсказка - 45 + 52 Label true true @@ -182,7 +250,7 @@ ОсновноеРасширеннаяПодсказка - 38 + 43 Label true true @@ -218,7 +286,7 @@ true ИдентификаторРасширеннаяПодсказка - 48 + 55 Label true true @@ -259,7 +327,7 @@ КлючРасширеннаяПодсказка - 50 + 57 Label true true @@ -303,7 +371,7 @@ ИмяПользователяРасширеннаяПодсказка - 52 + 59 Label true true @@ -353,7 +421,7 @@ ДополнительноРасширеннаяПодсказка - 47 + 54 Label true true @@ -393,7 +461,7 @@ true ИмяМетаданныхРасширеннаяПодсказка - 55 + 62 Label true true @@ -439,7 +507,7 @@ true СинонимМетаданныхРасширеннаяПодсказка - 57 + 64 Label true true @@ -484,7 +552,7 @@ ИмяМетодаМетаданныхРасширеннаяПодсказка - 59 + 66 Label true true @@ -530,7 +598,7 @@ МетаданныеРасширеннаяПодсказка - 54 + 61 Label true true @@ -576,7 +644,7 @@ None СообщенияИОписаниеИнформацииОбОшибкеРасширеннаяПодсказка - 62 + 69 Label true true @@ -625,7 +693,7 @@ СообщенияПользователюИОписаниеИнформацииОбОшибкеРасширеннаяПодсказка - 61 + 68 Label true true @@ -658,7 +726,7 @@ false ЗаписатьИЗакрытьРасширеннаяПодсказка - 35 + 40 Label true true @@ -684,7 +752,7 @@ ЗаписатьРасширеннаяПодсказка - 36 + 41 Label true true @@ -711,7 +779,7 @@ false ОткрытьРасписаниеРасширеннаяПодсказка - 37 + 42 Label true true @@ -1035,6 +1103,23 @@ true + + Предопределенное + + <key>ru</key> + <value>Предопределенное</value> + + 1 + + Boolean + + + true + + + true + + ЗаписатьИЗакрыть diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html index d357433c3..e97abbd67 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>В этой форме можно посмотреть и изменить различные свойства регламентного задания.</p> <p>Как правило, необходимость в изменении свойств регламентных заданий возникает редко. Чаще всего, используется флажок <strong>Использование</strong>, с помощью которого можно отключить выполнение регламентного задания. </p> <h3>1. Группа свойств "Основное".</h3> diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl index 9edd65f45..7051fef78 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентноеЗадание/Module.bsl @@ -46,13 +46,14 @@ ЭтаФорма, Задание, "Ключ, - |Наименование, + |Предопределенное, |Использование, + |Наименование, |ИмяПользователя, |ИнтервалПовтораПриАварийномЗавершении, |КоличествоПовторовПриАварийномЗавершении"); - Идентификатор = Строка(Задание.УникальныйИдентификатор); + Идентификатор = Строка(Задание.УникальныйИдентификатор); Если Задание.Метаданные = Неопределено Тогда ИмяМетаданных = НСтр("ru = '<нет метаданных>'"); СинонимМетаданных = НСтр("ru = '<нет метаданных>'"); @@ -64,7 +65,7 @@ КонецЕсли; Расписание = Задание.Расписание; - СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСервер + СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСлужебный .СообщенияИОписанияОшибокРегламентногоЗадания(Задание); КонецЕсли; @@ -75,7 +76,7 @@ Наименование = ?( Действие = "Добавить", "", - РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания(Задание)); + РегламентныеЗаданияСлужебный.ПредставлениеРегламентногоЗадания(Задание)); КонецЕсли; // Заполнение списка выбора имени пользователя. diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form index f99e83c39..488cc0741 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Form.form @@ -19,7 +19,6 @@ </dataPath> <skipOnInput>false</skipOnInput> <titleLocation>None</titleLocation> - <excludedCommands>Change</excludedCommands> <excludedCommands>EndEdit</excludedCommands> <excludedCommands>MoveDown</excludedCommands> <excludedCommands>MoveUp</excludedCommands> @@ -42,7 +41,9 @@ </dataPath> <toolTip> <key>ru</key> - <value>Задание, предопределенное в конфигураторе</value> + <value>Предопределенное задание, +созданное в конфигураторе, +которое нельзя удалить.</value> </toolTip> <extendedTooltip> <name>ПредопределенноеРасширеннаяПодсказка</name> @@ -84,7 +85,7 @@ </dataPath> <toolTip> <key>ru</key> - <value>Выполнять задание</value> + <value>Включено - выполнять задание.</value> </toolTip> <extendedTooltip> <name>ИспользованиеРасширеннаяПодсказка</name> @@ -140,7 +141,6 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> - <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -185,7 +185,6 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> - <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -234,7 +233,6 @@ <autoFill>true</autoFill> </contextMenu> <type>CheckBoxField</type> - <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -272,7 +270,6 @@ <autoFill>true</autoFill> </contextMenu> <type>InputField</type> - <readOnly>true</readOnly> <editMode>Enter</editMode> <showInHeader>true</showInHeader> <headerHorizontalAlign>Left</headerHorizontalAlign> @@ -343,7 +340,7 @@ <representationInContextMenu>Auto</representationInContextMenu> </items> <items xsi:type="form:Button"> - <name>ТаблицаРегламентныеЗаданияИзменитьРегламентноеЗадание</name> + <name>ТаблицаРегламентныеЗаданияИзменить</name> <id>172</id> <visible>true</visible> <enabled>true</enabled> @@ -351,7 +348,7 @@ <common>true</common> </userVisible> <extendedTooltip> - <name>ТаблицаРегламентныеЗаданияИзменитьРегламентноеЗаданиеРасширеннаяПодсказка</name> + <name>ТаблицаРегламентныеЗаданияИзменитьРасширеннаяПодсказка</name> <id>184</id> <type>Label</type> <autoMaxWidth>true</autoMaxWidth> @@ -360,7 +357,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>Form.Command.ИзменитьРегламентноеЗадание</commandName> + <commandName>Form.Item.ТаблицаРегламентныеЗадания.StandardCommand.Change</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -572,6 +569,10 @@ <event>BeforeDeleteRow</event> <name>ТаблицаРегламентныеЗаданияПередУдалением</name> </handlers> + <handlers> + <event>BeforeRowChange</event> + <name>ТаблицаРегламентныеЗаданияПередНачаломИзменения</name> + </handlers> <searchStringAddition> <name>ТаблицаРегламентныеЗаданияСтрокаПоиска</name> <id>193</id> @@ -801,7 +802,7 @@ <horizontalAlign>Left</horizontalAlign> </extInfo> </extendedTooltip> - <commandName>0</commandName> + <commandName>Form.Item.ТаблицаРегламентныеЗадания.StandardCommand.Change</commandName> <buttonImportance>Normal</buttonImportance> <representation>Auto</representation> <autoMaxWidth>true</autoMaxWidth> @@ -3088,32 +3089,6 @@ <itemValueType/> </extInfo> </attributes> - <formCommands> - <name>ИзменитьРегламентноеЗадание</name> - <title> - <key>ru</key> - <value>Изменить</value> - - 2 - - ru - Изменить (или открыть) текущий элемент - - - true - - F3 - - StdPicture.ChangeListItem - - - - ИзменитьРегламентноеЗаданиеВыполнить - - - Auto - Auto - ОбновитьДанные diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl index d23c53270..c0c87d237 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/РегламентныеИФоновыеЗадания/Module.bsl @@ -18,7 +18,7 @@ ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); ПустойИдентификатор = Строка(Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000")); - ТекстНеОпределено = РегламентныеЗаданияСервер.ТекстНеОпределено(); + ТекстНеОпределено = РегламентныеЗаданияСлужебный.ТекстНеОпределено(); Если ИнформационнаяБазаФайловая Тогда Элементы.ИмяПользователя.Видимость = Ложь; @@ -139,7 +139,11 @@ &НаКлиенте Процедура ТаблицаРегламентныеЗаданияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ДобавитьСкопироватьИзменитьРегламентноеЗадание("Изменить"); + Если Поле = "Предопределенное" + ИЛИ Поле = "Использование" Тогда + + ДобавитьСкопироватьИзменитьРегламентноеЗадание("Изменить"); + КонецЕсли; КонецПроцедуры @@ -152,6 +156,15 @@ КонецПроцедуры +&НаКлиенте +Процедура ТаблицаРегламентныеЗаданияПередНачаломИзменения(Элемент, Отказ) + + Отказ = Истина; + + ДобавитьСкопироватьИзменитьРегламентноеЗадание("Изменить"); + +КонецПроцедуры + &НаКлиенте Процедура ТаблицаРегламентныеЗаданияПередУдалением(Элемент, Отказ) @@ -298,13 +311,6 @@ КонецПроцедуры -&НаКлиенте -Процедура ИзменитьРегламентноеЗаданиеВыполнить(Команда) - - ДобавитьСкопироватьИзменитьРегламентноеЗадание("Изменить"); - -КонецПроцедуры - &НаКлиенте Процедура НастройкаВыполненияРегламентныхЗаданий(Команда) @@ -332,13 +338,11 @@ Предупреждение( НСтр("ru = 'Выберите регламентное задание.'") ); Иначе Диалог = Новый ДиалогРасписанияРегламентногоЗадания( - РегламентныеЗаданияКлиент.ПолучитьРасписаниеРегламентногоЗадания(ТекущиеДанные.Идентификатор)); + ПолучитьРасписание(ТекущиеДанные.Идентификатор)); Если Диалог.ОткрытьМодально() Тогда - РегламентныеЗаданияКлиент.УстановитьРасписаниеРегламентногоЗадания( - ТекущиеДанные.Идентификатор, - Диалог.Расписание); + УстановитьРасписание(ТекущиеДанные.Идентификатор, Диалог.Расписание); ОбновитьТаблицуРегламентныхЗаданий(ТекущиеДанные.Идентификатор); КонецЕсли; @@ -372,6 +376,27 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервереБезКонтекста +Функция ПолучитьРасписание(Знач ИдентификаторРегламентногоЗадания) + + УстановитьПривилегированныйРежим(Истина); + + Возврат РегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗадания( + ИдентификаторРегламентногоЗадания); + +КонецФункции + +&НаСервереБезКонтекста +Процедура УстановитьРасписание(Знач ИдентификаторРегламентногоЗадания, Знач Расписание) + + УстановитьПривилегированныйРежим(Истина); + + РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗадания( + ИдентификаторРегламентногоЗадания, + Расписание); + +КонецПроцедуры + &НаСервере Процедура ЗаполнитьНастройкиФормы(Знач Настройки) @@ -589,7 +614,7 @@ МоментЗапуска = ТекущаяДатаСеанса(); КонецЕсли; - ЗапускВыполнен = РегламентныеЗаданияСервер.ВыполнитьРегламентноеЗаданиеВручную( + ЗапускВыполнен = РегламентныеЗаданияСлужебный.ВыполнитьРегламентноеЗаданиеВручную( ИдентификаторРегламентногоЗадания, МоментЗапуска, ИдентификаторФоновогоЗадания, @@ -612,7 +637,7 @@ &НаСервере Процедура ОтменитьФоновоеЗаданиеНаСервере(Знач Идентификатор) - РегламентныеЗаданияСервер.ОтменитьФоновоеЗадание(Идентификатор); + РегламентныеЗаданияСлужебный.ОтменитьФоновоеЗадание(Идентификатор); ОбновитьДанные(); @@ -720,10 +745,10 @@ ЗаполнитьЗначенияСвойств(Строка, Задание); // Уточнение наименования - Строка.Наименование = РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания(Задание); + Строка.Наименование = РегламентныеЗаданияСлужебный.ПредставлениеРегламентногоЗадания(Задание); // Установка Даты завершения и Состояния завершения по последней фоновой процедуре - СвойстваПоследнегоФоновогоЗадания = РегламентныеЗаданияСервер + СвойстваПоследнегоФоновогоЗадания = РегламентныеЗаданияСлужебный .ПолучитьСвойстваПоследнегоФоновогоЗаданияВыполненияРегламентногоЗадания(Задание); Если СвойстваПоследнегоФоновогоЗадания = Неопределено Тогда @@ -791,7 +816,7 @@ Таблица = ТаблицаФоновыеЗадания; КоличествоФоновыхЗаданийВсего = 0; - ТекущаяТаблица = РегламентныеЗаданияСервер.ПолучитьТаблицуСвойствФоновыхЗаданий( + ТекущаяТаблица = РегламентныеЗаданияСлужебный.ПолучитьТаблицуСвойствФоновыхЗаданий( Отбор, КоличествоФоновыхЗаданийВсего); Индекс = 0; @@ -827,7 +852,7 @@ // Получение информации об ошибках. Обновляемое.СообщенияПользователюИОписаниеИнформацииОбОшибке - = РегламентныеЗаданияСервер.СообщенияИОписанияОшибокФоновогоЗадания( + = РегламентныеЗаданияСлужебный.СообщенияИОписанияОшибокФоновогоЗадания( Обновляемое.Идентификатор, Задание); // Увеличение индекса @@ -844,3 +869,4 @@ КонецПроцедуры + diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html index a3bdce56b..8915d4703 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>В этой форме можно посмотреть различные свойства фонового задания.</p> <h3>1. Группа свойств "Основное".</h3> <p></p> diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl index 3ed9586aa..b6114c2a1 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Forms/ФоновоеЗадание/Module.bsl @@ -11,14 +11,14 @@ Если Параметры.СвойстваФоновогоЗадания = Неопределено Тогда - СвойстваФоновогоЗадания = РегламентныеЗаданияСервер + СвойстваФоновогоЗадания = РегламентныеЗаданияСлужебный .ПолучитьСвойстваФоновогоЗадания(Параметры.Идентификатор); Если СвойстваФоновогоЗадания = Неопределено Тогда ВызватьИсключение(НСтр("ru = 'Фоновое задание не найдено.'")); КонецЕсли; - СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСервер + СообщенияПользователюИОписаниеИнформацииОбОшибке = РегламентныеЗаданияСлужебный .СообщенияИОписанияОшибокФоновогоЗадания(Параметры.Идентификатор); Если ЗначениеЗаполнено(СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания) Тогда @@ -27,11 +27,11 @@ = СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания; НаименованиеРегламентногоЗадания - = РегламентныеЗаданияСервер.ПредставлениеРегламентногоЗадания( + = РегламентныеЗаданияСлужебный.ПредставлениеРегламентногоЗадания( СвойстваФоновогоЗадания.ИдентификаторРегламентногоЗадания); Иначе - НаименованиеРегламентногоЗадания = РегламентныеЗаданияСервер.ТекстНеОпределено(); - ИдентификаторРегламентногоЗадания = РегламентныеЗаданияСервер.ТекстНеОпределено(); + НаименованиеРегламентногоЗадания = РегламентныеЗаданияСлужебный.ТекстНеОпределено(); + ИдентификаторРегламентногоЗадания = РегламентныеЗаданияСлужебный.ТекстНеОпределено(); КонецЕсли; Иначе СвойстваФоновогоЗадания = Параметры.СвойстваФоновогоЗадания; diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/Help/ru.html index 33df36ae2..add73dad2 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.16447"></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.16446"></meta></head><body> <p>В целях администрирования регламентных и фоновых заданий система предоставляет следующие возможности:</p> <ol><li><a href="#КонтрольРЗ">Контроль выполнения регламентных заданий.</a> </li><li><a href="#Работа_с_РЗ">Регламентные задания.</a> diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/ManagerModule.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/ManagerModule.bsl index 8b1378917..dc862d04c 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/ManagerModule.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/ManagerModule.bsl @@ -1 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/ObjectModule.bsl b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/ObjectModule.bsl index 8b1378917..dc862d04c 100644 --- a/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/ObjectModule.bsl +++ b/SSL/src/DataProcessors/РегламентныеИФоновыеЗадания/ObjectModule.bsl @@ -1 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +#КонецЕсли \ 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 c78f5fd39..4f7f4b3cf 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>Выполняет восстановление данных из резервной копии.</p> <p>Обязательное заполнение: Путь к файлу с резервной копией. В данном поле необходимо выбрать файл, из которого будет восстановлена информационная база. Примечание: в данном помощнике при восстановлении данных можно использовать только архивы формата .zip, содержащие один файл - файл информационной базы 1cv8.cd. Лучше всего использовать архивы, созданные помощником создания резервной копии.</p> <p>Также предоставляет возможность сделать резервную копию базы перед ее восстановлением - таким образом, можно сохранить те данные, которые имеются на данный момент. Для формирования резервной копии необходимо установить флажок "Сделать резервную копию перед восстановлением данных". Кроме того, потребуется указать каталог, куда будет сохранена резервная копия.</p> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl index 4b1a28925..eeb927d8c 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/ВосстановлениеДанныхИнформационнойБазыИзРезервнойКопии/Module.bsl @@ -134,11 +134,13 @@ УстановитьЗаголовокКнопкиДалее(Истина); Элементы.Готово.Доступность = Ложь; - Если РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда - СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Истина); + УстановитьБлокировкуСоединений = Истина; + Если РезервноеКопированиеИБВызовСервера.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(УстановитьБлокировкуСоединений); + ЗавершитьРаботуЭтогоСеанса(Ложь); НачатьРезервноеКопирование(); Иначе - СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Истина); + СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(УстановитьБлокировкуСоединений); УстановитьОбработчикОжиданияНачалаРезервногоКопирования(); УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования(); КонецЕсли; @@ -282,7 +284,7 @@ &НаКлиенте Процедура ОбновитьКоличествоАктивныхПользователей() - Элементы.КоличествоАктивныхПользователей.Заголовок = РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей(); + Элементы.КоличествоАктивныхПользователей.Заголовок = РезервноеКопированиеИБВызовСервера.ПолучитьКоличествоАктивныхПользователей(); КонецПроцедуры @@ -381,6 +383,7 @@ Попытка + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); ComConnector = Новый COMОбъект(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИмяCOMСоединителя); СтрокаСоединенияИнформационнойБазы = ПараметрыПодключения.СтрокаСоединенияИнформационнойБазы + ПараметрыПодключения.СтрокаПодключения; Соединение = ComConnector.Connect(СтрокаСоединенияИнформационнойБазы); @@ -420,7 +423,7 @@ &НаКлиенте Процедура ПроверкаНаЕдинственностьПодключения() - Если РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда + Если РезервноеКопированиеИБВызовСервера.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда НачатьРезервноеКопирование(); КонецЕсли; @@ -478,8 +481,8 @@ ФайлСкрипта.Записать(ПараметрыКопирования.КаталогВременныхФайловОбновления + "helpers.js", КодировкаТекста.UTF16); ИмяГлавногоФайлаСкрипта = Неопределено; - // Вспомогательный файл: splash.bmp - БиблиотекаКартинок.ЗаставкаВнешнейОперации.Записать(ПараметрыКопирования.КаталогВременныхФайловОбновления + "splash.bmp"); + // Вспомогательный файл: splash.png + БиблиотекаКартинок.ЗаставкаВнешнейОперации.Записать(ПараметрыКопирования.КаталогВременныхФайловОбновления + "splash.png"); // Вспомогательный файл: splash.ico БиблиотекаКартинок.ЗначокЗаставкиВнешнейОперации.Записать(ПараметрыКопирования.КаталогВременныхФайловОбновления + "splash.ico"); // Вспомогательный файл: progress.gif @@ -648,16 +651,38 @@ КонецФункции -&НаСервереБезКонтекста +&НаСервереБезКонтекста Функция ПолучитьИнформациюОНаличииСоединений(СообщенияДляЖурналаРегистрации = Неопределено) - // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - + УстановитьПривилегированныйРежим(Истина); - Результат = Новый Структура( - "НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", - НаличиеАктивныхСоединений(), НаличиеCOMСоединений(), НаличиеСоединенияКонфигуратором(), ЕстьАктивныеПользователи()); + + Результат = Новый Структура("НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", + Ложь, + Ложь, + Ложь, + Ложь); + + Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда + Результат.ЕстьАктивныеПользователи = Истина; + КонецЕсли; + + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); + Если МассивСеансов.Количество() = 1 Тогда + Возврат Результат; + КонецЕсли; + + Результат.НаличиеАктивныхСоединений = Истина; + + Для Каждого Сеанс Из МассивСеансов Цикл + Если ЭтоCOMСоединение(Сеанс) Тогда + Результат.НаличиеCOMСоединений = Истина; + ИначеЕсли ЭтоСеансКонфигуратором(Сеанс) Тогда + Результат.НаличиеСоединенияКонфигуратором = Истина; + КонецЕсли; + КонецЦикла; + Возврат Результат; КонецФункции @@ -675,52 +700,3 @@ Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("COMConnection"); КонецФункции - -&НаСервереБезКонтекста -Функция НаличиеСоединенияКонфигуратором() - - МассивСеансов = ПолучитьСеансыИнформационнойБазы(); - - Для Каждого Сеанс Из МассивСеансов Цикл - Если ЭтоСеансКонфигуратором(Сеанс) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - -&НаСервереБезКонтекста -Функция НаличиеCOMСоединений() - - МассивСеансов = ПолучитьСеансыИнформационнойБазы(); - - Для Каждого Сеанс Из МассивСеансов Цикл - Если ЭтоCOMСоединение(Сеанс) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - - Возврат Ложь; - -КонецФункции - -&НаСервереБезКонтекста -Функция НаличиеАктивныхСоединений(СообщенияДляЖурналаРегистрации = Неопределено) - - // запись накопленных событий ЖР - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Возврат ПолучитьСеансыИнформационнойБазы().Количество() > 1; - -КонецФункции - -&НаСервереБезКонтекста -Функция ЕстьАктивныеПользователи(СообщенияДляЖурналаРегистрации = Неопределено) - - // запись накопленных событий ЖР - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - УстановитьПривилегированныйРежим(Истина); - Возврат ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0; - -Конецфункции diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html index a9f84d2d7..2cf722cd7 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>Основная форма создания резервной копии информационной базы.</p> <p>Предоставляет следующие возможности:</p> <p>"Проведение резервного копирования прямо сейчас". При выборе этого пункта, программа попытается произвести резервное копирование в настоящий момент. При этом будет завершена работа всех пользователей. Когда в базе останется только ваша программа, то она закроется автоматически, проведется резервное копирование, и программа откроется снова с информационной формой, на которой можно будет узнать о результате проведения резервного копирования.</p> diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl index f20d59b77..34c6538b9 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Forms/РезервноеКопированиеИнформационнойБазы/Module.bsl @@ -110,7 +110,7 @@ &НаКлиенте Процедура ПриЗакрытии() - СоединенияИБ.РазрешитьРаботуПользователей(); + СоединенияИБВызовСервера.РазрешитьРаботуПользователей(); ОтключитьОбработчикОжидания("ИстечениеВремениОжидания"); ОтключитьОбработчикОжидания("ПроверкаНаЕдинственностьПодключения"); ОтключитьОбработчикОжидания("ЗавершитьРаботуПользователей"); @@ -285,11 +285,13 @@ Возврат; КонецЕсли; - Если РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда + УстановитьБлокировкуСоединений = Истина; + Если РезервноеКопированиеИБВызовСервера.ПолучитьКоличествоАктивныхПользователей() = 1 Тогда ОбщегоНазначенияКлиент.ПроверитьВключениеЖурналаРегистрации(); - СоединенияИБ.УстановитьБлокировкуСоединений("Резервное копирование", "РезервноеКопирование"); - СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Истина); + СоединенияИБВызовСервера.УстановитьБлокировкуСоединений("Резервное копирование", "РезервноеКопирование"); + СоединенияИБКлиент.УстановитьПризнакРаботаПользователейЗавершается(УстановитьБлокировкуСоединений); + ЗавершитьРаботуЭтогоСеанса(Ложь); НачатьРезервноеКопирование(); Иначе @@ -306,8 +308,8 @@ Сообщить(ТекстСообщения); КонецЕсли; - СоединенияИБ.УстановитьБлокировкуСоединений("Резервное копирование", "РезервноеКопирование"); - СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(Истина); + СоединенияИБВызовСервера.УстановитьБлокировкуСоединений("Резервное копирование", "РезервноеКопирование"); + СоединенияИБКлиент.УстановитьОбработчикиОжиданияЗавершенияРаботыПользователей(УстановитьБлокировкуСоединений); УстановитьОбработчикОжиданияНачалаРезервногоКопирования(); УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования(); КонецЕсли; @@ -316,7 +318,7 @@ ИЛИ НоваяСтраница = ПодчиненныеСтраницы.СтраницаУспешногоВыполненияКопирования Тогда Элементы.Далее.Видимость= Ложь; Элементы.Отмена.Заголовок = НСтр("ru = 'Закрыть'"); - РезервноеКопированиеИБСервер.УстановитьРезультатРезервногоКопирования(ПараметрыРезервногоКопированияИБ); + УстановитьРезультатРезервногоКопирования(ПараметрыРезервногоКопированияИБ); ИначеЕсли НоваяСтраница = ПодчиненныеСтраницы.ДополнительныеНастройки Тогда Элементы.Назад.Видимость = Истина; @@ -338,6 +340,13 @@ КонецПроцедуры +&НаСервереБезКонтекста +Процедура УстановитьРезультатРезервногоКопирования(ПараметрыРезервногоКопирования) + + РезервноеКопированиеИБСервер.УстановитьРезультатРезервногоКопирования(ПараметрыРезервногоКопирования); + +КонецПроцедуры + &НаСервереБезКонтекста Функция АктивныТолькоКлиентскиеПриложения(ИменаАктивныхСеансов) @@ -378,10 +387,11 @@ КонецЕсли; ПараметрыПодключения = ПолучитьПараметрыАутентификацииАдминистратораОбновления(); - + Попытка - ComConnector = Новый COMОбъект(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИмяCOMСоединителя); + ОбщегоНазначенияКлиент.ЗарегистрироватьCOMСоединитель(Ложь); + ComConnector = Новый COMОбъект(СтандартныеПодсистемыКлиентПовтИсп.ПараметрыРаботыКлиента().ИмяCOMСоединителя); СтрокаСоединенияИнформационнойБазы = ПараметрыПодключения.СтрокаСоединенияИнформационнойБазы + ПараметрыПодключения.СтрокаПодключения; Соединение = ComConnector.Connect(СтрокаСоединенияИнформационнойБазы); @@ -404,7 +414,7 @@ ПараметрыРезервногоКопированияИБ.Вставить("АдминистраторИБ", АдминистраторИБ); ПараметрыРезервногоКопированияИБ.Вставить("ПарольАдминистратораИБ", ПарольАдминистратораИБ); КонецЕсли; - РезервноеКопированиеИБСервер.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБ); + РезервноеКопированиеИБВызовСервера.УстановитьПараметрыРезервногоКопирования(ПараметрыРезервногоКопированияИБ); КонецЕсли; Возврат Результат; @@ -485,11 +495,18 @@ ТекущаяДата = ОбщегоНазначенияКлиент.ДатаСеанса(); ПериодОповещения = ?(Объект.ЕдиницаИзмеренияПериодаОтложенногоОповещения = "Месяц", (ДобавитьМесяц(ТекущаяДата, Объект.ПериодОтложенногоОповещения) - ТекущаяДата), - РезервноеКопированиеИБСервер.ПолучитьВременнойПараметрПоСтроке(Объект.ЕдиницаИзмеренияПериодаОтложенногоОповещения)); + ПолучитьВременнойПараметрПоСтроке(Объект.ЕдиницаИзмеренияПериодаОтложенногоОповещения)); Возврат ПериодОповещения; КонецФункции +&НаСервереБезКонтекста +Функция ПолучитьВременнойПараметрПоСтроке(СтрокаПараметра) + + Возврат РезервноеКопированиеИБСервер.ПолучитьВременнойПараметрПоСтроке(СтрокаПараметра); + +КонецФункции + &НаКлиенте Процедура УстановитьОбработчикОжиданияИстеченияТаймаутаРезервногоКопирования() @@ -520,7 +537,7 @@ &НаКлиенте Процедура ПроверкаНаЕдинственностьПодключения() - КоличествоПользователей = РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей(); + КоличествоПользователей = РезервноеКопированиеИБВызовСервера.ПолучитьКоличествоАктивныхПользователей(); Элементы.КоличествоАктивныхПользователей.Заголовок = Строка(КоличествоПользователей); Если КоличествоПользователей = 1 Тогда НачатьРезервноеКопирование(); @@ -563,7 +580,7 @@ &НаКлиенте Процедура ОбновитьКоличествоАктивныхПользователей() - Элементы.КоличествоАктивныхПользователей.Заголовок = РезервноеКопированиеИБСервер.ПолучитьКоличествоАктивныхПользователей(); + Элементы.КоличествоАктивныхПользователей.Заголовок = РезервноеКопированиеИБВызовСервера.ПолучитьКоличествоАктивныхПользователей(); КонецПроцедуры @@ -721,8 +738,8 @@ ФайлСкрипта.Записать(ПараметрыРезервногоКопирования.КаталогВременныхФайловОбновления + "helpers.js", КодировкаТекста.UTF16); ИмяГлавногоФайлаСкрипта = Неопределено; - // Вспомогательный файл: splash.bmp - БиблиотекаКартинок.ЗаставкаВнешнейОперации.Записать(ПараметрыРезервногоКопирования.КаталогВременныхФайловОбновления + "splash.bmp"); + // Вспомогательный файл: splash.png + БиблиотекаКартинок.ЗаставкаВнешнейОперации.Записать(ПараметрыРезервногоКопирования.КаталогВременныхФайловОбновления + "splash.png"); // Вспомогательный файл: splash.ico БиблиотекаКартинок.ЗначокЗаставкиВнешнейОперации.Записать(ПараметрыРезервногоКопирования.КаталогВременныхФайловОбновления + "splash.ico"); // Вспомогательный файл: progress.gif @@ -832,8 +849,8 @@ Результат = СтрЗаменить(Результат, "[СтрокаСоединенияИнформационнойБазы]" , ПодготовитьТекст(СтрокаСоединенияИнформационнойБазы)); Результат = СтрЗаменить(Результат, "[ПараметрыАутентификацииПользователя]" , ПодготовитьТекст(СтруктураПараметров.ПараметрыСкрипта.ПараметрыАутентификации)); Результат = СтрЗаменить(Результат, "[СобытиеЖурналаРегистрации]" , ПодготовитьТекст(СтруктураПараметров.СобытиеЖурналаРегистрации)); - Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]" , ""); - + Результат = СтрЗаменить(Результат, "[АдресЭлектроннойПочты]", + ""); Результат = СтрЗаменить(Результат, "[ИмяАдминистратораОбновления]" , ПодготовитьТекст(ИмяПользователя())); Результат = СтрЗаменить(Результат, "[СоздаватьРезервнуюКопию]" ,"true"); СтрокаКаталога = ПроверитьКаталогНаУказаниеКорневогоЭлемента(Объект.КаталогСРезервнымиКопиями); @@ -892,13 +909,35 @@ &НаСервереБезКонтекста Функция ПолучитьИнформациюОНаличииСоединений(СообщенияДляЖурналаРегистрации = Неопределено) - // запись накопленных событий ЖР ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); + УстановитьПривилегированныйРежим(Истина); - Результат = Новый Структура( - "НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", - НаличиеАктивныхСоединений(), НаличиеCOMСоединений(), - НаличиеСоединенияКонфигуратором(), ЕстьАктивныеПользователи()); + + Результат = Новый Структура("НаличиеАктивныхСоединений, НаличиеCOMСоединений, НаличиеСоединенияКонфигуратором, ЕстьАктивныеПользователи", + Ложь, + Ложь, + Ложь, + Ложь); + + Если ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0 Тогда + Результат.ЕстьАктивныеПользователи = Истина; + КонецЕсли; + + МассивСеансов = ПолучитьСеансыИнформационнойБазы(); + Если МассивСеансов.Количество() = 1 Тогда + Возврат Результат; + КонецЕсли; + + Результат.НаличиеАктивныхСоединений = Истина; + + Для Каждого Сеанс Из МассивСеансов Цикл + Если ЭтоCOMСоединение(Сеанс) Тогда + Результат.НаличиеCOMСоединений = Истина; + ИначеЕсли ЭтоСеансКонфигуратором(Сеанс) Тогда + Результат.НаличиеСоединенияКонфигуратором = Истина; + КонецЕсли; + КонецЦикла; + Возврат Результат; КонецФункции @@ -916,48 +955,3 @@ Возврат ВРег(СеансИнформационнойБазы.ИмяПриложения) = ВРег("COMConnection"); КонецФункции - -&НаСервереБезКонтекста -Функция НаличиеСоединенияКонфигуратором() - - МассивСеансов = ПолучитьСеансыИнформационнойБазы(); - Для Каждого Сеанс Из МассивСеансов Цикл - Если ЭтоСеансКонфигуратором(Сеанс) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; - -КонецФункции - -&НаСервереБезКонтекста -Функция НаличиеCOMСоединений() - - МассивСеансов = ПолучитьСеансыИнформационнойБазы(); - Для Каждого Cеанс Из МассивСеансов Цикл - Если ЭтоCOMСоединение(Cеанс) Тогда - Возврат Истина; - КонецЕсли; - КонецЦикла; - Возврат Ложь; - -КонецФункции - -&НаСервереБезКонтекста -Функция НаличиеАктивныхСоединений(СообщенияДляЖурналаРегистрации = Неопределено) - - // запись накопленных событий ЖР - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - Возврат ПолучитьСеансыИнформационнойБазы().Количество() > 1; - -КонецФункции - -&НаСервереБезКонтекста -Функция ЕстьАктивныеПользователи(СообщенияДляЖурналаРегистрации = Неопределено) - - // запись накопленных событий ЖР - ОбщегоНазначения.ЗаписатьСобытияВЖурналРегистрации(СообщенияДляЖурналаРегистрации); - УстановитьПривилегированныйРежим(Истина); - Возврат ПользователиИнформационнойБазы.ПолучитьПользователей().Количество() > 0; - -Конецфункции diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt index 3eef5633a..91bb2b3ae 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаВосстановления/Template.txt @@ -1,181 +1,163 @@ <html> - <head> -<meta http-equiv="Content-Language" content="ru-ru"> -<meta http-equiv="Content-Type" content="text/html; charset=unicode"> -<title>Восстановление данных из резервной копии... + + + Восстановление данных из резервной копии... + + + + - - + if (createBackup) + oFileSystemObject.DeleteFile(TempCatalog + '\\1Cv8.1CD'); + } + catch (e) { } + } + + - - - -
            - -
            - -
            - Пожалуйста, подождите. Выполняется восстановление базы данных из резервной копии. Не рекомендуется останавливать процесс. -
            - -
            -   -
            - + +
            + +
            +
            + Пожалуйста, подождите.
            + Выполняется восстановление базы данных
            + из резервной копии.
            + Не рекомендуется останавливать процесс. +
            +
            +   +
            - \ No newline at end of file diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt index 3c2b2b457..d259c1d8e 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/ЗаставкаРезервногоКопирования/Template.txt @@ -1,177 +1,157 @@ - - - -Резервное копирование информационной базы... + + + Резервное копирование информационной базы... + + + + - - + - - - -
            - -
            - -
            - Пожалуйста, подождите. Выполняется резервное копирование базы. Не рекомендуется останавливать процесс. -
            - -
            -   -
            - + +
            + +
            +
            + Пожалуйста, подождите.
            + Выполняется резервное копирование базы.
            + Не рекомендуется останавливать процесс. +
            +
            +   +
            - - \ No newline at end of file + diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt index 10b229194..d97808279 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаЗагрузкаИБ/Template.txt @@ -57,7 +57,6 @@ var ComConnection = null; // Переменные состояния функции doDisconnectAndBlockUsersHTA() var disconnectionStep = 0; -var connection = null; var disconnectionInterval; var disconnectionStartDateTime; @@ -231,7 +230,10 @@ function finalize(success) write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации setResult(success); - + + // очистка глобального COM-соединения + ComConnection = null; + } function createConnection() @@ -674,7 +676,11 @@ function disconnectAndBlockUsers() var result = 0; if (doBlockUsers) result = doDisconnectAndBlockUsers(); + + ComConnection = null; CollectGarbage(); // освобождает соединения с COM-объектом + WScript.Sleep(1000); // ждем 1 секунду (достаточно для завершения COM-соединения). + if (result == 0 && doBlockUsers) connectionsDenied = true; return result; diff --git a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt index 175d85959..9293d4c09 100644 --- a/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt +++ b/SSL/src/DataProcessors/РезервноеКопированиеИБ/Templates/МакетФайлаРезервногоКопирования/Template.txt @@ -51,7 +51,6 @@ var ComConnection = null; // Переменные состояния функции doDisconnectAndBlockUsersHTA() var disconnectionStep = 0; -var connection = null; var disconnectionInterval; var disconnectionStartDateTime; @@ -245,7 +244,9 @@ function finalize(success) write1CEventLog(); // Запись всей информации из log-файла в журнал регистрации setResult(success); - + + // очистка глобального COM-соединения + ComConnection = null; } function createConnection() @@ -547,6 +548,7 @@ function disconnectAndBlockUsersHTA() { if (result != -1) { + ComConnection = null; connection = null; CollectGarbage(); // освобождает соединения с COM-объектом } @@ -580,7 +582,7 @@ function doDisconnectAndBlockUsers() break; if (connection.ПолучитьСеансыИнформационнойБазы().Количество() <= 1) break; - WScript.Sleep(18 * 1000); + WScript.Sleep(18 * 1000); // Ждем 18 секунд до следующей проверки. now = new Date(); } @@ -625,7 +627,11 @@ function disconnectAndBlockUsers() var result = 0; if (doBlockUsers) result = doDisconnectAndBlockUsers(); + + ComConnection = null; CollectGarbage(); // освобождает соединения с COM-объектом + WScript.Sleep(1000); // ждем 1 секунду (достаточно для завершения COM-соединения). + if (result == 0 && doBlockUsers) connectionsDenied = true; return result; diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl index ef066b849..13dde3dcc 100644 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/Forms/Форма/Module.bsl @@ -146,7 +146,7 @@ НСтр("ru = 'Выполняется формирование печатной формы...'")); Состояние(ТекстСообщения); - МакетИДанныеОбъекта = УправлениеПечатью.ПолучитьМакетыИДанныеОбъектов(ИмяМенеджераПечати, ИмяМакета, Субъекты); + МакетИДанныеОбъекта = УправлениеПечатьюВызовСервера.ПолучитьМакетыИДанныеОбъектов(ИмяМенеджераПечати, ИмяМакета, Субъекты); Для Каждого Субъект Из Субъекты Цикл НапечататьСогласиеНаОбработкуПерсональныхДанныхСубъекта(Строка(Субъект.ФИО) + Строка(Субъект.Адрес) + Строка(Субъект.ПаспортныеДанные), МакетИДанныеОбъекта, ИмяМакета, МакетИДанныеОбъекта.ЛокальныйКаталогФайловПечати); diff --git a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl index a0fac6083..f1ac22f8a 100644 --- a/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl +++ b/SSL/src/DataProcessors/СогласиеНаОбработкуПерсональныхДанных/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + /////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ПОДГОТОВКИ ПЕЧАТНЫХ ФОРМ @@ -156,3 +158,5 @@ Возврат ОписаниеОбластей; КонецФункции // ПолучитьОписаниеОбластейМакетаОфисногоДокумента + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html index 5cbf20710..aba76cd93 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

            diff --git a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl index 1b621abff..1e4f8698d 100644 --- a/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl +++ b/SSL/src/DataProcessors/СопоставлениеОбъектовИнформационныхБаз/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем ПолеТаблицаСопоставления; Перем ПолеИнформацияСтатистикиСопоставленияОбъектов; Перем ПолеДайджестСопоставления; @@ -1866,3 +1868,5 @@ Возврат Реквизит.Тип = ТипСтрокаНеограниченнойДлины(); КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl b/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl index e6443f206..13daeb454 100644 --- a/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl +++ b/SSL/src/DataProcessors/СписокРеспондента/Forms/АрхивАнкет/Module.bsl @@ -52,7 +52,7 @@ &НаСервере Процедура УстановитьРеспондентаСогласноТекущемуВнешнемуПользователю() - Объект.Респондент = ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(ВнешниеПользователи.ТекущийВнешнийПользователь()); + Объект.Респондент = ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(); УстановитьПараметрыДинамическогоСпискаДереваАнкет(); КонецПроцедуры diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl index dcac0bf47..f455da241 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаEMAIL/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем СтрокаСообщенияОбОшибке Экспорт; Перем СтрокаСообщенияОбОшибкеЖР Экспорт; @@ -608,3 +610,5 @@ ИмяОбъекта = НСтр("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 5a0f11973..bd23f405e 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFILE/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем СтрокаСообщенияОбОшибке Экспорт; Перем СтрокаСообщенияОбОшибкеЖР Экспорт; @@ -578,3 +580,5 @@ ИмяОбъекта = НСтр("ru = 'Обработка: %1'"); ИмяОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяОбъекта, Метаданные().Имя); + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl index 27ccdb159..80231afeb 100644 --- a/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl +++ b/SSL/src/DataProcessors/ТранспортСообщенийОбменаFTP/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем СтрокаСообщенияОбОшибке Экспорт; Перем СтрокаСообщенияОбОшибкеЖР Экспорт; @@ -725,3 +727,5 @@ ИмяОбъекта = НСтр("ru = 'Обработка: %1'"); ИмяОбъекта = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ИмяОбъекта, Метаданные().Имя); + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form index 0a68a82e1..f559e6276 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Form.form @@ -32,7 +32,7 @@ РежимУдаленияРасширеннаяПодсказка - 67 + 72 Label true true @@ -88,7 +88,7 @@ ВыборРежимаУдаленияРасширеннаяПодсказка - 66 + 71 Label true true @@ -123,6 +123,7 @@ false Top Add + Change Copy Delete EndEdit @@ -153,7 +154,7 @@ ПометкаРасширеннаяПодсказка - 85 + 92 Label true true @@ -184,7 +185,7 @@ ПредставлениеРасширеннаяПодсказка - 87 + 94 Label true true @@ -198,6 +199,7 @@ true InputField + true Enter Left @@ -227,7 +229,7 @@ СтрокаСпискаПомеченныхРасширеннаяПодсказка - 84 + 91 Label true true @@ -260,7 +262,7 @@ false КомандаСписокПомеченныхУстановитьВсеРасширеннаяПодсказка - 71 + 76 Label true true @@ -296,7 +298,7 @@ false КомандаСписокПомеченныхСнятьВсеРасширеннаяПодсказка - 72 + 77 Label true true @@ -336,7 +338,7 @@ КомандыВыбораРасширеннаяПодсказка - 70 + 75 Label true true @@ -364,7 +366,7 @@ СтандартныеКомандыРасширеннаяПодсказка - 73 + 78 Label true true @@ -376,6 +378,58 @@ Item.СписокПомеченныхНаУдаление
            + + СписокПомеченныхНаУдалениеИзменитьОбъект + 68 + true + true + + true + + + СписокПомеченныхНаУдалениеИзменитьОбъектРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + Form.Command.ИзменитьОбъект + Normal + Auto + true + true + UserCmds + Auto + + + СписокПомеченныхНаУдалениеВывестиСписок + 65 + true + true + + true + + + СписокПомеченныхНаУдалениеВывестиСписокРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.Item.СписокПомеченныхНаУдаление.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + Left @@ -384,10 +438,10 @@ СписокПомеченныхНаУдалениеСтрокаПоиска - 75 + 82 СписокПомеченныхНаУдалениеСтрокаПоискаРасширеннаяПодсказка - 77 + 84 Label true true @@ -397,7 +451,7 @@ СписокПомеченныхНаУдалениеСтрокаПоискаКонтекстноеМеню - 76 + 83 true СписокПомеченныхНаУдаление @@ -407,10 +461,10 @@ СписокПомеченныхНаУдалениеСостояниеПросмотра - 78 + 85 СписокПомеченныхНаУдалениеСостояниеПросмотраРасширеннаяПодсказка - 80 + 87 Label true true @@ -420,7 +474,7 @@ СписокПомеченныхНаУдалениеСостояниеПросмотраКонтекстноеМеню - 79 + 86 true ViewStatusAddition @@ -431,10 +485,10 @@ СписокПомеченныхНаУдалениеУправлениеПоиском - 81 + 88 СписокПомеченныхНаУдалениеУправлениеПоискомРасширеннаяПодсказка - 83 + 90 Label true true @@ -444,7 +498,7 @@ СписокПомеченныхНаУдалениеУправлениеПоискомКонтекстноеМеню - 82 + 89 true SearchControlAddition @@ -455,7 +509,7 @@ СписокПомеченныхНаУдалениеРасширеннаяПодсказка - 74 + 81 Label true true @@ -508,7 +562,7 @@ ПомеченныеНаУдалениеРасширеннаяПодсказка - 69 + 74 Label true true @@ -543,6 +597,7 @@ false Top Add + Change Copy Delete EndEdit @@ -566,7 +621,7 @@ ПредставлениеОставшегосяРасширеннаяПодсказка - 109 + 117 Label true true @@ -580,6 +635,7 @@ true InputField + true Enter true Left @@ -600,16 +656,16 @@ ДеревоОставшихсяОбъектовКоманднаяПанель 42 - ДеревоОставшихсяОбъектовИзменить - 58 + ДеревоОставшихсяОбъектовИзменитьОбъект + 69 true true true - ДеревоОставшихсяОбъектовИзменитьРасширеннаяПодсказка - 98 + ДеревоОставшихсяОбъектовИзменитьОбъектРасширеннаяПодсказка + 105 Label true true @@ -617,9 +673,35 @@ Left - Form.Item.ДеревоОставшихсяОбъектов.StandardCommand.Change + Form.Command.ИзменитьОбъект Normal - PictureAndText + Auto + true + true + UserCmds + Auto + + + ДеревоОставшихсяОбъектовВывестиСписок + 67 + true + true + + true + + + ДеревоОставшихсяОбъектовВывестиСписокРасширеннаяПодсказка + 106 + Label + true + true + + Left + + + Form.Item.ДеревоОставшихсяОбъектов.StandardCommand.OutputList + Normal + Auto true true UserCmds @@ -638,10 +720,10 @@ ДеревоОставшихсяОбъектовСтрокаПоиска - 100 + 108 ДеревоОставшихсяОбъектовСтрокаПоискаРасширеннаяПодсказка - 102 + 110 Label true true @@ -651,7 +733,7 @@ ДеревоОставшихсяОбъектовСтрокаПоискаКонтекстноеМеню - 101 + 109 true ДеревоОставшихсяОбъектов @@ -661,10 +743,10 @@ ДеревоОставшихсяОбъектовСостояниеПросмотра - 103 + 111 ДеревоОставшихсяОбъектовСостояниеПросмотраРасширеннаяПодсказка - 105 + 113 Label true true @@ -674,7 +756,7 @@ ДеревоОставшихсяОбъектовСостояниеПросмотраКонтекстноеМеню - 104 + 112 true ViewStatusAddition @@ -685,10 +767,10 @@ ДеревоОставшихсяОбъектовУправлениеПоиском - 106 + 114 ДеревоОставшихсяОбъектовУправлениеПоискомРасширеннаяПодсказка - 108 + 116 Label true true @@ -698,7 +780,7 @@ ДеревоОставшихсяОбъектовУправлениеПоискомКонтекстноеМеню - 107 + 115 true SearchControlAddition @@ -709,7 +791,7 @@ ДеревоОставшихсяОбъектовРасширеннаяПодсказка - 99 + 107 Label true true @@ -769,7 +851,7 @@ true ПричиныНевозможностиУдаленияРасширеннаяПодсказка - 97 + 104 Label true true @@ -803,7 +885,7 @@ КартинкаДлительнаяОперацияРасширеннаяПодсказка - 121 + 129 Label true true @@ -839,7 +921,7 @@ УдалениеПомеченныхОбъектовРасширеннаяПодсказка - 122 + 130 Label true true @@ -875,7 +957,7 @@ ОсновнаяГруппаДлительнойОперацииРасширеннаяПодсказка - 120 + 128 Label true true @@ -907,7 +989,7 @@ ДлительнаяОперацияРасширеннаяПодсказка - 119 + 127 Label true true @@ -937,7 +1019,7 @@ true СтраницыФормыРасширеннаяПодсказка - 65 + 70 Label true true @@ -968,7 +1050,7 @@ false КомандаНазадРасширеннаяПодсказка - 124 + 132 Label true true @@ -999,7 +1081,7 @@ false КомандаДалееРасширеннаяПодсказка - 125 + 133 Label true true @@ -1035,7 +1117,7 @@ false КомандаУдалитьРасширеннаяПодсказка - 126 + 134 Label true true @@ -1075,7 +1157,7 @@ false ЗакрытьРасширеннаяПодсказка - 127 + 135 Label true true @@ -1110,7 +1192,7 @@ false СправкаРасширеннаяПодсказка - 128 + 136 Label true true @@ -1151,7 +1233,7 @@ true КомандыФормыРасширеннаяПодсказка - 123 + 131 Label true true @@ -1360,6 +1442,7 @@ 2 + ValueList String AnyRef @@ -1648,6 +1731,32 @@ Auto Auto + + ИзменитьОбъект + + <key>ru</key> + <value>Изменить</value> + + 6 + + ru + Изменить объект + + + true + + + StdPicture.Change + + + + ИзменитьОбъект + + + TextPicture + Auto + Auto + diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl index 2f325e5e2..9ade9cdc6 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Forms/ОсновнаяФорма/Module.bsl @@ -1,3 +1,4 @@ + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -12,21 +13,16 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте Процедура РежимУдаленияПриИзменении(Элемент) - ДоступностьКнопок(); + ОбновитьДоступностьКнопок(); КонецПроцедуры -// Обработчик события "при изменнии" поля "Пометка" -// Вызывает рекурсивную функцию, устанавливающую зависимые флажки пометок -// в родительских и дочерних элементах -// &НаКлиенте Процедура ПометкаПриИзменении(Элемент) @@ -40,38 +36,30 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "Список помеченных на удаление" +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокПомеченныхНаУдаление -// Обработчик события "выбор" строки дерева СписокПомеченныхНаУдаление -// Пытается открыть выбранное значение -// &НаКлиенте Процедура СписокПомеченныхНаУдалениеВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - Если Элемент.ТекущиеДанные <> Неопределено Тогда - ОткрытьЗначение(Элемент.ТекущиеДанные.Значение); + Если Элемент.ТекущиеДанные <> Неопределено Тогда + ОткрытьЗначениеПоТипу(Элемент.ТекущиеДанные.Значение); КонецЕсли; КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ "Дерево оставшихся объектов" +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоОставшихсяОбъектов -// Обработчик события "выбор" строки дерева ДеревоОставшихсяОбъектов -// Пытается открыть выбранное значение -// &НаКлиенте Процедура ДеревоОставшихсяОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Если Элемент.ТекущиеДанные <> Неопределено Тогда - ОткрытьЗначение(Элемент.ТекущиеДанные.Значение); + ОткрытьЗначениеПоТипу(Элемент.ТекущиеДанные.Значение); КонецЕсли; КонецПроцедуры @@ -87,14 +75,9 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ -// Обработчик нажания на кнопку "установить все" командной панели списка -// дерева СписокПомеченныхНаУдаление. -// Устанавливает пометку всем найденым объектам -// &НаКлиенте Процедура КомандаСписокПомеченныхУстановитьВсе() @@ -109,10 +92,6 @@ КонецПроцедуры -// Обработчик нажания на кнопку "снять все" командной панели списка -// дерева СписокПомеченныхНаУдаление. -// Снимает пометку у всех найденых объектов -// &НаКлиенте Процедура КомандаСписокПомеченныхСнятьВсе() @@ -127,8 +106,24 @@ КонецПроцедуры -// Обработчик нажатия на кнопку "Далее" командной панели формы -// +&НаКлиенте +Процедура ИзменитьОбъект(Команда) + + Если ТекущийЭлемент = Неопределено Тогда + Возврат; + КонецЕсли; + + Если ТекущийЭлемент <> Элементы.СписокПомеченныхНаУдаление И ТекущийЭлемент <> Элементы.ДеревоОставшихсяОбъектов Тогда + Возврат; + КонецЕсли; + + Если ТекущийЭлемент.ТекущиеДанные <> Неопределено + И ТипЗнч(ТекущийЭлемент.ТекущиеДанные.Значение) <> Тип("Строка") Тогда + ОткрытьЗначение(ТекущийЭлемент.ТекущиеДанные.Значение); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ВыполнитьДалее() @@ -147,33 +142,29 @@ КонецЕсли; Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ПомеченныеНаУдаление; - ДоступностьКнопок(); + ОбновитьДоступностьКнопок(); КонецЕсли; КонецПроцедуры -// Обработчик нажатия на кнопку "Назад" командной панели формы -// &НаКлиенте Процедура ВыполнитьНазад() ТекущаяСтраница = Элементы.СтраницыФормы.ТекущаяСтраница; Если ТекущаяСтраница = Элементы.ПомеченныеНаУдаление Тогда Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыборРежимаУдаления; - ДоступностьКнопок(); + ОбновитьДоступностьКнопок(); ИначеЕсли ТекущаяСтраница = Элементы.ПричиныНевозможностиУдаления Тогда Если РежимУдаления = "Полный" Тогда Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ВыборРежимаУдаления; Иначе Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ПомеченныеНаУдаление; КонецЕсли; - ДоступностьКнопок(); + ОбновитьДоступностьКнопок(); КонецЕсли; КонецПроцедуры -// Обработчик нажатия на кнопку "Удалить" командной панели формы -// &НаКлиенте Процедура ВыполнитьУдаление() @@ -200,10 +191,44 @@ КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Функция ЗначениеПоТипу(Значение) + + ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Значение)); + + Если ОбъектМетаданных <> Неопределено + И ОбщегоНазначения.ЭтоРегистр(ОбъектМетаданных) Тогда + + Список = Новый СписокЗначений; + Список.Добавить(Значение, ОбъектМетаданных.ПолноеИмя()); + Возврат Список; + КонецЕсли; + + Возврат Значение; + +КонецФункции + +&НаКлиенте +Процедура ОткрытьЗначениеПоТипу(Значение) + + Если ТипЗнч(Значение) = Тип("СписокЗначений") Тогда + ОписаниеЗначения = Значение.Получить(0); + + ПараметрыФормы = Новый Структура; + ПараметрыФормы.Вставить("Ключ", ОписаниеЗначения.Значение); + + ОткрытьФормуМодально( + ОписаниеЗначения.Представление + ".ФормаЗаписи", + ПараметрыФормы); + Иначе + ОткрытьЗначение(Значение); + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОбновитьСодержание(Результат, СообщениеОбОшибке, ТипыУдаленныхОбъектов) @@ -236,7 +261,7 @@ Идентификатор = Элемент.ПолучитьИдентификатор(); Элементы.ДеревоОставшихсяОбъектов.Развернуть(Идентификатор, Ложь); КонецЦикла; - ДоступностьКнопок(); + ОбновитьДоступностьКнопок(); Предупреждение(СтрокаРезультатов); КонецЕсли; @@ -251,13 +276,10 @@ КонецЕсли; КонецЕсли; -КонецПроцедуры +КонецПроцедуры -// Изменяет доступность кнопок на форме в зависимости от -// текущей страницы и состояния реквизитов формы -// &НаКлиенте -Процедура ДоступностьКнопок() +Процедура ОбновитьДоступностьКнопок() ТекущаяСтраница = Элементы.СтраницыФормы.ТекущаяСтраница; @@ -282,9 +304,8 @@ КонецПроцедуры -// Возвращает веть дерева в ветви СтрокиДерева по значениею Значние -// Если ветвь не найдена - создается новая -// +// Возвращает веть дерева в ветви СтрокиДерева по значению Значение. +// Если ветвь не найдена - создается новая. &НаСервере Функция НайтиИлиДобавитьВетвьДерева(СтрокиДерева, Значение, Представление, Пометка) @@ -294,7 +315,7 @@ Если Ветвь = Неопределено Тогда // Такой ветки нет, создадим новую Ветвь = СтрокиДерева.Добавить(); - Ветвь.Значение = Значение; + Ветвь.Значение = ЗначениеПоТипу(Значение); Ветвь.Представление = Представление; Ветвь.Пометка = Пометка; КонецЕсли; @@ -311,7 +332,7 @@ Если Ветвь = Неопределено Тогда // Такой ветки нет, создадим новую Ветвь = СтрокиДерева.Добавить(); - Ветвь.Значение = Значение; + Ветвь.Значение = ЗначениеПоТипу(Значение); Ветвь.Представление = Представление; Ветвь.НомерКартинки = НомерКартинки; КонецЕсли; @@ -320,8 +341,6 @@ КонецФункции -// Заполняет дерево объектов помеченных на удаление -// &НаСервере Процедура ЗаполнениеДереваПомеченныхНаУдаление() @@ -353,9 +372,6 @@ КонецПроцедуры -// Рекурсивная функция, снимающая / устанавливающая пометки -// для зависимых родительских и дочерних элементов -// &НаКлиенте Процедура УстановитьПометкуВСписке(Данные, Пометка, ПроверятьРодителя) @@ -391,9 +407,8 @@ КонецПроцедуры -// Производит попытку удаления выбранных объектов -// Объекты, которые не были удалены показываются в отдельной таблице -// +// Производит попытку удаления выбранных объектов. +// Объекты, которые не были удалены показываются в отдельной таблице. &НаСервере Функция УдалениеВыбранныхНаСервере(ТипыУдаленныхОбъектов) @@ -444,7 +459,7 @@ Попытка Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.ДлительнаяОперация Тогда - Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда Результат = ЗаполнитьРезультаты(АдресХранилища, Новый Структура); ТипыУдаленныхОбъектов = Неопределено; ОбновитьСодержание(Результат.РезультатУдаления, Результат.РезультатУдаления.Значение, Результат.РезультатУдаления.ТипыУдаленныхОбъектов); @@ -460,7 +475,14 @@ ВызватьИсключение; КонецПопытки; -КонецПроцедуры +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции &НаСервере Функция ЗаполнитьДеревоОставшихсяОбъектов(Результат) @@ -519,4 +541,5 @@ Строка(КоличествоНеУдаленныхОбъектов)); КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html index 5815aaec0..e33400d12 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            • "Автоматическое удаление всех объектов" - производится попытка автоматического удаления всех объектов, помеченных на удаление. diff --git a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl index 34c8feff5..9afbb6d36 100644 --- a/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl +++ b/SSL/src/DataProcessors/УдалениеПомеченныхОбъектов/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -182,7 +184,7 @@ УстановитьПривилегированныйРежим(Ложь); Исключение СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - УстановитьМонопольныйРежим(Ложь); + ОбщегоНазначения.РазблокироватьИБ(); Возврат ЗаполнитьСтатусОперации(СообщениеОбОшибке, Ложь); КонецПопытки; @@ -233,27 +235,27 @@ КонецЕсли; Если ВедущиеИзмерения.Количество() > 0 Тогда - УдаляемыйОбъектТолькоВВедущихИзмерениях = Истина; + УдаляемыйОбъектВВедущемИзмерении = Ложь; + ИзмеренияРегистра = ИзмеренияРегистров[ПолноеИмяЗависимогоОбъекта]; НаборЗаписей = НаборыЗаписей[ПолноеИмяЗависимогоОбъекта]; Для каждого Измерение Из ИзмеренияРегистра Цикл НаборЗаписей.Отбор[Измерение].Установить(СтрокаТаблицы.Данные[Измерение]); КонецЦикла; НаборЗаписей.Прочитать(); + Если НаборЗаписей.Количество() > 0 Тогда - ТаблицаЗаписи = НаборЗаписей.Выгрузить(); - Запись = ТаблицаЗаписи[0]; - Для каждого Колонка Из ТаблицаЗаписи.Колонки Цикл + Запись = НаборЗаписей[0]; + Для каждого ВедущееИзмерение Из ВедущиеИзмерения Цикл - Если Запись[Колонка.Имя] = СтрокаТаблицы.Ссылка - И ВедущиеИзмерения[Колонка.Имя] = Неопределено Тогда - - УдаляемыйОбъектТолькоВВедущихИзмерениях = Ложь; + Если Запись[ВедущееИзмерение.Ключ] = СтрокаТаблицы.Ссылка Тогда + УдаляемыйОбъектВВедущемИзмерении = Истина; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; - Если УдаляемыйОбъектТолькоВВедущихИзмерениях Тогда + + Если УдаляемыйОбъектВВедущемИзмерении Тогда Продолжить; КонецЕсли; КонецЕсли; @@ -284,7 +286,7 @@ УстановитьПривилегированныйРежим(Ложь); Исключение СообщениеОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - УстановитьМонопольныйРежим(Ложь); + ОбщегоНазначения.РазблокироватьИБ(); Возврат ЗаполнитьСтатусОперации(СообщениеОбОшибке, Ложь); КонецПопытки; @@ -307,3 +309,5 @@ Возврат ЗаполнитьСтатусОперации(Новый Структура("Найденные, НеУдаленные", Найденные, НеУдаленные)); КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form new file mode 100644 index 000000000..8d09ee4fd --- /dev/null +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Form.form @@ -0,0 +1,5442 @@ + + + + ГлавнаяПанельФормы + 1 + + Выгрузка + 2 + + ГруппаФайлаПравил + 200 + + ИмяФайлаПравил + 8 + + <key>ru</key> + <value>Имя файла правил на сервере</value> + + true + true + + true + + + ИмяФайлаПравил + + + OnChange + ИмяФайлаПравилПриИзменении + + + ИмяФайлаПравилРасширеннаяПодсказка + 220 + Label + true + true + + Left + + + + ИмяФайлаПравилКонтекстноеМеню + 9 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИмяФайлаПравилОбменаНачалоВыбора + + + Opening + ИмяФайлаПравилОбменаОткрытие + + true + true + true + true + true + true + true + true + true + Normal + + + + ФормаЗагрузитьПравила + 196 + + <key>ru</key> + <value>Прочитать правила обмена</value> + + true + true + + true + + + ФормаЗагрузитьПравилаРасширеннаяПодсказка + 222 + Label + true + true + + Left + + + UsualButton + Form.Command.ПрочитатьПравилаОбмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа файла правил</value> + + + ru + Группа файла правил + + + ГруппаФайлаПравилРасширеннаяПодсказка + 219 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ПрямаяВыгрузка + 14 + true + true + + true + + + ПрямаяВыгрузка + + None + + OnChange + ПрямаяВыгрузкаПриИзменении + + + ПрямаяВыгрузкаРасширеннаяПодсказка + 223 + Label + true + true + + Left + + + + ПрямаяВыгрузкаКонтекстноеМеню + 15 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Выгрузка в файл обмена + + + 0 + + + + + ru + Подключение и выгрузка данных в ИБ приемник + + + 1 + + + Vertical + + + + ПараметрыВыгрузки + 63 + + ВыгрузкаВФайл + 6 + + ИмяФайлаДанных + 16 + + <key>ru</key> + <value>Имя файла данных на сервере</value> + + true + true + + true + + + ИмяФайлаДанных + + + OnChange + ИмяФайлаДанныхПриИзменении + + + ИмяФайлаДанныхРасширеннаяПодсказка + 227 + Label + true + true + + Left + + + + ИмяФайлаДанныхКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИмяФайлаДанныхНачалоВыбора + + + Opening + ИмяФайлаДанныхОткрытие + + true + true + true + true + true + true + true + true + true + Normal + + + + АрхивироватьФайл + 18 + + <key>ru</key> + <value>Сжимать исходящий файл обмена данными</value> + + true + true + + true + + + Объект.АрхивироватьФайл + + Right + + OnChange + АрхивироватьФайлПриИзменении + + + АрхивироватьФайлРасширеннаяПодсказка + 229 + Label + true + true + + Left + + + + АрхивироватьФайлКонтекстноеМеню + 19 + true + + CheckBoxField + Enter + true + Left + true + + + + ПарольДляСжатияФайлаОбмена + 20 + true + true + + true + + + Объект.ПарольДляСжатияФайлаОбмена + + + ПарольДляСжатияФайлаОбменаРасширеннаяПодсказка + 231 + Label + true + true + + Left + + + + ПарольДляСжатияФайлаОбменаКонтекстноеМеню + 21 + true + + InputField + Enter + true + Left + true + + 23 + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + ru + Выгрузка в файл + + + ВыгрузкаВФайлРасширеннаяПодсказка + 226 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + ВыгрузкаВИБПриемник + 7 + + ТипПлатформа + 26 + + ТипИнформационнойБазыДляПодключения + 22 + + <key>ru</key> + <value>Тип информационной базы</value> + + true + true + + true + + + Объект.ТипИнформационнойБазыДляПодключения + + + OnChange + ТипИнформационнойБазыДляПодключенияПриИзменении + + + ТипИнформационнойБазыДляПодключенияРасширеннаяПодсказка + 235 + Label + true + true + + Left + + + + ТипИнформационнойБазыДляПодключенияКонтекстноеМеню + 23 + true + + InputField + Enter + true + Left + true + + 41 + true + true + true + true + false + + ru + БЛ='На сервере 1С:Предприятия'; БИ='На данном компьютере или на компьютере в локальной сети' + + true + true + + + ru + На сервере 1С:Предприятия + + + + + + ru + На данном компьютере или на компьютере в локальной сети + + + true + + + Normal + + + + ВерсияПлатформыИнформационнойБазыДляПодключения + 24 + + <key>ru</key> + <value>Платформа</value> + + true + true + + true + + + Объект.ВерсияПлатформыИнформационнойБазыДляПодключения + + + OnChange + ВерсияПлатформыИнформационнойБазыДляПодключенияПриИзменении + + + ВерсияПлатформыИнформационнойБазыДляПодключенияРасширеннаяПодсказка + 237 + Label + true + true + + Left + + + + ВерсияПлатформыИнформационнойБазыДляПодключенияКонтекстноеМеню + 25 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + ru + 8.0 + + + V8 + + + + + ru + 8.1 + + + V81 + + + + + ru + 8.2 + + + V82 + + + Normal + + + true + true + + true + + + ru + Тип платформа + + true + + ТипПлатформаРасширеннаяПодсказка + 234 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ТипБазы + 64 + + ФайловаяБаза + 38 + + КаталогИнформационнойБазыДляПодключения + 27 + true + true + + true + + + Объект.КаталогИнформационнойБазыДляПодключения + + + КаталогИнформационнойБазыДляПодключенияРасширеннаяПодсказка + 241 + Label + true + true + + Left + + + + КаталогИнформационнойБазыДляПодключенияКонтекстноеМеню + 28 + true + + InputField + Enter + true + Left + true + + + StartChoice + КаталогИнформационнойБазыДляПодключенияНачалоВыбора + + + Opening + КаталогИнформационнойБазыДляПодключенияОткрытие + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Файловая база</value> + + + ru + Файловая база + + + ФайловаяБазаРасширеннаяПодсказка + 240 + Label + true + true + + Left + + + Page + + auto + + + + БазаНаСервере + 39 + + ИмяСервераИнформационнойБазыДляПодключения + 40 + + <key>ru</key> + <value>Имя сервера 1С:Предприятия</value> + + true + true + + true + + + Объект.ИмяСервераИнформационнойБазыДляПодключения + + + ИмяСервераИнформационнойБазыДляПодключенияРасширеннаяПодсказка + 244 + Label + true + true + + Left + + + + ИмяСервераИнформационнойБазыДляПодключенияКонтекстноеМеню + 41 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ИмяИнформационнойБазыНаСервереДляПодключения + 42 + + <key>ru</key> + <value>Информационная база</value> + + true + true + + true + + + Объект.ИмяИнформационнойБазыНаСервереДляПодключения + + + ИмяИнформационнойБазыНаСервереДляПодключенияРасширеннаяПодсказка + 246 + Label + true + true + + Left + + + + ИмяИнформационнойБазыНаСервереДляПодключенияКонтекстноеМеню + 43 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ru + База на сервере + + + БазаНаСервереРасширеннаяПодсказка + 243 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Тип базы</value> + + + ru + Тип базы + + + ТипБазыРасширеннаяПодсказка + 239 + Label + true + true + + Left + + + Pages + + Auto + + + + АутентификацияТест + 31 + + АутентификацияWindowsИнформационнойБазыДляПодключения + 29 + + <key>ru</key> + <value>Аутентификация Windows</value> + + true + true + + true + + + Объект.АутентификацияWindowsИнформационнойБазыДляПодключения + + Right + + OnChange + АутентификацияWindowsИнформационнойБазыДляПодключенияПриИзменении + + + АутентификацияWindowsИнформационнойБазыДляПодключенияРасширеннаяПодсказка + 249 + Label + true + true + + Left + + + + АутентификацияWindowsИнформационнойБазыДляПодключенияКонтекстноеМеню + 30 + true + + CheckBoxField + Enter + true + Left + true + + + + ТестПодключения + 32 + true + true + + true + + + ТестПодключенияРасширеннаяПодсказка + 251 + Label + true + true + + Left + + + UsualButton + Form.Command.ТестПодключения + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ru + Аутентификация тест + + + АутентификацияТестРасширеннаяПодсказка + 248 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ПользовательПароль + 33 + + ПользовательИнформационнойБазыДляПодключения + 34 + + <key>ru</key> + <value>Пользователь</value> + + true + true + + true + + + Объект.ПользовательИнформационнойБазыДляПодключения + + + ПользовательИнформационнойБазыДляПодключенияРасширеннаяПодсказка + 253 + Label + true + true + + Left + + + + ПользовательИнформационнойБазыДляПодключенияКонтекстноеМеню + 35 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + ПарольИнформационнойБазыДляПодключения + 36 + + <key>ru</key> + <value>Пароль</value> + + true + true + + true + + + Объект.ПарольИнформационнойБазыДляПодключения + + + ПарольИнформационнойБазыДляПодключенияРасширеннаяПодсказка + 255 + Label + true + true + + Left + + + + ПарольИнформационнойБазыДляПодключенияКонтекстноеМеню + 37 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + true + Normal + + + true + true + + true + + + ru + Пользователь пароль + + + ПользовательПарольРасширеннаяПодсказка + 252 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + ru + Выгрузка ВИБПриемник + + + ВыгрузкаВИБПриемникРасширеннаяПодсказка + 233 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Параметры выгрузки</value> + + + ru + Параметры выгрузки + + + ПараметрыВыгрузкиРасширеннаяПодсказка + 225 + Label + true + true + + Left + + + Pages + + Auto + + + + ФормаВыполнитьВыгрузку + 191 + + <key>ru</key> + <value>Выгрузить данные</value> + + true + true + + true + + + ФормаВыполнитьВыгрузкуРасширеннаяПодсказка + 257 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыполнитьВыгрузку + Normal + Auto + true + true + UserCmds + Auto + + + ПанельВыгрузки + 45 + + ВыгружаемыеДанные + 46 + + ТаблицаПравилВыгрузки + 133 + true + true + + true + + + Объект.ТаблицаПравилВыгрузки + + None + + ГруппаПометки + 142 + + Пометка + 140 + true + true + + true + + + Объект.ТаблицаПравилВыгрузки.Включить + + None + + ПометкаРасширеннаяПодсказка + 276 + Label + true + true + + Left + + + + ПометкаКонтекстноеМеню + 141 + true + + CheckBoxField + Auto + true + Left + true + + + + ПВД + 136 + true + true + + true + + + Объект.ТаблицаПравилВыгрузки.Наименование + + + ПВДРасширеннаяПодсказка + 278 + Label + true + true + + Left + + + + ПВДКонтекстноеМеню + 137 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + ГруппаПометкиРасширеннаяПодсказка + 275 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + СсылкаНаУзелОбмена + 138 + + <key>ru</key> + <value>Узел обмена</value> + + true + true + + true + + + Объект.ТаблицаПравилВыгрузки.СсылкаНаУзелОбмена + + + СсылкаНаУзелОбменаРасширеннаяПодсказка + 280 + Label + true + true + + Left + + + + СсылкаНаУзелОбменаКонтекстноеМеню + 139 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + true + Normal + + + + ТаблицаПравилВыгрузкиЭтоГруппа + 147 + true + + true + + + Объект.ТаблицаПравилВыгрузки.ЭтоГруппа + + + ТаблицаПравилВыгрузкиЭтоГруппаРасширеннаяПодсказка + 282 + Label + true + true + + Left + + + + ТаблицаПравилВыгрузкиЭтоГруппаКонтекстноеМеню + 148 + true + + CheckBoxField + Auto + true + Left + true + + + + ТаблицаПравилВыгрузкиКоманднаяПанель + 135 + + ТаблицаПравилВыгрузкиВыгрузкаОтметитьВсе + 178 + true + true + + true + + + ТаблицаПравилВыгрузкиВыгрузкаОтметитьВсеРасширеннаяПодсказка + 260 + Label + true + true + + Left + + + Form.Command.ВыгрузкаОтметитьВсе + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаПравилВыгрузкиВыгрузкаОтменитьВсе + 179 + true + true + + true + + + ТаблицаПравилВыгрузкиВыгрузкаОтменитьВсеРасширеннаяПодсказка + 261 + Label + true + true + + Left + + + Form.Command.ВыгрузкаОтменитьВсе + Normal + Auto + true + true + UserCmds + Auto + + + УзлыОбмена + 180 + + ТаблицаПравилВыгрузкиВыгрузкаОчиститьУзлыОбмена + 181 + true + true + + true + + + ТаблицаПравилВыгрузкиВыгрузкаОчиститьУзлыОбменаРасширеннаяПодсказка + 263 + Label + true + true + + Left + + + Form.Command.ВыгрузкаОчиститьУзлыОбмена + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаПравилВыгрузкиВыгрузкаУстановитьУзелОбмена + 182 + true + true + + true + + + ТаблицаПравилВыгрузкиВыгрузкаУстановитьУзелОбменаРасширеннаяПодсказка + 264 + Label + true + true + + Left + + + Form.Command.ВыгрузкаУстановитьУзелОбмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Узлы обмена</value> + + + ru + Узлы обмена + + + УзлыОбменаРасширеннаяПодсказка + 262 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + Left + + + BeforeRowChange + ТаблицаПравилВыгрузкиПередНачаломИзменения + + + OnChange + ТаблицаПравилВыгрузкиПриИзменении + + + ТаблицаПравилВыгрузкиСтрокаПоиска + 266 + + ТаблицаПравилВыгрузкиСтрокаПоискаРасширеннаяПодсказка + 268 + Label + true + true + + Left + + + + ТаблицаПравилВыгрузкиСтрокаПоискаКонтекстноеМеню + 267 + true + + ТаблицаПравилВыгрузки + + true + + + + ТаблицаПравилВыгрузкиСостояниеПросмотра + 269 + + ТаблицаПравилВыгрузкиСостояниеПросмотраРасширеннаяПодсказка + 271 + Label + true + true + + Left + + + + ТаблицаПравилВыгрузкиСостояниеПросмотраКонтекстноеМеню + 270 + true + + ViewStatusAddition + ТаблицаПравилВыгрузки + + true + + + + ТаблицаПравилВыгрузкиУправлениеПоиском + 272 + + ТаблицаПравилВыгрузкиУправлениеПоискомРасширеннаяПодсказка + 274 + Label + true + true + + Left + + + + ТаблицаПравилВыгрузкиУправлениеПоискомКонтекстноеМеню + 273 + true + + SearchControlAddition + ТаблицаПравилВыгрузки + + true + + + + ТаблицаПравилВыгрузкиРасширеннаяПодсказка + 265 + Label + true + true + + Left + + + + ТаблицаПравилВыгрузкиКонтекстноеМеню + 134 + true + + Tree + true + true + true + MultiRow +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true +
              + true + true + + true + + + <key>ru</key> + <value>Выгружаемые данные</value> + + + ru + Выгружаемые данные + + + ВыгружаемыеДанныеРасширеннаяПодсказка + 259 + Label + true + true + + Left + + + Page + + Vertical + auto + +
              + + Параметры + 47 + + ТаблицаНастройкиПараметров + 58 + true + true + + true + + + Объект.ТаблицаНастройкиПараметров + + None + + ТаблицаНастройкиПараметровНаименование + 143 + true + true + + true + + + Объект.ТаблицаНастройкиПараметров.Наименование + + + ТаблицаНастройкиПараметровНаименованиеРасширеннаяПодсказка + 305 + Label + true + true + + Left + + + + ТаблицаНастройкиПараметровНаименованиеКонтекстноеМеню + 144 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + + ТаблицаНастройкиПараметровЗначение + 145 + true + true + + true + + + Объект.ТаблицаНастройкиПараметров.Значение + + + ТаблицаНастройкиПараметровЗначениеРасширеннаяПодсказка + 307 + Label + true + true + + Left + + + + ТаблицаНастройкиПараметровЗначениеКонтекстноеМеню + 146 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + Normal + + + + ТаблицаНастройкиПараметровКоманднаяПанель + 60 + + ТаблицаНастройкиПараметровВосстановитьПараметры + 61 + true + true + + true + + + ТаблицаНастройкиПараметровВосстановитьПараметрыРасширеннаяПодсказка + 293 + Label + true + true + + Left + + + Form.Command.ВосстановитьПараметры + Normal + Auto + true + true + UserCmds + Auto + + + ТаблицаНастройкиПараметровСохранитьПараметры + 62 + true + true + + true + + + ТаблицаНастройкиПараметровСохранитьПараметрыРасширеннаяПодсказка + 294 + Label + true + true + + Left + + + Form.Command.СохранитьПараметры + Normal + Auto + true + true + UserCmds + Auto + + Left + + + ТаблицаНастройкиПараметровСтрокаПоиска + 296 + + ТаблицаНастройкиПараметровСтрокаПоискаРасширеннаяПодсказка + 298 + Label + true + true + + Left + + + + ТаблицаНастройкиПараметровСтрокаПоискаКонтекстноеМеню + 297 + true + + ТаблицаНастройкиПараметров + + true + + + + ТаблицаНастройкиПараметровСостояниеПросмотра + 299 + + ТаблицаНастройкиПараметровСостояниеПросмотраРасширеннаяПодсказка + 301 + Label + true + true + + Left + + + + ТаблицаНастройкиПараметровСостояниеПросмотраКонтекстноеМеню + 300 + true + + ViewStatusAddition + ТаблицаНастройкиПараметров + + true + + + + ТаблицаНастройкиПараметровУправлениеПоиском + 302 + + ТаблицаНастройкиПараметровУправлениеПоискомРасширеннаяПодсказка + 304 + Label + true + true + + Left + + + + ТаблицаНастройкиПараметровУправлениеПоискомКонтекстноеМеню + 303 + true + + SearchControlAddition + ТаблицаНастройкиПараметров + + true + + + + ТаблицаНастройкиПараметровРасширеннаяПодсказка + 295 + Label + true + true + + Left + + + + ТаблицаНастройкиПараметровКонтекстноеМеню + 59 + 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 + +
              + true + true + + true + + + <key>ru</key> + <value>Параметры выгрузки</value> + + + ru + Параметры + + + ПараметрыРасширеннаяПодсказка + 292 + Label + true + true + + Left + + + Page + + Vertical + auto + +
              + + ЗакладкаКомментарий + 48 + + Комментарий + 49 + true + true + + true + + + Объект.Комментарий + + None + + КомментарийРасширеннаяПодсказка + 318 + Label + true + true + + Left + + + + КомментарийКонтекстноеМеню + 50 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Комментарий</value> + + + ru + Закладка комментарий + + + ЗакладкаКомментарийРасширеннаяПодсказка + 317 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель выгрузки</value> + + + ru + Панель выгрузки + + + ПанельВыгрузкиРасширеннаяПодсказка + 258 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + +
              + + ОтладкаВыгрузки + 57 + + ФлагРежимОтладкиОбработчиковВыгрузки + 54 + + <key>ru</key> + <value>Режим отладки обработчиков выгрузки</value> + + true + true + + true + + + Объект.ФлагРежимОтладкиОбработчиков + + Right + + OnChange + ФлагРежимОтладкиОбработчиковВыгрузкиПриИзменении + + + ФлагРежимОтладкиОбработчиковВыгрузкиРасширеннаяПодсказка + 321 + Label + true + true + + Left + + + + ФлагРежимОтладкиОбработчиковВыгрузкиКонтекстноеМеню + 55 + true + + CheckBoxField + Enter + true + Left + true + + + + НастройкаОтладкиВыгрузки + 56 + + <key>ru</key> + <value>Настройка отладки выгрузки...</value> + + true + true + + true + + + НастройкаОтладкиВыгрузкиРасширеннаяПодсказка + 323 + Label + true + true + + Left + + + UsualButton + Form.Command.НастройкаОтладкиВыгрузки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ru + Отладка выгрузки + + + ОтладкаВыгрузкиРасширеннаяПодсказка + 320 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Выгрузка данных</value> + + + ru + Выгрузка + + + ВыгрузкаРасширеннаяПодсказка + 218 + Label + true + true + + Left + + + Page + + Vertical + auto + +
              + + Загрузка + 3 + + ФормаВыполнитьЗагрузку + 192 + + <key>ru</key> + <value>Загрузить данные</value> + + true + true + + true + + + ФормаВыполнитьЗагрузкуРасширеннаяПодсказка + 325 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыполнитьЗагрузку + Normal + Auto + true + true + UserCmds + Auto + + + ИмяФайлаОбмена + 68 + + <key>ru</key> + <value>Имя файла для загрузки на сервере</value> + + true + true + + true + + + ИмяФайлаОбмена + + + OnChange + ИмяФайлаОбменаПриИзменении + + + ИмяФайлаОбменаРасширеннаяПодсказка + 326 + Label + true + true + + Left + + + + ИмяФайлаОбменаКонтекстноеМеню + 69 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИмяФайлаОбменаНачалоВыбора + + + Opening + ИмяФайлаОбменаОткрытие + + true + true + true + true + true + true + true + true + true + Normal + + + + ПарольДляРаспаковкиФайлаОбмена + 70 + + <key>ru</key> + <value>Пароль распаковки</value> + + true + true + + true + + + Объект.ПарольДляРаспаковкиФайлаОбмена + + + ПарольДляРаспаковкиФайлаОбменаРасширеннаяПодсказка + 328 + Label + true + true + + Left + + + + ПарольДляРаспаковкиФайлаОбменаКонтекстноеМеню + 71 + true + + InputField + Enter + true + Left + true + + 24 + true + true + false + true + true + true + true + true + Normal + + + + ИспользоватьТранзакции + 72 + true + true + + true + + + Объект.ИспользоватьТранзакции + + Right + + OnChange + ИспользоватьТранзакцииПриИзменении + + + ИспользоватьТранзакцииРасширеннаяПодсказка + 330 + Label + true + true + + Left + + + + ИспользоватьТранзакцииКонтекстноеМеню + 73 + true + + CheckBoxField + Enter + true + Left + true + + + + КоличествоОбъектовНаТранзакцию + 74 + + <key>ru</key> + <value>Количество элементов в транзакции</value> + + true + true + + true + + + Объект.КоличествоОбъектовНаТранзакцию + + + КоличествоОбъектовНаТранзакциюРасширеннаяПодсказка + 332 + Label + true + true + + Left + + + + КоличествоОбъектовНаТранзакциюКонтекстноеМеню + 75 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗагружатьДанныеВРежимеОбмена + 76 + true + true + + true + + + Объект.ЗагружатьДанныеВРежимеОбмена + + Right + + ЗагружатьДанныеВРежимеОбменаРасширеннаяПодсказка + 334 + Label + true + true + + Left + + + + ЗагружатьДанныеВРежимеОбменаКонтекстноеМеню + 77 + true + + CheckBoxField + Enter + true + Left + true + + + + ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты + 78 + true + true + + true + + + Объект.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты + + Right + + ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъектыРасширеннаяПодсказка + 336 + Label + true + true + + Left + + + + ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъектыКонтекстноеМеню + 79 + true + + CheckBoxField + Enter + true + Left + true + + + + ОбъектыПоСсылкеЗагружатьБезПометкиУдаления + 80 + true + true + + true + + + Объект.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления + + Right + + ОбъектыПоСсылкеЗагружатьБезПометкиУдаленияРасширеннаяПодсказка + 338 + Label + true + true + + Left + + + + ОбъектыПоСсылкеЗагружатьБезПометкиУдаленияКонтекстноеМеню + 81 + true + + CheckBoxField + Enter + true + Left + true + + + + ОптимизированнаяЗаписьОбъектов + 82 + true + true + + true + + + Объект.ОптимизированнаяЗаписьОбъектов + + Right + + ОптимизированнаяЗаписьОбъектовРасширеннаяПодсказка + 340 + Label + true + true + + Left + + + + ОптимизированнаяЗаписьОбъектовКонтекстноеМеню + 83 + true + + CheckBoxField + Enter + true + Left + true + + + + ЗаписыватьРегистрыНаборамиЗаписей + 84 + true + true + + true + + + Объект.ЗаписыватьРегистрыНаборамиЗаписей + + Right + + ЗаписыватьРегистрыНаборамиЗаписейРасширеннаяПодсказка + 342 + Label + true + true + + Left + + + + ЗаписыватьРегистрыНаборамиЗаписейКонтекстноеМеню + 85 + true + + CheckBoxField + Enter + true + Left + true + + + + ОбрезатьСтрокиСправа + 86 + true + true + + true + + + Объект.ОбрезатьСтрокиСправа + + Right + + ОбрезатьСтрокиСправаРасширеннаяПодсказка + 344 + Label + true + true + + Left + + + + ОбрезатьСтрокиСправаКонтекстноеМеню + 87 + true + + CheckBoxField + Enter + true + Left + true + + + + НастройкаАвтоматическойЗагрузкиДанных + 88 + + <key>ru</key> + <value>Настройки автоматической загрузки данных</value> + + true + true + + true + + + Объект.НастройкаАвтоматическойЗагрузкиДанных + + + НастройкаАвтоматическойЗагрузкиДанныхРасширеннаяПодсказка + 346 + Label + true + true + + Left + + + + НастройкаАвтоматическойЗагрузкиДанныхКонтекстноеМеню + 89 + true + + RadioButtonField + Enter + true + Left + true + + + + ru + Не использовать автоматическую загрузку при открытии + + + 0 + + + + + ru + Перед автоматической загрузкой задать вопрос о выполнении операции + + + 1 + + + + + ru + Использовать автоматическую загрузку данных + + + 2 + + + Vertical + + + + ИнформацияОФайлеОбмена + 149 + + ВерсияПравилГруппа + 153 + + ВерсияПравилОбмена + 168 + true + true + + true + + + Объект.ВерсияПравилОбмена + + + ВерсияПравилОбменаРасширеннаяПодсказка + 350 + Label + true + true + + Left + + + + ВерсияПравилОбменаКонтекстноеМеню + 169 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ПолучитьИнформациюОФайлеОбмена + 150 + + <key>ru</key> + <value>Подробно о файле обмена</value> + + true + true + + true + + + ПолучитьИнформациюОФайлеОбменаРасширеннаяПодсказка + 352 + Label + true + true + + Left + + + UsualButton + Form.Command.ПолучитьИнформациюОФайлеОбмена + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ru + Версия правил группа + + + ВерсияПравилГруппаРасширеннаяПодсказка + 349 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ДатаВыгрузкиДанных + 170 + true + true + + true + + + Объект.ДатаВыгрузкиДанных + + + ДатаВыгрузкиДанныхРасширеннаяПодсказка + 353 + Label + true + true + + Left + + + + ДатаВыгрузкиДанныхКонтекстноеМеню + 171 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ПериодВыгрузкиДанных + 164 + + <key>ru</key> + <value>Период выгрузки данных</value> + + true + true + + true + + + ПредставлениеПериодаВыгрузки + + + ПериодВыгрузкиДанныхРасширеннаяПодсказка + 355 + Label + true + true + + Left + + + + ПериодВыгрузкиДанныхКонтекстноеМеню + 165 + true + + LabelField + Enter + true + Left + true + + true + true + false + + + + КомментарийЗагрузки + 166 + true + true + + true + + + Объект.Комментарий + + Left + + КомментарийЗагрузкиРасширеннаяПодсказка + 357 + Label + true + true + + Left + + + + КомментарийЗагрузкиКонтекстноеМеню + 167 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Информация о файле обмена</value> + + + ru + Информация о файле обмена + + + ИнформацияОФайлеОбменаРасширеннаяПодсказка + 348 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ОтладкаЗагрузки + 92 + + ФлагРежимОтладкиОбработчиковЗагрузки + 90 + + <key>ru</key> + <value>Режим отладки обработчиков загрузки</value> + + true + true + + true + + + Объект.ФлагРежимОтладкиОбработчиков + + Right + + OnChange + ФлагРежимОтладкиОбработчиковЗагрузкиПриИзменении + + + ФлагРежимОтладкиОбработчиковЗагрузкиРасширеннаяПодсказка + 360 + Label + true + true + + Left + + + + ФлагРежимОтладкиОбработчиковЗагрузкиКонтекстноеМеню + 91 + true + + CheckBoxField + Enter + true + Left + true + + + + НастройкаОтладкиЗагрузки + 93 + + <key>ru</key> + <value>Настройка отладки загрузки...</value> + + true + true + + true + + + НастройкаОтладкиЗагрузкиРасширеннаяПодсказка + 362 + Label + true + true + + Left + + + UsualButton + Form.Command.НастройкаОтладкиЗагрузки + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + ru + Отладка загрузки + + + ОтладкаЗагрузкиРасширеннаяПодсказка + 359 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Загрузка данных</value> + + + ru + Загрузка + + + ЗагрузкаРасширеннаяПодсказка + 324 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НастройкиОбменаДанными + 4 + + ФлагРежимОтладки + 94 + true + true + + true + + + Объект.ФлагРежимОтладки + + Right + + OnChange + ФлагРежимОтладкиПриИзменении + + + ФлагРежимОтладкиРасширеннаяПодсказка + 364 + Label + true + true + + Left + + + + ФлагРежимОтладкиКонтекстноеМеню + 95 + true + + CheckBoxField + Enter + true + Left + true + + + + ВыводВОкноСообщенийИнформационныхСообщений + 96 + true + true + + true + + + Объект.ВыводВОкноСообщенийИнформационныхСообщений + + Right + + ВыводВОкноСообщенийИнформационныхСообщенийРасширеннаяПодсказка + 366 + Label + true + true + + Left + + + + ВыводВОкноСообщенийИнформационныхСообщенийКонтекстноеМеню + 97 + true + + CheckBoxField + Enter + true + Left + true + + + + КоличествоОбработанныхОбъектовДляОбновленияСтатуса + 98 + true + true + + true + + + Объект.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + + OnChange + КоличествоОбработанныхОбъектовДляОбновленияСтатусаПриИзменении + + + КоличествоОбработанныхОбъектовДляОбновленияСтатусаРасширеннаяПодсказка + 368 + Label + true + true + + Left + + + + КоличествоОбработанныхОбъектовДляОбновленияСтатусаКонтекстноеМеню + 99 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + НастройкиВыгрузкиДанных + 100 + + ВыполнитьОбменДаннымиВОптимизированномФормате + 101 + + <key>ru</key> + <value>Использовать оптимизированный формат для обмена данными (V8 - V8, версия обработки не ниже 2.0.18)</value> + + true + true + + true + + + Объект.ВыполнитьОбменДаннымиВОптимизированномФормате + + Right + + ВыполнитьОбменДаннымиВОптимизированномФорматеРасширеннаяПодсказка + 371 + Label + true + true + + Left + + + + ВыполнитьОбменДаннымиВОптимизированномФорматеКонтекстноеМеню + 102 + true + + CheckBoxField + Enter + true + Left + true + + + + ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена + 103 + true + true + + true + + + Объект.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена + + Right + + ИспользоватьТранзакцииПриВыгрузкеДляПлановОбменаРасширеннаяПодсказка + 373 + Label + true + true + + Left + + + + ИспользоватьТранзакцииПриВыгрузкеДляПлановОбменаКонтекстноеМеню + 104 + true + + CheckBoxField + Enter + true + Left + true + + + + КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбмена + 105 + + <key>ru</key> + <value>Количество элементов в транзакции</value> + + true + true + + true + + + Объект.КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбмена + + + КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбменаРасширеннаяПодсказка + 375 + Label + true + true + + Left + + + + КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбменаКонтекстноеМеню + 106 + true + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ВыгружатьТолькоРазрешенные + 107 + + <key>ru</key> + <value>Выгружать объекты на которые есть права доступа</value> + + true + true + + true + + + Объект.ВыгружатьТолькоРазрешенные + + Right + + ВыгружатьТолькоРазрешенныеРасширеннаяПодсказка + 377 + Label + true + true + + Left + + + + ВыгружатьТолькоРазрешенныеКонтекстноеМеню + 108 + true + + CheckBoxField + Enter + true + Left + true + + + + ВестиДополнительныйКонтрольЗаписиВXML + 109 + + <key>ru</key> + <value>Автоматически удалять недопустимые символы из строк для записи в XML</value> + + true + true + + true + + + Объект.ВестиДополнительныйКонтрольЗаписиВXML + + Right + + ВестиДополнительныйКонтрольЗаписиВXMLРасширеннаяПодсказка + 379 + Label + true + true + + Left + + + + ВестиДополнительныйКонтрольЗаписиВXMLКонтекстноеМеню + 110 + true + + CheckBoxField + Enter + true + Left + true + + + + ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + 186 + + <key>ru</key> + <value>Изменения регистрации для узлов обмена после выгрузки</value> + + true + true + + true + + + ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + + + OnChange + ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузкиПриИзменении + + + ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузкиРасширеннаяПодсказка + 381 + Label + true + true + + Left + + + + ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузкиКонтекстноеМеню + 187 + true + + InputField + Enter + true + Left + true + + true + true + true + true + false + false + true + true + + + ru + Не удалять регистрацию + + + Не удалять регистрацию + + + + + ru + Полностью удалить регистрацию для узла обмена + + + Полностью удалить регистрацию для узла обмена + + + + + ru + Удалить регистрацию только для выгруженных метаданных + + + Полностью удалить регистрацию для узла обмена + + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Настройки выгрузки данных</value> + + + ru + Настройки выгрузки данных + + + НастройкиВыгрузкиДанныхРасширеннаяПодсказка + 370 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + ПротоколОбмена + 113 + + ИмяФайлаПротоколаОбмена + 114 + + <key>ru</key> + <value>Имя файла протокола обмена на сервере</value> + + true + true + + true + + + Объект.ИмяФайлаПротоколаОбмена + + + ИмяФайлаПротоколаОбменаРасширеннаяПодсказка + 384 + Label + true + true + + Left + + + + ИмяФайлаПротоколаОбменаКонтекстноеМеню + 115 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИмяФайлаПротоколаОбменаНачалоВыбора + + + Opening + ИмяФайлаПротоколаОбменаОткрытие + + true + true + true + true + true + true + true + true + Normal + + + + ИмяФайлаПротоколаОбменаЗагрузка + 116 + + <key>ru</key> + <value>Протокол загрузки (для COM - соединения) на сервере</value> + + true + true + + true + + + Объект.ИмяФайлаПротоколаОбменаЗагрузка + + + ИмяФайлаПротоколаОбменаЗагрузкаРасширеннаяПодсказка + 386 + Label + true + true + + Left + + + + ИмяФайлаПротоколаОбменаЗагрузкаКонтекстноеМеню + 117 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИмяФайлаПротоколаОбменаЗагрузкаНачалоВыбора + + + Opening + ИмяФайлаПротоколаОбменаЗагрузкаОткрытие + + true + true + true + true + true + true + true + true + Normal + + + + ДописыватьДанныеВПротоколОбмена + 118 + true + true + + true + + + Объект.ДописыватьДанныеВПротоколОбмена + + Right + + ДописыватьДанныеВПротоколОбменаРасширеннаяПодсказка + 388 + Label + true + true + + Left + + + + ДописыватьДанныеВПротоколОбменаКонтекстноеМеню + 119 + true + + CheckBoxField + Enter + true + Left + true + + + + ВыводВПротоколИнформационныхСообщений + 120 + true + true + + true + + + Объект.ВыводВПротоколИнформационныхСообщений + + Right + + ВыводВПротоколИнформационныхСообщенийРасширеннаяПодсказка + 390 + Label + true + true + + Left + + + + ВыводВПротоколИнформационныхСообщенийКонтекстноеМеню + 121 + true + + CheckBoxField + Enter + true + Left + true + + + + ОткрыватьПротоколыОбменаПослеВыполненияОпераций + 122 + true + true + + true + + + Объект.ОткрыватьПротоколыОбменаПослеВыполненияОпераций + + Right + + ОткрыватьПротоколыОбменаПослеВыполненияОперацийРасширеннаяПодсказка + 392 + Label + true + true + + Left + + + + ОткрыватьПротоколыОбменаПослеВыполненияОперацийКонтекстноеМеню + 123 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Протокол обмена</value> + + + ru + Протокол обмена + + + ПротоколОбменаРасширеннаяПодсказка + 383 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Дополнительные настройки</value> + + + ru + Настройки обмена данными + + + НастройкиОбменаДаннымиРасширеннаяПодсказка + 363 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + НастройкаУдалениеДанных + 5 + + НадписьПредупреждениеПользователя + 124 + + <key>ru</key> + <value>Функционал для удаления данных предназначен для отладки переноса. Использовать удаление объектов в других целях НЕ рекомендуется.</value> + + true + true + + true + + + НадписьПредупреждениеПользователяРасширеннаяПодсказка + 395 + Label + true + true + + Left + + + + НадписьПредупреждениеПользователяКонтекстноеМеню + 125 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + + УдалятьОбъектыНаКоторыеЕстьПраваДоступа + 126 + + <key>ru</key> + <value>Удалять объекты на которые есть права доступа</value> + + true + true + + true + + + Объект.ВыгружатьТолькоРазрешенные + + Right + + УдалятьОбъектыНаКоторыеЕстьПраваДоступаРасширеннаяПодсказка + 396 + Label + true + true + + Left + + + + УдалятьОбъектыНаКоторыеЕстьПраваДоступаКонтекстноеМеню + 127 + true + + CheckBoxField + Enter + true + Left + true + + + + УдаляемыеДанные + 201 + true + true + + true + + + УдаляемыеДанные + + None + + ГруппаМетаданных + 208 + + МетаданныеДляУдаленияПометка + 206 + true + true + + true + + + УдаляемыеДанные.Пометка + + None + + МетаданныеДляУдаленияПометкаРасширеннаяПодсказка + 412 + Label + true + true + + Left + + + + МетаданныеДляУдаленияПометкаКонтекстноеМеню + 207 + true + + CheckBoxField + Auto + true + Left + true + + + + МетаданныеДляУдаленияПредставление + 209 + + <key>ru</key> + <value>Метаданные</value> + + true + true + + true + + + УдаляемыеДанные.Представление + + + МетаданныеДляУдаленияПредставлениеРасширеннаяПодсказка + 414 + Label + true + true + + Left + + + + МетаданныеДляУдаленияПредставлениеКонтекстноеМеню + 210 + true + + InputField + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа метаданных</value> + + + ru + Группа метаданных + + + ГруппаМетаданныхРасширеннаяПодсказка + 411 + Label + true + true + + Left + + + ColumnGroup + + InCell + auto + true + + + + УдаляемыеДанныеКоманднаяПанель + 203 + + УдаляемыеДанныеУдалениеОтметитьВсе + 172 + true + true + + true + + + УдаляемыеДанныеУдалениеОтметитьВсеРасширеннаяПодсказка + 398 + Label + true + true + + Left + + + Form.Command.УдалениеОтметитьВсе + Normal + Auto + true + true + UserCmds + Auto + + + УдаляемыеДанныеУдалениеОтменитьВсе + 173 + true + true + + true + + + УдаляемыеДанныеУдалениеОтменитьВсеРасширеннаяПодсказка + 399 + Label + true + true + + Left + + + Form.Command.УдалениеОтменитьВсе + Normal + Auto + true + true + UserCmds + Auto + + + УдаляемыеДанныеУдалениеУдалить + 174 + true + true + + true + + + УдаляемыеДанныеУдалениеУдалитьРасширеннаяПодсказка + 400 + Label + true + true + + Left + + + Form.Command.УдалениеУдалить + Normal + Auto + true + true + UserCmds + Auto + + Left + + + OnChange + УдаляемыеДанныеПриИзменении + + + УдаляемыеДанныеСтрокаПоиска + 402 + + УдаляемыеДанныеСтрокаПоискаРасширеннаяПодсказка + 404 + Label + true + true + + Left + + + + УдаляемыеДанныеСтрокаПоискаКонтекстноеМеню + 403 + true + + УдаляемыеДанные + + true + + + + УдаляемыеДанныеСостояниеПросмотра + 405 + + УдаляемыеДанныеСостояниеПросмотраРасширеннаяПодсказка + 407 + Label + true + true + + Left + + + + УдаляемыеДанныеСостояниеПросмотраКонтекстноеМеню + 406 + true + + ViewStatusAddition + УдаляемыеДанные + + true + + + + УдаляемыеДанныеУправлениеПоиском + 408 + + УдаляемыеДанныеУправлениеПоискомРасширеннаяПодсказка + 410 + Label + true + true + + Left + + + + УдаляемыеДанныеУправлениеПоискомКонтекстноеМеню + 409 + true + + SearchControlAddition + УдаляемыеДанные + + true + + + + УдаляемыеДанныеРасширеннаяПодсказка + 401 + Label + true + true + + Left + + + + УдаляемыеДанныеКонтекстноеМеню + 202 + true + + Tree + true + true + true + MultiRow +
              true
              + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + true + true + None + None + None + true +
              + true + true + + true + + + <key>ru</key> + <value>Удаление данных</value> + + + ru + Настройка удаление данных + + + НастройкаУдалениеДанныхРасширеннаяПодсказка + 394 + Label + true + true + + Left + + + Page + + Vertical + auto + +
              + true + true + + true + + + <key>ru</key> + <value>Главная панель формы</value> + + + ru + Главная панель формы + + + ГлавнаяПанельФормыРасширеннаяПодсказка + 217 + Label + true + true + + Left + + + Pages + + + OnCurrentPageChange + ГлавнаяПанельФормыПриСменеСтраницы + + TabsOnTop + Auto + +
              + + ФормаКоманднаяПанель + -1 + + ФормаВосстановить + 185 + true + true + + true + + + ФормаВосстановитьРасширеннаяПодсказка + 211 + Label + true + true + + Left + + + Form.StandardCommand.RestoreValues + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ФормаСохранить + 184 + true + true + + true + + + ФормаСохранитьРасширеннаяПодсказка + 212 + Label + true + true + + Left + + + Form.StandardCommand.SaveValues + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + РежимОбработки + 197 + + ФормаНаКлиенте + 198 + true + true + + true + + + ФормаНаКлиентеРасширеннаяПодсказка + 214 + Label + true + true + + Left + + + Form.Command.НаКлиенте + Normal + Auto + true + true + UserCmds + Auto + + + ФормаНаСервере + 199 + true + true + + true + + + ФормаНаСервереРасширеннаяПодсказка + 215 + Label + true + true + + Left + + + Form.Command.НаСервере + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Режим работы</value> + + + ru + Режим обработки + + + РежимОбработкиРасширеннаяПодсказка + 213 + Label + true + true + + Left + + + Popup + + Auto + Normal + + + + ФормаСправка + 183 + true + true + + true + + + ФормаСправкаРасширеннаяПодсказка + 216 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + Left + + + OnOpen + ПриОткрытии + + + OnCreateAtServer + ПриСозданииНаСервере + + LockOwner + Use + UseList + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.УниверсальныйОбменДаннымиXML + + + true + + + true + + + Объект.Данные + + + Объект.ТаблицаНастройкиПараметров + + + Объект.ТаблицаПравилВыгрузки + + + Объект.ТаблицаПравилКонвертации + + + Объект.ТаблицаПравилОчистки + + + Объект.ФлагРежимОтладкиОбработчиков + + + Объект.АрхивироватьФайл + + + Объект.АутентификацияWindowsИнформационнойБазыДляПодключения + + + Объект.ВерсияПлатформыИнформационнойБазыДляПодключения + + + Объект.ВестиДополнительныйКонтрольЗаписиВXML + + + Объект.ВыводВОкноСообщенийИнформационныхСообщений + + + Объект.ВыводВПротоколИнформационныхСообщений + + + Объект.ВыводВПротоколСообщенийОбОшибках + + + Объект.ВыгружатьТолькоРазрешенные + + + Объект.ВыполнитьОбменДаннымиВОптимизированномФормате + + + Объект.ДатаНачала + + + Объект.ДатаОкончания + + + Объект.ДописыватьДанныеВПротоколОбмена + + + Объект.ЗагружатьДанныеВРежимеОбмена + + + Объект.ЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + + Объект.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты + + + Объект.ЗаписыватьРегистрыНаборамиЗаписей + + + Объект.ИмяИнформационнойБазыНаСервереДляПодключения + + + Объект.ИмяСервераИнформационнойБазыДляПодключения + + + Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий + + + Объект.ИмяФайлаОбмена + + + Объект.ИмяФайлаОбработчиковСобытий + + + Объект.ИмяФайлаПравилОбмена + + + Объект.ИмяФайлаПротоколаОбмена + + + Объект.ИмяФайлаПротоколаОбменаЗагрузка + + + Объект.ИспользоватьОтборПоДатеДляВсехОбъектов + + + Объект.ИспользоватьТранзакции + + + Объект.ИспользоватьТранзакцииПриВыгрузкеДляПлановОбмена + + + Объект.КаталогИнформационнойБазыДляПодключения + + + Объект.КоличествоОбработанныхОбъектовДляОбновленияСтатуса + + + Объект.КоличествоОбъектовНаТранзакцию + + + Объект.КоличествоЭлементовВТранзакцииПриВыгрузкеДляПлановОбмена + + + Объект.Комментарий + + + Объект.КомментарийПриВыгрузкеДанных + + + Объект.КомментарийПриЗагрузкеДанных + + + Объект.НастройкаАвтоматическойЗагрузкиДанных + + + Объект.НеВыводитьНикакихИнформационныхСообщенийПользователю + + + Объект.НеЗадаватьВопросПриЗагрузкеДанныхПриОткрытииОбработки + + + Объект.НепосредственноеЧтениеВИБПриемнике + + + Объект.ОбработкиНастройкиВыгрузки + + + Объект.ОбработкиНастройкиЗагрузки + + + Объект.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена + + + Объект.ОбрезатьСтрокиСправа + + + Объект.ОбъектыПоСсылкеЗагружатьБезПометкиУдаления + + + Объект.ОптимизированнаяЗаписьОбъектов + + + Объект.ОткрыватьПротоколыОбменаПослеВыполненияОпераций + + + Объект.Параметры + + + Объект.ПарольДляРаспаковкиФайлаОбмена + + + Объект.ПарольДляСжатияФайлаОбмена + + + Объект.ПарольИнформационнойБазыДляПодключения + + + Объект.ПользовательИнформационнойБазыДляПодключения + + + Объект.РежимОбмена + + + Объект.РежимОтладкиАлгоритмов + + + Объект.СохраненныеНастройки + + + Объект.ТипИнформационнойБазыДляПодключения + + + Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + + + Объект.ФлагРежимОтладки + + + Объект.ФлагРежимОтладкиОбработчиков + +
              true
              + + + Объект.ТаблицаПравилВыгрузки + + + Наименование + + <key>ru</key> + <value>Правила выгрузки данных</value> + + 1 + + String + + + + true + + + true + + + + СсылкаНаУзелОбмена + + <key>ru</key> + <value>Узел обмена</value> + + 2 + + ExchangePlanRef + + + true + + + true + + + + Включить + + <key>ru</key> + <value>Включить</value> + + 3 + + Number + + 1 + true + + + + true + + + true + + + + ЭтоГруппа + + <key>ru</key> + <value>Это группа</value> + + 4 + + Boolean + + + true + + + true + + + + + + Объект.ТаблицаНастройкиПараметров + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 1 + + String + + + + true + + + true + + + + Значение + + <key>ru</key> + <value>Значение</value> + + 2 + + Boolean + String + Date + AnyRef + + + Date + + + + true + + + true + + + + + + Объект.ТаблицаПравилКонвертации + + +
              + + ПрямаяВыгрузка + + <key>ru</key> + <value>Прямая выгрузка</value> + + 2 + + Number + + 10 + + + + true + + + true + + + ПрямаяВыгрузка + + + + ПредставлениеПериодаВыгрузки + + <key>ru</key> + <value>Представление периода выгрузки</value> + + 4 + + + true + + + true + + + + ЗагрузкаДанныхИхФайла + + <key>ru</key> + <value>Загрузка данных их файла</value> + + 5 + + ValueList + + + true + + + true + + + ЗагрузкаДанныхИхФайла + + true + + + + + + ПравилаОбмена + + <key>ru</key> + <value>Правила обмена</value> + + 6 + + ValueList + + + true + + + true + + + ПравилаОбмена + + true + + + + + + ВыгрузкаДанныхВФайл + + <key>ru</key> + <value>Выгрузка данных в файл</value> + + 7 + + ValueList + + + true + + + true + + + ВыгрузкаДанныхВФайл + + true + + + + + + ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + + <key>ru</key> + <value>Тип удаления регистрации изменений для узлов обмена после выгрузки</value> + + 8 + + String + + + + true + + + true + + + ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки + + true + + + ЭтоКлиент + + <key>ru</key> + <value>Это клиент</value> + + 9 + + Boolean + + + true + + + true + + + ЭтоКлиент + + true + + + ИмяФайлаОбмена + + <key>ru</key> + <value>Имя файла обмена</value> + + 10 + + String + + + + true + + + true + + + ИмяФайлаОбмена + + + + ИмяФайлаДанных + + <key>ru</key> + <value>Имя файла данных</value> + + 11 + + String + + + + true + + + true + + + ИмяФайлаДанных + + + + ИмяФайлаПравил + + <key>ru</key> + <value>Имя файла правил</value> + + 12 + + String + + + + true + + + true + + + ИмяФайлаПравил + + + + ПравилаЗагружены + + <key>ru</key> + <value>Правила загружены</value> + + 13 + + Boolean + + + true + + + true + + + + УдаляемыеДанные + + <key>ru</key> + <value>Удаляемые данные</value> + + 14 + + ValueTree + + + true + + + true + + + Метаданные + + <key>ru</key> + <value>Метаданные</value> + + 1 + + String + + + + 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> + + 3 + + String + + + + true + + + true + + + + ПрочитатьПравилаОбмена + + <key>ru</key> + <value>Прочитать правила обмена</value> + + 1 + + ru + Прочитать правила обмена + + + true + + + + ПрочитатьПравилаОбмена + + + Auto + Auto + + + ТестПодключения + + <key>ru</key> + <value>Тест подключения...</value> + + 2 + + ru + Тест подключения + + + true + + + CommonPicture.ЗаполнитьФорму + + + + ТестПодключения + + + TextPicture + Auto + Auto + + + НастройкаОтладкиВыгрузки + + <key>ru</key> + <value>Настройка отладки выгрузки</value> + + 3 + + ru + Настройка отладки выгрузки + + + true + + + + НастройкаОтладкиВыгрузки + + + Auto + Auto + + + ВосстановитьПараметры + + <key>ru</key> + <value>Восстановить</value> + + 4 + + ru + Восстановить параметры + + + true + + + + ВосстановитьПараметры + + + Auto + Auto + + + СохранитьПараметры + + <key>ru</key> + <value>Сохранить</value> + + 5 + + ru + Сохранить параметры + + + true + + + + СохранитьПараметры + + + Auto + Auto + + + НастройкаОтладкиЗагрузки + + <key>ru</key> + <value>Настройка отладки загрузки</value> + + 8 + + ru + Настройка отладки загрузки + + + true + + + + НастройкаОтладкиЗагрузки + + + Auto + Auto + + + ПолучитьИнформациюОФайлеОбмена + + <key>ru</key> + <value>Получить информацию о файле обмена</value> + + 9 + + ru + Получить информацию о файле обмена + + + true + + + + ПолучитьИнформациюОФайлеОбмена + + + Auto + Auto + + + УдалениеОтметитьВсе + + <key>ru</key> + <value>Удаление отметить все</value> + + 10 + + ru + Удаление отметить все + + + true + + + StdPicture.CheckAll + + + + УдалениеОтметитьВсе + + + Picture + Auto + Auto + + + УдалениеОтменитьВсе + + <key>ru</key> + <value>Удаление отменить все</value> + + 11 + + ru + Удаление отменить все + + + true + + + StdPicture.UncheckAll + + + + УдалениеОтменитьВсе + + + Picture + Auto + Auto + + + УдалениеУдалить + + <key>ru</key> + <value>Удалить</value> + + 12 + + ru + Удаление удалить + + + true + + + StdPicture.InputFieldClear + + + + УдалениеУдалить + + + TextPicture + Auto + Auto + + + ВыгрузкаОтметитьВсе + + <key>ru</key> + <value>Выгрузка отметить все</value> + + 13 + + ru + Выгрузка отметить все + + + true + + + StdPicture.CheckAll + + + + ВыгрузкаОтметитьВсе + + + Picture + Auto + Auto + + + ВыгрузкаОтменитьВсе + + <key>ru</key> + <value>Выгрузка отменить все</value> + + 14 + + ru + Выгрузка отменить все + + + true + + + StdPicture.UncheckAll + + + + ВыгрузкаОтменитьВсе + + + Picture + Auto + Auto + + + ВыгрузкаОчиститьУзлыОбмена + + <key>ru</key> + <value>Очистить узлы обмена</value> + + 15 + + ru + Выгрузка очистить узлы обмена + + + true + + + + ВыгрузкаОчиститьУзлыОбмена + + + Auto + Auto + + + ВыгрузкаУстановитьУзелОбмена + + <key>ru</key> + <value>Установить текущий узел обмена у всех</value> + + 16 + + ru + Выгрузка установить узел обмена + + + true + + + + ВыгрузкаУстановитьУзелОбмена + + + Auto + Auto + + + ВыполнитьВыгрузку + + <key>ru</key> + <value>Выполнить выгрузку</value> + + 17 + + ru + Выполнить выгрузку + + + true + + + StdPicture.GenerateReport + + + + ВыполнитьВыгрузку + + + TextPicture + Auto + Auto + + + ВыполнитьЗагрузку + + <key>ru</key> + <value>Выполнить загрузку</value> + + 18 + + ru + Выполнить загрузку + + + true + + + StdPicture.GenerateReport + + + + ВыполнитьЗагрузку + + + TextPicture + Auto + Auto + + + НаКлиенте + + <key>ru</key> + <value>На клиенте</value> + + 7 + + ru + На клиенте + + + true + + + + НаКлиенте + + + Auto + Auto + + + НаСервере + + <key>ru</key> + <value>На сервере</value> + + 19 + + ru + На сервере + + + true + + + + НаСервере + + + Auto + Auto + + + + + + +
              diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl new file mode 100644 index 000000000..9e2b1f7da --- /dev/null +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФорма/Module.bsl @@ -0,0 +1,1642 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Объект.ЭтоИнтерактивныйРежим = Истина; + + ЭтаФорма.Заголовок = НСтр("ru = 'Универсальный обмен данными в формате XML ('") + ВерсияОбъектаСтрокойНаСервере() + ")"; + + ЗаполнитьСписокТиповДоступныхДляУдаления(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + Элементы.ИмяФайлаПравил.СписокВыбора.ЗагрузитьЗначения(ПравилаОбмена.ВыгрузитьЗначения()); + Элементы.ИмяФайлаОбмена.СписокВыбора.ЗагрузитьЗначения(ЗагрузкаДанныхИхФайла.ВыгрузитьЗначения()); + Элементы.ИмяФайлаДанных.СписокВыбора.ЗагрузитьЗначения(ВыгрузкаДанныхВФайл.ВыгрузитьЗначения()); + + ОчиститьДанныеОФайлеДляЗагрузкиДанных(); + + ПрямаяВыгрузка = ?(Объект.НепосредственноеЧтениеВИБПриемнике, 1, 0); + + СохраненныйРежимЗагрузки = (Объект.РежимОбмена = "Загрузка"); + + Если СохраненныйРежимЗагрузки Тогда + + // нужную страницу устанавливаем + Элементы.ГлавнаяПанельФормы.ТекущаяСтраница = Элементы.ГлавнаяПанельФормы.ПодчиненныеЭлементы.Загрузка; + + КонецЕсли; + + ОбработатьДоступностьЭлементовУправленияТранзакциями(); + + РазвернутьСтрокиДерева(УдаляемыеДанные, Элементы.УдаляемыеДанные, "Пометка"); + + АрхивироватьФайлПриИзмененииЗначения(); + ПрямаяВыгрузкаПриИзмененииЗначения(); + + ИзменитьРежимОбработки(ЭтоКлиент); + + Если СохраненныйРежимЗагрузки + И Объект.НастройкаАвтоматическойЗагрузкиДанных <> 0 Тогда + + Если Объект.НастройкаАвтоматическойЗагрузкиДанных = 1 Тогда + + ОтветПользователя = Вопрос(НСтр("ru = 'Выполнить загрузку данных из файла обмена?'"), РежимДиалогаВопрос.ДаНет, 15, КодВозвратаДиалога.Да); + + Если ОтветПользователя <> КодВозвратаДиалога.Да Тогда + + Возврат; + + КонецЕсли; + + КонецЕсли; + + ВыполнитьЗагрузкуИзФормы(); + ПредставлениеПериодаВыгрузки = ПредставлениеПериода(Объект.ДатаНачала, Объект.ДатаОкончания); + + КонецЕсли; + + //Установить видимость реквизитов формы + УстановитьДоступность(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура АрхивироватьФайлПриИзменении(Элемент) + + АрхивироватьФайлПриИзмененииЗначения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПравилОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыборФайла(Элемент, ИмяФайлаПравил, Истина, , Ложь, Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПравилОбменаОткрытие(Элемент, СтандартнаяОбработка) + + ОткрытьВПриложении(Элемент.ТекстРедактирования, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрямаяВыгрузкаПриИзменении(Элемент) + + ПрямаяВыгрузкаПриИзмененииЗначения(); + +КонецПроцедуры + +&НаКлиенте +Процедура ГлавнаяПанельФормыПриСменеСтраницы(Элемент, ТекущаяСтраница) + + Если ТекущаяСтраница.Имя = "Выгрузка" Тогда + + Объект.РежимОбмена = "Выгрузка"; + + ИначеЕсли ТекущаяСтраница.Имя = "Загрузка" Тогда + + Объект.РежимОбмена = "Загрузка"; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ФлагРежимОтладкиПриИзменении(Элемент) + + Если Объект.ФлагРежимОтладки Тогда + + Объект.ИспользоватьТранзакции = Ложь; + + КонецЕсли; + + ОбработатьДоступностьЭлементовУправленияТранзакциями(); + +КонецПроцедуры + +&НаКлиенте +Процедура КоличествоОбработанныхОбъектовДляОбновленияСтатусаПриИзменении(Элемент) + + Если Объект.КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 0 Тогда + Объект.КоличествоОбработанныхОбъектовДляОбновленияСтатуса = 100; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыборФайла(Элемент, ИмяФайлаОбмена, , , Объект.АрхивироватьФайл); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПротоколаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыборФайла(Элемент, Объект.ИмяФайлаПротоколаОбмена, , "txt", Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПротоколаОбменаЗагрузкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыборФайла(Элемент, Объект.ИмяФайлаПротоколаОбменаЗагрузка, , "txt", Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаДанныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ВыборФайла(Элемент, ИмяФайлаДанных, , , Объект.АрхивироватьФайл); + +КонецПроцедуры + +&НаКлиенте +Процедура КаталогИнформационнойБазыДляПодключенияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); + + ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выбор каталога информационной базы'"); + ДиалогВыбораФайла.Каталог = Объект.КаталогИнформационнойБазыДляПодключения; + ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина; + + Если ДиалогВыбораФайла.Выбрать() Тогда + + Объект.КаталогИнформационнойБазыДляПодключения = ДиалогВыбораФайла.Каталог; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПротоколаОбменаОткрытие(Элемент, СтандартнаяОбработка) + + ОткрытьВПриложении(Элемент.ТекстРедактирования, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПротоколаОбменаЗагрузкаОткрытие(Элемент, СтандартнаяОбработка) + + ОткрытьВПриложении(Элемент.ТекстРедактирования, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура КаталогИнформационнойБазыДляПодключенияОткрытие(Элемент, СтандартнаяОбработка) + + ОткрытьВПриложении(Элемент.ТекстРедактирования, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура АутентификацияWindowsИнформационнойБазыДляПодключенияПриИзменении(Элемент) + + Элементы.ПользовательИнформационнойБазыДляПодключения.Доступность = НЕ Объект.АутентификацияWindowsИнформационнойБазыДляПодключения; + Элементы.ПарольИнформационнойБазыДляПодключения.Доступность = НЕ Объект.АутентификацияWindowsИнформационнойБазыДляПодключения; + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаПравилПриИзменении(Элемент) + + Если ПустаяСтрока(ИмяФайлаПравил) Тогда + Возврат; + КонецЕсли; + + Файл = Новый Файл(ИмяФайлаПравил); + Если Не Файл.Существует() Тогда + Возврат; + КонецЕсли; + + ОтветПользователя = Вопрос(НСтр("ru = 'Загрузить правила обмена данными?'"), РежимДиалогаВопрос.ДаНет, 15, КодВозвратаДиалога.Да); + + Если ОтветПользователя = КодВозвратаДиалога.Да + ИЛИ ОтветПользователя = КодВозвратаДиалога.Таймаут Тогда + + ВыполнитьЗагрузкуПравилОбмена(); + + Иначе + + ПравилаЗагружены = Ложь; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаОбменаОткрытие(Элемент, СтандартнаяОбработка) + + ОткрытьВПриложении(Элемент.ТекстРедактирования, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаОбменаПриИзменении(Элемент) + + ОчиститьДанныеОФайлеДляЗагрузкиДанных(); + +КонецПроцедуры + +&НаКлиенте +Процедура ИспользоватьТранзакцииПриИзменении(Элемент) + + ОбработатьДоступностьЭлементовУправленияТранзакциями(); + +КонецПроцедуры + +&НаКлиенте +Процедура ФлагРежимОтладкиОбработчиковЗагрузкиПриИзменении(Элемент) + + УстановитьДоступность(); + +КонецПроцедуры + +&НаКлиенте +Процедура ФлагРежимОтладкиОбработчиковВыгрузкиПриИзменении(Элемент) + + УстановитьДоступность(); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаДанныхОткрытие(Элемент, СтандартнаяОбработка) + + ОткрытьВПриложении(Элемент.ТекстРедактирования, СтандартнаяОбработка); + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаДанныхПриИзменении(Элемент) + + Если Не ПустаяСтрока(Объект.ИмяФайлаПравилОбмена) + И Врег(СокрЛП(Объект.ИмяФайлаПравилОбмена)) = Врег(СокрЛП(Объект.ИмяФайлаОбмена)) Тогда + + Предупреждение(НСтр("ru = 'Файл правил обмена не может совпадать с файлом данных. Выберите другой файл для выгрузки данных.'")); + + КонецЕсли; + + Файл = Новый Файл(Объект.ИмяФайлаОбмена); + АрхивироватьФайл = (ВРЕГ(Файл.Расширение) = ВРЕГ(".zip")); + +КонецПроцедуры + +&НаКлиенте +Процедура ТипИнформационнойБазыДляПодключенияПриИзменении(Элемент) + + ТипБазы = Элементы.ТипБазы; + + ТипБазы.ТекущаяСтраница = ?(Объект.ТипИнформационнойБазыДляПодключения, + ТипБазы.ПодчиненныеЭлементы.ФайловаяБаза, + ТипБазы.ПодчиненныеЭлементы.БазаНаСервере + ); + +КонецПроцедуры + +&НаКлиенте +Процедура ВерсияПлатформыИнформационнойБазыДляПодключенияПриИзменении(Элемент) + + Если ПустаяСтрока(Объект.ВерсияПлатформыИнформационнойБазыДляПодключения) Тогда + + Объект.ВерсияПлатформыИнформационнойБазыДляПодключения = "V8"; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузкиПриИзменении(Элемент) + + Если Элемент.ТекстРедактирования = "Не удалять регистрацию" Тогда + + Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0; + + ИначеЕсли Элемент.ТекстРедактирования = "Полностью удалить регистрацию для узла обмена" Тогда + + Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 1; + + Иначе + + Объект.ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 2; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ТаблицаПравилВыгрузки + +&НаКлиенте +Процедура ТаблицаПравилВыгрузкиПередНачаломИзменения(Элемент, Отказ) + + Если Элемент.ТекущийЭлемент.Имя = "СсылкаНаУзелОбмена" Тогда + + Отказ = Элемент.ТекущиеДанные.ЭтоГруппа; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ТаблицаПравилВыгрузкиПриИзменении(Элемент) + + Если Элемент.ТекущийЭлемент.Имя = "ПВД" Тогда + + ТекСтрока = Элемент.ТекущиеДанные; + + Если ТекСтрока.Включить = 2 Тогда + ТекСтрока.Включить = 0; + КонецЕсли; + + УстановитьПометкиПодчиненных(ТекСтрока, "Включить"); + УстановитьПометкиРодителей(ТекСтрока, "Включить"); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ УдаляемыеДанные + +&НаКлиенте +Процедура УдаляемыеДанныеПриИзменении(Элемент) + + ТекСтрока = Элемент.ТекущиеДанные; + + УстановитьПометкиПодчиненных(ТекСтрока, "Пометка"); + УстановитьПометкиРодителей(ТекСтрока, "Пометка"); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ТестПодключения(Команда) + + РезультатПодключения = ВыполнитьПодключениеКИБПриемникуНаСервере(); + + Если РезультатПодключения <> Неопределено Тогда + + Предупреждение(НСтр("ru = 'Подключение к информационной базе приемнику произошло успешно.'")); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПолучитьИнформациюОФайлеОбмена(Команда) + + АдресФайла = ""; + + Если ЭтоКлиент Тогда + + Если Не ПоместитьФайл(АдресФайла,"Файл обмена",,,ЭтаФорма.УникальныйИдентификатор) Тогда + Возврат; + КонецЕсли; + + Иначе + + Файл = Новый Файл(Объект.ИмяФайлаОбмена); + + Если Не Файл.Существует() Тогда + + ОчиститьДанныеОФайлеДляЗагрузкиДанных(); + + КонецЕсли; + + КонецЕсли; + + Попытка + + ОткрытьФайлЗагрузкиНаСервере(АдресФайла); + ПредставлениеПериодаВыгрузки = ПредставлениеПериода(Объект.ДатаНачала, Объект.ДатаОкончания); + + Исключение + + ОчиститьДанныеОФайлеДляЗагрузкиДанных(); + + КонецПопытки; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалениеОтметитьВсе(Команда) + + Для Каждого Строка из УдаляемыеДанные.ПолучитьЭлементы() Цикл + + Строка.Пометка = 1; + УстановитьПометкиПодчиненных(Строка, "Пометка"); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалениеОтменитьВсе(Команда) + + Для Каждого Строка из УдаляемыеДанные.ПолучитьЭлементы() Цикл + Строка.Пометка = 0; + УстановитьПометкиПодчиненных(Строка, "Пометка"); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура УдалениеУдалить(Команда) + + ОтветПользователя = Вопрос(НСтр("ru = 'Удалить выбранные данные в информационной базе?'"), РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет); + + Если ОтветПользователя <> КодВозвратаДиалога.Да Тогда + Возврат; + КонецЕсли; + + Состояние(НСтр("ru = 'Выполняется удаление данных. Пожалуйста, подождите...'")); + УдалитьНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузкаОтметитьВсе(Команда) + + Для Каждого Строка из Объект.ТаблицаПравилВыгрузки.ПолучитьЭлементы() Цикл + Строка.Включить = 1; + УстановитьПометкиПодчиненных(Строка, "Включить"); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузкаОтменитьВсе(Команда) + + Для Каждого Строка из Объект.ТаблицаПравилВыгрузки.ПолучитьЭлементы() Цикл + Строка.Включить = 0; + УстановитьПометкиПодчиненных(Строка, "Включить"); + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузкаОчиститьУзлыОбмена(Команда) + + УстановитьУзелОбменаУСтрокДереваНаСервере(Неопределено); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузкаУстановитьУзелОбмена(Команда) + + Если Элементы.ТаблицаПравилВыгрузки.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + УстановитьУзелОбменаУСтрокДереваНаСервере(Элементы.ТаблицаПравилВыгрузки.ТекущиеДанные.СсылкаНаУзелОбмена); + +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьПараметры(Команда) + + СохранитьПараметрыНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВосстановитьПараметры(Команда) + + ВосстановитьПараметрыНаСервере(); + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкаОтладкиВыгрузки(Команда) + + #Если ВебКлиент Тогда + Предупреждение(НСтр("ru = 'Возможности отладки недоступны при использовании Веб-клиента'")); + Возврат; + #КонецЕсли + + Если Не ПравилаЗагружены Тогда + + Предупреждение(НСтр("ru = 'Необходимо прочитать правила обмена'")); + Возврат; + + Иначе + + Объект.ИмяФайлаПравилОбмена = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаПравил, АдресФайлаПравилВХранилище); + + КонецЕсли; + + ОткрытьФормуНастройкиОтладкиОбработчиков(Истина); + + Если ЭтоКлиент Тогда + + УдалитьФайлы(Объект.ИмяФайлаПравилОбмена); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НаКлиенте(Команда) + + Если Не ЭтоКлиент Тогда + + ЭтоКлиент = Истина; + + ИзменитьРежимОбработки(ЭтоКлиент); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НаСервере(Команда) + + Если ЭтоКлиент Тогда + + ЭтоКлиент = Ложь; + + ИзменитьРежимОбработки(ЭтоКлиент); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура НастройкаОтладкиЗагрузки(Команда) + + #Если ВебКлиент Тогда + Предупреждение(НСтр("ru = 'Возможности отладки недоступны при использовании Веб-клиента'")); + Возврат; + #КонецЕсли + + АдресФайлаОбменаВХранилище = ""; + ИмяФайлаДляРасширения = ""; + + Если ЭтоКлиент Тогда + + Предупреждение(НСтр("ru = 'Выберите файл обмена данными.'")); + Если Не ПоместитьФайл(АдресФайлаОбменаВХранилище, "Файл обмена",ИмяФайлаДляРасширения,,ЭтаФорма.УникальныйИдентификатор) Тогда + Возврат; + КонецЕсли; + + Иначе + + Если ПустаяСтрока(ИмяФайлаОбмена) Тогда + Предупреждение(НСтр("ru = 'Не задан файл обмена данными.'")); + Возврат; + КонецЕсли; + + КонецЕсли; + + Объект.ИмяФайлаОбмена = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаОбмена ,АдресФайлаОбменаВХранилище, ИмяФайлаДляРасширения); + + ОткрытьФормуНастройкиОтладкиОбработчиков(Ложь); + + Если ЭтоКлиент Тогда + + УдалитьФайлы(Объект.ИмяФайлаОбмена); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьВыгрузку(Команда) + + ВыполнитьВыгрузкуИзФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ВыполнитьЗагрузку(Команда) + + ВыполнитьЗагрузкуИзФормы(); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрочитатьПравилаОбмена(Команда) + + АдресФайлаПравилВХранилище = ""; + ИмяФайлаДляРасширения = ""; + + Если ЭтоКлиент Тогда + + Если Не ПоместитьФайл(АдресФайлаПравилВХранилище, "Файл правил обмена", ИмяФайлаДляРасширения,,ЭтаФорма.УникальныйИдентификатор) Тогда + Возврат; + КонецЕсли; + + Иначе + + Если ПустаяСтрока(Объект.ИмяФайлаПравилОбмена) Тогда + Предупреждение(НСтр("ru = 'Выберите файл правил обмена.'")); + Возврат; + КонецЕсли; + + КонецЕсли; + + Объект.ФлагОшибки = Ложь; + + Состояние(НСтр("ru = 'Выполняется чтение правил обмена. Пожалуйста, подождите...'")); + ВыполнитьЗагрузкуПравилОбмена(АдресФайлаПравилВХранилище, ИмяфайлаДляРасширения); + + Если Не Объект.ФлагОшибки Тогда + + ПравилаЗагружены = Истина; + + Иначе + + ПравилаЗагружены = Ложь; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Открывает файл обмена во внешнем приложении +// +// Параметры: +// +// +&НаКлиенте +Процедура ОткрытьВПриложении(ТекстРедактирования, СтандартнаяОбработка) + + ЗапуститьПриложение("explorer " + ТекстРедактирования); + СтандартнаяОбработка = Ложь; + +КонецПроцедуры // ОткрытьВПриложении() + +&НаКлиенте +Процедура ОчиститьДанныеОФайлеДляЗагрузкиДанных() + + Объект.ВерсияПравилОбмена = ""; + Объект.ДатаВыгрузкиДанных = ""; + ПредставлениеПериодаВыгрузки = ""; + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработатьДоступностьЭлементовУправленияТранзакциями() + + Элементы.ИспользоватьТранзакции.Доступность = НЕ Объект.ФлагРежимОтладки; + + Элементы.КоличествоОбъектовНаТранзакцию.Доступность = Объект.ИспользоватьТранзакции; + +КонецПроцедуры + +&НаКлиенте +Процедура УстановитьДоступность() + + //Доступность кнопок настройки отладки обработчиков + Элементы.НастройкаОтладкиВыгрузки.Доступность = Объект.ФлагРежимОтладкиОбработчиков; + Элементы.НастройкаОтладкиЗагрузки.Доступность = Объект.ФлагРежимОтладкиОбработчиков; + +КонецПроцедуры + +&НаКлиенте +Процедура АрхивироватьФайлПриИзмененииЗначения() + + Если Объект.АрхивироватьФайл Тогда + ИмяФайлаДанных = СтрЗаменить(ИмяФайлаДанных, ".xml", ".zip"); + Иначе + ИмяФайлаДанных = СтрЗаменить(ИмяФайлаДанных, ".zip", ".xml"); + КонецЕсли; + + Элементы.ПарольДляСжатияФайлаОбмена.Доступность = Объект.АрхивироватьФайл; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьУзелОбменаУСтрокДерева(Дерево, УзелОбмена) + + Для Каждого Строка Из Дерево Цикл + + Если Строка.ЭтоГруппа Тогда + + УстановитьУзелОбменаУСтрокДерева(Строка.ПолучитьЭлементы(), УзелОбмена); + + Иначе + + Строка.СсылкаНаУзелОбмена = УзелОбмена; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +// Заполняет дерево метаданных, доступных для удаления. +&НаСервере +Процедура ЗаполнитьСписокТиповДоступныхДляУдаления() + + ДеревоДанных = РеквизитФормыВЗначение("УдаляемыеДанные"); + + ДеревоДанных.Строки.Очистить(); + + СтрокаДерева = ДеревоДанных.Строки.Добавить(); + СтрокаДерева.Представление = "Справочники"; + + Для каждого ОбъектМД Из Метаданные.Справочники Цикл + + Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда + Продолжить; + КонецЕсли; + + СтрокаМД = СтрокаДерева.Строки.Добавить(); + СтрокаМД.Представление = ОбъектМД.Имя; + СтрокаМД.Метаданные = "СправочникСсылка." + ОбъектМД.Имя; + + КонецЦикла; + + СтрокаДерева = ДеревоДанных.Строки.Добавить(); + СтрокаДерева.Представление = "Планы видов характеристик"; + + Для каждого ОбъектМД Из Метаданные.ПланыВидовХарактеристик Цикл + + Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда + Продолжить; + КонецЕсли; + + СтрокаМД = СтрокаДерева.Строки.Добавить(); + СтрокаМД.Представление = ОбъектМД.Имя; + СтрокаМД.Метаданные = "ПланВидовХарактеристикСсылка." + ОбъектМД.Имя; + + КонецЦикла; + + СтрокаДерева = ДеревоДанных.Строки.Добавить(); + СтрокаДерева.Представление = "Документы"; + + Для каждого ОбъектМД Из Метаданные.Документы Цикл + + Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда + Продолжить; + КонецЕсли; + + СтрокаМД = СтрокаДерева.Строки.Добавить(); + СтрокаМД.Представление = ОбъектМД.Имя; + СтрокаМД.Метаданные = "ДокументСсылка." + ОбъектМД.Имя; + + КонецЦикла; + + СтрокаДерева = ДеревоДанных.Строки.Добавить(); + СтрокаДерева.Представление = "РегистрыСведений"; + + Для каждого ОбъектМД Из Метаданные.РегистрыСведений Цикл + + Если Не ПравоДоступа("Удаление", ОбъектМД) Тогда + Продолжить; + КонецЕсли; + + Подчинен = (ОбъектМД.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.ПодчинениеРегистратору); + Если Подчинен Тогда Продолжить КонецЕсли; + + СтрокаМД = СтрокаДерева.Строки.Добавить(); + СтрокаМД.Представление = ОбъектМД.Имя; + СтрокаМД.Метаданные = "РегистрСведенийЗапись." + ОбъектМД.Имя; + + КонецЦикла; + + ЗначениеВРеквизитФормы(ДеревоДанных, "УдаляемыеДанные"); + +КонецПроцедуры + +// Возвращает версию обработки. +&НаСервере +Функция ВерсияОбъектаСтрокойНаСервере() + + Возврат РеквизитФормыВЗначение("Объект").ВерсияОбъектаСтрокой(); + +КонецФункции + +&НаКлиенте +Процедура ВыполнитьЗагрузкуПравилОбмена(АдресФайлаПравилВХранилище = "", ИмяФайлаДляРасширения = "") + + Объект.ФлагОшибки = Ложь; + + ЗагрузитьПравилаОбменаИПараметрыНаСервере(АдресФайлаПравилВХранилище, ИмяФайлаДляРасширения); + + Если Не Объект.ФлагОшибки Тогда + + ПравилаЗагружены = Истина; + + РазвернутьСтрокиДерева(Объект.ТаблицаПравилВыгрузки, Элементы.ТаблицаПравилВыгрузки, "Включить"); + + Иначе + + ПравилаЗагружены = Ложь; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура РазвернутьСтрокиДерева(ДеревоДанных, ПредставлениеНаФорме, ИмяФлажка) + + СтрокиДерева = ДеревоДанных.ПолучитьЭлементы(); + + Для Каждого Строка Из СтрокиДерева Цикл + + ИдентификаторСтроки=Строка.ПолучитьИдентификатор(); + ПредставлениеНаФорме.Развернуть(ИдентификаторСтроки, Ложь); + ВключитьРодителяЕслиВключеныПодчиненные(Строка, ИмяФлажка); + + КонецЦикла; + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьРодителяЕслиВключеныПодчиненные(СтрокаДерева, ИмяФлажка) + + Включить = СтрокаДерева[ИмяФлажка]; + + Для Каждого ПодчиненнаяСтрока Из СтрокаДерева.ПолучитьЭлементы() Цикл + + Если ПодчиненнаяСтрока[ИмяФлажка] = 1 Тогда + + Включить = 1; + + КонецЕсли; + + Если ПодчиненнаяСтрока.ПолучитьЭлементы().Количество() > 0 Тогда + + ВключитьРодителяЕслиВключеныПодчиненные(ПодчиненнаяСтрока, ИмяФлажка); + + КонецЕсли; + + КонецЦикла; + + СтрокаДерева[ИмяФлажка] = Включить; + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьПравилаОбменаИПараметрыНаСервере(АдресФайлаПравилВХранилище, ИмяФайлаДляРасширения) + + ИмяФайлаПравилОбмена = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаПравил ,АдресФайлаПравилВХранилище, ИмяФайлаДляРасширения); + + Если ИмяФайлаПравилОбмена = Неопределено Тогда + + Возврат; + + Иначе + + Объект.ИмяФайлаПравилОбмена = ИмяФайлаПравилОбмена; + + КонецЕсли; + + ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); + + ОбъектДляСервера.ЗагрузитьПравилаОбмена(); + ОбъектДляСервера.ИнициализироватьПервоначальныеЗначенияПараметров(); + + Если ЭтоКлиент Тогда + + УдалитьФайлы(Объект.ИмяФайлаПравилОбмена); + + КонецЕсли; + + ЗначениеВРеквизитФормы(ОбъектДляСервера.ТаблицаПравилВыгрузки, "Объект.ТаблицаПравилВыгрузки"); + ЗначениеВРеквизитФормы(ОбъектДляСервера.ТаблицаНастройкиПараметров, "Объект.ТаблицаНастройкиПараметров"); + +КонецПроцедуры + +// Открывает диалог выбора файла +// +// Параметры: +// Элемент - Элемент управления, для которого выбираем файл +// ПроверятьСуществование - Если Истина, то выбор отменяется если файл не существует +// +&НаКлиенте +Процедура ВыборФайла(Элемент, ИмяСвойства, ПроверятьСуществование=Ложь, Знач РасширениеПоУмолчанию = "xml", + АрхивироватьФайлДанных = Истина, ВыборФайлаПравил = Ложь) + + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + + Если РасширениеПоУмолчанию = "txt" Тогда + + ДиалогВыбораФайла.Фильтр = "Файл протокола обмена (*.txt)|*.txt"; + ДиалогВыбораФайла.Расширение = "txt"; + + ИначеЕсли Объект.РежимОбмена = "Выгрузка" Тогда + + Если АрхивироватьФайлДанных Тогда + + ДиалогВыбораФайла.Фильтр = "Архивный файл данных (*.zip)|*.zip"; + ДиалогВыбораФайла.Расширение = "zip"; + + ИначеЕсли ВыборФайлаПравил Тогда + + ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml|Архивный файл данных (*.zip)|*.zip"; + ДиалогВыбораФайла.Расширение = "xml"; + + Иначе + + ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml"; + ДиалогВыбораФайла.Расширение = "xml"; + + КонецЕсли; + + Иначе + + ДиалогВыбораФайла.Фильтр = "Файл данных (*.xml)|*.xml|Архивный файл данных (*.zip)|*.zip"; + ДиалогВыбораФайла.Расширение = "xml"; + + КонецЕсли; + + ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выберите файл'"); + ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь; + ДиалогВыбораФайла.ИндексФильтра = 0; + ДиалогВыбораФайла.ПолноеИмяФайла = Элемент.ТекстРедактирования; + ДиалогВыбораФайла.ПроверятьСуществованиеФайла = ПроверятьСуществование; + + Если ДиалогВыбораФайла.Выбрать() Тогда + + ИмяСвойства = ДиалогВыбораФайла.ПолноеИмяФайла; + + Если Элемент = Элементы.ИмяФайлаПравил Тогда + ИмяФайлаПравилПриИзменении(Элемент); + + ИначеЕсли Элемент = Элементы.ИмяФайлаОбмена Тогда + ИмяФайлаОбменаПриИзменении(Элемент); + + ИначеЕсли Элемент = Элементы.ИмяФайлаДанных Тогда + ИмяФайлаДанныхПриИзменении(Элемент); + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Функция ВыполнитьПодключениеКИБПриемникуНаСервере() + + РезультатПодключения = РеквизитФормыВЗначение("Объект").ВыполнитьПодключениеКИБПриемнику(); + + Если РезультатПодключения <> Неопределено Тогда + + Сообщить(НСтр("ru = 'Подключение к информационной базе приемнику произошло успешно.'")); + + КонецЕсли; + +КонецФункции + +// Устанавливает состояние пометки у подчиненных строк строки дерева значений +// в зависимости от пометки текущей строки +// +// Параметры: +// ТекСтрока - Строка дерева значений +// +&НаКлиенте +Процедура УстановитьПометкиПодчиненных(ТекСтрока, ИмяФлажка) + + Подчиненные = ТекСтрока.ПолучитьЭлементы(); + + Если Подчиненные.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Строка из Подчиненные Цикл + + Строка[ИмяФлажка] = ТекСтрока[ИмяФлажка]; + + УстановитьПометкиПодчиненных(Строка, ИмяФлажка); + + КонецЦикла; + +КонецПроцедуры // УстановитьПометкиПодчиненных() + +// Устанавливает состояние пометки у родительских строк строки дерева значений +// в зависимости от пометки текущей строки +// +// Параметры: +// ТекСтрока - Строка дерева значений +// +&НаКлиенте +Процедура УстановитьПометкиРодителей(ТекСтрока, ИмяФлажка) + + Родитель = ТекСтрока.ПолучитьРодителя(); + Если Родитель = Неопределено Тогда + Возврат; + КонецЕсли; + + ТекСостояние = Родитель[ИмяФлажка]; + + НайденыВключенные = Ложь; + НайденыВыключенные = Ложь; + + Для Каждого Строка из Родитель.ПолучитьЭлементы() Цикл + Если Строка[ИмяФлажка] = 0 Тогда + НайденыВыключенные = Истина; + ИначеЕсли Строка[ИмяФлажка] = 1 + ИЛИ Строка[ИмяФлажка] = 2 Тогда + НайденыВключенные = Истина; + КонецЕсли; + Если НайденыВключенные И НайденыВыключенные Тогда + Прервать; + КонецЕсли; + КонецЦикла; + + Если НайденыВключенные И НайденыВыключенные Тогда + Включить = 2; + ИначеЕсли НайденыВключенные И (Не НайденыВыключенные) Тогда + Включить = 1; + ИначеЕсли (Не НайденыВключенные) И НайденыВыключенные Тогда + Включить = 0; + ИначеЕсли (Не НайденыВключенные) И (Не НайденыВыключенные) Тогда + Включить = 2; + КонецЕсли; + + Если Включить = ТекСостояние Тогда + Возврат; + Иначе + Родитель[ИмяФлажка] = Включить; + УстановитьПометкиРодителей(Родитель, ИмяФлажка); + КонецЕсли; + +КонецПроцедуры // УстановитьПометкиРодителей() + +&НаСервере +Процедура ОткрытьФайлЗагрузкиНаСервере(АдресФайла) + + Если ЭтоКлиент Тогда + + ДвоичныеДанные = ПолучитьИзВременногоХранилища (АдресФайла); + АдресНаСервере = ПолучитьИмяВременногоФайла(".xml"); + ДвоичныеДанные.Записать(АдресНаСервере); + Объект.ИмяФайлаОбмена = АдресНаСервере; + + Иначе + + ФайлНаСервере = Новый Файл(ИмяФайлаОбмена); + + Если Не ФайлНаСервере.Существует() Тогда + + Сообщить(НСтр("ru = 'Не найден файл обмена на сервере.'")); + Возврат; + + КонецЕсли; + + Объект.ИмяФайлаОбмена = ИмяФайлаОбмена; + + КонецЕсли; + + ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); + + ОбъектДляСервера.ОткрытьФайлЗагрузки(Истина); + + Объект.ДатаНачала = ОбъектДляСервера.ДатаНачала; + Объект.ДатаОкончания = ОбъектДляСервера.ДатаОкончания; + Объект.ДатаВыгрузкиДанных = ОбъектДляСервера.ДатаВыгрузкиДанных; + Объект.ВерсияПравилОбмена = ОбъектДляСервера.ВерсияПравилОбмена; + Объект.Комментарий = ОбъектДляСервера.Комментарий; + +КонецПроцедуры + +// Удаляет помеченные строки дерева метаданных +// +&НаСервере +Процедура УдалитьНаСервере() + + ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); + ДеревоУдаляемыхДанных = РеквизитФормыВЗначение("УдаляемыеДанные"); + + ОбъектДляСервера.ИнициализироватьМенеджерыИСообщения(); + + Для Каждого СтрокаДерева Из ДеревоУдаляемыхДанных.Строки Цикл + + Для Каждого СтрокаМД Из СтрокаДерева.Строки Цикл + + Если Не СтрокаМД.Пометка Тогда + Продолжить; + Конецесли; + + ТипСтрокой = СтрокаМД.Метаданные; + ОбъектДляСервера.УдалитьОбъектыТипа(ТипСтрокой); + + КонецЦикла; + + КонецЦикла; + +КонецПроцедуры + +// Устанавливает узел обмена у строк дерева +// +&НаСервере +Процедура УстановитьУзелОбменаУСтрокДереваНаСервере(УзелОбмена) + + УстановитьУзелОбменаУСтрокДерева(Объект.ТаблицаПравилВыгрузки.ПолучитьЭлементы(), УзелОбмена); + +КонецПроцедуры + +//Сохраняет значения параметров. +// +&НаСервере +Процедура СохранитьПараметрыНаСервере() + + ТаблицаПараметров = РеквизитФормыВЗначение("Объект.ТаблицаНастройкиПараметров"); + + СохраняемыеПараметры = Новый Структура; + + Для Каждого СтрокаТаблицы Из ТаблицаПараметров Цикл + СохраняемыеПараметры.Вставить(СтрокаТаблицы.Наименование, СтрокаТаблицы.Значение); + КонецЦикла; + + ХранилищеСистемныхНастроек.Сохранить("УниверсальныйОбменданнымиXML", "Параметры", СохраняемыеПараметры); + +КонецПроцедуры + +//Восстанавливает значения параметров. +// +&НаСервере +Процедура ВосстановитьПараметрыНаСервере() + + ТаблицаПараметров = РеквизитФормыВЗначение("Объект.ТаблицаНастройкиПараметров"); + ВосстановленныеПараметры = ХранилищеСистемныхНастроек.Загрузить("УниверсальныйОбменданнымиXML", "Параметры"); + + Если ТипЗнч(ВосстановленныеПараметры) <> Тип("Структура") Тогда + Возврат; + КонецЕсли; + + Если ВосстановленныеПараметры.Количество() = 0 Тогда + Возврат; + КонецЕсли; + + Для Каждого Парам Из ВосстановленныеПараметры Цикл + + ИмяПараметра = Парам.Ключ; + + СтрокаТаблицы = ТаблицаПараметров.Найти(Парам.Ключ, "Наименование"); + + Если СтрокаТаблицы <> Неопределено Тогда + + СтрокаТаблицы.Значение = Парам.Значение; + + КонецЕсли; + + КонецЦикла; + + ЗначениеВРеквизитФормы(ТаблицаПараметров, "Объект.ТаблицаНастройкиПараметров"); + +КонецПроцедуры + +//Интерактивная выгрузка данных. +// +&НаКлиенте +Процедура ВыполнитьЗагрузкуИзФормы() + + Перем АдресФайла, ИмяФайлаДляРасширения; + + ДобавитьСтрокуКСпискуВыбора(Элементы.ИмяФайлаОбмена.СписокВыбора, ИмяФайлаОбмена, ЗагрузкаДанныхИхФайла); + + Если ЭтоКлиент Тогда + + Предупреждение(НСтр("ru = 'Выберите файл обмена данными.'")); + Если Не ПоместитьФайл(АдресФайла, "Файл обмена", ИмяФайлаДляРасширения,,ЭтаФорма.УникальныйИдентификатор) Тогда + Возврат; + КонецЕсли; + + Иначе + + Если ПустаяСтрока(ИмяФайлаОбмена) Тогда + Предупреждение(НСтр("ru = 'Выберите файл обмена данными на сервере.'")); + Возврат; + КонецЕсли; + + КонецЕсли; + + Состояние(НСтр("ru = 'Выполняется загрузка данных. Пожалуйста, подождите...'")); + ВыполнитьЗагрузкуНаСервере(АдресФайла, ИмяФайлаДляРасширения); + + ОткрытьДанныеПротоколовОбменаПриНеобходимости(); + +КонецПроцедуры + +&НаСервере +Процедура ВыполнитьЗагрузкуНаСервере(АдресФайла = "", ИмяФайлаДляРасширения) + + ИмяЗагружаемогоФайла = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаОбмена ,АдресФайла, ИмяФайлаДляРасширения); + + Если ИмяЗагружаемогоФайла = Неопределено Тогда + + Возврат; + + Иначе + + Объект.ИмяФайлаОбмена = ИмяЗагружаемогоФайла; + + КонецЕсли; + + ФлагРежимОтладкиСохраненный = Объект.ФлагРежимОтладки; + ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); + ОбъектДляСервера.ФлагРежимОтладки = ФлагРежимОтладкиСохраненный; + ОбъектДляСервера.РежимОбмена = "Загрузка"; + ОбъектДляСервера.ВыполнитьЗагрузку(); + + Попытка + + Если Не ПустаяСтрока(АдресФайла) Тогда + УдалитьФайлы(ИмяЗагружаемогоФайла); + КонецЕсли; + + Исключение + + КонецПопытки; + + ЗначениеВРеквизитФормы(ОбъектДляСервера, "Объект"); + + ПравилаЗагружены = Ложь; + +КонецПроцедуры + +&НаСервере +Функция ИмяФайлаНаСервереИлиКлиенте(ИмяРеквизита ,Знач АдресФайла = "", Знач ИмяФайлаДляРасширения = ".xml", + СоздатьНовый = Ложь, ПроверятьСуществование = Истина + ) + + ИмяФайла = Неопределено; + + Если ЭтоКлиент Тогда + + Если СоздатьНовый Тогда + + Расширение = ? (Объект.АрхивироватьФайл, ".zip", ".xml"); + + ИмяФайла = ПолучитьИмяВременногоФайла(Расширение); + + Файл = Новый Файл(ИмяФайла); + + Иначе + + Расширение = РасширениеФайла(ИмяФайлаДляРасширения); + ДвоичныеДанные = ПолучитьИзВременногоХранилища (АдресФайла); + АдресНаСервере = ПолучитьИмяВременногоФайла(Расширение); + ДвоичныеДанные.Записать(АдресНаСервере); + ИмяФайла = АдресНаСервере; + + КонецЕсли; + + Иначе + + ФайлНаСервере = Новый Файл(ИмяРеквизита); + + Если Не ФайлНаСервере.Существует() И ПроверятьСуществование Тогда + + Сообщить(НСтр("ru = 'Указанный файл не существует.'")); + + Иначе + + ИмяФайла = ИмяРеквизита; + + КонецЕсли; + + КонецЕсли; + + Возврат ИмяФайла; + +КонецФункции + +&НаСервере +Функция РасширениеФайла(Знач ИмяФайла) + + ПозицияТочки = ПоследнийРазделитель(ИмяФайла); + + Расширение = Прав(ИмяФайла,СтрДлина(ИмяФайла) - ПозицияТочки + 1); + + Возврат Расширение; + +КонецФункции + +&НаСервере +Функция ПоследнийРазделитель(СтрокаСРазделителем, Разделитель = ".") + + ДлинаСтроки = СтрДлина(СтрокаСРазделителем); + + Пока ДлинаСтроки > 0 Цикл + + Если Сред(СтрокаСРазделителем, ДлинаСтроки, 1) = Разделитель Тогда + + Возврат ДлинаСтроки; + + КонецЕсли; + + ДлинаСтроки = ДлинаСтроки - 1; + + КонецЦикла; + +КонецФункции + +&НаКлиенте +Процедура ВыполнитьВыгрузкуИзФормы() + + Если Не ПравилаЗагружены Тогда + + Предупреждение(НСтр("ru = 'Необходимо прочитать правила обмена'")); + Возврат; + + КонецЕсли; + + // запомним файл правил и файл выгрузки + ДобавитьСтрокуКСпискуВыбора(Элементы.ИмяФайлаПравил.СписокВыбора, ИмяФайлаПравил, ПравилаОбмена); + + Если НЕ Объект.НепосредственноеЧтениеВИБПриемнике и Не ЭтоКлиент Тогда + + Если Врег(СокрЛП(Объект.ИмяФайлаПравилОбмена)) = Врег(СокрЛП(Объект.ИмяФайлаОбмена)) Тогда + + Предупреждение(НСтр("ru = 'Файл правил обмена не может совпадать с файлом данных. Выберите другой файл для выгрузки данных.'")); + Возврат; + + КонецЕсли; + + ДобавитьСтрокуКСпискуВыбора(Элементы.ИмяФайлаДанных.СписокВыбора, ИмяФайлаДанных, ВыгрузкаДанныхВФайл); + + КонецЕсли; + + Состояние(НСтр("ru = 'Выполняется выгрузка данных. Пожалуйста, подождите...'")); + АдресФайлаДанныхВХранилище = ВыполнитьВыгрузкуНаСервере(); + + Если АдресФайлаДанныхВХранилище = Неопределено Тогда + Возврат; + КонецЕсли; + + РазвернутьСтрокиДерева(Объект.ТаблицаПравилВыгрузки, Элементы.ТаблицаПравилВыгрузки, "Включить"); + + Если ЭтоКлиент И Не ПрямаяВыгрузка Тогда + + ИмяСохраняемогоФайла = ?(Объект.АрхивироватьФайл, НСтр("ru = 'Файл выгрузки.zip'"),НСтр("ru = 'Файл выгрузки.xml'")); + + ПолучитьФайл(АдресФайлаДанныхВХранилище, ИмяСохраняемогоФайла) + + КонецЕсли; + + ОткрытьДанныеПротоколовОбменаПриНеобходимости(); + +КонецПроцедуры + +&НаСервере +Функция ВыполнитьВыгрузкуНаСервере() + + Объект.ИмяФайлаПравилОбмена = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаПравил, АдресФайлаПравилВХранилище); + + Если Не ПрямаяВыгрузка Тогда + + ИмяВременногоФайлаДанных = ИмяФайлаНаСервереИлиКлиенте(ИмяФайлаДанных, ,,Истина, Ложь); + + Если ИмяВременногоФайлаДанных = Неопределено Тогда + + Возврат Неопределено; + Сообщить(НСтр("ru = 'Не определен файл данных'")); + + Иначе + + Объект.ИмяФайлаОбмена = ИмяВременногоФайлаДанных; + + КонецЕсли; + + КонецЕсли; + + ФлагРежимОтладкиСохраненный = Объект.ФлагРежимОтладки; + ТаблицаПравилВыгрузки = РеквизитФормыВЗначение("Объект.ТаблицаПравилВыгрузки"); + ТаблицаНастройкиПараметров = РеквизитФормыВЗначение("Объект.ТаблицаНастройкиПараметров"); + ФлагОтладкиОбработчиков = Объект.ФлагРежимОтладкиОбработчиков; + ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); + ОбъектДляСервера.ФлагРежимОтладки = ФлагРежимОтладкиСохраненный; + ОбъектДляСервера.РежимОбмена = "Выгрузка"; + + Если ФлагОтладкиОбработчиков Тогда + + Отказ = Ложь; + + Файл = Новый Файл(ОбъектДляСервера.ИмяФайлаВнешнейОбработкиОбработчиковСобытий); + + Если Не Файл.Существует() Тогда + + Сообщить(НСтр("ru = 'Файл внешней обработки отладчиков событий не существует на сервере'")); + Возврат Неопределено; + + КонецЕсли; + + ОбъектДляСервера.ВыгрузитьОбработчикиСобытий(Отказ); + + Если Отказ Тогда + + Сообщить(НСтр("ru = 'Не удалось выгрузить обработчики событий'")); + Возврат ""; + + КонецЕсли; + + Иначе + + ОбъектДляСервера.ЗагрузитьПравилаОбмена(); + ОбъектДляСервера.ИнициализироватьПервоначальныеЗначенияПараметров(); + + КонецЕсли; + + ИзменитьДеревоПравилВыгрузки(ОбъектДляСервера.ТаблицаПравилВыгрузки.Строки, ТаблицаПравилВыгрузки.Строки); + ИзменитьТаблицуПараметров(ОбъектДляСервера.ТаблицаНастройкиПараметров, ТаблицаНастройкиПараметров); + + ОбъектДляСервера.ФлагРежимОтладкиОбработчиков = ФлагОтладкиОбработчиков; + ОбъектДляСервера.ВыполнитьВыгрузку(); + ОбъектДляСервера.ТаблицаПравилВыгрузки = РеквизитФормыВЗначение("Объект.ТаблицаПравилВыгрузки"); + + Если ЭтоКлиент И Не ПрямаяВыгрузка Тогда + + АдресФайлаДанных = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Объект.ИмяФайлаОбмена), ЭтаФорма.УникальныйИдентификатор); + УдалитьФайлы(Объект.ИмяФайлаОбмена); + + Иначе + + АдресФайлаДанных = ""; + + КонецЕсли; + + Если ЭтоКлиент Тогда + + УдалитьФайлы(ОбъектДляСервера.ИмяФайлаПравилОбмена); + + КонецЕсли; + + ЗначениеВРеквизитФормы(ОбъектДляСервера, "Объект"); + + Возврат АдресФайлаДанных; + +КонецФункции + +// Изменяет дерево ПВД в соответствии с деревом на форме. +// +&НаСервере +Процедура ИзменитьДеревоПравилВыгрузки(СтрокиИсходногоДерева, СтрокиЗаменяемогоДерева) + + КолонкаВключить = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("Включить"); + СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаВключить, "Включить"); + КолонкаУзел = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("СсылкаНаУзелОбмена"); + СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаУзел, "СсылкаНаУзелОбмена"); + + Для Каждого СтрокаИсходногоДерева Из СтрокиИсходногоДерева Цикл + + ИндексСтроки = СтрокиИсходногоДерева.Индекс(СтрокаИсходногоДерева); + СтрокаИзменяемогоДерева = СтрокиЗаменяемогоДерева.Получить(ИндексСтроки); + + ИзменитьДеревоПравилВыгрузки(СтрокаИсходногоДерева.Строки, СтрокаИзменяемогоДерева.Строки); + + КонецЦикла; + +КонецПроцедуры + +// Изменяет таблицу параметров в соответствии с таблицей на форме +// +&НаСервере +Процедура ИзменитьТаблицуПараметров(ТаблицаБазы, ТаблицаФормы) + + КолонкаНаименование = ТаблицаФормы.ВыгрузитьКолонку("Наименование"); + ТаблицаБазы.ЗагрузитьКолонку(КолонкаНаименование, "Наименование"); + КолонкаЗначение = ТаблицаФормы.ВыгрузитьКолонку("Значение"); + ТаблицаБазы.ЗагрузитьКолонку(КолонкаЗначение, "Значение"); + +КонецПроцедуры + +&НаКлиенте +Процедура ПрямаяВыгрузкаПриИзмененииЗначения() + + ПараметрыВыгрузки = Элементы.ПараметрыВыгрузки; + + ПараметрыВыгрузки.ТекущаяСтраница = ?(ПрямаяВыгрузка = 0, + ПараметрыВыгрузки.ПодчиненныеЭлементы.ВыгрузкаВФайл, + ПараметрыВыгрузки.ПодчиненныеЭлементы.ВыгрузкаВИБПриемник + ); + + Объект.НепосредственноеЧтениеВИБПриемнике = ?(ПрямаяВыгрузка = 1, Истина, Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ДобавитьСтрокуКСпискуВыбора(СписокСохраняемыхЗначений, ЗначениеСохранения, ИмяПараметраДляСохранения) + + Если ПустаяСтрока(ЗначениеСохранения) Тогда + Возврат; + КонецЕсли; + + НайденныйЭлемент = СписокСохраняемыхЗначений.НайтиПоЗначению(ЗначениеСохранения); + Если НайденныйЭлемент <> Неопределено Тогда + СписокСохраняемыхЗначений.Удалить(НайденныйЭлемент); + КонецЕсли; + + СписокСохраняемыхЗначений.Вставить(0, ЗначениеСохранения); + + Пока СписокСохраняемыхЗначений.Количество() > 10 Цикл + СписокСохраняемыхЗначений.Удалить(СписокСохраняемыхЗначений.Количество() - 1); + КонецЦикла; + + ИмяПараметраДляСохранения = СписокСохраняемыхЗначений; + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФормуНастройкиОтладкиОбработчиков(ОбработчикиСобытийИзФайлаПравил) + + ИмяФайлаВнешнейОбработкиОбработчиковСобытийСохраняемое = Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий; + РежимОтладкиАлгоритмовСохраняемый = Объект.РежимОтладкиАлгоритмов; + ИмяФайлаПравилОбменаСохраняемый = Объект.ИмяФайлаПравилОбмена; + ИмяФайлаОбменаСохраняемый = Объект.ИмяФайлаОбмена; + + ИмяЭтойФормы = ЭтаФорма.ИмяФормы; + ИмяОбработки = Лев(ИмяЭтойФормы, ПоследнийРазделитель(ИмяЭтойФормы)); + ИмяВызываемойФормы = ИмяОбработки + "УправляемаяФормаНастройкиОтладкиОбработчиков"; + + ФормаНастройкиОтладкиОбработчиков = ПолучитьФорму(ИмяВызываемойФормы,,ЭтаФорма); + + ФормаНастройкиОтладкиОбработчиков.ИмяФайлаВнешнейОбработкиОбработчиковСобытий = ИмяФайлаВнешнейОбработкиОбработчиковСобытийСохраняемое; + ФормаНастройкиОтладкиОбработчиков.РежимОтладкиАлгоритмов = РежимОтладкиАлгоритмовСохраняемый; + ФормаНастройкиОтладкиОбработчиков.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена = ОбработчикиСобытийИзФайлаПравил; + ФормаНастройкиОтладкиОбработчиков.Объект.ИмяФайлаПравилОбмена = ИмяФайлаПравилОбменаСохраняемый; + ФормаНастройкиОтладкиОбработчиков.Объект.ИмяФайлаОбмена = ИмяФайлаОбменаСохраняемый; + ФормаНастройкиОтладкиОбработчиков.ИмяОбработки = ИмяОбработки; + + Если ФормаНастройкиОтладкиОбработчиков.ОткрытьМодально() = Истина Тогда + + Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий = ФормаНастройкиОтладкиОбработчиков.ИмяФайлаВнешнейОбработкиОбработчиковСобытий; + Объект.РежимОтладкиАлгоритмов = ФормаНастройкиОтладкиОбработчиков.РежимОтладкиАлгоритмов; + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРасположениеФайла() + + Элементы.ИмяФайлаПравил.Видимость = Не ЭтоКлиент; + Элементы.ИмяФайлаДанных.Видимость = Не ЭтоКлиент; + Элементы.ИмяФайлаОбмена.Видимость = Не ЭтоКлиент; + + ПравилаЗагружены = Ложь; + +КонецПроцедуры + +&НаКлиенте +Процедура ИзменитьРежимОбработки(РежимРаботы) + + ГруппаРежима = КоманднаяПанель.ПодчиненныеЭлементы.РежимОбработки.ПодчиненныеЭлементы; + + ГруппаРежима.ФормаНаКлиенте.Пометка = РежимРаботы; + ГруппаРежима.ФормаНаСервере.Пометка = Не РежимРаботы; + + КоманднаяПанель.ПодчиненныеЭлементы.РежимОбработки.Заголовок = + ?(РежимРаботы, НСтр("ru = 'Режим работы (на клиенте)'"), НСтр("ru = 'Режим работы (на сервере)'")); + + Объект.ТаблицаПравилВыгрузки.ПолучитьЭлементы().Очистить(); + Объект.ТаблицаНастройкиПараметров.Очистить(); + + ИзменитьРасположениеФайла(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьДанныеПротоколовОбменаПриНеобходимости() + + Если НЕ Объект.ОткрыватьПротоколыОбменаПослеВыполненияОпераций Тогда + Возврат; + КонецЕсли; + + #Если Не ВебКлиент Тогда + + Если Не ПустаяСтрока(Объект.ИмяФайлаПротоколаОбмена) Тогда + ЗапуститьПриложение("explorer " + Объект.ИмяФайлаПротоколаОбмена); + КонецЕсли; + + Если Объект.НепосредственноеЧтениеВИБПриемнике Тогда + + Объект.ИмяФайлаПротоколаОбменаЗагрузка = ПолучитьИмяПротоколаДляВторойИнформационнойБазыComСоединенияНаСервере(); + + Если Не ПустаяСтрока(Объект.ИмяФайлаПротоколаОбменаЗагрузка) Тогда + ЗапуститьПриложение("explorer " + Объект.ИмяПротоколаЗагрузки); + КонецЕсли; + + КонецЕсли; + + #КонецЕсли + +КонецПроцедуры + +&НаСервере +Функция ПолучитьИмяПротоколаДляВторойИнформационнойБазыComСоединенияНаСервере() + + Возврат РеквизитФормыВЗначение("Объект").ПолучитьИмяПротоколаДляВторойИнформационнойБазыComСоединения(); + +КонецФункции + diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form new file mode 100644 index 000000000..77031d14f --- /dev/null +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Form.form @@ -0,0 +1,960 @@ + + + + Группа_Шаг_1 + 1 + + ГруппаОтладкиАлгортимов + 7 + + ОтладкаАлгоритмов + 5 + true + true + + true + + + РежимОтладкиАлгоритмов + + + OnChange + ОтладкаАлгоритмовПриИзменении + + + ОтладкаАлгоритмовРасширеннаяПодсказка + 31 + Label + true + true + + Left + + + + ОтладкаАлгоритмовКонтекстноеМеню + 6 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + без отладки алгоритмов + + + 0 + + + + + ru + вызывать алгоритмы как процедуры + + + 1 + + + + + ru + подставлять код алгоритмов по месту вызова + + + 2 + + + Vertical + + + + ПодсказкаОтладкаАлгоритмов + 20 + + Группа_0 + 21 + + ДекорацияБезОтладки + 8 + + <key>ru</key> + <value>Алгоритмы не выгружаются. Режим удобно использовать, когда производить отладку алгоритмов не требуется. Алгоритмы будут выполняться, но их код недоступен для отладки.</value> + + true + true + + true + + + ДекорацияБезОтладкиРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + ДекорацияБезОтладкиКонтекстноеМеню + 9 + true + + Label + 34 + true + true + + Style.ПоясняющийТекст + + + Left + 6 + + + true + true + + true + + + <key>ru</key> + <value>Группа 0</value> + + + ru + Группа 0 + + + Группа_0РасширеннаяПодсказка + 34 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + Группа_1 + 22 + + ДекорацияКакПроцедуры + 24 + + <key>ru</key> + <value>Алгоритмы выгружаются как отдельные процедуры. При вызове алгоритма происходит обращение к соответствующей процедуре обработки. Ограничения использования режима см. справку.</value> + + true + true + + true + + + ДекорацияКакПроцедурыРасширеннаяПодсказка + 37 + Label + true + true + + Left + + + + ДекорацияКакПроцедурыКонтекстноеМеню + 25 + true + + Label + 34 + true + true + + Style.ПоясняющийТекст + + + Left + 6 + + + true + true + + true + + + <key>ru</key> + <value>Группа 1</value> + + + ru + Группа 1 + + + Группа_1РасширеннаяПодсказка + 36 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + Группа_2 + 23 + + ДекорацияПоМестуВызова + 26 + + <key>ru</key> + <value>Алгоритмы выгружаются как интегрированный код в обработчиках, т.е. взамен строки вызова алгоритма вставляется полный код алгоритма с учетом вложенных алгоритмов. Ограничения использования режима см. справку.</value> + + true + true + + true + + + ДекорацияПоМестуВызоваРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + + ДекорацияПоМестуВызоваКонтекстноеМеню + 27 + true + + Label + 34 + true + true + + Style.ПоясняющийТекст + + + Left + 6 + + + true + true + + true + + + <key>ru</key> + <value>Группа 2</value> + + + ru + Группа 2 + + + Группа_2РасширеннаяПодсказка + 38 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Подсказка отладка алгоритмов</value> + + + ru + Подсказка отладка алгоритмов + + 1 + + ПодсказкаОтладкаАлгоритмовРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Pages + + Auto + + + true + true + + true + + + <key>ru</key> + <value>Группа отладки алгортимов</value> + + + ru + Группа отладки алгортимов + + + ГруппаОтладкиАлгортимовРасширеннаяПодсказка + 30 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>1. Выберите режим отладки кода алгоритмов</value> + + + ru + Группа шаг 1 + + true + + Группа_Шаг_1РасширеннаяПодсказка + 29 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + Группа_Шаг_2 + 2 + + ГруппаВыгрузкиОбработчиков + 11 + + ВыгрузитьКодОбработчиков + 10 + + <key>ru</key> + <value>Сформировать модуль отладки выгрузки</value> + + true + true + + true + + + ВыгрузитьКодОбработчиковРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыгрузитьКодОбработчиков + Normal + Auto + true + true + UserCmds + Auto + + + ОткрытьФайл + 12 + true + true + + true + + + ОткрытьФайлРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + UsualButton + Form.Command.ОткрытьФайл + Normal + Auto + 3 + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа выгрузки обработчиков</value> + + + ru + Группа выгрузки обработчиков + + + ГруппаВыгрузкиОбработчиковРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>2. Выгрузите код обработчиков</value> + + + ru + Группа шаг 2 + + true + + Группа_Шаг_2РасширеннаяПодсказка + 40 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + Группа_Шаг_3 + 3 + + ПояснениеДекорация + 13 + + <key>ru</key> + <value>1. После формирования модуля отладки необходимо скопировать в буфер обмена полученный код обработчиков. +2. Открыть конфигуратор и создать новую внешнюю обработку. В модуль обработки вставить содержимое буфера обмена. Сохранить обработку. +3. На завершающем четвертом шаге указать вновь созданную обработку как обработку с экспортными процедурами обработчиков. +</value> + + true + true + + true + + + ПояснениеДекорацияРасширеннаяПодсказка + 45 + Label + true + true + + Left + + + + ПояснениеДекорацияКонтекстноеМеню + 14 + true + + Label + 67 + true + true + + Style.ПоясняющийТекст + + + Left + 6 + + + true + true + + true + + + <key>ru</key> + <value>3. Пояснения к созданию файла внешней обработки</value> + + + ru + Группа шаг 3 + + true + + Группа_Шаг_3РасширеннаяПодсказка + 44 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + Группа_Шаг_4 + 4 + + ИмяФайлаВнешнейОбработкиОбработчиковСобытий + 15 + + <key>ru</key> + <value>Имя файла внешней обработки с модулем отладки на сервере</value> + + true + true + + true + + + ИмяФайлаВнешнейОбработкиОбработчиковСобытий + + Top + + OnChange + ИмяФайлаВнешнейОбработкиОбработчиковСобытийПриИзменении + + + ИмяФайлаВнешнейОбработкиОбработчиковСобытийРасширеннаяПодсказка + 47 + Label + true + true + + Left + + + + ИмяФайлаВнешнейОбработкиОбработчиковСобытийКонтекстноеМеню + 16 + true + + InputField + Enter + true + Left + true + + + StartChoice + ИмяФайлаВнешнейОбработкиОбработчиковСобытийНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>4. Создайте (обновите) файл внешней обработки</value> + + + ru + Группа шаг 4 + + + Группа_Шаг_4РасширеннаяПодсказка + 46 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + WeakSeparation + true + true + auto + Auto + Auto + + + + НижняяКомманднаяПанель + 17 + + Готово + 18 + true + true + + true + + + ГотовоРасширеннаяПодсказка + 50 + Label + true + true + + Left + + + Form.Command.Готово + Auto + true + true + true + UserCmds + Auto + + + Отмена + 28 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Нижняя коммандная панель</value> + + + ru + Нижняя коммандная панель + + + НижняяКомманднаяПанельРасширеннаяПодсказка + 49 + Label + true + true + + Left + + + CommandBar + + Center + + + + ФормаКоманднаяПанель + -1 + Left + + + OnOpen + ПриОткрытии + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.УниверсальныйОбменДаннымиXML + + + true + + + true + +
              true
              +
              + + ИмяФайлаВнешнейОбработкиОбработчиковСобытий + + <key>ru</key> + <value>Имя файла внешней обработки обработчиков событий</value> + + 2 + + String + + + + true + + + true + + + + ОбработчикиСобытийЧитаемИзФайлаПравилОбмена + + <key>ru</key> + <value>Обработчики событий читаем из файла правил обмена</value> + + 3 + + Boolean + + + true + + + true + + + + РежимОтладкиАлгоритмов + + <key>ru</key> + <value>Режим отладки алгоритмов</value> + + 4 + + Number + + 1 + true + + + + true + + + true + + + + ИмяОбработки + + <key>ru</key> + <value>Имя обработки</value> + + 5 + + String + + + + true + + + true + + + + ВыгрузитьКодОбработчиков + + <key>ru</key> + <value>Выгрузить код обработчиков</value> + + 1 + + ru + Выгрузить код обработчиков + + + true + + + + ВыгрузитьКодОбработчиков + + + Auto + Auto + + + ОткрытьФайл + + <key>ru</key> + <value>Открыть файл</value> + + 2 + + ru + Открыть файл + + + true + + + StdPicture.ShowData + + + + ОткрытьФайл + + + Picture + Auto + Auto + + + Готово + + <key>ru</key> + <value>Готово</value> + + 3 + + ru + Готово + + + true + + + + Готово + + + Auto + Auto + + + + + + +
              diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl new file mode 100644 index 000000000..3db6ca0b3 --- /dev/null +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаНастройкиОтладкиОбработчиков/Module.bsl @@ -0,0 +1,270 @@ + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + ЗаголовокФормы = НСтр("ru = 'Настройка отладки обработчиков при %Событие% данных'"); + Событие = ?(ОбработчикиСобытийЧитаемИзФайлаПравилОбмена, НСтр("ru = 'выгрузке'"), НСтр("ru = 'загрузке'")); + ЗаголовокФормы = СтрЗаменить(ЗаголовокФормы, "%Событие%", Событие); + ЭтаФорма.Заголовок = ЗаголовокФормы; + + ЗаголовокКнопки = НСтр("ru = 'Сформировать модуль отладки %Событие%'"); + Событие = ?(ОбработчикиСобытийЧитаемИзФайлаПравилОбмена, НСтр("ru = 'выгрузки'"), НСтр("ru = 'загрузки'")); + ЗаголовокКнопки = СтрЗаменить(ЗаголовокКнопки, "%Событие%", Событие); + Элементы.ВыгрузитьКодОбработчиков.Заголовок = ЗаголовокКнопки; + + УстановитьВидимость(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОтладкаАлгоритмовПриИзменении(Элемент) + + Подсказка = Элементы.ПодсказкаОтладкаАлгоритмов; + + Подсказка.ТекущаяСтраница = Подсказка.ПодчиненныеЭлементы["Группа_"+РежимОтладкиАлгоритмов]; + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаВнешнейОбработкиОбработчиковСобытийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); + + ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Файл внешней обработки обработчиков событий (*.epf)|*.epf'"); + ДиалогВыбораФайла.Расширение = "epf"; + ДиалогВыбораФайла.Заголовок = НСтр("ru = 'Выберите файл'"); + ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь; + ДиалогВыбораФайла.ИндексФильтра = 0; + ДиалогВыбораФайла.ПолноеИмяФайла = Элемент.ТекстРедактирования; + ДиалогВыбораФайла.ПроверятьСуществованиеФайла = Истина; + + Если ДиалогВыбораФайла.Выбрать() Тогда + + ИмяФайлаВнешнейОбработкиОбработчиковСобытий = ДиалогВыбораФайла.ПолноеИмяФайла; + + ИмяФайлаВнешнейОбработкиОбработчиковСобытийПриИзменении(Элемент) + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИмяФайлаВнешнейОбработкиОбработчиковСобытийПриИзменении(Элемент) + + УстановитьВидимость(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура Готово(Команда) + + Отказ = Ложь; + + СтрокаСообщения = ""; + ПроверитьПравильностьВыполненияШаговМастера(Отказ, СтрокаСообщения); + + Если Отказ Тогда + Предупреждение(НСтр("ru = 'Не все необходимые шаги выполнены:'") + Символы.ПС + Символы.ПС + СтрокаСообщения); + Возврат; + КонецЕсли; + + УстановитьЗначенияРеквизитовОбработки(); + + ЭтаФорма.Закрыть(Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ОткрытьФайл(Команда) + + ПоказатьОбработчикиСобытийВОкне(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаКлиенте +Процедура УстановитьВидимость() + + ОтладкаАлгоритмовПриИзменении(Неопределено); + //Выделение красным цветом шагов мастера, которые выполнены неправильно + УстановитьВыделениеРамки("Группа_Шаг_4", ПустаяСтрока(ИмяФайлаВнешнейОбработкиОбработчиковСобытий)); + + Элементы.ОткрытьФайл.Доступность = Не ПустаяСтрока(Объект.ИмяВременногоФайлаОбработчиковСобытий); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВыделениеРамки(ИмяРамки, НадоВыделитьРамку = Ложь) + + РамкаШагаМастера = Элементы[ИмяРамки]; + + Если НадоВыделитьРамку Тогда + + РамкаШагаМастера.ЦветТекстаЗаголовка = ЦветаСтиля.ЦветОсобогоТекста; + + Иначе + + РамкаШагаМастера.ЦветТекстаЗаголовка = Новый Цвет; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ПроверитьПравильностьВыполненияШаговМастера(Отказ, СтрокаСообщения) + + Если ПустаяСтрока(ИмяФайлаВнешнейОбработкиОбработчиковСобытий) Тогда + + ВывестиСообщениеОбОшибке(Отказ, 4, СтрокаСообщения, НСтр("ru = 'Укажите имя файла внешней обработки.'")); + + КонецЕсли; + + ФайлВнешнейОбработкиОбработчиковСобытий = Новый Файл(ИмяФайлаВнешнейОбработкиОбработчиковСобытий); + + Если Не ФайлВнешнейОбработкиОбработчиковСобытий.Существует() Тогда + + ВывестиСообщениеОбОшибке(Отказ, 4, СтрокаСообщения, НСтр("ru = 'Указанный файл внешней обработки не существует.'")); + + КонецЕсли; + + Если Отказ Тогда + + Возврат; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ВывестиСообщениеОбОшибке(Отказ, НомерШага, СтрокаСообщения, СообщениеОбОшибке) + + //Выделяем рамку красным цветом + УстановитьВыделениеРамки("Группа_Шаг_"+Строка(НомерШага), Истина); + + //Формируем сообщение об ошибке + СтрокаСообщения = НСтр("ru = 'Шаг №'") + Строка(НомерШага) + ": " + СообщениеОбОшибке; + + Отказ = Истина; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьКодОбработчиков(Команда) + + //Возможно выгрузку уже совершали ранее... + Если Не ПустаяСтрока(Объект.ИмяВременногоФайлаОбработчиковСобытий) Тогда + + СписокКнопок = Новый СписокЗначений; + СписокКнопок.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Выгрузить повторно'")); + СписокКнопок.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Открыть модуль'")); + СписокКнопок.Добавить(КодВозвратаДиалога.Отмена); + + Ответ = Вопрос(НСтр("ru = 'Модуль отладки с кодом обработчиков уже выгружен.'"), СписокКнопок,,КодВозвратаДиалога.Нет); + + //Открываем имеющийся файл выгрузки + Если Ответ = КодВозвратаДиалога.Нет Тогда + + ПоказатьОбработчикиСобытийВОкне(); + + Возврат; + + ИначеЕсли Ответ = КодВозвратаДиалога.Отмена Тогда + + Возврат; + + КонецЕсли; + + КонецЕсли; + + Отказ = Ложь; + + УстановитьЗначенияРеквизитовОбработки(); + + ВыгрузитьОбработчикиСобытийНаСервере(Отказ); + + Если Не Отказ Тогда + + УстановитьВидимость(); + + ПоказатьОбработчикиСобытийВОкне(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПоказатьОбработчикиСобытийВОкне() + + ИмяВызываемойФормы = ИмяОбработки + "УправляемаяФормаРедактораТекстовогоДокумента"; + ФормаОбработчиков = ПолучитьФорму(ИмяВызываемойФормы,,ЭтаФорма); + + ЗаполнитьПолеТекстовогоДокумента(ФормаОбработчиков, "ПолеОбработчикиСобытий",Объект.ИмяВременногоФайлаОбработчиковСобытий); + ЗаполнитьПолеТекстовогоДокумента(ФормаОбработчиков, "ПолеОшибкиВыгрузки",Объект.ИмяВременногоФайлаПротоколаОбмена); + + Если Не ФормаОбработчиков.Элементы.ПанельОбработчиков.ПодчиненныеЭлементы.Страница_ПолеОшибкиВыгрузки.Видимость Тогда + ФормаОбработчиков.Элементы.ПанельОбработчиков.ОтображениеСтраниц = ОтображениеСтраницФормы.Нет; + КонецЕсли; + + ФормаОбработчиков.Открыть(); + +КонецПроцедуры + +&НаКлиенте +Процедура ЗаполнитьПолеТекстовогоДокумента(ФормаОбработчиков, ИмяПоля, ИмяФайла) + + Если Не ПустаяСтрока(ИмяФайла) Тогда + + Файл = Новый Файл(ИмяФайла); + + Если Файл.Существует() Тогда + + //Заполняем данными текстовое поле + ФормаОбработчиков[ИмяПоля].Прочитать(ИмяФайла); + + //Определяем видимость страницы панели обработчиков + ТекущаяСтраницаПанелиОбработчиков = ФормаОбработчиков.Элементы.ПанельОбработчиков.ПодчиненныеЭлементы["Страница_" + ИмяПоля]; + + ТекущаяСтраницаПанелиОбработчиков.Видимость = (Файл.Размер() <> 0); + + //Определяем текущую страницу + Если ТекущаяСтраницаПанелиОбработчиков.Видимость Тогда + + ФормаОбработчиков.Элементы.ПанельОбработчиков.ТекущаяСтраница = ТекущаяСтраницаПанелиОбработчиков; + + КонецЕсли; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ВыгрузитьОбработчикиСобытийНаСервере(Отказ) + + ОбъектДляСервера = РеквизитФормыВЗначение("Объект"); + ОбъектДляСервера.РежимОтладкиАлгоритмов = Объект.РежимОтладкиАлгоритмов; + ОбъектДляСервера.ВыгрузитьОбработчикиСобытий(Отказ); + ЗначениеВРеквизитФормы(ОбъектДляСервера, "Объект"); + +КонецПроцедуры + +&НаСервере +Процедура УстановитьЗначенияРеквизитовОбработки() + + Объект.ИмяФайлаВнешнейОбработкиОбработчиковСобытий = ИмяФайлаВнешнейОбработкиОбработчиковСобытий; + Объект.РежимОтладкиАлгоритмов = РежимОтладкиАлгоритмов; + Объект.ОбработчикиСобытийЧитаемИзФайлаПравилОбмена = ОбработчикиСобытийЧитаемИзФайлаПравилОбмена; + +КонецПроцедуры diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаРедактораТекстовогоДокумента/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаРедактораТекстовогоДокумента/Form.form new file mode 100644 index 000000000..522f8d333 --- /dev/null +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/УправляемаяФормаРедактораТекстовогоДокумента/Form.form @@ -0,0 +1,281 @@ + + + + <key>ru</key> + <value>Модуль отладки обработчиков и алгоритмов</value> + + + ПанельОбработчиков + 3 + + Страница_ПолеОбработчикиСобытий + 4 + + ПолеОбработчикиСобытий + 1 + true + true + + true + + + ПолеОбработчикиСобытий + + None + + ПолеОбработчикиСобытийРасширеннаяПодсказка + 13 + Label + true + true + + Left + + + + ПолеОбработчикиСобытийКонтекстноеМеню + 2 + true + + TextDocumentField + true + Enter + true + Left + true + + 50 + true + 10 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Модуль отладки</value> + + + ru + Страница поле обработчики событий + + + Страница_ПолеОбработчикиСобытийРасширеннаяПодсказка + 12 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + Страница_ПолеОшибкиВыгрузки + 5 + + ПолеОшибкиВыгрузки + 8 + true + true + + true + + + ПолеОшибкиВыгрузки + + None + + ПолеОшибкиВыгрузкиРасширеннаяПодсказка + 16 + Label + true + true + + Left + + + + ПолеОшибкиВыгрузкиКонтекстноеМеню + 9 + true + + TextDocumentField + true + Enter + true + Left + true + + 50 + true + 10 + true + true + true + + + true + true + + true + + + <key>ru</key> + <value>Ошибки выгрузки</value> + + + ru + Страница поле ошибки выгрузки + + + Страница_ПолеОшибкиВыгрузкиРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + Page + + Vertical + auto + + + true + true + + true + + + <key>ru</key> + <value>Панель обработчиков</value> + + + ru + Панель обработчиков + + + ПанельОбработчиковРасширеннаяПодсказка + 11 + Label + true + true + + Left + + + Pages + + TabsOnTop + Auto + + + + ФормаКоманднаяПанель + -1 + + Закрыть + 7 + true + true + + true + + + ЗакрытьРасширеннаяПодсказка + 10 + Label + true + true + + Left + + + Form.StandardCommand.Close + Normal + PictureAndText + true + true + UserCmds + Auto + + Left + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Объект + 1 + + DataProcessorObject.УниверсальныйОбменДаннымиXML + + + true + + + true + +
              true
              +
              + + ПолеОбработчикиСобытий + + <key>ru</key> + <value>Поле обработчики событий</value> + + 2 + + TextDocument + + + true + + + true + + + + ПолеОшибкиВыгрузки + + <key>ru</key> + <value>Поле ошибки выгрузки</value> + + 3 + + TextDocument + + + true + + + true + + + + + + + +
              diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/Форма/Form.oform b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/Форма/Form.oform index 6d9e7af9d4382f64b439e28cd0479058a8791d38..e846e59a9cfe6a0a9beedbc5b7af52db2c8f54e0 100644 GIT binary patch delta 2515 zcma)8U5Hgx6z&{v4wRDIH!;lUZBT1~3p~TuUofa%S znEK~zDmeDhvN9k{tw79Jjcn-z(p+%og{6#y^x>TSg);EwiALH<2((lnt35^~_KrJZ zbZLBAICo3+YWKxi{ay3k76V*F=M=_B3kF9#C&&mIQ8d^^qPW940+9V_bkXJ_Di=I} zK-drtK%zm48#qQWms}7>0*2s=1%Ne7)RjeU5hDt~Ds2$8I9lwz)LKm;mVpXJN)Of7 z86h0$C`&|?BZ5*KD4q^vj45YXMA8NWX_)@3I*^>F4E#8x5*1{_)g%s2duvzP|~_rb=m@$+IPC z=E`phr%lw(QWP`;HW((6qJ|>RYLe+d6&6){<#t&}6@X8eB2xkpfj15*9UKxy0C$O{ zR+Z_}fg@>fcu_hSAFcMh@_kllDLs(DAdZzrj2obn14>iunJRhd4Rvs8B&~2g>E6!m z>Ga;gv}bsJ+PLqJg2%{NDGeeaGQ=A3K%EgCPrvW>xHF-$Ib>yHF7LYanT?X zBtgO(44M*DNj?SZ&7K)AruV8X)!NHnXN5CXU?wmUmdJX0fZ%m0Q3=Zoj#008Ev2FA z*=l{>?2?OPU-maiJ5@sMvguy6B>g(plQv%IJ~451eBx?$q_=Rs1eNfJN)iE?gq^4b zw#XaLeUO}xvNoV?<6r!iy_OZ6z@{Uxl)d-hY!XV+ATR_=5({sQ6T-m4eR_Q2X7)yQ z*39k;(R$Bd$%dd1(;Tc&QweL@8s#*1rP6i&)}=oxF1+ThiKaCwslG0hW3jwf?-5 zZEe(@@qKr*;h~(8@yqM-$?pIEWojLLChy%A^(qWcAn+pN^s}mK-e1>#>}!A0Io7_` zo>6~g`hlsJ(nT^@v`D4@ZRr^YN hwADGB?;G#hkgMMp_rbwQ2psF2e2{s3bMK7N;$MEd@hSiS delta 2426 zcma)8+ly6I7;o>iOc>*kgX1_kle5!C&&qYbfK6VaD40?x2h>T|b*P8HCm#|D1dS}B zmbhOkriUN|McL{xC41;CD1#s})9Np%=rO{+bIwyw?elULoU_00x4!Rp*|**r`Rl~U z`RB`#sb6<>_wFd~8GPscB`P^<-YzGWRh*@mII+mMkPuJUBCDlG$~s0ZrBP^+A6d1K zH{HLhVl-LJtwq{Whq#V#;wmB*O(d8nYNgA6>|dw?aXe@%5f+#u?yx}4vV@!oiE}2I zWhx&&ur<%F7_Yznxa>5`JAW^q8Cm(d>`E3DA(SH*lR`Wiimdbz>7YI3S_Xy9pb67P zTY?i(SZHVx3DT5vggwW`6NOVE1L!*++*M(%q~t*$BLhWTrGSiv(jjUmnQ(*%I;iSJ z5=={lEMWoKO9m(G;i5q?Idm?4o^fbj%?BKmi1W>;KY zp1(ScH|lPy;(ON|t=bHszHz%i`Q*Ay`MI&ts?{`>E=|>Meprs=^J6Dw+N{0{E77^Q zxVk?3LAeSZTbDmtn_3Z}5AWgp)cD*?8#W9Z9qx?g8{@CG+SaiCTF z_se2+UN-Sr<%}Y*x`;ft3^pAIGMHi{K?wn4Z$T2xcM~tDikc*eBMyoF?_4sEoHPMZ z&J!G_UOQMJ1^;Oc8;Eiy(yv>M_=0M6?6aIU56IgJ+k% zDA(i%7WUNrLv!uWWHHnObxBF56T(0@pt&*794kbXNZR5+QVdYwWIi`P-t3-FMWvO9 zA@v!KO+?&tATy?*X-=XJNjnzffa}phbAbbL0$_3M5?~7q#Uvy$b2zn?Xp1A1Cj2aBekd7gT6GcAh5ECfY>(CrNFken5 zr?3abIEmV9wuRVAy|77`en>`SBrfM^@=C11$m2ZJH-*ppt zcX+qmE{k}&)u@K@#fuyBsx(@)S_N@q`Cxiuy2XO)Z*Ldt^W@@On;AFnE#BIKne37- z?TbWqwX_ijSgs7rfL$sI1}Gx325c?F;1e*T@AOPa!3?DcL;xlnnL|ziPq8!JMCXkg zxZqsAb82sM{gf)JHl>HNdAgo`?0<_7MBUwx|2ajQJM}YTRi9;8f`Jp^L2wvS$k|{J zrN$Vmsm6)|spsx3b6;7N!%P+F zn(fWDvR$90OP|cNDLb@3@Y(!JvpRo&X*551v2*Oo<=&Oc#gWNMP{o}S0kT4jL;?quhM%dCmA_y6GVge3eLXc>@_Ku(ysvj?w$#7%&Q9KYuKE|y{K|X) diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаНастройкиОтладкиОбработчиков/Form.oform b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаНастройкиОтладкиОбработчиков/Form.oform index f9a8ec5dc69352d341c791d6d2053fd0bbd3d83c..0b179493669fe570df5fec4870164e59d4276291 100644 GIT binary patch delta 489 zcma)2Jxc>Y5Y^K{P7ejGC6L%?*6ikXv$usvVk=@V7TNpw1zKw&QP9F-(ITJ$ON$UW zBg&D)B87#;>>scZ6l`oQy)#&7mDkKL@6CI|^m|70(P(WLR%?3G42s6cPgPq+cC5hc z@YwiR%uwb@;`#z{N(rJKDI-C-gSf+}u(=ZujupynFSxF6W9Ivax)LKQJ%$`62*Q$= z33Ej`FJ)F0FP2sPbV^<0$?yd&jb=!J1hJQga2|6+8S#)1gdy&E!jVi87BJP!^)tix zt8;uX+{G)THdJ)@MxJK={U<8T@7aZX3df*H!-D}*miZa=(r~6L5W#&4uAmE%uIQ>h zfd{B3Luf-sSK$(F^oc%#PONA{L+{5-6!&)tpQr}QA>2aCGA%Rr7YcS(m9;w&uCFyp bv+3Bn8?UwX;cs^MUVEK0Y&(3ee~o_w=gqeL delta 367 zcmZ2?fa%D7rVV~fyb2GTb;2B(7{K)8XeJ$I(^SjNT}-dE)XXeRjg3-`QgoBe%q(ji!=Jyc>k3aHcsjF@WjG(M(2YBD0v}qzw#=6%0VY$iP6sJPiUA zc)8y1-oG*M9^=FW`N{fBY`lg>=0;$3Ajakw>}o99hB~}l)n+;=NokgbsY#}~7Rlym zx+Y0!X}U>9W@fq;sTPK2Mh2EiCdrnQck#@gJV(Gl&5$VNn>&P*nYD~S<{Rjk=or>Q zSmq#>feu{U7$!dXrKlOB(PjlP7e;Pgu38;KAT-din0#M+=j1OE5}U;(y%-sdCjXVu V+}thofMv3}q9UWoW=};WMgaZwQ^5cL literal 8811 zcmeHM-Hseb6&~dVvC_UnYq+tcuBEEFy1N?01qv5jfE0-cE>ZtVkrEqO8-Wz9NH!5f zSxdym2xH=35D~HvW5*`;+S$B9^#%950gqt5bEw#`Hza?Q4fw954ARDbg3XO@V%$H!HkmxZv@>|VgMWJNX8-^8Uv7aO z9$I>MNIVSS5&Y}r@W8G3HroVyd)#S~|>yvs&B9^fy zK@S57{{854p!5ZQh+^QbyBqGB`-}UXyX5|a=i7n19JoK@`Kr5u{>#+7<}SFuV#sgZ zwE+Dey5IBlV{~1`h`(=ccw$%Ff&1J&Xy0z%b@$udz}*epo%Y@KJ+$5q@bZp(?C!hI z+$_L2^r3Oj&Cu~#yXPJT?Jhd@+jrVsqSp&J!?+nuYu=^9v!|MR%ds6!w}c zdTKG`^ybFb@rSqj(D)$uPT>CL9)Snj1myN$_XBWy-0p3`F$eVW`>+1+2XGBEgH5}E z(Bu*+IN&%N^4waUu=PrQu0FHU;TizV)Meo9?Hk zuhzfVo`wT6pY{`hiUWv$AJ$p2Qo9!*n34@&?8oDPFn9ydy8umZxsL(6D+JA(XkKu) z(RJDVfeiXbfbt^-<}JLs7y!wH@eko3dc}ApfL}xBNA7kHUAPREpTThl@Wij(1GgWv z??BZ%?OwYJOanJp@%|rfMoo90&;>67$NTO3QY)+kC16JfC`qJL5 z@-*cb$q(Zg`Ib(@&5gHILRWeS6+KPQy*Ul1aP|SMX0k7Q1SdX%!S8wRk(-yikI{$| z@azl&KjC!=+2J$vPj@yqc0wB(otZ32br$asBbk+DRi>$^bCnB|CzZ$xRf@<&ah+GW zHc`X^_VP(DU=$jj&Qw8Xxt)Yjh@m^U@LMJ#v|crSd47cXm?+Z4gpPz-^e}BnJm_m| zq;x4Wq2sg>rqG!vw3R|zQ&l#rn^M)RvkE2C(0K6L$S@&U+4M5hq29rTtb<$R?Sv6{ zB0j7S46qX3UXG@t}| znZ@u9(r`I7Nmc%`HqeUQ1NFw;NkoDxcAmsks0NXA7$+%4D$u0y+z*4#p%lhpf>+*B zy?@w(b&?g0R+Y%oLJQMGsjx{^h$M~kI?w7-mxZ@A4+k^VneH$m#)vyP!p8J^#OWgd zX1x745tmZXed*G@@+Rm(U_1MgMWI<7MvX0GnkS-&V&M;DplE7(d20+Oj^{U$m3MRK)9A!9Ownb0m-uvoEu$Z zMb~B037=JEg9))L@>&;Vnh`>2nNs9oI3{6Jr+M6{M#PD&Vf45VIr+e*WnEfbMztje z)hfw!36CTaBTO7Y2LuiZA4clPrY0%<+MjYh@kQ)}Q({0X`-|FYI|jo*G}wD7dsxap zY3qAR_BoGQ9mKnR>#Iw1MaU+*`|ybP$ssiMt{7VC$drV0r$ZYt_TZHn`wE-AXzCF# z%~~}H;)KPDiDZEwV)8;*8I=O7Nj9>;@|4)`Mmw0Fh?sA?{e+{}y6X?oYppd0qL#7# zoO$Dvw`-au;hDKa>u%#>Ery*+m2O0< zTa0T0Z_Uk(mNzR&oRSEeG;Lwb85d1iT+(eG^F}v^CG%$0K7U>@f)Yo+|EwHGKv zV1`XPe?qcN*~ffDUp%DqGQvJn8PP?yE+IUkj96VE&bOIv%UiMY5$b>>`W`AMe%hbt ztWz;hJ0lz+5^#?jkRucqF<6vLY?TEtkp^oFj(@qYB2dN;bK-R%N> z@0|9ye?fcPPbCR`I~jW_EQb$=3;7br=jEo+i%1$vl#O^}mDSq=n3I8fKydhLSnu(6+2h9xGWJTHW5ZgltsnSXH!w zo*j_=+CBjuPe@`tIC|52RvjGq#Q#VrE}f{ZfTcf*qcmY1X!2nx4JJuALN6cUjN2za zB;sYW-ZA8fpxK{zJoPjL8pHViTd1SOPX9-t?rGcoU=!h(%0Y0BwhAY0R>q~sY>q>r zG?pS$u@x1C3f{FBBwf1B*?9;={^%m3fmo+DFgxTi{Zp=*>B(2w@2_ z1{H5{O4S<~%;2l&C<7KCBhW&@oiDykB2$_>`uzt#=zun~{vgs@N_I7>l zjBlXUZA_Xp5zauBZ7N}8(}+yRjfnCxsY)$NTNhoq+PkUGBIB$|O082IfmhgblLkkR tCYK_%ri^p^LXqNdl%<@*#ABT_=!vj4DCt;(0U-Uz;}cc(4o_A){{f{OLIeN+ diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаСообщенияОбОбычномРежиме/Form.form b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаСообщенияОбОбычномРежиме/Form.form deleted file mode 100644 index 88c29d0bc..000000000 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Forms/ФормаСообщенияОбОбычномРежиме/Form.form +++ /dev/null @@ -1,137 +0,0 @@ - - - - Декорация2 - 3 - true - true - - true - - - Декорация2РасширеннаяПодсказка - 7 - Label - true - true - - Left - - - - Декорация2КонтекстноеМеню - 4 - true - - 5 - true - 3 - true - - - CommonPicture.Информация32 - - - - - Декорация1 - 1 - - <key>ru</key> - <value>Данная обработка не предназначена для использования в управляемом режиме. Пожалуйста, перезапустите 1С:Предприятие в режиме обычного приложения.</value> - - true - true - - true - - - Декорация1РасширеннаяПодсказка - 8 - Label - true - true - - Left - - - - Декорация1КонтекстноеМеню - 2 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - Bottom - true - - ФормаКоманднаяПанель - -1 - - КнопкаЗакрыть - 5 - true - true - - true - - true - - КнопкаЗакрытьРасширеннаяПодсказка - 6 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - PictureAndText - true - true - UserCmds - Auto - - Right - true - - 48 - DontBlock - true - true - true - true - true - UseIfNecessary - auto - true - - Объект - 1 - - DataProcessorObject.УниверсальныйОбменДаннымиXML - - - true - - - true - -
              true
              -
              - - - - - -
              diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html index d668aa803..66e0d93fd 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Help/ru.html @@ -1,5 +1,7 @@ - -

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

              + +

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

              +

              Режим работы

              +

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

              Обработка имеет четыре закладки

              Выгрузка данных

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

              diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl index af57fb8f9..6523db529 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ИСПОЛЬЗУЕМЫЕ СОКРАЩЕНИЯ ИМЕН ПЕРЕМЕННЫХ (АБРЕВИАТУРЫ) @@ -13057,7 +13059,7 @@ // Функция ВерсияОбъекта() Экспорт - Возврат 215; + Возврат 216; КонецФункции @@ -13071,7 +13073,7 @@ // Функция ВерсияОбъектаСтрокой() Экспорт - Возврат "2.1.5"; + Возврат "2.1.6"; КонецФункции @@ -14025,7 +14027,16 @@ Попытка - ВнешняяОбработкаОбработчиковСобытий = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, Ложь); + Если ЭтоВнешняяОбработка() Тогда + + ВнешняяОбработкаОбработчиковСобытий = ВнешниеОбработки.Создать(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, Ложь); + + Иначе + + ВнешняяОбработкаОбработчиковСобытий = ИмяФайлаВнешнейОбработкиОбработчиковСобытий; + + КонецЕсли; + ВнешняяОбработкаОбработчиковСобытий.Конструктор(ОбъектВладелец); Исключение @@ -14192,6 +14203,21 @@ КонецПроцедуры +Функция ЭтоВнешняяОбработка() + + Если Лев(ИмяФайлаВнешнейОбработкиОбработчиковСобытий, 10) = "Обработка." Тогда + + Возврат Ложь + + Иначе + + Возврат Истина; + + КонецЕсли; + + +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ @@ -14199,3 +14225,5 @@ ДополнитьСлужебныеТаблицыКолонками(); ИнициализацияСтруктурыИменОбработчиков(); + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ОбщиеПроцедурыФункции/Template.txt b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ОбщиеПроцедурыФункции/Template.txt index 8326cab81..98a97617b 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ОбщиеПроцедурыФункции/Template.txt +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/Templates/ОбщиеПроцедурыФункции/Template.txt @@ -643,18 +643,3 @@ ОбщиеПроцедурыФункции.ПередатьДополнительныеПараметрыВПриемник(); КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ПРОЦЕДУРЫ И ФУНКЦИИ - -// Выполняет запись объектов в информационную базу из очереди незаписанных объектов (мГлобальныйСтекНеЗаписанныхОбъектов) -// После записи очередь очищается, а записанные объекты запоминаются в кэше для быстрого их поиска при загрузке -// -// Параметры: -// Нет. -// -Процедура ПровестиЗаписьНеЗаписанныхОбъектов() - - ОбщиеПроцедурыФункции.ПровестиЗаписьНеЗаписанныхОбъектов(); - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo index 451928814..48ae94964 100644 --- a/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo +++ b/SSL/src/DataProcessors/УниверсальныйОбменДаннымиXML/УниверсальныйОбменДаннымиXML.mdo @@ -11,7 +11,7 @@ true DataProcessor.УниверсальныйОбменДаннымиXML.Form.Форма - DataProcessor.УниверсальныйОбменДаннымиXML.Form.ФормаСообщенияОбОбычномРежиме + DataProcessor.УниверсальныйОбменДаннымиXML.Form.УправляемаяФорма ru @@ -900,6 +900,33 @@ + + УправляемаяФорма + + ru + Управляемая форма + + PersonalComputer + MobileDevice + + + УправляемаяФормаНастройкиОтладкиОбработчиков + + ru + Управляемая форма настройки отладки обработчиков + + PersonalComputer + MobileDevice + + + УправляемаяФормаРедактораТекстовогоДокумента + + ru + Управляемая форма редактора текстового документа + + PersonalComputer + MobileDevice + Форма @@ -930,15 +957,6 @@ PersonalComputer MobileDevice - - ФормаСообщенияОбОбычномРежиме - - ru - Форма сообщения об обычном режиме - - PersonalComputer - MobileDevice - ПараметрыОбработчиков diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form index 1bd1b9c0a..5feaa6fc0 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Form.form @@ -82,7 +82,7 @@ true true false - false + true Web.DarkBlue @@ -190,7 +190,7 @@ true true false - false + true Web.DarkBlue @@ -344,7 +344,7 @@ true true false - false + true Web.DarkBlue @@ -452,7 +452,7 @@ true true false - false + true Web.DarkBlue @@ -3153,6 +3153,10 @@ Right true + + OnLoadDataFromSettingsAtServer + ПриЗагрузкеДанныхИзНастроекНаСервере + OnCreateAtServer ПриСозданииНаСервере @@ -3475,7 +3479,7 @@ ИспользованиеАгрегатов <key>ru</key> - <value>Использование агрегатов</value> + <value>Использование</value> 5 diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl index fe7c7ebec..31973a828 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ОсновнаяФорма/Module.bsl @@ -43,10 +43,16 @@ Элементы.ОписаниеУстановкиПериода.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( Элементы.ОписаниеУстановкиПериода.Заголовок, Формат(ОкончаниеПериода(ДобавитьМесяц(РассчитатьИтогиНа, -1)), "DLF=D"), - Формат(ОкончаниеПериода(РассчитатьИтогиНа), "DLF=D") ); + Формат(ОкончаниеПериода(РассчитатьИтогиНа), "DLF=D") + ); КонецПроцедуры +&НаСервере +Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) + УстановитьРасширенныйРежим(); +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -743,6 +749,12 @@ КонецЦикла; + ГруппаИтоговЗаголовок = НСтр("ru = 'Итоги'"); + КоличествоИтогов = СписокИтогов.Количество(); + Если КоличествоИтогов > 0 Тогда + ГруппаИтоговЗаголовок = ГруппаИтоговЗаголовок + " (" + Формат(КоличествоИтогов, "ЧГ=") + ")"; + КонецЕсли; + Элементы.ГруппаИтогов.Заголовок = ГруппаИтоговЗаголовок; КонецПроцедуры &НаСервере @@ -786,6 +798,12 @@ СписокАгрегатовРегистра.Сортировать("Использование Убыв"); + ГруппаАгрегатыЗаголовок = НСтр("ru = 'Агрегаты'"); + КоличествоАгрегатов = АгрегатыПоРегистрам.Количество(); + Если КоличествоАгрегатов > 0 Тогда + ГруппаАгрегатыЗаголовок = ГруппаАгрегатыЗаголовок + " (" + Формат(КоличествоАгрегатов, "ЧГ=") + ")"; + КонецЕсли; + Элементы.ГруппаАгрегаты.Заголовок = ГруппаАгрегатыЗаголовок; КонецПроцедуры &НаСервереБезКонтекста @@ -836,7 +854,7 @@ Менеджер.ПересчитатьИтогиЗаПериод(Значение1, Значение2); Иначе - ВызватьИсключение "Неправильное имя параметра(1): " + Действие; + ВызватьИсключение НСтр("ru = 'Неправильное имя параметра'") + "(1): " + Действие; КонецЕсли; Исключение @@ -1305,3 +1323,4 @@ Возврат Каталог; КонецФункции + diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form index 3d0f5724f..b9e978084 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Form.form @@ -191,24 +191,6 @@ UseIfNecessary auto true - - Объект - - <key>ru</key> - <value>Объект</value> - - 1 - - DataProcessorObject.УправлениеИтогамиИАгрегатами - - - true - - - true - -
              true
              -
              ПериодДляРегНакоп @@ -287,5 +269,4 @@ <navigationPanel/> <commandBar/> </commandInterface> - <extInfo xsi:type="form:ObjectFormExtInfo"/> </form:Form> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html index c46bd73b0..b1602d219 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>В данном диалоге можно ввести границы периода рассчитанных итогов для регистров накопления или бухгалтерии.</p> <p>По умолчанию предлагаются следующие даты для установки границы рассчитанных итогов:</p> <ul><li> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl index 7f7ea98dc..fce490ee4 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаВыбораПериода/Module.bsl @@ -7,7 +7,7 @@ ПериодДляРегНакоп = КонецПериода(ДобавитьМесяц(ТекущаяДатаСеанса(), -1)); ПериодДляРегБухг = КонецПериода(ТекущаяДатаСеанса()); - Элементы.ПериодДляРегБухг.Доступность = Параметры.РегБухгалтерии; + Элементы.ПериодДляРегБухг.Доступность = Параметры.РегБухгалтерии; Элементы.ПериодДляРегНакоп.Доступность = Параметры.РегНакопления; КонецПроцедуры diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html index 7ce845887..e0eba5b9a 100644 --- a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Forms/ФормаПараметровПерестроения/Help/ru.html @@ -1,4 +1,4 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta content="text/html; charset=utf-8" http-equiv="Content-Type"></meta><link rel="stylesheet" type="text/css" href="v8help://service_book/service_style"></link><meta name="GENERATOR" content="MSHTML 9.00.8112.16447"></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.16446"></meta></head><body> <p>В данной форме задаются параметры перестроения использования агрегатов и получения списка оптимальных агрегатов.</p> <ul><li> <div><strong>Максимальный относительный размер</strong> - максимальная сумма размеров агрегатов в процентах от таблицы движений. Если не указан или равен нулю, то нет ограничения размера агрегатов.</div> diff --git a/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html b/SSL/src/DataProcessors/УправлениеИтогамиИАгрегатами/Help/ru.html index c22a7ef50..8ced5d8f3 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.16447"></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.16446"></meta></head><body> <p>Управление итогами включает в себя процедуры, связанные с итогами регистров накопления и бухгалтерии, а также агрегатами оборотных регистров накопления. Управление итогами разделяется на два режима:</p> <ul><li><strong><a href="#Simple">Частно используемые возможности</a></strong> - позволяют "одним нажатием" выполнить наиболее частые действия, возникающие при обслуживании системы. </li><li><strong><a href="#Full">Полные возможности</a></strong> - позволяет выполнять все операции как с одним регистром, так и с произвольным списком регистров.</li></ul><p>Для переключения режимов служит гиперссылка в правом нижнем углу формы. Форма запоминает режим открытия.</p> diff --git a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Form.form b/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Form.form deleted file mode 100644 index 5772798c4..000000000 --- a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Form.form +++ /dev/null @@ -1,792 +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:FormField"> - <name>Пользователь</name> - <id>7</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Пользователь</segments> - </dataPath> - <handlers> - <event>OnChange</event> - <name>ПользовательПриИзменении</name> - </handlers> - <extendedTooltip> - <name>ПользовательРасширеннаяПодсказка</name> - <id>43</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ПользовательКонтекстноеМеню</name> - <id>8</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:InputFieldExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <choiceListButton>true</choiceListButton> - <chooseType>true</chooseType> - <typeDomainEnabled>true</typeDomainEnabled> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <textSize>Normal</textSize> - </extInfo> - </items> - <items xsi:type="form:FormGroup"> - <name>ГруппаПоиск</name> - <id>33</id> - <items xsi:type="form:FormField"> - <name>Поиск</name> - <id>18</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <dataPath xsi:type="form:DataPath"> - <segments>Поиск</segments> - </dataPath> - <handlers> - <event>OnChange</event> - <name>ПоискПриИзменении</name> - </handlers> - <extendedTooltip> - <name>ПоискРасширеннаяПодсказка</name> - <id>46</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <contextMenu> - <name>ПоискКонтекстноеМеню</name> - <id>19</id> - <autoFill>true</autoFill> - </contextMenu> - <type>InputField</type> - <editMode>Enter</editMode> - <showInHeader>true</showInHeader> - <headerHorizontalAlign>Left</headerHorizontalAlign> - <showInFooter>true</showInFooter> - <extInfo xsi:type="form:InputFieldExtInfo"> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <clearButton>true</clearButton> - <chooseType>true</chooseType> - <typeDomainEnabled>true</typeDomainEnabled> - <textEdit>true</textEdit> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <textSize>Normal</textSize> - </extInfo> - </items> - <items xsi:type="form:Button"> - <name>Искать</name> - <id>32</id> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <skipOnInput>false</skipOnInput> - <extendedTooltip> - <name>ИскатьРасширеннаяПодсказка</name> - <id>48</id> - <type>Label</type> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <extInfo xsi:type="form:LabelDecorationExtInfo"> - <horizontalAlign>Left</horizontalAlign> - </extInfo> - </extendedTooltip> - <type>UsualButton</type> - <commandName>Form.Command.Искать</commandName> - <buttonImportance>Normal</buttonImportance> - <representation>Auto</representation> - <autoMaxWidth>true</autoMaxWidth> - <autoMaxHeight>true</autoMaxHeight> - <placementArea>UserCmds</placementArea> - <textColor xsi:type="core:ColorRef"> - <color>Style.ButtonTextColor</color> - </textColor> - <backColor xsi:type="core:ColorRef"> - <color>Style.ButtonBackColor</color> - </backColor> - <borderColor xsi:type="core:ColorRef"> - <color>Style.BorderColor</color> - </borderColor> - <representationInContextMenu>Auto</representationInContextMenu> - </items> - <visible>true</visible> - <enabled>true</enabled> - <userVisible> - <common>true</common> - </userVisible> - <toolTip> - <key>ru</key> - <value>Группа поиск</value> - </toolTip> - <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> - <type>UsualGroup</type> - <extInfo xsi:type="form:UsualGroupExtInfo"> - <behavior>Auto</behavior> - <showLeftMargin>true</showLeftMargin> - <united>true</united> - <throughAlign>Auto</throughAlign> - <currentRowUse>Auto</currentRowUse> - </extInfo> - </items> - <items xsi:type="form:Table"> - <name>ОтфильтрованныеФормы</name> - <id>27</id> - <title> - <key>ru</key> - <value>Настройки форм</value> - - true - true - - true - - - ОтфильтрованныеФормы - - false - Top - - Значение - 34 - true - true - - true - - - ОтфильтрованныеФормы.Value - - - ЗначениеРасширеннаяПодсказка - 59 - Label - true - true - - Left - - - - ЗначениеКонтекстноеМеню - 35 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - - Style.BorderColor - - Normal - - - None - - ОтфильтрованныеФормыКоманднаяПанель - 29 - Left - true - - - ОтфильтрованныеФормыСтрокаПоиска - 50 - - ОтфильтрованныеФормыСтрокаПоискаРасширеннаяПодсказка - 52 - Label - true - true - - Left - - - - ОтфильтрованныеФормыСтрокаПоискаКонтекстноеМеню - 51 - true - - ОтфильтрованныеФормы - - true - - - - ОтфильтрованныеФормыСостояниеПросмотра - 53 - - ОтфильтрованныеФормыСостояниеПросмотраРасширеннаяПодсказка - 55 - Label - true - true - - Left - - - - ОтфильтрованныеФормыСостояниеПросмотраКонтекстноеМеню - 54 - true - - ViewStatusAddition - ОтфильтрованныеФормы - - true - - - - ОтфильтрованныеФормыУправлениеПоиском - 56 - - ОтфильтрованныеФормыУправлениеПоискомРасширеннаяПодсказка - 58 - Label - true - true - - Left - - - - ОтфильтрованныеФормыУправлениеПоискомКонтекстноеМеню - 57 - true - - SearchControlAddition - ОтфильтрованныеФормы - - true - - - - ОтфильтрованныеФормыРасширеннаяПодсказка - 49 - Label - true - true - - Left - - - - ОтфильтрованныеФормыКонтекстноеМеню - 28 - true - - true - true - true - true - true - true - MultiRow - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - - ОтфильтрованныеФормы.Picture - - - Style.BorderColor - - None - None - None - true - - Bottom - true - - ФормаКоманднаяПанель - -1 - - Обновить - 24 - true - true - - true - - false - - ОбновитьРасширеннаяПодсказка - 38 - Label - true - true - - Left - - - Form.Command.Обновить - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - Скопировать - 26 - true - true - - true - - false - - СкопироватьРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - Form.Command.Скопировать - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - Удалить - 25 - true - true - - true - - false - - УдалитьРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - Form.Command.Удалить - Normal - Auto - true - true - UserCmds - - Style.ButtonTextColor - - - Style.ButtonBackColor - - - Style.BorderColor - - Auto - - - Закрыть - 37 - true - true - - true - - false - - ЗакрытьРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - Form.StandardCommand.Close - true - true - true - UserCmds - Auto - - - Справка - 36 - true - true - - true - - false - - СправкаРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto - - Right - - - OnCreateAtServer - ПриСозданииНаСервере - - DontBlock - DefaultButton - true - true - true - Vertical - true - true - true - UseIfNecessary - auto - true - - Объект - 1 - - DataProcessorObject.УправлениеНастройкамиФорм - - - 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> - - 4 - - String - - - - true - - - true - - - - ОтфильтрованныеФормы - - <key>ru</key> - <value>Отфильтрованные формы</value> - - 5 - - ValueList - - - 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 - - String - - - - true - - - true - - - - ПримененныйПоиск - - <key>ru</key> - <value>Примененный поиск</value> - - 9 - - String - - - - true - - - true - - - - Обновить - - <key>ru</key> - <value>Обновить список</value> - - 1 - - ru - Обновить список настроек форм - - - true - - F5 - - StdPicture.Refresh - - - - ОбновитьВыполнить - - - Auto - Auto - - - Скопировать - - <key>ru</key> - <value>Скопировать другому пользователю</value> - - 2 - - ru - Скопировать настройки другому пользователю - - - true - - - - СкопироватьВыполнить - - - Auto - Auto - - - Удалить - - <key>ru</key> - <value>Удалить настройки</value> - - 3 - - ru - Удалить - - - true - - - - УдалитьВыполнить - - - Auto - Auto - - - Искать - - <key>ru</key> - <value>Искать</value> - - 4 - - ru - Искать - - - true - - - - ИскатьВыполнить - - - Auto - Auto - - - - - - - diff --git a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Module.bsl deleted file mode 100644 index 7f4a7684f..000000000 --- a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Forms/Форма/Module.bsl +++ /dev/null @@ -1,207 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ - -&НаСервере -Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - - ЗаполнитьСписокПользователей(); - Пользователь = ИмяПользователя(); - ОбновитьСписокФорм(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ - -&НаКлиенте -Процедура ПользовательПриИзменении(Элемент) - - ОбновитьСписокФорм(); - -КонецПроцедуры - -&НаКлиенте -Процедура ПоискПриИзменении(Элемент) - - ПрименитьФильтр(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ - -&НаКлиенте -Процедура ОбновитьВыполнить() - - ОбновитьСписокФорм(); - -КонецПроцедуры - -&НаКлиенте -Процедура СкопироватьВыполнить() - - Если Элементы.ОтфильтрованныеФормы.ВыделенныеСтроки.Количество() = 0 Тогда - Предупреждение(НСтр("ru = 'Для копирования нужно выбрать настройки, которые требуется скопировать.'")); - Возврат; - КонецЕсли; - - СписокПользователей = Элементы.Пользователь.СписокВыбора.Скопировать(); - - Если СписокПользователей.Количество() = 0 Тогда - Предупреждение(НСтр("ru = 'Невозможно скопировать настройки, так как в системе не заведен ни один пользователь.'")); - Возврат; - КонецЕсли; - - ЭлементСписка = СписокПользователей.НайтиПоЗначению(Пользователь); - Если ЭлементСписка <> Неопределено Тогда - СписокПользователей.Удалить(ЭлементСписка); - КонецЕсли; - - Если СписокПользователей.ОтметитьЭлементы(НСтр("ru = 'Отметьте пользователей, которым нужно скопировать настройки'")) Тогда - ПользователиПриемник = Новый Массив; - Для Каждого Элемент Из СписокПользователей Цикл - Элементы.Пользователь.СписокВыбора.НайтиПоЗначению(Элемент.Значение).Пометка = Элемент.Пометка; - Если Элемент.Пометка Тогда - ПользователиПриемник.Добавить(Элемент.Значение); - КонецЕсли; - КонецЦикла; - - Если ПользователиПриемник.Количество() = 0 Тогда - Предупреждение(НСтр("ru = 'Для копирования нужно отметить пользователей, которым требуется скопировать настройки.'")); - Возврат; - КонецЕсли; - - ТекстВопроса = НСтр("ru = 'После копирования настроек пользователю, - |форма у пользователя будет открываться с настройками, которые ему скопируются. - |При этом его собственные настройки будут потеряны. - |Вы действительно хотите скопировать настройки выбранным пользователям?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); - Если Ответ = КодВозвратаДиалога.Нет Тогда - Возврат; - КонецЕсли; - - СкопироватьНаСервере(ПользователиПриемник); - ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки скопированы'")); - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура УдалитьВыполнить() - - Если Элементы.ОтфильтрованныеФормы.ВыделенныеСтроки.Количество() = 0 Тогда - - Предупреждение(НСтр("ru = 'Для удаления нужно выбрать настройки, которые требуется удалить.'")); - Возврат; - - КонецЕсли; - - ТекстВопроса = НСтр("ru = 'После удаления настроек форма будет открываться с настройками по умолчанию. - |Вы действительно хотите удалить настройки?'"); - Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да); - Если Ответ = КодВозвратаДиалога.Нет Тогда - - Возврат; - - КонецЕсли; - - УдалитьНаСервере(); - - ПоказатьОповещениеПользователя(НСтр("ru = 'Настройки удалены'")); - -КонецПроцедуры - -&НаКлиенте -Процедура ИскатьВыполнить() - - ПрименитьФильтр(); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -&НаСервере -Процедура ЗаполнитьСписокПользователей() - - УстановитьПривилегированныйРежим(Истина); - СписокПользователей = ПользователиИнформационнойБазы.ПолучитьПользователей(); - - Для Каждого ТекПользователь Из СписокПользователей Цикл - - Элементы.Пользователь.СписокВыбора.Добавить(ТекПользователь.Имя); - - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Процедура ОбновитьСписокФорм() - - Обработка = РеквизитФормыВЗначение("Объект"); - СписокФорм = Новый СписокЗначений; - Обработка.ПолучитьСписокФорм(СписокФорм); - Формы.Очистить(); - Обработка.ПолучитьСписокСохраненныхНастроек(СписокФорм, Пользователь, Формы); - - ПрименитьФильтр(); - -КонецПроцедуры - -&НаСервере -Функция ПолучитьМассивВыделенныхНастроек() - - МассивНастроек = Новый Массив; - - ВыделенныеЭлементы = Элементы.ОтфильтрованныеФормы.ВыделенныеСтроки; - - Для Каждого ВыделенныйЭлемент Из ВыделенныеЭлементы Цикл - - МассивНастроек.Добавить(Формы.НайтиПоЗначению(ОтфильтрованныеФормы.НайтиПоИдентификатору(ВыделенныйЭлемент).Значение).Значение); - - КонецЦикла; - - Возврат МассивНастроек; - -КонецФункции - -&НаСервере -Процедура СкопироватьНаСервере(ПользователиПриемник) - - МассивНастроекДляКопирования = ПолучитьМассивВыделенныхНастроек(); - - Обработка = РеквизитФормыВЗначение("Объект"); - Обработка.СкопироватьНастройкиФорм(Пользователь, ПользователиПриемник, МассивНастроекДляКопирования); - -КонецПроцедуры - -&НаСервере -Процедура УдалитьНаСервере() - - МассивНастроекДляУдаления = ПолучитьМассивВыделенныхНастроек(); - - Обработка = РеквизитФормыВЗначение("Объект"); - Обработка.УдалитьНастройкиФорм(Пользователь, МассивНастроекДляУдаления); - - ОбновитьСписокФорм(); - -КонецПроцедуры - -&НаСервере -Процедура ПрименитьФильтр() - - ОтфильтрованныеФормы.Очистить(); - - Для Каждого ЭлементФорма Из Формы Цикл - - Если Поиск = "" Или Найти(ВРег(ЭлементФорма.Представление), ВРег(Поиск)) <> 0 Тогда - - ОтфильтрованныеФормы.Добавить(ЭлементФорма.Значение, ЭлементФорма.Представление, ЭлементФорма.Пометка, ЭлементФорма.Картинка); - - КонецЕсли; - - КонецЦикла; - - ПримененныйПоиск = Поиск; - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Help/ru.html b/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Help/ru.html deleted file mode 100644 index d0f82b6b2..000000000 --- a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/Help/ru.html +++ /dev/null @@ -1,5 +0,0 @@ - -

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

              -

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

              -

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

              -

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

              \ No newline at end of file diff --git a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/ObjectModule.bsl b/SSL/src/DataProcessors/УправлениеНастройкамиФорм/ObjectModule.bsl deleted file mode 100644 index 866858a24..000000000 --- a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/ObjectModule.bsl +++ /dev/null @@ -1,220 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ - -//////////////////////////////////////////////////////////////////////////////// -// Экспортные служебные процедуры и функции - -// Получает список форм, в конфигурации, при этом заполняются следующие поля: -// Значение - имя формы, идентифицирующее ее. -// Представление - синоним формы -// Картинка - картинка соответствующая объекту, к которому форма имеет отношение -// Параметры -// Список - СписокЗначений - список значений, в который будут добавлены описания форм -// -Процедура ПолучитьСписокФорм(Список) Экспорт - - Для Каждого Форма Из Метаданные.ОбщиеФормы Цикл - - Список.Добавить("ОбщаяФорма." + Форма.Имя, "Общая форма." + Форма.Синоним, Ложь, БиблиотекаКартинок.Форма); - - КонецЦикла; - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); - ИменаСтандартныхФорм.Добавить("ФормаГруппы", "Форма группы"); - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы", "Форма выбора группы"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.Справочники, "Справочник", "Справочник", ИменаСтандартныхФорм, БиблиотекаКартинок.Справочник, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("Форма", "Форма"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.КритерииОтбора, "КритерийОтбора", "Критерий отбора", ИменаСтандартныхФорм, БиблиотекаКартинок.КритерийОтбора, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаСохранения", "Форма сохранения"); - ИменаСтандартныхФорм.Добавить("ФормаЗагрузки", "Форма выбора"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.ХранилищаНастроек, "ХранилищеНастроек", "Хранилище настроек", ИменаСтандартныхФорм, БиблиотекаКартинок.ХранилищеНастроек, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.Документы, "Документ", "Документ", ИменаСтандартныхФорм, БиблиотекаКартинок.Документ, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("Форма", "Форма"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.ЖурналыДокументов, "ЖурналДокументов", "Журнал документов", ИменаСтандартныхФорм, БиблиотекаКартинок.ЖурналДокументов, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.Перечисления, "Перечисление", "Перечисление", ИменаСтандартныхФорм, БиблиотекаКартинок.Перечисление, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("Форма", "Форма"); - ИменаСтандартныхФорм.Добавить("ФормаНастроек", "Форма настроек"); - ИменаСтандартныхФорм.Добавить("ФормаВарианта", "Форма варианта"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.Отчеты, "Отчет", "Отчет", ИменаСтандартныхФорм, БиблиотекаКартинок.Отчет, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("Форма", "Форма"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.Обработки, "Обработка", "Обработка", ИменаСтандартныхФорм, БиблиотекаКартинок.Обработка, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаЗаписи", "Форма записи"); - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыСведений, "РегистрСведений", "Регистр сведений", ИменаСтандартныхФорм, БиблиотекаКартинок.РегистрСведений, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыНакопления, "РегистрНакопления", "Регистр накопления", ИменаСтандартныхФорм, БиблиотекаКартинок.РегистрНакопления, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); - ИменаСтандартныхФорм.Добавить("ФормаГруппы", "Форма группы"); - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбораГруппы", "Форма выбора группы"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.ПланыВидовХарактеристик, "ПланВидовХарактеристик", "План видов характеристик", ИменаСтандартныхФорм, БиблиотекаКартинок.ПланВидовХарактеристик, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.ПланыСчетов, "ПланСчетов", "План счетов", ИменаСтандартныхФорм, БиблиотекаКартинок.ПланСчетов, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыБухгалтерии, "РегистрБухгалтерии", "Регистр бухгалтерии", ИменаСтандартныхФорм, БиблиотекаКартинок.РегистрБухгалтерии, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.ПланыВидовРасчета, "ПланВидовРасчета", "План видов расчета", ИменаСтандартныхФорм, БиблиотекаКартинок.ПланВидовРасчета, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.РегистрыРасчета, "РегистрРасчета", "Регистр расчета", ИменаСтандартныхФорм, БиблиотекаКартинок.РегистрРасчета, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.БизнесПроцессы, "БизнесПроцесс", "Бизнес процесс", ИменаСтандартныхФорм, БиблиотекаКартинок.БизнесПроцесс, Список); - - ИменаСтандартныхФорм = Новый СписокЗначений; - ИменаСтандартныхФорм.Добавить("ФормаОбъекта", "Форма объекта"); - ИменаСтандартныхФорм.Добавить("ФормаСписка", "Форма списка"); - ИменаСтандартныхФорм.Добавить("ФормаДляВыбора", "Форма выбора"); - ПолучитьСписокФормОбъектаМетаданных(Метаданные.Задачи, "Задача", "Задача", ИменаСтандартныхФорм, БиблиотекаКартинок.Задача, Список); - -КонецПроцедуры - -// Отбирает из переданных форм те, для которых есть сохраненные настройки по указанному -// в параметре Пользователь пользователю. При этом отобранные формы записываются в параметр -// СписокФормССохраненнымиНастройками. -// -Процедура ПолучитьСписокСохраненныхНастроек(СписокФорм, Пользователь, СписокФормССохраненнымиНастройками) Экспорт - - Для Каждого Элемент Из СписокФорм Цикл - - Добавлен = Ложь; - - Описание = ХранилищеСистемныхНастроек.ПолучитьОписание(Элемент.Значение + "/НастройкиФормы", , Пользователь); - - Если Описание <> Неопределено Тогда - СписокФормССохраненнымиНастройками.Добавить(Элемент.Значение, Элемент.Представление, Элемент.Пометка, Элемент.Картинка); - Добавлен = Истина; - КонецЕсли; - - Описание = ХранилищеСистемныхНастроек.ПолучитьОписание(Элемент.Значение + "/НастройкиОкна", , Пользователь); - Если Описание <> Неопределено И НЕ Добавлен Тогда - СписокФормССохраненнымиНастройками.Добавить(Элемент.Значение, Элемент.Представление, Элемент.Пометка, Элемент.Картинка); - КонецЕсли; - - КонецЦикла; - -КонецПроцедуры - -// Копирует настройки одного пользователя ИБ другому. -// Параметры -// ПользовательИсточник - строка - имя пользователя ИБ, по которому хранятся настройки -// ПользователиПриемник - строка - имя пользователя ИБ, которому копируются настройки -// МассивНастроекДляКопирования - массив - массив строк каждая из которых - полное имя формы -// -Процедура СкопироватьНастройкиФорм(ПользовательИсточник, ПользователиПриемник, МассивНастроекДляКопирования) Экспорт - - Для Каждого Элемент Из МассивНастроекДляКопирования Цикл - Настройка = ХранилищеСистемныхНастроек.Загрузить(Элемент + "/НастройкиФормы", "", , ПользовательИсточник); - Если Настройка <> Неопределено Тогда - Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл - ХранилищеСистемныхНастроек.Сохранить(Элемент + "/НастройкиФормы", "", Настройка, , ПользовательПриемник); - КонецЦикла; - КонецЕсли; - Настройка = ХранилищеСистемныхНастроек.Загрузить(Элемент + "/НастройкиОкна", "", , ПользовательИсточник); - Если Настройка <> Неопределено Тогда - Для Каждого ПользовательПриемник Из ПользователиПриемник Цикл - ХранилищеСистемныхНастроек.Сохранить(Элемент + "/НастройкиОкна", "", Настройка, , ПользовательПриемник); - КонецЦикла; - КонецЕсли; - КонецЦикла; - -КонецПроцедуры - -// Процедура удаляет все настройки пользователя пользователя, -// имеющие отношения к формам. -// Пользователь - строка - имя пользователя ИБ -// МассивНастроекДляКопирования - массив - массив строк каждая из которых - полное имя формы -// -Процедура УдалитьНастройкиФорм(Пользователь, МассивНастроекДляУдаления) Экспорт - - Для Каждого Элемент Из МассивНастроекДляУдаления Цикл - ХранилищеСистемныхНастроек.Удалить(Элемент + "/НастройкиФормы", "", Пользователь); - ХранилищеСистемныхНастроек.Удалить(Элемент + "/НастройкиОкна", "", Пользователь); - КонецЦикла; - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Локальные служебные процедуры и функции - -Процедура ПолучитьСписокФормИзСпискаМетаданныхФорм(Префикс, ПрефиксПредставления, МетаданныеФорм, Картинка, Список) - - Для Каждого Форма Из МетаданныеФорм Цикл - - Список.Добавить(Префикс + ".Форма." + Форма.Имя, ПрефиксПредставления + "." + Форма.Синоним, Ложь, Картинка); - - КонецЦикла; - -КонецПроцедуры - -Процедура ДобавитьСтандартнуюФорму(Префикс, ПрефиксПредставления, ОбъектМетаданных, ИмяФормы, ПредставлениеФормы, Картинка, Список) - - Если ОбъектМетаданных["Основная" + ИмяФормы] = Неопределено Тогда - - Список.Добавить(Префикс + "." + ИмяФормы, ПрефиксПредставления + "." + ПредставлениеФормы, Ложь, Картинка); - - КонецЕсли; - -КонецПроцедуры - -Процедура ПолучитьСписокФормОбъектаМетаданных(СписокОбъектовМетаданных, ИмяОбъектаМетаданных, ПредставлениеОбъектаМетаданных, ИменаСтандартныхФорм, Картинка, Список) - - Для Каждого Объект Из СписокОбъектовМетаданных Цикл - - Префикс = ИмяОбъектаМетаданных + "." + Объект.Имя; - ПрефиксПредставления = ПредставлениеОбъектаМетаданных + "." + Объект.Синоним; - - ПолучитьСписокФормИзСпискаМетаданныхФорм(Префикс, ПрефиксПредставления, Объект.Формы, Картинка, Список); - - Для Каждого ИмяСтандартнойФормы Из ИменаСтандартныхФорм Цикл - - ДобавитьСтандартнуюФорму(Префикс, ПрефиксПредставления, Объект, ИмяСтандартнойФормы.Значение, ИмяСтандартнойФормы.Представление, Картинка, Список); - - КонецЦикла; - - КонецЦикла; - -КонецПроцедуры diff --git a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/УправлениеНастройкамиФорм.mdo b/SSL/src/DataProcessors/УправлениеНастройкамиФорм/УправлениеНастройкамиФорм.mdo deleted file mode 100644 index 824a3c165..000000000 --- a/SSL/src/DataProcessors/УправлениеНастройкамиФорм/УправлениеНастройкамиФорм.mdo +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - УправлениеНастройкамиФорм - - ru - Управление настройками форм - - true - DataProcessor.УправлениеНастройкамиФорм.Form.Форма - - - ru - - - - Форма - - ru - Форма - - PersonalComputer - MobileDevice - - diff --git a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl index fcd00e6e4..82d9fbde1 100644 --- a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl +++ b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Forms/Форма/Module.bsl @@ -38,8 +38,8 @@ РазрешитьПолнотекстовыйПоиск = (ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить); Если РазрешитьПолнотекстовыйПоиск Тогда ДатаАктуальностиИндекса = ПолнотекстовыйПоиск.ДатаАктуальности(); - ИндексАктуален = ПолнотекстовыйПоиск.ИндексАктуален(); - КонецЕсли; + ИндексАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); + КонецЕсли; СтатусИндекса = ""; diff --git a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html index 0d93d3f75..5b67da5cf 100644 --- a/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html +++ b/SSL/src/DataProcessors/УправлениеПолнотекстовымПоиском/Help/ru.html @@ -1,4 +1,4 @@ - +

               

            Наименование свойства
            diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl index be1111aa6..05ea97c44 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/НастройкиРаботыСПочтой/Module.bsl @@ -44,6 +44,8 @@ НастройкиХранилище.ВключатьТелоИсходногоПисьма,Ложь); ОтправлятьСообщенияСразу = ?(НастройкиХранилище.Свойство("ОтправлятьСообщенияСразу"), НастройкиХранилище.ОтправлятьСообщенияСразу,Ложь); + + Элементы.ОтправлятьСообщенияСразу.Видимость = ОбщегоНазначения.ИнформационнаяБазаФайловая(); КонецПроцедуры diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl index 5f9015017..0f597776f 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ПечатьЭлектронногоПисьма/Module.bsl @@ -43,7 +43,6 @@ КонецПроцедуры - &НаКлиенте Процедура ТекстHTMLДокументСформирован(Элемент) diff --git a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl index ceb0e061d..c2b756d2c 100644 --- a/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/DocumentJournals/Взаимодействия/Forms/ФормаСписка/Module.bsl @@ -1370,8 +1370,6 @@ &НаСервере Функция ОпределитьСтраницуСпискаДляПапки(Папка) - УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ @@ -4163,7 +4161,7 @@ Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ИсторияПоиска); КонецЕсли; Если ИнформационнаяБазаФайловая Тогда - ИндексППДАктуален = ПолнотекстовыйПоиск.ИндексАктуален(); + ИндексППДАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален(); Если НЕ ИндексППДАктуален Тогда //Текущая дата используется так как дата актуальности полнотекстового поиска это серверное время Если ТекущаяДата() - ПолнотекстовыйПоиск.ДатаАктуальности() < 300 Тогда diff --git a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Help/ru.html index 19b33f49f..bc381d744 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 5e3066580..699f45028 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаДокумента/Module.bsl @@ -6,9 +6,9 @@ Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) //Для предотвращения открытия документа "Анкета" другими внешними пользователями - Если ЗначениеЗаполнено(ВнешниеПользователи.ТекущийВнешнийПользователь()) Тогда + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда Если НЕ Объект.Ссылка.Пустая() Тогда - Если Объект.Респондент <> ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя(ВнешниеПользователи.ТекущийВнешнийПользователь()) Тогда + Если Объект.Респондент <> ВнешниеПользователи.ПолучитьОбъектАвторизацииВнешнегоПользователя() Тогда Отказ = Истина; КонецЕсли; КонецЕсли; diff --git a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl index 49c67ae13..3cf1f0bdf 100644 --- a/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/Documents/Анкета/Forms/ФормаСписка/Module.bsl @@ -4,7 +4,7 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если ЗначениеЗаполнено(ВнешниеПользователи.ТекущийВнешнийПользователь()) Тогда + Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда Отказ = Истина; КонецЕсли; diff --git a/SSL/src/Documents/Анкета/ObjectModule.bsl b/SSL/src/Documents/Анкета/ObjectModule.bsl index 2e096fe7a..e971035bd 100644 --- a/SSL/src/Documents/Анкета/ObjectModule.bsl +++ b/SSL/src/Documents/Анкета/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -48,3 +50,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form index f981c6e54..262fda785 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Form.form @@ -1729,6 +1729,10 @@ OnCreateAtServerПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlocktruetrue diff --git a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl index 7bba73571..35a4d6699 100644 --- a/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/Встреча/Forms/ФормаДокумента/Module.bsl @@ -23,17 +23,21 @@ Взаимодействия.ПодготовитьОповещения(ЭтаФорма, Параметры); // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); + УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, , "СтраницаДополнительныеРеквизиты"); // Конец СтандартныеПодсистемы.Свойства - ПриСозданииЧтенииНаСервере(); + ПриСозданииИПриЧтенииНаСервере(); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - ПриСозданииЧтенииНаСервере(); + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект); + // Конец СтандартныеПодсистемы.Свойства + + ПриСозданииИПриЧтенииНаСервере(); КонецПроцедуры @@ -93,6 +97,15 @@ КонецПроцедуры +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -256,22 +269,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Команды подсистемы свойств +// СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() - УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка); + УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма); КонецПроцедуры -&НаСервере -Процедура ОбновитьЭлементыДополнительныхРеквизитов() - - УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект")); - -КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -293,7 +300,7 @@ КонецФункции &НаСервере -Процедура ПриСозданииЧтенииНаСервере() +Процедура ПриСозданииИПриЧтенииНаСервере() ДатаНачала = Объект.ДатаНачала; ВремяНачала = Объект.ДатаНачала; @@ -311,3 +318,14 @@ КонецПроцедуры +// СтандартныеПодсистемы.Свойства + +&НаСервере +Процедура ОбновитьЭлементыДополнительныхРеквизитов() + + УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.Свойства + diff --git a/SSL/src/Documents/Встреча/ManagerModule.bsl b/SSL/src/Documents/Встреча/ManagerModule.bsl index e072606e6..4d4338a1b 100644 --- a/SSL/src/Documents/Встреча/ManagerModule.bsl +++ b/SSL/src/Documents/Встреча/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -22,3 +24,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/Встреча/ObjectModule.bsl b/SSL/src/Documents/Встреча/ObjectModule.bsl index 4de8af8a8..2c3a08649 100644 --- a/SSL/src/Documents/Встреча/ObjectModule.bsl +++ b/SSL/src/Documents/Встреча/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -65,3 +67,5 @@ + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form index 21bba11e8..cfc9f4ea3 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Form.form @@ -1356,6 +1356,10 @@ OnCreateAtServerПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlocktruetrue diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl index bb84e85d1..f85d75dcb 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/Forms/ФормаДокумента/Module.bsl @@ -22,17 +22,21 @@ Взаимодействия.ПодготовитьОповещения(ЭтаФорма,Параметры); // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); + УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, , "СтраницаДополнительныеРеквизиты"); // Конец СтандартныеПодсистемы.Свойства - ПриСозданииЧтенииНаСервере(); + ПриСозданииИПриЧтенииНаСервере(); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - ПриСозданииЧтенииНаСервере(); + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект); + // Конец СтандартныеПодсистемы.Свойства + + ПриСозданииИПриЧтенииНаСервере(); КонецПроцедуры @@ -92,6 +96,15 @@ КонецПроцедуры +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -171,37 +184,22 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Команды подсистемы свойств +// СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() - УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка); + УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма); КонецПроцедуры -&НаСервере -Процедура ОбновитьЭлементыДополнительныхРеквизитов() - - УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект")); - -КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаКлиенте -Процедура ПроверитьДоступностьСозданияКонтакта() - - текДанные = Элементы.Участники.ТекущиеДанные; - Элементы.СоздатьКонтакт.Доступность = (НЕ Объект.Ссылка.Пустая()) И - ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); - -КонецПроцедуры - &НаСервере -Процедура ПриСозданииЧтенииНаСервере() +Процедура ПриСозданииИПриЧтенииНаСервере() Если Не Объект.Ссылка.Пустая() Тогда Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); @@ -213,3 +211,23 @@ КонецПроцедуры +// СтандартныеПодсистемы.Свойства + +&НаСервере +Процедура ОбновитьЭлементыДополнительныхРеквизитов() + + УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.Свойства + +&НаКлиенте +Процедура ПроверитьДоступностьСозданияКонтакта() + + текДанные = Элементы.Участники.ТекущиеДанные; + Элементы.СоздатьКонтакт.Доступность = (НЕ Объект.Ссылка.Пустая()) И + ((текДанные <> Неопределено) И (НЕ ЗначениеЗаполнено(текДанные.Контакт))); + +КонецПроцедуры + diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl index 3208d622e..0f1dc4020 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -21,3 +23,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl index 4b8000e21..dbda88a52 100644 --- a/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl +++ b/SSL/src/Documents/ЗапланированноеВзаимодействие/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -42,3 +44,5 @@ + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form index 2c418931b..8af0a4aef 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Form.form @@ -1248,6 +1248,10 @@ OnCreateAtServerПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlocktruetrue diff --git a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl index 52d34b708..1ec63ebea 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/Forms/ФормаДокумента/Module.bsl @@ -27,14 +27,15 @@ Взаимодействия.ПодготовитьОповещения(ЭтаФорма,Параметры); // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); + УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, , "СтраницаДополнительныеРеквизиты"); // Конец СтандартныеПодсистемы.Свойства Если Параметры.Свойство("ДанныеУчастника") И Объект.АбонентКонтакт <> Параметры.ДанныеУчастника.Контакт Тогда ЗаполнитьНаОснованииУчастника(Параметры.ДанныеУчастника); КонецЕсли; - ПриСозданииЧтенииНаСервере(); + ПриСозданииИПриЧтенииНаСервере(); + ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ТелефонныйЗвонок"); КонецПроцедуры @@ -42,7 +43,11 @@ &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - ПриСозданииЧтенииНаСервере(); + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект); + // Конец СтандартныеПодсистемы.Свойства + + ПриСозданииИПриЧтенииНаСервере(); КонецПроцедуры @@ -102,6 +107,15 @@ КонецПроцедуры +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -170,22 +184,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Команды подсистемы свойств +// СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() - УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка); + УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма); КонецПроцедуры -&НаСервере -Процедура ОбновитьЭлементыДополнительныхРеквизитов() - - УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект")); - -КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -214,7 +222,7 @@ КонецПроцедуры &НаСервере -Процедура ПриСозданииЧтенииНаСервере() +Процедура ПриСозданииИПриЧтенииНаСервере() Если Не Объект.Ссылка.Пустая() Тогда Предмет = Взаимодействия.ПолучитьЗначениеПредмета(Объект.Ссылка); @@ -224,6 +232,17 @@ КонецПроцедуры +// СтандартныеПодсистемы.Свойства + +&НаСервере +Процедура ОбновитьЭлементыДополнительныхРеквизитов() + + УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.Свойства + &НаКлиенте Процедура ПроверитьДоступностьСозданияКонтакта() diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl index 041b3dbb5..b1984ede6 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -40,3 +42,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl index 483df0547..c01cb7518 100644 --- a/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl +++ b/SSL/src/Documents/ТелефонныйЗвонок/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -54,3 +56,5 @@ + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form index 3111aa0ff..27f3cbf2c 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Form.form @@ -1999,6 +1999,10 @@ OnCreateAtServerПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlocktruetrue diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl index d82bca972..35628c5a5 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/Forms/ФормаДокумента/Module.bsl @@ -25,7 +25,7 @@ КонецЕсли; // СтандартныеПодсистемы.Свойства - УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, Объект, "СтраницаДополнительныеРеквизиты"); + УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, , "СтраницаДополнительныеРеквизиты"); // Конец СтандартныеПодсистемы.Свойства Если Объект.Ссылка.Пустая() Тогда @@ -53,7 +53,7 @@ НовоеВложение = Вложения.Добавить(); НовоеВложение.ИмяФайла = УдаленноеВложение.ИмяВложение; - НовоеВложение.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(".msg") + 1; + НовоеВложение.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(".msg") + 1; КонецЦикла; @@ -92,7 +92,11 @@ ВзаимодействияКлиентСервер.ПроверитьЗаполнениеКонтактов(Объект, ЭтаФорма, "ЭлектронноеПисьмоВходящее"); Элементы.СтраницаКомментарий.Картинка = ОбщегоНазначения.ПолучитьКартинкуКомментария(Объект.Комментарий); -КонецПроцедуры + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) @@ -111,7 +115,7 @@ Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) Если Объект.Рассмотрено И ТребуетсяУстановкаФлагаОтправкиУведомления Тогда - УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Истина); + УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Истина); КонецЕсли; // СтандартныеПодсистемы.Свойства @@ -139,9 +143,9 @@ НСтр("ru='Запрос уведомления'")); Если Результат = КодВозвратаДиалога.Да Тогда - УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Истина); + УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Истина); ИначеЕсли Результат = КодВозвратаДиалога.Нет Тогда - УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Ложь); + УстановитьПризнакОтправкиУведомления(Объект.Ссылка, Ложь); КонецЕсли; КонецЕсли; @@ -155,6 +159,14 @@ КонецПроцедуры +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты); + // Конец СтандартныеПодсистемы.Свойства + +КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -321,7 +333,9 @@ Возврат; КонецЕсли; - ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ДанныеФайла = ПрисоединенныеФайлыКлиент.ПолучитьДанныеФайла( + ТекущиеДанные.Ссылка, УникальныйИдентификатор); + ПрисоединенныеФайлыКлиент.СохранитьФайлКак(ДанныеФайла); КонецЕсли; @@ -369,7 +383,7 @@ &НаКлиенте Процедура ИзменитьКодировку(Команда) - СписокКодировок = УправлениеЭлектроннойПочтой.ПолучитьСписокКодировок(); + СписокКодировок = ВзаимодействияКлиентСервер.ПолучитьСписокКодировок(); ВыбраннаяКодировка = СписокКодировок.ВыбратьЭлемент("Выберите кодировку", СписокКодировок.НайтиПоЗначению(НРег(Объект.Кодировка))); Если ВыбраннаяКодировка <> Неопределено Тогда @@ -395,22 +409,16 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Команды подсистемы свойств +// СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() - УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка); + УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма); КонецПроцедуры -&НаСервере -Процедура ОбновитьЭлементыДополнительныхРеквизитов() - - УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект")); - -КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -519,4 +527,24 @@ КонецЕсли; -КонецПроцедуры \ No newline at end of file +КонецПроцедуры + +&НаСервереБезКонтекста +Процедура УстановитьПризнакОтправкиУведомления(Ссылка, Флаг) + + УправлениеЭлектроннойПочтой.УстановитьПризнакОтправкиУведомления(Ссылка, Флаг) + +КонецПроцедуры + + +// СтандартныеПодсистемы.Свойства + +&НаСервере +Процедура ОбновитьЭлементыДополнительныхРеквизитов() + + УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.Свойства + diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl index 85b353289..373f560a8 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -92,3 +94,5 @@ "ЭлектронноеПисьмоВходящее"); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl index 515efe422..1099b6e16 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоВходящее/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -35,3 +37,5 @@ + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form index 64617a129..63aa5f105 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Form.form @@ -2712,6 +2712,10 @@ OnCreateAtServerПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + DontBlocktruetrue @@ -3594,10 +3598,7 @@ Кому - - String - - + Тема diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl index 8b442ecf1..a6b89bbbc 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/Forms/ФормаДокумента/Module.bsl @@ -10,7 +10,7 @@ КонецЕсли; Если Объект.Ссылка.Пустая() Тогда - ПриСозданииЧтенииНаСервере(); + ПриСозданииИПриЧтенииНаСервере(); Взаимодействия.УстановитьПредметПоДаннымЗаполнения(Параметры, Предмет); КонецЕсли; @@ -25,10 +25,52 @@ КонецПроцедуры +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УправлениеДоступностью(); + +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + + // СтандартныеПодсистемы.Свойства + Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда + ОбновитьЭлементыДополнительныхРеквизитов(); + КонецЕсли; + // Конец СтандартныеПодсистемы.Свойства + + ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); + + Если ИмяСобытия = "Запись_ПрисоединенныйФайл" Тогда + Если ТипЗнч(Источник) = Тип("СправочникСсылка.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы") Тогда + + ВложенияТекущиеДанные = Элементы.Вложения.ТекущиеДанные; + Если ВложенияТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + РеквизитыФайла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Источник, + "Наименование, Расширение, ИндексКартинки, Размер, ПодписанЭЦП "); + ЗаполнитьЗначенияСвойств(ВложенияТекущиеДанные, РеквизитыФайла); + ВложенияТекущиеДанные.РазмерПредставление = + ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(РеквизитыФайла.Размер); + ВложенияТекущиеДанные.ИмяФайла = ?(ПустаяСтрока(РеквизитыФайла.Расширение), + РеквизитыФайла.Наименование, + РеквизитыФайла.Наименование + "." + РеквизитыФайла.Расширение); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) - ПриСозданииЧтенииНаСервере(); + ПриСозданииИПриЧтенииНаСервере(); + + // СтандартныеПодсистемы.Свойства + УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект); + // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры @@ -62,39 +104,6 @@ КонецПроцедуры -&НаКлиенте -Функция ПроверитьЗаполнениеСписковАдресатов() - - Отказ = Ложь; - - Попытка - Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Объект.СписокПолучателейПисьма); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , "Объект.СписокПолучателейПисьма"); - Отказ = Истина; - КонецПопытки; - - Попытка - Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Объект.СписокПолучателейКопий); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , "Объект.СписокПолучателейКопий"); - Отказ = Истина; - КонецПопытки; - - Попытка - Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Объект.СписокПолучателейСкрытыхКопий); - Исключение - ОбщегоНазначенияКлиентСервер.СообщитьПользователю( - КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , "Объект.СписокПолучателейСкрытыхКопий"); - Отказ = Истина; - КонецПопытки; - - Возврат Отказ; - -КонецФункции - &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения) @@ -288,15 +297,6 @@ КонецПроцедуры -&НаСервере -Функция НеобходимаОбработкаПисьмаОснования() - - Возврат ВыполняетсяОтправка И Объект.ВключатьТелоИсходногоПисьма И ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") И - (Не Объект.ВзаимодействиеОснование = Неопределено) И (Не Объект.ВзаимодействиеОснование.Пустая()) И - Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик; - -КонецФункции - &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) @@ -328,42 +328,13 @@ КонецПроцедуры -&НаКлиенте -Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) - +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + // СтандартныеПодсистемы.Свойства - Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда - ОбновитьЭлементыДополнительныхРеквизитов(); - КонецЕсли; + УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты); // Конец СтандартныеПодсистемы.Свойства - ВзаимодействияКлиент.ОтработатьОповещение(ЭтаФорма, ИмяСобытия, Параметр, Источник); - - Если ИмяСобытия = "Запись_ПрисоединенныйФайл" Тогда - Если ТипЗнч(Источник) = Тип("СправочникСсылка.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы") Тогда - - ВложенияТекущиеДанные = Элементы.Вложения.ТекущиеДанные; - Если ВложенияТекущиеДанные = Неопределено Тогда - Возврат; - КонецЕсли; - РеквизитыФайла = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Источник, - "Наименование, Расширение, ИндексКартинки, Размер, ПодписанЭЦП "); - ЗаполнитьЗначенияСвойств(ВложенияТекущиеДанные, РеквизитыФайла); - ВложенияТекущиеДанные.РазмерПредставление = - ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(РеквизитыФайла.Размер); - ВложенияТекущиеДанные.ИмяФайла = ?(ПустаяСтрока(РеквизитыФайла.Расширение), - РеквизитыФайла.Наименование, - РеквизитыФайла.Наименование + "." + РеквизитыФайла.Расширение); - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -&НаКлиенте -Процедура ПриОткрытии(Отказ) - - УправлениеДоступностью(); - КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -392,16 +363,6 @@ КонецПроцедуры -&НаКлиенте -Процедура НаКонтролеПриИзменении() - - УправлениеДоступностью(); - - Объект.Рассмотрено = НЕ НаКонтроле; - Модифицированность = Истина; - -КонецПроцедуры - &НаКлиенте Процедура СписокПолучателейПисьмаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) @@ -672,7 +633,7 @@ НоваяСтрока.ИмяФайла = ИмяФайла; Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); - НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); Файл = Новый Файл(ВыбранныйФайл); НоваяСтрока.Размер = Файл.Размер(); НоваяСтрока.РазмерПредставление = ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(НоваяСтрока.Размер); @@ -796,26 +757,72 @@ КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// Команды подсистемы свойств +// СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств() - УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма, Объект.Ссылка); + УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма); КонецПроцедуры -&НаСервере -Процедура ОбновитьЭлементыДополнительныхРеквизитов() - - УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма, РеквизитФормыВЗначение("Объект")); - -КонецПроцедуры +// Конец СтандартныеПодсистемы.Свойства //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаКлиенте +Процедура НаКонтролеПриИзменении() + + УправлениеДоступностью(); + + Объект.Рассмотрено = НЕ НаКонтроле; + Модифицированность = Истина; + +КонецПроцедуры + +&НаКлиенте +Функция ПроверитьЗаполнениеСписковАдресатов() + + Отказ = Ложь; + + Попытка + Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Объект.СписокПолучателейПисьма); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , "Объект.СписокПолучателейПисьма"); + Отказ = Истина; + КонецПопытки; + + Попытка + Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Объект.СписокПолучателейКопий); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , "Объект.СписокПолучателейКопий"); + Отказ = Истина; + КонецПопытки; + + Попытка + Результат = ОбщегоНазначенияКлиентСервер.РазобратьСтрокуСПочтовымиАдресами(Объект.СписокПолучателейСкрытыхКопий); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + КраткоеПредставлениеОшибки(ИнформацияОбОшибке()), , "Объект.СписокПолучателейСкрытыхКопий"); + Отказ = Истина; + КонецПопытки; + + Возврат Отказ; + +КонецФункции + +&НаСервере +Функция НеобходимаОбработкаПисьмаОснования() + + Возврат ВыполняетсяОтправка И Объект.ВключатьТелоИсходногоПисьма И ПолучитьФункциональнуюОпцию("ОтправлятьПисьмаВФорматеHTML") И + (Не Объект.ВзаимодействиеОснование = Неопределено) И (Не Объект.ВзаимодействиеОснование.Пустая()) И + Объект.СтатусПисьма = Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик; + +КонецФункции + ///////////////////////////////////////////////////////////////////////////////// // Управление доступностью элементов формы @@ -932,9 +939,9 @@ ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(ВыбранныйФайл, "", ИмяФайла); НоваяСтрока.ИмяФайла = ИмяФайла; - Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); - НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); - Файл = Новый Файл(ВыбранныйФайл); + Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + Файл = Новый Файл(ВыбранныйФайл); НоваяСтрока.Размер = Файл.Размер(); НоваяСтрока.РазмерПредставление = ВзаимодействияКлиентСервер.ПолучитьСтроковоеПредставлениеРазмераФайла(НоваяСтрока.Размер); КонецЦикла; @@ -953,7 +960,7 @@ НоваяСтрока.ИмяФайла = ВыбранныйФайл; Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ВыбранныйФайл); - НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); ОбновитьОтображениеДанных(); @@ -1392,7 +1399,7 @@ НоваяСтрока.ИмяФайлаНаКомпьютере = Вложение.Значение; НоваяСтрока.ИмяФайла = Вложение.Представление; - НоваяСтрока.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); + НоваяСтрока.ИндексКартинки = ФайловыеФункцииСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); КонецЦикла; @@ -1406,10 +1413,36 @@ Объект.Текст = Параметры.Тело; КонецЕсли; - Если Параметры.Свойство("Кому") И Не ПустаяСтрока(Параметры.Кому) Тогда - Объект.СписокПолучателейПисьма = Параметры.Кому; - НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); - НоваяСтрока.Адрес = Параметры.Кому; + Если Параметры.Свойство("Кому") И Параметры.Кому <> Неопределено Тогда + + Если ТипЗнч(Параметры.Кому) = Тип("Строка") И НЕ ПустаяСтрока(Параметры.Кому) Тогда + Объект.СписокПолучателейПисьма = Параметры.Кому; + НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); + НоваяСтрока.Адрес = Параметры.Кому; + + ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("СписокЗначений") Тогда + + Для Каждого ЭлементСписка Из Параметры.Кому Цикл + НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); + НоваяСтрока.Адрес = ЭлементСписка.Значение; + НоваяСтрока.Представление = ЭлементСписка.Представление; + КонецЦикла; + + Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); + + ИначеЕсли ТипЗнч(Параметры.Кому) = Тип("Массив") Тогда + + Для Каждого ЭлементМассива Из Параметры.Кому Цикл + НоваяСтрока = Объект.ПолучателиПисьма.Добавить(); + НоваяСтрока.Адрес = ЭлементМассива.Адрес; + НоваяСтрока.Представление = ЭлементМассива.Представление; + НоваяСтрока.Контакт = ЭлементМассива.ИсточникКонтактнойИнформации; + КонецЦикла; + + Объект.СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма, Ложь); + + КонецЕсли; + КонецЕсли; Если НЕ Параметры.УчетнаяЗапись.Пустая() Тогда @@ -1608,7 +1641,7 @@ КонецПроцедуры &НаСервере -Процедура ПриСозданииЧтенииНаСервере() +Процедура ПриСозданииИПриЧтенииНаСервере() Взаимодействия.УстановитьЗаголовокФормыЭлектронногоПисьма(ЭтаФорма); УстановитьЗаголовокКнопкиПоУмолчанию(); @@ -2011,5 +2044,14 @@ КонецФункции +// СтандартныеПодсистемы.Свойства +&НаСервере +Процедура ОбновитьЭлементыДополнительныхРеквизитов() + + УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма); + +КонецПроцедуры + +// Конец СтандартныеПодсистемы.Свойства diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl index 4dfd30a2d..dd708c08c 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -67,4 +69,5 @@ СтандартнаяОбработка, "ЭлектронноеПисьмоИсходящее"); -КонецПроцедуры \ No newline at end of file +КонецПроцедуры +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl index e18a3395c..7ab67a0f8 100644 --- a/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl +++ b/SSL/src/Documents/ЭлектронноеПисьмоИсходящее/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -312,3 +314,5 @@ СписокПолучателейПисьма = ВзаимодействияКлиентСервер.ПолучитьПредставлениеСпискаАдресатов(ПолучателиПисьма, Ложь); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Enums/ВариантыПубликацииДополнительныхОтчетовИОбработок/ВариантыПубликацииДополнительныхОтчетовИОбработок.mdo b/SSL/src/Enums/ВариантыПубликацииДополнительныхОтчетовИОбработок/ВариантыПубликацииДополнительныхОтчетовИОбработок.mdo index b5b35554b..dff740f81 100644 --- a/SSL/src/Enums/ВариантыПубликацииДополнительныхОтчетовИОбработок/ВариантыПубликацииДополнительныхОтчетовИОбработок.mdo +++ b/SSL/src/Enums/ВариантыПубликацииДополнительныхОтчетовИОбработок/ВариантыПубликацииДополнительныхОтчетовИОбработок.mdo @@ -36,13 +36,6 @@ Используется - - НеИспользуется - - ru - Не используется - - РежимОтладки @@ -50,4 +43,11 @@ Режим отладки + + Отключена + + ru + Отключена + + diff --git a/SSL/src/Enums/ДоступныеПериодыОтчета/ДоступныеПериодыОтчета.mdo b/SSL/src/Enums/ДоступныеПериодыОтчета/ДоступныеПериодыОтчета.mdo new file mode 100644 index 000000000..5b9c16a69 --- /dev/null +++ b/SSL/src/Enums/ДоступныеПериодыОтчета/ДоступныеПериодыОтчета.mdo @@ -0,0 +1,87 @@ + + + + + + + + ДоступныеПериодыОтчета + + ru + Доступные периоды отчета + + + Use + Order + + Use + + + + + Use + Ref + + Use + + + + true + BothWays + + День + + ru + День + + + + Неделя + + ru + Неделя + + + + Декада + + ru + Декада + + + + Месяц + + ru + Месяц + + + + Квартал + + ru + Квартал + + + + Полугодие + + ru + Полугодие + + + + Год + + ru + Год + + + + ПроизвольныйПериод + + ru + Произвольный + + + diff --git a/SSL/src/Enums/СтатусыОбластейДанных/СтатусыОбластейДанных.mdo b/SSL/src/Enums/СтатусыОбластейДанных/СтатусыОбластейДанных.mdo index 5f221fed4..375a758ae 100644 --- a/SSL/src/Enums/СтатусыОбластейДанных/СтатусыОбластейДанных.mdo +++ b/SSL/src/Enums/СтатусыОбластейДанных/СтатусыОбластейДанных.mdo @@ -56,11 +56,4 @@ Удалена - - УдалитьГотова - - ru - (Не используется) Готова - - diff --git a/SSL/src/Enums/ТипыВариантовОтчетов/ТипыВариантовОтчетов.mdo b/SSL/src/Enums/ТипыОтчетов/ТипыОтчетов.mdo similarity index 74% rename from SSL/src/Enums/ТипыВариантовОтчетов/ТипыВариантовОтчетов.mdo rename to SSL/src/Enums/ТипыОтчетов/ТипыОтчетов.mdo index 1b9a7b69c..ed26b8b37 100644 --- a/SSL/src/Enums/ТипыВариантовОтчетов/ТипыВариантовОтчетов.mdo +++ b/SSL/src/Enums/ТипыОтчетов/ТипыОтчетов.mdo @@ -5,10 +5,10 @@ - ТипыВариантовОтчетов + ТипыОтчетов ru - Типы вариантов отчетов + Типы отчетов true @@ -29,40 +29,39 @@ true BothWays - - Пользовательский - - ru - Пользовательский - - - Предопределенный + Внутренний ru - Предопределенный - - - - Отчет - - ru - Отчет - - Открывается отчет без установки варианта - - - ВнешнийОтчет - - ru - Внешний отчет + Внутренний - ДополнительнаяКоманда + Дополнительный ru - Дополнительная команда + Дополнительный + + + + Внешний + + ru + Внешний + + + + УдалитьОтчет + + ru + Удалить отчет + + + + УдалитьПользовательский + + ru + Удалить пользовательский diff --git a/SSL/src/Enums/ФорматыСохраненияОтчетов/ФорматыСохраненияОтчетов.mdo b/SSL/src/Enums/ФорматыСохраненияОтчетов/ФорматыСохраненияОтчетов.mdo index de73ffd56..7f73a06d1 100644 --- a/SSL/src/Enums/ФорматыСохраненияОтчетов/ФорматыСохраненияОтчетов.mdo +++ b/SSL/src/Enums/ФорматыСохраненияОтчетов/ФорматыСохраненияОтчетов.mdo @@ -33,39 +33,39 @@ Имя перечисления - краткое наименование формата (используется для представления формата в составе сформированных отчетов) Синоним - полное наименование формата (используется как пользовательское представление формата в режиме выбора) + + HTML + + ru + Веб-страница (.html) + + HTML4 ru - Документ HTML (.html) - - - - PDF - - ru - Документ PDF (.pdf) - - - - XLSX - - ru - Excel 2007 (.xlsx) + Веб-страница версии 4 (.html) XLS ru - Excel 1997 (.xls) + Лист Microsoft Excel 97-2003 (.xls) - - ODS + + XLSX ru - OpenOffice Calc (.ods) + Лист Microsoft Excel 2007 (.xlsx) + + + + PDF + + ru + Документ Adobe PDF (.pdf) @@ -75,25 +75,32 @@ Табличный документ (.mxl) + + ODS + + ru + Электронная таблица OpenDocument (.ods) + + DOCX ru - Word 2007 (.docx) + Документ Word 2007 (.docx) TXT ru - Текст в кодировке UTF-8 (.txt) + Текстовый документ UTF-8 (.txt) ANSITXT ru - Текст в кодировке ANSI (.txt) + Текстовый документ ANSI (.txt) diff --git a/SSL/src/EventSubscriptions/НастроитьПорядокВариантовОтветовАнкет/НастроитьПорядокВариантовОтветовАнкет.mdo b/SSL/src/EventSubscriptions/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания.mdo similarity index 65% rename from SSL/src/EventSubscriptions/НастроитьПорядокВариантовОтветовАнкет/НастроитьПорядокВариантовОтветовАнкет.mdo rename to SSL/src/EventSubscriptions/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания.mdo index 3f58722a4..8ae946204 100644 --- a/SSL/src/EventSubscriptions/НастроитьПорядокВариантовОтветовАнкет/НастроитьПорядокВариантовОтветовАнкет.mdo +++ b/SSL/src/EventSubscriptions/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания.mdo @@ -1,9 +1,9 @@ - НастроитьПорядокВариантовОтветовАнкет + ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания ru - Настроить порядок вариантов ответов анкет + Варианты ответов анкет заполнить значение реквизита упорядочивания CatalogObject.ВариантыОтветовАнкет diff --git a/SSL/src/EventSubscriptions/СброситьПорядокВариантовОтветовАнкет/СброситьПорядокВариантовОтветовАнкет.mdo b/SSL/src/EventSubscriptions/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания.mdo similarity index 65% rename from SSL/src/EventSubscriptions/СброситьПорядокВариантовОтветовАнкет/СброситьПорядокВариантовОтветовАнкет.mdo rename to SSL/src/EventSubscriptions/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания.mdo index fb86168e7..1a5163489 100644 --- a/SSL/src/EventSubscriptions/СброситьПорядокВариантовОтветовАнкет/СброситьПорядокВариантовОтветовАнкет.mdo +++ b/SSL/src/EventSubscriptions/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания/ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания.mdo @@ -1,9 +1,9 @@ - СброситьПорядокВариантовОтветовАнкет + ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания ru - Сбросить порядок вариантов ответов анкет + Варианты ответов анкет сбросить значение реквизита упорядочивания CatalogObject.ВариантыОтветовАнкет diff --git a/SSL/src/EventSubscriptions/НастроитьПорядокВидовКонтактнойИнформации/НастроитьПорядокВидовКонтактнойИнформации.mdo b/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания.mdo similarity index 64% rename from SSL/src/EventSubscriptions/НастроитьПорядокВидовКонтактнойИнформации/НастроитьПорядокВидовКонтактнойИнформации.mdo rename to SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания.mdo index 47cd9ed2a..054114874 100644 --- a/SSL/src/EventSubscriptions/НастроитьПорядокВидовКонтактнойИнформации/НастроитьПорядокВидовКонтактнойИнформации.mdo +++ b/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания.mdo @@ -1,9 +1,9 @@ - НастроитьПорядокВидовКонтактнойИнформации + ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания ru - Настроить порядок видов контактной информации + Виды контактной информации заполнить значение реквизита упорядочивания CatalogObject.ВидыКонтактнойИнформации diff --git a/SSL/src/EventSubscriptions/СброситьПорядокВидовКонтактнойИнформации/СброситьПорядокВидовКонтактнойИнформации.mdo b/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания.mdo similarity index 64% rename from SSL/src/EventSubscriptions/СброситьПорядокВидовКонтактнойИнформации/СброситьПорядокВидовКонтактнойИнформации.mdo rename to SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания.mdo index 38cc9e49c..1dbf90887 100644 --- a/SSL/src/EventSubscriptions/СброситьПорядокВидовКонтактнойИнформации/СброситьПорядокВидовКонтактнойИнформации.mdo +++ b/SSL/src/EventSubscriptions/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания/ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания.mdo @@ -1,13 +1,12 @@ - СброситьПорядокВидовКонтактнойИнформации + ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания ru - Сбросить порядок видов контактной информации + Виды контактной информации сбросить значение реквизита упорядочивания CatalogObject.ВидыКонтактнойИнформации - CatalogObject.ВариантыОтветовАнкет OnCopy CommonModule.НастройкаПорядкаЭлементовСобытия.СброситьЗначениеРеквизитаУпорядочивания diff --git a/SSL/src/EventSubscriptions/ЗаписатьГруппыИВидыДоступа/ЗаписатьГруппыИВидыДоступа.mdo b/SSL/src/EventSubscriptions/ЗаписатьГруппыИВидыДоступа/ЗаписатьГруппыИВидыДоступа.mdo index 4f7734237..6a73adb66 100644 --- a/SSL/src/EventSubscriptions/ЗаписатьГруппыИВидыДоступа/ЗаписатьГруппыИВидыДоступа.mdo +++ b/SSL/src/EventSubscriptions/ЗаписатьГруппыИВидыДоступа/ЗаписатьГруппыИВидыДоступа.mdo @@ -13,5 +13,5 @@ CatalogObject.Пользователи OnWrite - CommonModule.УправлениеДоступомСобытия.ЗаписатьГруппыИВидыДоступа + CommonModule.УправлениеДоступомСлужебный.ЗаписатьГруппыИВидыДоступаПриЗаписи diff --git a/SSL/src/EventSubscriptions/ЗаписатьЗависимыеНаборыЗначенийДоступа/ЗаписатьЗависимыеНаборыЗначенийДоступа.mdo b/SSL/src/EventSubscriptions/ЗаписатьЗависимыеНаборыЗначенийДоступа/ЗаписатьЗависимыеНаборыЗначенийДоступа.mdo index dbeeaa852..de4a28c17 100644 --- a/SSL/src/EventSubscriptions/ЗаписатьЗависимыеНаборыЗначенийДоступа/ЗаписатьЗависимыеНаборыЗначенийДоступа.mdo +++ b/SSL/src/EventSubscriptions/ЗаписатьЗависимыеНаборыЗначенийДоступа/ЗаписатьЗависимыеНаборыЗначенийДоступа.mdo @@ -10,5 +10,5 @@ CatalogObject.Файлы OnWrite - CommonModule.УправлениеДоступомСобытия.ЗаписатьЗависимыеНаборыЗначенийДоступа + CommonModule.УправлениеДоступомСлужебный.ЗаписатьЗависимыеНаборыЗначенийДоступаПриЗаписи diff --git a/SSL/src/EventSubscriptions/ЗаписатьНаборыЗначенийДоступа/ЗаписатьНаборыЗначенийДоступа.mdo b/SSL/src/EventSubscriptions/ЗаписатьНаборыЗначенийДоступа/ЗаписатьНаборыЗначенийДоступа.mdo index 061e5d982..99b6154c7 100644 --- a/SSL/src/EventSubscriptions/ЗаписатьНаборыЗначенийДоступа/ЗаписатьНаборыЗначенийДоступа.mdo +++ b/SSL/src/EventSubscriptions/ЗаписатьНаборыЗначенийДоступа/ЗаписатьНаборыЗначенийДоступа.mdo @@ -16,5 +16,5 @@ DocumentObject.ЭлектронноеПисьмоИсходящее OnWrite - CommonModule.УправлениеДоступомСобытия.ЗаписатьНаборыЗначенийДоступа + CommonModule.УправлениеДоступомСлужебный.ЗаписатьНаборыЗначенийДоступаПриЗаписи diff --git a/SSL/src/EventSubscriptions/ИгнорироватьОтправкуНеразделенныхДанныхВСервис/ИгнорироватьОтправкуНеразделенныхДанныхВСервис.mdo b/SSL/src/EventSubscriptions/ИгнорироватьОтправкуНеразделенныхДанныхВСервис/ИгнорироватьОтправкуНеразделенныхДанныхВСервис.mdo new file mode 100644 index 000000000..231b3b9ef --- /dev/null +++ b/SSL/src/EventSubscriptions/ИгнорироватьОтправкуНеразделенныхДанныхВСервис/ИгнорироватьОтправкуНеразделенныхДанныхВСервис.mdo @@ -0,0 +1,14 @@ + + + ИгнорироватьОтправкуНеразделенныхДанныхВСервис + + ru + Игнорировать отправку неразделенных данных в сервис + + Игнорирует отправку изменений неразделенных данных в приложение в Интернете + + ExchangePlanObject + + OnSendDataToMaster + CommonModule.ОбменДаннымиВМоделиСервиса.ИгнорироватьОтправкуНеразделенныхДанныхВСервис + diff --git a/SSL/src/EventSubscriptions/ИгнорироватьПолучениеНеразделенныхДанныхВСервисе/ИгнорироватьПолучениеНеразделенныхДанныхВСервисе.mdo b/SSL/src/EventSubscriptions/ИгнорироватьПолучениеНеразделенныхДанныхВСервисе/ИгнорироватьПолучениеНеразделенныхДанныхВСервисе.mdo new file mode 100644 index 000000000..df9224b34 --- /dev/null +++ b/SSL/src/EventSubscriptions/ИгнорироватьПолучениеНеразделенныхДанныхВСервисе/ИгнорироватьПолучениеНеразделенныхДанныхВСервисе.mdo @@ -0,0 +1,14 @@ + + + ИгнорироватьПолучениеНеразделенныхДанныхВСервисе + + ru + Игнорировать получение неразделенных данных в сервисе + + Игнорирует получение изменений неразделенных данных в приложении в Интернете + + ExchangePlanObject + + OnReceiveDataFromSlave + CommonModule.ОбменДаннымиВМоделиСервиса.ИгнорироватьПолучениеНеразделенныхДанныхВСервисе + diff --git a/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo b/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo index 12703a4a6..bc9b404fe 100644 --- a/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo +++ b/SSL/src/EventSubscriptions/ОбновитьПредставлениеВнешнегоПользователя/ОбновитьПредставлениеВнешнегоПользователя.mdo @@ -10,5 +10,5 @@ CatalogObject.ВнешниеПользователи OnWrite - CommonModule.ПользователиСобытия.ОбновитьПредставлениеВнешнегоПользователя + CommonModule.ПользователиСлужебный.ОбновитьПредставлениеВнешнегоПользователяПриЗаписи diff --git a/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете/ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете.mdo b/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете/ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете.mdo new file mode 100644 index 000000000..61cb0c2f0 --- /dev/null +++ b/SSL/src/EventSubscriptions/ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете/ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете.mdo @@ -0,0 +1,14 @@ + + + ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете + + ru + Отключить автоматическую синхронизацию данных с приложением в интернете + + Проверяет признак хранения пароля в ИБ и если признак не установлен, отключает автоматическую синхронизацию данных с приложением в Интернете. + + InformationRegisterRecordSet.НастройкиТранспортаОбмена + + OnWrite + CommonModule.ОбменДаннымиВМоделиСервиса.ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернетеПриЗаписи + diff --git a/SSL/src/EventSubscriptions/ПриОтправкеДанныхГлавному/ПриОтправкеДанныхГлавному.mdo b/SSL/src/EventSubscriptions/ПриОтправкеДанныхГлавному/ПриОтправкеДанныхГлавному.mdo new file mode 100644 index 000000000..5b911c1a9 --- /dev/null +++ b/SSL/src/EventSubscriptions/ПриОтправкеДанныхГлавному/ПриОтправкеДанныхГлавному.mdo @@ -0,0 +1,13 @@ + + + ПриОтправкеДанныхГлавному + + ru + При отправке данных главному + + + ExchangePlanObject + + OnSendDataToMaster + CommonModule.СтандартныеПодсистемыПереопределяемый.ПриОтправкеДанныхГлавному + diff --git a/SSL/src/EventSubscriptions/ПриОтправкеДанныхПодчиненному/ПриОтправкеДанныхПодчиненному.mdo b/SSL/src/EventSubscriptions/ПриОтправкеДанныхПодчиненному/ПриОтправкеДанныхПодчиненному.mdo index ba77050af..99d1ef932 100644 --- a/SSL/src/EventSubscriptions/ПриОтправкеДанныхПодчиненному/ПриОтправкеДанныхПодчиненному.mdo +++ b/SSL/src/EventSubscriptions/ПриОтправкеДанныхПодчиненному/ПриОтправкеДанныхПодчиненному.mdo @@ -1,5 +1,5 @@ - + ПриОтправкеДанныхПодчиненному ru @@ -9,5 +9,5 @@ ExchangePlanObject OnSendDataToSlave - CommonModule.ОбменДаннымиСобытия.ПриОтправкеДанныхПодчиненному + CommonModule.СтандартныеПодсистемыПереопределяемый.ПриОтправкеДанныхПодчиненному diff --git a/SSL/src/EventSubscriptions/ПриПолученииДанныхОтГлавного/ПриПолученииДанныхОтГлавного.mdo b/SSL/src/EventSubscriptions/ПриПолученииДанныхОтГлавного/ПриПолученииДанныхОтГлавного.mdo new file mode 100644 index 000000000..9be603a0b --- /dev/null +++ b/SSL/src/EventSubscriptions/ПриПолученииДанныхОтГлавного/ПриПолученииДанныхОтГлавного.mdo @@ -0,0 +1,13 @@ + + + ПриПолученииДанныхОтГлавного + + ru + При получении данных от главного + + + ExchangePlanObject + + OnReceiveDataFromMaster + CommonModule.СтандартныеПодсистемыПереопределяемый.ПриПолученииДанныхОтГлавного + diff --git a/SSL/src/EventSubscriptions/ПриПолученииДанныхОтПодчиненного/ПриПолученииДанныхОтПодчиненного.mdo b/SSL/src/EventSubscriptions/ПриПолученииДанныхОтПодчиненного/ПриПолученииДанныхОтПодчиненного.mdo index 3d9291db5..e610b8645 100644 --- a/SSL/src/EventSubscriptions/ПриПолученииДанныхОтПодчиненного/ПриПолученииДанныхОтПодчиненного.mdo +++ b/SSL/src/EventSubscriptions/ПриПолученииДанныхОтПодчиненного/ПриПолученииДанныхОтПодчиненного.mdo @@ -1,5 +1,5 @@ - + ПриПолученииДанныхОтПодчиненного ru @@ -9,5 +9,5 @@ ExchangePlanObject OnReceiveDataFromSlave - CommonModule.ОбменДаннымиСобытия.ПриПолученииДанныхОтПодчиненного + CommonModule.СтандартныеПодсистемыПереопределяемый.ПриПолученииДанныхОтПодчиненного diff --git a/SSL/src/EventSubscriptions/ПрисоединенныйФайлПередЗаписьюВзаимодействия/ПрисоединенныйФайлПередЗаписьюВзаимодействия.mdo b/SSL/src/EventSubscriptions/ПрисоединенныйФайлПередЗаписьюВзаимодействия/ПрисоединенныйФайлПередЗаписьюВзаимодействия.mdo index 45e608a72..c3a3413fb 100644 --- a/SSL/src/EventSubscriptions/ПрисоединенныйФайлПередЗаписьюВзаимодействия/ПрисоединенныйФайлПередЗаписьюВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/ПрисоединенныйФайлПередЗаписьюВзаимодействия/ПрисоединенныйФайлПередЗаписьюВзаимодействия.mdo @@ -13,5 +13,5 @@ CatalogObject.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы BeforeWrite - CommonModule.ПрисоединенныеФайлыСобытия.ПередЗаписьюПрисоединенногоФайла + CommonModule.ПрисоединенныеФайлы.ПередЗаписьюПрисоединенногоФайла diff --git a/SSL/src/EventSubscriptions/ПрисоединенныйФайлПередУдалениемВзаимодействия/ПрисоединенныйФайлПередУдалениемВзаимодействия.mdo b/SSL/src/EventSubscriptions/ПрисоединенныйФайлПередУдалениемВзаимодействия/ПрисоединенныйФайлПередУдалениемВзаимодействия.mdo index 414cd8a5f..dc591bf3e 100644 --- a/SSL/src/EventSubscriptions/ПрисоединенныйФайлПередУдалениемВзаимодействия/ПрисоединенныйФайлПередУдалениемВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/ПрисоединенныйФайлПередУдалениемВзаимодействия/ПрисоединенныйФайлПередУдалениемВзаимодействия.mdo @@ -13,5 +13,5 @@ CatalogObject.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы BeforeDelete - CommonModule.ПрисоединенныеФайлыСобытия.ПередУдалениемПрисоединенногоФайла + CommonModule.ПрисоединенныеФайлы.ПередУдалениемПрисоединенногоФайла diff --git a/SSL/src/EventSubscriptions/ПрисоединенныйФайлПриЗаписиВзаимодействия/ПрисоединенныйФайлПриЗаписиВзаимодействия.mdo b/SSL/src/EventSubscriptions/ПрисоединенныйФайлПриЗаписиВзаимодействия/ПрисоединенныйФайлПриЗаписиВзаимодействия.mdo index 117b5a64a..83df67b6a 100644 --- a/SSL/src/EventSubscriptions/ПрисоединенныйФайлПриЗаписиВзаимодействия/ПрисоединенныйФайлПриЗаписиВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/ПрисоединенныйФайлПриЗаписиВзаимодействия/ПрисоединенныйФайлПриЗаписиВзаимодействия.mdo @@ -13,5 +13,5 @@ CatalogObject.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы OnWrite - CommonModule.ПрисоединенныеФайлыСобытия.ПриЗаписиПрисоединенногоФайла + CommonModule.ПрисоединенныеФайлы.ПриЗаписиПрисоединенногоФайла diff --git a/SSL/src/EventSubscriptions/СкопироватьРеквизитыВерсииФайловВФайл/СкопироватьРеквизитыВерсииФайловВФайл.mdo b/SSL/src/EventSubscriptions/СкопироватьРеквизитыВерсииФайловВФайл/СкопироватьРеквизитыВерсииФайловВФайл.mdo index 0b1646f8c..ea07070ac 100644 --- a/SSL/src/EventSubscriptions/СкопироватьРеквизитыВерсииФайловВФайл/СкопироватьРеквизитыВерсииФайловВФайл.mdo +++ b/SSL/src/EventSubscriptions/СкопироватьРеквизитыВерсииФайловВФайл/СкопироватьРеквизитыВерсииФайловВФайл.mdo @@ -9,5 +9,5 @@ CatalogObject.ВерсииФайлов OnWrite - CommonModule.РаботаСФайламиСобытия.ВерсииФайловПриЗаписиПриЗаписи + CommonModule.РаботаСФайламиСлужебный.ВерсииФайловПриЗаписиПриЗаписи diff --git a/SSL/src/EventSubscriptions/СправочникиОбщихПоставляемыхДанныхПередЗаписью/СправочникиОбщихПоставляемыхДанныхПередЗаписью.mdo b/SSL/src/EventSubscriptions/СправочникиОбщихПоставляемыхДанныхПередЗаписью/СправочникиОбщихПоставляемыхДанныхПередЗаписью.mdo index 55ab34a3b..5abf2b1f4 100644 --- a/SSL/src/EventSubscriptions/СправочникиОбщихПоставляемыхДанныхПередЗаписью/СправочникиОбщихПоставляемыхДанныхПередЗаписью.mdo +++ b/SSL/src/EventSubscriptions/СправочникиОбщихПоставляемыхДанныхПередЗаписью/СправочникиОбщихПоставляемыхДанныхПередЗаписью.mdo @@ -6,7 +6,7 @@ Справочники общих поставляемых данных перед записью - CatalogObject.КлассификаторВалют + CatalogObject.УдалитьКлассификаторВалют CatalogObject.ПроизводственныеКалендари BeforeWrite diff --git a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo index 74b890450..37fcc14e1 100644 --- a/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo +++ b/SSL/src/EventSubscriptions/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия/УстановитьПометкуУдаленияПрисоединенныхФайловВзаимодействия.mdo @@ -13,5 +13,5 @@ DocumentObject.ЭлектронноеПисьмоИсходящее BeforeWrite - CommonModule.ПрисоединенныеФайлыСобытия.УстановитьПометкуУдаленияПрисоединенныхФайловДокументов + CommonModule.ПрисоединенныеФайлы.УстановитьПометкуУдаленияПрисоединенныхФайловДокументов diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ManagerModule.bsl b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ManagerModule.bsl index 14fdca9af..f87412d35 100644 --- a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -26,3 +28,5 @@ КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ObjectModule.bsl b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ObjectModule.bsl index cb8f25e1a..031c90745 100644 --- a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ObjectModule.bsl +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -9,3 +11,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ИзмененияПоставляемыхДанных.mdo b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ИзмененияПоставляемыхДанных.mdo index 6f322d3a0..2a610a93d 100644 --- a/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ИзмененияПоставляемыхДанных.mdo +++ b/SSL/src/ExchangePlans/ИзмененияПоставляемыхДанных/ИзмененияПоставляемыхДанных.mdo @@ -90,13 +90,6 @@ Catalog.ПроизводственныеКалендари Allow - - Catalog.КлассификаторВалют - Allow - - - InformationRegister.КурсыВалютПоКлассификатору - InDialog BothWays ExchangePlan.ИзмененияПоставляемыхДанных.Form.ФормаУзла diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ManagerModule.bsl index 29ffe2f48..ce8f948eb 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -278,3 +280,5 @@ Процедура ОбработчикПроверкиПараметровУчета(Отказ, Получатель, Сообщение) Экспорт КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ObjectModule.bsl b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ObjectModule.bsl index 0f46476f6..2db8c7fd6 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ObjectModule.bsl +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ObjectModule.bsl @@ -1,6 +1,10 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПередУдалением(Отказ) ОбменВнешнимиЗаданиямиСервер.ОчиститьРегистрИсточникиВнешнихЗадач(ЭтотОбъект.Ссылка); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/Templates/ПравилаОбмена/Template.txt b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/Templates/ПравилаОбмена/Template.txt index 5ccb4a7de..1b316922e 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/Templates/ПравилаОбмена/Template.txt +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/Templates/ПравилаОбмена/Template.txt @@ -187,13 +187,6 @@ <Код>ВерсииФайлов <Наименование>Справочник: Версии файлов <Порядок>50 - <ПриВыгрузке>ОбменФайламиСобытия.ПриОтправкеДанныхФайла(Источник, Неопределено); - <ПослеЗагрузки>ПолучениеЭлемента = Неопределено; -ОбменФайламиСобытия.ПриПолученииДанныхФайла(Объект, ПолучениеЭлемента); -Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда - Отказ = Истина; -КонецЕсли; - <СинхронизироватьПоИдентификатору>true <Источник>СправочникСсылка.ВерсииФайлов <Приемник>СправочникСсылка.ВерсииФайлов @@ -433,7 +426,7 @@ <Наименование>Справочник: Файлы <Порядок>150 <ПослеЗагрузки>ПолучениеЭлемента = Неопределено; -ОбменФайламиСобытия.ПриПолученииДанныхФайла(Объект, ПолучениеЭлемента); +РаботаСФайламиСобытия.ПриПолученииФайла(Объект, ПолучениеЭлемента); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Отказ = Истина; КонецЕсли; diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ОбменВнешнимиЗаданиями.mdo b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ОбменВнешнимиЗаданиями.mdo index 2d91ad2ff..a228f66af 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ОбменВнешнимиЗаданиями.mdo +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиями/ОбменВнешнимиЗаданиями.mdo @@ -106,6 +106,21 @@ BothWays ExchangePlan.ОбменВнешнимиЗаданиями.Form.ФормаУзла ExchangePlan.ОбменВнешнимиЗаданиями.Form.ФормаСписка + + ЭтотУзел + + ru + Этот узел + + + Boolean + + + + + Index + Use + ФормаУзла diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ManagerModule.bsl index e661dde20..2365a58fc 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -278,3 +280,5 @@ Процедура ОбработчикПроверкиПараметровУчета(Отказ, Получатель, Сообщение) Экспорт КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ObjectModule.bsl b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ObjectModule.bsl index 0f46476f6..2db8c7fd6 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ObjectModule.bsl +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ObjectModule.bsl @@ -1,6 +1,10 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПередУдалением(Отказ) ОбменВнешнимиЗаданиямиСервер.ОчиститьРегистрИсточникиВнешнихЗадач(ЭтотОбъект.Ссылка); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/Templates/ПравилаОбмена/Template.txt b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/Templates/ПравилаОбмена/Template.txt index 89c6ad01c..456e2f60a 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/Templates/ПравилаОбмена/Template.txt +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/Templates/ПравилаОбмена/Template.txt @@ -187,13 +187,6 @@ <Код>ВерсииФайлов <Наименование>Справочник: Версии файлов <Порядок>50 - <ПриВыгрузке>ОбменФайламиСобытия.ПриОтправкеДанныхФайла(Источник, Неопределено); - <ПослеЗагрузки>ПолучениеЭлемента = Неопределено; -ОбменФайламиСобытия.ПриПолученииДанныхФайла(Объект, ПолучениеЭлемента); -Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда - Отказ = Истина; -КонецЕсли; - <СинхронизироватьПоИдентификатору>true <Источник>СправочникСсылка.ВерсииФайлов <Приемник>СправочникСсылка.ВерсииФайлов @@ -426,7 +419,7 @@ <Наименование>Справочник: Файлы <Порядок>150 <ПослеЗагрузки>ПолучениеЭлемента = Неопределено; -ОбменФайламиСобытия.ПриПолученииДанныхФайла(Объект, ПолучениеЭлемента); +РаботаСФайламиСобытия.ПриПолученииФайла(Объект, ПолучениеЭлемента); Если ПолучениеЭлемента = ПолучениеЭлементаДанных.Игнорировать Тогда Отказ = Истина; КонецЕсли; diff --git a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ОбменВнешнимиЗаданиямиС1СДокументооборот.mdo b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ОбменВнешнимиЗаданиямиС1СДокументооборот.mdo index ccef407f6..bb784c0cd 100644 --- a/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ОбменВнешнимиЗаданиямиС1СДокументооборот.mdo +++ b/SSL/src/ExchangePlans/ОбменВнешнимиЗаданиямиС1СДокументооборот/ОбменВнешнимиЗаданиямиС1СДокументооборот.mdo @@ -106,6 +106,21 @@ BothWays ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.Form.ФормаУзла ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот.Form.ФормаСписка + + ЭтотУзел + + ru + Этот узел + + + Boolean + + + + + Index + Use + ФормаУзла diff --git a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl index 4ffeb5fdc..2d02bdb36 100644 --- a/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl +++ b/SSL/src/ExchangePlans/ОбменСообщениями/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -131,7 +133,7 @@ // Строка, Неогранич - имя формы // // Например: -// Возврат "ПланОбмена._ДемоРаспределеннаяИнформационнаяБаза.Форма.ФормаСозданияНачальногоОбраза"; +// Возврат "ПланОбмена.РаспределеннаяИнформационнаяБаза.Форма.ФормаСозданияНачальногоОбраза"; // Функция ИмяФормыСозданияНачальногоОбраза() Экспорт @@ -308,3 +310,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/FunctionalOptions/ИспользоватьАвтономнуюРаботуВМоделиСервиса/ИспользоватьАвтономнуюРаботуВМоделиСервиса.mdo b/SSL/src/FunctionalOptions/ИспользоватьАвтономнуюРаботуВМоделиСервиса/ИспользоватьАвтономнуюРаботуВМоделиСервиса.mdo new file mode 100644 index 000000000..eadee762f --- /dev/null +++ b/SSL/src/FunctionalOptions/ИспользоватьАвтономнуюРаботуВМоделиСервиса/ИспользоватьАвтономнуюРаботуВМоделиСервиса.mdo @@ -0,0 +1,11 @@ + + + ИспользоватьАвтономнуюРаботуВМоделиСервиса + + ru + Использовать автономную работу в модели сервиса + + Constant.ИспользоватьАвтономнуюРаботуВМоделиСервиса + true + CommonCommand.АвтономнаяРаботаВМоделиСервиса + diff --git a/SSL/src/FunctionalOptions/ИспользоватьВнешнихПользователей/ИспользоватьВнешнихПользователей.mdo b/SSL/src/FunctionalOptions/ИспользоватьВнешнихПользователей/ИспользоватьВнешнихПользователей.mdo index ed0db580d..e29c8e0f8 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьВнешнихПользователей/ИспользоватьВнешнихПользователей.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьВнешнихПользователей/ИспользоватьВнешнихПользователей.mdo @@ -8,5 +8,4 @@ Constant.ИспользоватьВнешнихПользователей true Catalog.ВнешниеПользователи - Catalog.ГруппыВнешнихПользователей diff --git a/SSL/src/FunctionalOptions/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo b/SSL/src/FunctionalOptions/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo index ee724ce7a..31d4d85df 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьДополнительныеРеквизитыИСведения/ИспользоватьДополнительныеРеквизитыИСведения.mdo @@ -9,9 +9,10 @@ true Catalog.НаборыДополнительныхРеквизитовИСведений ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения - CommonCommand.ДополнительныеСведения + CommonCommand.ДополнительныеСведенияКоманднаяПанель InformationRegister.ДополнительныеСведения Catalog.ЗначенияСвойствОбъектов Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеСведения + CommonCommand.ДополнительныеСведенияПанельНавигации diff --git a/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo b/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo index 11156c3e4..25b974b44 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВЛокальномРежиме/ИспользоватьОбменДаннымиВЛокальномРежиме.mdo @@ -9,36 +9,17 @@ true Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными Catalog.СценарииОбменовДанными - DataProcessor.ЗагрузкаПравилРегистрацииОбъектов - DataProcessor.КонвертацияОбъектовИнформационныхБаз - DataProcessor.ТранспортСообщенийОбменаFILE - InformationRegister.НастройкиТранспортаОбмена - InformationRegister.СостоянияОбменовДанными CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных - Constant.ДатаОбновленияПовторноИспользуемыхЗначенийМРО - InformationRegister.СоответствияОбъектовИнформационныхБаз - Enum.ВидыПравилДляОбменаДанными - InformationRegister.ПравилаДляОбменаДанными - Enum.ИсточникиПравилДляОбменаДанными CommonCommand.ОткрытьПравилаКонвертацииОбъектов CommonCommand.ОткрытьПравилаРегистрацииОбъектов - DataProcessor.ПомощникСозданияОбменаДанными - DataProcessor.СопоставлениеОбъектовИнформационныхБаз - DataProcessor.ПомощникИнтерактивногоОбменаДанными - InformationRegister.СостоянияУспешныхОбменовДанными - DataProcessor.КонвертацияОбъектовРаспределенныхИнформационныхБаз CommonCommand.ОткрытьОбменыДанными CommonCommand.ВыполнитьОбменДанными CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных CommonCommand.ОткрытьСценарииОбменовДанными - Enum.РежимыВыгрузкиОбъектовОбмена - InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз - Constant.НастройкиПодчиненногоУзлаРИБ CommonCommand.ВыполнитьОбменДаннымиИнтерактивно CommonForm.ВыборОбъектовИнформационнойБазыКорреспондента CommonForm.ЗагрузкаСообщенияОбменаСИзменениямиКонфигурации CommonForm.ОбменыДанными CommonCommand.ПолучитьНастройкиОбменаДаннымиДляВторойИнформационнойБазы - CommonForm.ВыполнениеОбменаДанными diff --git a/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo b/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo index 158e1f2c0..80a903d46 100644 --- a/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo +++ b/SSL/src/FunctionalOptions/ИспользоватьОбменДаннымиВМоделиСервиса/ИспользоватьОбменДаннымиВМоделиСервиса.mdo @@ -9,4 +9,5 @@ true CommonForm.ВыполнениеОбменаДаннымиСоВсемиИнформационнымиБазами CommonCommand.СинхронизироватьДанные + CommonForm.АвтономнаяРаботаВМоделиСервиса diff --git a/SSL/src/FunctionalOptions/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo b/SSL/src/FunctionalOptions/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo new file mode 100644 index 000000000..8411195e6 --- /dev/null +++ b/SSL/src/FunctionalOptions/ПоддержкаРезервногоКопирования/ПоддержкаРезервногоКопирования.mdo @@ -0,0 +1,14 @@ + + + ПоддержкаРезервногоКопирования + + ru + Поддержка резервного копирования + + Constant.ПоддержкаРезервногоКопирования + true + CommonForm.НастройкиРезервногоКопированияПриложений + CommonForm.СозданиеРезервнойКопии + CommonCommand.СоздатьРезервнуюКопию + InformationRegister.ОбластиКРезервномуКопированию + diff --git a/SSL/src/FunctionalOptions/РаботаВАвтономномРежиме/РаботаВАвтономномРежиме.mdo b/SSL/src/FunctionalOptions/РаботаВАвтономномРежиме/РаботаВАвтономномРежиме.mdo new file mode 100644 index 000000000..422a13365 --- /dev/null +++ b/SSL/src/FunctionalOptions/РаботаВАвтономномРежиме/РаботаВАвтономномРежиме.mdo @@ -0,0 +1,10 @@ + + + РаботаВАвтономномРежиме + + ru + Работа в автономном режиме + + Constant.ЭтоАвтономноеРабочееМесто + true + diff --git a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo new file mode 100644 index 000000000..19f8c9ba3 --- /dev/null +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВАвтономномРежиме/СтандартныеПодсистемыВАвтономномРежиме.mdo @@ -0,0 +1,15 @@ + + + СтандартныеПодсистемыВАвтономномРежиме + + ru + Стандартные подсистемы в автономном режиме + + Constant.ЭтоАвтономноеРабочееМесто + true + CommonCommand.АвтономнаяРабота + Catalog.Календари.Attribute.ВидКалендаря + Catalog.Пользователи.Command.ПользователиИБ + DataProcessor.НастройкаРезервногоКопированияИБ + DataProcessor.РезервноеКопированиеИБ + diff --git a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo index 10998cb8d..88404ddd8 100644 --- a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВЛокальномРежиме/СтандартныеПодсистемыВЛокальномРежиме.mdo @@ -8,7 +8,6 @@ Constant.НеИспользоватьРазделениеПоОбластямДанных true Catalog.Пользователи.Command.ПользователиИБ - Catalog.Валюты.Attribute.ЗагружаетсяИзИнтернета DataProcessor.РезервноеКопированиеИБ Catalog.Календари.Attribute.ВидКалендаря CommonCommand.ВыгрузитьДанныеДляПереходаВСервис diff --git a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo index 0dfcb2da6..b47c84aec 100644 --- a/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo +++ b/SSL/src/FunctionalOptions/СтандартныеПодсистемыВМоделиСервиса/СтандартныеПодсистемыВМоделиСервиса.mdo @@ -7,8 +7,8 @@ Constant.ИспользоватьРазделениеПоОбластямДанных true - Catalog.КлассификаторВалют - InformationRegister.КурсыВалютПоКлассификатору + Catalog.УдалитьКлассификаторВалют + InformationRegister.УдалитьКурсыВалютПоКлассификатору CommonForm.ВходВОбластьДанных CommonForm.ЗагрузкаДанныхВОбласть CommonCommand.ВыгрузитьДанныеВЛокальнуюВерсию @@ -26,4 +26,7 @@ InformationRegister.СвязиПоставляемыхДанных DataProcessor.АвтоматическоеИзвлечениеТекстовДляВсехОбластейДанных CommonCommand.ДобавитьПользователейСервиса + Constant.КлючОбластиДанных + CommonCommand.ЗагрузитьКурсыВалют + Report.АнализЖурналаРегистрации diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/ОткрытьАдресныйКлассификатор/CommandModule.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/АдресныйКлассификатор/CommandModule.bsl similarity index 78% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/ОткрытьАдресныйКлассификатор/CommandModule.bsl rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/АдресныйКлассификатор/CommandModule.bsl index da5dd41d8..b376cb691 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/ОткрытьАдресныйКлассификатор/CommandModule.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Commands/АдресныйКлассификатор/CommandModule.bsl @@ -1,6 +1,6 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.ФормаУправленияАдреснымКлассификатором",, + ОткрытьФорму("РегистрСведений.АдресныйКлассификатор.Форма.АдресныйКлассификатор",, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры diff --git a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Form.form similarity index 56% rename from SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Form.form rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Form.form index 6e0d38a70..dbece4aa0 100644 --- a/SSL/src/CommonForms/НастройкаПечатныхФормПередОтправкой/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Form.form @@ -1,27 +1,22 @@ - - - <key>ru</key> - <value>Отправить по почте</value> - + - Форматы - 28 + ВведитеДанные + 16 - ФорматPDF - 38 + КодПользователя + 10 true true true - ФорматPDF + КодПользователя - Right - ФорматPDFРасширеннаяПодсказка - 45 + КодПользователяРасширеннаяПодсказка + 21 Label true true @@ -30,32 +25,38 @@ - ФорматPDFКонтекстноеМеню - 39 + КодПользователяКонтекстноеМеню + 11 true - CheckBoxField + InputField Enter true Left true - + + true + true + true + true + true + Normal + - ФорматXLS - 31 + Пароль + 8 true true true - ФорматXLS + Пароль - Right - ФорматXLSРасширеннаяПодсказка - 47 + ПарольРасширеннаяПодсказка + 23 Label true true @@ -64,32 +65,40 @@ - ФорматXLSКонтекстноеМеню - 32 + ПарольКонтекстноеМеню + 9 true - CheckBoxField + InputField Enter true Left true - + + true + true + true + true + true + true + Normal + - ФорматHTML - 33 + ЗапомнитьИмяИПароль + 4 true true true - ФорматHTML + ЗапомнитьПароль Right - ФорматHTMLРасширеннаяПодсказка - 49 + ЗапомнитьИмяИПарольРасширеннаяПодсказка + 25 Label true true @@ -98,76 +107,8 @@ - ФорматHTMLКонтекстноеМеню - 34 - true - - CheckBoxField - Enter - true - Left - true - - - - ФорматODS - 40 - true - true - - true - - - ФорматODS - - Right - - ФорматODSРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - - ФорматODSКонтекстноеМеню - 41 - true - - CheckBoxField - Enter - true - Left - true - - - - ФорматMXL - 29 - true - true - - true - - - ФорматMXL - - Right - - ФорматMXLРасширеннаяПодсказка - 53 - Label - true - true - - Left - - - - ФорматMXLКонтекстноеМеню - 30 + ЗапомнитьИмяИПарольКонтекстноеМеню + 5 true CheckBoxField @@ -184,17 +125,15 @@ <key>ru</key> - <value>Формат вложений</value> + <value>Введите данные регистрации на сайте поддержки пользователей 1С:Предприятие:</value> - ru - Форматы + Введите данные - true - ФорматыРасширеннаяПодсказка - 44 + ВведитеДанныеРасширеннаяПодсказка + 20 Label true true @@ -206,7 +145,7 @@ Vertical Auto - StrongSeparation + NormalSeparation true true auto @@ -214,21 +153,21 @@ Auto - - ЗапаковатьZIP + + ПерейтиКРегистрацииНаСайте 14 + + <key>ru</key> + <value>Перейти к регистрации на сайте поддержки пользователей</value> + true true true - - ЗапаковатьZIP - - Right - ЗапаковатьZIPРасширеннаяПодсказка - 55 + ПерейтиКРегистрацииНаСайтеРасширеннаяПодсказка + 27 Label true true @@ -237,16 +176,21 @@ - ЗапаковатьZIPКонтекстноеМеню + ПерейтиКРегистрацииНаСайтеКонтекстноеМеню 15 true - CheckBoxField - Enter - true - Left - true - + Label + true + true + + + Click + ПерейтиКРегистрацииНаСайтеНажатие + + true + Left + Bottom true @@ -254,8 +198,8 @@ ФормаКоманднаяПанель -1 - КнопкаОК - 17 + Продолжить + 1 true true @@ -263,8 +207,8 @@ false - КнопкаОКРасширеннаяПодсказка - 42 + ПродолжитьРасширеннаяПодсказка + 17 Label true true @@ -272,7 +216,7 @@ Left - Form.Command.КнопкаОК + Form.Command.СохранитьДанныеАутентификацииИПродолжить Auto true true @@ -282,7 +226,7 @@ Отмена - 37 + 3 true true @@ -291,7 +235,7 @@ false ОтменаРасширеннаяПодсказка - 43 + 18 Label true true @@ -307,13 +251,42 @@ UserCmds Auto + + Справка + 2 + true + true + + true + + false + + СправкаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Right - 38 + + OnCreateAtServer + ПриСозданииНаСервере + DontBlock - Use - UseList true + true true Vertical true @@ -323,94 +296,15 @@ auto true - ЗапаковатьZIP + Пароль <key>ru</key> - <value>Упаковать в архив (.zip)</value> - - 2 - - Boolean - - - true - - - true - - - ЗапаковатьZIP - - - - ФорматMXL - - <key>ru</key> - <value>Табличный документ (.mxl)</value> - - 5 - - Boolean - - - true - - - true - - - ФорматMXL - - - - ФорматXLS - - <key>ru</key> - <value>Лист Excel (.xls)</value> - - 6 - - Boolean - - - true - - - true - - - ФорматXLS - - - - ФорматHTML - - <key>ru</key> - <value>Документ HTML (.html)</value> - - 7 - - Boolean - - - true - - - true - - - ФорматHTML - - - - ФорматPDF - - <key>ru</key> - <value>Документ PDF (.pdf)</value> + <value>Пароль</value> 1 - Boolean + String + true @@ -418,15 +312,12 @@ true - - ФорматPDF - - ФорматODS + ЗапомнитьПароль <key>ru</key> - <value>Электронная таблица ODF(.ods)</value> + <value>Запомнить пароль</value> 3 @@ -438,27 +329,60 @@ true - - ФорматODS - - - КнопкаОК + + КодПользователя <key>ru</key> - <value>ОК</value> + <value>Код пользователя</value> + + 4 + + String + + + + true + + + true + + + + СсылкаНаПользовательскийСайт + + <key>ru</key> + <value>Ссылка на пользовательский сайт</value> + + 2 + + String + + + + true + + + true + + + + СохранитьДанныеАутентификацииИПродолжить + + <key>ru</key> + <value>Продолжить</value> 1 ru - Кнопка ОК + Сохранить данные аутентификации и продолжить true - КнопкаОКВыполнить + СохранитьДанныеАутентификацииИПродолжитьВыполнить Auto diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html new file mode 100644 index 000000000..c9c343d5e --- /dev/null +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Help/ru.html @@ -0,0 +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 similarity index 68% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Module.bsl rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl index b55d7e08e..d73cd5780 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АвторизацияНаПользовательскомСайте/Module.bsl @@ -4,11 +4,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - СсылкаНаПользовательскийСайт = НСтр("ru = 'Перейти к регистрации на пользовательском сайте'"); - АдресныйКлассификатор.ПолучитьПараметрыАутентификации(КодПользователя, Пароль); - - СохранятьПароль = ? (ПустаяСтрока(Пароль), Ложь, Истина); + ЗапомнитьПароль = ? (ПустаяСтрока(Пароль), Ложь, Истина); КонецПроцедуры @@ -16,17 +13,11 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ -// Реализует переход к пользовательскому сайту 1С -// &НаКлиенте -Процедура СсылкаНаПользовательскийСайтНажатие(Элемент, СтандартнаяОбработка) - - СтандартнаяОбработка = Ложь; +Процедура ПерейтиКРегистрацииНаСайтеНажатие(Элемент) ЗапуститьПриложение("http://users.v8.1c.ru/"); - КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ @@ -41,14 +32,20 @@ &НаКлиенте Процедура СохранитьДанныеАутентификацииИПродолжитьВыполнить() - Если СохранятьПароль Тогда - АдресныйКлассификатор.СохранитьПараметрыАутентификации(КодПользователя, Пароль); - Иначе - АдресныйКлассификатор.СохранитьПараметрыАутентификации(КодПользователя, Неопределено); - КонецЕсли; - + СохранитьДанныеАутентификацииИПродолжитьВыполнитьНаСервере(); Закрыть(Новый Структура("Статус, КодПользователя ,Пароль", Истина, КодПользователя, Пароль)); КонецПроцедуры +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура СохранитьДанныеАутентификацииИПродолжитьВыполнитьНаСервере() + + АдресныйКлассификатор.СохранитьПараметрыАутентификации(КодПользователя, ?(ЗапомнитьПароль, Пароль, Неопределено)); + +КонецПроцедуры + + diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Form.form similarity index 100% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Form.form rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Form.form index 4d21b93f2..e73d10cdd 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Form.form @@ -37,208 +37,6 @@ ВерхнийУровень 3 - - Загрузить - 4 - - ЗагрузитьАдресныйКлассификатор - 5 - true - true - - true - - - ЗагрузитьАдресныйКлассификаторРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - UsualButton - Form.Command.ЗагрузитьАдресныйКлассификатор - Normal - Auto - 17 - true - true - UserCmds - Auto - - - ПояснениеЗагрузить - 6 - - <key>ru</key> - <value>Перейти к загрузке адресного классификатора -с веб-сайта фирмы "1С", диска ИТС или из указанного каталога</value> - - true - true - - true - - - ПояснениеЗагрузитьРасширеннаяПодсказка - 20 - Label - true - true - - Left - - - - ПояснениеЗагрузитьКонтекстноеМеню - 7 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Загрузить</value> - - - ru - Загрузить - - - ЗагрузитьРасширеннаяПодсказка - 18 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - Очистить - 8 - - ОчиститьАдресныйКлассификатор - 9 - true - true - - true - - - ОчиститьАдресныйКлассификаторРасширеннаяПодсказка - 22 - Label - true - true - - Left - - - UsualButton - Form.Command.ОчиститьАдресныйКлассификатор - Normal - Auto - 17 - true - true - UserCmds - Auto - - - ПояснениеОчистить - 10 - - <key>ru</key> - <value>Удалить все сведения из адресного классификатора или выборочно, по указанным -регионам</value> - - true - true - - true - - - ПояснениеОчиститьРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - - ПояснениеОчиститьКонтекстноеМеню - 11 - true - - Label - true - true - - Style.ПоясняющийТекст - - - Left - - - true - true - - true - - - <key>ru</key> - <value>Очистить</value> - - - ru - Очистить - - - ОчиститьРасширеннаяПодсказка - 21 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - ПроверитьОбновление 12 @@ -252,7 +50,7 @@ ПроверитьОбновлениеАдресногоКлассификатораРасширеннаяПодсказка - 25 + 19 Label true true @@ -284,7 +82,7 @@ ПояснениеПроверитьОбновлениеРасширеннаяПодсказка - 26 + 20 Label true true @@ -322,6 +120,208 @@ ПроверитьОбновлениеРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Загрузить + 4 + + ЗагрузитьАдресныйКлассификатор + 5 + true + true + + true + + + ЗагрузитьАдресныйКлассификаторРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьАдресныйКлассификатор + Normal + Auto + 17 + true + true + UserCmds + Auto + + + ПояснениеЗагрузить + 6 + + <key>ru</key> + <value>Перейти к загрузке адресного классификатора +с веб-сайта фирмы "1С", диска ИТС или из указанного каталога</value> + + true + true + + true + + + ПояснениеЗагрузитьРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + + ПояснениеЗагрузитьКонтекстноеМеню + 7 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Загрузить</value> + + + ru + Загрузить + + + ЗагрузитьРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + Очистить + 8 + + ОчиститьАдресныйКлассификатор + 9 + true + true + + true + + + ОчиститьАдресныйКлассификаторРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + UsualButton + Form.Command.ОчиститьАдресныйКлассификатор + Normal + Auto + 17 + true + true + UserCmds + Auto + + + ПояснениеОчистить + 10 + + <key>ru</key> + <value>Удалить все сведения из адресного классификатора или выборочно, по указанным +регионам</value> + + true + true + + true + + + ПояснениеОчиститьРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ПояснениеОчиститьКонтекстноеМеню + 11 + true + + Label + true + true + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Очистить</value> + + + ru + Очистить + + + ОчиститьРасширеннаяПодсказка 24 Label true diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html similarity index 91% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Help/ru.html rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Help/ru.html index 8fc89e8df..800594aeb 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 similarity index 89% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Module.bsl rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl index ef207e8bb..9da5f17da 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаУправленияАдреснымКлассификатором/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АдресныйКлассификатор/Module.bsl @@ -12,7 +12,7 @@ Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_АдресныйКлассификатор" Тогда - Элементы.СостояниеРегистра.Заголовок = ПолучитьСостояниеАдресногоКлассификатора(ЭтаФорма); + Элементы.СостояниеРегистра.Заголовок = ПолучитьСостояниеАдресногоКлассификатораНаСервере(); КонецЕсли; КонецПроцедуры @@ -21,7 +21,14 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаКлиентеНаСервереБезКонтекста +&НаСервере +Функция ПолучитьСостояниеАдресногоКлассификатораНаСервере() + + Возврат ПолучитьСостояниеАдресногоКлассификатора(ЭтаФорма); + +КонецФункции + +&НаСервереБезКонтекста Функция ПолучитьСостояниеАдресногоКлассификатора(Контекст) ЧислоЗаполненныхАдресныхОбъектов = АдресныйКлассификатор.ЧислоЗаполненныхАдресныхОбъектов(); diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Help/ru.html deleted file mode 100644 index a85744690..000000000 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Help/ru.html +++ /dev/null @@ -1 +0,0 @@ -Необходимо ввести данные аутентификации на пользовательском сайте (http://users.v8.1c.ru/). \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form similarity index 71% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Form.form rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form index 59f257f82..27c0322cb 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Form.form @@ -6,315 +6,49 @@ СтраницаВыборАдресныхОбъектов 43 - - ГруппаВыборАдресныхОбъектовДляЗагрузки - 16 - - ТаблицаАдресныхОбъектов - 4 + + ТаблицаАдресныхОбъектов + 4 + true + true + + true + + + АдресныеОбъектыДляЗагрузки + + false + None + Add + Change + Copy + CopyToClipboard + Delete + EndEdit + MoveDown + MoveUp + OutputList + SelectAll + SortListAsc + SortListDesc + + Пометка + 34 + + <key>ru</key> + <value>Пометка</value> + true true true - АдресныеОбъектыДляЗагрузки + АдресныеОбъектыДляЗагрузки.Пометка - false - None - Add - Change - Copy - CopyToClipboard - Delete - EndEdit - MoveDown - MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc - - Пометка - 34 - - <key>ru</key> - <value>Пометка</value> - - true - true - - true - - - АдресныеОбъектыДляЗагрузки.Пометка - - - ПометкаРасширеннаяПодсказка - 84 - Label - true - true - - Left - - - - ПометкаКонтекстноеМеню - 35 - true - - CheckBoxField - Enter - true - Left - true - - - - НаименованиеАдресногоОбъекта - 12 - - <key>ru</key> - <value>Все адресные объекты</value> - - true - true - - true - - - АдресныеОбъектыДляЗагрузки.НаименованиеАдресногоОбъекта - - - НаименованиеАдресногоОбъектаРасширеннаяПодсказка - 86 - Label - true - true - - Left - - - - НаименованиеАдресногоОбъектаКонтекстноеМеню - 13 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - - Style.BorderColor - - Normal - - - Top - - ТаблицаАдресныхОбъектовКоманднаяПанель - 6 - - ВыделитьВсе - 37 - true - true - - true - - false - - ВыделитьВсеРасширеннаяПодсказка - 70 - Label - true - true - - Left - - - Form.Command.ВыделитьВсе - Normal - Picture - true - true - UserCmds - Auto - InCommandBarAndInAdditionalSubmenu - - - ОтменитьВыделитьВсе - 38 - true - true - - true - - false - - ОтменитьВыделитьВсеРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - Form.Command.ОтменитьВыделитьВсе - Normal - Auto - true - true - UserCmds - Auto - - - Найти - 39 - true - true - - true - - false - - НайтиРасширеннаяПодсказка - 72 - Label - true - true - - Left - - - Form.Item.ТаблицаАдресныхОбъектов.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ОтменитьПоиск - 40 - true - true - - true - - false - - ОтменитьПоискРасширеннаяПодсказка - 73 - Label - true - true - - Left - - - Form.Item.ТаблицаАдресныхОбъектов.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - Left - - - OnEditEnd - ТаблицаАдресныхОбъектовПриОкончанииРедактирования - - - Selection - ТаблицаАдресныхОбъектовВыбор - - - ТаблицаАдресныхОбъектовСтрокаПоиска - 75 - - ТаблицаАдресныхОбъектовСтрокаПоискаРасширеннаяПодсказка - 77 - Label - true - true - - Left - - - - ТаблицаАдресныхОбъектовСтрокаПоискаКонтекстноеМеню - 76 - true - - ТаблицаАдресныхОбъектов - - true - - - - ТаблицаАдресныхОбъектовСостояниеПросмотра - 78 - - ТаблицаАдресныхОбъектовСостояниеПросмотраРасширеннаяПодсказка - 80 - Label - true - true - - Left - - - - ТаблицаАдресныхОбъектовСостояниеПросмотраКонтекстноеМеню - 79 - true - - ViewStatusAddition - ТаблицаАдресныхОбъектов - - true - - - - ТаблицаАдресныхОбъектовУправлениеПоиском - 81 - - ТаблицаАдресныхОбъектовУправлениеПоискомРасширеннаяПодсказка - 83 - Label - true - true - - Left - - - - ТаблицаАдресныхОбъектовУправлениеПоискомКонтекстноеМеню - 82 - true - - SearchControlAddition - ТаблицаАдресныхОбъектов - - true - - - ТаблицаАдресныхОбъектовРасширеннаяПодсказка - 74 + ПометкаРасширеннаяПодсказка + 91 Label true true @@ -323,53 +57,261 @@ - ТаблицаАдресныхОбъектовКонтекстноеМеню - 5 + ПометкаКонтекстноеМеню + 35 true - true - true - true - true - MultiRow - Row - 1 - 1 - AutoUse - AutoUse - true - true - false - true - Auto - Auto - true - true - - Style.BorderColor - - None - None - None - true - + CheckBoxField + Enter + true + Left + true + - true - true - - true - - - <key>ru</key> - <value>Группа выбор адресных объектов для загрузки</value> - - - ru - Группа выбор адресных объектов для загрузки - + + НаименованиеАдресногоОбъекта + 12 + + <key>ru</key> + <value>Все адресные объекты</value> + + true + true + + true + + + АдресныеОбъектыДляЗагрузки.НаименованиеАдресногоОбъекта + + + НаименованиеАдресногоОбъектаРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + + НаименованиеАдресногоОбъектаКонтекстноеМеню + 13 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + + Style.BorderColor + + Normal + + + Top + + ТаблицаАдресныхОбъектовКоманднаяПанель + 6 + + ВыделитьВсе + 37 + true + true + + true + + false + + ВыделитьВсеРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + Form.Command.СнятьВсе + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ОтменитьВыделитьВсе + 38 + true + true + + true + + false + + ОтменитьВыделитьВсеРасширеннаяПодсказка + 78 + Label + true + true + + Left + + + Form.Command.ОтменитьВыделитьВсе + Normal + Auto + true + true + UserCmds + Auto + + + Найти + 39 + true + true + + true + + false + + НайтиРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + Form.Item.ТаблицаАдресныхОбъектов.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ОтменитьПоиск + 40 + true + true + + true + + false + + ОтменитьПоискРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + Form.Item.ТаблицаАдресныхОбъектов.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + + Left + + + OnEditEnd + ТаблицаАдресныхОбъектовПриОкончанииРедактирования + + + Selection + ТаблицаАдресныхОбъектовВыбор + + + ТаблицаАдресныхОбъектовСтрокаПоиска + 82 + + ТаблицаАдресныхОбъектовСтрокаПоискаРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + + ТаблицаАдресныхОбъектовСтрокаПоискаКонтекстноеМеню + 83 + true + + ТаблицаАдресныхОбъектов + + true + + + + ТаблицаАдресныхОбъектовСостояниеПросмотра + 85 + + ТаблицаАдресныхОбъектовСостояниеПросмотраРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + ТаблицаАдресныхОбъектовСостояниеПросмотраКонтекстноеМеню + 86 + true + + ViewStatusAddition + ТаблицаАдресныхОбъектов + + true + + + + ТаблицаАдресныхОбъектовУправлениеПоиском + 88 + + ТаблицаАдресныхОбъектовУправлениеПоискомРасширеннаяПодсказка + 90 + Label + true + true + + Left + + + + ТаблицаАдресныхОбъектовУправлениеПоискомКонтекстноеМеню + 89 + true + + SearchControlAddition + ТаблицаАдресныхОбъектов + + true + + - ГруппаВыборАдресныхОбъектовДляЗагрузкиРасширеннаяПодсказка - 69 + ТаблицаАдресныхОбъектовРасширеннаяПодсказка + 81 Label true true @@ -377,13 +319,85 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + ТаблицаАдресныхОбъектовКонтекстноеМеню + 5 + true + + true + true + true + true + MultiRow + Row + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + true + true + + Style.BorderColor + + None + None + None + true + + + + ВыбраноРегионовДляЗагрузки + 67 + true + true + + true + + + ВыбраноРегионовДляЗагрузки + + + ВыбраноРегионовДляЗагрузкиРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + + ВыбраноРегионовДляЗагрузкиКонтекстноеМеню + 68 + true + + LabelField + true + Left + Enter + true + Left + true + + true + true + + ru + ЧН=- + + + System.DefaultGUIFont + true + false + false + false + true @@ -395,13 +409,9 @@ ru Выбор адресных объектов - - ru - Необходимо указать адресные объекты для загрузки классификатора - СтраницаВыборАдресныхОбъектовРасширеннаяПодсказка - 68 + 76 Label true true @@ -439,7 +449,7 @@ СпособЗагрузкиРасширеннаяПодсказка - 98 + 107 Label true true @@ -462,7 +472,8 @@ ru - С сайта компании "1С" (требуется доступ в интернет и регистрация на сайте) + С сайта компании "1С" +(требуется доступ в Интернет и регистрация на сайте) 1 @@ -471,7 +482,7 @@ ru - У меня есть диск Информационно-технологического сопровождения + У меня есть диск Информационно-технологического сопровождения (ИТС) 2 @@ -504,7 +515,7 @@ ВыборСпособаЗагрузкиРасширеннаяПодсказка - 97 + 106 Label true true @@ -528,21 +539,17 @@ ПустаяСтраница 31 - - Пуст - 32 + + Пусто1 + 65 true true true - - ПустойРекв - - None - ПустРасширеннаяПодсказка - 102 + Пусто1РасширеннаяПодсказка + 111 Label true true @@ -551,18 +558,15 @@ - ПустКонтекстноеМеню - 33 + Пусто1КонтекстноеМеню + 66 true - LabelField - Enter - true - Left - true - - true - true + Label + true + true + + Left true @@ -580,7 +584,7 @@ ПустаяСтраницаРасширеннаяПодсказка - 101 + 110 Label true true @@ -610,7 +614,7 @@ ДискИТСРасширеннаяПодсказка - 105 + 113 Label true true @@ -659,7 +663,7 @@ СтраницаЗагрузкаСДискаИТСРасширеннаяПодсказка - 104 + 112 Label true true @@ -689,7 +693,7 @@ ПутьКФайламДанныхНаДискеРасширеннаяПодсказка - 108 + 116 Label true true @@ -738,7 +742,7 @@ СтраницаЗагрузкаФайловРасширеннаяПодсказка - 107 + 115 Label true true @@ -767,7 +771,7 @@ СтраницыСпособаЗагрузкиРасширеннаяПодсказка - 100 + 109 Label true true @@ -789,13 +793,9 @@ ru Выбор источника - - ru - Необходимо указать "откуда" загружать классификатор - СтраницаВыборИсточникаРасширеннаяПодсказка - 96 + 105 Label true true @@ -806,18 +806,66 @@ Page Vertical - auto СтраницаЗагрузка 45 + + ВыбраноРегионовДляЗагрузки1 + 69 + true + true + + true + + + ВыбраноРегионовДляЗагрузки + + + ВыбраноРегионовДляЗагрузки1РасширеннаяПодсказка + 119 + Label + true + true + + Left + + + + ВыбраноРегионовДляЗагрузки1КонтекстноеМеню + 70 + true + + LabelField + true + Left + Enter + true + Left + true + + true + true + + ru + ЧН=- + + + System.DefaultGUIFont + true + false + false + false + + + ТекстСообщенияОЗагрузке 46 <key>ru</key> - <value>Внимание! Загрузка адресного классификатора может занять длительное время, которое зависит от количества выбранных регионов и факторов, зависящих от способа загрузки.</value> + <value>Внимание: загрузка адресного классификатора может занять длительное время, которое зависит от количества выбранных регионов РФ.</value> true true @@ -826,7 +874,7 @@ ТекстСообщенияОЗагрузкеРасширеннаяПодсказка - 111 + 121 Label true true @@ -864,7 +912,7 @@ false ЗагрузитьРасширеннаяПодсказка - 112 + 122 Label true true @@ -887,21 +935,17 @@ ГруппаПустаяГруппа 51 - - ПустойРекв - 58 + + Пусто + 63 true true true - - ПустойРекв - - None - ПустойРеквРасширеннаяПодсказка - 115 + ПустоРасширеннаяПодсказка + 125 Label true true @@ -910,18 +954,15 @@ - ПустойРеквКонтекстноеМеню - 59 + ПустоКонтекстноеМеню + 64 true - LabelField - Enter - true - Left - true - - true - true + Label + true + true + + Left true @@ -939,7 +980,7 @@ ГруппаПустаяГруппаРасширеннаяПодсказка - 114 + 124 Label true true @@ -972,7 +1013,7 @@ ДлительнаяОперацияРасширеннаяПодсказка - 119 + 128 Label true true @@ -1009,7 +1050,7 @@ None СтатусЗагрузкиРасширеннаяПодсказка - 120 + 129 Label true true @@ -1049,7 +1090,7 @@ false ГруппаИндикатораРасширеннаяПодсказка - 118 + 127 Label true true @@ -1081,7 +1122,7 @@ СтраницаСтатусЗагрузкиРасширеннаяПодсказка - 117 + 126 Label true true @@ -1110,7 +1151,7 @@ СтраницыЗагрузкиРасширеннаяПодсказка - 113 + 123 Label true true @@ -1132,14 +1173,10 @@ ru Страница загрузка - - ru - Страница загрузка - 50 СтраницаЗагрузкаРасширеннаяПодсказка - 110 + 118 Label true true @@ -1150,7 +1187,6 @@ Page Vertical - auto true @@ -1168,7 +1204,7 @@ СтраницыФормыРасширеннаяПодсказка - 67 + 75 Label true true @@ -1197,7 +1233,7 @@ false НазадРасширеннаяПодсказка - 63 + 71 Label true true @@ -1224,7 +1260,7 @@ false ДалееРасширеннаяПодсказка - 64 + 72 Label true true @@ -1264,7 +1300,7 @@ false ОтменаРасширеннаяПодсказка - 65 + 73 Label true true @@ -1300,7 +1336,7 @@ false СправкаРасширеннаяПодсказка - 66 + 74 Label true true @@ -1451,20 +1487,6 @@ true - - ПустойРекв - 7 - - String - - - - true - - - true - - СтатусЗагрузки @@ -1568,6 +1590,26 @@ <common>true</common> </edit> </attributes> + <attributes> + <name>ВыбраноРегионовДляЗагрузки</name> + <title> + <key>ru</key> + <value>Выбрано регионов для загрузки</value> + + 7 + + Number + + 3 + + + + true + + + true + + КомандаДалее @@ -1591,15 +1633,15 @@ <selectedRowsUse>Auto</selectedRowsUse> </formCommands> <formCommands> - <name>ВыделитьВсе</name> + <name>СнятьВсе</name> <title> <key>ru</key> - <value>Выделить все</value> + <value>Снять все</value> 1 ru - Выделить все + Снять все true @@ -1630,7 +1672,7 @@ true - StdPicture.GrayedAll + StdPicture.UncheckAll diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html new file mode 100644 index 000000000..b7006327a --- /dev/null +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Help/ru.html @@ -0,0 +1,6 @@ + +

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

            +

            Затем выберите один из трех вариантов, откуда будут загружаться адресные сведения: с сайта "1С", с диска информационно-технологического сопровождения (ИТС), или из файлов, полученных каким-либо способом от ГНИВЦ ФНС РФ.

            +

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

            +

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

            +

            В последнем варианте необходимо самостоятельно загрузить файлы адресного классификатора с сайта ГНИВЦ ФНС РФ, распаковать их в каталог на своем компьютере и указать путь к этому каталогу.

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl similarity index 77% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Module.bsl rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl index 7197c0ad8..fe93f7eeb 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ЗагрузкаАдресногоКлассификатора/Module.bsl @@ -4,6 +4,8 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + ОшибкаЗагрузкиДляОС = Ложь; + АдресныеОбъектыПереданные = ?(Параметры.Свойство("АдресныеОбъекты"), Параметры.АдресныеОбъекты, Неопределено); ЗаполнитьТаблицуАдресныхОбъектов(АдресныеОбъектыПереданные); @@ -26,12 +28,12 @@ Процедура ПриОткрытии(Отказ) #Если ВебКлиент Тогда - Предупреждение(НСтр("ru = 'Классификатор не может быть загружен в Веб клиенте.'"),, НСтр("ru = 'Загрузка адресного классификатора.'")); + Предупреждение(НСтр("ru = 'Загрузка адресного классификатора не доступна в веб-клиенте.'")); Закрыть(); #КонецЕсли Если ОшибкаЗагрузкиДляОС Тогда - Предупреждение(НСтр("ru = 'Загрузка КЛАДР на сервере под управлением Linux/x86-64 не доступна.'"),, НСтр("ru = 'Загрузка адресного классификатора.'")); + Предупреждение(НСтр("ru = 'Загрузка адресного классификатора не доступна на сервере под управлением Linux/x86-64.'")); Закрыть(); КонецЕсли; @@ -41,12 +43,9 @@ &НаКлиенте Процедура ПриЗакрытии() - Если ИдентификаторЗадания <> Неопределено Тогда - ДлительныеОперацииКлиент.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); - КонецЕсли; + ПриЗакрытииНаСервере(ИдентификаторЗадания); КонецПроцедуры - //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ @@ -59,7 +58,7 @@ #Если Не ВебКлиент Тогда ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выбор каталога с файлами данных'"); + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выбор каталога с файлами адресных сведений'"); ДиалогОткрытияФайла.Каталог = Элементы.ПутьКФайламДанныхНаДиске.ТекстРедактирования; Если ДиалогОткрытияФайла.Выбрать() Тогда @@ -71,13 +70,11 @@ УстановитьИзмененияВИнтерфейсе (); Иначе СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файлы данных не найдены в каталоге ""%1"".'"), + НСтр("ru = 'Файлы адресных сведений не найдены в каталоге ""%1"".'"), ПутьКФайламДанныхНаДиске); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ПутьКФайламДанныхНаДиске"); КонецЕсли; КонецЕсли; -#Иначе - Предупреждение(НСтр("ru = 'Функциональность не поддерживается на веб клиенте.'")); #КонецЕсли КонецПроцедуры @@ -91,7 +88,7 @@ #Если Не ВебКлиент Тогда ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); - ДиалогОткрытияФайла.Заголовок = "Выбор пути к диску ИТС"; + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Выбор пути к диску ИТС'"); ДиалогОткрытияФайла.Каталог = ДискИТС; Если ДиалогОткрытияФайла.Выбрать() Тогда @@ -105,14 +102,12 @@ УстановитьИзмененияВИнтерфейсе(); Иначе СообщениеПользователю = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Файлы данных КЛАДР не найдены: ""%1"". - |Проверьте правильность указанного пути к Диску ИТС.'"), + НСтр("ru = 'Файлы адресных сведений не найдены: ""%1"". + |Проверьте правильность указанного пути к диску ИТС.'"), ДискИТС); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ДискИТС"); КонецЕсли; КонецЕсли; -#Иначе - Предупреждение(НСтр("ru = 'Функциональность не поддерживается на веб клиенте.'")); #КонецЕсли КонецПроцедуры @@ -124,8 +119,8 @@ Процедура ТаблицаАдресныхОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Элемент.ТекущиеДанные.Пометка = НЕ Элемент.ТекущиеДанные.Пометка; - ОтметитьОбязательные(ЭтаФорма); + ВыбраноРегионовДляЗагрузки = КоличествоОтмеченныхАдресныхОбъектов(); КонецПроцедуры @@ -133,6 +128,7 @@ Процедура ТаблицаАдресныхОбъектовПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) ОтметитьОбязательные(ЭтаФорма); + ВыбраноРегионовДляЗагрузки = КоличествоОтмеченныхАдресныхОбъектов(); КонецПроцедуры @@ -151,10 +147,6 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ -// Обработчик нажатия на "кнопку "ВыделитьВсе" -// командной панели элемента управления "АдресныеОбъектыДляЗагрузки" -// Выделяет все адресные объекты в списке адресных объектов для загрузки -// &НаКлиенте Процедура ВыделитьВсеВыполнить() @@ -166,11 +158,6 @@ КонецПроцедуры -// Обработчик нажатия на "кнопку "ОтменитьВыделитьВсе" -// командной панели элемента управления "АдресныеОбъектыДляЗагрузки" -// Снимает выделение со всех адресных объектов в списке -// адресных объектов для загрузки -// &НаКлиенте Процедура ОтменитьВыделитьВсеВыполнить() @@ -179,7 +166,6 @@ КонецЦикла; ОтметитьОбязательные(ЭтаФорма); - УстановитьИзмененияВИнтерфейсе(); КонецПроцедуры @@ -195,16 +181,14 @@ КонецПроцедуры -// Обработчик нажатия на кнопку "Далее" -// &НаКлиенте Процедура КомандаДалее(Команда) ОчиститьСообщения(); - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборАдресныхОбъектов Тогда + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборАдресныхОбъектов Тогда Если КоличествоОтмеченныхАдресныхОбъектов() = 0 Тогда - СообщениеПользователю = НСтр("ru = 'Требуется выбрать хотя бы один адресный объект.'"); + СообщениеПользователю = НСтр("ru = 'Необходимо выбрать хотя бы один регион для загрузки адресных сведений.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "АдресныеОбъектыДляЗагрузки"); Возврат; КонецЕсли; @@ -219,7 +203,7 @@ ИначеЕсли ИсточникДанныхДляЗагрузки = 3 И (ПустаяСтрока(ПутьКФайламДанныхНаДиске) ИЛИ НЕ АдресныйКлассификаторКлиент.ПроверитьНаличиеФайловДанныхВКаталоге(ПутьКФайламДанныхНаДиске))Тогда - СообщениеПользователю = НСтр("ru = 'Проверьте правильность указания пути к файлам КЛАДР, а так же состав файлов.'"); + СообщениеПользователю = НСтр("ru = 'Проверьте правильность указания пути, а также состав файлов КЛАДР.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю, , "ПутьКФайламДанныхНаДиске"); Возврат; КонецЕсли; @@ -230,8 +214,6 @@ КонецПроцедуры -// Обработчик нажатия на кнопку "Назад" -// &НаКлиенте Процедура КомандаНазад(Команда) @@ -333,14 +315,9 @@ &НаКлиенте Процедура УстановитьСтатусЗагрузки(знач Сообщение = "") - СтатусЗагрузки = Сообщение; - - Если ПустаяСтрока(Сообщение) Тогда - Элементы.СтраницыЗагрузки.ТекущаяСтраница = Элементы.ГруппаПустаяГруппа; - Иначе - Элементы.СтраницыЗагрузки.ТекущаяСтраница = Элементы.СтраницаСтатусЗагрузки; - КонецЕсли; - + СтатусЗагрузки = НСтр("ru = 'Пожалуйста, подождите...'") + Символы.ПС + Сообщение; + СтраницаСтатусаЗагрузки = ?(ПустаяСтрока(Сообщение), Элементы.ГруппаПустаяГруппа, Элементы.СтраницаСтатусЗагрузки); + Элементы.СтраницыЗагрузки.ТекущаяСтраница = СтраницаСтатусаЗагрузки; ОбновитьОтображениеДанных(); КонецПроцедуры @@ -352,9 +329,16 @@ Перем ЗапросФормыАутентификации, ДанныеАутентификации, ПутьКДанным; ТекстСообщенияОшибки = НСтр("ru = 'Ошибка при загрузке адресных сведений: '"); - РезультатВыполнения = Истина; + // Получение каталога временного хранилища файлов КЛАДР. + Попытка + ПутьКДаннымНаСервере = КаталогВременногоХранилищаФайловКладр(); + Исключение + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОшибки + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); + Возврат; + КонецПопытки; + Если ИсточникДанныхДляЗагрузки = 2 Тогда // загрузка с диска ИТС Если Прав(ДискИТС, 1) <> "\" Тогда ДискИТС = ДискИТС + "\"; @@ -367,7 +351,6 @@ // Подготавливаем массив адресных объектов для загрузки АдресныеОбъекты = Новый Массив; - Для Каждого ЭлементАдресныйОбъект Из АдресныеОбъектыДляЗагрузки Цикл Если ЭлементАдресныйОбъект.Пометка Тогда АдресныеОбъекты.Добавить(Лев(ЭлементАдресныйОбъект.НаименованиеАдресногоОбъекта, 2)); @@ -382,36 +365,34 @@ // В зависимости от выбора метода загрузка осуществляется по разному. Попытка ВерсияЗагружаемогоКЛАДР = Неопределено; - РезультатВыполнения = ЗагрузитьФайлыКЛАДРНаКлиент(ДанныеАутентификации, ЗапросФормыАутентификации, АдресныеОбъекты, ПутьКДанным, ВерсияЗагружаемогоКЛАДР); + ДоступныеВерсии = Неопределено; + РезультатВыполнения = ЗагрузитьФайлыКЛАДРНаКлиент(ДанныеАутентификации, ЗапросФормыАутентификации, АдресныеОбъекты, ПутьКДанным, ВерсияЗагружаемогоКЛАДР, ДоступныеВерсии); Если Не РезультатВыполнения Тогда Возврат; КонецЕсли; Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОшибки + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); ОбщегоНазначенияКлиентСервер.УдалитьКаталогСФайлами(ПутьКДанным); + УдалитьФайлыНаСервере(ПутьКДаннымНаСервере); Возврат; КонецПопытки; - // Второй этап - передача файлов на сервер 1С:Предприятия + УстановитьСтатусЗагрузки(НСтр("ru = 'Выполняется загрузка адресных сведений в программу.'")); + + // Второй этап - передача файлов на сервер 1С:Предприятия Попытка - ПутьКДаннымНаСервере = Неопределено; - ПередачаФайловКЛАДРСКлиентаНаСервер(ПутьКДанным, ПутьКДаннымНаСервере, АдресныеОбъекты); + ПомещенныеФайлы = Новый Массив; + ПередачаФайловКЛАДРСКлиентаНаСервер(ПутьКДанным, АдресныеОбъекты, ПомещенныеФайлы); Исключение ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщенияОшибки + КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); - ОбщегоНазначенияКлиентСервер.УдалитьКаталогСФайлами(ПутьКДанным); УдалитьФайлыНаСервере(ПутьКДаннымНаСервере); Возврат; КонецПопытки; // Третий этап - загрузка адресных сведений в регистр сведений. - // Предполагается что к текущему моменту на сервере в каталоге ПутьКДаннымНаСервере - // содержатся все необходимые файлы данных - - УстановитьСтатусЗагрузки(НСтр("ru = 'Загружаются данные по адресным объектам.'")); - СообщениеОбОшибке = ""; - Результат = ЗагрузкаАдресныхСведенийНаСервере(АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки); + Результат = ЗагрузкаАдресныхСведенийНаСервере(АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ПомещенныеФайлы, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки, ДоступныеВерсии); Если НЕ Результат.ЗаданиеВыполнено Тогда ИдентификаторЗадания = Результат.ИдентификаторЗадания; АдресХранилища = Результат.АдресХранилища; @@ -424,29 +405,49 @@ КонецПроцедуры +&НаСервереБезКонтекста +Функция КаталогВременногоХранилищаФайловКладр() + + КаталогВременныхФайлов = ОбщегоНазначенияПовтИсп.КаталогВременногоХранилищаФайлов(); + ПутьККаталогуФайловКЛАДР = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(КаталогВременныхФайлов) + Строка(Новый УникальныйИдентификатор); + + КаталогФайловКЛАДР = Новый Файл(ПутьККаталогуФайловКЛАДР); + Если КаталогФайловКЛАДР.Существует() Тогда + УдалитьФайлы(ПутьККаталогуФайловКЛАДР); + КонецЕсли; + + СоздатьКаталог(ПутьККаталогуФайловКЛАДР); + + Возврат ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(ПутьККаталогуФайловКЛАДР); + +КонецФункции + &НаКлиенте Процедура Подключаемый_ПроверитьВыполнениеЗадания() - Попытка - Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаЗагрузка Тогда - Если ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания) Тогда - Результат = Новый Структура; - Результат.Вставить("РезультатЗагрузки", ПолучитьИзВременногоХранилища(АдресХранилища)); - ОбновитьСодержание(Результат); - Иначе - ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); - ПодключитьОбработчикОжидания( - "Подключаемый_ПроверитьВыполнениеЗадания", - ПараметрыОбработчикаОжидания.ТекущийИнтервал, - Истина); - КонецЕсли; + Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаЗагрузка Тогда + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + Результат = Новый Структура; + Результат.Вставить("РезультатЗагрузки", ПолучитьИзВременногоХранилища(АдресХранилища)); + ОбновитьСодержание(Результат); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); КонецЕсли; - Исключение - ВызватьИсключение; - КонецПопытки; + КонецЕсли; КонецПроцедуры +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции + &НаКлиенте Процедура ОбновитьСодержание(Результат) @@ -455,21 +456,21 @@ ОбщегоНазначенияКлиентСервер.УдалитьКаталогСФайлами(Результат.РезультатЗагрузки.ПутьКДанным); УдалитьФайлыНаСервере(Результат.РезультатЗагрузки.ПутьКДаннымНаСервере); - Если Результат.РезультатЗагрузки.СтатусВыполнения Тогда - Состояние(НСтр("ru = 'Адресный классификатор успешно загружен.'")); - Оповестить("Запись_АдресныйКлассификатор", Новый Структура("Событие", "Загрузить")); - СохранитьПараметрыЗагрузки(); - Закрыть(Истина); - КонецЕсли; - Если Не ПустаяСтрока(Результат.РезультатЗагрузки.СообщениеПользователю) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Результат.РезультатЗагрузки.СообщениеПользователю); КонецЕсли; + Если Результат.РезультатЗагрузки.СтатусВыполнения Тогда + Оповестить("Запись_АдресныйКлассификатор", Новый Структура("Событие", "Загрузить")); + Предупреждение(НСтр("ru = 'Адресный классификатор успешно загружен.'")); + СохранитьПараметрыЗагрузки(); + Закрыть(Истина); + КонецЕсли; + КонецПроцедуры &НаКлиенте -Функция ЗагрузитьФайлыКЛАДРНаКлиент(ДанныеАутентификации, ЗапросФормыАутентификации, АдресныеОбъекты, ПутьКДанным, ВерсияЗагружаемогоКЛАДР) +Функция ЗагрузитьФайлыКЛАДРНаКлиент(ДанныеАутентификации, ЗапросФормыАутентификации, АдресныеОбъекты, ПутьКДанным, ВерсияЗагружаемогоКЛАДР, ДоступныеВерсии) Если ИсточникДанныхДляЗагрузки = 1 Тогда // Загрузка с пользовательского сайта 1С @@ -479,6 +480,12 @@ Состояние(НСтр("ru = 'Загружается адресный классификатор...'")); + РезультатПолученияДоступныхВерсий = АдресныйКлассификаторКлиентСервер.ПолучитьВерсииДоступныеНаСайте1С(); + Если НЕ РезультатПолученияДоступныхВерсий.Статус Тогда + Возврат Ложь; + КонецЕсли; + ДоступныеВерсии = РезультатПолученияДоступныхВерсий.ДоступныеВерсии; + Результат = ЗагрузитьАдресныеОбъектыССервера(АдресныеОбъекты, ДанныеАутентификации, ПутьКДанным); Если Не Результат.Статус И Не ЗапросФормыАутентификации Тогда Если Не ПолучитьДанныеАутентификации(ДанныеАутентификации, ЗапросФормыАутентификации, Истина) Тогда @@ -499,7 +506,7 @@ Если ИсточникДанныхДляЗагрузки = 2 Тогда // Загрузка с диска ИТС Состояние(НСтр("ru = 'Загружается адресный классификатор...'")); - УстановитьСтатусЗагрузки(НСтр("ru = 'Приведение файлов с диска ИТС к требуемому формату.'")); + УстановитьСтатусЗагрузки(НСтр("ru = 'Выполняется обработка файлов с диска ИТС.'")); ПутьКДанным = АдресныйКлассификаторКлиент.ПреобразоватьФайлыКЛАДРEXEВZIP(ДискИТС); Если ПутьКДанным = Неопределено Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Загрузка адресного классификатора была отменена.'")); @@ -509,7 +516,7 @@ ИначеЕсли ИсточникДанныхДляЗагрузки = 3 Тогда // Загрузка из файлов на диске Состояние(НСтр("ru = 'Загружается адресный классификатор...'")); - УстановитьСтатусЗагрузки(НСтр("ru = 'Сжатие файлов.'")); + УстановитьСтатусЗагрузки(НСтр("ru = 'Выполняется загрузка адресных сведений в программу.'")); МассивФайловДляЗагрузки = АдресныйКлассификаторКлиент.СписокФайловДанных(); Для Каждого ИмяФайла Из МассивФайловДляЗагрузки Цикл АдресныйКлассификаторКлиент.СжатьФайл(ПутьКФайламДанныхНаДиске, ИмяФайла, ПутьКДанным); @@ -528,39 +535,59 @@ КонецФункции &НаКлиенте -Процедура ПередачаФайловКЛАДРСКлиентаНаСервер(ПутьКДанным, ПутьКДаннымНаСервере, АдресныеОбъекты) +Процедура ПередачаФайловКЛАДРСКлиентаНаСервер(ПутьКДанным, АдресныеОбъекты, ПомещенныеФайлы) - УстановитьСтатусЗагрузки(НСтр("ru = 'Передача файлов на сервер 1С:Предприятия.'")); + ПомещаемыеФайлы = Новый Массив; Если ИсточникДанныхДляЗагрузки = 1 Тогда - // + Для Каждого АдресныйОбъект Из АдресныеОбъекты Цикл - // + Если АдресныйОбъект = "SO" Тогда - АдресныйКлассификаторКлиент.ПередатьФайлНаСервер(ПутьКДанным, "socrbase.zip", ПутьКДаннымНаСервере); + ПутьКФайлуАрхива = ПутьКДанным + АдресныйКлассификаторКлиент.ЗаменитьРасширение_DBF_На_ZIP("SOCRBASE.ZIP"); + Описание = Новый ОписаниеПередаваемогоФайла(ПутьКФайлуАрхива); + ПомещаемыеФайлы.Добавить(Описание); Иначе - АдресныйКлассификаторКлиент.ПередатьФайлыНаСерверПоАдреснымОбъектам(ПутьКДанным, ПутьКДаннымНаСервере, АдресныйОбъект); + ПутьКФайлуАрхива = ПутьКДанным + "BASE" + АдресныйОбъект + ".ZIP"; + Описание = Новый ОписаниеПередаваемогоФайла(ПутьКФайлуАрхива); + ПомещаемыеФайлы.Добавить(Описание); КонецЕсли; + КонецЦикла; + + Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда + ВызватьИсключение НСтр("ru = 'Ошибка передачи файлов данных на сервер.'"); + КонецЕсли; + Иначе + МассивФайловДляЗагрузки = АдресныйКлассификаторКлиент.СписокФайловДанных(); Для Каждого ИмяФайла Из МассивФайловДляЗагрузки Цикл - АдресныйКлассификаторКлиент.ПередатьФайлНаСервер(ПутьКДанным, ИмяФайла, ПутьКДаннымНаСервере); + ПутьКФайлуАрхива = ПутьКДанным + АдресныйКлассификаторКлиент.ЗаменитьРасширение_DBF_На_ZIP(ИмяФайла); + Описание = Новый ОписаниеПередаваемогоФайла(ПутьКФайлуАрхива); + ПомещаемыеФайлы.Добавить(Описание); КонецЦикла; + + Если НЕ ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь) Тогда + ВызватьИсключение НСтр("ru = 'Ошибка передачи файлов данных на сервер.'"); + КонецЕсли; + КонецЕсли; КонецПроцедуры &НаСервере -Функция ЗагрузкаАдресныхСведенийНаСервере(АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки) +Функция ЗагрузкаАдресныхСведенийНаСервере(АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ПомещенныеФайлы, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки, ДоступныеВерсии) - ПараметрыЗагрузки = Новый Структура("АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки", - АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки); + РазархивироватьФайлыНаСервере(ПомещенныеФайлы, ПутьКДаннымНаСервере); + + ПараметрыЗагрузки = Новый Структура("АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки, ДоступныеВерсии", + АдресныеОбъекты, ПутьКДанным, ПутьКДаннымНаСервере, ВерсияЗагружаемогоКЛАДР, ИсточникДанныхДляЗагрузки, ДоступныеВерсии); Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); АдресныйКлассификатор.ЗагрузкаАдресныхСведенийИзФайловКЛАДРВРегистрСведений(ПараметрыЗагрузки, АдресХранилища); - Результат = Новый Структура("ЗаданиеВыполнено", Истина); + Результат = Новый Структура("ЗаданиеВыполнено", Истина); Иначе НаименованиеЗадания = НСтр("ru = 'Загрузка адресного классификатора'"); @@ -570,7 +597,7 @@ ПараметрыЗагрузки, НаименованиеЗадания); - АдресХранилища = Результат.АдресХранилища; + АдресХранилища = Результат.АдресХранилища КонецЕсли; Если Результат.ЗаданиеВыполнено Тогда @@ -581,13 +608,26 @@ КонецФункции +&НаСервереБезКонтекста +Процедура РазархивироватьФайлыНаСервере(ПомещенныеФайлы, ПутьККаталогуНаСервере) + + Для Каждого ПомещенныйФайл из ПомещенныеФайлы Цикл + + ИмяФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ПомещенныйФайл.Имя).Имя; + ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(ПомещенныйФайл.Хранение); + АдресныйКлассификатор.СохранитьФайлНаСервереИРаспаковать(ДвоичныеДанныеФайла, ИмяФайла, ПутьККаталогуНаСервере); + + КонецЦикла; + +КонецПроцедуры + &НаСервереБезКонтекста Процедура УдалитьФайлыНаСервере(Путь) ОбщегоНазначенияКлиентСервер.УдалитьКаталогСФайлами(Путь); КонецПроцедуры - + &НаКлиенте Функция ПолучитьДанныеАутентификации(ДанныеАутентификации, ЗапросФормыАутентификации, знач ЗапросКПользователю = Ложь) @@ -595,10 +635,9 @@ ЗапросФормыАутентификации = Ложь; - Если ЗапросКПользователю Или Не АдресныйКлассификатор.ПолучитьПараметрыАутентификации(КодПользователя, Пароль) Тогда + Если ЗапросКПользователю Или Не ПолучитьПараметрыАутентификацииСервер(КодПользователя, Пароль) Тогда ЗапросФормыАутентификации = Истина; - УстановитьСтатусЗагрузки(НСтр("ru = 'Аутентификация на пользовательском сайте 1С.'")); - Результат = ОткрытьФормуМодально("РегистрСведений.АдресныйКлассификатор.Форма.АутентификацияНаПользовательскомСайте"); + Результат = ОткрытьФормуМодально("РегистрСведений.АдресныйКлассификатор.Форма.АвторизацияНаПользовательскомСайте"); Если Результат = Неопределено ИЛИ ТипЗнч(Результат) = Тип("КодВозвратаДиалога") Тогда Возврат Ложь; Иначе @@ -608,22 +647,28 @@ КонецЕсли; ДанныеАутентификации = Новый Структура("КодПользователя ,Пароль", КодПользователя, Пароль); - Возврат Истина; КонецФункции +&НаСервереБезКонтекста +Функция ПолучитьПараметрыАутентификацииСервер(КодПользователя, Пароль) + + Возврат АдресныйКлассификатор.ПолучитьПараметрыАутентификации(КодПользователя, Пароль); + +КонецФункции + &НаКлиенте Функция ЗагрузитьАдресныеОбъектыССервера(знач АдресныеОбъекты, знач ДанныеАутентификации, ПутьКДанным) Для Каждого АдресныйОбъект Из АдресныеОбъекты Цикл - АдресныеСведения = АдресныйКлассификатор.ИнформацияПоАдресномуОбъекту(АдресныйОбъект); - УстановитьСтатусЗагрузки( - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Загрузка файлов с Веб сервера 1С: %1 %2.'"), - АдресныеСведения.Наименование, - АдресныеСведения.Сокращение)); - + АдресныеСведения = АдресныйКлассификаторВызовСервера.ИнформацияПоАдресномуОбъекту(АдресныйОбъект); + ТекстСтатусаЗагрузки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Загрузка файлов адресных сведений с веб-сервера: + |%1 %2.'"), + АдресныеСведения.Наименование, + АдресныеСведения.Сокращение); + УстановитьСтатусЗагрузки(ТекстСтатусаЗагрузки); Результат = АдресныйКлассификаторКлиент.ЗагрузитьКЛАДРСВебСервера( АдресныйОбъект, ДанныеАутентификации, @@ -724,7 +769,7 @@ Процедура УстановитьИзмененияВИнтерфейсе() ИсточникДанныхДляЗагрузкиВыбран = ИсточникДанныхДляЗагрузкиВыбран(); - КоличествоОтмеченныхАдресныхОбъектов = КоличествоОтмеченныхАдресныхОбъектов(); + ВыбраноРегионовДляЗагрузки = КоличествоОтмеченныхАдресныхОбъектов(); Если Элементы.СтраницыФормы.ТекущаяСтраница = Элементы.СтраницаВыборАдресныхОбъектов Тогда Элементы.Назад.Доступность = Ложь; @@ -780,3 +825,13 @@ КонецЦикла КонецПроцедуры + +&НаСервереБезКонтекста +Процедура ПриЗакрытииНаСервере(ИдентификаторЗадания) + + Если ИдентификаторЗадания <> Неопределено Тогда + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + КонецЕсли; + +КонецПроцедуры + diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Form.form similarity index 100% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Form.form rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Form.form diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html new file mode 100644 index 000000000..b359b1c9f --- /dev/null +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Help/ru.html @@ -0,0 +1,2 @@ + +

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

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Module.bsl similarity index 100% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Module.bsl rename to SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ОчисткаАдресногоКлассификатора/Module.bsl diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl index 73b239872..132c15561 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаВыбора/Module.bsl @@ -93,8 +93,12 @@ СписокКнопок = Новый СписокЗначений; СписокКнопок.Добавить("Выбрать"); СписокКнопок.Добавить("Отмена"); - Ответ = Вопрос(НСтр("ru='""" + ТекущиеДанные.Сокращение + " " + ТекущиеДанные.Наименование + """ не актуален." - + Символы.ПС + "Выбрать его?'"), СписокКнопок); + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='%1 %2 не актуален. + |Выбрать его?'"), + ТекущиеДанные.Сокращение, + ТекущиеДанные.Наименование); + Ответ = Вопрос(ТекстВопроса, СписокКнопок); Если Ответ = "Отмена" Тогда Возврат; КонецЕсли; @@ -258,15 +262,14 @@ АдресноеСокращение = ""; НаименованиеРегиона = УправлениеКонтактнойИнформациейКлассификаторы.ПолучитьИмяИАдресноеСокращение(Регион, АдресноеСокращение); - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | АдресныйКлассификатор.Код - |ИЗ - | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор - |ГДЕ - | АдресныйКлассификатор.ТипАдресногоЭлемента = 1 - | И АдресныйКлассификатор.Наименование = &НаименованиеРегиона"; + Запрос = Новый Запрос; + Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 + | АдресныйКлассификатор.Код КАК Код + |ИЗ + | РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор + |ГДЕ + | АдресныйКлассификатор.ТипАдресногоЭлемента = 1 + | И АдресныйКлассификатор.Наименование = &НаименованиеРегиона"; Запрос.УстановитьПараметр("НаименованиеРегиона", НаименованиеРегиона); Если Запрос.Выполнить().Пустой() Тогда diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Help/ru.html deleted file mode 100644 index bc22f3e65..000000000 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаЗагрузкиАдресногоКлассификатора/Help/ru.html +++ /dev/null @@ -1,11 +0,0 @@ - -

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

            -
          • Список адресных объектов
          • -

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

            -
          • Источник данных для загрузки
          • -

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

            -

            файлы адресного классификатора - необходимо самостоятельно загрузить с сайта ГНИВЦ ФНС РФ и указать путь к каталогу с разархивированными файлами классификатора

            -

            Командная панель формы содержит следующие кнопки:

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

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Help/ru.html deleted file mode 100644 index f55470678..000000000 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаОчисткиАдресногоКлассификатора/Help/ru.html +++ /dev/null @@ -1,7 +0,0 @@ - -

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

            -

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

            -

            Командная панель формы содержит следующие кнопки:

            -
          • Очистить - удалить адресные сведения по выбранным объектам; в случае если регионы выбраны будет предложен диалог, в котором необходимо подтвердить удаление адресной информации -
          • Отмена - отменить очистку адресного классификатора -
          • Справка - эта справка
          • ВНИМАНИЕ: при очистке удаляются все записи по выбранным адресным объектам из информационной базы

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Form.form index 02780fcf6..38e5b90be 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Form.form @@ -715,6 +715,33 @@ ФормаКоманднаяПанель -1 + + ПроверитьОбновление + 30 + true + true + + true + + false + + ПроверитьОбновлениеРасширеннаяПодсказка + 33 + Label + true + true + + Left + + + Form.Command.ПроверитьОбновление + Normal + Auto + true + true + UserCmds + Auto + ЗагрузитьКлассификатор 28 @@ -726,7 +753,7 @@ false ЗагрузитьКлассификаторРасширеннаяПодсказка - 33 + 34 Label true true @@ -762,33 +789,6 @@ false ОчиститьКлассификаторРасширеннаяПодсказка - 34 - Label - true - true - - Left - - - Form.Command.ОчиститьКлассификатор - Normal - Auto - true - true - UserCmds - Auto - - - ПроверитьОбновление - 30 - true - true - - true - - false - - ПроверитьОбновлениеРасширеннаяПодсказка 35 Label true @@ -797,7 +797,7 @@ Left - Form.Command.ПроверитьОбновление + Form.Command.ОчиститьКлассификатор Normal Auto true @@ -848,7 +848,7 @@ ОчиститьКлассификатор <key>ru</key> - <value>Очистить классификатор</value> + <value>Очистить</value> 2 @@ -892,7 +892,7 @@ ЗагрузитьКлассификатор <key>ru</key> - <value>Загрузить классификатор</value> + <value>Загрузить</value> 1 diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/ФормаСписка/Help/ru.html index d25973dbd..7595eee8f 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/АдресныйКлассификатор/Help/ru.html b/SSL/src/InformationRegisters/АдресныйКлассификатор/Help/ru.html index ee28a5543..4ff8685d6 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 + +

            В адресном классификаторе хранятся адресные сведения, необходимые для работы в программе. Для всех регионов РФ имеется возможность по загрузке адресных сведений с сайта "1С", с диска информационно-технологического сопровождения (ИТС), а также из файлов, распространяемых ГНИВЦ ФНС РФ.

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo b/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo index 668ecfb78..6888524b4 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo +++ b/SSL/src/InformationRegisters/АдресныйКлассификатор/АдресныйКлассификатор.mdo @@ -367,10 +367,10 @@ true - АутентификацияНаПользовательскомСайте + АвторизацияНаПользовательскомСайте ru - Данные аутентификации + Авторизация на сайте @@ -390,10 +390,10 @@ MobileDevice - ФормаЗагрузкиАдресногоКлассификатора + ЗагрузкаАдресногоКлассификатора ru - Подготовка параметров загрузки + Загрузка адресного классификатора @@ -404,7 +404,7 @@ MobileDevice - ФормаОчисткиАдресногоКлассификатора + ОчисткаАдресногоКлассификатора ru Очистка адресного классификатора @@ -433,7 +433,7 @@ MobileDevice - ФормаУправленияАдреснымКлассификатором + АдресныйКлассификатор ru Адресный классификатор @@ -464,10 +464,10 @@ TextDocument - ОткрытьАдресныйКлассификатор + АдресныйКлассификатор ru - Открыть адресный классификатор + Адресный классификатор ActionsPanelTools Auto diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form index 7bd8e1687..8e69451dc 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Form.form @@ -48,7 +48,7 @@ НомерВерсииРасширеннаяПодсказка - 55 + 59 Label true true @@ -90,7 +90,7 @@ АвторВерсииРасширеннаяПодсказка - 57 + 61 Label true true @@ -131,7 +131,7 @@ ДатаРасширеннаяПодсказка - 59 + 63 Label true true @@ -173,7 +173,7 @@ СписокВерсийКомментарийРасширеннаяПодсказка - 61 + 65 Label true true @@ -205,152 +205,22 @@ СписокВерсийКоманднаяПанель 12 - - ОткрытьВерсиюОбъекта - 19 - true - true - - true - - false - - ОткрытьВерсиюОбъектаРасширеннаяПодсказка - 40 - Label - true - true - - Left - - - Form.Command.ОткрытьВерсиюОбъекта - Auto - true - true - true - UserCmds - Auto - - - ОтчетПоИзменениям - 9 - true - true - - true - - false - - ОтчетПоИзменениямРасширеннаяПодсказка - 41 - Label - true - true - - Left - - - Form.Command.СформироватьОтчетПоИзменениям - Normal - Auto - true - true - UserCmds - Auto - - - СписокВерсийПерейтиНаВерсию - 34 - true - true - - true - - - СписокВерсийПерейтиНаВерсиюРасширеннаяПодсказка - 42 - Label - true - true - - Left - - - Form.Command.ПерейтиНаВерсию - Normal - Auto - true - true - UserCmds - Auto - - - Найти - 29 - true - true - - true - - false - - НайтиРасширеннаяПодсказка - 43 - Label - true - true - - Left - - - Form.Item.СписокВерсий.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ОтменитьПоиск - 30 - true - true - - true - - false - - ОтменитьПоискРасширеннаяПодсказка - 44 - Label - true - true - - Left - - - Form.Item.СписокВерсий.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - Left Selection СписокВерсийВыбор + + OnActivateRow + СписокВерсийПриАктивизацииСтроки + СписокВерсийСтрокаПоиска - 46 + 50 СписокВерсийСтрокаПоискаРасширеннаяПодсказка - 48 + 52 Label true true @@ -360,7 +230,7 @@ СписокВерсийСтрокаПоискаКонтекстноеМеню - 47 + 51 true СписокВерсий @@ -370,10 +240,10 @@ СписокВерсийСостояниеПросмотра - 49 + 53 СписокВерсийСостояниеПросмотраРасширеннаяПодсказка - 51 + 55 Label true true @@ -383,7 +253,7 @@ СписокВерсийСостояниеПросмотраКонтекстноеМеню - 50 + 54 true ViewStatusAddition @@ -394,10 +264,10 @@ СписокВерсийУправлениеПоиском - 52 + 56 СписокВерсийУправлениеПоискомРасширеннаяПодсказка - 54 + 58 Label true true @@ -407,7 +277,7 @@ СписокВерсийУправлениеПоискомКонтекстноеМеню - 53 + 57 true SearchControlAddition @@ -418,7 +288,7 @@ СписокВерсийРасширеннаяПодсказка - 45 + 49 Label true true @@ -430,7 +300,7 @@ СписокВерсийКонтекстноеМеню 11 - КМ_ОткрытьВерсиюОбъекта + СписокВерсийОткрытьВерсиюОбъекта 27 true true @@ -439,8 +309,8 @@ false - КМ_ОткрытьВерсиюОбъектаРасширеннаяПодсказка - 37 + СписокВерсийОткрытьВерсиюОбъектаРасширеннаяПодсказка + 46 Label true true @@ -457,7 +327,7 @@ Auto - КМ_ОтчетПоИзменениям + СписокВерсийОтчетПоИзменениям 26 true true @@ -466,8 +336,8 @@ false - КМ_ОтчетПоИзменениямРасширеннаяПодсказка - 38 + СписокВерсийОтчетПоИзменениямРасширеннаяПодсказка + 47 Label true true @@ -484,7 +354,7 @@ Auto - КМ_ПерейтиНаВерсию + СписокВерсийПерейтиНаВерсию 31 true true @@ -492,8 +362,8 @@ true - КМ_ПерейтиНаВерсиюРасширеннаяПодсказка - 39 + СписокВерсийПерейтиНаВерсиюРасширеннаяПодсказка + 48 Label true true @@ -535,37 +405,6 @@ true - - КоманднаяПанель - 8 - true - true - - true - - - <key>ru</key> - <value>Командная панель</value> - - - ru - Командная панель - - - КоманднаяПанельРасширеннаяПодсказка - 71 - Label - true - true - - Left - - - CommandBar - - Right - - true true @@ -573,7 +412,7 @@ ВыборВерсийДляСравненияРасширеннаяПодсказка - 36 + 45 Label true true @@ -589,21 +428,21 @@ ВерсииДляСравненияОтсутствуют 23 - - Текст_ВерсииОтсутствуют - 24 + + Картинка + 37 + + <key>ru</key> + <value>Картинка</value> + true true true - - Текст_ВерсииОтсутствуют - - None - Текст_ВерсииОтсутствуютРасширеннаяПодсказка - 73 + КартинкаРасширеннаяПодсказка + 76 Label true true @@ -612,18 +451,53 @@ - Текст_ВерсииОтсутствуютКонтекстноеМеню - 25 + КартинкаКонтекстноеМеню + 38 true - LabelField - Enter - true - Left - true - + 5 + true + 2 + true + + + CommonPicture.Информация32 + + + + + НетВерсий + 35 + + <key>ru</key> + <value>Предыдущие версии отсутствуют</value> + + true + true + + true + + + НетВерсийРасширеннаяПодсказка + 77 + Label true true + + Left + + + + НетВерсийКонтекстноеМеню + 36 + true + + Label + true + 2 + true + + Left true @@ -633,7 +507,7 @@ ВерсииДляСравненияОтсутствуютРасширеннаяПодсказка - 72 + 75 Label true true @@ -642,9 +516,7 @@ Page - - Vertical - + true true @@ -657,7 +529,7 @@ ОсновнаяСтраницаРасширеннаяПодсказка - 35 + 44 Label true true @@ -670,14 +542,150 @@ Auto - None - false ФормаКоманднаяПанель -1 + + ОткрытьВерсиюОбъекта + 19 + true + true + + true + + false + + ОткрытьВерсиюОбъектаРасширеннаяПодсказка + 39 + Label + true + true + + Left + + + Form.Command.ОткрытьВерсиюОбъекта + Auto + true + true + true + UserCmds + Auto + + + ОтчетПоИзменениям + 9 + true + true + + true + + false + + ОтчетПоИзменениямРасширеннаяПодсказка + 40 + Label + true + true + + Left + + + Form.Command.СформироватьОтчетПоИзменениям + Normal + Auto + true + true + UserCmds + Auto + + + ПерейтиНаВерсию + 34 + true + true + + true + + + ПерейтиНаВерсиюРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + Form.Command.ПерейтиНаВерсию + Normal + PictureAndText + true + true + UserCmds + Auto + + + Найти + 29 + true + true + + true + + false + + НайтиРасширеннаяПодсказка + 42 + Label + true + true + + Left + + + Form.Item.СписокВерсий.StandardCommand.Find + Normal + Auto + true + true + UserCmds + Auto + + + ОтменитьПоиск + 30 + true + true + + true + + false + + ОтменитьПоискРасширеннаяПодсказка + 43 + Label + true + true + + Left + + + Form.Item.СписокВерсий.StandardCommand.CancelSearch + Normal + Auto + true + true + UserCmds + Auto + Left true + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере @@ -685,8 +693,6 @@ Abort Cancel Close - CustomizeForm - Help Ignore No OK @@ -694,7 +700,6 @@ Retry SaveValues Yes - 70 DontBlock true true @@ -815,34 +820,16 @@ true - - Текст_ВерсииОтсутствуют - - <key>ru</key> - <value>Текст версии отсутствуют</value> - - 3 - - String - - - - true - - - true - - СформироватьОтчетПоИзменениям <key>ru</key> - <value>Отчет по изменениям</value> + <value>Сравнить версии</value> 1 ru - Сформировать отчет по изменениям + Сформировать отчет по изменениям между версиями true @@ -859,12 +846,12 @@ ОткрытьВерсиюОбъекта <key>ru</key> - <value>Открыть версию объекта</value> + <value>Открыть версию</value> 2 ru - Открыть версию объекта + Открыть предыдущую версию true @@ -886,7 +873,7 @@ 3 ru - Перейти на версию + Перейти на предыдущую версию true diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl index a7d15750d..d8a044c03 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ВыборХранимыхВерсий/Module.bsl @@ -11,17 +11,35 @@ Ссылка = Параметры.Ссылка; - Если ВерсионированиеОбъектов.ПолучитьНомерПоследнейВерсии(Ссылка) = 0 Тогда + Если ВерсионированиеОбъектов.НомерПоследнейВерсии(Ссылка) = 0 Тогда Элементы.ОсновнаяСтраница.ТекущаяСтраница = Элементы.ВерсииДляСравненияОтсутствуют; - Текст_ВерсииОтсутствуют = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Нет хранимых версий, относящихся к объекту <%1>.'"), - Строка(Ссылка)); + Элементы.НетВерсий.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Предыдущие версии отсутствуют: ""%1"".'"), + Строка(Ссылка)); КонецЕсли; ЗначениеВРеквизитФормы(СформироватьТаблицуВерсий(Ссылка), "СписокВерсий"); - Элементы.СписокВерсийПерейтиНаВерсию.Доступность = Пользователи.ЭтоПолноправныйПользователь(); - Элементы.КМ_ПерейтиНаВерсию.Доступность = Элементы.СписокВерсийПерейтиНаВерсию.Доступность; + ПереходНаВерсиюРазрешен = Пользователи.ЭтоПолноправныйПользователь(); + Элементы.ПерейтиНаВерсию.Видимость = ПереходНаВерсиюРазрешен; + Элементы.СписокВерсийПерейтиНаВерсию.Видимость = ПереходНаВерсиюРазрешен; + +КонецПроцедуры + +&НаКлиенте +Процедура ПриОткрытии(Отказ) + + УстановитьДоступность(); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура СписокВерсийПриАктивизацииСтроки(Элемент) + + УстановитьДоступность(); КонецПроцедуры @@ -40,7 +58,9 @@ &НаКлиенте Процедура ОткрытьВерсиюОбъекта(Команда) + ОткрытьОтчетПоВерсииОбъекта(); + КонецПроцедуры &НаКлиенте @@ -59,7 +79,7 @@ // ничего не делаем, если у формы нет метода Прочитать() КонецПопытки; КонецЕсли; - Предупреждение(НСтр("ru = 'Версия объекта успешно восстановлена'")); + Предупреждение(НСтр("ru = 'Переход к старой версий выполнен успешно.'")); КонецЕсли; КонецПроцедуры @@ -68,15 +88,15 @@ Процедура СформироватьОтчетПоИзменениям(Команда) ВыделенныеСтроки = Элементы.СписокВерсий.ВыделенныеСтроки; - СравниваемыеВерсии = СформироватьСписокВыбранныхВерсий(ВыделенныеСтроки); Если СравниваемыеВерсии.Количество() < 2 Тогда - Предупреждение(НСтр("ru = 'Для формирования отчета по изменениям, необходимо выбрать, как минимум, две версии.'")); - Иначе - ОткрытьФормуОтчета(СравниваемыеВерсии); + Предупреждение(НСтр("ru = 'Для формирования отчета по изменениям необходимо выбрать хотя бы две версии.'")); + Возврат; КонецЕсли; + ОткрытьФормуОтчета(СравниваемыеВерсии); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -105,8 +125,7 @@ &НаСервере Функция ПерейтиНаВерсиюСервер(Ссылка, НомерВерсии) - Информация = ВерсионированиеОбъектов.ПолучитьИнформациюПоВерсии(Ссылка, НомерВерсии); - + Информация = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(Ссылка, НомерВерсии); АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(Информация.ВерсияОбъекта); ТекстСообщенияОбОшибке = ""; @@ -118,13 +137,12 @@ КонецЕсли; Объект.ДополнительныеСвойства.Вставить("ВерсионированиеОбъектовКомментарийКВерсии", - СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Объект восстановлен из версии №%1 от %2'"), - Строка(НомерВерсии), - Формат(Информация.ДатаВерсии, "ДЛФ=DT")) ); + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Выполнен переход к версии №%1 от %2'"), + Строка(НомерВерсии), + Формат(Информация.ДатаВерсии, "ДЛФ=DT")) ); Объект.Записать(); - ЗначениеВРеквизитФормы(СформироватьТаблицуВерсий(Ссылка), "СписокВерсий"); Возврат Истина; @@ -148,9 +166,9 @@ ПараметрыОтчета.Вставить("СравниваемыеВерсии", СравниваемыеВерсии); ОткрытьФорму("РегистрСведений.ВерсииОбъектов.Форма.ОтчетПоВерсиямОбъекта", - ПараметрыОтчета, - ЭтаФорма, - УникальныйИдентификатор); + ПараметрыОтчета, + ЭтаФорма, + УникальныйИдентификатор); КонецПроцедуры @@ -168,3 +186,11 @@ Возврат СравниваемыеВерсии.ВыгрузитьЗначения(); КонецФункции + +&НаКлиенте +Процедура УстановитьДоступность() + Элементы.ОткрытьВерсиюОбъекта.Доступность = Элементы.СписокВерсий.ВыделенныеСтроки.Количество() > 0; + Элементы.ОтчетПоИзменениям.Доступность = Элементы.СписокВерсий.ВыделенныеСтроки.Количество() > 1; + Элементы.ПерейтиНаВерсию.Доступность = Элементы.СписокВерсий.ВыделенныеСтроки.Количество() = 1; + Элементы.СписокВерсийПерейтиНаВерсию.Доступность = Элементы.ПерейтиНаВерсию.Доступность; +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Form.form index 33b52923f..77faf67bf 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Form.form @@ -64,7 +64,6 @@ DontBlock true - true true Vertical true @@ -141,6 +140,40 @@ true + + ЦветСветлоСерый + + <key>ru</key> + <value>Цвет светло серый</value> + + 5 + + Color + + + true + + + true + + + + ЦветКрасноФиолетовый + + <key>ru</key> + <value>Цвет красно фиолетовый</value> + + 6 + + Color + + + true + + + true + + Ссылка diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl index fce9b7a0c..b51f1163d 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ОтчетПоВерсиямОбъекта/Module.bsl @@ -13,6 +13,9 @@ ОбщийШаблон = РегистрыСведений.ВерсииОбъектов.ПолучитьМакет("СтандартныйМакетПредставленияОбъекта"); + ЦветСветлоСерый = ЦветаСтиля.НедоступныеДанныеЦвет; + ЦветКрасноФиолетовый = ЦветаСтиля.ЗаголовокУдаленногоРеквизитаФон; + Если ТипЗнч(Параметры.СравниваемыеВерсии) = Тип("Массив") Тогда // номера версий из регистра ВерсииОбъеков для сравнения, // или одна версия если отчет по одному объекту @@ -32,12 +35,12 @@ СтрокаНомераВерсий = Лев(СтрокаНомераВерсий, СтрДлина(СтрокаНомераВерсий) - 2); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Отчет по изменениям версий объекта %1 №№ %2'"), + НСтр("ru = 'Сравнение версий объекта ""%1"" (№№ %2)'"), СсылкаНаОбъект, СтрокаНомераВерсий); Иначе Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Версия объекта %1 № %2'"), + НСтр("ru = 'Версия объекта ""%1"" №%2'"), СсылкаНаОбъект, Строка(СравниваемыеВерсии[0])); КонецЕсли; @@ -104,10 +107,7 @@ ЧислоВыведенныхСтрок = ВывестиРеквизитыПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта); ЧислоВыведенныхСтрок = ВывестиТабличныеЧастиПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта, ЧислоВыведенныхСтрок+7); Иначе - ФормированиеПоСтандартномуМакету(ТЧОтчета, - Макет, - ПолучитьОбъектИзXML(СериализованныйXML), - ""); + СформироватьПоСтандартномуМакету(ТЧОтчета, Макет, ПолучитьОбъектИзXML(СериализованныйXML), ""); КонецЕсли; КонецПроцедуры @@ -146,10 +146,8 @@ ЧислоВыведенныхСтрок = ВывестиРеквизитыПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта); ЧислоВыведенныхСтрок = ВывестиТабличныеЧастиПоРазобранномуОбъекту(ТЧОтчета, ВерсияОбъекта, ЧислоВыведенныхСтрок+7); Иначе - ФормированиеПоСтандартномуМакету(ТЧОтчета, - Макет, - ПолучитьОбъектИзXML(ВерсионированиеОбъектов.ПолучитьИнформациюПоВерсии(СсылкаНаОбъект, ИдентификаторВерсии).ВерсияОбъекта), - ОписаниеВерсии); + СведенияОВерсии = ПолучитьОбъектИзXML(ВерсионированиеОбъектов.СведенияОВерсииОбъекта(СсылкаНаОбъект, ИдентификаторВерсии).ВерсияОбъекта); + СформироватьПоСтандартномуМакету(ТЧОтчета, Макет, СведенияОВерсии, ОписаниеВерсии); КонецЕсли; КонецПроцедуры @@ -161,7 +159,7 @@ // ВерсияОбъекта - СправочникОбъект,ДокументОбъект - объект, данные которого необходимо отобразить в отчете // НаименованиеОбъекта - Строка - наименование объекта, по которому // -Процедура ФормированиеПоСтандартномуМакету(ТЧОтчета, Макет, ВерсияОбъекта, знач ОписаниеВерсии) +Процедура СформироватьПоСтандартномуМакету(ТЧОтчета, Макет, ВерсияОбъекта, знач ОписаниеВерсии) МетаданныеОбъекта = СсылкаНаОбъект.Метаданные(); @@ -246,10 +244,10 @@ ВыводимоеНаименование = НаименованиеРеквизита; ПредставлениеЗначения = Строка(ЗначениеРеквизита); - УстановитьСвойстваТекста(Секция.Область("R1C2"), ВыводимоеНаименование, ,WebЦвета.Белый, , Истина); + УстановитьСвойстваТекста(Секция.Область("R1C2"), ВыводимоеНаименование, , , , Истина); УстановитьСвойстваТекста(Секция.Область("R1C3"), ПредставлениеЗначения); Секция.Область("R1C2:R1C3").ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1, 0); - Секция.Область("R1C2:R1C3").ЦветРамки = Новый Цвет (200,200,200); + Секция.Область("R1C2:R1C3").ЦветРамки = ЦветСветлоСерый; ТЧОтчета.Вывести(Секция); @@ -306,12 +304,12 @@ Секция = Новый ТабличныйДокумент; - УстановитьСвойстваТекста(Секция.Область("R1C1"),"N", ,WebЦвета.СветлоСерый, , Истина, Истина); + УстановитьСвойстваТекста(Секция.Область("R1C1"),"N", , ЦветСветлоСерый, , Истина, Истина); НомерСтроки = 1; Для Каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл НомерСтроки = НомерСтроки + 1; - УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), Строка(НомерСтроки-1), ,WEBЦвета.Белый,,,Истина); + УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), Строка(НомерСтроки-1), , , , , Истина); КонецЦикла; ДобавляемаяТЧ.Присоединить(Секция); @@ -331,9 +329,8 @@ Иначе ВыводимоеНаименованиеПоля = ОписаниеПоля.Синоним; КонецЕсли; - ЦветЗаголовкаКолонки = ?(ОписаниеПоля = Неопределено, WebЦвета.КрасноФиолетовый, WebЦвета.СветлоСерый); - УстановитьСвойстваТекста(Секция.Область("R1C1"), - ВыводимоеНаименованиеПоля, ,ЦветЗаголовкаКолонки, , Истина, Истина); + ЦветЗаголовкаКолонки = ?(ОписаниеПоля = Неопределено, ЦветКрасноФиолетовый, ЦветСветлоСерый); + УстановитьСвойстваТекста(Секция.Область("R1C1"), ВыводимоеНаименованиеПоля, , ЦветЗаголовкаКолонки, , Истина, Истина); СоответствиеРазмерностиКолонок.Вставить(НомерКолонки, СтрДлина(НаименованиеПоля) + 4); НомерСтроки = 1; Для Каждого СтрокаТабличнойЧасти Из ТабличнаяЧасть Цикл @@ -341,7 +338,7 @@ Значение = ?(СтрокаТабличнойЧасти[НаименованиеПоля] = Неопределено, "", СтрокаТабличнойЧасти[НаименованиеПоля]); ПредставлениеЗначения = Строка(Значение); - УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), ПредставлениеЗначения, ,WEBЦвета.Белый,,,Истина); + УстановитьСвойстваТекста(Секция.Область("R" + НомерСтроки + "C1"), ПредставлениеЗначения, , , , , Истина); Если СтрДлина(ПредставлениеЗначения) > (СоответствиеРазмерностиКолонок[НомерКолонки] - 4) Тогда СоответствиеРазмерностиКолонок[НомерКолонки] = СтрДлина(ПредставлениеЗначения) + 4; КонецЕсли; @@ -374,7 +371,7 @@ Регион = "R4C"+Строка(НомерКолонки); ТЧОтчета.Область(Регион).Текст = Текст; - ТЧОтчета.Область(Регион).ЦветФона = WebЦвета.СветлоСерый; + ТЧОтчета.Область(Регион).ЦветФона = ЦветСветлоСерый; ТЧОтчета.Область(Регион).Шрифт = Новый Шрифт(, 8, Истина, , , ); ТЧОтчета.Область(Регион).ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); ТЧОтчета.Область(Регион).ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная); @@ -997,9 +994,12 @@ Зн_0 = Реквизиты_0.Найти(Реквизит, "НаименованиеРеквизита").ЗначениеРеквизита; Зн_1 = Реквизиты_1.Найти(Реквизит, "НаименованиеРеквизита").ЗначениеРеквизита; - Если Зн_0 <> Зн_1 Тогда - НоваяСтрока = СписокИзменившихсяРеквизитов.Добавить(); - НоваяСтрока.Установить(0, Реквизит); + Если ТипЗнч(Зн_0) <> Тип("ХранилищеЗначения") + И ТипЗнч(Зн_1) <> Тип("ХранилищеЗначения") Тогда + Если Зн_0 <> Зн_1 Тогда + НоваяСтрока = СписокИзменившихсяРеквизитов.Добавить(); + НоваяСтрока.Установить(0, Реквизит); + КонецЕсли; КонецЕсли; КонецЦикла; @@ -1268,12 +1268,12 @@ // Функция РазборВерсии(НомерВерсии, Ссылка) - Информация = ВерсионированиеОбъектов.ПолучитьИнформациюПоВерсии(Ссылка, НомерВерсии); + СведенияОВерсии = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(Ссылка, НомерВерсии); - Результат = РазборПредставленияОбъектаXML(Информация.ВерсияОбъекта, Ссылка); + Результат = РазборПредставленияОбъектаXML(СведенияОВерсии.ВерсияОбъекта, Ссылка); Результат.Вставить("ИмяОбъекта", Строка(Ссылка)); - Результат.Вставить("АвторИзменения", СокрЛП(Строка(Информация.АвторВерсии))); - Результат.Вставить("ДатаИзменения", Информация.ДатаВерсии); + Результат.Вставить("АвторИзменения", СокрЛП(Строка(СведенияОВерсии.АвторВерсии))); + Результат.Вставить("ДатаИзменения", СведенияОВерсии.ДатаВерсии); Возврат Результат; @@ -2021,12 +2021,10 @@ ОбластьСекции.Текст = Текст; - Если ЦветТекста = Неопределено Тогда - ЦветТекста = WebЦвета.Черный; + Если ЦветТекста <> Неопределено Тогда + ОбластьСекции.ЦветТекста = ЦветТекста; КонецЕсли; - ОбластьСекции.ЦветТекста = ЦветТекста; - Если ЦветФона <> Неопределено Тогда ОбластьСекции.ЦветФона = ЦветФона; КонецЕсли; @@ -2047,13 +2045,10 @@ // Функция ПолучитьОписаниеПоВерсии(НомерВерсии) - ИнформацияПоВерсии = ВерсионированиеОбъектов.ПолучитьИнформациюПоВерсии(СсылкаНаОбъект, НомерВерсии); - - ОписаниеХранимойВерсии = "№"+ НомерВерсии + " / (" - + Строка(Строка(ИнформацияПоВерсии.ДатаВерсии)) + " ) / " - + СокрЛП(Строка(ИнформацияПоВерсии.АвторВерсии)); - - Возврат ОписаниеХранимойВерсии; + СведенияОВерсии = ВерсионированиеОбъектов.СведенияОВерсииОбъекта(СсылкаНаОбъект, НомерВерсии); + Описание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '№ %1 / (%2) / %3'"), + НомерВерсии, Строка(СведенияОВерсии.ДатаВерсии), СокрЛП(Строка(СведенияОВерсии.АвторВерсии))); + Возврат Описание; КонецФункции @@ -2145,24 +2140,24 @@ знач Размер = 9, знач Жирный = Ложь) - Если ЦветТекста = Неопределено Тогда - ЦветТекста = WEBЦвета.Черный; + ОбластьСекции = Секция.Область(Регион); + + Если ЦветТекста <> Неопределено Тогда + ОбластьСекции.ЦветТекста = ЦветТекста; КонецЕсли; - Если ЦветФона = Неопределено Тогда - ЦветФона = WEBЦвета.Белый; + Если ЦветФона <> Неопределено Тогда + ОбластьСекции.ЦветФона = ЦветФона; КонецЕсли; - Секция.Область(Регион).Текст = Текст; - Секция.Область(Регион).ЦветФона = ЦветФона; - Секция.Область(Регион).ЦветТекста = ЦветТекста; - Секция.Область(Регион).Шрифт = Новый Шрифт(, Размер, Жирный, , , ); - Секция.Область(Регион).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; + ОбластьСекции.Текст = Текст; + ОбластьСекции.Шрифт = Новый Шрифт(, Размер, Жирный, , , ); + ОбластьСекции.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево; - Секция.Область(Регион).ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); - Секция.Область(Регион).ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); - Секция.Область(Регион).ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); - Секция.Область(Регион).ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСлева = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); + ОбластьСекции.ГраницаСправа = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.НетЛинии); Возврат ТЧОтчета.Вывести(Секция); diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form index 6e058db57..622ec8451 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Form.form @@ -300,6 +300,7 @@ true true + 70 true true true diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl index 99b740bc4..af8f3ffba 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Forms/ФормаСписка/Module.bsl @@ -12,8 +12,8 @@ &НаКлиенте Процедура УдалитьЗаписи(Команда) - ТекстВопроса = НСтр("ru = 'Несогласованное удаление записей по версиям объектов может привести - |к нарушению последовательности записей и в дальнейшем к недостоверности отчета по изменениям. Продолжить?'"); + ТекстВопроса = НСтр("ru = 'Удаление записей по версиям объектов может привести к невозможности + |выполнения анализа всей цепочки изменений этих объектов. Продолжить?'"); Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет, НСтр("ru = 'Предупреждение'")); Если Ответ = КодВозвратаДиалога.Да Тогда УдалитьВерсииИЗРегистра(Элементы.Список.ВыделенныеСтроки); diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx b/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx index eeea0d63d..f4d3a8360 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/Templates/СтандартныйМакетПредставленияОбъекта/Template.mxlx @@ -792,18 +792,18 @@ 322 - d3p1:Blue - #CCFFFF + style:ИзмененноеЗначениеРеквизитаЦвет + style:ИзмененноеЗначениеРеквизитаФон Parameter 322 - #CCFFCC + style:ДобавленныйРеквизитФон Parameter 322 - d3p1:LightPink + style:УдаленныйРеквизитФон Parameter false @@ -828,13 +828,13 @@ 6 - d3p1:Blue - #CCFFFF + style:ИзмененноеЗначениеРеквизитаЦвет + style:ИзмененноеЗначениеРеквизитаФон - #CCFFCC + style:ДобавленныйРеквизитФон - d3p1:LightPink + style:УдаленныйРеквизитФон \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo index 9f9d551c4..080ca49cf 100644 --- a/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo +++ b/SSL/src/InformationRegisters/ВерсииОбъектов/ВерсииОбъектов.mdo @@ -94,9 +94,7 @@ Use Use - - Catalog.Пользователи.EmptyRef - + ДатаВерсии diff --git a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html index 8a2398d82..5f5e5fe79 100644 --- a/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html +++ b/SSL/src/InformationRegisters/ДанныеБизнесПроцессов/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            См. также

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/RecordSetModule.bsl index 43121fc28..21e5d8363 100644 --- a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/RecordSetModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем Запрос; //////////////////////////////////////////////////////////////////////////////// @@ -22,3 +24,5 @@ СтандартныеПодсистемыПереопределяемый.ДанныеПроизводственногоКалендаряПриЗаписиНабораЗаписей(Отказ, Замещение, ЭтотОбъект, Запрос); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt index 312354bfa..57f337dc1 100644 --- a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/Templates/ДанныеПроизводственныхКалендарей/Template.txt @@ -1095,4 +1095,369 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo index c965dda3a..a1ab895e6 100644 --- a/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo +++ b/SSL/src/InformationRegisters/ДанныеПроизводственногоКалендаря/ДанныеПроизводственногоКалендаря.mdo @@ -14,7 +14,6 @@ ru Данные производственного календаря
            - true InDialog Use @@ -81,6 +80,7 @@ Use true + true true diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl index 756cd58e0..bade9be66 100644 --- a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl +++ b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Forms/ДатыЗапретаИзменения/Module.bsl @@ -559,7 +559,7 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст); + ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст); КонецЕсли; КонецПроцедуры @@ -569,7 +569,7 @@ Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; - ДанныеВыбора = Пользователи.СформироватьДанныеВыбораПользователя(Текст); + ДанныеВыбора = СформироватьДанныеВыбораПользователя(Текст); КонецЕсли; КонецПроцедуры @@ -1274,59 +1274,67 @@ УстановитьПривилегированныйРежим(Истина); - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", ВсеРазделыБезОбъектов); - Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Параметры.ДатыЗапретаЗагрузкиДанных); - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Пользователь) КАК ПолноеПредставление, - | ДатыЗапретаИзменения.Пользователь, - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Перечисление.ВидыНазначенияДатЗапрета) - | ТОГДА 0 - | ИНАЧЕ 1 - | КОНЕЦ КАК ОбщееНазначение, - | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Пользователь) КАК Представление, - | МАКСИМУМ(ДатыЗапретаИзменения.ДатаЗапрета) КАК ДатаЗапрета, - | МАКСИМУМ(ДатыЗапретаИзменения.ОписаниеДатыЗапрета) КАК ОписаниеДатыЗапрета, - | МАКСИМУМ(ДатыЗапретаИзменения.Комментарий) КАК Комментарий, - | ЛОЖЬ КАК БезДатыЗапрета, - | -1 КАК НомерКартинки - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО - | И (НЕ(ДатыЗапретаИзменения.Раздел <> ДатыЗапретаИзменения.Объект - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения))) - | И (НЕ(ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения) - | И &ВсеРазделыБезОбъектов)) - | - |СГРУППИРОВАТЬ ПО - | ДатыЗапретаИзменения.Пользователь - | - |ИМЕЮЩИЕ - | ДатыЗапретаИзменения.Пользователь <> НЕОПРЕДЕЛЕНО И - | ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) - | ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) - | ТОГДА &ДатыЗапретаЗагрузкиДанных = ЛОЖЬ - | ИНАЧЕ &ДатыЗапретаЗагрузкиДанных = ИСТИНА - | КОНЕЦ"; + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", ВсеРазделыБезОбъектов); + Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Параметры.ДатыЗапретаЗагрузкиДанных); + Запрос.Текст = + "ВЫБРАТЬ РАЗЛИЧНЫЕ + | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Пользователь) КАК ПолноеПредставление, + | ДатыЗапретаИзменения.Пользователь, + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Перечисление.ВидыНазначенияДатЗапрета) + | ТОГДА 0 + | ИНАЧЕ 1 + | КОНЕЦ КАК ОбщееНазначение, + | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Пользователь) КАК Представление, + | МАКСИМУМ(ДатыЗапретаИзменения.ДатаЗапрета) КАК ДатаЗапрета, + | МАКСИМУМ(ДатыЗапретаИзменения.ОписаниеДатыЗапрета) КАК ОписаниеДатыЗапрета, + | МАКСИМУМ(ДатыЗапретаИзменения.Комментарий) КАК Комментарий, + | ЛОЖЬ КАК БезДатыЗапрета, + | -1 КАК НомерКартинки + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО + | И (НЕ(ДатыЗапретаИзменения.Раздел <> ДатыЗапретаИзменения.Объект + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения))) + | И (НЕ(ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения) + | И &ВсеРазделыБезОбъектов)) + | + |СГРУППИРОВАТЬ ПО + | ДатыЗапретаИзменения.Пользователь + | + |ИМЕЮЩИЕ + | ДатыЗапретаИзменения.Пользователь <> НЕОПРЕДЕЛЕНО И + | ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ГруппыВнешнихПользователей) + | ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) + | ТОГДА &ДатыЗапретаЗагрузкиДанных = ЛОЖЬ + | ИНАЧЕ &ДатыЗапретаЗагрузкиДанных = ИСТИНА + | КОНЕЦ"; + + // Некорректные записи исключаются из выборки условиями: + // - объект со значением типа ПВХ.РазделыДатЗапретаИзменения может быть только равным разделу. + Выгрузка = Запрос.Выполнить().Выгрузить(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; - // Некорректные записи исключаются из выборки условиями: - // - объект со значением типа ПВХ.РазделыДатЗапретаИзменения может быть только равным разделу - Выгрузка = Запрос.Выполнить().Выгрузить(); - - // Заполнение полного представления пользователей + // Заполнение полного представления пользователей. Для каждого Строка Из Выгрузка Цикл Строка.Представление = ТекстПредставленияПользователя(ЭтаФорма, Строка.Пользователь); Строка.ПолноеПредставление = Строка.Представление; КонецЦикла; - // Заполнение представления всех пользователей + // Заполнение представления всех пользователей. ОписаниеВсехПользователей = Выгрузка.Найти(ЗначениеДляВсехПользователей, "Пользователь"); Если ОписаниеВсехПользователей = Неопределено Тогда ОписаниеВсехПользователей = Выгрузка.Вставить(0); @@ -1523,80 +1531,88 @@ Знач ЗначениеДляВсехПользователей) // Подготовка дерева значений дат запрета изменения - // с первым уровнем по разделам - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Пользователь); - Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", ВсеРазделыБезОбъектов); - Запрос.УстановитьПараметр("ОбщаяДатаПредставление", ТекстПредставленияОбщейДаты()); - Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); - Запрос.Текст = - "ВЫБРАТЬ - | Разделы.Ссылка КАК Раздел, - | Разделы.Предопределенный КАК Предопределенный, - | Разделы.Представление КАК РазделПредставление, - | ДатыЗапретаИзменения.Объект, - | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект) КАК ПолноеПредставление, - | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект) КАК Представление, - | ВЫБОР - | КОГДА ДатыЗапретаИзменения.Объект ЕСТЬ NULL - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК БезДатыЗапрета, - | ДатыЗапретаИзменения.ДатаЗапрета, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, - | ЛОЖЬ КАК ЭтоРаздел, - | 0 КАК КоличествоДнейРазрешения - |ИЗ - | (ВЫБРАТЬ - | ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) КАК Ссылка, - | &ОбщаяДатаПредставление КАК Представление, - | ЛОЖЬ КАК Предопределенный - | - | ОБЪЕДИНИТЬ - | - | ВЫБРАТЬ - | РазделыДатЗапретаИзменения.Ссылка, - | РазделыДатЗапретаИзменения.Наименование, - | NULL - | ИЗ - | ПланВидовХарактеристик.РазделыДатЗапретаИзменения КАК РазделыДатЗапретаИзменения - | ГДЕ - | РазделыДатЗапретаИзменения.Предопределенный - | - | ОБЪЕДИНИТЬ - | - | ВЫБРАТЬ - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Раздел.Наименование, - | NULL - | ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - | ГДЕ - | ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)) КАК Разделы - | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - | ПО Разделы.Ссылка = ДатыЗапретаИзменения.Раздел - | И (ДатыЗапретаИзменения.Пользователь = &Пользователь) - | И (ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО) - | И ((НЕ(ДатыЗапретаИзменения.Раздел <> ДатыЗапретаИзменения.Объект - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения)))) - | И ((НЕ(ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения) - | И &ВсеРазделыБезОбъектов))) - |ГДЕ - | (НЕ(&Пользователь <> &ЗначениеДляВсехПользователей - | И ДатыЗапретаИзменения.Раздел ЕСТЬ NULL )) - | - |УПОРЯДОЧИТЬ ПО - | Предопределенный УБЫВ, - | РазделПредставление - |ИТОГИ - | МАКСИМУМ(Предопределенный), - | МАКСИМУМ(РазделПредставление), - | МИНИМУМ(БезДатыЗапрета), - | МАКСИМУМ(ЭтоРаздел) - |ПО - | Раздел"; - - ПрочитанныеДатыЗапрета = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + // с первым уровнем по разделам. + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.УстановитьПараметр("ВсеРазделыБезОбъектов", ВсеРазделыБезОбъектов); + Запрос.УстановитьПараметр("ОбщаяДатаПредставление", ТекстПредставленияОбщейДаты()); + Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); + Запрос.Текст = + "ВЫБРАТЬ + | Разделы.Ссылка КАК Раздел, + | Разделы.Предопределенный КАК Предопределенный, + | Разделы.Представление КАК РазделПредставление, + | ДатыЗапретаИзменения.Объект, + | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект) КАК ПолноеПредставление, + | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект) КАК Представление, + | ВЫБОР + | КОГДА ДатыЗапретаИзменения.Объект ЕСТЬ NULL + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК БезДатыЗапрета, + | ДатыЗапретаИзменения.ДатаЗапрета, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, + | ЛОЖЬ КАК ЭтоРаздел, + | 0 КАК КоличествоДнейРазрешения + |ИЗ + | (ВЫБРАТЬ + | ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) КАК Ссылка, + | &ОбщаяДатаПредставление КАК Представление, + | ЛОЖЬ КАК Предопределенный + | + | ОБЪЕДИНИТЬ + | + | ВЫБРАТЬ + | РазделыДатЗапретаИзменения.Ссылка, + | РазделыДатЗапретаИзменения.Наименование, + | NULL + | ИЗ + | ПланВидовХарактеристик.РазделыДатЗапретаИзменения КАК РазделыДатЗапретаИзменения + | ГДЕ + | РазделыДатЗапретаИзменения.Предопределенный + | + | ОБЪЕДИНИТЬ + | + | ВЫБРАТЬ + | ДатыЗапретаИзменения.Раздел, + | ДатыЗапретаИзменения.Раздел.Наименование, + | NULL + | ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + | ГДЕ + | ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)) КАК Разделы + | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + | ПО Разделы.Ссылка = ДатыЗапретаИзменения.Раздел + | И (ДатыЗапретаИзменения.Пользователь = &Пользователь) + | И (ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО) + | И ((НЕ(ДатыЗапретаИзменения.Раздел <> ДатыЗапретаИзменения.Объект + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) = ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения)))) + | И ((НЕ(ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения) + | И &ВсеРазделыБезОбъектов))) + |ГДЕ + | (НЕ(&Пользователь <> &ЗначениеДляВсехПользователей + | И ДатыЗапретаИзменения.Раздел ЕСТЬ NULL )) + | + |УПОРЯДОЧИТЬ ПО + | Предопределенный УБЫВ, + | РазделПредставление + |ИТОГИ + | МАКСИМУМ(Предопределенный), + | МАКСИМУМ(РазделПредставление), + | МИНИМУМ(БезДатыЗапрета), + | МАКСИМУМ(ЭтоРаздел) + |ПО + | Раздел"; + + ПрочитанныеДатыЗапрета = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Для каждого Строка Из ПрочитанныеДатыЗапрета.Строки Цикл Строка.Представление = Строка.РазделПредставление; @@ -1630,62 +1646,70 @@ &НаСервереБезКонтекста Функция ПрочитатьДанныеПользователяБезРазделов(Знач Пользователь, Знач ПервыйРаздел, Знач ЗначениеДляВсехПользователей) - // Дерево значений с первым уровнем по объектам - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Пользователь); - Запрос.УстановитьПараметр("ПервыйРаздел", ПервыйРаздел); - Запрос.УстановитьПараметр("ОбщаяДатаПредставление", ТекстПредставленияОбщейДаты()); - Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); - Запрос.Текст = - "ВЫБРАТЬ - | ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) КАК Раздел, - | ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) КАК Объект, - | &ОбщаяДатаПредставление КАК ПолноеПредставление, - | &ОбщаяДатаПредставление КАК Представление, - | ЕСТЬNULL(ОбщаяДата.ДатаЗапрета, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаЗапрета, - | ЕСТЬNULL(ОбщаяДата.ОписаниеДатыЗапрета, """") КАК ОписаниеДатыЗапрета, - | ИСТИНА КАК ЭтоРаздел, - | 0 КАК КоличествоДнейРазрешения - |ИЗ - | (ВЫБРАТЬ - | ИСТИНА КАК ЗначениеИстина) КАК Значение - | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ - | ДатыЗапретаИзменения.ДатаЗапрета КАК ДатаЗапрета, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета КАК ОписаниеДатыЗапрета - | ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - | ГДЕ - | ДатыЗапретаИзменения.Пользователь = &Пользователь - | И ДатыЗапретаИзменения.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И ДатыЗапретаИзменения.Объект = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)) КАК ОбщаяДата - | ПО (ИСТИНА) - |ГДЕ - | ВЫБОР - | КОГДА &Пользователь = &ЗначениеДляВсехПользователей - | ТОГДА ИСТИНА - | ИНАЧЕ (НЕ ОбщаяДата.ДатаЗапрета ЕСТЬ NULL ) - | КОНЕЦ - | - |ОБЪЕДИНИТЬ ВСЕ - | - |ВЫБРАТЬ - | &ПервыйРаздел, - | ДатыЗапретаИзменения.Объект, - | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект), - | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект), - | ДатыЗапретаИзменения.ДатаЗапрета, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, - | ЛОЖЬ, - | 0 - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | ДатыЗапретаИзменения.Пользователь = &Пользователь - | И ДатыЗапретаИзменения.Раздел = &ПервыйРаздел - | И ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения)"; + // Дерево значений с первым уровнем по объектам. + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.УстановитьПараметр("ПервыйРаздел", ПервыйРаздел); + Запрос.УстановитьПараметр("ОбщаяДатаПредставление", ТекстПредставленияОбщейДаты()); + Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); + Запрос.Текст = + "ВЫБРАТЬ + | ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) КАК Раздел, + | ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) КАК Объект, + | &ОбщаяДатаПредставление КАК ПолноеПредставление, + | &ОбщаяДатаПредставление КАК Представление, + | ЕСТЬNULL(ОбщаяДата.ДатаЗапрета, ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ДатаЗапрета, + | ЕСТЬNULL(ОбщаяДата.ОписаниеДатыЗапрета, """") КАК ОписаниеДатыЗапрета, + | ИСТИНА КАК ЭтоРаздел, + | 0 КАК КоличествоДнейРазрешения + |ИЗ + | (ВЫБРАТЬ + | ИСТИНА КАК ЗначениеИстина) КАК Значение + | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ + | ДатыЗапретаИзменения.ДатаЗапрета КАК ДатаЗапрета, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета КАК ОписаниеДатыЗапрета + | ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + | ГДЕ + | ДатыЗапретаИзменения.Пользователь = &Пользователь + | И ДатыЗапретаИзменения.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | И ДатыЗапретаИзменения.Объект = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)) КАК ОбщаяДата + | ПО (ИСТИНА) + |ГДЕ + | ВЫБОР + | КОГДА &Пользователь = &ЗначениеДляВсехПользователей + | ТОГДА ИСТИНА + | ИНАЧЕ (НЕ ОбщаяДата.ДатаЗапрета ЕСТЬ NULL ) + | КОНЕЦ + | + |ОБЪЕДИНИТЬ ВСЕ + | + |ВЫБРАТЬ + | &ПервыйРаздел, + | ДатыЗапретаИзменения.Объект, + | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект), + | ПРЕДСТАВЛЕНИЕ(ДатыЗапретаИзменения.Объект), + | ДатыЗапретаИзменения.ДатаЗапрета, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, + | ЛОЖЬ, + | 0 + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | ДатыЗапретаИзменения.Пользователь = &Пользователь + | И ДатыЗапретаИзменения.Раздел = &ПервыйРаздел + | И ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Объект) <> ТИП(ПланВидовХарактеристик.РазделыДатЗапретаИзменения)"; + + ПрочитанныеДатыЗапрета = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - ПрочитанныеДатыЗапрета = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Индекс = ПрочитанныеДатыЗапрета.Строки.Количество()-1; Пока Индекс >= 0 Цикл @@ -1702,9 +1726,9 @@ &НаСервере Процедура ЗаблокироватьНаборЗаписейПользователя(Пользователь, ТекущаяСтрока = Неопределено) - // Перед началом изменения комментария - // Перед установкой нового выбранного пользователя - // Перед удалением текущей строки пользователя + // Перед началом изменения комментария. + // Перед установкой нового выбранного пользователя. + // Перед удалением текущей строки пользователя. Если ТекущаяСтрока = Неопределено Тогда ТекущиеДанные = Неопределено; @@ -1712,22 +1736,30 @@ ТекущиеДанные = ПользователиДатЗапрета.НайтиПоИдентификатору(ТекущаяСтрока); КонецЕсли; - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Пользователь); - Запрос.Текст = - "ВЫБРАТЬ - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Объект, - | ДатыЗапретаИзменения.Пользователь, - | ДатыЗапретаИзменения.ДатаЗапрета, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, - | ДатыЗапретаИзменения.Комментарий - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | ДатыЗапретаИзменения.Пользователь = &Пользователь"; - - Выгрузка = Запрос.Выполнить().Выгрузить(); + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.Текст = + "ВЫБРАТЬ + | ДатыЗапретаИзменения.Раздел, + | ДатыЗапретаИзменения.Объект, + | ДатыЗапретаИзменения.Пользователь, + | ДатыЗапретаИзменения.ДатаЗапрета, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета, + | ДатыЗапретаИзменения.Комментарий + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | ДатыЗапретаИзменения.Пользователь = &Пользователь"; + + Выгрузка = Запрос.Выполнить().Выгрузить(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; ЗначенияКлючаЗаписи = Новый Структура("Раздел, Объект, Пользователь"); @@ -1978,16 +2010,25 @@ ПрочитанныеСвойства.Комментарий = МенеджерЗаписи.Комментарий; ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета(ПрочитанныеСвойства, МенеджерЗаписи.ОписаниеДатыЗапрета); Иначе - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", ЗначенияКлючаЗаписи.Пользователь); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ДатыЗапретаИзменения.Комментарий - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | ДатыЗапретаИзменения.Пользователь = &Пользователь"; - Выборка = Запрос.Выполнить().Выбрать(); + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", ЗначенияКлючаЗаписи.Пользователь); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ДатыЗапретаИзменения.Комментарий + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | ДатыЗапретаИзменения.Пользователь = &Пользователь"; + Выборка = Запрос.Выполнить().Выбрать(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; + Если Выборка.Следующий() Тогда ПрочитанныеСвойства.Комментарий = Выборка.Комментарий; КонецЕсли; @@ -2297,6 +2338,22 @@ КонецПроцедуры + +&НаСервереБезКонтекста +Функция СформироватьДанныеВыбораПользователя(Знач Текст, + Знач ВключаяГруппы = Истина, + Знач ВключаяВнешнихПользователей = Неопределено, + Знач БезПользователей = Ложь) Экспорт + + Возврат Пользователи.СформироватьДанныеВыбораПользователя( + Текст, + ВключаяГруппы, + ВключаяВнешнихПользователей, + БезПользователей); + + +КонецФункции + &НаКлиенте Функция ВыбранТипПользователиИлиВнешниеПользователи(ВыборИПодборВнешнихПользователей) @@ -2496,44 +2553,52 @@ &НаСервереБезКонтекста Функция ТекущаяУстановкаДатыЗапрета(ДатыЗапретаЗагрузкиДанных) - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", ДатыЗапретаЗагрузкиДанных); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЕстьЗапреты - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | (ДатыЗапретаИзменения.Пользователь = НЕОПРЕДЕЛЕНО - | ИЛИ ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыПользователей) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыВнешнихПользователей) - | ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) - | ТОГДА &ДатыЗапретаЗагрузкиДанных = ЛОЖЬ - | ИНАЧЕ &ДатыЗапретаЗагрузкиДанных = ИСТИНА - | КОНЕЦ) - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ПоПользователям - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | (ДатыЗапретаИзменения.Пользователь = НЕОПРЕДЕЛЕНО - | ИЛИ ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыПользователей) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыВнешнихПользователей) - | ТОГДА &ДатыЗапретаЗагрузкиДанных = ЛОЖЬ - | ИНАЧЕ &ДатыЗапретаЗагрузкиДанных = ИСТИНА - | КОНЕЦ) - | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Перечисление.ВидыНазначенияДатЗапрета)"; - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", ДатыЗапретаЗагрузкиДанных); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЕстьЗапреты + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | (ДатыЗапретаИзменения.Пользователь = НЕОПРЕДЕЛЕНО + | ИЛИ ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыВнешнихПользователей) + | ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) + | ТОГДА &ДатыЗапретаЗагрузкиДанных = ЛОЖЬ + | ИНАЧЕ &ДатыЗапретаЗагрузкиДанных = ИСТИНА + | КОНЕЦ) + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ПоПользователям + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | (ДатыЗапретаИзменения.Пользователь = НЕОПРЕДЕЛЕНО + | ИЛИ ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыВнешнихПользователей) + | ТОГДА &ДатыЗапретаЗагрузкиДанных = ЛОЖЬ + | ИНАЧЕ &ДатыЗапретаЗагрузкиДанных = ИСТИНА + | КОНЕЦ) + | И ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) <> ТИП(Перечисление.ВидыНазначенияДатЗапрета)"; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Если РезультатыЗапроса[0].Пустой() Тогда ТекущаяУстановкаДатЗапрета = "НетЗапрета"; @@ -2578,49 +2643,61 @@ Функция ИзменитьУстановкуДатыЗапрета(Знач ВыбранноеЗначение, Знач УдалитьЛишнее) Если УдалитьЛишнее Тогда - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Параметры.ДатыЗапретаЗагрузкиДанных); - // - Если ВыбранноеЗначение = "НетЗапрета" Тогда - Запрос.УстановитьПараметр("ОставитьДляВсехПользователей", Ложь); + + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Параметры.ДатыЗапретаЗагрузкиДанных); // - ИначеЕсли ВыбранноеЗначение = "ДляВсехПользователей" Тогда - Запрос.УстановитьПараметр("ОставитьДляВсехПользователей", Истина); - Иначе - Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Неопределено); - КонецЕсли; - Запрос.Текст = - "ВЫБРАТЬ - | ДатыЗапретаИзменения.Раздел, - | ДатыЗапретаИзменения.Объект, - | ДатыЗапретаИзменения.Пользователь - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | (ДатыЗапретаИзменения.Пользователь = НЕОПРЕДЕЛЕНО - | ИЛИ ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыПользователей) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) - | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыВнешнихПользователей) - | ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) - | ТОГДА &ДатыЗапретаЗагрузкиДанных = ЛОЖЬ - | ИНАЧЕ &ДатыЗапретаЗагрузкиДанных = ИСТИНА - | КОНЕЦ) - | И ВЫБОР - | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Перечисление.ВидыНазначенияДатЗапрета) - | ТОГДА &ОставитьДляВсехПользователей = ЛОЖЬ - | ИНАЧЕ ИСТИНА - | КОНЕЦ"; - ЗначенияКлючейЗаписей = Запрос.Выполнить().Выгрузить(); - // Блокировка удаляемых записей - Для каждого ЗначенияКлючаЗаписи Из ЗначенияКлючейЗаписей Цикл - ЗаблокироватьЗаписьПользователя(ЭтаФорма, ЗначенияКлючаЗаписи.Раздел, ЗначенияКлючаЗаписи.Объект, ЗначенияКлючаЗаписи.Пользователь); - КонецЦикла; - // Удаление заблокированных записей - Для каждого ЗначенияКлючаЗаписи Из ЗначенияКлючейЗаписей Цикл - УдалитьЗаписьПользователя(ЗначенияКлючаЗаписи.Раздел, ЗначенияКлючаЗаписи.Объект, ЗначенияКлючаЗаписи.Пользователь); - КонецЦикла; + Если ВыбранноеЗначение = "НетЗапрета" Тогда + Запрос.УстановитьПараметр("ОставитьДляВсехПользователей", Ложь); + // + ИначеЕсли ВыбранноеЗначение = "ДляВсехПользователей" Тогда + Запрос.УстановитьПараметр("ОставитьДляВсехПользователей", Истина); + Иначе + Запрос.УстановитьПараметр("ДатыЗапретаЗагрузкиДанных", Неопределено); + КонецЕсли; + Запрос.Текст = + "ВЫБРАТЬ + | ДатыЗапретаИзменения.Раздел, + | ДатыЗапретаИзменения.Объект, + | ДатыЗапретаИзменения.Пользователь + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | (ДатыЗапретаИзменения.Пользователь = НЕОПРЕДЕЛЕНО + | ИЛИ ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.Пользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыПользователей) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.ВнешниеПользователи) + | ИЛИ ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Справочник.группыВнешнихПользователей) + | ИЛИ ДатыЗапретаИзменения.Пользователь = ЗНАЧЕНИЕ(Перечисление.ВидыНазначенияДатЗапрета.ДляВсехПользователей) + | ТОГДА &ДатыЗапретаЗагрузкиДанных = ЛОЖЬ + | ИНАЧЕ &ДатыЗапретаЗагрузкиДанных = ИСТИНА + | КОНЕЦ) + | И ВЫБОР + | КОГДА ТИПЗНАЧЕНИЯ(ДатыЗапретаИзменения.Пользователь) = ТИП(Перечисление.ВидыНазначенияДатЗапрета) + | ТОГДА &ОставитьДляВсехПользователей = ЛОЖЬ + | ИНАЧЕ ИСТИНА + | КОНЕЦ"; + ЗначенияКлючейЗаписей = Запрос.Выполнить().Выгрузить(); + + // Блокировка удаляемых записей. + Для каждого ЗначенияКлючаЗаписи Из ЗначенияКлючейЗаписей Цикл + ЗаблокироватьЗаписьПользователя(ЭтаФорма, ЗначенияКлючаЗаписи.Раздел, ЗначенияКлючаЗаписи.Объект, ЗначенияКлючаЗаписи.Пользователь); + КонецЦикла; + + // Удаление заблокированных записей. + Для каждого ЗначенияКлючаЗаписи Из ЗначенияКлючейЗаписей Цикл + УдалитьЗаписьПользователя(ЗначенияКлючаЗаписи.Раздел, ЗначенияКлючаЗаписи.Объект, ЗначенияКлючаЗаписи.Пользователь); + КонецЦикла; + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + РазблокироватьВсеЗаписи(ЭтаФорма); + ВызватьИсключение; + КонецПопытки; РазблокироватьВсеЗаписи(ЭтаФорма); КонецЕсли; @@ -2634,78 +2711,86 @@ &НаСервереБезКонтекста Функция ТекущийСпособУказанияДатыЗапрета(Знач Пользователь, Знач ЕдинственныйРаздел, Знач ПервыйРаздел, Знач ЗначениеДляВсехПользователей, Данные = Неопределено) - Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Пользователь); - Запрос.УстановитьПараметр("ПервыйРаздел", ПервыйРаздел); - Запрос.УстановитьПараметр("ПустаяДата", '00000000'); - Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); - Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | НЕ (&Пользователь <> ДатыЗапретаИзменения.Пользователь И &Пользователь <> ""*"") - | И (НЕ(ДатыЗапретаИзменения.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И ДатыЗапретаИзменения.Объект = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка))) - | И ВЫБОР - | КОГДА ДатыЗапретаИзменения.Пользователь = &ЗначениеДляВсехПользователей - | ТОГДА (НЕ(ДатыЗапретаИзменения.ДатаЗапрета = &ПустаяДата - | И ДатыЗапретаИзменения.ОписаниеДатыЗапрета = """")) - | ИНАЧЕ ИСТИНА - | КОНЕЦ - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | НЕ (&Пользователь <> ДатыЗапретаИзменения.Пользователь И &Пользователь <> ""*"") - | И ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И ДатыЗапретаИзменения.Объект <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И ДатыЗапретаИзменения.Объект <> ДатыЗапретаИзменения.Раздел - | И ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО - |; - | - |//////////////////////////////////////////////////////////////////////////////// - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА КАК ЗначениеИстина - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | НЕ (&Пользователь <> ДатыЗапретаИзменения.Пользователь И &Пользователь <> ""*"") - | И ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И ДатыЗапретаИзменения.Раздел <> &ПервыйРаздел - | - |ОБЪЕДИНИТЬ - | - |ВЫБРАТЬ ПЕРВЫЕ 1 - | ИСТИНА - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | НЕ (&Пользователь <> ДатыЗапретаИзменения.Пользователь И &Пользователь <> ""*"") - | И ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И ДатыЗапретаИзменения.Раздел = ДатыЗапретаИзменения.Объект"; - - РезультатыЗапроса = Запрос.ВыполнитьПакет(); - - ТекущийСпособУказанияДатыЗапрета = ""; - - Запрос.Текст = - "ВЫБРАТЬ - | ДатыЗапретаИзменения.ДатаЗапрета, - | ДатыЗапретаИзменения.ОписаниеДатыЗапрета - |ИЗ - | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения - |ГДЕ - | ДатыЗапретаИзменения.Пользователь = &Пользователь - | И ДатыЗапретаИзменения.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) - | И ДатыЗапретаИзменения.Объект = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)"; - Выборка = Запрос.Выполнить().Выбрать(); - ОбщаяДатаПрочитана = Выборка.Следующий(); + НачатьТранзакцию(); + Попытка + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Пользователь", Пользователь); + Запрос.УстановитьПараметр("ПервыйРаздел", ПервыйРаздел); + Запрос.УстановитьПараметр("ПустаяДата", '00000000'); + Запрос.УстановитьПараметр("ЗначениеДляВсехПользователей", ЗначениеДляВсехПользователей); + Запрос.Текст = + "ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | НЕ (&Пользователь <> ДатыЗапретаИзменения.Пользователь И &Пользователь <> ""*"") + | И (НЕ(ДатыЗапретаИзменения.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | И ДатыЗапретаИзменения.Объект = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка))) + | И ВЫБОР + | КОГДА ДатыЗапретаИзменения.Пользователь = &ЗначениеДляВсехПользователей + | ТОГДА (НЕ(ДатыЗапретаИзменения.ДатаЗапрета = &ПустаяДата + | И ДатыЗапретаИзменения.ОписаниеДатыЗапрета = """")) + | ИНАЧЕ ИСТИНА + | КОНЕЦ + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | НЕ (&Пользователь <> ДатыЗапретаИзменения.Пользователь И &Пользователь <> ""*"") + | И ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | И ДатыЗапретаИзменения.Объект <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | И ДатыЗапретаИзменения.Объект <> ДатыЗапретаИзменения.Раздел + | И ДатыЗапретаИзменения.Объект <> НЕОПРЕДЕЛЕНО + |; + | + |//////////////////////////////////////////////////////////////////////////////// + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА КАК ЗначениеИстина + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | НЕ (&Пользователь <> ДатыЗапретаИзменения.Пользователь И &Пользователь <> ""*"") + | И ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | И ДатыЗапретаИзменения.Раздел <> &ПервыйРаздел + | + |ОБЪЕДИНИТЬ + | + |ВЫБРАТЬ ПЕРВЫЕ 1 + | ИСТИНА + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | НЕ (&Пользователь <> ДатыЗапретаИзменения.Пользователь И &Пользователь <> ""*"") + | И ДатыЗапретаИзменения.Раздел <> ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | И ДатыЗапретаИзменения.Раздел = ДатыЗапретаИзменения.Объект"; + + РезультатыЗапроса = Запрос.ВыполнитьПакет(); + + ТекущийСпособУказанияДатыЗапрета = ""; + + Запрос.Текст = + "ВЫБРАТЬ + | ДатыЗапретаИзменения.ДатаЗапрета, + | ДатыЗапретаИзменения.ОписаниеДатыЗапрета + |ИЗ + | РегистрСведений.ДатыЗапретаИзменения КАК ДатыЗапретаИзменения + |ГДЕ + | ДатыЗапретаИзменения.Пользователь = &Пользователь + | И ДатыЗапретаИзменения.Раздел = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка) + | И ДатыЗапретаИзменения.Объект = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РазделыДатЗапретаИзменения.ПустаяСсылка)"; + Выборка = Запрос.Выполнить().Выбрать(); + ОбщаяДатаПрочитана = Выборка.Следующий(); + + ЗафиксироватьТранзакцию(); + Исключение + ОтменитьТранзакцию(); + ВызватьИсключение; + КонецПопытки; Если Данные = Неопределено Тогда Данные = Новый Структура; @@ -2713,23 +2798,24 @@ Данные.Вставить("ДатаЗапрета", '00000000'); Данные.Вставить("КоличествоДнейРазрешения", 0); КонецЕсли; + Если ОбщаяДатаПрочитана Тогда Данные.ДатаЗапрета = Выборка.ДатаЗапрета; ЗаполнитьПоВнутреннемуОписаниюДатыЗапрета(Данные, Выборка.ОписаниеДатыЗапрета); КонецЕсли; - Если РезультатыЗапроса[0].Пустой() Тогда // Нет по объектам и по разделам, когда пустой + Если РезультатыЗапроса[0].Пустой() Тогда // Нет по объектам и по разделам, когда пустой. ТекущийСпособУказанияДатыЗапрета = ?(ОбщаяДатаПрочитана, "ОбщаяДата", ""); - // - ИначеЕсли НЕ РезультатыЗапроса[1].Пустой() Тогда // Есть по объектам, когда не пустой - Если РезультатыЗапроса[2].Пустой() // Только по ПервыйРаздел (без дат по разделам), когда пустой + + ИначеЕсли НЕ РезультатыЗапроса[1].Пустой() Тогда // Есть по объектам, когда не пустой. + Если РезультатыЗапроса[2].Пустой() // Только по ПервыйРаздел (без дат по разделам), когда пустой. И ЕдинственныйРаздел Тогда - // + ТекущийСпособУказанияДатыЗапрета = "ПоОбъектам"; Иначе ТекущийСпособУказанияДатыЗапрета = "ПоРазделамИОбъектам"; КонецЕсли; - // + Иначе ТекущийСпособУказанияДатыЗапрета = "ПоРазделам"; КонецЕсли; diff --git a/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html b/SSL/src/InformationRegisters/ДатыЗапретаИзменения/Help/ru.html index cb3a7aa7a..ca7677cc9 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/ДокументыФизическихЛиц/Help/ru.html b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html index 64689ec94..8c493b44a 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

            См. также:

            diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl index 0b89e9311..9f4169f8f 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -96,3 +98,5 @@ Возврат Не Запрос.Выполнить().Пустой(); КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl index 290b557cc..bac509691 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/RecordSetModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -94,9 +96,20 @@ КлючЗаписи = РегистрыСведений.ДокументыФизическихЛиц.СоздатьКлючЗаписи(СтруктураЗаписи); - Отказ = Не ФизическиеЛица.СерияДокументаУказанаПравильно(Запись.ВидДокумента, Запись.Серия, КлючЗаписи, "Серия") Или Отказ; - Отказ = Не ФизическиеЛица.НомерДокументаУказанПравильно(Запись.ВидДокумента, Запись.Номер, КлючЗаписи, "Номер") Или Отказ; + ТекстОшибки = ""; + Отказ = Не ФизическиеЛицаКлиентСервер.СерияДокументаУказанаПравильно(Запись.ВидДокумента, Запись.Серия, ТекстОшибки) Или Отказ; + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, КлючЗаписи, "Запись.Серия"); + КонецЕсли; + + ТекстОшибки = ""; + Отказ = Не ФизическиеЛицаКлиентСервер.НомерДокументаУказанПравильно(Запись.ВидДокумента, Запись.Номер, ТекстОшибки) Или Отказ; + Если Не ПустаяСтрока(ТекстОшибки) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, КлючЗаписи, "Запись.Номер"); + КонецЕсли; КонецЦикла; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ДокументыФизическихЛиц.mdo b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ДокументыФизическихЛиц.mdo index 2e12757e6..ee29122d6 100644 --- a/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ДокументыФизическихЛиц.mdo +++ b/SSL/src/InformationRegisters/ДокументыФизическихЛиц/ДокументыФизическихЛиц.mdo @@ -264,7 +264,7 @@ Use Use - Catalog.ВидыДокументовФизическихЛиц.ПаспортРФ + Catalog.ВидыДокументовФизическихЛиц.EmptyRef diff --git a/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html b/SSL/src/InformationRegisters/ДополнительныеСведения/Help/ru.html index 68f345e97..1d5937776 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/ЗависимостиПравДоступа/RecordSetModule.bsl b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/RecordSetModule.bsl index 3c1ae6bc8..c27af5a38 100644 --- a/SSL/src/InformationRegisters/ЗависимостиПравДоступа/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ЗависимостиПравДоступа/RecordSetModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ @@ -51,3 +53,5 @@ // Проверка ОбменДанными.Загрузка должна выполняться после кода выше. КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo index e52c09a3b..bf46197e7 100644 --- a/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo +++ b/SSL/src/InformationRegisters/ЗамерыВремени/ЗамерыВремени.mdo @@ -70,6 +70,74 @@ Use + + ВремяНачала + + ru + Время начала + + + Number + + 25 + + + + + Use + Use + + + + ВремяКонца + + ru + Время конца + + + Number + + 25 + + + + + Use + Use + + + + ВремяНачалаПроверка + + ru + Время начала проверка + + + Date + + + + + Use + Use + + + + ВремяКонцаПроверка + + ru + Время конца проверка + + + Date + + + + + Use + Use + + ИмяПользователя @@ -122,6 +190,7 @@ true Use Use + true true
            diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl index 682ef95cf..47b0629fe 100644 --- a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -146,3 +148,5 @@ ОбменДаннымиСервер.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "ИзмененияОбщихДанныхУзлов"); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo index 68a5b1381..fc4c3bb1c 100644 --- a/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo +++ b/SSL/src/InformationRegisters/ИзмененияОбщихДанныхУзлов/ИзмененияОбщихДанныхУзлов.mdo @@ -14,7 +14,6 @@ ru Изменения общих данных узлов - true InDialog Use diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl new file mode 100644 index 000000000..cf26eae62 --- /dev/null +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Commands/ИсполнителиРоли/CommandModule.bsl @@ -0,0 +1,7 @@ + +&НаКлиенте +Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) + ПараметрыФормы = Новый Структура("РольИсполнителя", ПараметрКоманды); + ОткрытьФорму("РегистрСведений.ИсполнителиЗадач.Форма.ИсполнителиРоли", ПараметрыФормы, + ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Help/ru.html index 76c00bdfa..080eadcd1 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 c4ae09859..cb3ede2f1 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъекту/Module.bsl @@ -11,7 +11,7 @@ КонецЕсли; ОбновитьДанныеЭлементов(); - ИспользоватьВнешниеЗадачиИБизнесПроцессы = БизнесПроцессыИЗадачиПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы(); + ИспользоватьВнешниеЗадачиИБизнесПроцессы = СтандартныеПодсистемыПереопределяемый.ИспользоватьВнешниеЗадачиИБизнесПроцессы(); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/АдресацияПоОбъектуИРоли/Help/ru.html index a0313d651..7861a8647 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/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Attributes/Исполнители/ExtInfo/ListSettings.dcss similarity index 55% rename from SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss rename to SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Attributes/Исполнители/ExtInfo/ListSettings.dcss index 585d2a536..31980f61b 100644 --- a/SSL/src/Catalogs/ИдентификаторыОбъектовМетаданных/Forms/ФормаВыбора/Attributes/Список/ExtInfo/ListSettings.dcss +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Attributes/Исполнители/ExtInfo/ListSettings.dcss @@ -1,30 +1,12 @@ - - ПометкаУдаления - Equal - false - - - Используется - Equal - true - Normal dfcece9d-5077-440b-b6b3-45a5cb4538eb - ПорядокКоллекции - Asc - - - Родитель - Asc - - - Синоним + Исполнитель Asc Normal @@ -34,4 +16,22 @@ Normal b75fecce-942b-4aed-abc9-e6a02e460fb3 + + + + ОсновнойОбъектАдресации + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + ДополнительныйОбъектАдресации + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + diff --git a/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Form.form b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form similarity index 60% rename from SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Form.form rename to SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form index a29173a39..caa38e4ab 100644 --- a/SSL/src/Catalogs/КлассификаторВалют/Forms/ФормаВыбора/Form.form +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Form.form @@ -1,7 +1,11 @@ + + <key>ru</key> + <value>Исполнители роли</value> + - Список + Исполнители 1 true true @@ -9,25 +13,23 @@ true - Список + Исполнители - true None - Наименование - 4 + Исполнитель + 6 true true true - Список.Description + Исполнители.Исполнитель - true - НаименованиеРасширеннаяПодсказка - 18 + ИсполнительРасширеннаяПодсказка + 22 Label true true @@ -36,8 +38,8 @@ - НаименованиеКонтекстноеМеню - 5 + ИсполнительКонтекстноеМеню + 7 true LabelField @@ -51,19 +53,17 @@ - Код - 6 + ОсновнойОбъектАдресации + 8 true true - - true - + - Список.Code + Исполнители.ОсновнойОбъектАдресации - КодРасширеннаяПодсказка - 20 + ОсновнойОбъектАдресацииРасширеннаяПодсказка + 24 Label true true @@ -72,8 +72,42 @@ - КодКонтекстноеМеню - 7 + ОсновнойОбъектАдресацииКонтекстноеМеню + 9 + true + + LabelField + Enter + true + Left + true + + true + true + + + + ДополнительныйОбъектАдресации + 10 + true + true + + + Исполнители.ДополнительныйОбъектАдресации + + + ДополнительныйОбъектАдресацииРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + ДополнительныйОбъектАдресацииКонтекстноеМеню + 11 true LabelField @@ -88,24 +122,17 @@ None - СписокКоманднаяПанель + ИсполнителиКоманднаяПанель 3 Left + true - - ValueChoice - СписокВыборЗначения - - - Selection - СписокВыбор - - СписокСтрокаПоиска - 9 + ИсполнителиСтрокаПоиска + 13 - СписокСтрокаПоискаРасширеннаяПодсказка - 11 + ИсполнителиСтрокаПоискаРасширеннаяПодсказка + 15 Label true true @@ -114,21 +141,21 @@ - СписокСтрокаПоискаКонтекстноеМеню - 10 + ИсполнителиСтрокаПоискаКонтекстноеМеню + 14 true - Список + Исполнители true - СписокСостояниеПросмотра - 12 + ИсполнителиСостояниеПросмотра + 16 - СписокСостояниеПросмотраРасширеннаяПодсказка - 14 + ИсполнителиСостояниеПросмотраРасширеннаяПодсказка + 18 Label true true @@ -137,22 +164,22 @@ - СписокСостояниеПросмотраКонтекстноеМеню - 13 + ИсполнителиСостояниеПросмотраКонтекстноеМеню + 17 true ViewStatusAddition - Список + Исполнители true - СписокУправлениеПоиском - 15 + ИсполнителиУправлениеПоиском + 19 - СписокУправлениеПоискомРасширеннаяПодсказка - 17 + ИсполнителиУправлениеПоискомРасширеннаяПодсказка + 21 Label true true @@ -161,19 +188,19 @@ - СписокУправлениеПоискомКонтекстноеМеню - 16 + ИсполнителиУправлениеПоискомКонтекстноеМеню + 20 true SearchControlAddition - Список + Исполнители true - СписокРасширеннаяПодсказка - 8 + ИсполнителиРасширеннаяПодсказка + 12 Label true true @@ -182,19 +209,17 @@ - СписокКонтекстноеМеню + ИсполнителиКонтекстноеМеню 2 true + HierarchicalList true true true true true - true - true MultiRow -
            true
            1 1 AutoUse @@ -203,12 +228,12 @@ true Auto Auto - ExpandTopLevel + ExpandAllLevels true true true - Список.DefaultPicture + Исполнители.DefaultPicture None None @@ -231,9 +256,12 @@ Left true - LockOwner + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock true - true true Vertical true @@ -243,7 +271,11 @@ auto true - Список + Исполнители + + <key>ru</key> + <value>Исполнители</value> + 1 DynamicList @@ -256,13 +288,28 @@
            true
            - Catalog.КлассификаторВалют + ВЫБРАТЬ + РегистрСведенийИсполнителиЗадач.РольИсполнителя, + РегистрСведенийИсполнителиЗадач.Исполнитель, + РегистрСведенийИсполнителиЗадач.ОсновнойОбъектАдресации, + РегистрСведенийИсполнителиЗадач.ДополнительныйОбъектАдресации +ИЗ + РегистрСведений.ИсполнителиЗадач КАК РегистрСведенийИсполнителиЗадач + InformationRegister.ИсполнителиЗадач true true + true true true
            + + РольИсполнителя + + CatalogRef.РолиИсполнителей + + true + diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html new file mode 100644 index 000000000..7861a8647 --- /dev/null +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Help/ru.html @@ -0,0 +1,6 @@ + +

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

            +

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

            +

            См. также:

            + \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl new file mode 100644 index 000000000..7190ca61a --- /dev/null +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/Forms/ИсполнителиРоли/Module.bsl @@ -0,0 +1,24 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + Если Параметры.Свойство("АвтоТест") Тогда + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Исполнители.Отбор, + "РольИсполнителя", Параметры.РольИсполнителя, ВидСравненияКомпоновкиДанных.Равно); + СвойстваРоли = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Параметры.РольИсполнителя, "ИспользуетсяСОбъектамиАдресации,ТипыДополнительногоОбъектаАдресации,ТипыОсновногоОбъектаАдресации"); + Если Не СвойстваРоли.ИспользуетсяСОбъектамиАдресации Тогда + Исполнители.Группировка.Элементы[0].Использование = Ложь; // ОсновнойОбъектАдресации + Исполнители.Группировка.Элементы[1].Использование = Ложь; // ДополнительныйОбъектАдресации + ИначеЕсли СвойстваРоли.ТипыДополнительногоОбъектаАдресации.Пустая() Тогда + Исполнители.Группировка.Элементы[1].Использование = Ложь; // ДополнительныйОбъектАдресации + КонецЕсли; + + +КонецПроцедуры + diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html b/SSL/src/InformationRegisters/ИсполнителиЗадач/Help/ru.html index 966e876d6..4a418c654 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 f80874cc2..e880e4d37 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/RecordSetModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -14,7 +16,9 @@ КонецЕсли; НовыеИсполнителиЗадач = Выгрузить(); - ГруппыИсполнителейЗадач = БизнесПроцессыИЗадачиВызовСервера.ПолучитьГруппыДоступаЗадач(НовыеИсполнителиЗадач); + УстановитьПривилегированныйРежим(Истина); + ГруппыИсполнителейЗадач = БизнесПроцессыИЗадачиСервер.ГруппыДоступаЗадач(НовыеИсполнителиЗадач); + УстановитьПривилегированныйРежим(Ложь); Индекс = 0; Для каждого Запись Из ЭтотОбъект Цикл Запись.ГруппаИсполнителейЗадач = ГруппыИсполнителейЗадач[Индекс]; @@ -34,3 +38,5 @@ КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ИсполнителиЗадач/ИсполнителиЗадач.mdo b/SSL/src/InformationRegisters/ИсполнителиЗадач/ИсполнителиЗадач.mdo index c811a24b5..abd702f56 100644 --- a/SSL/src/InformationRegisters/ИсполнителиЗадач/ИсполнителиЗадач.mdo +++ b/SSL/src/InformationRegisters/ИсполнителиЗадач/ИсполнителиЗадач.mdo @@ -62,7 +62,7 @@ ru - Исполнитель задачи + Исполнитель задач ГруппаИсполнителейЗадач @@ -208,6 +208,20 @@ PersonalComputer MobileDevice
            + + ИсполнителиРоли + + ru + Исполнители роли + + + + ru + + + PersonalComputer + MobileDevice + ФормаЗаписи @@ -239,4 +253,17 @@ Назначить исполнителей на роли бизнес-процессов + + ИсполнителиРоли + + ru + Исполнители роли + + FormNavigationPanelGoTo + + CatalogRef.РолиИсполнителей + + true + Auto + diff --git a/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html b/SSL/src/InformationRegisters/КалендарныеГрафики/Help/ru.html index 775e5175a..79323215e 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 new file mode 100644 index 000000000..e69de29bb diff --git a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl index f1b04be8b..56ece7730 100644 --- a/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/КурсыВалют/RecordSetModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -9,12 +11,16 @@ Возврат; КонецЕсли; - Если Количество() > 0 Тогда - Для Каждого Запись Из ЭтотОбъект Цикл - ЗагрузитьКурсДляПодчиненныхВалют(Запись); - КонецЦикла; - Иначе - УдалитьКурсДляПодчиненныхВалют(Отбор.Валюта.Значение, Отбор.Период); + Если НЕ ДополнительныеСвойства.Свойство("ОтключитьКонтрольПодчиненныхВалют") Тогда + + ДополнительныеСвойства.Вставить("ЗависимыеВалюты", Новый Соответствие); + + Если Количество() > 0 Тогда + ЗагрузитьКурсыПодчиненныхВалют(); + Иначе + УдалитьКурсыПодчиненныхВалют(); + КонецЕсли; + КонецЕсли; КонецПроцедуры @@ -24,39 +30,48 @@ // Находит все зависимые валюты и изменяет их курс // -Процедура ЗагрузитьКурсДляПодчиненныхВалют(ЗаписьВалютыВладельца) +Процедура ЗагрузитьКурсыПодчиненныхВалют() - ТаблицаВалют = РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(ЗаписьВалютыВладельца.Валюта); - Для Каждого СтрокаТаблицы Из ТаблицаВалют Цикл - ЗаписьКурсовВалют = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи(); + Для Каждого ЗаписьВалютыВладельца Из ЭтотОбъект Цикл - ЗаписьКурсовВалют.Валюта = СтрокаТаблицы.Ссылка; - ЗаписьКурсовВалют.Период = ЗаписьВалютыВладельца.Период; - ЗаписьКурсовВалют.Курс = ЗаписьВалютыВладельца.Курс + ЗаписьВалютыВладельца.Курс * СтрокаТаблицы.Наценка / 100; - ЗаписьКурсовВалют.Кратность = ЗаписьВалютыВладельца.Кратность; + ЗависимыеВалюты = РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(ЗаписьВалютыВладельца.Валюта, ДополнительныеСвойства); + Для Каждого СтрокаТаблицы Из ЗависимыеВалюты Цикл + + НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Валюта.Установить(СтрокаТаблицы.Ссылка, Истина); + НаборЗаписей.Отбор.Период.Установить(ЗаписьВалютыВладельца.Период, Истина); + + ЗаписьКурсовВалют = НаборЗаписей.Добавить(); + ЗаписьКурсовВалют.Валюта = СтрокаТаблицы.Ссылка; + ЗаписьКурсовВалют.Период = ЗаписьВалютыВладельца.Период; + ЗаписьКурсовВалют.Курс = ЗаписьВалютыВладельца.Курс + ЗаписьВалютыВладельца.Курс * СтрокаТаблицы.Наценка / 100; + ЗаписьКурсовВалют.Кратность = ЗаписьВалютыВладельца.Кратность; + + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют", Истина); + НаборЗаписей.Записать(); + + КонецЦикла; - ЗаписьКурсовВалют.Записать(); КонецЦикла; КонецПроцедуры // Очищает курсы зависимых волют // -Процедура УдалитьКурсДляПодчиненныхВалют(ВалютаВладелец, Период) +Процедура УдалитьКурсыПодчиненныхВалют() - ТаблицаВалют = РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(ВалютаВладелец); - Для Каждого СтрокаТаблицы Из ТаблицаВалют Цикл + ВалютаВладелец = Отбор.Валюта.Значение; + Период = Отбор.Период; + + ЗависимыеВалюты = РаботаСКурсамиВалют.ПолучитьСписокЗависимыхВалют(ВалютаВладелец, ДополнительныеСвойства); + Для Каждого СтрокаТаблицы Из ЗависимыеВалюты Цикл НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); - - НаборЗаписей.Отбор.Валюта.Значение = СтрокаТаблицы.Ссылка; - НаборЗаписей.Отбор.Период.Значение = Период.Значение; - НаборЗаписей.Отбор.Период.ЗначениеПо = Период.ЗначениеПО; - НаборЗаписей.Отбор.Период.ЗначениеС = Период.ЗначениеС; - НаборЗаписей.Отбор.Период.ВидСравнения = Период.ВидСравнения; - НаборЗаписей.Отбор.Валюта.Использование = Истина; - НаборЗаписей.Отбор.Период.Использование = Истина; - + НаборЗаписей.Отбор.Валюта.Установить(СтрокаТаблицы.Ссылка, Истина); + НаборЗаписей.Отбор.Период.Установить(Период, Истина); + НаборЗаписей.ДополнительныеСвойства.Вставить("ОтключитьКонтрольПодчиненныхВалют", Истина); НаборЗаписей.Записать(); КонецЦикла; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl index 4078a2114..0a03248db 100644 --- a/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НаборыЗначенийДоступа/Forms/ФормаЗаписи/Module.bsl @@ -38,21 +38,27 @@ КонецЕсли; НаборЗаписей = РегистрыСведений.НаборыЗначенийДоступа.СоздатьНаборЗаписей(); + ЗаполнитьЗначенияСвойств(НаборЗаписей.Добавить(), Запись); - УправлениеДоступом.ПодготовкаНаборовЗначенийДоступаПередЗаписью(Запись.Объект, НаборЗаписей); + УправлениеДоступомСлужебный.ПодготовкаНаборовЗначенийДоступаПередЗаписью( + Запись.Объект, НаборЗаписей); - ЗаполнитьЗначенияСвойств(Запись, НаборЗаписей[0], "ВидДоступаЧерезПраваПоЗначениямДоступа, - |ВидДоступаЕдинственныйДляТипаЗначенияДоступа, - |ВидДоступаБезГруппЗначенияДоступа, - |ВидДоступаПравоЧтения, - |ВидДоступаПравоДобавления, - |ВидДоступаПравоИзменения, - |ТипЗначенияДоступа"); - Если НЕ Запись.Чтение И - НЕ Запись.Добавление И - НЕ Запись.Изменение И - НЕ Запись.Удаление Тогда + ЗаполнитьЗначенияСвойств( + Запись, + НаборЗаписей[0], + "ВидДоступаЧерезПраваПоЗначениямДоступа, + |ВидДоступаЕдинственныйДляТипаЗначенияДоступа, + |ВидДоступаБезГруппЗначенияДоступа, + |ВидДоступаПравоЧтения, + |ВидДоступаПравоДобавления, + |ВидДоступаПравоИзменения, + |ТипЗначенияДоступа"); + + Если НЕ Запись.Чтение + И НЕ Запись.Добавление + И НЕ Запись.Изменение + И НЕ Запись.Удаление Тогда Запись.ВидДоступаПравоЧтения = Неопределено; Запись.ВидДоступаПравоДобавления = Неопределено; diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form index 31dd70941..4b4f69ff2 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Form.form @@ -646,8 +646,7 @@ true false true - true - false + true true true Normal @@ -727,8 +726,7 @@ true true true - true - false + true false true true diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl index 51d21395d..57468e870 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/Напоминание/Module.bsl @@ -220,7 +220,7 @@ НапоминанияПользователяВызовСервера.ОтключитьНапоминание(ИсходныеПараметры, Ложь); НапоминанияПользователяКлиент.УдалитьЗаписьИзКэшаОповещений(ИсходныеПараметры); Оповестить("Запись_НапоминанияПользователя", Новый Структура, Объект.ИсходныйКлючЗаписи); - ОповеститьОбИзменении(Объект.ИсходныйКлючЗаписи); + ОповеститьОбИзменении(Тип("РегистрСведенийКлючЗаписи.НапоминанияПользователя")); КонецЕсли; Если ЭтаФорма.Открыта() Тогда Закрыть(); diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form index 7096068f2..90111be12 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/Forms/ФормаОповещения/Form.form @@ -107,7 +107,6 @@ СрокПовторногоОповещения - true ru Время, через которое нужно напомнить @@ -223,6 +222,7 @@ true + false КнопкаОтложитьРасширеннаяПодсказка 36 @@ -235,8 +235,8 @@ UsualButton Form.Command.Отложить + Normal Auto - true true true UserCmds @@ -285,6 +285,7 @@ Напоминания + true None Add CancelSearch diff --git a/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl b/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl index b2aac6b7d..aabcdcefc 100644 --- a/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НапоминанияПользователя/RecordSetModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -10,3 +12,5 @@ Запись.ПредставлениеИсточника = ОбщегоНазначения.ПредметСтрокой(Запись.Источник); КонецЦикла; КонецПроцедуры + +#КонецЕсли \ 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..d4d94e9fc --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/Help/ru.html @@ -0,0 +1 @@ +аываыв \ 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..2a3314574 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/ManagerModule.bsl @@ -0,0 +1,60 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +// Применяет настройки панели отчетов для текущего пользователя +// +Процедура СохранитьНастройкиПользователяВРазделе(ИзмененныеНастройки) Экспорт + + ТекущийПользователь = Пользователи.ТекущийПользователь(); + Для Каждого Настройка Из ИзмененныеНастройки Цикл + + МенеджерЗаписи = СоздатьМенеджерЗаписи(); + ЗаполнитьЗначенияСвойств(МенеджерЗаписи, Настройка, "Вариант, РазделИлиГруппа, Видимость, БыстрыйДоступ"); + МенеджерЗаписи.Пользователь = ТекущийПользователь; + МенеджерЗаписи.Записать(Истина); + + КонецЦикла; + +КонецПроцедуры // СохранитьНастройкиПользователяВРазделе + +// Очищает настройки текущего пользователя в разделе. +// +Процедура СброситьНастройкиПользователяВРазделе(РазделСсылка, Пользователь = Неопределено) Экспорт + Если Пользователь = Неопределено Тогда + Пользователь = Пользователи.ТекущийПользователь(); + КонецЕсли; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("РазделСсылка", РазделСсылка); + Запрос.Текст = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ + | ИОМ.Ссылка + |ИЗ + | Справочник.ИдентификаторыОбъектовМетаданных КАК ИОМ + |ГДЕ + | ИОМ.Ссылка В ИЕРАРХИИ(&РазделСсылка)"; + МассивПодсистем = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); + + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Пользователь.Установить(Пользователь, Истина); + Для Каждого ПодсистемаСсылка Из МассивПодсистем Цикл + НаборЗаписей.Отбор.РазделИлиГруппа.Установить(ПодсистемаСсылка, Истина); + НаборЗаписей.Записать(Истина); + КонецЦикла; + +КонецПроцедуры // СброситьНастройкиПользователяВРазделе + +// Очищает настройки по варианту отчета. +// +Процедура СброситьНастройкиВариантаОтчета(ВариантСсылка) Экспорт + + НаборЗаписей = СоздатьНаборЗаписей(); + НаборЗаписей.Отбор.Вариант.Установить(ВариантСсылка, Истина); + НаборЗаписей.Записать(Истина); + +КонецПроцедуры // СброситьНастройкиВариантаОтчета + + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo new file mode 100644 index 000000000..d976d45ac --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиВариантовОтчетов/НастройкиВариантовОтчетов.mdo @@ -0,0 +1,141 @@ + + + + + + + + + + + + НастройкиВариантовОтчетов + + ru + Настройки вариантов отчетов + + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + + + ru + + + Managed + + Видимость + + ru + Видимость + + + Boolean + + + + Use + Use + + + + БыстрыйДоступ + + ru + Быстрый доступ + + + Boolean + + + + Use + Use + + + + Пользователь + + ru + Пользователь + + + CatalogRef.Пользователи + + + + Use + Use + true + + true + true + + + РазделИлиГруппа + + ru + Раздел или группа + + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + + Use + Use + true + + true + true + + + Вариант + + ru + Вариант + + + CatalogRef.ВариантыОтчетов + + + + Use + Use + true + + true + true + + diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Form.form b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form similarity index 94% rename from SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Form.form rename to SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form index a19b0bae0..5b4177f74 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Form.form +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Form.form @@ -16,15 +16,12 @@ Add Change Copy - CopyToClipboard Delete EndEdit HierarchicalList List MoveDown MoveUp - OutputList - SelectAll SortListAsc SortListDesc Tree @@ -45,7 +42,7 @@ None КартинкаРасширеннаяПодсказка - 56 + 58 Label true true @@ -89,7 +86,7 @@ НаименованиеОбъектаРасширеннаяПодсказка - 58 + 60 Label true true @@ -135,7 +132,7 @@ КартинкаНаименованиеРасширеннаяПодсказка - 55 + 57 Label true true @@ -163,7 +160,7 @@ ВариантВерсионированияРасширеннаяПодсказка - 60 + 62 Label true true @@ -188,8 +185,7 @@ true true - true - false + true true Style.BorderColor @@ -197,45 +193,6 @@ Normal - - КлассОбъекта - 18 - true - false - - - ДеревоОбъектовМетаданных.КлассОбъекта - - - КлассОбъектаРасширеннаяПодсказка - 62 - Label - true - true - - Left - - - - КлассОбъектаКонтекстноеМеню - 19 - true - - InputField - Enter - Left - - true - true - true - true - true - - Style.BorderColor - - Normal - - None ДеревоОбъектовМетаданныхКоманднаяПанель @@ -249,10 +206,10 @@ ДеревоОбъектовМетаданныхСтрокаПоиска - 46 + 48 ДеревоОбъектовМетаданныхСтрокаПоискаРасширеннаяПодсказка - 48 + 50 Label true true @@ -262,7 +219,7 @@ ДеревоОбъектовМетаданныхСтрокаПоискаКонтекстноеМеню - 47 + 49 true ДеревоОбъектовМетаданных @@ -272,10 +229,10 @@ ДеревоОбъектовМетаданныхСостояниеПросмотра - 49 + 51 ДеревоОбъектовМетаданныхСостояниеПросмотраРасширеннаяПодсказка - 51 + 53 Label true true @@ -285,7 +242,7 @@ ДеревоОбъектовМетаданныхСостояниеПросмотраКонтекстноеМеню - 50 + 52 true ViewStatusAddition @@ -296,10 +253,10 @@ ДеревоОбъектовМетаданныхУправлениеПоиском - 52 + 54 ДеревоОбъектовМетаданныхУправлениеПоискомРасширеннаяПодсказка - 54 + 56 Label true true @@ -309,7 +266,7 @@ ДеревоОбъектовМетаданныхУправлениеПоискомКонтекстноеМеню - 53 + 55 true SearchControlAddition @@ -320,7 +277,7 @@ ДеревоОбъектовМетаданныхРасширеннаяПодсказка - 45 + 47 Label true true @@ -342,7 +299,7 @@ false КМ_УстановитьВариантВерсионированияПриПроведенииРасширеннаяПодсказка - 40 + 42 Label true true @@ -369,7 +326,7 @@ false КМ_УстановитьВариантВерсионированияВсегдаРасширеннаяПодсказка - 41 + 43 Label true true @@ -396,7 +353,7 @@ false КМ_УстановитьВариантВерсионированияНеВерсионироватьРасширеннаяПодсказка - 42 + 44 Label true true @@ -426,7 +383,7 @@ false КМ_УстановитьНастройкиПоУмолчаниюРасширеннаяПодсказка - 44 + 46 Label true true @@ -457,7 +414,7 @@ ДеревоОбъектовМетаданныхКонтекстноеМенюГруппаКнопокРасширеннаяПодсказка - 43 + 45 Label true true @@ -511,7 +468,7 @@ false УстановитьВариантВерсионированияНеВерсионироватьРасширеннаяПодсказка - 35 + 36 Label true true @@ -538,7 +495,7 @@ false УстановитьВариантВерсионированияВсегдаРасширеннаяПодсказка - 36 + 37 Label true true @@ -565,7 +522,7 @@ false УстановитьВариантВерсионированияПриПроведенииРасширеннаяПодсказка - 37 + 38 Label true true @@ -595,7 +552,7 @@ false УстановитьНастройкиПоУмолчаниюРасширеннаяПодсказка - 39 + 40 Label true true @@ -626,7 +583,7 @@ КоманднаяПанельГруппаКнопокРасширеннаяПодсказка - 38 + 39 Label true true @@ -643,7 +600,7 @@ <key>ru</key> - <value>Вариант версионирования</value> + <value>Установить вариант версионирования</value> ru @@ -651,7 +608,7 @@ ВариантВерсионированияГруппаРасширеннаяПодсказка - 34 + 35 Label true true @@ -665,6 +622,36 @@ Normal + + КомандыСписка + 34 + true + true + + true + + + <key>ru</key> + <value>Команды списка</value> + + + ru + Команды списка + + + КомандыСпискаРасширеннаяПодсказка + 41 + Label + true + true + + Left + + + + Item.ДеревоОбъектовМетаданных + + Left true @@ -853,7 +840,7 @@ УстановитьНастройкиПоУмолчанию <key>ru</key> - <value>Установить по умолчанию</value> + <value>По умолчанию</value> 1 diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Help/ru.html new file mode 100644 index 000000000..8adccc779 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Help/ru.html @@ -0,0 +1,5 @@ + +

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

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

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

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Module.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl similarity index 98% rename from SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Module.bsl rename to SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl index 74c396bb6..61001a564 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ВерсионированиеОбъектов/Module.bsl @@ -158,7 +158,7 @@ Новый Структура("ТипВерсионируемогоОбъекта", НоваяСтрокаТаблицы.ТипОбъекта)); Если ВариантВерсионирования = Ложь Тогда - ВариантВерсионирования = ВерсионированиеОбъектов.ПолучитьНастройкуВерсионированияПоУмолчанию(НоваяСтрокаТаблицы.ТипОбъекта); + ВариантВерсионирования = ВерсионированиеОбъектов.НастройкаВерсионированияПоУмолчанию(НоваяСтрокаТаблицы.ТипОбъекта); КонецЕсли; НоваяСтрокаТаблицы.ВариантВерсионирования = ВариантВерсионирования; @@ -178,8 +178,7 @@ &НаСервереБезКонтекста Процедура ЗаписатьНастройкуВерсионирования(знач ТипОбъекта, знач ВариантВерсионирования) - ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту( - ТипОбъекта, ВариантВерсионирования); + ВерсионированиеОбъектов.ЗаписатьНастройкуВерсионированияПоОбъекту(ТипОбъекта, ВариантВерсионирования); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Help/ru.html b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Help/ru.html deleted file mode 100644 index 7c7783909..000000000 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/Forms/ФормаНастройкиВерсионированияОбъектов/Help/ru.html +++ /dev/null @@ -1,5 +0,0 @@ - -

            Настройка версионирования документов и справочников. Влияет на сохранение версий объекта при изменении (создании).

            -
            • Не версионировать - версии объекта не сохраняются -
            • Версионировать всегда - версии объекта сохраняются при любом изменении (создании) -
            • Версионировать при проведении - версии сохраняются только при проведении; настройка применяется только для документов, для которых разрешено проведение

            Допускается установка настроек версионирования для группы объектов.

            \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl index ea3bf402a..417b1a3a4 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/RecordSetModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -17,3 +19,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/НастройкиВерсионированияОбъектов.mdo b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/НастройкиВерсионированияОбъектов.mdo index 73f46bae2..51e9faf1a 100644 --- a/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/НастройкиВерсионированияОбъектов.mdo +++ b/SSL/src/InformationRegisters/НастройкиВерсионированияОбъектов/НастройкиВерсионированияОбъектов.mdo @@ -15,7 +15,7 @@ Настройки версионирования объектов
            true - InformationRegister.НастройкиВерсионированияОбъектов.Form.ФормаНастройкиВерсионированияОбъектов + InformationRegister.НастройкиВерсионированияОбъектов.Form.ВерсионированиеОбъектов Use Active @@ -52,7 +52,7 @@ Managed ru - Версионируемые объекты + Версионирование объектов Вариант @@ -121,7 +121,7 @@ true - ФормаНастройкиВерсионированияОбъектов + ВерсионированиеОбъектов ru Версионирование объектов diff --git a/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl b/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl index 2cb06fb84..78fe46ffc 100644 --- a/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиОтправителя/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -27,3 +29,5 @@ Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель"); КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form similarity index 53% rename from SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Form.form rename to SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form index b2832adc3..9f641dc70 100644 --- a/SSL/src/InformationRegisters/АдресныйКлассификатор/Forms/АутентификацияНаПользовательскомСайте/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Form.form @@ -1,18 +1,133 @@ + + <key>ru</key> + <value>Настройка подключения к Интернету</value> + - КодПользователя - 10 + WSИмяПользователя + 5 true true true - КодПользователя + Запись.WSИмяПользователя - КодПользователяРасширеннаяПодсказка + WSИмяПользователяРасширеннаяПодсказка + 15 + Label + true + true + + Left + + + + WSИмяПользователяКонтекстноеМеню + 6 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + Normal + + + + Группа1 + 9 + + WSПароль + 7 + true + true + + true + + + Запись.WSПароль + + + WSПарольРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + + WSПарольКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + true + Normal + + + + ЗабылиПароль + 12 + true + true + + true + + + ЗабылиПарольРасширеннаяПодсказка + 20 + Label + true + true + + Left + + + Hyperlink + Form.Command.ЗабылиПароль + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + Группа1РасширеннаяПодсказка 17 Label true @@ -21,80 +136,29 @@ Left - - КодПользователяКонтекстноеМеню - 11 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal + UsualGroup + + Auto + true + true + Auto + Auto - Пароль - 8 + WSЗапомнитьПароль + 3 true true true - Пароль - - - ПарольРасширеннаяПодсказка - 19 - Label - true - true - - Left - - - - ПарольКонтекстноеМеню - 9 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - СохранятьПароль - 4 - true - true - - true - - - СохранятьПароль + Запись.WSЗапомнитьПароль Right - СохранятьПарольРасширеннаяПодсказка + WSЗапомнитьПарольРасширеннаяПодсказка 21 Label true @@ -104,8 +168,8 @@ - СохранятьПарольКонтекстноеМеню - 5 + WSЗапомнитьПарольКонтекстноеМеню + 4 true CheckBoxField @@ -115,65 +179,23 @@ true - - СсылкаНаПользовательскийСайт - 12 - true - true - - true - - - СсылкаНаПользовательскийСайт - - None - - СсылкаНаПользовательскийСайтРасширеннаяПодсказка - 23 - Label - true - true - - Left - - - - СсылкаНаПользовательскийСайтКонтекстноеМеню - 13 - true - - LabelField - Enter - true - Left - true - - - Click - СсылкаНаПользовательскийСайтНажатие - - true - true - true - - Bottom true ФормаКоманднаяПанель -1 - Продолжить - 1 + ПроверитьПодключениеИЗакрыть + 10 true true true - false + true - ПродолжитьРасширеннаяПодсказка - 14 + ПроверитьПодключениеИЗакрытьРасширеннаяПодсказка + 13 Label true true @@ -181,7 +203,7 @@ Left - Form.Command.СохранитьДанныеАутентификацииИПродолжить + Form.Command.ПроверитьПодключениеИЗакрыть Auto true true @@ -190,17 +212,16 @@ Auto - Отмена - 3 + ФормаЗакрыть + 11 true true true - false - ОтменаРасширеннаяПодсказка - 15 + ФормаЗакрытьРасширеннаяПодсказка + 14 Label true true @@ -208,36 +229,8 @@ Left - Form.StandardCommand.Cancel + Form.StandardCommand.Close Normal - Auto - true - true - UserCmds - Auto - - - Справка - 2 - true - true - - true - - false - - СправкаРасширеннаяПодсказка - 16 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto true true UserCmds @@ -249,27 +242,35 @@ OnCreateAtServer ПриСозданииНаСервере - DontBlock + Abort + Cancel + Copy + Delete + Help + Ignore + No + OK + Reread + RestoreValues + Retry + SaveValues + Write + WriteAndClose + Yes + LockOwner true - true true Vertical true - true true UseIfNecessary auto true - Пароль - - <key>ru</key> - <value>Пароль</value> - + Запись 1 - String - + InformationRegisterRecordManager.НастройкиТранспортаОбмена true @@ -277,47 +278,14 @@ true +
            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> + <value>Адрес для восстановления пароля учетной записи</value> 2 @@ -331,23 +299,62 @@ true - - СохранитьДанныеАутентификацииИПродолжить + + НастройкаАвтоматическойСинхронизации <key>ru</key> - <value>Продолжить</value> + <value>Настройка автоматической синхронизации</value> + + 3 + + Boolean + + + true + + + true + + + + ПроверитьПодключениеИЗакрыть + + <key>ru</key> + <value>Проверить подключение и закрыть</value> 1 ru - Сохранить данные аутентификации и продолжить + Проверить подключение и закрыть true - СохранитьДанныеАутентификацииИПродолжитьВыполнить + ПроверитьПодключениеИЗакрыть + + + Auto + Auto + + + ЗабылиПароль + + <key>ru</key> + <value>Забыли пароль?</value> + + 2 + + ru + Забыли пароль + + + true + + + + ЗабылиПароль Auto @@ -357,4 +364,10 @@ + + + BeforeWrite + ПередЗаписью + +
            diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl new file mode 100644 index 000000000..bbdd79bb0 --- /dev/null +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/НастройкаПодключенияКСервису/Module.bsl @@ -0,0 +1,84 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + АдресДляВосстановленияПароляУчетнойЗаписи = Параметры.АдресДляВосстановленияПароляУчетнойЗаписи; + НастройкаАвтоматическойСинхронизации = Параметры.НастройкаАвтоматическойСинхронизации; + +КонецПроцедуры + +&НаКлиенте +Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) + + Если НастройкаАвтоматическойСинхронизации Тогда + + Оповестить("Запись_НастройкиТранспортаОбмена", + Новый Структура("НастройкаАвтоматическойСинхронизации, WSЗапомнитьПароль", НастройкаАвтоматическойСинхронизации, Запись.WSЗапомнитьПароль) + ); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ПроверитьПодключениеИЗакрыть(Команда) + + Отказ = Ложь; + + ПроверитьПодключениеКСервисуИСохранитьНастройки(Отказ); + + Если Отказ Тогда + + Предупреждение(НСтр("ru = 'Не удалось установить подключение к приложению в Интернете.'")); + + Иначе + + Если НастройкаАвтоматическойСинхронизации Тогда + + Оповестить("Запись_НастройкиТранспортаОбмена", + Новый Структура("НастройкаАвтоматическойСинхронизации, WSЗапомнитьПароль", НастройкаАвтоматическойСинхронизации, Запись.WSЗапомнитьПароль) + ); + + КонецЕсли; + + Закрыть(); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ЗабылиПароль(Команда) + + ПерейтиПоНавигационнойСсылке(АдресДляВосстановленияПароляУчетнойЗаписи); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ПроверитьПодключениеКСервисуИСохранитьНастройки(Отказ) + + ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); + ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Запись); + + СообщениеПользователю = ""; + Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Узел, ПараметрыПодключения, СообщениеПользователю) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,, "Запись.WSПароль",, Отказ); + Возврат; + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + + Записать(); + +КонецПроцедуры + + + diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form index 95a8649c3..20c6c9232 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Form.form @@ -21,7 +21,7 @@ ВидТранспортаСообщенийОбменаПоУмолчаниюРасширеннаяПодсказка - 109 + 113 Label true true @@ -78,7 +78,7 @@ COMВариантРаботыИнформационнойБазыРасширеннаяПодсказка - 113 + 117 Label true true @@ -138,7 +138,7 @@ COMКаталогИнформационнойБазыРасширеннаяПодсказка - 117 + 121 Label true true @@ -191,7 +191,7 @@ СтраницаВариантРаботыФайловыйРасширеннаяПодсказка - 116 + 120 Label true true @@ -225,7 +225,7 @@ COMИмяСервера1СПредприятияРасширеннаяПодсказка - 120 + 124 Label true true @@ -270,7 +270,7 @@ COMИмяИнформационнойБазыНаСервере1СПредприятияРасширеннаяПодсказка - 122 + 126 Label true true @@ -313,7 +313,7 @@ СтраницаВариантРаботыКлиентСерверныйРасширеннаяПодсказка - 119 + 123 Label true true @@ -342,7 +342,7 @@ ВариантыРаботыИнформационнойБазыРасширеннаяПодсказка - 115 + 119 Label true true @@ -373,7 +373,7 @@ COMАутентификацияОперационнойСистемыРасширеннаяПодсказка - 124 + 128 Label true true @@ -409,7 +409,7 @@ COMИмяПользователяРасширеннаяПодсказка - 127 + 131 Label true true @@ -450,7 +450,7 @@ COMПарольПользователяРасширеннаяПодсказка - 129 + 133 Label true true @@ -493,7 +493,7 @@ COMГруппаПользовательПарольРасширеннаяПодсказка - 126 + 130 Label true true @@ -523,7 +523,7 @@ ПроверитьПодключениеCOMРасширеннаяПодсказка - 132 + 136 Label true true @@ -551,7 +551,7 @@ ИсправитьОшибкиУстановкиВнешнегоСоединенияРасширеннаяПодсказка - 133 + 137 Label true true @@ -575,7 +575,7 @@ Группа2РасширеннаяПодсказка - 131 + 135 Label true true @@ -607,7 +607,7 @@ НастройкиТранспортаCOMРасширеннаяПодсказка - 112 + 116 Label true true @@ -637,7 +637,7 @@ WSURLВебСервисаРасширеннаяПодсказка - 135 + 139 Label true true @@ -665,20 +665,165 @@ Normal - - WSИмяПользователя - 92 + + Группа6 + 112 + + WSИмяПользователя + 92 + true + true + + true + + + Запись.WSИмяПользователя + + + WSИмяПользователяРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + + WSИмяПользователяКонтекстноеМеню + 93 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + Normal + + + + Группа5 + 111 + + WSПароль + 94 + true + true + + true + + + Запись.WSПароль + + + WSПарольРасширеннаяПодсказка + 145 + Label + true + true + + Left + + + + WSПарольКонтекстноеМеню + 95 + true + + InputField + Enter + true + Left + true + + 30 + true + true + false + true + true + true + true + true + Normal + + + + WSЗапомнитьПароль + 109 + true + true + + true + + + Запись.WSЗапомнитьПароль + + Right + + WSЗапомнитьПарольРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + + WSЗапомнитьПарольКонтекстноеМеню + 110 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + Группа5РасширеннаяПодсказка + 144 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + true true true - - Запись.WSИмяПользователя - - WSИмяПользователяРасширеннаяПодсказка - 137 + Группа6РасширеннаяПодсказка + 141 Label true true @@ -686,66 +831,14 @@ Left - - WSИмяПользователяКонтекстноеМеню - 93 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - WSПароль - 94 - true - true - - true - - - Запись.WSПароль - - - WSПарольРасширеннаяПодсказка - 139 - Label - true - true - - Left - - - - WSПарольКонтекстноеМеню - 95 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - true - Normal + UsualGroup + + Vertical + Auto + true + true + Auto + Auto @@ -758,7 +851,7 @@ ПроверитьПодключениеWSРасширеннаяПодсказка - 141 + 149 Label true true @@ -789,7 +882,7 @@ Right WSИспользоватьПередачуБольшогоОбъемаДанныхРасширеннаяПодсказка - 142 + 150 Label true true @@ -824,7 +917,7 @@ НастройкиТранспортаWSРасширеннаяПодсказка - 134 + 138 Label true true @@ -854,7 +947,7 @@ FILEКаталогОбменаИнформациейРасширеннаяПодсказка - 145 + 153 Label true true @@ -903,7 +996,7 @@ false ПроверитьПодключениеFILEРасширеннаяПодсказка - 147 + 155 Label true true @@ -937,7 +1030,7 @@ Right FILEСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 149 + 157 Label true true @@ -970,7 +1063,7 @@ ПарольАрхиваСообщенияОбмена1РасширеннаяПодсказка - 151 + 159 Label true true @@ -1008,7 +1101,7 @@ Группа1РасширеннаяПодсказка - 148 + 156 Label true true @@ -1042,7 +1135,7 @@ НастройкиТранспортаFILEРасширеннаяПодсказка - 144 + 152 Label true true @@ -1075,7 +1168,7 @@ FTPСоединениеПутьРасширеннаяПодсказка - 155 + 163 Label true true @@ -1116,7 +1209,7 @@ FTPСоединениеПортРасширеннаяПодсказка - 157 + 165 Label true true @@ -1163,7 +1256,7 @@ ГруппаСерверПортРасширеннаяПодсказка - 154 + 162 Label true true @@ -1196,7 +1289,7 @@ FTPСоединениеПользовательРасширеннаяПодсказка - 160 + 168 Label true true @@ -1237,7 +1330,7 @@ FTPСоединениеПарольРасширеннаяПодсказка - 162 + 170 Label true true @@ -1281,7 +1374,7 @@ ГруппаПользовательПарольРасширеннаяПодсказка - 159 + 167 Label true true @@ -1311,7 +1404,7 @@ FTPСоединениеМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 164 + 172 Label true true @@ -1354,7 +1447,7 @@ Right FTPСоединениеПассивноеСоединениеРасширеннаяПодсказка - 166 + 174 Label true true @@ -1385,7 +1478,7 @@ false ПроверитьПодключениеFTPРасширеннаяПодсказка - 168 + 176 Label true true @@ -1419,7 +1512,7 @@ Right FTPСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 170 + 178 Label true true @@ -1452,7 +1545,7 @@ ПарольАрхиваСообщенияОбменаРасширеннаяПодсказка - 172 + 180 Label true true @@ -1490,7 +1583,7 @@ Группа3РасширеннаяПодсказка - 169 + 177 Label true true @@ -1524,7 +1617,7 @@ НастройкиТранспортаFTPРасширеннаяПодсказка - 153 + 161 Label true true @@ -1554,7 +1647,7 @@ EMAILУчетнаяЗаписьРасширеннаяПодсказка - 175 + 183 Label true true @@ -1595,7 +1688,7 @@ EMAILМаксимальныйДопустимыйРазмерСообщенияРасширеннаяПодсказка - 177 + 185 Label true true @@ -1635,7 +1728,7 @@ false ПроверитьПодключениеEMAILРасширеннаяПодсказка - 179 + 187 Label true true @@ -1669,7 +1762,7 @@ Right EMAILСжиматьФайлИсходящегоСообщенияРасширеннаяПодсказка - 181 + 189 Label true true @@ -1702,7 +1795,7 @@ ПарольАрхиваСообщенияОбмена2РасширеннаяПодсказка - 183 + 191 Label true true @@ -1740,7 +1833,7 @@ Группа4РасширеннаяПодсказка - 180 + 188 Label true true @@ -1774,7 +1867,7 @@ НастройкиТранспортаEMAILРасширеннаяПодсказка - 174 + 182 Label true true @@ -1805,7 +1898,7 @@ None CombiВидТранспортаСообщенийОбменаРасширеннаяПодсказка - 186 + 194 Label true true @@ -1859,7 +1952,7 @@ WSСтрокаПодключенияКБазеКорреспондентуРасширеннаяПодсказка - 188 + 196 Label true true @@ -1898,7 +1991,7 @@ НастройкиТранспортаCombiРасширеннаяПодсказка - 185 + 193 Label true true @@ -1927,7 +2020,7 @@ СтраницыВидовТранспортаРасширеннаяПодсказка - 111 + 115 Label true true @@ -1957,7 +2050,7 @@ КоличествоЭлементовВТранзакцииЗагрузкиДанныхРасширеннаяПодсказка - 191 + 199 Label true true @@ -1998,7 +2091,7 @@ КоличествоЭлементовВТранзакцииВыгрузкиДанныхРасширеннаяПодсказка - 193 + 201 Label true true @@ -2026,91 +2119,6 @@ Normal - - ВыполнятьОбменВРежимеОтладки - 45 - true - true - - true - - - Запись.ВыполнятьОбменВРежимеОтладки - - Right - - ВыполнятьОбменВРежимеОтладкиРасширеннаяПодсказка - 195 - Label - true - true - - Left - - - - ВыполнятьОбменВРежимеОтладкиКонтекстноеМеню - 46 - true - - CheckBoxField - Enter - true - Left - true - - - - ИмяФайлаПротоколаОбмена - 32 - true - true - - true - - - Запись.ИмяФайлаПротоколаОбмена - - - ИмяФайлаПротоколаОбменаРасширеннаяПодсказка - 197 - Label - true - true - - Left - - - - ИмяФайлаПротоколаОбменаКонтекстноеМеню - 33 - true - - InputField - Enter - true - Left - true - - - StartChoice - ИмяФайлаПротоколаОбменаНачалоВыбора - - - Opening - ИмяФайлаПротоколаОбменаОткрытие - - true - true - true - true - true - true - true - true - Normal - - true true @@ -2126,7 +2134,7 @@ ДополнительныеНастройкиРасширеннаяПодсказка - 190 + 198 Label true true diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl index 915d1ec70..4611ad417 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Forms/ФормаЗаписи/Module.bsl @@ -67,23 +67,9 @@ &НаКлиенте Процедура COMКаталогИнформационнойБазыОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "COMКаталогИнформационнойБазы", СтандартнаяОбработка) - -КонецПроцедуры -&НаКлиенте -Процедура ИмяФайлаПротоколаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикВыбораФайла(Запись, "ИмяФайлаПротоколаОбмена", СтандартнаяОбработка, НСтр("ru = 'Текстовый документ(*.txt)|*.txt'"), Ложь); - -КонецПроцедуры +ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "COMКаталогИнформационнойБазы", СтандартнаяОбработка) -&НаКлиенте -Процедура ИмяФайлаПротоколаОбменаОткрытие(Элемент, СтандартнаяОбработка) - - ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "ИмяФайлаПротоколаОбмена", СтандартнаяОбработка) - КонецПроцедуры &НаКлиенте @@ -137,19 +123,7 @@ ВыполнитьПроверкуУстановкиПодключенияWS(Отказ); Если Отказ Тогда - - НСтрока = НСтр("ru = 'Ошибка установки подключения. - |Перейти в журнал регистрации?'" - ); - Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); - Если Ответ = КодВозвратаДиалога.Да Тогда - - Отбор = Новый Структура; - Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрацииУстановкаПодключенияКWebСервису); - ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); - - КонецЕсли; - + Предупреждение(НСтр("ru = 'Ошибка установки подключения.'")); Иначе Предупреждение(НСтр("ru = 'Подключение успешно установлено.'")); КонецЕсли; @@ -200,8 +174,6 @@ &НаСервере Процедура ПроверитьПодключениеНаСервере(Отказ, ВидТранспортаСтрокой) - ПроверитьДоступностьФайлаПротоколаОбмена(Отказ); - ОбменДаннымиСервер.ПроверитьПодключениеОбработкиТранспортаСообщенийОбмена(Отказ, Запись, Перечисления.ВидыТранспортаСообщенийОбмена[ВидТранспортаСтрокой]); КонецПроцедуры @@ -209,11 +181,9 @@ &НаСервере Процедура ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ) - ПроверитьДоступностьФайлаПротоколаОбмена(Отказ); - ОшибкаПодключенияКомпоненты = Ложь; - ОбменДаннымиСервер.ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, Запись, ОшибкаПодключенияКомпоненты); + ОбменДаннымиВызовСервера.ВыполнитьПроверкуУстановкиВнешнегоСоединения(Отказ, Запись, ОшибкаПодключенияКомпоненты); Если ОшибкаПодключенияКомпоненты И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда @@ -226,16 +196,12 @@ &НаСервере Процедура ВыполнитьПроверкуУстановкиПодключенияWS(Отказ) - ПроверитьДоступностьФайлаПротоколаОбмена(Отказ); - ПараметрыПодключения = ОбменДаннымиСервер.СтруктураПараметровWS(); - ЗаполнитьЗначенияСвойств(ПараметрыПодключения, Запись); - WSПрокси = ОбменДаннымиСервер.ПолучитьWSПрокси(ПараметрыПодключения); - - Если WSПрокси = Неопределено Тогда - Отказ = Истина; + СообщениеПользователю = ""; + Если Не ОбменДаннымиСервер.ЕстьПодключениеККорреспонденту(Запись.Узел, ПараметрыПодключения, СообщениеПользователю) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СообщениеПользователю,,,, Отказ); КонецЕсли; КонецПроцедуры @@ -294,71 +260,3 @@ Элементы.COMПарольПользователя.Доступность = Не Запись.COMАутентификацияОперационнойСистемы; КонецПроцедуры - -&НаСервере -Процедура ПроверитьДоступностьФайлаПротоколаОбмена(Отказ) - - СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(Запись.ИмяФайлаПротоколаОбмена); - ИмяФайлаПротокола = СтруктураИмениФайла.ИмяБезРасширения; - ИмяКаталогаПроверки = СтруктураИмениФайла.Путь; - КаталогПроверки = Новый Файл(ИмяКаталогаПроверки); - ИмяФайлаПроверки = "test.tmp"; - - Если Не ЗначениеЗаполнено(ИмяФайлаПротокола) Тогда - Возврат; - ИначеЕсли Не КаталогПроверки.Существует() Тогда - - СтрокаСообщения = НСтр("ru = 'Каталог файла протокола обмена ""%1"" не найден.'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки); - Отказ = Истина; - - ИначеЕсли Не СоздатьФайлПроверки(ИмяКаталогаПроверки, ИмяФайлаПроверки) Тогда - - СтрокаСообщения = НСтр("ru = 'Не удалось создать файл в папке протокола обмена: ""%1"".'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки); - Отказ = Истина; - - ИначеЕсли Не УдалитьФайлПроверки(ИмяКаталогаПроверки, ИмяФайлаПроверки) Тогда - - СтрокаСообщения = НСтр("ru = 'Не удалось удалить файл в папке протокола обмена: ""%1"".'"); - СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки); - Отказ = Истина; - - Иначе - Возврат; - КонецЕсли; - - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,,, Отказ); - ЗаписьЖурналаРегистрации(НСтр("ru = 'Транспорт сообщений обмена'"), УровеньЖурналаРегистрации.Ошибка,,, СтрокаСообщения); - -КонецПроцедуры - -&НаСервере -Функция СоздатьФайлПроверки(ИмяКаталогаПроверки, ИмяФайлаПроверки) - - ТекстовыйДокумент = Новый ТекстовыйДокумент; - ТекстовыйДокумент.ДобавитьСтроку(НСтр("ru = 'Временный файл проверки'")); - - Попытка - ТекстовыйДокумент.Записать(ИмяКаталогаПроверки + "/" + ИмяФайлаПроверки); - Исключение - Возврат Ложь; - КонецПопытки; - - Возврат Истина; - -КонецФункции - -&НаСервере -Функция УдалитьФайлПроверки(ИмяКаталогаПроверки, ИмяФайлаПроверки) - - Попытка - УдалитьФайлы(ИмяКаталогаПроверки, ИмяФайлаПроверки); - Исключение - Возврат Ложь; - КонецПопытки; - - Возврат Истина; - -КонецФункции - diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html index ea2e09686..31ea3761d 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/Help/ru.html @@ -1,7 +1,5 @@ - +

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

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

            • "Вид транспорта сообщений обмена по умолчанию" – поле для задания вида транспорта, который будет использоваться по умолчанию при выполнении автоматического и интерактивного обмена данными. -
            • "Пароль архива сообщения обмена" – поле для задания пароля для сжатия и распаковки архива сообщения обмена. Подразумевается, что пароль сжатия в базе источнике и пароль распаковки в базе приемнике должны быть одинаковыми для пары обменивающихся конфигураций. -
            • "Имя файла протокола обмена" – поле для задания файла протокола обмена. Если файл протокола обмена задан, то в процессе обмена данными, возникающие события и ошибки обмена будут записываться в этот файл. -
            • "Выполнять обмен в режиме отладки" – флаг для задания режима отладки обмена. Если этот флаг установлен, то процесс обмена данными не будет остановлен при возникновении какой-либо ошибки. Обмен завершится до конца с выводом отладочных сообщений в файл протокола обмена и журнал регистрации. Этот режим рекомендуется использовать при отладке правил обмена.
            \ 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 e26c193fb..9ccfcaba8 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -35,8 +37,6 @@ // общие настройки для всех видов транспорта СтруктураНастроек.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию"); СтруктураНастроек.Вставить("ПарольАрхиваСообщенияОбмена"); - СтруктураНастроек.Вставить("ИмяФайлаПротоколаОбмена"); - СтруктураНастроек.Вставить("ВыполнятьОбменВРежимеОтладки"); СтруктураНастроек.Вставить("КоличествоЭлементовВТранзакцииВыгрузкиДанных"); СтруктураНастроек.Вставить("КоличествоЭлементовВТранзакцииЗагрузкиДанных"); @@ -62,12 +62,19 @@ КонецФункции -Функция ПолучитьНастройкиТранспортаWS(Узел) Экспорт +Функция ПолучитьНастройкиТранспортаWS(Узел, Пароль = "") Экспорт СтруктураНастроек = ПолучитьСтруктуруНастроек("WS"); - Возврат ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); + Результат = ПолучитьДанныеРегистраПоСтруктуре(Узел, СтруктураНастроек); + Если Не Результат.WSЗапомнитьПароль Тогда + + Результат.WSПароль = Пароль; + + КонецЕсли; + + Возврат Результат; КонецФункции Функция ВидТранспортаСообщенийОбменаПоУмолчанию(УзелИнформационнойБазы) Экспорт @@ -377,3 +384,5 @@ Структура.Вставить(ИмяНастройки, Метаданные.РегистрыСведений.НастройкиТранспортаОбмена.Ресурсы[ИмяНастройки].Представление()); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl index ea7579553..dca6192c9 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/RecordSetModule.bsl @@ -1,6 +1,23 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ +Процедура ПередЗаписью(Отказ, Замещение) + + // Сбрасываем значение пароля, если не установлен признак хранения пароля в ИБ + Для Каждого СтрокаНабора Из ЭтотОбъект Цикл + + Если Не СтрокаНабора.WSЗапомнитьПароль Тогда + + СтрокаНабора.WSПароль = ""; + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + Процедура ПриЗаписи(Отказ, Замещение) // обновляем кэш платформы для зачитывания актуальных настроек транспорта @@ -8,3 +25,5 @@ ОбновитьПовторноИспользуемыеЗначения(); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo index 48675da21..cddcd7e91 100644 --- a/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo +++ b/SSL/src/InformationRegisters/НастройкиТранспортаОбмена/НастройкиТранспортаОбмена.mdo @@ -490,6 +490,21 @@ Use
            + + WSЗапомнитьПароль + + ru + Запомнить пароль + + + Boolean + + + + Use + Use + + WSИмяПользователя @@ -499,7 +514,7 @@ String - 50 + 165 @@ -560,47 +575,6 @@ Use - - ВыполнятьОбменВРежимеОтладки - - ru - Выполнять обмен в режиме отладки - - - Boolean - - - ru - Флаг для задания режима отладки обмена. Если этот флаг установлен, то процесс обмена данными не будет остановлен при возникновении какой-либо ошибки. - - - - Use - Use - - - - ИмяФайлаПротоколаОбмена - - ru - Имя файла протокола обмена - - - String - - 255 - - - - ru - Имя текстового файла протокола обмена. Если файл протокола обмена задан, то в процессе обмена данными, возникающие события и ошибки обмена будут записываться в этот файл. - - - - Use - Use - - КоличествоЭлементовВТранзакцииВыгрузкиДанных @@ -700,4 +674,13 @@ PersonalComputer MobileDevice
            + + НастройкаПодключенияКСервису + + ru + Настройка подключения к сервису + + PersonalComputer + MobileDevice + diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl index 4a4d9254e..ffbbba6fe 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Commands/Настройки/CommandModule.bsl @@ -2,42 +2,11 @@ &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) - Перем КлючЗаписи; - - Пользователь = Пользователи.ТекущийПользователь(); - - ДанныеКлючаЗаписи = Новый Структура("УчетнаяЗаписьЭлектроннойПочты",ПараметрКоманды); - - Если ЗаписьСуществует(ДанныеКлючаЗаписи) Тогда - МассивПараметровКонструктора = Новый Массив(); - МассивПараметровКонструктора.Добавить(ДанныеКлючаЗаписи); - - КлючЗаписи = Новый("РегистрСведенийКлючЗаписи.НастройкиУчетныхЗаписейЭлектроннойПочты", МассивПараметровКонструктора); - КонецЕсли; - ОткрытьФорму("РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.ФормаЗаписи", - Новый Структура("Ключ,ЗначенияЗаполнения", - КлючЗаписи,ДанныеКлючаЗаписи), + Новый Структура("УчетнаяЗаписьЭлектроннойПочты", ПараметрКоманды), ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры -&НаСервере -Функция ЗаписьСуществует(Параметры) - - Запрос = Новый Запрос; - Запрос.Текст = "ВЫБРАТЬ - | НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты - |ИЗ - | РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты - |ГДЕ - | НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты = &УчетнаяЗаписьЭлектроннойПочты"; - - Запрос.УстановитьПараметр("УчетнаяЗаписьЭлектроннойПочты",Параметры.УчетнаяЗаписьЭлектроннойПочты); - - Возврат НЕ Запрос.Выполнить().Пустой(); - -КонецФункции - diff --git a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl index 76bfd41fc..1f9fc7333 100644 --- a/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/НастройкиУчетныхЗаписейЭлектроннойПочты/Forms/ФормаЗаписи/Module.bsl @@ -10,21 +10,26 @@ Возврат; КонецЕсли; + УчетнаяЗаписьЭлектроннойПочты = Неопределено; + Если Параметры.Свойство("УчетнаяЗаписьЭлектроннойПочты", УчетнаяЗаписьЭлектроннойПочты) Тогда + МенеджерЗаписи = РегистрыСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.СоздатьМенеджерЗаписи(); + МенеджерЗаписи.УчетнаяЗаписьЭлектроннойПочты = УчетнаяЗаписьЭлектроннойПочты; + МенеджерЗаписи.Прочитать(); + ЗначениеВРеквизитФормы(МенеджерЗаписи, "Запись"); - Если Параметры.Ключ.УчетнаяЗаписьЭлектроннойПочты.Пустая() Тогда - - МетаданныеРесурсы = Метаданные.РегистрыСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.Ресурсы; - Запись.ВключатьПодписьДляНовыхСообщений = МетаданныеРесурсы.ВключатьПодписьДляНовыхСообщений.ЗначениеЗаполнения; - Запись.ФорматПодписиДляНовыхСообщений = МетаданныеРесурсы.ФорматПодписиДляНовыхСообщений.ЗначениеЗаполнения; - Запись.ВключатьПодписьПриОтветеПересылке = МетаданныеРесурсы.ВключатьПодписьПриОтветеПересылке.ЗначениеЗаполнения; - Запись.ФорматПодписиПриОтветеПересылке = МетаданныеРесурсы.ФорматПодписиПриОтветеПересылке.ЗначениеЗаполнения; - - Иначе - - Если Запись.ПерсональнаяУчетнаяЗапись Тогда + Запись.УчетнаяЗаписьЭлектроннойПочты = УчетнаяЗаписьЭлектроннойПочты; + Если УчетнаяЗаписьЭлектроннойПочты.Пустая() Тогда + + МетаданныеРесурсы = Метаданные.РегистрыСведений.НастройкиУчетныхЗаписейЭлектроннойПочты.Ресурсы; + Запись.ВключатьПодписьДляНовыхСообщений = МетаданныеРесурсы.ВключатьПодписьДляНовыхСообщений.ЗначениеЗаполнения; + Запись.ФорматПодписиДляНовыхСообщений = МетаданныеРесурсы.ФорматПодписиДляНовыхСообщений.ЗначениеЗаполнения; + Запись.ВключатьПодписьПриОтветеПересылке = МетаданныеРесурсы.ВключатьПодписьПриОтветеПересылке.ЗначениеЗаполнения; + Запись.ФорматПодписиПриОтветеПересылке = МетаданныеРесурсы.ФорматПодписиПриОтветеПересылке.ЗначениеЗаполнения; + + ИначеЕсли Запись.ПерсональнаяУчетнаяЗапись Тогда ПользовательУчетнойЗаписи = Запись.ОтветственныйЗаВедениеПапок; КонецЕсли; - + КонецЕсли; КонецПроцедуры diff --git a/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl b/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl index 3cd6dc81b..505b66a0e 100644 --- a/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/НеразделенныеПользователи/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + // Возвращает список неразделенных администраторов // // Возвращаемое значение: @@ -35,4 +37,5 @@ СписокАдминистраторов.СортироватьПоПредставлению(); Возврат СписокАдминистраторов; -КонецФункции \ No newline at end of file +КонецФункции +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form b/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form index 3554839e3..41dd1a0cc 100644 --- a/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form +++ b/SSL/src/InformationRegisters/ОбластиДанных/Forms/ФормаСписка/Form.form @@ -27,7 +27,7 @@ true ОбластьДанныхРасширеннаяПодсказка - 26 + 28 Label true true @@ -64,7 +64,7 @@ true ПредставлениеРасширеннаяПодсказка - 28 + 30 Label true true @@ -101,7 +101,7 @@ true СтатусРасширеннаяПодсказка - 30 + 32 Label true true @@ -138,7 +138,7 @@ true ПовторРасширеннаяПодсказка - 32 + 34 Label true true @@ -175,7 +175,7 @@ true ЧасовойПоясРасширеннаяПодсказка - 34 + 36 Label true true @@ -198,6 +198,42 @@ true + + Префикс + 16 + true + true + + true + + + Список.Префикс + + + ПрефиксРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ПрефиксКонтекстноеМеню + 17 + true + + LabelField + Enter + true + Left + true + + true + true + + ИдентификаторВыгрузки 14 @@ -212,7 +248,7 @@ true ИдентификаторВыгрузкиРасширеннаяПодсказка - 36 + 40 Label true true @@ -243,10 +279,10 @@ СписокСтрокаПоиска - 17 + 19 СписокСтрокаПоискаРасширеннаяПодсказка - 19 + 21 Label true true @@ -256,7 +292,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 18 + 20 true Список @@ -266,10 +302,10 @@ СписокСостояниеПросмотра - 20 + 22 СписокСостояниеПросмотраРасширеннаяПодсказка - 22 + 24 Label true true @@ -279,7 +315,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 21 + 23 true ViewStatusAddition @@ -290,10 +326,10 @@ СписокУправлениеПоиском - 23 + 25 СписокУправлениеПоискомРасширеннаяПодсказка - 25 + 27 Label true true @@ -303,7 +339,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 24 + 26 true SearchControlAddition @@ -314,7 +350,7 @@ СписокРасширеннаяПодсказка - 16 + 18 Label true true diff --git a/SSL/src/InformationRegisters/ОбластиДанных/ОбластиДанных.mdo b/SSL/src/InformationRegisters/ОбластиДанных/ОбластиДанных.mdo index 101716eeb..1d53a75b0 100644 --- a/SSL/src/InformationRegisters/ОбластиДанных/ОбластиДанных.mdo +++ b/SSL/src/InformationRegisters/ОбластиДанных/ОбластиДанных.mdo @@ -82,6 +82,24 @@ Use + + Префикс + + ru + Префикс + + + String + + 2 + + + + + Use + Use + + Повтор diff --git a/SSL/src/InformationRegisters/ОбластиКРезервномуКопированию/ОбластиКРезервномуКопированию.mdo b/SSL/src/InformationRegisters/ОбластиКРезервномуКопированию/ОбластиКРезервномуКопированию.mdo new file mode 100644 index 000000000..9ce917ef4 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбластиКРезервномуКопированию/ОбластиКРезервномуКопированию.mdo @@ -0,0 +1,73 @@ + + + + + + + + + + + + ОбластиКРезервномуКопированию + + ru + Области к резервному копированию + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + true + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ОбластиПерсональныхДанных/ОбластиПерсональныхДанных.mdo b/SSL/src/InformationRegisters/ОбластиПерсональныхДанных/ОбластиПерсональныхДанных.mdo new file mode 100644 index 000000000..535fbcd2a --- /dev/null +++ b/SSL/src/InformationRegisters/ОбластиПерсональныхДанных/ОбластиПерсональныхДанных.mdo @@ -0,0 +1,93 @@ + + + + + + + + + + + + ОбластиПерсональныхДанных + + ru + Области персональных данных + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ИспользованиеСобытийЖурналаРегистрации + + ru + Использование событий журнала регистрации + + + Boolean + + + ru + Для контроля области данных используются события журнала регистрации + + + + Use + + + + ИмяОбласти + + ru + Имя области + + + String + + 256 + + + + ru + Идентификатор области персональных данных + + + + Use + + true + + diff --git a/SSL/src/InformationRegisters/ОбластиТребующиеОбработкиПоставляемыхДанных/ОбластиТребующиеОбработкиПоставляемыхДанных.mdo b/SSL/src/InformationRegisters/ОбластиТребующиеОбработкиПоставляемыхДанных/ОбластиТребующиеОбработкиПоставляемыхДанных.mdo new file mode 100644 index 000000000..f9b0a8971 --- /dev/null +++ b/SSL/src/InformationRegisters/ОбластиТребующиеОбработкиПоставляемыхДанных/ОбластиТребующиеОбработкиПоставляемыхДанных.mdo @@ -0,0 +1,106 @@ + + + + + + + + + + + + ОбластиТребующиеОбработкиПоставляемыхДанных + + ru + Области требующие обработки поставляемых данных + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + ИдентификаторФайла + + ru + Идентификатор файла + + + UUID + + + + Use + + true + + + КодОбработчика + + ru + Код обработчика + + + String + + 150 + + + + + Use + Use + + true + + + ОбластьДанных + + ru + Область данных + + + Number + + 7 + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl index dbba83c82..c6a0db338 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -155,3 +157,34 @@ Возврат Результат; КонецФункции + +Функция ПользовательДляСинхронизацииДанных(Знач УзелИнформационнойБазы) Экспорт + + ТекстЗапроса = + "ВЫБРАТЬ + | ОбщиеНастройкиУзловИнформационныхБаз.ПользовательДляСинхронизацииДанных КАК ПользовательДляСинхронизацииДанных + |ИЗ + | РегистрСведений.ОбщиеНастройкиУзловИнформационныхБаз КАК ОбщиеНастройкиУзловИнформационныхБаз + |ГДЕ + | ОбщиеНастройкиУзловИнформационныхБаз.УзелИнформационнойБазы = &УзелИнформационнойБазы"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы); + Запрос.Текст = ТекстЗапроса; + + РезультатЗапроса = Запрос.Выполнить(); + + Если Не РезультатЗапроса.Пустой() Тогда + + Выборка = РезультатЗапроса.Выбрать(); + + Выборка.Следующий(); + + Возврат ?(ЗначениеЗаполнено(Выборка.ПользовательДляСинхронизацииДанных), Выборка.ПользовательДляСинхронизацииДанных, Неопределено); + + КонецЕсли; + + Возврат Неопределено; +КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo index 6e9d9182e..ef740d61c 100644 --- a/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo +++ b/SSL/src/InformationRegisters/ОбщиеНастройкиУзловИнформационныхБаз/ОбщиеНастройкиУзловИнформационныхБаз.mdo @@ -87,6 +87,22 @@ Use + + ПользовательДляСинхронизацииДанных + + ru + Пользователь для синхронизации данных + + Пользователь от имени которого выполняется синхронизация данных с заданным узлом + + CatalogRef.Пользователи + + + + Use + Use + + НомерОтправленного diff --git a/SSL/src/InformationRegisters/ОчередьЗаданий/ОчередьЗаданий.mdo b/SSL/src/InformationRegisters/ОчередьЗаданий/ОчередьЗаданий.mdo index a741bde54..59633543d 100644 --- a/SSL/src/InformationRegisters/ОчередьЗаданий/ОчередьЗаданий.mdo +++ b/SSL/src/InformationRegisters/ОчередьЗаданий/ОчередьЗаданий.mdo @@ -236,7 +236,6 @@ Number 7 - true diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl index 0a1e1348b..12344557d 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -27,3 +29,5 @@ Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Получатель"); КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl index bed1ade69..eaa3d032f 100644 --- a/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПодпискиПолучателей/RecordSetModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -25,3 +27,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form index 889d24e37..24c8d6358 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Form.form @@ -57,7 +57,7 @@ ru - Для редактирования + Для просмотра и редактирования 1 diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html index 805c224cb..4768395a3 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/ВыбораРежимаОткрытияМакета/Help/ru.html @@ -1,4 +1,4 @@ - +

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

            • клавишу Enter 
            • двойной щелчок левой кнопкой мыши diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form index 3d4ef218c..ec4978eb9 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/МакетыПечатныхФорм/Form.form @@ -41,7 +41,7 @@ СписокМакетовПредставлениеРасширеннаяПодсказка - 67 + 69 Label true true @@ -89,7 +89,7 @@ СписокМакетовЕстьПользовательскийМакетРасширеннаяПодсказка - 70 + 72 Label true true @@ -128,7 +128,7 @@ СписокМакетовИспользованиеСтрокаРасширеннаяПодсказка - 72 + 74 Label true true @@ -171,7 +171,7 @@ ГруппаИспользованиеМакетаРасширеннаяПодсказка - 69 + 71 Label true true @@ -199,7 +199,7 @@ false СписокМакетовОткрытьДляПросмотраРасширеннаяПодсказка - 47 + 48 Label true true @@ -229,7 +229,7 @@ false СписокМакетовРедактироватьРасширеннаяПодсказка - 49 + 50 Label true true @@ -256,7 +256,7 @@ false СписокМакетовЗавершитьРедактированиеРасширеннаяПодсказка - 50 + 51 Label true true @@ -283,7 +283,7 @@ false СписокМакетовОтменитьРедактированиеРасширеннаяПодсказка - 51 + 52 Label true true @@ -306,7 +306,7 @@ ГруппаРасширеннаяПодсказка - 48 + 49 Label true true @@ -327,7 +327,7 @@ false СписокМакетовИспользоватьПользовательскийМакетРасширеннаяПодсказка - 52 + 53 Label true true @@ -354,7 +354,7 @@ false СписокМакетовИспользоватьПоставляемыйМакетРасширеннаяПодсказка - 53 + 54 Label true true @@ -384,7 +384,7 @@ false СписокМакетовУдалитьИЗИБРасширеннаяПодсказка - 55 + 56 Label true true @@ -415,7 +415,7 @@ ГруппаДополнительноРасширеннаяПодсказка - 54 + 55 Label true true @@ -436,7 +436,7 @@ false НастройкиРежимаОткрытияМакетаРасширеннаяПодсказка - 56 + 57 Label true true @@ -452,6 +452,32 @@ UserCmds Auto + + СписокМакетовСправка + 45 + true + true + + true + + + СписокМакетовСправкаРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + Left true @@ -465,10 +491,10 @@ СписокМакетовСтрокаПоиска - 58 + 60 СписокМакетовСтрокаПоискаРасширеннаяПодсказка - 60 + 62 Label true true @@ -478,7 +504,7 @@ СписокМакетовСтрокаПоискаКонтекстноеМеню - 59 + 61 true СписокМакетов @@ -488,10 +514,10 @@ СписокМакетовСостояниеПросмотра - 61 + 63 СписокМакетовСостояниеПросмотраРасширеннаяПодсказка - 63 + 65 Label true true @@ -501,7 +527,7 @@ СписокМакетовСостояниеПросмотраКонтекстноеМеню - 62 + 64 true ViewStatusAddition @@ -512,10 +538,10 @@ СписокМакетовУправлениеПоиском - 64 + 66 СписокМакетовУправлениеПоискомРасширеннаяПодсказка - 66 + 68 Label true true @@ -525,7 +551,7 @@ СписокМакетовУправлениеПоискомКонтекстноеМеню - 65 + 67 true SearchControlAddition @@ -536,7 +562,7 @@ СписокМакетовРасширеннаяПодсказка - 57 + 59 Label true true @@ -558,7 +584,7 @@ false КонтекстноеМенюСписокМакетовИспользоватьПользовательскийМакетРасширеннаяПодсказка - 45 + 46 Label true true @@ -585,7 +611,7 @@ false КонтекстноеМенюСписокМакетовИспользоватьПоставляемыйМакетРасширеннаяПодсказка - 46 + 47 Label true true @@ -959,7 +985,7 @@ 1 ru - Редактировать + Открыть макет для редактирования true diff --git a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl index f0e21d716..0fbef308b 100644 --- a/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl +++ b/SSL/src/InformationRegisters/ПользовательскиеМакетыПечати/Forms/НастройкаКаталогаФайловПечати/Module.bsl @@ -35,7 +35,7 @@ &НаКлиенте Процедура ОК(Команда) - УправлениеПечатью.СохранитьЛокальныйКаталогФайловПечати(КаталогДляСохраненияДанныхПечати); + УправлениеПечатьюВызовСервера.СохранитьЛокальныйКаталогФайловПечати(КаталогДляСохраненияДанныхПечати); Закрыть(КаталогДляСохраненияДанныхПечати); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПоставляемыеДанныеТребующиеОбработки/ПоставляемыеДанныеТребующиеОбработки.mdo b/SSL/src/InformationRegisters/ПоставляемыеДанныеТребующиеОбработки/ПоставляемыеДанныеТребующиеОбработки.mdo new file mode 100644 index 000000000..a67abc256 --- /dev/null +++ b/SSL/src/InformationRegisters/ПоставляемыеДанныеТребующиеОбработки/ПоставляемыеДанныеТребующиеОбработки.mdo @@ -0,0 +1,105 @@ + + + + + + + + + + + + ПоставляемыеДанныеТребующиеОбработки + + ru + Поставляемые данные требующие обработки + + true + InDialog + + Use + Active + + Use + + + + + Use + LineNumber + + Use + + + + + Use + Recorder + + Use + + + + + Use + Period + + ShowError + Use + + + + Managed + + КоличествоПопыток + + ru + Количество попыток + + + Number + + 10 + + + + + Use + Use + + + + ИдентификаторФайла + + ru + Идентификатор файла + + + UUID + + + + Use + + true + + + КодОбработчика + + ru + Код обработчика + + + String + + 150 + + + + + Use + Use + + true + + diff --git a/SSL/src/InformationRegisters/ПраваПоЗначениямДоступа/ПраваПоЗначениямДоступа.mdo b/SSL/src/InformationRegisters/ПраваПоЗначениямДоступа/ПраваПоЗначениямДоступа.mdo index 11021ddb9..668776f79 100644 --- a/SSL/src/InformationRegisters/ПраваПоЗначениямДоступа/ПраваПоЗначениямДоступа.mdo +++ b/SSL/src/InformationRegisters/ПраваПоЗначениямДоступа/ПраваПоЗначениямДоступа.mdo @@ -283,9 +283,7 @@ true Use true - - Catalog.Пользователи.EmptyRef - + true true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form new file mode 100644 index 000000000..485f444b7 --- /dev/null +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Form.form @@ -0,0 +1,1390 @@ + + + + <key>ru</key> + <value>Правила конвертации данных</value> + + + ГруппаПланаОбмена + 26 + + ИмяПланаОбмена + 1 + true + true + + true + + + Запись.ИмяПланаОбмена + + + OnChange + ИмяПланаОбменаПриИзменении + + + ИмяПланаОбменаРасширеннаяПодсказка + 55 + Label + true + true + + Left + + + + ИмяПланаОбменаКонтекстноеМеню + 2 + true + + InputField + Enter + true + Left + true + + true + true + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа плана обмена</value> + + + ru + Группа плана обмена + + + ГруппаПланаОбменаРасширеннаяПодсказка + 54 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОсновная + 25 + + ИсточникПравил + 29 + true + true + + true + + + ИсточникПравил + + None + + OnChange + ИсточникПравилПриИзменении + + + ИсточникПравилРасширеннаяПодсказка + 58 + Label + true + true + + Left + + + + ИсточникПравилКонтекстноеМеню + 30 + true + + RadioButtonField + Enter + true + Left + true + + 1 + + + ru + Типовые правила из конфигурации + + + 0 + + + + + ru + Правила из файла + + + 1 + + + + + ru + Режим отладки + + + 2 + + + Vertical + + + + ГруппаИсточникиПравил + 15 + + ИсточникМакетКонфигурации + 16 + + ИмяМакетаПравил + 7 + true + true + + true + + + Запись.ИмяМакетаПравил + + None + + ИмяМакетаПравилРасширеннаяПодсказка + 62 + Label + true + true + + Left + + + + ИмяМакетаПравилКонтекстноеМеню + 8 + true + + InputField + Enter + true + Left + true + + true + true + true + false + true + true + true + true + Normal + + + + ГруппаДействияСТиповымиПравилами + 27 + + ЗагрузитьТиповыеПравила + 19 + true + true + + true + + true + + ЗагрузитьТиповыеПравилаРасширеннаяПодсказка + 65 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьПравила + Normal + Auto + true + true + UserCmds + Auto + + + ВыгрузитьТиповыеПравила + 20 + true + true + + true + + true + + ВыгрузитьТиповыеПравилаРасширеннаяПодсказка + 66 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыгрузитьПравила + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа действия с типовыми правилами</value> + + + ru + Группа действия с типовыми правилами + + + ГруппаДействияСТиповымиПравиламиРасширеннаяПодсказка + 64 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Источник макет конфигурации</value> + + + ru + Источник макет конфигурации + + + ИсточникМакетКонфигурацииРасширеннаяПодсказка + 61 + Label + true + true + + Left + + + Page + + auto + + + + ИсточникФайл + 17 + + ИмяФайлаПравил + 5 + true + true + + true + + + Запись.ИмяФайлаПравил + + None + + ИмяФайлаПравилРасширеннаяПодсказка + 68 + Label + true + true + + Left + + + + ИмяФайлаПравилКонтекстноеМеню + 6 + true + + InputField + true + Enter + true + Left + true + + true + true + true + false + false + true + true + true + Normal + + + + ГруппаДействияСПравиламиИзФайла + 28 + + ЗагрузитьПравилаИзФайла + 21 + true + true + + true + + true + + ЗагрузитьПравилаИзФайлаРасширеннаяПодсказка + 71 + Label + true + true + + Left + + + UsualButton + Form.Command.ЗагрузитьПравила + Normal + Auto + true + true + UserCmds + Auto + + + ВыгрузитьПравилаВФайл + 22 + true + true + + true + + true + + ВыгрузитьПравилаВФайлРасширеннаяПодсказка + 72 + Label + true + true + + Left + + + UsualButton + Form.Command.ВыгрузитьПравила + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа действия с правилами из файла</value> + + + ru + Группа действия с правилами из файла + + + ГруппаДействияСПравиламиИзФайлаРасширеннаяПодсказка + 70 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Источник файл</value> + + + ru + Источник файл + + + ИсточникФайлРасширеннаяПодсказка + 67 + Label + true + true + + Left + + + Page + + auto + + + true + true + + true + + + <key>ru</key> + <value>Группа источники правил</value> + + + ru + Группа источники правил + + + ГруппаИсточникиПравилРасширеннаяПодсказка + 60 + Label + true + true + + Left + + + Pages + + Auto + + + + ГруппаОтладки + 31 + + ГруппаОтладкиВыгрузки + 38 + + ВключитьОтладкуВыгрузки + 32 + + <key>ru</key> + <value>Подключить внешнюю обработку для отладки выгрузки</value> + + true + true + + true + + + Запись.РежимОтладкиВыгрузки + + Right + + OnChange + ВключитьОтладкуВыгрузкиПриИзменении + + + ВключитьОтладкуВыгрузкиРасширеннаяПодсказка + 75 + Label + true + true + + Left + + + + ВключитьОтладкуВыгрузкиКонтекстноеМеню + 33 + true + + CheckBoxField + Enter + true + Left + true + + + + ВнешняяОбработкаДляОтладкиВыгрузки + 40 + true + false + + true + + + Запись.ИмяФайлаОбработкиДляОтладкиВыгрузки + + None + + ВнешняяОбработкаДляОтладкиВыгрузкиРасширеннаяПодсказка + 77 + Label + true + true + + Left + + + + ВнешняяОбработкаДляОтладкиВыгрузкиКонтекстноеМеню + 41 + true + + InputField + Enter + true + Left + true + + + StartChoice + ВнешняяОбработкаДляОтладкиВыгрузкиНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа отладки выгрузки</value> + + + ru + Группа отладки выгрузки + + + ГруппаОтладкиВыгрузкиРасширеннаяПодсказка + 74 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаОтладкиЗагрузки + 39 + + ВключитьОтладкуЗагрузки + 34 + + <key>ru</key> + <value>Подключить внешнюю обработку для отладки загрузки</value> + + true + true + + true + + + Запись.РежимОтладкиЗагрузки + + Right + + OnChange + ВключитьОтладкуЗагрузкиПриИзменении + + + ВключитьОтладкуЗагрузкиРасширеннаяПодсказка + 80 + Label + true + true + + Left + + + + ВключитьОтладкуЗагрузкиКонтекстноеМеню + 35 + true + + CheckBoxField + Enter + true + Left + true + + + + ВнешняяОбработкаДляОтладкиЗагрузки + 36 + true + false + + true + + + Запись.ИмяФайлаОбработкиДляОтладкиЗагрузки + + None + + ВнешняяОбработкаДляОтладкиЗагрузкиРасширеннаяПодсказка + 82 + Label + true + true + + Left + + + + ВнешняяОбработкаДляОтладкиЗагрузкиКонтекстноеМеню + 37 + true + + InputField + Enter + true + Left + true + + + StartChoice + ВнешняяОбработкаДляОтладкиЗагрузкиНачалоВыбора + + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа отладки загрузки</value> + + + ru + Группа отладки загрузки + + + ГруппаОтладкиЗагрузкиРасширеннаяПодсказка + 79 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаПротокол + 42 + + ВключитьПротоколированиеОбменаДанными + 43 + true + true + + true + + + Запись.РежимПротоколированияОбменаДанными + + Right + + OnChange + ВключитьПротоколированиеОбменаДаннымиПриИзменении + + + ВключитьПротоколированиеОбменаДаннымиРасширеннаяПодсказка + 85 + Label + true + true + + Left + + + + ВключитьПротоколированиеОбменаДаннымиКонтекстноеМеню + 44 + true + + CheckBoxField + Enter + true + Left + true + + + + ФайлПротоколаОбмена + 45 + true + false + + true + + + Запись.ИмяФайлаПротоколаОбмена + + None + + ФайлПротоколаОбменаРасширеннаяПодсказка + 87 + Label + true + true + + Left + + + + ФайлПротоколаОбменаКонтекстноеМеню + 46 + true + + InputField + Enter + true + Left + true + + + StartChoice + ФайлПротоколаОбменаНачалоВыбора + + + Opening + ФайлПротоколаОбменаОткрытие + + true + true + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Группа протокол</value> + + + ru + Группа протокол + + + ГруппаПротоколРасширеннаяПодсказка + 84 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + НеОстанавливатьПоОшибке + 47 + + <key>ru</key> + <value>Не останавливать выполнение обмена данными при возникновении ошибки</value> + + true + true + + true + + + Запись.НеОстанавливатьПоОшибке + + Right + + НеОстанавливатьПоОшибкеРасширеннаяПодсказка + 89 + Label + true + true + + Left + + + + НеОстанавливатьПоОшибкеКонтекстноеМеню + 48 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Настройка режима отладки</value> + + + ru + Группа отладки + + + ГруппаОтладкиРасширеннаяПодсказка + 73 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Источник правил</value> + + + ru + Группа основная + + + ГруппаОсновнаяРасширеннаяПодсказка + 57 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + StrongSeparation + true + true + auto + Auto + Auto + + + + ИнформацияОПравилах + 11 + true + true + + true + + + ИнформацияОПравилах + + + ИнформацияОПравилахРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + + ИнформацияОПравилахКонтекстноеМеню + 12 + true + + InputField + true + Enter + true + Left + true + + true + 6 + true + true + true + true + true + true + Normal + + + + ГруппаДополнительно + 18 + + ИспользоватьФильтрВыборочнойРегистрацииОбъектов + 13 + true + true + + true + + + Запись.ИспользоватьФильтрВыборочнойРегистрацииОбъектов + + Right + + ИспользоватьФильтрВыборочнойРегистрацииОбъектовРасширеннаяПодсказка + 94 + Label + true + true + + Left + + + + ИспользоватьФильтрВыборочнойРегистрацииОбъектовКонтекстноеМеню + 14 + true + + CheckBoxField + Enter + true + Left + true + + + true + true + + true + + + <key>ru</key> + <value>Дополнительно</value> + + + ru + Группа дополнительно + + true + + ГруппаДополнительноРасширеннаяПодсказка + 93 + Label + true + true + + Left + + + UsualGroup + + Auto + WeakSeparation + true + true + LeftWidest + auto + Auto + Auto + + + + ФормаКоманднаяПанель + -1 + + ГруппаКнопок + 24 + true + true + + true + + + <key>ru</key> + <value>Группа кнопок</value> + + + ru + Группа кнопок + + + ГруппаКнопокРасширеннаяПодсказка + 51 + Label + true + true + + Left + + + + + + ФормаПеречитать + 50 + true + true + + true + + + ФормаПеречитатьРасширеннаяПодсказка + 52 + Label + true + true + + Left + + + Form.StandardCommand.Reread + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + + ФормаИнформацияОФайлеПравил + 49 + true + true + + true + + + ФормаИнформацияОФайлеПравилРасширеннаяПодсказка + 53 + Label + true + true + + Left + + + Form.Command.ИнформацияОФайлеПравил + Normal + Auto + true + true + UserCmds + Auto + InAdditionalSubmenu + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + Copy + LockOwner + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Запись + 1 + + InformationRegisterRecordManager.ПравилаДляОбменаДанными + + + true + + + true + +
              true
              + true +
              + + ИнформацияОПравилах + + <key>ru</key> + <value>Информация о правилах</value> + + 2 + + String + + + + true + + + true + + + + ИсточникПравил + + <key>ru</key> + <value>Источник правил</value> + + 3 + + Number + + 1 + true + + + + true + + + true + + + + СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными + + <key>ru</key> + <value>Событие журнала регистрации загрузка правил для обмена данными</value> + + 4 + + String + + + + true + + + true + + + + ЗагрузитьПравила + + <key>ru</key> + <value>Загрузить правила</value> + + 1 + + ru + Загрузить правила + + + true + + + StdPicture.OpenFile + + + + ЗагрузитьПравила + + + TextPicture + Auto + Auto + + + ВыгрузитьПравила + + <key>ru</key> + <value>Выгрузить правила</value> + + 2 + + ru + Выгрузить правила в файл + + + true + + + StdPicture.SaveFile + + + + ВыгрузитьПравила + + + TextPicture + Auto + Auto + + + ИнформацияОФайлеПравил + + <key>ru</key> + <value>Получить информацию о правилах из файла...</value> + + 3 + + ru + Информация о файле правил + + + true + + + + ИнформацияОФайлеПравил + + + TextPicture + Auto + Auto + + + + + + + + OnWriteAtServer + ПриЗаписиНаСервере + + +
              diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html new file mode 100644 index 000000000..769e87c6d --- /dev/null +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Help/ru.html @@ -0,0 +1,13 @@ + +

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

              +

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

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

              +

              Если выбран Режим отладки, то становятся доступными следующие настройки:

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

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

              +

              См. также

              +
                \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl new file mode 100644 index 000000000..0af3a9579 --- /dev/null +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаКонвертацииОбъектов/Module.bsl @@ -0,0 +1,428 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + ОбновитьСписокВыбораПлановОбмена(); + + ОбновитьСписокВыбораМакетаПравил(); + + ОбновитьИнформациюОПравилах(); + + ОбновитьИсточникПравил(); + + УстановитьВидимость(); + + СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + +КонецПроцедуры + +&НаСервере +Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) + + Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + // кеш открытых сеансов для МРО стал неактуальным + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); + + ОбновитьПовторноИспользуемыеЗначения(); + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ИмяПланаОбменаПриИзменении(Элемент) + + Запись.ИмяМакетаПравил = ""; + + // вызов сервера + ОбновитьСписокВыбораМакетаПравил(); + +КонецПроцедуры + +&НаКлиенте +Процедура ИсточникПравилПриИзменении(Элемент) + + // вызов сервера + УстановитьВидимость(); + + Если Не ПустаяСтрока(Запись.ИмяФайлаПравил) Тогда + Запись.РежимОтладки = (ИсточникПравил = 2); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьОтладкуВыгрузкиПриИзменении(Элемент) + + Элементы.ВнешняяОбработкаДляОтладкиВыгрузки.Доступность = Запись.РежимОтладкиВыгрузки; + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешняяОбработкаДляОтладкиВыгрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайла(Запись, "ИмяФайлаОбработкиДляОтладкиВыгрузки", СтандартнаяОбработка, НСтр("ru = 'Внешняя обработка(*.epf)|*.epf'"), Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ВнешняяОбработкаДляОтладкиЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайла(Запись, "ИмяФайлаОбработкиДляОтладкиЗагрузки", СтандартнаяОбработка, НСтр("ru = 'Внешняя обработка(*.epf)|*.epf'"), Истина); + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьОтладкуЗагрузкиПриИзменении(Элемент) + + Элементы.ВнешняяОбработкаДляОтладкиЗагрузки.Доступность = Запись.РежимОтладкиЗагрузки; + +КонецПроцедуры + +&НаКлиенте +Процедура ВключитьПротоколированиеОбменаДаннымиПриИзменении(Элемент) + + Элементы.ФайлПротоколаОбмена.Доступность = Запись.РежимПротоколированияОбменаДанными; + +КонецПроцедуры + +&НаКлиенте +Процедура ФайлПротоколаОбменаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикВыбораФайла(Запись, "ИмяФайлаПротоколаОбмена", СтандартнаяОбработка, НСтр("ru = 'Текстовый документ(*.txt)|*.txt'"), Ложь); + +КонецПроцедуры + +&НаКлиенте +Процедура ФайлПротоколаОбменаОткрытие(Элемент, СтандартнаяОбработка) + + ОбменДаннымиКлиент.ОбработчикОткрытияФайлаИлиКаталога(Запись, "ИмяФайлаПротоколаОбмена", СтандартнаяОбработка); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура ЗагрузитьПравила(Команда) + + Перем АдресВременногоХранилища; + Перем ВыбранноеИмяФайла; + + Отказ = Ложь; + + ИмяФайлаПравил = ""; + ЭтоАрхив = Ложь; + + Если ИсточникПравил = 1 Или ИсточникПравил = 2 Тогда // из файла + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами()Тогда + + // Предложение пользователю выбрать файл правил для загрузки + Режим = РежимДиалогаВыбораФайла.Открытие; + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); + РасширениеФайла = НРег(Прав(Запись.ИмяФайлаПравил, 4)); + ИмяФайлаБезРасширения = СтрЗаменить(Запись.ИмяФайлаПравил, РасширениеФайла, ""); + ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайлаБезРасширения; + Фильтр = НСтр("ru = 'Файлы правил'") + "(*.xml)|*.xml|" + + НСтр("ru = 'Архивы ZIP'") + "(*.zip)|*.zip"; + ДиалогОткрытияФайла.Фильтр = Фильтр; + Если НРег(Прав(Запись.ИмяФайлаПравил, 4)) = ".zip" Тогда + ДиалогОткрытияФайла.ИндексФильтра = 1; + Иначе + ДиалогОткрытияФайла.ИндексФильтра = 0; + КонецЕсли; + ДиалогОткрытияФайла.МножественныйВыбор = Ложь; + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Укажите из какого файла загрузить правила'"); + + // Если файл выбран - помещаем его в хранилище для последующей загрузки на сервере + Если ДиалогОткрытияФайла.Выбрать() Тогда + ПоместитьФайл(АдресВременногоХранилища, ДиалогОткрытияФайла.ПолноеИмяФайла, , Ложь, УникальныйИдентификатор); + ИмяФайлаПравил = СтрЗаменить(ДиалогОткрытияФайла.ПолноеИмяФайла, ДиалогОткрытияФайла.Каталог, ""); + РасширениеФайла = НРег(Прав(ДиалогОткрытияФайла.ПолноеИмяФайла, 4)); + ЭтоАрхив = (РасширениеФайла = ".zip"); + Иначе + Возврат; + КонецЕсли; + + Иначе + Возврат; + КонецЕсли; + + КонецЕсли; + + Состояние(НСтр("ru = 'Выполняется загрузка правил в информационную базу...'")); + + // загрузка правил на сервере + ЗагрузитьПравилаНаСервере(Отказ, АдресВременногоХранилища, ИмяФайлаПравил, ЭтоАрхив); + + Если Отказ Тогда + + НСтрока = НСтр("ru = 'В процессе загрузки правил были обнаружены ошибки. + |Перейти в журнал регистрации?'" + ); + + Ответ = Вопрос(НСтрока, РежимДиалогаВопрос.ДаНет, ,КодВозвратаДиалога.Нет); + Если Ответ = КодВозвратаДиалога.Да Тогда + + Отбор = Новый Структура; + Отбор.Вставить("СобытиеЖурналаРегистрации", СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными); + ОткрытьФормуМодально("Обработка.ЖурналРегистрации.Форма", Отбор, ЭтаФорма); + + КонецЕсли; + + Иначе + + Предупреждение(НСтр("ru = 'Правила успешно загружены в информационную базу.'")); + + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ВыгрузитьПравила(Команда) + + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); + + Если ПодключитьРасширениеРаботыСФайлами() Тогда + + // Предложение пользователю выбрать файл правил для сохранения + Режим = РежимДиалогаВыбораФайла.Сохранение; + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); + РасширениеФайла = НРег(Прав(Запись.ИмяФайлаПравил, 4)); + ИмяФайлаБезРасширения = СтрЗаменить(Запись.ИмяФайлаПравил, РасширениеФайла, ""); + ДиалогОткрытияФайла.ПолноеИмяФайла = ?(ПустаяСтрока(ИмяФайлаБезРасширения), "ПравилаДляОбменаДанными", ИмяФайлаБезРасширения); + Фильтр = НСтр("ru = 'Файлы правил'") + "(*.xml)|*.xml|" + + НСтр("ru = 'Архивы ZIP'") + "(*.zip)|*.zip"; + ДиалогОткрытияФайла.Фильтр = Фильтр; + Если НРег(Прав(Запись.ИмяФайлаПравил, 4)) = ".zip" Тогда + ДиалогОткрытияФайла.ИндексФильтра = 1; + Иначе + ДиалогОткрытияФайла.ИндексФильтра = 0; + КонецЕсли; + ДиалогОткрытияФайла.МножественныйВыбор = Ложь; + ДиалогОткрытияФайла.Заголовок = "Укажите в какой файл выгрузить правила"; + + // Если указано куда выгружать файл правил - то сохраняем его в указанное место + Если ДиалогОткрытияФайла.Выбрать() Тогда + ИмяФайла = СтрЗаменить(ДиалогОткрытияФайла.ПолноеИмяФайла, ДиалогОткрытияФайла.Каталог, ""); + РасширениеФайла = НРег(Прав(ДиалогОткрытияФайла.ПолноеИмяФайла, 4)); + ИмяФайлаБезРасширения = СтрЗаменить(ИмяФайла, РасширениеФайла, ""); + ЭтоАрхив = (РасширениеФайла = ".zip"); + Если ЭтоАрхив Тогда + АдресВременногоХранилища = ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере(ИмяФайлаБезРасширения); + Если ПустаяСтрока(АдресВременногоХранилища) Тогда + Возврат; + Иначе + ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища); + ДвоичныеДанные.Записать(ДиалогОткрытияФайла.ПолноеИмяФайла); + КонецЕсли; + Иначе + АдресВременногоХранилища = ПолучитьНавигационнуюСсылкуНаСервере(); + ПолучитьФайл(АдресВременногоХранилища, ДиалогОткрытияФайла.ПолноеИмяФайла, Ложь); + КонецЕсли; + Иначе + Возврат; + КонецЕсли; + + Иначе + Возврат; + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ИнформацияОФайлеПравил(Команда) + + ОбменДаннымиКлиент.ПолучитьИнформациюОПравилах(УникальныйИдентификатор); + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Процедура ОбновитьСписокВыбораПлановОбмена() + + СписокПлановОбмена = ОбменДаннымиПовтИсп.СписокПлановОбменаБСП(); + + ЗаполнитьСписок(СписокПлановОбмена, Элементы.ИмяПланаОбмена.СписокВыбора); + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьСписокВыбораМакетаПравил() + + Если Запись.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов Тогда + + СписокМакетов = ОбменДаннымиПовтИсп.ПолучитьСписокТиповыхПравилОбмена(Запись.ИмяПланаОбмена); + + Иначе // ПравилаРегистрацииОбъектов + + СписокМакетов = ОбменДаннымиПовтИсп.ПолучитьСписокТиповыхПравилРегистрации(Запись.ИмяПланаОбмена); + + КонецЕсли; + + СписокВыбора = Элементы.ИмяМакетаПравил.СписокВыбора; + СписокВыбора.Очистить(); + + ЗаполнитьСписок(СписокМакетов, СписокВыбора); + +КонецПроцедуры + +&НаСервере +Процедура ЗаполнитьСписок(СписокИсточник, СписокПриемник) + + Для Каждого Элемент ИЗ СписокИсточник Цикл + + ЗаполнитьЗначенияСвойств(СписокПриемник.Добавить(), Элемент); + + КонецЦикла; + +КонецПроцедуры + +&НаСервере +Процедура УстановитьВидимость() + + // если план обмена был ранее задан, то изменять его не даем + Элементы.ГруппаПланаОбмена.Видимость = ПустаяСтрока(Запись.ИмяПланаОбмена); + + ГруппаИсточникиПравил = Элементы.ГруппаИсточникиПравил; + + ГруппаИсточникиПравил.ТекущаяСтраница = ?(ИсточникПравил = 0, + ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникМакетКонфигурации, + ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникФайл + ); + + Элементы.ВнешняяОбработкаДляОтладкиВыгрузки.Доступность = Запись.РежимОтладкиВыгрузки; + Элементы.ВнешняяОбработкаДляОтладкиЗагрузки.Доступность = Запись.РежимОтладкиЗагрузки; + Элементы.ФайлПротоколаОбмена.Доступность = Запись.РежимПротоколированияОбменаДанными; + + Элементы.ГруппаОтладки.Доступность = ?(ИсточникПравил = 2, Истина, Ложь); + +КонецПроцедуры + +&НаСервере +Процедура ЗагрузитьПравилаНаСервере(Отказ, АдресВременногоХранилища, ИмяФайлаПравил, ЭтоАрхив) + + Запись.ИсточникПравил = ?(ИсточникПравил = 0, Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации, Перечисления.ИсточникиПравилДляОбменаДанными.Файл); + + Объект = РеквизитФормыВЗначение("Запись"); + + РегистрыСведений.ПравилаДляОбменаДанными.ЗагрузитьПравила(Отказ, Объект, АдресВременногоХранилища, ИмяФайлаПравил, , ЭтоАрхив); + + Если Не Отказ Тогда + + Объект.Записать(); + + Модифицированность = Ложь; + + КонецЕсли; + + ЗначениеВРеквизитФормы(Объект, "Запись"); + + ОбновитьИнформациюОПравилах(); + +КонецПроцедуры + +&НаСервере +Функция ПолучитьНавигационнуюСсылкуНаСервере() + + Отбор = Новый Структура; + Отбор.Вставить("ИмяПланаОбмена", Запись.ИмяПланаОбмена); + Отбор.Вставить("ВидПравил", Запись.ВидПравил); + + КлючЗаписи = РегистрыСведений.ПравилаДляОбменаДанными.СоздатьКлючЗаписи(Отбор); + + Возврат ПолучитьНавигационнуюСсылку(КлючЗаписи, "ПравилаXML"); + +КонецФункции + +&НаСервере +Функция ПолучитьАдресВременногоХранилищаАрхиваПравилНаСервере(ИмяФайла) + + // Создаем временный каталог на сервере и формируем пути к файлам и папкам + ИмяВременногоФайла = ПолучитьИмяВременногоФайла(); + ВременныйФайл = Новый Файл(ИмяВременногоФайла); + ИмяВременнойПапки = СтрЗаменить(ВременныйФайл.ПолноеИмя, ВременныйФайл.Расширение, ""); + СоздатьКаталог(ИмяВременнойПапки); + ПутьКФайлу = ИмяВременнойПапки + "\" + ИмяФайла; + + Запрос = Новый Запрос; + Запрос.Текст = + "ВЫБРАТЬ + | ПравилаДляОбменаДанными.ПравилаXML + |ИЗ + | РегистрСведений.ПравилаДляОбменаДанными КАК ПравилаДляОбменаДанными + |ГДЕ + | ПравилаДляОбменаДанными.ИмяПланаОбмена = &ИмяПланаОбмена + | И ПравилаДляОбменаДанными.ВидПравил = &ВидПравил"; + Запрос.УстановитьПараметр("ИмяПланаОбмена", Запись.ИмяПланаОбмена); + Запрос.УстановитьПараметр("ВидПравил", Запись.ВидПравил); + Результат = Запрос.Выполнить(); + Если Результат.Пустой() Тогда + + НСтрока = НСтр("ru = 'Не удалось получить правила обмена.'"); + ОбменДаннымиСервер.СообщитьОбОшибке(НСтрока); + Возврат ""; + + Иначе + + Выборка = Результат.Выбрать(); + Выборка.Следующий(); + + // Получаем, сохраняем и архивируем файл правил во временном каталоге + ДвоичныеДанныеПравил = Выборка.ПравилаXML.Получить(); + ДвоичныеДанныеПравил.Записать(ПутьКФайлу + ".xml"); + ОбменДаннымиСервер.ЗапаковатьВZipФайл(ПутьКФайлу + ".zip", ПутьКФайлу + ".xml"); + + // Помещаем архив правил в хранилище + ДвоичныеДанныеАрхиваПравил = Новый ДвоичныеДанные(ПутьКФайлу + ".zip"); + АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанныеАрхиваПравил); + Возврат АдресВременногоХранилища; + + КонецЕсли; + +КонецФункции + +&НаСервере +Процедура ОбновитьИнформациюОПравилах() + + Если Запись.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.Файл Тогда + + ИнформацияОПравилах = НСтр("ru = 'Использование правил, загруженных из файла, + |может привести к ошибкам при переходе на новую версию программы. + | + |[ИнформацияОПравилах]'" + ); + + ИнформацияОПравилах = СтрЗаменить(ИнформацияОПравилах, "[ИнформацияОПравилах]", Запись.ИнформацияОПравилах); + + Иначе + + ИнформацияОПравилах = Запись.ИнформацияОПравилах; + + КонецЕсли; + +КонецПроцедуры + +&НаСервере +Процедура ОбновитьИсточникПравил() + + ИсточникПравил = ?(Запись.ИсточникПравил = Перечисления.ИсточникиПравилДляОбменаДанными.МакетКонфигурации, 0, 1); + + Если Запись.РежимОтладки Тогда + + ИсточникПравил = 2; + + КонецЕсли; + +КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Form.form b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form similarity index 92% rename from SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Form.form rename to SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form index e3ad5535d..8ed4a0aaa 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Form.form +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Form.form @@ -1,5 +1,9 @@ + + <key>ru</key> + <value>Правила регистрации объектов</value> + ГруппаПланаОбмена 26 @@ -20,7 +24,7 @@ ИмяПланаОбменаРасширеннаяПодсказка - 34 + 36 Label true true @@ -66,7 +70,7 @@ ГруппаПланаОбменаРасширеннаяПодсказка - 33 + 35 Label true true @@ -105,7 +109,7 @@ ИсточникПравилРасширеннаяПодсказка - 37 + 39 Label true true @@ -166,7 +170,7 @@ None ИмяМакетаПравилРасширеннаяПодсказка - 41 + 43 Label true true @@ -210,7 +214,7 @@ true ЗагрузитьТиповыеПравилаРасширеннаяПодсказка - 44 + 46 Label true true @@ -238,7 +242,7 @@ true ВыгрузитьТиповыеПравилаРасширеннаяПодсказка - 45 + 47 Label true true @@ -270,7 +274,7 @@ ГруппаДействияСТиповымиПравиламиРасширеннаяПодсказка - 43 + 45 Label true true @@ -302,7 +306,7 @@ ИсточникМакетКонфигурацииРасширеннаяПодсказка - 40 + 42 Label true true @@ -332,7 +336,7 @@ None ИмяФайлаПравилРасширеннаяПодсказка - 47 + 49 Label true true @@ -377,7 +381,7 @@ true ЗагрузитьПравилаИзФайлаРасширеннаяПодсказка - 50 + 52 Label true true @@ -405,7 +409,7 @@ true ВыгрузитьПравилаВФайлРасширеннаяПодсказка - 51 + 53 Label true true @@ -437,7 +441,7 @@ ГруппаДействияСПравиламиИзФайлаРасширеннаяПодсказка - 49 + 51 Label true true @@ -469,7 +473,7 @@ ИсточникФайлРасширеннаяПодсказка - 46 + 48 Label true true @@ -497,7 +501,7 @@ ГруппаИсточникиПравилРасширеннаяПодсказка - 39 + 41 Label true true @@ -525,7 +529,7 @@ ГруппаОсновнаяРасширеннаяПодсказка - 36 + 38 Label true true @@ -558,7 +562,7 @@ ИнформацияОПравилахРасширеннаяПодсказка - 52 + 54 Label true true @@ -588,24 +592,20 @@ Normal - - ГруппаДополнительно - 18 - - ИспользоватьФильтрВыборочнойРегистрацииОбъектов - 13 + + ФормаКоманднаяПанель + -1 + + ФормаПеречитать + 31 true true true - - Запись.ИспользоватьФильтрВыборочнойРегистрацииОбъектов - - Right - ИспользоватьФильтрВыборочнойРегистрацииОбъектовРасширеннаяПодсказка - 55 + ФормаПеречитатьРасширеннаяПодсказка + 32 Label true true @@ -613,57 +613,15 @@ Left - - ИспользоватьФильтрВыборочнойРегистрацииОбъектовКонтекстноеМеню - 14 - true - - CheckBoxField - Enter - true - Left - true - - - true - true - - true - - - <key>ru</key> - <value>Дополнительно</value> - - - ru - Группа дополнительно - - true - - ГруппаДополнительноРасширеннаяПодсказка - 54 - Label + Form.StandardCommand.Reread + Normal + Auto true true - - Left - - - UsualGroup - - Auto - WeakSeparation - true - true - LeftWidest - auto - Auto - Auto - - - - ФормаКоманднаяПанель - -1 + UserCmds + Auto + InAdditionalSubmenu + ГруппаКнопок 24 @@ -678,7 +636,7 @@ false ПолучитьИнформациюОПравилахИзФайлаРасширеннаяПодсказка - 32 + 34 Label true true @@ -693,6 +651,7 @@ true UserCmds Auto + InAdditionalSubmenu true true @@ -709,7 +668,7 @@ ГруппаКнопокРасширеннаяПодсказка - 31 + 33 Label true true diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html similarity index 58% rename from SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html rename to SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html index 1164d1871..ea7c882e0 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Help/ru.html +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Help/ru.html @@ -1,13 +1,13 @@ - +

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

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

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

                +

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

                См. также

                \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Module.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl similarity index 87% rename from SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Module.bsl rename to SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl index f8822043e..f1e572c96 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ФормаЗаписи/Module.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/Forms/ПравилаРегистрацииОбъектов/Module.bsl @@ -8,14 +8,14 @@ ОбновитьСписокВыбораМакетаПравил(); + УстановитьВидимость(); + ОбновитьИнформациюОПравилах(); ОбновитьИсточникПравил(); СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); - УстановитьВидимость(); - КонецПроцедуры &НаСервере @@ -24,7 +24,7 @@ Если Не ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда // кеш открытых сеансов для МРО стал неактуальным - ОбменДаннымиСервер.УстановитьДатуОбновленияПовторноИспользуемыхЗначенийМРО(); + ОбменДаннымиВызовСервера.СброситьКэшМеханизмаРегистрацииОбъектов(); ОбновитьПовторноИспользуемыеЗначения(); @@ -68,18 +68,37 @@ ЭтоАрхив = Ложь; Если ИсточникПравил = 1 Тогда // из файла - + ОбщегоНазначенияКлиент.ПредложитьУстановкуРасширенияРаботыСФайлами(); - Если ПодключитьРасширениеРаботыСФайлами() Тогда + Если ПодключитьРасширениеРаботыСФайлами()Тогда - Если ПоместитьФайл(АдресВременногоХранилища, Запись.ИмяФайлаПравил, ВыбранноеИмяФайла, Истина, УникальныйИдентификатор) Тогда - Файл = Новый Файл(ВыбранноеИмяФайла); - ИмяФайлаПравил = Файл.Имя; - ЭтоАрхив = (НРег(Файл.Расширение) = НРег(".zip")); + // Предложение пользователю выбрать файл правил для загрузки + Режим = РежимДиалогаВыбораФайла.Открытие; + ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); + РасширениеФайла = НРег(Прав(Запись.ИмяФайлаПравил, 4)); + ИмяФайлаБезРасширения = СтрЗаменить(Запись.ИмяФайлаПравил, РасширениеФайла, ""); + ДиалогОткрытияФайла.ПолноеИмяФайла = ИмяФайлаБезРасширения; + Фильтр = НСтр("ru = 'Файлы правил'") + "(*.xml)|*.xml|" + + НСтр("ru = 'Архивы ZIP'") + "(*.zip)|*.zip"; + ДиалогОткрытияФайла.Фильтр = Фильтр; + Если НРег(Прав(Запись.ИмяФайлаПравил, 4)) = ".zip" Тогда + ДиалогОткрытияФайла.ИндексФильтра = 1; + Иначе + ДиалогОткрытияФайла.ИндексФильтра = 0; + КонецЕсли; + ДиалогОткрытияФайла.МножественныйВыбор = Ложь; + ДиалогОткрытияФайла.Заголовок = НСтр("ru = 'Укажите из какого файла загрузить правила'"); + + // Если файл выбран - помещаем его в хранилище для последующей загрузки на сервере + Если ДиалогОткрытияФайла.Выбрать() Тогда + ПоместитьФайл(АдресВременногоХранилища, ДиалогОткрытияФайла.ПолноеИмяФайла, , Ложь, УникальныйИдентификатор); + ИмяФайлаПравил = СтрЗаменить(ДиалогОткрытияФайла.ПолноеИмяФайла, ДиалогОткрытияФайла.Каталог, ""); + РасширениеФайла = НРег(Прав(ДиалогОткрытияФайла.ПолноеИмяФайла, 4)); + ЭтоАрхив = (РасширениеФайла = ".zip"); Иначе Возврат; - КонецЕсли; + КонецЕсли; Иначе Возврат; @@ -223,16 +242,12 @@ // если план обмена был ранее задан, то изменять его не даем Элементы.ГруппаПланаОбмена.Видимость = ПустаяСтрока(Запись.ИмяПланаОбмена); - Элементы.ГруппаДополнительно.Видимость = (Запись.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов); - ГруппаИсточникиПравил = Элементы.ГруппаИсточникиПравил; ГруппаИсточникиПравил.ТекущаяСтраница = ?(ИсточникПравил = 0, ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникМакетКонфигурации, ГруппаИсточникиПравил.ПодчиненныеЭлементы.ИсточникФайл ); - // назначаем заголовок формы - Заголовок = Строка(Запись.ВидПравил); КонецПроцедуры diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl index 79df0ca42..0620e3d68 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ManagerModule.bsl @@ -1,3 +1,28 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) + + Если ВидФормы = "ФормаЗаписи" Тогда + + СтандартнаяОбработка = Ложь; + + Если Параметры.Ключ.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаКонвертацииОбъектов Тогда + + ВыбраннаяФорма = "РегистрСведений.ПравилаДляОбменаДанными.Форма.ПравилаКонвертацииОбъектов"; + + ИначеЕсли Параметры.Ключ.ВидПравил = Перечисления.ВидыПравилДляОбменаДанными.ПравилаРегистрацииОбъектов Тогда + + ВыбраннаяФорма = "РегистрСведений.ПравилаДляОбменаДанными.Форма.ПравилаРегистрацииОбъектов"; + + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -95,6 +120,21 @@ КонвертацияОбъектовИнформационныхБаз.ИмяПланаОбменаВРО = Запись.ИмяПланаОбмена; КонвертацияОбъектовИнформационныхБаз.КлючСообщенияЖурналаРегистрации = ОбменДаннымиСервер.СобытиеЖурналаРегистрацииЗагрузкаПравилДляОбменаДанными(); + + НастройкиОтладки = ОбменДаннымиСервер.НастройкиРежимаОтладки(Запись.ИмяПланаОбмена); + + Если НастройкиОтладки = Неопределено Или ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда + + КонвертацияОбъектовИнформационныхБаз.ОтладкаОбработчиковВыгрузки = Ложь; + КонвертацияОбъектовИнформационныхБаз.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки = ""; + + Иначе; + + КонвертацияОбъектовИнформационныхБаз.ОтладкаОбработчиковВыгрузки = НастройкиОтладки.РежимОтладкиВыгрузки; + КонвертацияОбъектовИнформационныхБаз.ИмяФайлаВнешнейОбработкиОтладкиВыгрузки = НастройкиОтладки.ИмяФайлаОбработкиДляОтладкиВыгрузки; + + КонецЕсли; + // методы обработки ПравилаЗачитанные = КонвертацияОбъектовИнформационныхБаз.ПолучитьСтруктуруПравилОбмена(ИмяВременногоФайла); @@ -362,3 +402,4 @@ КонецПроцедуры +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl index e69de29bb..40aa1a012 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/RecordSetModule.bsl @@ -0,0 +1,138 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + Для Каждого Запись Из ЭтотОбъект Цикл + + ЭтоФайловаяБаза = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + + Если Запись.РежимОтладкиВыгрузки Тогда + + ПроверитьСуществованиеФайлаВнешнейОбработки(Запись.ИмяФайлаОбработкиДляОтладкиВыгрузки, ЭтоФайловаяБаза, Отказ); + + КонецЕсли; + + Если Запись.РежимОтладкиЗагрузки Тогда + + ПроверитьСуществованиеФайлаВнешнейОбработки(Запись.ИмяФайлаОбработкиДляОтладкиЗагрузки, ЭтоФайловаяБаза, Отказ); + + КонецЕсли; + + Если Запись.РежимПротоколированияОбменаДанными и Запись.ИмяФайлаОбработкиДляОтладкиЗагрузки <> "" Тогда + + ПроверитьДоступностьФайлаПротоколаОбмена(Запись.ИмяФайлаОбработкиДляОтладкиЗагрузки, Отказ); + + КонецЕсли; + + КонецЦикла; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Процедура ПроверитьСуществованиеФайлаВнешнейОбработки(ИмяПроверяемогоФайла, ЭтоФайловаяБаза, Отказ) + + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяПроверяемогоФайла); + ИмяФайла = СтруктураИмениФайла.ИмяБезРасширения; + ИмяКаталогаПроверки = СтруктураИмениФайла.Путь; + КаталогПроверки = Новый Файл(ИмяКаталогаПроверки); + ФайлНаДиске = Новый Файл(ИмяПроверяемогоФайла); + РасположениеКаталога = ? (ЭтоФайловаяБаза, НСтр("ru = 'на клиенте'"), НСтр("ru = 'на сервере'")); + + Если Не ЗначениеЗаполнено(ИмяФайла) Тогда + + СтрокаСообщения = НСтр("ru = 'Не задано имя файла внешней обработки.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки, РасположениеКаталога); + Отказ = Истина; + + ИначеЕсли Не КаталогПроверки.Существует() Тогда + + СтрокаСообщения = НСтр("ru = 'Каталог ""%1"" не найден %2.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки, РасположениеКаталога); + Отказ = Истина; + + ИначеЕсли Не ФайлНаДиске.Существует() Тогда + + СтрокаСообщения = НСтр("ru = 'Файл внешней обработки ""%1"" не найден %2.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяПроверяемогоФайла, РасположениеКаталога); + Отказ = Истина; + + Иначе + + Возврат; + + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,,, Отказ); + +КонецПроцедуры + +Процедура ПроверитьДоступностьФайлаПротоколаОбмена(ИмяФайлаПротоколаОбмена, Отказ) + + СтруктураИмениФайла = ОбщегоНазначенияКлиентСервер.РазложитьПолноеИмяФайла(ИмяФайлаПротоколаОбмена); + ИмяФайлаПротокола = СтруктураИмениФайла.ИмяБезРасширения; + ИмяКаталогаПроверки = СтруктураИмениФайла.Путь; + КаталогПроверки = Новый Файл(ИмяКаталогаПроверки); + ИмяФайлаПроверки = "test.tmp"; + + Если Не ЗначениеЗаполнено(ИмяФайлаПротокола) Тогда + Возврат; + ИначеЕсли Не КаталогПроверки.Существует() Тогда + + СтрокаСообщения = НСтр("ru = 'Каталог файла протокола обмена ""%1"" не найден.'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки); + Отказ = Истина; + + ИначеЕсли Не СоздатьФайлПроверки(ИмяКаталогаПроверки, ИмяФайлаПроверки) Тогда + + СтрокаСообщения = НСтр("ru = 'Не удалось создать файл в папке протокола обмена: ""%1"".'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки); + Отказ = Истина; + + ИначеЕсли Не УдалитьФайлПроверки(ИмяКаталогаПроверки, ИмяФайлаПроверки) Тогда + + СтрокаСообщения = НСтр("ru = 'Не удалось удалить файл в папке протокола обмена: ""%1"".'"); + СтрокаСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаСообщения, ИмяКаталогаПроверки); + Отказ = Истина; + + Иначе + Возврат; + КонецЕсли; + + ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СтрокаСообщения,,,, Отказ); + +КонецПроцедуры + +Функция СоздатьФайлПроверки(ИмяКаталогаПроверки, ИмяФайлаПроверки) + + ТекстовыйДокумент = Новый ТекстовыйДокумент; + ТекстовыйДокумент.ДобавитьСтроку(НСтр("ru = 'Временный файл проверки'")); + + Попытка + ТекстовыйДокумент.Записать(ИмяКаталогаПроверки + "/" + ИмяФайлаПроверки); + Исключение + Возврат Ложь; + КонецПопытки; + + Возврат Истина; + +КонецФункции + +Функция УдалитьФайлПроверки(ИмяКаталогаПроверки, ИмяФайлаПроверки) + + Попытка + УдалитьФайлы(ИмяКаталогаПроверки, ИмяФайлаПроверки); + Исключение + Возврат Ложь; + КонецПопытки; + + Возврат Истина; + +КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo index 6fc2a3964..f1bdf735f 100644 --- a/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo +++ b/SSL/src/InformationRegisters/ПравилаДляОбменаДанными/ПравилаДляОбменаДанными.mdo @@ -14,7 +14,7 @@ ru Правила для обмена данными - InformationRegister.ПравилаДляОбменаДанными.Form.ФормаЗаписи + InformationRegister.ПравилаДляОбменаДанными.Form.ПравилаКонвертацииОбъектов Use Active @@ -48,11 +48,6 @@ - - - ru - - Managed ru @@ -202,6 +197,167 @@ Use + + ИмяФайлаОбработкиДляОтладкиЗагрузки + + ru + Имя файла обработки для отладки загрузки + + + String + + 255 + + + + ru + Полное имя файла внешней обработки для отладки загрузки. + + + + Use + Use + + + + РежимОтладкиЗагрузки + + ru + Режим отладки загрузки + + + Boolean + + + ru + Признак включения режима отладки загрузки. + + + + Use + Use + + + + РежимПротоколированияОбменаДанными + + ru + Режим протоколирования обмена данными + + + Boolean + + + ru + Признак включения режима вывода информационных сообщений об обмене в Журнал регистрации или в файл протокола. + + + + Use + 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 + + ИспользоватьФильтрВыборочнойРегистрацииОбъектов @@ -289,11 +445,30 @@ - ФормаЗаписи + ПравилаРегистрацииОбъектов ru - Форма записи + Правила регистрации объектов + + + ru + + + PersonalComputer + MobileDevice + + + ПравилаКонвертацииОбъектов + + ru + Правила конвертации объектов + + + + ru + + PersonalComputer MobileDevice diff --git a/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl b/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl index f6b401268..6c63e42ae 100644 --- a/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/РабочиеКаталогиФайлов/RecordSetModule.bsl @@ -1,6 +1,12 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Процедура ПередЗаписью(Отказ, Замещение) + Если ОбменДанными.Загрузка Тогда + Возврат; + КонецЕсли; + Если Количество() = 1 Тогда Папка = Получить(0).Папка; Путь = Получить(0).Путь; @@ -39,3 +45,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СвязиПоставляемыхДанных/СвязиПоставляемыхДанных.mdo b/SSL/src/InformationRegisters/СвязиПоставляемыхДанных/СвязиПоставляемыхДанных.mdo index 0f8e9cae1..fa0971fbe 100644 --- a/SSL/src/InformationRegisters/СвязиПоставляемыхДанных/СвязиПоставляемыхДанных.mdo +++ b/SSL/src/InformationRegisters/СвязиПоставляемыхДанных/СвязиПоставляемыхДанных.mdo @@ -110,8 +110,12 @@ Элемент общих данных - CatalogRef.КлассификаторВалют + CatalogRef.УдалитьКлассификаторВалют CatalogRef.ПроизводственныеКалендари + String + + 10 + @@ -122,4 +126,23 @@ true true + + ТипОбщихДанных + + ru + Тип общих данных + + + String + + 10 + + + + + Use + Use + + true + diff --git a/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl index c56a2f810..dca2498bd 100644 --- a/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СообщенияОбменаДанными/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -12,3 +14,5 @@ ОбменДаннымиСервер.УдалитьНаборЗаписейВРегистреСведений(СтруктураЗаписи, "СообщенияОбменаДанными"); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl index 3344d8f26..e841734e5 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -92,3 +94,5 @@ КонецЕсли; КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl index 3337d42e8..f4693c6d6 100644 --- a/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/СоответствияОбъектовИнформационныхБаз/RecordSetModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -34,3 +36,5 @@ + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl index 23ceb3248..7ce836608 100644 --- a/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияОбменовДанными/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -146,3 +148,5 @@ КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl index 1a290c074..108e200f3 100644 --- a/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияРассылокОтчетов/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -31,3 +33,5 @@ МенеджерЗаписи.Записать(Истина); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl index 900d4955f..d2ff3bfab 100644 --- a/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl +++ b/SSL/src/InformationRegisters/СостоянияУспешныхОбменовДанными/ManagerModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ @@ -7,3 +9,5 @@ ОбменДаннымиСервер.ДобавитьЗаписьВРегистрСведений(СтруктураЗаписи, "СостоянияУспешныхОбменовДанными"); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo index eebfce60f..7f00dc2f9 100644 --- a/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo +++ b/SSL/src/InformationRegisters/ТаблицыГруппДоступа/ТаблицыГруппДоступа.mdo @@ -203,9 +203,7 @@ true Use true - - Catalog.Пользователи.EmptyRef - + true true diff --git a/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/RecordSetModule.bsl b/SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/RecordSetModule.bsl similarity index 84% rename from SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/RecordSetModule.bsl rename to SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/RecordSetModule.bsl index f49cb6af5..1bfdb2a17 100644 --- a/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/RecordSetModule.bsl +++ b/SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/RecordSetModule.bsl @@ -1,9 +1,8 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Перем Запрос; -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ - Процедура ПередЗаписью(Отказ, Замещение) Если ОбменДанными.Загрузка Тогда @@ -23,3 +22,5 @@ ПоставляемыеДанные.ЗарегистрироватьИзмененияДанныхНабораЗаписей(Запрос, ЭтотОбъект, "Валюта", "Период, Валюта", Истина); КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/КурсыВалютПоКлассификатору.mdo b/SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/УдалитьКурсыВалютПоКлассификатору.mdo similarity index 94% rename from SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/КурсыВалютПоКлассификатору.mdo rename to SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/УдалитьКурсыВалютПоКлассификатору.mdo index 1f460691d..265fe62ad 100644 --- a/SSL/src/InformationRegisters/КурсыВалютПоКлассификатору/КурсыВалютПоКлассификатору.mdo +++ b/SSL/src/InformationRegisters/УдалитьКурсыВалютПоКлассификатору/УдалитьКурсыВалютПоКлассификатору.mdo @@ -9,10 +9,10 @@ - КурсыВалютПоКлассификатору + УдалитьКурсыВалютПоКлассификатору ru - Курсы валют по классификатору + (Не используется) Курсы валют по классификатору true InDialog @@ -110,7 +110,7 @@ Валюта - CatalogRef.КлассификаторВалют + CatalogRef.УдалитьКлассификаторВалют diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form new file mode 100644 index 000000000..b800e387d --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Form.form @@ -0,0 +1,271 @@ + + + + <key>ru</key> + <value>Сведения о регламентном задании</value> + + + Отчет + 1 + true + true + + true + + + Отчет + + None + + ОтчетРасширеннаяПодсказка + 7 + Label + true + true + + Left + + + + ОтчетКонтекстноеМеню + 2 + true + + SpreadsheetDocumentField + Enter + true + Left + true + + + DetailProcessing + ОтчетОбработкаРасшифровки + + 50 + true + 10 + true + true + true + Special + ScrollAlways + ScrollAlways + Always + Auto + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ИзменитьРасписание + 3 + + <key>ru</key> + <value>Изменить расписание</value> + + true + true + + true + + + ИзменитьРасписаниеРасширеннаяПодсказка + 5 + Label + true + true + + Left + + + Form.Command.НастроитьРасписаниеРегламентногоЗадания + Normal + PictureAndText + true + true + UserCmds + + StdPicture.ScheduledJob + + Auto + + + ПерейтиКЖурналуРегистрации + 4 + + <key>ru</key> + <value>Перейти к журналу регистрации</value> + + true + true + + true + + + ПерейтиКЖурналуРегистрацииРасширеннаяПодсказка + 6 + Label + true + true + + Left + + + Form.Command.ПерейтиКЖурналуРегистрации + Normal + PictureAndText + true + true + UserCmds + + StdPicture.EventLog + + Auto + + Left + true + + + OnCreateAtServer + ПриСозданииНаСервере + + DontBlock + true + true + Vertical + true + true + true + UseIfNecessary + auto + true + + Отчет + + <key>ru</key> + <value>Отчет</value> + + 1 + + SpreadsheetDocument + + + true + + + true + + + + + ИдентификаторРегламентногоЗадания + + <key>ru</key> + <value>Идентификатор регламентного задания</value> + + 2 + + String + + + + true + + + + + СеансРегламентногоЗадания + + <key>ru</key> + <value>Сеанс регламентного задания</value> + + 3 + + ValueList + + + true + + + true + + + + Number + + 10 + + + + + + АдресОтчета + + <key>ru</key> + <value>Адрес отчета</value> + + 4 + + String + + + + true + + + true + + + + НастроитьРасписаниеРегламентногоЗадания + + <key>ru</key> + <value>Изменить расписание</value> + + 1 + + ru + Изменить расписание + + + true + + + + НастроитьРасписаниеРегламентногоЗадания + + + Auto + Auto + + + ПерейтиКЖурналуРегистрации + + <key>ru</key> + <value>Перейти к журналу регистрации</value> + + 2 + + ru + Перейти к журналу регистрации + + + true + + + + ПерейтиКЖурналуРегистрации + + + Auto + Auto + + + + + + diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl new file mode 100644 index 000000000..8f1e92eff --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/СведенияОРегламентномЗадании/Module.bsl @@ -0,0 +1,87 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + + Отчет = Параметры.Отчет; + ИдентификаторРегламентногоЗадания = Параметры.ИдентификаторРегламентногоЗадания; + Заголовок = Параметры.Заголовок; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура ОтчетОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ДатаНачала = Расшифровка.Получить(0); + ДатаОкончания = Расшифровка.Получить(1); + СеансРегламентногоЗадания.Очистить(); + СеансРегламентногоЗадания.Добавить(Расшифровка.Получить(2)); + ОтборЖурналаРегистрации = Новый Структура("Сеанс, ДатаНачала, ДатаОкончания", СеансРегламентногоЗадания, ДатаНачала, ДатаОкончания); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ОтборЖурналаРегистрации); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура НастроитьРасписаниеРегламентногоЗадания(Команда) + + Если ЗначениеЗаполнено(ИдентификаторРегламентногоЗадания) Тогда + + Диалог = Новый ДиалогРасписанияРегламентногоЗадания(ПолучитьРасписание()); + + Если Диалог.ОткрытьМодально() Тогда + УстановитьРасписание(Диалог.Расписание); + КонецЕсли; + Иначе + Предупреждение(НСтр("ru = 'Невозможно получить расписание регламентного задания: регламентное задание было удалено или не указано его наименование.'")); + КонецЕсли; + +КонецПроцедуры + +&НаКлиенте +Процедура ПерейтиКЖурналуРегистрации(Команда) + Для Каждого Область Из Отчет.ВыделенныеОбласти Цикл + Расшифровка = Область.Расшифровка; + Если Расшифровка = Неопределено + ИЛИ Область.Верх <> Область.Низ Тогда + Предупреждение(НСтр("ru = 'Выберите строку или ячейку нужного сеанса задания'")); + Возврат; + КонецЕсли; + ДатаНачала = Расшифровка.Получить(0); + ДатаОкончания = Расшифровка.Получить(1); + СеансРегламентногоЗадания.Очистить(); + СеансРегламентногоЗадания.Добавить(Расшифровка.Получить(2)); + ОтборЖурналаРегистрации = Новый Структура("Сеанс, ДатаНачала, ДатаОкончания", СеансРегламентногоЗадания, ДатаНачала, ДатаОкончания); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ОтборЖурналаРегистрации); + КонецЦикла; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция ПолучитьРасписание() + + УстановитьПривилегированныйРежим(Истина); + + Возврат РегламентныеЗаданияСервер.ПолучитьРасписаниеРегламентногоЗадания( + ИдентификаторРегламентногоЗадания); + +КонецФункции + +&НаСервере +Процедура УстановитьРасписание(Расписание) + + УстановитьПривилегированныйРежим(Истина); + + РегламентныеЗаданияСервер.УстановитьРасписаниеРегламентногоЗадания( + ИдентификаторРегламентногоЗадания, + Расписание); + +КонецПроцедуры + diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form new file mode 100644 index 000000000..c9651bfa5 --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Form.form @@ -0,0 +1,622 @@ + + + + ГруппаВарианта + 1 + + НаименованиеТекущегоВарианта + 2 + true + true + + true + + + НаименованиеТекущегоВарианта + + Left + + НаименованиеТекущегоВариантаРасширеннаяПодсказка + 19 + Label + true + true + + Left + + + + НаименованиеТекущегоВариантаКонтекстноеМеню + 3 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + ЗагрузитьВариант + 4 + true + true + + true + + + ЗагрузитьВариантРасширеннаяПодсказка + 21 + Label + true + true + + Left + + + UsualButton + Form.StandardCommand.LoadVariant + Normal + Auto + true + true + UserCmds + Auto + + true + true + + true + + + <key>ru</key> + <value>Группа варианта</value> + + + ГруппаВариантаРасширеннаяПодсказка + 18 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ОсновнаяКоманднаяПанель + 5 + + СформироватьОтчет + 15 + true + true + + true + + + СформироватьОтчетРасширеннаяПодсказка + 23 + Label + true + true + + Left + + + Form.Command.СформироватьОтчет + PictureAndText + true + true + true + UserCmds + + StdPicture.GenerateReport + + Auto + + + Справка + 17 + true + true + + true + + + СправкаРасширеннаяПодсказка + 24 + Label + true + true + + Left + + + Form.StandardCommand.Help + Normal + Auto + true + true + UserCmds + Auto + + + ГруппаНастроек + 16 + true + true + + true + + + <key>ru</key> + <value>Группа настроек</value> + + + ru + Группа настроек + + + ГруппаНастроекРасширеннаяПодсказка + 25 + Label + true + true + + Left + + + + Form + + + true + true + + true + + + <key>ru</key> + <value>Основная командная панель</value> + + + ОсновнаяКоманднаяПанельРасширеннаяПодсказка + 22 + Label + true + true + + Left + + + CommandBar + + Left + + + + КомпоновщикНастроекПользовательскиеНастройки + 6 + + <key>ru</key> + <value>Таблица пользовательских настроек</value> + + true + true + + true + + + Отчет.SettingsComposer.UserSettings + + None + HierarchicalList + List + Tree + None + + КомпоновщикНастроекПользовательскиеНастройкиКоманднаяПанель + 8 + Left + true + + + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоиска + 27 + + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаРасширеннаяПодсказка + 29 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиСтрокаПоискаКонтекстноеМеню + 28 + true + + КомпоновщикНастроекПользовательскиеНастройки + + true + + + + КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотра + 30 + + КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраРасширеннаяПодсказка + 32 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиСостояниеПросмотраКонтекстноеМеню + 31 + true + + ViewStatusAddition + КомпоновщикНастроекПользовательскиеНастройки + + true + + + + КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоиском + 33 + + КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомРасширеннаяПодсказка + 35 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиУправлениеПоискомКонтекстноеМеню + 34 + true + + SearchControlAddition + КомпоновщикНастроекПользовательскиеНастройки + + true + + + + КомпоновщикНастроекПользовательскиеНастройкиРасширеннаяПодсказка + 26 + Label + true + true + + Left + + + + КомпоновщикНастроекПользовательскиеНастройкиКонтекстноеМеню + 7 + 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 + + + Результат + 9 + true + true + + true + + + Результат + + true + None + + РезультатРасширеннаяПодсказка + 44 + Label + true + true + + Left + + + + РезультатКонтекстноеМеню + 10 + 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 + ПриСозданииНаСервере + + Generate + 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 + + + + + ИдентификаторРегламентногоЗадания + + <key>ru</key> + <value>Идентификатор регламентного задания</value> + + 5 + + String + + + + true + + + true + + + + ИдентификаторЗадания + + <key>ru</key> + <value>Идентификатор задания</value> + + 6 + + UUID + + + true + + + true + + + + АдресХранилища + + <key>ru</key> + <value>Адрес хранилища</value> + + 7 + + String + + + + true + + + true + + + + СеансРегламентногоЗадания + + <key>ru</key> + <value>Сеанс регламентного задания</value> + + 8 + + ValueList + + + true + + + true + + + + Number + + 10 + + + + + + ДанныеРасшифровки + + <key>ru</key> + <value>Данные расшифровки</value> + + 4 + + String + + + + true + + + true + + + + ПараметрыОбработчикаОжидания + + <key>ru</key> + <value>Параметры обработчика ожидания</value> + + 9 + + + true + + + true + + + + СформироватьОтчет + + <key>ru</key> + <value>Сформировать</value> + + 3 + + ru + Сформировать отчет + + + true + + + + СформироватьОтчет + + + Auto + Auto + + + + + + + Результат + ДанныеРасшифровки + НаименованиеТекущегоВарианта + +
                diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl new file mode 100644 index 000000000..f34a5304c --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Forms/ФормаОтчета/Module.bsl @@ -0,0 +1,227 @@ +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫ + +&НаСервере +Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) + МассивРегламентныхЗаданий = СписокВсехРегламентныхЗаданий(); + СкрытьРегламентныеЗадания = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.ДоступныеПараметры.НайтиПараметр(Новый ПараметрКомпоновкиДанных("СкрытьРегламентныеЗадания")); + СкрытьРегламентныеЗадания.ДоступныеЗначения.Очистить(); + Для Каждого Элемент Из МассивРегламентныхЗаданий Цикл + СкрытьРегламентныеЗадания.ДоступныеЗначения.Добавить(Элемент.УИД, Элемент.Наименование); + КонецЦикла; + СкрытьРегламентныеЗадания.ДоступныеЗначения.СортироватьПоПредставлению(); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ + +&НаКлиенте +Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка) + Если ТипЗнч(Элемент.ТекущаяОбласть) = Тип("РисунокТабличногоДокумента") Тогда + Если ТипЗнч(Элемент.ТекущаяОбласть.Объект) = Тип("Диаграмма") Тогда + СтандартнаяОбработка = Ложь; + Возврат; + КонецЕсли; + КонецЕсли; + Если Не НаименованиеТекущегоВарианта = НСтр("ru = 'Продолжительность работы регламентных заданий'") Тогда + СтандартнаяОбработка = Истина; + Возврат; + КонецЕсли; + СтандартнаяОбработка = Ложь; + ТипРасшифровки = Расшифровка.Получить(0); + Если ТипРасшифровки = "РасшифровкаРегламентногоЗадания" Тогда + ВариантРасшифровки = Новый СписокЗначений; + ВариантРасшифровки.Добавить("СведенияОРегламентномЗадании", НСтр("ru = 'Сведения о регламентном задании'")); + ВариантРасшифровки.Добавить("ОткрытьЖурналРегистрации", НСтр("ru = 'Перейти к журналу регистрации'")); + ВыбранныйВариант = ВыбратьИзМеню(ВариантРасшифровки); + Если ВыбранныйВариант = Неопределено Тогда + Возврат; + КонецЕсли; + Действие = ВыбранныйВариант.Значение; + Если Действие = "СведенияОРегламентномЗадании" Тогда + СписокТочек = Результат.Области.ДиаграммаГанта.Объект.Точки; + Для Каждого ТочкаДиаграммыГанта Из СписокТочек Цикл + РасшифровкаТочки = ТочкаДиаграммыГанта.Расшифровка; + Если ТочкаДиаграммыГанта.Значение = НСтр("ru = 'Фоновые задания'") Тогда + Продолжить; + КонецЕсли; + Если РасшифровкаТочки.Найти(Расшифровка.Получить(2)) <> Неопределено Тогда + СведенияОРегламентномЗадании(РасшифровкаТочки); + Прервать; + КонецЕсли; + КонецЦикла; + ИначеЕсли Действие = "ОткрытьЖурналРегистрации" Тогда + СеансРегламентногоЗадания.Очистить(); + СеансРегламентногоЗадания.Добавить(Расшифровка.Получить(1)); + ДатаНачала = Расшифровка.Получить(3); + ДатаОкончания = Расшифровка.Получить(4); + ОтборЖурналаРегистрации = Новый Структура("Сеанс, ДатаНачала, ДатаОкончания", + СеансРегламентногоЗадания, ДатаНачала, ДатаОкончания); + ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ОтборЖурналаРегистрации); + КонецЕсли; + Иначе + СведенияОРегламентномЗадании(Расшифровка); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ КОМАНД ФОРМЫ + +&НаКлиенте +Процедура СформироватьОтчет(Команда) + ОчиститьСообщения(); + ПараметрыОтчета = ПараметрыОтчета(); + РезультатВыполнения = СформироватьОтчетСервер(ПараметрыОтчета); + ПараметрыОбработчикаОжидания = Новый Структура(); + + Если Не РезультатВыполнения.ЗаданиеВыполнено Тогда + ДлительныеОперацииКлиент.ИнициализироватьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания("Подключаемый_ПроверитьВыполнениеЗадания", 1, Истина); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "ФормированиеОтчета"); + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +&НаСервере +Функция СписокВсехРегламентныхЗаданий() + УстановитьПривилегированныйРежим(Истина); + СписокРегламентныхЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); + МассивРегламентныхЗаданий = Новый Массив; + Для Каждого Элемент Из СписокРегламентныхЗаданий Цикл + Если Элемент.Наименование <> "" Тогда + МассивРегламентныхЗаданий.Добавить(Новый Структура("УИД, Наименование", Элемент.УникальныйИдентификатор, + Элемент.Наименование)); + ИначеЕсли Элемент.Метаданные.Синоним <> "" Тогда + МассивРегламентныхЗаданий.Добавить(Новый Структура("УИД, Наименование", Элемент.УникальныйИдентификатор, + Элемент.Метаданные.Синоним)); + КонецЕсли; + КонецЦикла; + + Возврат МассивРегламентныхЗаданий; +КонецФункции + +&НаСервере +Функция ПараметрыОтчета() + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("Настройки", Отчет.КомпоновщикНастроек.Настройки); + ПараметрыОтчета.Вставить("ПользовательскиеНастройки", Отчет.КомпоновщикНастроек.ПользовательскиеНастройки); + ПараметрыОтчета.Вставить("ФиксированныеНастройки", Отчет.КомпоновщикНастроек.ФиксированныеНастройки); + ПараметрыОтчета.Вставить("ИдентификаторФормы", УникальныйИдентификатор); + + Возврат ПараметрыОтчета; +КонецФункции + +&НаСервере +Процедура ПолучитьИдентификаторРегламентногоЗадания(НазваниеСобытия, НаименованиеСобытия) + УстановитьПривилегированныйРежим(Истина); + ОтборПоРегламентнымЗаданиям = Новый Структура; + МетаданныеРегламентногоЗадания = Метаданные.РегламентныеЗадания.Найти(НазваниеСобытия); + Если МетаданныеРегламентногоЗадания <> Неопределено Тогда + ОтборПоРегламентнымЗаданиям.Вставить("Метаданные", МетаданныеРегламентногоЗадания); + Если НаименованиеСобытия <> Неопределено Тогда + ОтборПоРегламентнымЗаданиям.Вставить("Наименование", НаименованиеСобытия); + КонецЕсли; + РегЗадание = РегламентныеЗадания.ПолучитьРегламентныеЗадания(ОтборПоРегламентнымЗаданиям); + Если ЗначениеЗаполнено(РегЗадание) Тогда + ИдентификаторРегламентногоЗадания = РегЗадание[0].УникальныйИдентификатор; + КонецЕсли; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура СведенияОРегламентномЗадании(Расшифровка) + ИдентификаторРегламентногоЗадания = Неопределено; + РезультатРасшифровка = ОтчетПоРегламентномуЗаданию(Расшифровка); + ИмяРегламентногоЗадания = Расшифровка.Получить(1); + НаименованиеСобытия = Расшифровка.Получить(2); + Если ИмяРегламентногоЗадания <> "" Тогда + НазваниеСобытия = СтрЗаменить(ИмяРегламентногоЗадания, "РегламентноеЗадание." , ""); + ПолучитьИдентификаторРегламентногоЗадания(НазваниеСобытия, НаименованиеСобытия); + КонецЕсли; + ПараметрыФормы = Новый Структура("Отчет, ИдентификаторРегламентногоЗадания, Заголовок", + РезультатРасшифровка.Отчет, ИдентификаторРегламентногоЗадания, Расшифровка.Получить(2)); + ОткрытьФорму("Отчет.АнализЖурналаРегистрации.Форма.СведенияОРегламентномЗадании", ПараметрыФормы); +КонецПроцедуры + +&НаСервере +Функция ОтчетПоРегламентномуЗаданию(Расшифровка) + РезультатФормированияОтчета = Отчеты.АнализЖурналаРегистрации.РасшифровкаРегламентногоЗадания(Расшифровка); + Возврат РезультатФормированияОтчета; +КонецФункции + +&НаСервере +Функция СформироватьОтчетСервер(ПараметрыОтчета) + Если Не ПроверитьЗаполнение() Тогда + Возврат Новый Структура("ЗаданиеВыполнено", Истина); + КонецЕсли; + + ИБФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая(); + + ДлительныеОперации.ОтменитьВыполнениеЗадания(ИдентификаторЗадания); + + ИдентификаторЗадания = Неопределено; + + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать"); + + АдресРасшифровки = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + ПараметрыОтчета.Вставить("АдресРасшифровки", АдресРасшифровки); + + Если ИБФайловая Тогда + АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор); + Отчеты.АнализЖурналаРегистрации.Сформировать(ПараметрыОтчета, АдресХранилища); + РезультатВыполнения = Новый Структура("ЗаданиеВыполнено", Истина); + Иначе + РезультатВыполнения = ДлительныеОперации.ЗапуститьВыполнениеВФоне( + УникальныйИдентификатор, + "Отчеты.АнализЖурналаРегистрации.Сформировать", + ПараметрыОтчета, + НСтр("ru = 'Выполнение отчета: Анализ журнала регистрации'")); + + АдресХранилища = РезультатВыполнения.АдресХранилища; + ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания; + КонецЕсли; + + Если РезультатВыполнения.ЗаданиеВыполнено Тогда + ЗагрузитьПодготовленныеДанные(); + КонецЕсли; + + Возврат РезультатВыполнения; + +КонецФункции + +&НаСервере +Процедура ЗагрузитьПодготовленныеДанные() + РезультатВыполнения = ПолучитьИзВременногоХранилища(АдресХранилища); + Результат = РезультатВыполнения.Результат; + ДанныеРасшифровки = РезультатВыполнения.ДанныеРасшифровки; + + ИдентификаторЗадания = Неопределено; +КонецПроцедуры + +&НаКлиенте +Процедура Подключаемый_ПроверитьВыполнениеЗадания() + Попытка + Если ЗаданиеВыполнено(ИдентификаторЗадания) Тогда + ЗагрузитьПодготовленныеДанные(); + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать"); + Иначе + ДлительныеОперацииКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжидания); + ПодключитьОбработчикОжидания( + "Подключаемый_ПроверитьВыполнениеЗадания", + ПараметрыОбработчикаОжидания.ТекущийИнтервал, + Истина); + КонецЕсли; + Исключение + ОбщегоНазначенияКлиентСервер.УстановитьСостояниеПоляТабличногоДокумента(Элементы.Результат, "НеИспользовать"); + ВызватьИсключение; + КонецПопытки; +КонецПроцедуры + +&НаСервереБезКонтекста +Функция ЗаданиеВыполнено(ИдентификаторЗадания) + + Возврат ДлительныеОперации.ЗаданиеВыполнено(ИдентификаторЗадания); + +КонецФункции diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html new file mode 100644 index 000000000..8715ad433 --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Help/ru.html @@ -0,0 +1,11 @@ + +

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

                +

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

                +

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

                +

                ·         Контроль журнала регистрации

                +

                ·         Продолжительность работы регламентных заданий

                +

                Анализ активности пользователей – предназначен для получения статистической информации по активности пользователей (часов работы, подключений, количество введенных/измененных документов/справочников, количество ошибок и предупреждений при работе пользователя)

                +

                Активность пользователя –  предназначен для получения подробной статистики по активности выбранного пользователя (список созданных и измененных документов/справочников/бизнес процессов/задач)

                +

                Контроль журнала регистрации – список критичных записей журнала регистрации

                +

                Продолжительность работы регламентных заданий – отображает продолжительность работы сеансов регламентных заданий.

                +

                Подсистема не имеет встроенного функционала для рассылки отчетов, для рассылки необходимо наличие подсистемы «Рассылка отчетов»

                \ 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..a8cbd0b14 --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ManagerModule.bsl @@ -0,0 +1,1541 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////// +// ПРОГРАММНЫЙ ИНТЕРФЕЙС + +// Функция получает информацию по активности пользователей из журнала регистрации +// по переданному периоду +// +// Параметры +// ПараметрыОтчета - структура - набор параметров для формирования отчета: +// ДатаНачала - дата - начало периода, по которому будет собираться информация +// ДатаОкончания - дата - окончание периода, по которому будет собираться информация +// Пользователь - имя пользователя, по которому проводить анализ. Для варианта отчета +// "Активность пользователя" +// ПользователиИГруппы - группа(ы) пользователей и(или) пользователь(и), по которым проводить анализ +// Для варианта отчета "Анализ активности пользователей" +// ВариантОтчета - строка - "АктивностьПользователя" или "АнализАктивностиПользователей" +// ВыводитьБизнесПроцессы - булево - получать или нет информацию по бизнес процессам из журнала регистрации +// ВыводитьЗадачи - булево - получать или нет информацию по задачам из журнала регистрации +// ВыводитьСправочники - булево - получать или нет информацию по справочникам из журнала регистрации +// ВыводитьДокументы - булево - получать или нет информацию документов из журнала регистрации +// +// Возвращаемое значение +// таблица значений - таблица, содержащая не сгруппированную информацию по активности +// пользователей из журнала регистрации +// +Функция ДанныеИзЖурналаРегистрации(ПараметрыОтчета) Экспорт + + // Подготовка параметров отчета + ДатаНачала = ПараметрыОтчета.ДатаНачала; + ДатаОкончания = ПараметрыОтчета.ДатаОкончания; + Пользователь = ПараметрыОтчета.Пользователь; + ПользователиИГруппы = ПараметрыОтчета.ПользователиИГруппы; + ВариантОтчета = ПараметрыОтчета.ВариантОтчета; + + Если ВариантОтчета = "АктивностьПользователя" Тогда + ВыводитьБизнесПроцессы = ПараметрыОтчета.ВыводитьБизнесПроцессы; + ВыводитьЗадачи = ПараметрыОтчета.ВыводитьЗадачи; + ВыводитьСправочники = ПараметрыОтчета.ВыводитьСправочники; + ВыводитьДокументы = ПараметрыОтчета.ВыводитьДокументы; + Иначе + ВыводитьСправочники = Истина; + ВыводитьДокументы = Истина; + ВыводитьБизнесПроцессы = Ложь; + ВыводитьЗадачи = Ложь; + КонецЕсли; + + // Формируем таблицу исходных данных + ИсходныеДанные = Новый ТаблицаЗначений(); + ИсходныеДанные.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); + ИсходныеДанные.Колонки.Добавить("Неделя", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(10))); + ИсходныеДанные.Колонки.Добавить("Пользователь"); + ИсходныеДанные.Колонки.Добавить("ЧасовРаботы", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2))); + ИсходныеДанные.Колонки.Добавить("КоличествоЗапусков", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("СозданоДокументов", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("СозданоСправочников", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("ИзмененоДокументов", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("СозданоБизнесПроцессов", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("СозданоЗадач", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("ИзмененоБизнесПроцессов", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("ИзмененоЗадач", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("ИзмененоСправочников", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("Ошибок", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("Предупреждений", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИсходныеДанные.Колонки.Добавить("ВидОбъекта", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50))); + ИсходныеДанные.Колонки.Добавить("ОбъектСправочникДокумент"); + + ДанныеЖурналаРегистрации = Новый ТаблицаЗначений; + + Уровни = Новый Массив; + Уровни.Добавить(УровеньЖурналаРегистрации.Информация); + + События = Новый Массив; + События.Добавить("_$Session$_.Start"); // Начало сессии + События.Добавить("_$Session$_.Finish"); // Конец сессии + События.Добавить("_$Data$_.New"); // Добавление данных + События.Добавить("_$Data$_.Update"); // Изменение данных + + ИмяПриложения = Новый Массив; + ИмяПриложения.Добавить("1CV8C"); + + ПользовательФильтр = Новый Массив; + + // Получаем список пользователей + Если ВариантОтчета = "АктивностьПользователя" Тогда + ПользовательФильтр.Добавить(ИмяПользователяИБ(Пользователь)); + ИначеЕсли ТипЗнч(ПользователиИГруппы) = Тип("СписокЗначений") Тогда + + Для Каждого Элемент Из ПользователиИГруппы Цикл + ПользователиДляАнализа(ПользовательФильтр, Элемент.Значение); + КонецЦикла; + + Иначе + ПользователиДляАнализа(ПользовательФильтр, ПользователиИГруппы); + КонецЕсли; + + ОтборЖурналаРегистрации = Новый Структура("ДатаНачала, ДатаОкончания, ИмяПриложения, Уровень, Событие", + ДатаНачала, + ДатаОкончания, + ИмяПриложения, + Уровни, + События); + + Если ПользовательФильтр.Найти("ВсеПользователи") = Неопределено Тогда + ОтборЖурналаРегистрации.Вставить("Пользователь", ПользовательФильтр); + КонецЕсли; + + УстановитьПривилегированныйРежим(Истина); + ВыгрузитьЖурналРегистрации(ДанныеЖурналаРегистрации, ОтборЖурналаРегистрации); + УстановитьПривилегированныйРежим(Ложь); + + ДанныеЖурналаРегистрации.Сортировать("Сеанс, Дата"); + + // Добавляем соответствие УникальныйИдентификатор-ПользовательСсылка для дальнейшего использования + ИдентификаторыПользователей = ДанныеЖурналаРегистрации.ВыгрузитьКолонку("Пользователь"); + СоответствиеИдентификаторыПользователей = УникальныеИдентификаторыПользователей(ИдентификаторыПользователей); + + ТекущийСеанс = Неопределено; + ЧасовРаботы = 0; + КоличествоЗапусков = 0; + СозданоДокументов = 0; + СозданоСправочников = 0; + ИзмененоДокументов = 0; + ИзмененоСправочников= 0; + ВидОбъекта = Неопределено; + СтрокаИсходныхДанных= Неопределено; + НачалоСеанса = Неопределено; + + // Расчет данных, необходимых для составления отчета + Для Каждого СтрокаДанныхЖурналаРегистрации ИЗ ДанныеЖурналаРегистрации Цикл + Если СтрокаДанныхЖурналаРегистрации.ИмяПользователя = "" Тогда + Продолжить; + КонецЕсли; + Сеанс = СтрокаДанныхЖурналаРегистрации.Сеанс; + + Если НЕ ЗначениеЗаполнено(СтрокаДанныхЖурналаРегистрации.Сеанс) + ИЛИ НЕ ЗначениеЗаполнено(СтрокаДанныхЖурналаРегистрации.Дата) Тогда + Продолжить; + КонецЕсли; + + ИмяПользователяСсылка = СоответствиеИдентификаторыПользователей[СтрокаДанныхЖурналаРегистрации.Пользователь]; + + // Расчет продолжительности работы пользователей и количества запусков программы + Если ТекущийСеанс <> Сеанс + ИЛИ СтрокаДанныхЖурналаРегистрации.Событие = "_$Session$_.Start" Тогда + Если СтрокаИсходныхДанных <> Неопределено Тогда + СтрокаИсходныхДанных.ЧасовРаботы = ЧасовРаботы; + СтрокаИсходныхДанных.КоличествоЗапусков = КоличествоЗапусков; + КонецЕсли; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + ЧасовРаботы = 0; + КоличествоЗапусков = 0; + ТекущийСеанс = Сеанс; + НачалоСеанса = СтрокаДанныхЖурналаРегистрации.Дата; + КонецЕсли; + + Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Session$_.Finish" Тогда + КоличествоЗапусков = КоличествоЗапусков + 1; + Если НачалоСеанса <> Неопределено Тогда + // Проверяем закончился сеанс пользователя в этот же день или на следующий + Если НачалоДня(СтрокаДанныхЖурналаРегистрации.Дата) > НачалоДня(НачалоСеанса) Тогда + // Если окончание сеанса произошло на следующий день, то необходимо заполнить часы работы за предыдущий день + Разность = КонецДня(НачалоСеанса) - НачалоСеанса; + ЧасовРаботы = Разность/60/60; + СтрокаИсходныхДанных.ЧасовРаботы = ЧасовРаботы; + ДеньСеанса = КонецДня(НачалоСеанса) + 86400; + Пока КонецДня(СтрокаДанныхЖурналаРегистрации.Дата) > ДеньСеанса Цикл + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = ДеньСеанса; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + ЧасовРаботы = (ДеньСеанса - НачалоДня(ДеньСеанса))/60/60; + СтрокаИсходныхДанных.ЧасовРаботы = ЧасовРаботы; + ДеньСеанса = ДеньСеанса + 86400; + КонецЦикла; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + ЧасовРаботы = (СтрокаДанныхЖурналаРегистрации.Дата - НачалоДня(ДеньСеанса))/60/60; + СтрокаИсходныхДанных.ЧасовРаботы = ЧасовРаботы; + Иначе + Разность = (СтрокаДанныхЖурналаРегистрации.Дата - НачалоСеанса)/60/60; + ЧасовРаботы = ЧасовРаботы + Разность; + КонецЕсли; + КонецЕсли; + КонецЕсли; + + // Расчёт количества созданных документов и справочников + Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Data$_.New" Тогда + Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Документ.") > 0 + И ВыводитьДокументы Тогда + ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; + ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; + СозданоДокументов = СозданоДокументов + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.ВидОбъекта = ВидОбъекта; + СтрокаИсходныхДанных.СозданоДокументов = СозданоДокументов; + СтрокаИсходныхДанных.ОбъектСправочникДокумент = ОбъектСправочникДокумент; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + КонецЕсли; + Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Справочник.") > 0 + И ВыводитьСправочники Тогда + ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; + ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; + СозданоСправочников = СозданоСправочников + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.ВидОбъекта = ВидОбъекта; + СтрокаИсходныхДанных.СозданоСправочников = СозданоСправочников; + СтрокаИсходныхДанных.ОбъектСправочникДокумент = ОбъектСправочникДокумент; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + КонецЕсли; + КонецЕсли; + + // Расчёт количества изменённых документов и справочников + Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Data$_.Update" Тогда + Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Документ.") > 0 + И ВыводитьДокументы Тогда + ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; + ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; + ИзмененоДокументов = ИзмененоДокументов + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.ИзмененоДокументов = ИзмененоДокументов; + СтрокаИсходныхДанных.ВидОбъекта = ВидОбъекта; + СтрокаИсходныхДанных.ОбъектСправочникДокумент = ОбъектСправочникДокумент; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + КонецЕсли; + Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Справочник.") > 0 + И ВыводитьСправочники Тогда + ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; + ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; + ИзмененоСправочников = ИзмененоСправочников + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.ИзмененоСправочников = ИзмененоСправочников; + СтрокаИсходныхДанных.ВидОбъекта = ВидОбъекта; + СтрокаИсходныхДанных.ОбъектСправочникДокумент = ОбъектСправочникДокумент; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + КонецЕсли; + КонецЕсли; + + // Расчёт количества созданных БизнесПроцессов и Задач + Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Data$_.New" Тогда + Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "БизнесПроцесс.") > 0 + И ВыводитьБизнесПроцессы Тогда + ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; + ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; + СозданоБизнесПроцессов = СозданоБизнесПроцессов + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.ВидОбъекта = ВидОбъекта; + СтрокаИсходныхДанных.СозданоБизнесПроцессов = СозданоБизнесПроцессов; + СтрокаИсходныхДанных.ОбъектСправочникДокумент = ОбъектСправочникДокумент; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + КонецЕсли; + Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Задача.") > 0 + И ВыводитьЗадачи Тогда + ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; + ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; + СозданоЗадач = СозданоЗадач + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.ВидОбъекта = ВидОбъекта; + СтрокаИсходныхДанных.СозданоЗадач = СозданоЗадач; + СтрокаИсходныхДанных.ОбъектСправочникДокумент = ОбъектСправочникДокумент; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + КонецЕсли; + КонецЕсли; + + // Расчёт количества измененных БизнесПроцессов и задач + Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Data$_.Update" Тогда + Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "БизнесПроцесс.") > 0 + И ВыводитьБизнесПроцессы Тогда + ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; + ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; + ИзмененоБизнесПроцессов = ИзмененоБизнесПроцессов + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.ВидОбъекта = ВидОбъекта; + СтрокаИсходныхДанных.ИзмененоБизнесПроцессов = ИзмененоБизнесПроцессов; + СтрокаИсходныхДанных.ОбъектСправочникДокумент = ОбъектСправочникДокумент; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + КонецЕсли; + Если Найти(СтрокаДанныхЖурналаРегистрации.Метаданные, "Задача.") > 0 + И ВыводитьЗадачи Тогда + ВидОбъекта = СтрокаДанныхЖурналаРегистрации.ПредставлениеМетаданных; + ОбъектСправочникДокумент = СтрокаДанныхЖурналаРегистрации.Данные; + ИзмененоЗадач = ИзмененоЗадач + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.ВидОбъекта = ВидОбъекта; + СтрокаИсходныхДанных.ИзмененоЗадач = ИзмененоЗадач; + СтрокаИсходныхДанных.ОбъектСправочникДокумент = ОбъектСправочникДокумент; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + КонецЕсли; + КонецЕсли; + + СозданоДокументов = 0; + СозданоСправочников = 0; + ИзмененоДокументов = 0; + ИзмененоСправочников = 0; + СозданоБизнесПроцессов = 0; + ИзмененоБизнесПроцессов = 0; + ИзмененоЗадач = 0; + СозданоЗадач = 0; + ВидОбъекта = Неопределено; + + КонецЦикла; + + Если СтрокаИсходныхДанных <> Неопределено Тогда + СтрокаИсходныхДанных.ЧасовРаботы = ЧасовРаботы; + СтрокаИсходныхДанных.КоличествоЗапусков = КоличествоЗапусков; + КонецЕсли; + + Если ВариантОтчета = "АнализАктивностиПользователей" Тогда + + ДанныеЖурналаРегистрации.Сортировать("Дата"); + + // Расчет максимального количества одновременных сессий + ОдновременноСессий = Новый ТаблицаЗначений(); + ОдновременноСессий.Колонки.Добавить("ДатаОдновременноРаботавшихПользователей", + Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.Дата))); + ОдновременноСессий.Колонки.Добавить("ОдновременноРаботавшихПользователей", + Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ОдновременноСессий.Колонки.Добавить("СписокОдновременноРаботавшихПользователей"); + + МассивПользователей = Новый Массив; + МаксМассивПользователей = Новый Массив; + ОдновременноРаботавшихПользователей = 0; + Счетчик = 0; + ТекущДата = Неопределено; + СтрокаТаблицы = Неопределено; + + Для Каждого СтрокаДанныхЖурналаРегистрации Из ДанныеЖурналаРегистрации Цикл + Если Не ЗначениеЗаполнено(СтрокаДанныхЖурналаРегистрации.Дата) + Или СтрокаДанныхЖурналаРегистрации.ИмяПользователя = "" Тогда + Продолжить; + КонецЕсли; + + ИмяПользователяСсылка = СоответствиеИдентификаторыПользователей[СтрокаДанныхЖурналаРегистрации.Пользователь]; + Если ИмяПользователяСсылка = Неопределено Тогда + Продолжить; + КонецЕсли; + + ИмяПользователяСтрока = ИмяПользователяИБ(ИмяПользователяСсылка); + + ДатаОдновременноРаботавшихПользователей = НачалоДня(СтрокаДанныхЖурналаРегистрации.Дата); + + // При смене дня обнуляем все данные по одновременным сессиям и заполняем данные за прошедший день + Если ТекущДата <> ДатаОдновременноРаботавшихПользователей Тогда + Если ОдновременноРаботавшихПользователей <> 0 Тогда + СформироватьСтрокуОдновременноСессий(ОдновременноСессий, МаксМассивПользователей, + ОдновременноРаботавшихПользователей, ТекущДата); + КонецЕсли; + ОдновременноРаботавшихПользователей = 0; + Счетчик = 0; + МассивПользователей.Очистить(); + ТекущДата = ДатаОдновременноРаботавшихПользователей; + КонецЕсли; + + Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Session$_.Start" Тогда + Счетчик = Счетчик + 1; + МассивПользователей.Добавить(ИмяПользователяСтрока); + ИначеЕсли СтрокаДанныхЖурналаРегистрации.Событие = "_$Session$_.Finish" Тогда + ИндексПользователя = МассивПользователей.Найти(ИмяПользователяСтрока); + Если Не ИндексПользователя = Неопределено Тогда + МассивПользователей.Удалить(ИндексПользователя); + Счетчик = Счетчик - 1; + КонецЕсли; + КонецЕсли; + + // Проверяем значение счетчика и сравниваем с максимальным значением + Счетчик = Макс(Счетчик, 0); + Если Счетчик > ОдновременноРаботавшихПользователей Тогда + МаксМассивПользователей = Новый Массив; + Для Каждого Элемент Из МассивПользователей Цикл + МаксМассивПользователей.Добавить(Элемент); + КонецЦикла; + КонецЕсли; + ОдновременноРаботавшихПользователей = Макс(ОдновременноРаботавшихПользователей, Счетчик); + КонецЦикла; + + Если ОдновременноРаботавшихПользователей <> 0 Тогда + СформироватьСтрокуОдновременноСессий(ОдновременноСессий, МаксМассивПользователей, + ОдновременноРаботавшихПользователей, ТекущДата); + КонецЕсли; + + // Расчет количества ошибок и предупреждений + ДанныеЖурналаРегистрации = Неопределено; + Ошибок = 0; + Предупреждений = 0; + ДанныеЖурналаРегистрации = ИнформацияПоОшибкамЖурналаРегистрации(ДатаНачала, ДатаОкончания); + + Для Каждого СтрокаДанныхЖурналаРегистрации ИЗ ДанныеЖурналаРегистрации Цикл + Если СтрокаДанныхЖурналаРегистрации.ИмяПользователя = "" Тогда + Продолжить; + КонецЕсли; + Если ПользовательФильтр.Найти(СтрокаДанныхЖурналаРегистрации.ИмяПользователя) = Неопределено + И ПользовательФильтр.Количество() <> 0 Тогда + Продолжить; + КонецЕсли; + + ИмяПользователяСсылка = СоответствиеИдентификаторыПользователей[СтрокаДанныхЖурналаРегистрации.Пользователь]; + + Если СтрокаДанныхЖурналаРегистрации.Уровень = УровеньЖурналаРегистрации.Ошибка Тогда + Ошибок = Ошибок + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.Ошибок = Ошибок; + КонецЕсли; + + Если СтрокаДанныхЖурналаРегистрации.Уровень = УровеньЖурналаРегистрации.Предупреждение Тогда + Предупреждений = Предупреждений + 1; + СтрокаИсходныхДанных = ИсходныеДанные.Добавить(); + СтрокаИсходныхДанных.Дата = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаИсходныхДанных.Неделя = СтрокаНеделяГода(СтрокаДанныхЖурналаРегистрации.Дата); + СтрокаИсходныхДанных.Пользователь = ИмяПользователяСсылка; + СтрокаИсходныхДанных.Предупреждений = Предупреждений; + КонецЕсли; + + Ошибок = 0; + Предупреждений = 0; + КонецЦикла; + + КонецЕсли; + + Возврат Новый Структура("АнализАктивностиПользователей, ОдновременноСессий", + ИсходныеДанные, ОдновременноСессий); +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +// Процедура формирования отчета +// +// Параметры +// ПараметрыОтчета - структура - набор параметров, необходимых для построения отчета +// АдресХранилища - адрес временного хранилища +Процедура Сформировать(ПараметрыОтчета, АдресХранилища) Экспорт + Результат = Новый Структура; + ДанныеРасшифровкиОбъект = Новый ДанныеРасшифровкиКомпоновкиДанных; + ДокументРезультат = Новый ТабличныйДокумент; + ОтчетОбъект = Отчеты.АнализЖурналаРегистрации.Создать(); + + ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(ПараметрыОтчета.Настройки); + ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьПользовательскиеНастройки(ПараметрыОтчета.ПользовательскиеНастройки); + ОтчетОбъект.КомпоновщикНастроек.ЗагрузитьФиксированныеНастройки(ПараметрыОтчета.ФиксированныеНастройки); + ОтчетОбъект.СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровкиОбъект); + ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиОбъект, ПараметрыОтчета.АдресРасшифровки); + + ПоместитьВоВременноеХранилище(Новый Структура("Результат, ДанныеРасшифровки", + ДокументРезультат, ДанныеРасшифровки), АдресХранилища); +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Анализ активности пользователей + +Функция ПользователиДляАнализа(ПользовательФильтр, Элемент) + + Если ТипЗнч(Элемент) = Тип("СправочникСсылка.Пользователи") Тогда + ИмяПользователяИБ = ИмяПользователяИБ(Элемент); + + Если ИмяПользователяИБ <> Неопределено Тогда + ПользовательФильтр.Добавить(ИмяПользователяИБ); + КонецЕсли; + + ИначеЕсли ТипЗнч(Элемент) = Тип("СправочникСсылка.ГруппыПользователей") Тогда + + ВсеПользователи = Справочники.ГруппыПользователей.ВсеПользователи; + Если Элемент = ВсеПользователи Тогда + ПользовательФильтр.Добавить("ВсеПользователи"); + Возврат ПользовательФильтр; + КонецЕсли; + + Для Каждого ПользовательГруппы Из Элемент.Состав Цикл + ИмяПользователяИБ = ИмяПользователяИБ(ПользовательГруппы.Пользователь); + + Если ИмяПользователяИБ <> Неопределено Тогда + ПользовательФильтр.Добавить(ИмяПользователяИБ); + КонецЕсли; + + КонецЦикла; + + КонецЕсли; + + Возврат ПользовательФильтр; +КонецФункции + +Функция УникальныеИдентификаторыПользователей(ИдентификаторыПользователей) + МассивУникальныеИдентификаторыПользователей = Новый Массив; + + ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивУникальныеИдентификаторыПользователей, + ИдентификаторыПользователей); + СоответствиеУИД = Новый Соответствие; + Для Каждого Элемент Из МассивУникальныеИдентификаторыПользователей Цикл + Если ЗначениеЗаполнено(Элемент) Тогда + ИмяПользователяСсылка = ПользовательСсылка(Элемент); + ИдентификаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ИмяПользователяСсылка, "ИдентификаторПользователяИБ"); + + Если ИдентификаторПользователяИБ <> Неопределено Тогда + СоответствиеУИД.Вставить(Элемент, ИмяПользователяСсылка); + КонецЕсли; + + КонецЕсли; + КонецЦикла; + + Возврат СоответствиеУИД; +КонецФункции + +Функция ПользовательСсылка(ПользовательУИД) + Возврат Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ", ПользовательУИД); +КонецФункции + +Функция ИмяПользователяИБ(ПользовательСсылка) Экспорт + УстановитьПривилегированныйРежим(Истина); + ИдентификаторПользователяИБ = ОбщегоНазначения.ПолучитьЗначениеРеквизита(ПользовательСсылка, "ИдентификаторПользователяИБ"); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ИдентификаторПользователяИБ); + + Если ПользовательИБ <> Неопределено Тогда + Возврат ПользовательИБ.Имя; + Иначе + Возврат Неопределено; + КонецЕсли; + +КонецФункции + +Функция СтрокаНеделяГода(ДатаГода) + Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru='Неделя %1'"), НеделяГода(ДатаГода)); +КонецФункции + +Процедура СформироватьСтрокуОдновременноСессий(ОдновременноСессий, МаксМассивПользователей, + ОдновременноРаботавшихПользователей, ТекущДата) + ВременныйМассив = Новый Массив; + Индекс = 0; + Для Каждого Элемент Из МаксМассивПользователей Цикл + ВременныйМассив.Вставить(Индекс, Элемент); + СчетчикКоличестваСеансовПользователя = 0; + Для Каждого ИмяПользователя Из ВременныйМассив Цикл + Если ИмяПользователя = Элемент Тогда + СчетчикКоличестваСеансовПользователя = СчетчикКоличестваСеансовПользователя + 1; + ПользовательИНомер = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (%2)'"), Элемент, СчетчикКоличестваСеансовПользователя); + КонецЕсли; + КонецЦикла; + СтрокаТаблицы = ОдновременноСессий.Добавить(); + СтрокаТаблицы.ДатаОдновременноРаботавшихПользователей = ТекущДата; + СтрокаТаблицы.ОдновременноРаботавшихПользователей = ОдновременноРаботавшихПользователей; + СтрокаТаблицы.СписокОдновременноРаботавшихПользователей = ПользовательИНомер; + Индекс = Индекс + 1; + КонецЦикла; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Продолжительность работы регламентных заданий + +// Функция формирует отчет по работе регламентных заданий +// +// Параметры +// ПараметрыЗаполнения - структура - набор параметров, необходимых для построения отчета: +// ДатаНачала - дата - начало периода, по которому будет собираться информация +// ДатаОкончания - дата - окончание периода, по которому будет собираться информация +// РазмерОдновременноСессий - число - минимальное количество одновременно работавших регламентных +// заданий для отображения в таблице +// МинимальнаяПродолжительностьСеансовРегламентныхЗаданий - число - минимальная продолжительность +// сеансов регламентных заданий в секундах +// ОтображатьФоновыеЗадания - булево - если истина, на диаграмме ганта будет выводиться строка с +// интервалами сеансов фоновых заданий +// ВыводитьЗаголовок - ТипВыводаТекстаКомпоновкиДанных - предназначен для отключения/включения заголовка +// ВыводитьОтбор - ТипВыводаТекстаКомпоновкиДанных - предназначен для отключения/включения отображения отбора +// СкрытьРегламентныеЗадания - СписокЗначений - список регламентных заданий, которые необходимо исключить из отчета +// +Функция СформироватьОтчетПоПродолжительностиРаботыРегламентныхЗаданий(ПараметрыЗаполнения) Экспорт + + // Параметры отчета + ДатаНачала = ПараметрыЗаполнения.ДатаНачала; + ДатаОкончания = ПараметрыЗаполнения.ДатаОкончания; + РазмерОдновременноСессий = ПараметрыЗаполнения.РазмерОдновременноСессий; + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий = + ПараметрыЗаполнения.МинимальнаяПродолжительностьСеансовРегламентныхЗаданий; + ОтображатьФоновыеЗадания = ПараметрыЗаполнения.ОтображатьФоновыеЗадания; + ВыводитьЗаголовок = ПараметрыЗаполнения.ВыводитьЗаголовок; + ВыводитьОтбор = ПараметрыЗаполнения.ВыводитьОтбор; + ЗаголовокОтчета = ПараметрыЗаполнения.ЗаголовокОтчета; + СкрытьРегламентныеЗадания = ПараметрыЗаполнения.СкрытьРегламентныеЗадания; + + Результат = Новый Структура; + Отчет = Новый ТабличныйДокумент; + + // Получаем данные для построения отчета + ПолучитьДанные = ДанныеДляОтчетаПоПродолжительностиРаботыРегламентныхЗаданий(ПараметрыЗаполнения); + ТаблицаСеансыРегламентныхЗаданий = ПолучитьДанные.ТаблицаСеансыРегламентныхЗаданий; + ОдновременноСессий = ПолучитьДанные.ИтогоОдновременноРегламентныхЗаданий; + КоличествоЗапусков = ПолучитьДанные.КоличествоЗапусков; + Макет = Отчеты.АнализЖурналаРегистрации.ПолучитьМакет("ПродолжительностьРаботыРегламентныхЗаданий"); + + // Набор цветов для фона диаграммы и таблицы + ЦветаФона = Новый Массив; + ЦветаФона.Добавить(WebЦвета.Белый); + ЦветаФона.Добавить(WebЦвета.СветлоЖелтый); + ЦветаФона.Добавить(WebЦвета.Лимонный); + ЦветаФона.Добавить(WebЦвета.НавахоБелый); + + // Формируем шапку отчета + Если ВыводитьЗаголовок.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить + И ВыводитьЗаголовок.Использование + ИЛИ Не ВыводитьЗаголовок.Использование Тогда + Отчет.Вывести(Макет.ПолучитьОбласть("ШапкаОтчета")); + КонецЕсли; + + Если ВыводитьОтбор.Значение = ТипВыводаТекстаКомпоновкиДанных.Выводить + И ВыводитьОтбор.Использование + Или Не ВыводитьОтбор.Использование Тогда + Область = Макет.ПолучитьОбласть("Отбор"); + Если МинимальнаяПродолжительностьСеансовРегламентныхЗаданий > 0 Тогда + РежимОтображенияИнтервалов = НСтр("ru = 'Отключено'"); + Иначе + РежимОтображенияИнтервалов = НСтр("ru = 'Включено'"); + КонецЕсли; + Область.Параметры.ДатаНачала = ДатаНачала; + Область.Параметры.ДатаОкончания = ДатаОкончания; + Область.Параметры.РежимОтображенияИнтервалов = РежимОтображенияИнтервалов; + Отчет.Вывести(Область); + КонецЕсли; + + Если ЗначениеЗаполнено(ОдновременноСессий) Тогда + + Отчет.Вывести(Макет.ПолучитьОбласть("ШапкаТаблицы")); + + // Формируем таблицу максимального количества одновременно запущенных РЗ + ТекущееКоличествоСессий = 0; + ИндексЦвета = 3; + Для Каждого СтрокаОдновременноСессий Из ОдновременноСессий Цикл + Область = Макет.ПолучитьОбласть("Таблица"); + Если ТекущееКоличествоСессий <> 0 + И ТекущееКоличествоСессий <> СтрокаОдновременноСессий.ОдновременноРегламентныхЗаданий + И ИндексЦвета <> 0 Тогда + ИндексЦвета = ИндексЦвета - 1; + КонецЕсли; + Если СтрокаОдновременноСессий.ОдновременноРегламентныхЗаданий = 1 Тогда + ИндексЦвета = 0; + КонецЕсли; + Область.Параметры.Заполнить(СтрокаОдновременноСессий); + ЦветФонаТаблицы = ЦветаФона.Получить(ИндексЦвета); + Область.Области.Таблица.ЦветФона = ЦветФонаТаблицы; + Отчет.Вывести(Область); + ТекущееКоличествоСессий = СтрокаОдновременноСессий.ОдновременноРегламентныхЗаданий; + МассивРегламентныхЗаданий = СтрокаОдновременноСессий.СписокРегламентныхЗаданий; + ИндексРегламентногоЗадания = 0; + Отчет.НачатьГруппуСтрок(, Ложь); + Для Каждого Элемент Из МассивРегламентныхЗаданий Цикл + Если Не ТипЗнч(Элемент) = Тип("Число") + И Не ТипЗнч(Элемент) = Тип("Дата") Тогда + Область = Макет.ПолучитьОбласть("СписокРегламентныхЗаданий"); + Область.Параметры.СписокРегламентныхЗаданий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (сеанс %2)'"), Элемент, МассивРегламентныхЗаданий.Получить(ИндексРегламентногоЗадания+1)); + ИначеЕсли Не ТипЗнч(Элемент) = Тип("Дата") + И Не ТипЗнч(Элемент) = Тип("Строка") Тогда + Область.Параметры.РасшифровкаЗадания = Новый Массив; + Область.Параметры.РасшифровкаЗадания.Добавить("РасшифровкаРегламентногоЗадания"); + Область.Параметры.РасшифровкаЗадания.Добавить(Элемент); + ИмяРегламентногоЗадания = МассивРегламентныхЗаданий.Получить(ИндексРегламентногоЗадания-1); + Область.Параметры.РасшифровкаЗадания.Добавить(ИмяРегламентногоЗадания); + Область.Параметры.РасшифровкаЗадания.Добавить(ДатаНачала); + Область.Параметры.РасшифровкаЗадания.Добавить(ДатаОкончания); + Отчет.Вывести(Область); + КонецЕсли; + ИндексРегламентногоЗадания = ИндексРегламентногоЗадания + 1; + КонецЦикла; + Отчет.ЗакончитьГруппуСтрок(); + КонецЦикла; + КонецЕсли; + + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + + // Получаем ДиаграммуГанта и задаем параметры, необходимые для ее заполнения + Область = Макет.ПолучитьОбласть("Диаграмма"); + ДиаграммаГанта = Область.Рисунки.ДиаграммаГанта.Объект; + ДиаграммаГанта.Обновление = Ложь; + + Серия = ДиаграммаГанта.Серии.Добавить(); + + ТекущееСобытие = Неопределено; + ОбщаяПродолжительностьРЗ = 0; + Точка = Неопределено; + РасшифровкаТочки = Неопределено; + СтрокаКоличествоЗапусков = Неопределено; + ЗапусковРегламентногоЗадания = 0; + ПризнакСменыТочки = Ложь; + + // Заполняем диаграмму ганта + Для Каждого СтрокаРегламентныеЗадания Из ТаблицаСеансыРегламентныхЗаданий Цикл + ДлительностьИнтервалаРегламентногоЗадания = СтрокаРегламентныеЗадания.ДатаОкончанияЗадания - + СтрокаРегламентныеЗадания.ДатаЗапускаЗадания; + Если ДлительностьИнтервалаРегламентногоЗадания >= МинимальнаяПродолжительностьСеансовРегламентныхЗаданий Тогда + Если ТекущееСобытие <> СтрокаРегламентныеЗадания.НазваниеСобытия Тогда + Если ТекущееСобытие <> Неопределено + И ПризнакСменыТочки Тогда + Точка.Расшифровка.Добавить(ЗапусковРегламентногоЗадания); + Точка.Расшифровка.Добавить(ОбщаяПродолжительностьРЗ); + Точка.Расшифровка.Добавить(ДатаНачала); + Точка.Расшифровка.Добавить(ДатаОкончания); + ТочкаНазвание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (%2 из %3)'"), Точка.Значение, + ЗапусковРегламентногоЗадания, Строка(СтрокаКоличествоЗапусков.Запусков)); + Точка.Значение = ТочкаНазвание; + КонецЕсли; + СтрокаКоличествоЗапусков = КоличествоЗапусков.Найти( + СтрокаРегламентныеЗадания.НазваниеСобытия, "НазваниеСобытия"); + // Не заполняем расшифровку для фоновых заданий + Если СтрокаРегламентныеЗадания.СобытиеМетаданные <> "" Тогда + ТочкаНазвание = СтрокаРегламентныеЗадания.НазваниеСобытия; + Точка = ДиаграммаГанта.УстановитьТочку(ТочкаНазвание); + Точка.Расшифровка = Новый Массив; + ИнтервалНачало = Новый Массив; + ИнтервалКонец = Новый Массив; + СеансРегламентногоЗадания = Новый Массив; + Точка.Расшифровка.Добавить("РасшифровкаТочки"); + Точка.Расшифровка.Добавить(СтрокаРегламентныеЗадания.СобытиеМетаданные); + Точка.Расшифровка.Добавить(СтрокаРегламентныеЗадания.НазваниеСобытия); + Точка.Расшифровка.Добавить(СтрокаКоличествоЗапусков.Отменено); + Точка.Расшифровка.Добавить(СтрокаКоличествоЗапусков.ОшибкаВыполнения); + Точка.Расшифровка.Добавить(ИнтервалНачало); + Точка.Расшифровка.Добавить(ИнтервалКонец); + Точка.Расшифровка.Добавить(СеансРегламентногоЗадания); + Точка.Расшифровка.Добавить(МинимальнаяПродолжительностьСеансовРегламентныхЗаданий); + ТекущееСобытие = СтрокаРегламентныеЗадания.НазваниеСобытия; + ОбщаяПродолжительностьРЗ = 0; + ЗапусковРегламентногоЗадания = 0; + Точка.Картинка = БиблиотекаКартинок.РегламентноеЗадание; + ИначеЕсли Не ЗначениеЗаполнено(СтрокаРегламентныеЗадания.СобытиеМетаданные) Тогда + ТочкаНазвание = НСтр("ru = 'Фоновые задания'"); + Точка = ДиаграммаГанта.УстановитьТочку(ТочкаНазвание); + ОбщаяПродолжительностьРЗ = 0; + КонецЕсли; + КонецЕсли; + Значение = ДиаграммаГанта.ПолучитьЗначение(Точка, Серия); + Интервал = Значение.Добавить(); + Интервал.Начало = СтрокаРегламентныеЗадания.ДатаЗапускаЗадания; + Интервал.Конец = СтрокаРегламентныеЗадания.ДатаОкончанияЗадания; + Интервал.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 - %2'"), Формат(Интервал.Начало, "ДЛФ=T"), Формат(Интервал.Конец, "ДЛФ=T")); + ПризнакСменыТочки = Ложь; + // Не заполняем расшифровку для фоновых заданий + Если СтрокаРегламентныеЗадания.СобытиеМетаданные <> "" Тогда + ИнтервалНачало.Добавить(СтрокаРегламентныеЗадания.ДатаЗапускаЗадания); + ИнтервалКонец.Добавить(СтрокаРегламентныеЗадания.ДатаОкончанияЗадания); + СеансРегламентногоЗадания.Добавить(СтрокаРегламентныеЗадания.Сеанс); + ОбщаяПродолжительностьРЗ = ДлительностьИнтервалаРегламентногоЗадания + ОбщаяПродолжительностьРЗ; + ЗапусковРегламентногоЗадания = ЗапусковРегламентногоЗадания + 1; + ПризнакСменыТочки = Истина; + КонецЕсли; + КонецЕсли; + КонецЦикла; + + Если ЗапусковРегламентногоЗадания <> 0 + И ЗначениеЗаполнено(Точка.Расшифровка) Тогда + // Присваиваем расшифровку последней точке + Точка.Расшифровка.Добавить(ЗапусковРегламентногоЗадания); + Точка.Расшифровка.Добавить(ОбщаяПродолжительностьРЗ); + Точка.Расшифровка.Добавить(ДатаНачала); + Точка.Расшифровка.Добавить(ДатаОкончания); + ТочкаНазвание = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 (%2 из %3)'"), Точка.Значение, + ЗапусковРегламентногоЗадания, Строка(СтрокаКоличествоЗапусков.Запусков)); + Точка.Значение = ТочкаНазвание; + КонецЕсли; + + // Устанавливаем настройки отображения диаграммы + ЦветаДиаграммыГанта(ДатаНачала, ДиаграммаГанта, ОдновременноСессий, ЦветаФона); + ПериодАнализа = ДатаОкончания - ДатаНачала; + ШкалаВремениДиаграммыГанта(ДиаграммаГанта, ПериодАнализа); + + КоличествоКолонок = ДиаграммаГанта.Точки.Количество(); + Область.Рисунки.ДиаграммаГанта.Высота = 15 + 10 * КоличествоКолонок; + Область.Рисунки.ДиаграммаГанта.Ширина = 450; + ДиаграммаГанта.АвтоОпределениеПолногоИнтервала = Ложь; + ДиаграммаГанта.ОтображениеИнтервала = ОтображениеИнтервалаДиаграммыГанта.Плоский; + ДиаграммаГанта.ОтображатьЛегенду = Ложь; + ДиаграммаГанта.РастягиваниеПоВертикали = РастягиваниеПоВертикалиДиаграммыГанта.РастягиватьСтрокиИДанные; + ДиаграммаГанта.УстановитьПолныйИнтервал(ДатаНачала, ДатаОкончания); + ДиаграммаГанта.Обновление = Истина; + + Отчет.Вывести(Область); + + Результат.Вставить("Отчет", Отчет); + Возврат Результат; +КонецФункции + +// Функция получает информацию по регламентным задания из журнала регистрации +// +// Параметры +// ПараметрыЗаполнения - структура - набор параметров, необходимых для построения отчета: +// ДатаНачала - дата - начало периода, по которому будет собираться информация +// ДатаОкончания - дата - окончание периода, по которому будет собираться информация +// РазмерОдновременноСессий - число - минимальное количество одновременно работавших регламентных +// заданий для отображения в таблице +// МинимальнаяПродолжительностьСеансовРегламентныхЗаданий - число - минимальная продолжительность +// сеансов регламентных заданий в секундах +// ОтображатьФоновыеЗадания - булево - если истина, на диаграмме ганта будет выводиться строка с +// интервалами сеансов фоновых заданий +// СкрытьРегламентныеЗадания - СписокЗначений - список регламентных заданий, которые необходимо исключить из отчета +// +// Возвращаемое значение +// таблица значений - таблица, содержащая информацию по работе регламентных заданий +// из журнала регистрации +// +Функция ДанныеДляОтчетаПоПродолжительностиРаботыРегламентныхЗаданий(ПараметрыЗаполнения) + + ДатаНачала = ПараметрыЗаполнения.ДатаНачала; + ДатаОкончания = ПараметрыЗаполнения.ДатаОкончания; + РазмерОдновременноСессий = ПараметрыЗаполнения.РазмерОдновременноСессий; + ОтображатьФоновыеЗадания = ПараметрыЗаполнения.ОтображатьФоновыеЗадания; + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий = + ПараметрыЗаполнения.МинимальнаяПродолжительностьСеансовРегламентныхЗаданий; + СкрытьРегламентныеЗадания = ПараметрыЗаполнения.СкрытьРегламентныеЗадания; + + ДанныеЖурналаРегистрации = Новый ТаблицаЗначений; + + Уровни = Новый Массив; + Уровни.Добавить(УровеньЖурналаРегистрации.Информация); + Уровни.Добавить(УровеньЖурналаРегистрации.Предупреждение); + Уровни.Добавить(УровеньЖурналаРегистрации.Ошибка); + + СобытияРЗ = Новый Массив; + СобытияРЗ.Добавить("_$Job$_.Start"); + СобытияРЗ.Добавить("_$Job$_.Cancel"); + СобытияРЗ.Добавить("_$Job$_.Fail"); + СобытияРЗ.Добавить("_$Job$_.Succeed"); + + УстановитьПривилегированныйРежим(Истина); + ВыгрузитьЖурналРегистрации(ДанныеЖурналаРегистрации, + Новый Структура("Уровень, ДатаНачала, ДатаОкончания, Событие", + Уровни, + ДатаНачала, + ДатаОкончания, + СобытияРЗ)); + + // Формируем данные для отбора по регламентным заданиям + СписокВсехРегламентныхЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(); + СоответствиеМетаданныеИдентификатор = Новый Соответствие; + СоответствиеМетаданныеНазвание = Новый Соответствие; + СоответствиеНаименованиеИдентификатор = Новый Соответствие; + УстановитьПривилегированныйРежим(Ложь); + + Для Каждого РегЗадание Из СписокВсехРегламентныхЗаданий Цикл + СоответствиеМетаданныеИдентификатор.Вставить(РегЗадание.Метаданные, Строка(РегЗадание.УникальныйИдентификатор)); + СоответствиеНаименованиеИдентификатор.Вставить(РегЗадание.Наименование, Строка(РегЗадание.УникальныйИдентификатор)); + Если РегЗадание.Наименование <> "" Тогда + СоответствиеМетаданныеНазвание.Вставить(РегЗадание.Метаданные, РегЗадание.Наименование); + Иначе + СоответствиеМетаданныеНазвание.Вставить(РегЗадание.Метаданные, РегЗадание.Метаданные.Синоним); + КонецЕсли; + КонецЦикла; + + // Заполняем параметры, необходимые для определения одновременно работавших регламентных заданий + ПараметрыОдновременноСессий = Новый Структура; + ПараметрыОдновременноСессий.Вставить("ДанныеЖурналаРегистрации", ДанныеЖурналаРегистрации); + ПараметрыОдновременноСессий.Вставить("СоответствиеНаименованиеИдентификатор", СоответствиеНаименованиеИдентификатор); + ПараметрыОдновременноСессий.Вставить("СоответствиеМетаданныеИдентификатор", СоответствиеМетаданныеИдентификатор); + ПараметрыОдновременноСессий.Вставить("СоответствиеМетаданныеНазвание", СоответствиеМетаданныеНазвание); + ПараметрыОдновременноСессий.Вставить("СкрытьРегламентныеЗадания", СкрытьРегламентныеЗадания); + ПараметрыОдновременноСессий.Вставить("МинимальнаяПродолжительностьСеансовРегламентныхЗаданий", + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий); + + // Максимальное количество одновременных сессий регламентных заданий + ОдновременноСессий = ОдновременноРегламентныхЗаданий(ПараметрыОдновременноСессий); + + // Отбираем нужные значения из таблицы ОдновременноСессий + ОдновременноСессий.Сортировать("ОдновременноРегламентныхЗаданий Убыв"); + + СтрокаИтогоОдновременноРегламентныхЗаданий = Неопределено; + ИтогоОдновременноРегламентныхЗаданий = Новый ТаблицаЗначений(); + ИтогоОдновременноРегламентныхЗаданий.Колонки.Добавить("ДатаОдновременноРегламентныхЗаданий", + Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50))); + ИтогоОдновременноРегламентныхЗаданий.Колонки.Добавить("ОдновременноРегламентныхЗаданий", + Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ИтогоОдновременноРегламентныхЗаданий.Колонки.Добавить("СписокРегламентныхЗаданий"); + + Для Каждого СтрокаОдновременноСессий Из ОдновременноСессий Цикл + Если СтрокаОдновременноСессий.ОдновременноРегламентныхЗаданий >= РазмерОдновременноСессий + И СтрокаОдновременноСессий.ОдновременноРегламентныхЗаданий >= 2 Тогда + СтрокаИтогоОдновременноРегламентныхЗаданий = ИтогоОдновременноРегламентныхЗаданий.Добавить(); + СтрокаИтогоОдновременноРегламентныхЗаданий.ДатаОдновременноРегламентныхЗаданий = + СтрокаОдновременноСессий.ДатаОдновременноРегламентныхЗаданий; + СтрокаИтогоОдновременноРегламентныхЗаданий.ОдновременноРегламентныхЗаданий = + СтрокаОдновременноСессий.ОдновременноРегламентныхЗаданий; + СтрокаИтогоОдновременноРегламентныхЗаданий.СписокРегламентныхЗаданий = + СтрокаОдновременноСессий.СписокРегламентныхЗаданий; + КонецЕсли; + КонецЦикла; + + ДанныеЖурналаРегистрации.Сортировать("Метаданные, Данные, Дата, Сеанс"); + + // Заполняем параметры, необходимые для получения данных по каждому сеансу регламентных заданий + ПараметрыСеансыРегламентныхЗаданий = Новый Структура; + ПараметрыСеансыРегламентныхЗаданий.Вставить("ДанныеЖурналаРегистрации", ДанныеЖурналаРегистрации); + ПараметрыСеансыРегламентныхЗаданий.Вставить("СоответствиеНаименованиеИдентификатор", СоответствиеНаименованиеИдентификатор); + ПараметрыСеансыРегламентныхЗаданий.Вставить("СоответствиеМетаданныеИдентификатор", СоответствиеМетаданныеИдентификатор); + ПараметрыСеансыРегламентныхЗаданий.Вставить("СоответствиеМетаданныеНазвание", СоответствиеМетаданныеНазвание); + ПараметрыСеансыРегламентныхЗаданий.Вставить("ОтображатьФоновыеЗадания", ОтображатьФоновыеЗадания); + ПараметрыСеансыРегламентныхЗаданий.Вставить("СкрытьРегламентныеЗадания", СкрытьРегламентныеЗадания); + + // Регламентные задания + ТаблицаСеансыРегламентныхЗаданий = + СеансыРегламентныхЗаданий(ПараметрыСеансыРегламентныхЗаданий).ТаблицаСеансыРегламентныхЗаданий; + КоличествоЗапусков = СеансыРегламентныхЗаданий(ПараметрыСеансыРегламентныхЗаданий).КоличествоЗапусков; + + Возврат Новый Структура("ТаблицаСеансыРегламентныхЗаданий, ИтогоОдновременноРегламентныхЗаданий, КоличествоЗапусков", + ТаблицаСеансыРегламентныхЗаданий, ИтогоОдновременноРегламентныхЗаданий, КоличествоЗапусков); +КонецФункции + +Функция ОдновременноРегламентныхЗаданий(ПараметрыОдновременноСессий) + + ДанныеЖурналаРегистрации = ПараметрыОдновременноСессий.ДанныеЖурналаРегистрации; + СоответствиеНаименованиеИдентификатор = ПараметрыОдновременноСессий.СоответствиеНаименованиеИдентификатор; + СоответствиеМетаданныеИдентификатор = ПараметрыОдновременноСессий.СоответствиеМетаданныеИдентификатор; + СоответствиеМетаданныеНазвание = ПараметрыОдновременноСессий.СоответствиеМетаданныеНазвание; + СкрытьРегламентныеЗадания = ПараметрыОдновременноСессий.СкрытьРегламентныеЗадания; + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий = ПараметрыОдновременноСессий. + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий; + + ОдновременноСессий = Новый ТаблицаЗначений(); + + ОдновременноСессий.Колонки.Добавить("ДатаОдновременноРегламентныхЗаданий", + Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(50))); + ОдновременноСессий.Колонки.Добавить("ОдновременноРегламентныхЗаданий", + Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + ОдновременноСессий.Колонки.Добавить("СписокРегламентныхЗаданий"); + + МассивРегламентныхЗаданий = Новый Массив; + + ОдновременноРегламентныхЗаданий = 0; + Счетчик = 0; + ТекущДата = Неопределено; + СтрокаТаблицы = Неопределено; + МаксМассивРегламентныхЗаданий = Неопределено; + + Для Каждого СтрокаДанныхЖурналаРегистрации Из ДанныеЖурналаРегистрации Цикл + Если Не ЗначениеЗаполнено(СтрокаДанныхЖурналаРегистрации.Дата) + Или Не ЗначениеЗаполнено(СтрокаДанныхЖурналаРегистрации.Метаданные) Тогда + Продолжить; + КонецЕсли; + + НазваниеИУникальныйИдентификатор = НазваниеИУникальныйИдентификаторСеансаРегламентногоЗадания( + СтрокаДанныхЖурналаРегистрации, СоответствиеНаименованиеИдентификатор, + СоответствиеМетаданныеИдентификатор, СоответствиеМетаданныеНазвание); + + НазваниеРегламентногоЗадания = НазваниеИУникальныйИдентификатор.НазваниеСеанса; + УникальныйИдентификаторРегламентногоЗадания = НазваниеИУникальныйИдентификатор. + УникальныйИдентификаторРегламентногоЗадания; + + Если Не СкрытьРегламентныеЗадания = Неопределено + И Не ТипЗнч(СкрытьРегламентныеЗадания) = Тип("Строка") Тогда + ФильтрРегламентныхЗаданий = СкрытьРегламентныеЗадания.НайтиПоЗначению( + УникальныйИдентификаторРегламентногоЗадания); + Если Не ФильтрРегламентныхЗаданий = Неопределено Тогда + Продолжить; + КонецЕсли; + ИначеЕсли Не СкрытьРегламентныеЗадания = Неопределено + И ТипЗнч(СкрытьРегламентныеЗадания) = Тип("Строка") Тогда + Если УникальныйИдентификаторРегламентногоЗадания = СкрытьРегламентныеЗадания Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + ДатаОдновременноРегламентныхЗаданий = НачалоЧаса(СтрокаДанныхЖурналаРегистрации.Дата); + + Если ТекущДата <> ДатаОдновременноРегламентныхЗаданий Тогда + Если СтрокаТаблицы <> Неопределено Тогда + СтрокаТаблицы.ОдновременноРегламентныхЗаданий = ОдновременноРегламентныхЗаданий; + СтрокаТаблицы.ДатаОдновременноРегламентныхЗаданий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 - %2'"), Формат(ТекущДата, "ДЛФ=T"), + Формат(КонецЧаса(ТекущДата), "ДЛФ=T")); + СтрокаТаблицы.СписокРегламентныхЗаданий = МаксМассивРегламентныхЗаданий; + КонецЕсли; + СтрокаТаблицы = ОдновременноСессий.Добавить(); + ОдновременноРегламентныхЗаданий = 0; + Счетчик = 0; + МассивРегламентныхЗаданий.Очистить(); + ТекущДата = ДатаОдновременноРегламентныхЗаданий; + КонецЕсли; + + Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Job$_.Start" Тогда + Счетчик = Счетчик + 1; + МассивРегламентныхЗаданий.Добавить(НазваниеРегламентногоЗадания); + МассивРегламентныхЗаданий.Добавить(СтрокаДанныхЖурналаРегистрации.Сеанс); + МассивРегламентныхЗаданий.Добавить(СтрокаДанныхЖурналаРегистрации.Дата); + Иначе + ИндексРегламентногоЗадания = МассивРегламентныхЗаданий.Найти(НазваниеРегламентногоЗадания); + Если ИндексРегламентногоЗадания = Неопределено Тогда + Продолжить; + КонецЕсли; + + Если ЗначениеЗаполнено(МаксМассивРегламентныхЗаданий) Тогда + ИндексСтрокиМассива = МаксМассивРегламентныхЗаданий.Найти(НазваниеРегламентногоЗадания); + Если ИндексСтрокиМассива <> Неопределено + И МаксМассивРегламентныхЗаданий[ИндексСтрокиМассива+1] = МассивРегламентныхЗаданий[ИндексРегламентногоЗадания+1] + И СтрокаДанныхЖурналаРегистрации.Дата - МаксМассивРегламентныхЗаданий[ИндексСтрокиМассива+2] < + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий Тогда + МаксМассивРегламентныхЗаданий.Удалить(ИндексСтрокиМассива); + МаксМассивРегламентныхЗаданий.Удалить(ИндексСтрокиМассива); + МаксМассивРегламентныхЗаданий.Удалить(ИндексСтрокиМассива); + ОдновременноРегламентныхЗаданий = ОдновременноРегламентныхЗаданий - 1; + КонецЕсли; + КонецЕсли; + МассивРегламентныхЗаданий.Удалить(ИндексРегламентногоЗадания); + МассивРегламентныхЗаданий.Удалить(ИндексРегламентногоЗадания); // Удаляем значение сеанса + МассивРегламентныхЗаданий.Удалить(ИндексРегламентногоЗадания); // Удаляем значение даты + Счетчик = Счетчик - 1; + КонецЕсли; + + Счетчик = Макс(Счетчик, 0); + Если Счетчик > ОдновременноРегламентныхЗаданий Тогда + МаксМассивРегламентныхЗаданий = Новый Массив; + Для Каждого Элемент Из МассивРегламентныхЗаданий Цикл + МаксМассивРегламентныхЗаданий.Добавить(Элемент); + КонецЦикла; + КонецЕсли; + ОдновременноРегламентныхЗаданий = Макс(ОдновременноРегламентныхЗаданий, Счетчик); + КонецЦикла; + + Если ОдновременноРегламентныхЗаданий <> 0 Тогда + СтрокаТаблицы.ОдновременноРегламентныхЗаданий = ОдновременноРегламентныхЗаданий; + СтрокаТаблицы.ДатаОдновременноРегламентныхЗаданий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 - %2'"), Формат(ТекущДата, "ДЛФ=T"), + Формат(КонецЧаса(ТекущДата), "ДЛФ=T")); + СтрокаТаблицы.СписокРегламентныхЗаданий = МаксМассивРегламентныхЗаданий; + КонецЕсли; + + Возврат ОдновременноСессий; +КонецФункции + +Функция СеансыРегламентныхЗаданий(ПараметрыСеансыРегламентныхЗаданий) + + ДанныеЖурналаРегистрации = ПараметрыСеансыРегламентныхЗаданий.ДанныеЖурналаРегистрации; + СоответствиеНаименованиеИдентификатор = ПараметрыСеансыРегламентныхЗаданий.СоответствиеНаименованиеИдентификатор; + СоответствиеМетаданныеИдентификатор = ПараметрыСеансыРегламентныхЗаданий.СоответствиеМетаданныеИдентификатор; + СоответствиеМетаданныеНазвание = ПараметрыСеансыРегламентныхЗаданий.СоответствиеМетаданныеНазвание; + СкрытьРегламентныеЗадания = ПараметрыСеансыРегламентныхЗаданий.СкрытьРегламентныеЗадания; + ОтображатьФоновыеЗадания = ПараметрыСеансыРегламентныхЗаданий.ОтображатьФоновыеЗадания; + + ТаблицаСеансыРегламентныхЗаданий = Новый ТаблицаЗначений(); + ТаблицаСеансыРегламентныхЗаданий.Колонки.Добавить("ДатаЗапускаЗадания",Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))); + ТаблицаСеансыРегламентныхЗаданий.Колонки.Добавить("ДатаОкончанияЗадания",Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя))); + ТаблицаСеансыРегламентныхЗаданий.Колонки.Добавить("НазваниеСобытия",Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100))); + ТаблицаСеансыРегламентныхЗаданий.Колонки.Добавить("СобытиеМетаданные",Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100))); + ТаблицаСеансыРегламентныхЗаданий.Колонки.Добавить("Сеанс",Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + + КоличествоЗапусков = Новый ТаблицаЗначений(); + КоличествоЗапусков.Колонки.Добавить("НазваниеСобытия",Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100))); + КоличествоЗапусков.Колонки.Добавить("Запусков",Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + КоличествоЗапусков.Колонки.Добавить("Отменено",Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + КоличествоЗапусков.Колонки.Добавить("ОшибкаВыполнения",Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10))); + + СтрокаРегламентныеЗадания = Неопределено; + НазваниеСобытия = Неопределено; + ДатаОкончанияЗадания = Неопределено; + ДатаЗапускаЗадания = Неопределено; + СобытиеМетаданные = Неопределено; + Запусков = 0; + ТекущееСобытие = Неопределено; + СтрокаКоличествоЗапусков = Неопределено; + ТекущийСеанс = 0; + Отменено = 0; + ОшибкаВыполнения = 0; + + Для Каждого СтрокаДанныхЖурналаРегистрации ИЗ ДанныеЖурналаРегистрации Цикл + Если Не ЗначениеЗаполнено(СтрокаДанныхЖурналаРегистрации.Метаданные) + И ОтображатьФоновыеЗадания = Ложь Тогда + Продолжить; + КонецЕсли; + + НазваниеИУникальныйИдентификатор = НазваниеИУникальныйИдентификаторСеансаРегламентногоЗадания( + СтрокаДанныхЖурналаРегистрации, СоответствиеНаименованиеИдентификатор, + СоответствиеМетаданныеИдентификатор, СоответствиеМетаданныеНазвание); + + НазваниеСобытия = НазваниеИУникальныйИдентификатор.НазваниеСеанса; + УникальныйИдентификаторРегламентногоЗадания = НазваниеИУникальныйИдентификатор. + УникальныйИдентификаторРегламентногоЗадания; + + Если Не СкрытьРегламентныеЗадания = Неопределено + И Не ТипЗнч(СкрытьРегламентныеЗадания) = Тип("Строка") Тогда + ФильтрРегламентныхЗаданий = СкрытьРегламентныеЗадания.НайтиПоЗначению( + УникальныйИдентификаторРегламентногоЗадания); + Если Не ФильтрРегламентныхЗаданий = Неопределено Тогда + Продолжить; + КонецЕсли; + ИначеЕсли Не СкрытьРегламентныеЗадания = Неопределено + И ТипЗнч(СкрытьРегламентныеЗадания) = Тип("Строка") Тогда + Если УникальныйИдентификаторРегламентногоЗадания = СкрытьРегламентныеЗадания Тогда + Продолжить; + КонецЕсли; + КонецЕсли; + + Сеанс = СтрокаДанныхЖурналаРегистрации.Сеанс; + Если ТекущееСобытие = Неопределено Тогда + ТекущееСобытие = НазваниеСобытия; + Запусков = 0; + ИначеЕсли ТекущееСобытие <> НазваниеСобытия Тогда + СтрокаКоличествоЗапусков = КоличествоЗапусков.Добавить(); + СтрокаКоличествоЗапусков.НазваниеСобытия = ТекущееСобытие; + СтрокаКоличествоЗапусков.Запусков = Запусков; + СтрокаКоличествоЗапусков.Отменено = Отменено; + СтрокаКоличествоЗапусков.ОшибкаВыполнения = ОшибкаВыполнения; + Запусков = 0; + Отменено = 0; + ОшибкаВыполнения = 0; + ТекущееСобытие = НазваниеСобытия; + КонецЕсли; + + Если ТекущийСеанс <> Сеанс Тогда + СтрокаРегламентныеЗадания = ТаблицаСеансыРегламентныхЗаданий.Добавить(); + ДатаЗапускаЗадания = СтрокаДанныхЖурналаРегистрации.Дата; + СтрокаРегламентныеЗадания.ДатаЗапускаЗадания = ДатаЗапускаЗадания; + КонецЕсли; + + Если ТекущийСеанс = Сеанс Тогда + ДатаОкончанияЗадания = СтрокаДанныхЖурналаРегистрации.Дата; + СобытиеМетаданные = СтрокаДанныхЖурналаРегистрации.Метаданные; + СтрокаРегламентныеЗадания.НазваниеСобытия = НазваниеСобытия; + СтрокаРегламентныеЗадания.СобытиеМетаданные = СобытиеМетаданные; + СтрокаРегламентныеЗадания.ДатаОкончанияЗадания = ДатаОкончанияЗадания; + СтрокаРегламентныеЗадания.Сеанс = ТекущийСеанс; + КонецЕсли; + ТекущийСеанс = Сеанс; + + Если СтрокаДанныхЖурналаРегистрации.Событие = "_$Job$_.Cancel" Тогда + Отменено = Отменено + 1; + ИначеЕсли СтрокаДанныхЖурналаРегистрации.Событие = "_$Job$_.Fail" Тогда + ОшибкаВыполнения = ОшибкаВыполнения + 1; + ИначеЕсли СтрокаДанныхЖурналаРегистрации.Событие = "_$Job$_.Start" Тогда + Запусков = Запусков + 1 + КонецЕсли; + КонецЦикла; + + СтрокаКоличествоЗапусков = КоличествоЗапусков.Добавить(); + СтрокаКоличествоЗапусков.НазваниеСобытия = ТекущееСобытие; + СтрокаКоличествоЗапусков.Запусков = Запусков; + СтрокаКоличествоЗапусков.Отменено = Отменено; + СтрокаКоличествоЗапусков.ОшибкаВыполнения = ОшибкаВыполнения; + + ТаблицаСеансыРегламентныхЗаданий.Сортировать("СобытиеМетаданные, НазваниеСобытия, ДатаЗапускаЗадания"); + + Возврат Новый Структура("ТаблицаСеансыРегламентныхЗаданий, КоличествоЗапусков", + ТаблицаСеансыРегламентныхЗаданий, КоличествоЗапусков); +КонецФункции + +// Функция формирования отчета по выбранному регламентному заданию +// Параметры +// Расшифровка - расшифровка регламентного задания +// +Функция РасшифровкаРегламентногоЗадания(Расшифровка) Экспорт + Результат = Новый Структура; + Отчет = Новый ТабличныйДокумент; + ОтмененоЗаданий = 0; + ОшибкаВыполнения = 0; + МетаданныеЗадания = Расшифровка.Получить(1); + + ДатаЗапускаЗадания = Расшифровка.Получить(5); + ДатаОкончанияЗадания = Расшифровка.Получить(6); + СписокСеансов = Расшифровка.Получить(7); + Макет = Отчеты.АнализЖурналаРегистрации.ПолучитьМакет("РасшифровкаРегламентныхЗаданий"); + + Область = Макет.ПолучитьОбласть("Заголовок"); + ДатаНачала = Расшифровка.Получить(11); + ДатаОкончания = Расшифровка.Получить(12); + Область.Параметры.ДатаНачала = ДатаНачала; + Область.Параметры.ДатаОкончания = ДатаОкончания; + Если Расшифровка.Получить(8) = 0 Тогда + РежимОтображенияИнтервалов = НСтр("ru = 'Включено'"); + Иначе + РежимОтображенияИнтервалов = НСтр("ru = 'Отключено'"); + КонецЕсли; + Область.Параметры.РежимОтображенияСеансов = РежимОтображенияИнтервалов; + Отчет.Вывести(Область); + + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + + Область = Макет.ПолучитьОбласть("Таблица"); + Область.Параметры.ТипЗадания = НСтр("ru = 'Регламентное'"); + Область.Параметры.НазваниеСобытия = Расшифровка.Получить(2); + Область.Параметры.Запусков = Расшифровка.Получить(9); + ОтмененоЗаданий = Расшифровка.Получить(3); + ОшибкаВыполнения = Расшифровка.Получить(4); + Если ОтмененоЗаданий = 0 Тогда + Область.Параметры.Отменено = "0"; + Иначе + Область.Параметры.Отменено = ОтмененоЗаданий; + КонецЕсли; + Если ОшибкаВыполнения = 0 Тогда + Область.Параметры.ОшибкаВыполнения = "0"; + Иначе + Область.Параметры.ОшибкаВыполнения = ОшибкаВыполнения; + КонецЕсли; + ОбщаяПродолжительностьРЗ = Расшифровка.Получить(10); + ОбщаяПродолжительностьРЗИтог = ПродолжительностьРегламентногоЗадания(ОбщаяПродолжительностьРЗ); + Область.Параметры.ОбщаяПродолжительностьРЗ = ОбщаяПродолжительностьРЗИтог; + Отчет.Вывести(Область); + + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + + Отчет.Вывести(Макет.ПолучитьОбласть("ЗаголовокИнтервалов")); + + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + + Отчет.Вывести(Макет.ПолучитьОбласть("ШапкаТаблицы")); + + // Заполняем таблицу интервалов + РазмерМассива = ДатаЗапускаЗадания.Количество(); + НомерИнтервала = 1; + Отчет.НачатьГруппуСтрок(, Ложь); + Для Индекс = 0 По РазмерМассива-1 Цикл + Область = Макет.ПолучитьОбласть("ТаблицаИнтервалов"); + НачалоИнтервала = ДатаЗапускаЗадания.Получить(Индекс); + КонецИнтервала = ДатаОкончанияЗадания.Получить(Индекс); + СеансРегламентногоЗадания = СписокСеансов.Получить(Индекс); + ПродолжительностьРЗ = ПродолжительностьРегламентногоЗадания(КонецИнтервала - НачалоИнтервала); + Область.Параметры.НомерИнтервала = НомерИнтервала; + Область.Параметры.НачалоИнтервала = Формат(НачалоИнтервала, "ДЛФ=T"); + Область.Параметры.КонецИнтервала = Формат(КонецИнтервала, "ДЛФ=T"); + Область.Параметры.ПродолжительностьРЗ = ПродолжительностьРЗ; + Область.Параметры.Сеанс = СписокСеансов.Получить(Индекс); + Область.Параметры.РасшифровкаИнтервала = Новый Массив; + Область.Параметры.РасшифровкаИнтервала.Добавить(НачалоИнтервала); + Область.Параметры.РасшифровкаИнтервала.Добавить(КонецИнтервала); + Область.Параметры.РасшифровкаИнтервала.Добавить(СписокСеансов.Получить(Индекс)); + Отчет.Вывести(Область); + НомерИнтервала = НомерИнтервала + 1; + КонецЦикла; + Отчет.ЗакончитьГруппуСтрок(); + + Результат.Вставить("Отчет", Отчет); + Возврат Результат; +КонецФункции + +// Процедура для установки цвета интервалов и фона диаграммы ганта +// +// Параметры +// ДатаНачала - день, за который производится построение диаграммы +// ДиаграммаГанта - диаграмма ганта, тип - РисунокТабличногоДокумента +// ОдновременноСессий - таблица значений с данными по количеству одновременно работавших +// регламентных заданий в течении дня +// ЦветаФона - массив цветов для интервалов фона +// +Процедура ЦветаДиаграммыГанта(ДатаНачала, ДиаграммаГанта, ОдновременноСессий, ЦветаФона) + // Цвета интервалов диаграммы + ЦветаИнтервалов = Новый Массив; + ЦветНачало = 153; + ЦветКонец = 253; + Пока ЦветНачало <= ЦветКонец Цикл + ЦветаИнтервалов.Добавить(ЦветНачало); + ЦветНачало = ЦветНачало + 10; + КонецЦикла; + + Индекс = 0; + Для Каждого ТочкаДиаграммыГанта Из ДиаграммаГанта.Точки Цикл + ТочкаДиаграммыГанта.ПриоритетЦвета = Истина; + СинийЦвет = ЦветаИнтервалов.Получить(Индекс); + ЦветСерии = Новый Цвет(204,204,СинийЦвет); + ТочкаДиаграммыГанта.Цвет = ЦветСерии; + Индекс = Индекс + 1; + Если Индекс = 11 Тогда + Индекс = 0; + КонецЕсли; + КонецЦикла; + + // Добавляем цвета интервалов фона + ТекущееКоличествоСессий = 0; + ИндексЦвета = 3; + Для Каждого СтрокаОдновременноСессий Из ОдновременноСессий Цикл + Если СтрокаОдновременноСессий.ОдновременноРегламентныхЗаданий = 1 Тогда + Продолжить + КонецЕсли; + СтрокаДаты = Лев(СтрокаОдновременноСессий.ДатаОдновременноРегламентныхЗаданий, 8); + ДатаНачалоИФ = Дата(Формат(ДатаНачала,"ДЛФ=D") + " " + СтрокаДаты); + ДатаКонецИФ = КонецЧаса(ДатаНачалоИФ); + ИнтервалДГ = ДиаграммаГанта.ИнтервалыФона.Добавить(ДатаНачалоИФ, ДатаКонецИФ); + Если ТекущееКоличествоСессий <> 0 + И ТекущееКоличествоСессий <> СтрокаОдновременноСессий.ОдновременноРегламентныхЗаданий + И ИндексЦвета <> 0 Тогда + ИндексЦвета = ИндексЦвета - 1; + КонецЕсли; + ЦветФона = ЦветаФона.Получить(ИндексЦвета); + ИнтервалДГ.Цвет = ЦветФона; + + ТекущееКоличествоСессий = СтрокаОдновременноСессий.ОдновременноРегламентныхЗаданий; + КонецЦикла; +КонецПроцедуры + +// Процедура формирования шкалы времени диаграммы ганта +// +// Параметры +// ДиаграммаГанта - диаграмма ганта, тип - РисунокТабличногоДокумента +// +Процедура ШкалаВремениДиаграммыГанта(ДиаграммаГанта, ПериодАнализа) + ЭлементыШкалыВремени = ДиаграммаГанта.ОбластьПостроения.ШкалаВремени.Элементы; + + ПервыйЭлемент = ЭлементыШкалыВремени[0]; + Для Индекс = 1 по ЭлементыШкалыВремени.Количество()-1 Цикл + ЭлементыШкалыВремени.Удалить(ЭлементыШкалыВремени[1]); + КонецЦикла; + + ПервыйЭлемент.Единица = ТипЕдиницыШкалыВремени.День; + ПервыйЭлемент.ЛинииДелений = Новый Линия(ТипЛинииДиаграммы.Сплошная, 1); + ПервыйЭлемент.ФорматДня = ФорматДняШкалыВремени.ДеньМесяца; + + Элемент = ЭлементыШкалыВремени.Добавить(); + Элемент.Единица = ТипЕдиницыШкалыВремени.Час; + Элемент.ЛинииДелений = Новый Линия(ТипЛинииДиаграммы.Точечная, 1); + + Если ПериодАнализа <= 3600 Тогда + Элемент = ЭлементыШкалыВремени.Добавить(); + Элемент.Единица = ТипЕдиницыШкалыВремени.Минута; + Элемент.ЛинииДелений = Новый Линия(ТипЛинииДиаграммы.Точечная, 1); + КонецЕсли; +КонецПроцедуры + +Функция ПродолжительностьРегламентногоЗадания(ПродолжительностьРЗ) + Если ПродолжительностьРЗ = 0 Тогда + ОбщаяПродолжительностьРЗ = "0"; + ИначеЕсли ПродолжительностьРЗ <= 60 Тогда + ОбщаяПродолжительностьРЗ = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 сек'"), ПродолжительностьРЗ); + ИначеЕсли 60 < ПродолжительностьРЗ <= 3600 Тогда + ПродолжительностьМинуты = Формат(ПродолжительностьРЗ/60, "ЧДЦ=0"); + ПродолжительностьСекунды = Формат((Формат(ПродолжительностьРЗ/60, "ЧДЦ=2") - + Цел(ПродолжительностьРЗ/60)) * 60, "ЧДЦ=0"); + ОбщаяПродолжительностьРЗ = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 мин %2 сек'"), ПродолжительностьМинуты, ПродолжительностьСекунды); + ИначеЕсли ПродолжительностьРЗ > 3600 Тогда + ПродолжительностьЧасы = Формат(ПродолжительностьРЗ/60/60, "ЧДЦ=0"); + ПродолжительностьМинуты = (Формат(ПродолжительностьРЗ/60/60, "ЧДЦ=2") - Цел(ПродолжительностьРЗ/60/60))*60; + ПродолжительностьМинуты = Формат(ПродолжительностьМинуты, "ЧДЦ=0"); + ОбщаяПродолжительностьРЗ = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '%1 ч %2 мин'"), ПродолжительностьЧасы, ПродолжительностьМинуты); + КонецЕсли; + + Возврат ОбщаяПродолжительностьРЗ; +КонецФункции + +Функция МетаданныеРегламентногоЗадания(ДанныеРегламентногоЗадания) + Если ДанныеРегламентногоЗадания <> "" Тогда + Возврат Метаданные.РегламентныеЗадания.Найти( + СтрЗаменить(ДанныеРегламентногоЗадания, "РегламентноеЗадание." , "")); + КонецЕсли; +КонецФункции + +Функция НазваниеИУникальныйИдентификаторСеансаРегламентногоЗадания(СтрокаДанныхЖурналаРегистрации, + СоответствиеНаименованиеИдентификатор, СоответствиеМетаданныеИдентификатор, СоответствиеМетаданныеНазвание) + Если Не СтрокаДанныхЖурналаРегистрации.Данные = "" Тогда + УникальныйИдентификаторРегламентногоЗадания = СоответствиеНаименованиеИдентификатор[ + СтрокаДанныхЖурналаРегистрации.Данные]; + НазваниеСеанса = СтрокаДанныхЖурналаРегистрации.Данные; + Иначе + УникальныйИдентификаторРегламентногоЗадания = СоответствиеМетаданныеИдентификатор[ + МетаданныеРегламентногоЗадания(СтрокаДанныхЖурналаРегистрации.Метаданные)]; + НазваниеСеанса = СоответствиеМетаданныеНазвание[МетаданныеРегламентногоЗадания( + СтрокаДанныхЖурналаРегистрации.Метаданные)]; + КонецЕсли; + + Возврат Новый Структура("НазваниеСеанса, УникальныйИдентификаторРегламентногоЗадания", + НазваниеСеанса, УникальныйИдентификаторРегламентногоЗадания) +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Контроль журнала регистрации + +// Функция, формирующая отчет по зарегистрированным в журнале регистрации ошибкам +// +// Параметры +// ДанныеЖурналаРегистрации - таблица значений - выгруженная таблица из журнала регистраций +// +// должны присутствовать следующие колонки: Дата, ИмяПользователя, ПредставлениеПриложения, +// ПредставлениеСобытия, Комментарий, Уровень +// +Функция СформироватьОтчетКонтрольЖурналаРегистрации(ДатаНачала, ДатаОкончания) Экспорт + + Результат = Новый Структура; + Отчет = Новый ТабличныйДокумент; + Макет = Отчеты.АнализЖурналаРегистрации.ПолучитьМакет("МакетОтчетаПоОшибкамВЖурналеРегистрации"); + ДанныеЖурналаРегистрации = ИнформацияПоОшибкамЖурналаРегистрации(ДатаНачала, ДатаОкончания); + КоличествоЗаписейЖурналаРегистрации = ДанныеЖурналаРегистрации.Количество(); + + ОтчетПустой = (КоличествоЗаписейЖурналаРегистрации = 0); // Проверяем заполнение отчета + + /////////////////////////////////////////////////////////////////////////////// + // Блок предварительной подготовки данных + // + + СверткаПоКомментариям = ДанныеЖурналаРегистрации.Скопировать(); + СверткаПоКомментариям.Колонки.Добавить("ИтогПоКомментарию"); + СверткаПоКомментариям.ЗаполнитьЗначения(1, "ИтогПоКомментарию"); + СверткаПоКомментариям.Свернуть("Уровень, Комментарий, Событие, ПредставлениеСобытия", "ИтогПоКомментарию"); + + МассивСтрок_УровеньОшибка = СверткаПоКомментариям.НайтиСтроки( + Новый Структура("Уровень", УровеньЖурналаРегистрации.Ошибка)); + + МассивСтрок_УровеньПредупреждение = СверткаПоКомментариям.НайтиСтроки( + Новый Структура("Уровень", УровеньЖурналаРегистрации.Предупреждение)); + + Свертка_Ошибки = СверткаПоКомментариям.Скопировать(МассивСтрок_УровеньОшибка); + Свертка_Ошибки.Сортировать("ИтогПоКомментарию Убыв"); + Свертка_Предупреждения = СверткаПоКомментариям.Скопировать(МассивСтрок_УровеньПредупреждение); + Свертка_Предупреждения.Сортировать("ИтогПоКомментарию Убыв"); + + /////////////////////////////////////////////////////////////////////////////// + // Блок формирования самого отчета + // + + Область = Макет.ПолучитьОбласть("ШапкаОтчета"); + Область.Параметры.ПериодВыборкиНачало = ДатаНачала; + Область.Параметры.ПериодВыборкиОкончание = ДатаОкончания; + Область.Параметры.ПредставлениеИнформационнойБазы = ОбщегоНазначения.ПолучитьПредставлениеИнформационнойБазы(); + Отчет.Вывести(Область); + + РезультатКомпоновкиТЧ = СформироватьТабличнуюЧасть(Макет, ДанныеЖурналаРегистрации, Свертка_Ошибки); + + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + Область = Макет.ПолучитьОбласть("ЗаголовокБлокаОшибки"); + Область.Параметры.ЧислоОшибок = Строка(РезультатКомпоновкиТЧ.Итог); + Отчет.Вывести(Область); + + Если РезультатКомпоновкиТЧ.Итог > 0 Тогда + Отчет.Вывести(РезультатКомпоновкиТЧ.ТабличнаяЧасть); + КонецЕсли; + + Результат.Вставить("ИтогПоОшибкам", РезультатКомпоновкиТЧ.Итог); + РезультатКомпоновкиТЧ = СформироватьТабличнуюЧасть(Макет, ДанныеЖурналаРегистрации, Свертка_Предупреждения); + + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + Область = Макет.ПолучитьОбласть("ЗаголовокБлокаПредупреждения"); + Область.Параметры.ЧислоПредупреждений = РезультатКомпоновкиТЧ.Итог; + Отчет.Вывести(Область); + + Если РезультатКомпоновкиТЧ.Итог > 0 Тогда + Отчет.Вывести(РезультатКомпоновкиТЧ.ТабличнаяЧасть); + КонецЕсли; + + Результат.Вставить("ИтогПоПредупреждениям", РезультатКомпоновкиТЧ.Итог); + Отчет.ОтображатьСетку = Ложь; + Результат.Вставить("Отчет", Отчет); + Результат.Вставить("ОтчетПустой", ОтчетПустой); + Возврат Результат; + +КонецФункции + +// Функция получает информацию по ошибкам в журнале регистрации по переданному периоду +// +// Параметры +// ДатаНачала - дата - начала периода, по которому будет собираться информация +// ДатаОкончания - дата - окончание периода, по которому будет собираться информация +// +// Возвращаемое значение +// таблица значений - записи из журнала регистрации в соответствии с фильтром: +// УровеньЖурналаРегистрации - УровеньЖурналаРегистрации.Ошибка +// Начало и Окончание периода - из параметров +// +Функция ИнформацияПоОшибкамЖурналаРегистрации(Знач ДатаНачала, Знач ДатаОкончания) + + ДанныеЖурналаРегистрации = Новый ТаблицаЗначений; + + УровниРегистрацииОшибок = Новый Массив; + УровниРегистрацииОшибок.Добавить(УровеньЖурналаРегистрации.Ошибка); + УровниРегистрацииОшибок.Добавить(УровеньЖурналаРегистрации.Предупреждение); + + УстановитьПривилегированныйРежим(Истина); + ВыгрузитьЖурналРегистрации(ДанныеЖурналаРегистрации, + Новый Структура("Уровень, ДатаНачала, ДатаОкончания", + УровниРегистрацииОшибок, + ДатаНачала, + ДатаОкончания)); + УстановитьПривилегированныйРежим(Ложь); + + Возврат ДанныеЖурналаРегистрации; + +КонецФункции + +// Добавляет в отчет табличную часть по ошибкам. Ошибки выводятся сгруппированными +// по комментарию. +// +// Параметры +// Макет - ТабличныйДокумент - источник форматированных областей, которые будут +// использоваться при формировании отчета +// ДанныеЖурналаРегистрации - ТаблицаЗначений - данные по ошибкам и предупреждениям +// из журнала регистрации "как есть" +// СвернутыеДанные - ТаблицаЗначений - свернутая по комметариям информация по их количеству +// +Функция СформироватьТабличнуюЧасть(Макет, ДанныеЖурналаРегистрации, СвернутыеДанные) + + Отчет = Новый ТабличныйДокумент; + Итог = 0; + + Если СвернутыеДанные.Количество() > 0 Тогда + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + + Для Каждого Запись Из СвернутыеДанные Цикл + Итог = Итог + Запись.ИтогПоКомментарию; + МассивСтрок = ДанныеЖурналаРегистрации.НайтиСтроки( + Новый Структура("Уровень, Комментарий", + УровеньЖурналаРегистрации.Ошибка, + Запись.Комментарий)); + + Область = Макет.ПолучитьОбласть("ТелоТабличнойЧастиШапка"); + Область.Параметры.Заполнить(Запись); + Отчет.Вывести(Область); + + Отчет.НачатьГруппуСтрок(, Ложь); + Для Каждого Строка Из МассивСтрок Цикл + Область = Макет.ПолучитьОбласть("ТелоТабличнойЧастиДетализация"); + Область.Параметры.Заполнить(Строка); + Отчет.Вывести(Область); + КонецЦикла; + Отчет.ЗакончитьГруппуСтрок(); + Отчет.Вывести(Макет.ПолучитьОбласть("ПустаяСтрока")); + КонецЦикла; + КонецЕсли; + + Результат = Новый Структура("ТабличнаяЧасть, Итог", Отчет, Итог); + + Возврат Результат; + +КонецФункции + +#КонецЕсли \ 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..80cd3e125 --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/ObjectModule.bsl @@ -0,0 +1,215 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ + +Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровкиОбъект, СтандартнаяОбработка, АдресХранилища) + СтандартнаяОбработка = Ложь; + НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); + Период = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("Период").Значение; + ВариантОтчета = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ВариантОтчета").Значение; + Если ВариантОтчета = "КонтрольЖурналаРегистрации" Тогда + РезультатФормированияОтчета = Отчеты.АнализЖурналаРегистрации. + СформироватьОтчетКонтрольЖурналаРегистрации(Период.ДатаНачала, Период.ДатаОкончания); + // ОтчетПустой - параметр, показывающий наличие информации в отчете. Необходим для рассылки отчетов + ОтчетПустой = РезультатФормированияОтчета.ОтчетПустой; + КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ОтчетПустой", ОтчетПустой); + ДокументРезультат.Вывести(РезультатФормированияОтчета.Отчет); + ИначеЕсли ВариантОтчета = "ДиаграммаГанта" Тогда + ПродолжительностьРаботыРегламентныхЗаданий(НастройкиОтчета, ДокументРезультат); + Иначе + ПараметрыОтчета = ПараметрыОтчетаАктивностьПользователя(НастройкиОтчета); + ПараметрыОтчета.Вставить("ДатаНачала", Период.ДатаНачала); + ПараметрыОтчета.Вставить("ДатаОкончания", Период.ДатаОкончания); + ПараметрыОтчета.Вставить("ВариантОтчета", ВариантОтчета); + КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; + МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровкиОбъект); + ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; + ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, + Отчеты.АнализЖурналаРегистрации.ДанныеИзЖурналаРегистрации(ПараметрыОтчета), ДанныеРасшифровкиОбъект, Истина); + ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; + ПроцессорВывода.УстановитьДокумент(ДокументРезультат); + ПроцессорВывода.НачатьВывод(); + Пока Истина Цикл + ЭлементРезультата = ПроцессорКомпоновки.Следующий(); + Если ЭлементРезультата = Неопределено Тогда + Прервать; + Иначе + ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата); + КонецЕсли; + КонецЦикла; + ДокументРезультат.ПоказатьУровеньГруппировокСтрок(1); + ПроцессорВывода.ЗакончитьВывод(); + КонецЕсли; + +КонецПроцедуры + +Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) + + НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); + ВариантОтчета = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ВариантОтчета").Значение; + Если ВариантОтчета = "ДиаграммаГанта" Тогда + ПериодДень = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ПериодДень").Значение; + НачалоВыборки = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("НачалоВыборки"); + КонецВыборки = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("КонецВыборки"); + + Если Не ЗначениеЗаполнено(ПериодДень.Дата) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не заполнено значение поля День!'"), , ); + Отказ = Истина; + Возврат; + КонецЕсли; + + Если ЗначениеЗаполнено(НачалоВыборки.Значение) + И ЗначениеЗаполнено(КонецВыборки.Значение) + И НачалоВыборки.Значение > КонецВыборки.Значение + И НачалоВыборки.Использование + И КонецВыборки.Использование Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Значение начала периода не может быть больше значения конца!'"), , ); + Отказ = Истина; + Возврат; + КонецЕсли; + + ИначеЕсли ВариантОтчета = "АктивностьПользователя" Тогда + + Пользователь = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("Пользователь").Значение; + + Если Не ЗначениеЗаполнено(Пользователь) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не заполнено значение поля Пользователь!'"), , ); + Отказ = Истина; + Возврат; + КонецЕсли; + + Если Отчеты.АнализЖурналаРегистрации.ИмяПользователяИБ(Пользователь) = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Формирование отчета возможно только для пользователя, у которого доступ к информационной базе разрешен!'"), , ); + Отказ = Истина; + Возврат; + КонецЕсли; + + ИначеЕсли ВариантОтчета = "АнализАктивностиПользователей" Тогда + + ПользователиИГруппы = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ПользователиИГруппы").Значение; + + Если ТипЗнч(ПользователиИГруппы) = Тип("СправочникСсылка.Пользователи") Тогда + + Если Отчеты.АнализЖурналаРегистрации.ИмяПользователяИБ(ПользователиИГруппы) = Неопределено Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Формирование отчета возможно только для пользователя, у которого доступ к информационной базе разрешен!'"), , ); + Отказ = Истина; + Возврат; + КонецЕсли; + + КонецЕсли; + + + Если Не ЗначениеЗаполнено(ПользователиИГруппы) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Не заполнено значение поля Пользователи!'"), , ); + Отказ = Истина; + Возврат; + КонецЕсли; + + КонецЕсли; + +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ + +Функция ПараметрыОтчетаАктивностьПользователя(НастройкиОтчета) + + ПользователиИГруппы = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ПользователиИГруппы").Значение; + Пользователь = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("Пользователь").Значение; + ВыводитьБизнесПроцессы = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ВыводитьБизнесПроцессы"); + ВыводитьЗадачи = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ВыводитьЗадачи"); + ВыводитьСправочники = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ВыводитьСправочники"); + ВыводитьДокументы = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ВыводитьДокументы"); + + Если Не ВыводитьБизнесПроцессы.Использование Тогда + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("ВыводитьБизнесПроцессы", Ложь); + КонецЕсли; + Если Не ВыводитьЗадачи.Использование Тогда + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("ВыводитьЗадачи", Ложь); + КонецЕсли; + Если Не ВыводитьСправочники.Использование Тогда + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("ВыводитьСправочники", Ложь); + КонецЕсли; + Если Не ВыводитьДокументы.Использование Тогда + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("ВыводитьДокументы", Ложь); + КонецЕсли; + + ПараметрыОтчета = Новый Структура; + ПараметрыОтчета.Вставить("ПользователиИГруппы", ПользователиИГруппы); + ПараметрыОтчета.Вставить("Пользователь", Пользователь); + ПараметрыОтчета.Вставить("ВыводитьБизнесПроцессы", ВыводитьБизнесПроцессы.Значение); + ПараметрыОтчета.Вставить("ВыводитьЗадачи", ВыводитьЗадачи.Значение); + ПараметрыОтчета.Вставить("ВыводитьСправочники", ВыводитьСправочники.Значение); + ПараметрыОтчета.Вставить("ВыводитьДокументы", ВыводитьДокументы.Значение); + + Возврат ПараметрыОтчета; +КонецФункции + +Процедура ПродолжительностьРаботыРегламентныхЗаданий(НастройкиОтчета, ДокументРезультат) + ВыводитьЗаголовок = НастройкиОтчета.ПараметрыВывода.Элементы.Найти("ВыводитьЗаголовок"); + ВыводитьОтбор = НастройкиОтчета.ПараметрыВывода.Элементы.Найти("ВыводитьОтбор"); + ЗаголовокОтчета = НастройкиОтчета.ПараметрыВывода.Элементы.Найти("Заголовок"); + ПериодДень = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ПериодДень").Значение; + НачалоВыборки = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("НачалоВыборки"); + КонецВыборки = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("КонецВыборки"); + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий = НастройкиОтчета.ПараметрыДанных.Элементы.Найти( + "МинимальнаяПродолжительностьСеансовРегламентныхЗаданий"); + ОтображатьФоновыеЗадания = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("ОтображатьФоновыеЗадания"); + СкрытьРегламентныеЗадания = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("СкрытьРегламентныеЗадания"); + РазмерОдновременноСессий = НастройкиОтчета.ПараметрыДанных.Элементы.Найти("РазмерОдновременноСессий"); + + // Проверка наличия флажка использовать у параметров + Если Не МинимальнаяПродолжительностьСеансовРегламентныхЗаданий.Использование Тогда + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("МинимальнаяПродолжительностьСеансовРегламентныхЗаданий", 0); + КонецЕсли; + Если Не ОтображатьФоновыеЗадания.Использование Тогда + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("ОтображатьФоновыеЗадания", Ложь); + КонецЕсли; + Если Не СкрытьРегламентныеЗадания.Использование Тогда + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("СкрытьРегламентныеЗадания", ""); + КонецЕсли; + Если Не РазмерОдновременноСессий.Использование Тогда + НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("РазмерОдновременноСессий", 0); + КонецЕсли; + + Если Не ЗначениеЗаполнено(НачалоВыборки.Значение) Тогда + ПериодДеньДатаНачала = НачалоДня(ПериодДень); + ИначеЕсли Не НачалоВыборки.Использование Тогда + ПериодДеньДатаНачала = НачалоДня(ПериодДень); + Иначе + ПериодДеньДатаНачала = Дата(Формат(ПериодДень.Дата, "ДЛФ=D") + " " + Формат(НачалоВыборки.Значение, "ДЛФ=T")); + КонецЕсли; + + Если Не ЗначениеЗаполнено(КонецВыборки.Значение) Тогда + ПериодДеньДатаОкончания = КонецДня(ПериодДень); + ИначеЕсли Не КонецВыборки.Использование Тогда + ПериодДеньДатаОкончания = КонецДня(ПериодДень); + Иначе + ПериодДеньДатаОкончания = Дата(Формат(ПериодДень.Дата, "ДЛФ=D") + " " + Формат(КонецВыборки.Значение, "ДЛФ=T")); + КонецЕсли; + + ПараметрыЗаполнения = Новый Структура; + ПараметрыЗаполнения.Вставить("ДатаНачала", ПериодДеньДатаНачала); + ПараметрыЗаполнения.Вставить("ДатаОкончания", ПериодДеньДатаОкончания); + ПараметрыЗаполнения.Вставить("РазмерОдновременноСессий", РазмерОдновременноСессий.Значение); + ПараметрыЗаполнения.Вставить("МинимальнаяПродолжительностьСеансовРегламентныхЗаданий", + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий.Значение); + ПараметрыЗаполнения.Вставить("ОтображатьФоновыеЗадания", ОтображатьФоновыеЗадания.Значение); + ПараметрыЗаполнения.Вставить("ВыводитьЗаголовок", ВыводитьЗаголовок); + ПараметрыЗаполнения.Вставить("ВыводитьОтбор", ВыводитьОтбор); + ПараметрыЗаполнения.Вставить("ЗаголовокОтчета", ЗаголовокОтчета); + ПараметрыЗаполнения.Вставить("СкрытьРегламентныеЗадания", СкрытьРегламентныеЗадания.Значение); + + РезультатФормированияОтчета = Отчеты.АнализЖурналаРегистрации. + СформироватьОтчетПоПродолжительностиРаботыРегламентныхЗаданий(ПараметрыЗаполнения); + ДокументРезультат.Вывести(РезультатФормированияОтчета.Отчет); +КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Templates/МакетОтчетаПоОшибкамВЖурналеРегистрации/Template.mxlx b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/МакетОтчетаПоОшибкамВЖурналеРегистрации/Template.mxlx similarity index 98% rename from SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Templates/МакетОтчетаПоОшибкамВЖурналеРегистрации/Template.mxlx rename to SSL/src/Reports/АнализЖурналаРегистрации/Templates/МакетОтчетаПоОшибкамВЖурналеРегистрации/Template.mxlx index 3913859b9..4867ac3e0 100644 --- a/SSL/src/DataProcessors/КонтрольЖурналаРегистрации/Templates/МакетОтчетаПоОшибкамВЖурналеРегистрации/Template.mxlx +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/МакетОтчетаПоОшибкамВЖурналеРегистрации/Template.mxlx @@ -102,7 +102,7 @@ ru - Отчет по ошибкам и предупреждениям в журнале регистрации + Ошибки и предупреждения в журнале регистрации diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs new file mode 100644 index 000000000..d5c295e07 --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ОсновнаяСхемаКомпоновкиДанных/Template.dcs @@ -0,0 +1,2233 @@ + + + + ИсточникДанных1 + Local + + + АнализАктивностиПользователей + + Дата + Дата + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата</v8:content> + </v8:item> + + + xs:dateTime + + DateTime + + + + + ФорматРедактирования + ДЛФ=D + + + + + Пользователь + Пользователь + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователь</v8:content> + </v8:item> + + + xs:string + d5p1:CatalogRef + + 0 + Variable + + + + + ЧасовРаботы + ЧасовРаботы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Часов работы</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + КоличествоЗапусков + КоличествоЗапусков + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Подключений за период</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + СозданоДокументов + СозданоДокументов + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Введено документов</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + СозданоСправочников + СозданоСправочников + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Введено справочников</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + ИзмененоДокументов + ИзмененоДокументов + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменено документов</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + ИзмененоСправочников + ИзмененоСправочников + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменено справочников</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + ОбъектСправочникДокумент + ОбъектСправочникДокумент + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Объект</v8:content> + </v8:item> + + + d5p1:DocumentRef + 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:decimal + + 0 + 0 + Any + + + + + Неделя + Неделя + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Неделя</v8:content> + </v8:item> + + + + Предупреждений + Предупреждений + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Предупреждений</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + СозданоБизнесПроцессов + СозданоБизнесПроцессов + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Создано бизнес процессов</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + СозданоЗадач + СозданоЗадач + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Создано задач</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + ИзмененоБизнесПроцессов + ИзмененоБизнесПроцессов + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменено бизнес процессов</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + ИзмененоЗадач + ИзмененоЗадач + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменено задач</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + ИсточникДанных1 + АнализАктивностиПользователей + + + ОдновременноСессий + + ДатаОдновременноРаботавшихПользователей + ДатаОдновременноРаботавшихПользователей + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Дата одновременно работавших пользователей</v8:content> + </v8:item> + + + xs:dateTime + + Date + + + + + ФорматРедактирования + ДЛФ=D + + + + + ОдновременноРаботавшихПользователей + ОдновременноРаботавшихПользователей + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Одновременно работавших пользователей</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + + + СписокОдновременноРаботавшихПользователей + СписокОдновременноРаботавшихПользователей + + <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> + + + + Формат + ДФ='MMMM yy' + + + + + Введено + СозданоДокументов+СозданоСправочников+СозданоБизнесПроцессов+СозданоЗадач + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Введено</v8:content> + </v8:item> + + + + Изменено + ИзмененоДокументов+ИзмененоСправочников+ИзмененоБизнесПроцессов+ИзмененоЗадач + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Изменено</v8:content> + </v8:item> + + + + ЧасовРаботы + Сумма(ЧасовРаботы) + + + КоличествоЗапусков + Сумма(КоличествоЗапусков) + + + СозданоСправочников + Сумма(СозданоСправочников) + + + СозданоДокументов + Сумма(СозданоДокументов) + + + ИзмененоДокументов + Сумма(ИзмененоДокументов) + + + ИзмененоСправочников + Сумма(ИзмененоСправочников) + + + Ошибок + Сумма(Ошибок) + + + Предупреждений + Сумма(Предупреждений) + + + ОдновременноРаботавшихПользователей + Максимум(ОдновременноРаботавшихПользователей) + + + СозданоБизнесПроцессов + Сумма(СозданоБизнесПроцессов) + + + СозданоЗадач + Сумма(СозданоЗадач) + + + ИзмененоБизнесПроцессов + Сумма(ИзмененоБизнесПроцессов) + + + ИзмененоЗадач + Сумма(ИзмененоЗадач) + + + Введено + Сумма(Введено) + + + Изменено + Сумма(Изменено) + + + Пользователь + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователь</v8:content> + </v8:item> + + + d4p1:CatalogRef.Пользователи + + Справочник.Пользователи.ПустаяСсылка + false + + + false + БыстрыйВыбор + true + + + true + + + ПользователиИГруппы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Пользователи</v8:content> + </v8:item> + + + d4p1:CatalogRef.ГруппыПользователей + d4p1:CatalogRef.Пользователи + + false + true + + + ВариантОтчета + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Вариант отчета</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + + false + + АнализАктивностиПользователей + + + ru + АнализАктивностиПользователей + + + + + АктивностьПользователя + + + ru + АктивностьПользователя + + + + + КонтрольЖурналаРегистрации + + + ru + КонтрольЖурналаРегистрации + + + + + ДиаграммаГанта + + + ru + ДиаграммаГанта + + + + + + Период + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Период</v8:content> + </v8:item> + + + v8:StandardPeriod + + + Custom + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + false + Always + + + ПериодДень + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>День</v8:content> + </v8:item> + + + xs:dateTime + + Date + + + 0001-01-01T00:00:00 + false + true + + + НачалоВыборки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Начало периода</v8:content> + </v8:item> + + + xs:dateTime + + Time + + + 0001-01-01T00:00:00 + false + + + false + БыстрыйВыбор + true + + + + + КонецВыборки + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Конец периода</v8:content> + </v8:item> + + + xs:dateTime + + Time + + + 0001-01-01T00:00:00 + false + + + false + БыстрыйВыбор + true + + + + + ОтображатьФоновыеЗадания + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Отображать фоновые задания</v8:content> + </v8:item> + + + xs:boolean + + false + false + + + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Минимальная продолжительность сеансов регламентных заданий (в секундах)</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + 1 + false + + + false + БыстрыйВыбор + true + + + + + РазмерОдновременноСессий + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Минимальное число одновременно работавших регламентных заданий за период</v8:content> + </v8:item> + + + xs:decimal + + 0 + 0 + Any + + + 2 + false + + + СкрытьРегламентныеЗадания + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Скрыть регламентные задания</v8:content> + </v8:item> + + + xs:string + + 0 + Variable + + + false + + 11 + + + ru + 11 + + + + true + + + БыстрыйВыбор + true + + + + + ВыводитьБизнесПроцессы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выводить бизнес процессы</v8:content> + </v8:item> + + + xs:boolean + + false + false + + + ВыводитьЗадачи + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выводить задачи</v8:content> + </v8:item> + + + xs:boolean + + false + false + + + ВыводитьСправочники + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выводить справочники</v8:content> + </v8:item> + + + xs:boolean + + true + false + + + ВыводитьДокументы + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Выводить документы</v8:content> + </v8:item> + + + xs:boolean + + true + false + + + АнализАктивностиПользователей + + + ru + Анализ активности пользователей + + + + + + false + Пользователь + Справочник.Пользователи.ПустаяСсылка + Inaccessible + + + ПользователиИГруппы + + 68f497d5-6ccd-4e09-b808-41381e412b71 + + + ВариантОтчета + АнализАктивностиПользователей + Inaccessible + + + Период + + FromBeginningOfThisWeek + + 096a8202-3e8e-4960-bd6b-44ff3ce4a150 + + + + + Дата + Desc + + + + + false + МакетОформления + Основной + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Анализ активности пользователей + + + + + ВыводитьПараметрыДанных + DontOutput + + + + + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Пользователь + + + КоличествоЗапусков + + + ЧасовРаботы + + + + + ru + Документы + + + + СозданоДокументов + + + ru + Введено + + + + + false + СозданоДокументов.ПроцентОбщий + + + ru + Процент введённых документов + + + + + ИзмененоДокументов + + + ru + Изменено + + + + Auto + + + + + ru + Справочники + + + + СозданоСправочников + + + ru + Введено + + + + + false + СозданоСправочников.ПроцентОбщий + + + ru + Процент введённых справочников + + + + + ИзмененоСправочников + + + ru + Изменено + + + + Auto + + + Ошибок + + + Предупреждений + + + + + + + СозданоДокументов.ПроцентОбщий + + + СозданоДокументов.ПроцентОбщий + + + + + + Формат + + + ru + ЧДЦ=1 + + + + + + + + + + Неделя + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Неделя + Desc + + + + + Неделя + + + КоличествоЗапусков + + + ЧасовРаботы + + + + + ru + Документы + + + + СозданоДокументов + + + ru + Введено + + + + + false + СозданоДокументов.ПроцентОбщий + + + ru + Процент введённых документов + + + + + ИзмененоДокументов + + + ru + Изменено + + + + Auto + + + + + ru + Справочники + + + + СозданоСправочников + + + ru + Введено + + + + + false + СозданоСправочников.ПроцентОбщий + + + ru + Процент введённых справочников + + + + + ИзмененоСправочников + + + ru + Изменено + + + + Auto + + + Ошибок + + + Предупреждений + + + + + + + СозданоДокументов.ПроцентОбщий + + + СозданоСправочников.ПроцентОбщий + + + + + + Формат + + + ru + ЧДЦ=1 + + + + + + + + + + Дата + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Дата + + + КоличествоЗапусков + + + ЧасовРаботы + + + + + ru + Документы + + + + СозданоДокументов + + + false + СозданоДокументов.ПроцентОбщий + + + ru + Процент введённых документов + + + + + ИзмененоДокументов + + Auto + + + + + ru + Справочники + + + + СозданоСправочников + + + false + СозданоСправочников.ПроцентОбщий + + + ru + Процент введённых справочников + + + + + ИзмененоСправочников + + Auto + + + Ошибок + + + Предупреждений + + + + + + + + + Формат + + + ru + ДЛФ=D + + + + + + + + + СозданоДокументов.ПроцентОбщий + + + СозданоСправочников.ПроцентОбщий + + + + + + Формат + + + ru + ЧДЦ=1 + + + + + + + + + false + МакетОформления + Основной + + + + + + + + + + Месяц + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + Месяц + Desc + + + + + Месяц + + + ОдновременноРаботавшихПользователей + + + + + ВыводитьЗаголовок + Auto + + + Заголовок + + + ru + Максимальное количество одновременно работавших пользователей + + + + + + + + ДатаОдновременноРаботавшихПользователей + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ДатаОдновременноРаботавшихПользователей + Desc + + + + + ДатаОдновременноРаботавшихПользователей + + + ОдновременноРаботавшихПользователей + + + + + + + + + Формат + + + ru + ДЛФ=D + + + + + + + + + + + + + СписокОдновременноРаботавшихПользователей + + + + + + + + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Пользователь + + + + + + + Пользователь + + + + + + ОриентацияТекста + 90 + + + + + + + + СозданоДокументов + + + ru + Введено документов + + + + + ИзмененоДокументов + + + + + + + + + + + + ТипДиаграммы + Column3D + + ТипДиаграммы.ВидПодписей + Value + + Inaccessible + c9fb7cc5-1a5c-4d86-8b12-9cd52a653e8b + + + ru + Диаграмма "Введено документов и справочников" + + + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Введено и изменено документов за период + + + + + Inaccessible + b107874d-909e-4392-aa4f-0db8e22da5bd + + + + + + Пользователь + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Пользователь + + + + + + + Пользователь + + + + + + ОриентацияТекста + 90 + + + + + + + + СозданоСправочников + + + ru + Введено справочников + + + + + ИзмененоСправочников + + + + + ТипДиаграммы + Column3D + + ТипДиаграммы.ВидПодписей + Value + + Inaccessible + 5c12e698-83eb-44aa-b6e9-177b311687e9 + + + ru + Диаграмма "Изменено документов и справочников" + + + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Введено и изменено справочников за период + + + + + Inaccessible + 590739fd-ea53-4ccb-b656-e8022a481821 + + + + + АктивностьПользователя + + + ru + Активность пользователя + + + + + + Пользователь + Справочник.Пользователи.ПустаяСсылка + f3e37921-e067-4378-9e11-592fe639175d + + + ВариантОтчета + АктивностьПользователя + Inaccessible + + + Период + + ThisMonth + + 241193b9-14c4-4e2a-b054-a4621b874b1b + + + ВыводитьБизнесПроцессы + false + Normal + d5037a1a-760b-4c36-9ca9-09ea18799b4a + + + ВыводитьЗадачи + false + Normal + d6ef39bc-3fc0-4062-8447-ea0e893b1ee9 + + + ВыводитьСправочники + true + Normal + c268755e-2d90-4bfb-95ad-b417d94acc76 + + + ВыводитьДокументы + true + Normal + d37e3ad6-1428-4f76-9b07-09a46f10e8e2 + + + + + ГоризонтальноеРасположениеОбщихИтогов + BeginAndEnd + + + ВертикальноеРасположениеОбщихИтогов + BeginAndEnd + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Активности пользователя + + + + + ВыводитьПараметрыДанных + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + Дата + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ОбъектСправочникДокумент + Filled + + + + + Дата + Desc + + + + + Дата + + + Введено + + + Изменено + + + + + + + + + Формат + + + ru + ДЛФ=D + + + + + + + + + ВыводитьЗаголовок + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + ВидОбъекта + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ВидОбъекта + Filled + Hierarchy + + + + + + + + ВидОбъекта + + + Введено + + + Изменено + + + + + ВыводитьЗаголовок + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + ОбъектСправочникДокумент + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + ОбъектСправочникДокумент + Filled + Hierarchy + + + + + + + + ОбъектСправочникДокумент + + + Введено + + + Изменено + + + + + ВыводитьЗаголовок + DontOutput + + + ВыводитьОтбор + DontOutput + + + + + + + + + + Дата + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Дата + + + + + + + Дата + + + + + + ОриентацияТекста + 90 + + + Формат + + + ru + ДФ=dd.MM.yy + + + + + + + + + + + + ru + Активность пользователя + + + + СозданоДокументов + + + ИзмененоДокументов + + Auto + + + + + ТипДиаграммы + Column3D + + ТипДиаграммы.ВидПодписей + Value + + Inaccessible + + + ru + Диаграмма "Введено и изменено справочников" + + + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Введено и изменено документов + + + + + Inaccessible + + + ru + Введено и изменено документов + + + + + + + + Дата + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Дата + + + + + + + Дата + + + + + + ОриентацияТекста + 90 + + + Формат + + + ru + ДФ=dd.MM.yy + + + + + + + + + + + + ru + Активность пользователя + + + + СозданоСправочников + + + ИзмененоСправочников + + Auto + + + + + ТипДиаграммы + Column3D + + ТипДиаграммы.ВидПодписей + Value + + Inaccessible + + + ru + Диаграмма "Введено и изменено документов" + + + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Введено и изменено справочников + + + + + Inaccessible + + + ru + Введено и изменено справочников + + + + + false + + + + Дата + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Дата + + + + + + + Дата + + + + + + ОриентацияТекста + 90 + + + Формат + + + ru + ДФ=dd.MM.yy + + + + + + + + + + + + ru + Активность пользователя + + + + СозданоБизнесПроцессов + + + ИзмененоБизнесПроцессов + + Auto + + + + + ТипДиаграммы + Column3D + + ТипДиаграммы.ВидПодписей + Value + + Inaccessible + + + ru + Диаграмма "Введено и изменено бизнес процессов" + + + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Введено и изменено бизнес процессов + + + + + Inaccessible + + + ru + Введено и изменено бизнес процессов + + + + + false + + + + Дата + Items + None + 0001-01-01T00:00:00 + 0001-01-01T00:00:00 + + + + + + + + Дата + + + + + + + Дата + + + + + + ОриентацияТекста + 90 + + + Формат + + + ru + ДФ=dd.MM.yy + + + + + + + + + + + + ru + Активность пользователя + + + + СозданоЗадач + + + ИзмененоЗадач + + Auto + + + + + ТипДиаграммы + Column3D + + ТипДиаграммы.ВидПодписей + Value + + Inaccessible + + + ru + Диаграмма "Введено и изменено задач" + + + + + ВыводитьЗаголовок + Output + + + Заголовок + + + ru + Введено и изменено задач + + + + + Inaccessible + + + ru + Введено и изменено задач + + + + + + + КонтрольЖурналаРегистрации + + + ru + Контроль журнала регистрации + + + + + + ВариантОтчета + КонтрольЖурналаРегистрации + Inaccessible + + + Период + + Today + + b96f4337-582d-44bb-811e-0c3fd0272d90 + + + + + + ПродолжительностьРаботыРегламентныхЗаданий + + + ru + Продолжительность работы регламентных заданий + + + + + + ВариантОтчета + ДиаграммаГанта + + + ПериодДень + + BeginningOfThisDay + + dacee8a6-c265-4eab-88c8-73bce4cfac31 + + + НачалоВыборки + 0001-01-01T00:00:00 + 70ff7a19-a98d-467f-8ecc-aec9af531f51 + + + КонецВыборки + + 5b96c047-cb1c-40e6-9166-28ae35f8f401 + + + ОтображатьФоновыеЗадания + false + Normal + e45f3bb0-79be-4f59-866f-25be8751097a + + + МинимальнаяПродолжительностьСеансовРегламентныхЗаданий + 1 + Normal + 58ce8a3e-60ca-47d0-80e5-959ff853791b + + + РазмерОдновременноСессий + 2 + Normal + 3d4c399e-0aae-4cb2-8822-c871bfb081aa + + + СкрытьРегламентныеЗадания + + 90775166-bde1-4f36-9ab7-3e8e34927d56 + + + + + false + Заголовок + + + + false + ВыводитьОтбор + DontOutput + + + + + \ 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..227cb3795 --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/ПродолжительностьРаботыРегламентныхЗаданий/Template.mxlx @@ -0,0 +1,3215 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 25 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 5 + + + + + 0 + + + + 6 + + + ru + Продолжительность работы регламентных заданий + + + + + + + + 1 + + + + 7 + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + + 2 + + + + 12 + + + ru + За период с [ДатаНачала] по [ДатаОкончания] + + + + + + + 8 + + + + + 9 + + + + + 10 + + + + + 11 + + + + + + 3 + + + + 13 + + + ru + [РежимОтображенияИнтервалов] отображение интервалов с нулевой продолжительностью + + + + + + + 3 + + + + + 3 + + + + + 4 + + + + + 5 + + + + + + 4 + + + + 0 + + + + + + 6 + + + + 14 + + + ru + Период + + + + + + + 15 + + + ru + Максимум одновременных заданий + + + + + + + 16 + + + + + 17 + + + + + 0 + + + + + + 7 + + + + 18 + ДатаОдновременноРегламентныхЗаданий + + + + + 19 + ОдновременноРегламентныхЗаданий + + + + + 20 + + + + + 20 + + + + + 0 + + + + + + 8 + + + + 21 + СписокРегламентныхЗаданий + РасшифровкаЗадания + + + + 2 + + 0 + + + + + 0 + + + + + 0 + + + + + + 20 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 21 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 22 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 23 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 24 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 25 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 26 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 27 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 28 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 29 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 30 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 31 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 32 + + + + 0 + + + + 5 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 33 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 34 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 35 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 36 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 37 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 38 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 39 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 40 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 41 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 42 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 43 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 44 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 45 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 46 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 47 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 48 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + 49 + + + 8 + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + 0 + + + + + + GanttChart + 1 + 22 + 11 + 15 + 19 + 21 + 0 + 0 + 4 + 0 + false + Stretch + 0 + + + 1 + 0 + true + 0 + + 1 + #991919 + + Solid + + Rhomb + + + ru + Сводная + + + false + false + false + false + + true + 0 + -1 + 0 + Column3D + None + , + Edge + + + style:FormTextColor + + true + auto + + Single + + auto + None + SouthWest + + true + true + + WithoutBorder + + style:BorderColor + + WithoutBorder + + style:BorderColor + + Single + + style:BorderColor + true + style:FormBackColor + true + style:FormBackColor + true + style:FormBackColor + false + #FFFFFF + style:FormTextColor + style:FormTextColor + style:FormTextColor + + + + true + true + true + true + true + + Auto + + Solid + + #A9A9A9 + true + true + NotDefined + 4 + 30 + Half + 0 + false + 0 + 0 + true + false + false + false + false + true + true + Right + + true + Palette32 + Auto + 0 + false + false + false + #A90000 + Circle + Needle + + 0 + 180 + 5 + InsideScale + false + 4 + #A9A9A9 + true + 0 + true + 0 + true + true + true + true + + 0 + 0.1675 + 0 + 0 + + + 0.832351015062213 + 0.00196463654223969 + 0.0539419087136929 + 0 + + + 0.8325 + 0 + 0 + 0.945558739255014 + + style:BorderColor + + WithoutBorder + + + false + true + 95 + 0 + 10 + 10 + 3 + + Solid + + #000000 + + + UseCoordinates + UseCoordinates + UseCoordinates + + + false + + 0 + 0 + 0 + 0 + 0 + 0 + + 0 + 4294927473 + + + + + #000000 + #000000 + auto + auto + + true + false + + + false + + 0 + 0 + 0 + 0 + 0 + 0 + + 0 + 4294901761 + + + #000000 + #000000 + #000000 + + true + false + + true + + Top + + Hour + 1 + true + + Dotted + + #C0C0C0 + WeekDay + + + 0 + + auto + auto + true + + false + #FFFFFF + style:FormTextColor + 0 + + AllData + Day + 1 + true + 2012-10-12T13:00:00 + 2012-10-21T13:59:59 + 2012-10-12T13:00:00 + Gradient + 3 + Day + None + false + None + + #FFFFFF + + + 0 + + 0 + + #000080 + + Solid + + Auto + Auto + Auto + Auto + + + true + 23 + 50 + 50 + + 1 + 0 + 4 + + + 2 + 0 + 4 + + + 3 + 0 + 4 + + + 8 + 0 + 1 + + + -1 + 0 + 4 + + + 1 + 0 + 4 + + + 2 + 0 + 4 + + + 3 + 0 + 4 + + + 6 + 0 + 4 + + + 7 + 0 + 4 + + + 8 + 0 + 4 + + + Диаграмма + + Rows + 11 + 19 + -1 + -1 + + + + ДиаграммаГанта + 1 + + + Отбор + + Rows + 2 + 4 + -1 + -1 + + + + ПустаяСтрока + + Rows + 9 + 10 + -1 + -1 + + + + СписокРегламентныхЗаданий + + Rows + 8 + 8 + -1 + -1 + + + + Таблица + + Rectangle + 7 + 7 + 1 + 0 + + + + Таблица1 + + Rectangle + 8 + 8 + 0 + 1 + + + + ШапкаОтчета + + Rows + 0 + 1 + -1 + -1 + + + + ШапкаТаблицы + + Rows + 6 + 6 + -1 + -1 + + + + Solid + + + None + + + None + + + + + + 229 + + + 262 + + + 237 + + + 234 + + + 217 + + + 0 + Left + + + 1 + 104 + + + 77 + + + 43 + + + 114 + + + 96 + + + 1 + 104 + Template + + + 209 + Template + + + 2 + 0 + #CCC085 + 216 + #F4ECC5 + Text + false + + + 2 + 0 + #CCC085 + 234 + #F4ECC5 + Text + + + 2 + 1 + 234 + + + 2 + 1 + + + 0 + #CCC085 + 216 + d3p1:White + Parameter + + + 0 + #CCC085 + 433 + d3p1:White + Parameter + + + 1 + 433 + + + 0 + #CCC085 + 216 + d3p1:White + Parameter + 2 + + + 2 + Top + style:FieldBackColor + false + + + 72 + + \ 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..52aae567e --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/Templates/РасшифровкаРегламентныхЗаданий/Template.mxlx @@ -0,0 +1,1123 @@ + + + + ru + ru + + ru + Русский + Русский + + + + 16 + + 0 + + 1 + + + + 1 + + 2 + + + + 2 + + 3 + + + + 3 + + 4 + + + + 4 + + 2 + + + + 5 + + 5 + + + + 6 + + 6 + + + + 7 + + 7 + + + + + 0 + + + + 8 + + + ru + Сведения о регламентном задании + + + + + + 8 + + 9 + + + + + 9 + + + + + 9 + + + + + 9 + + + + + 9 + + + + + 9 + + + + + 9 + + + + + 9 + + + + + + 1 + + + + 10 + + + + + 11 + + + + 3 + + 12 + + + + + + 2 + + + + 13 + + + ru + За период с [ДатаНачала] по [ДатаОкончания] + + + + + + + 2 + + + + + 3 + + + + + 4 + + + + + 14 + + + + + 15 + + + + + 16 + + + + + 7 + + + + + + 3 + + + + 17 + + + ru + [РежимОтображенияСеансов] отображение сеансов задания с нулевой продолжительностью + + + + + + + + 4 + + + + 10 + + + + + 11 + + + + 3 + + 12 + + + + + + 5 + + + + 10 + + + + + 11 + + + + 3 + + 12 + + + + + + 6 + + + + 0 + + + + + 11 + + + + 3 + + 12 + + + + + + 7 + + + + 0 + + + + + 11 + + + + 3 + + 12 + + + + + + 8 + + + 1 + + 11 + + + + 3 + + 12 + + + + + + 9 + + + + 18 + + + ru + [ТипЗадания] задание + + + + + + + 11 + + + + 3 + + 19 + НазваниеСобытия + + + + 7 + + 0 + + + + + + 10 + + + + 20 + + + ru + Общая продолжительность + + + + + + + 11 + + + + 3 + + 21 + ОбщаяПродолжительностьРЗ + + + + 7 + + 0 + + + + + + 11 + + + + 20 + + + ru + Запусков + + + + + + + 11 + + + + 3 + + 21 + Запусков + + + + 7 + + 0 + + + + + + 12 + + + + 22 + + + ru + Отменено заданий + + + + + + + 11 + + + + 3 + + 23 + Отменено + + + + 7 + + 0 + + + + + + 13 + + + + 24 + + + ru + Ошибок выполнения + + + + + + + 11 + + + + 3 + + 25 + ОшибкаВыполнения + + + + 7 + + 0 + + + + + + 14 + + + 1 + + 11 + + + + 3 + + 12 + + + + + + 15 + + + + 26 + + + ru + Сеансы регламентного задания + + + + + + 7 + + 27 + + + + + + 16 + + + + 0 + + + + + 11 + + + + 3 + + 12 + + + + 6 + + 0 + + + + + 0 + + + + + + 17 + + + + 28 + + + ru + п/п + + + + + + + 29 + + + ru + Начало + + + + + + + 30 + + + ru + Завершение + + + + + + 4 + + 29 + + + ru + Длительность + + + + + + + 31 + + + ru + Сеанс + + + + + + + 32 + + + + + 33 + + + + + + 18 + + + + 34 + НомерИнтервала + РасшифровкаИнтервала + + + + + 35 + НачалоИнтервала + РасшифровкаИнтервала + + + + + 36 + КонецИнтервала + РасшифровкаИнтервала + + + + 4 + + 35 + ПродолжительностьРЗ + РасшифровкаИнтервала + + + + + 37 + Сеанс + РасшифровкаИнтервала + + + + + 0 + + + + + true + 9 + 19 + 19 + + 0 + 0 + 7 + + + 2 + 0 + 7 + + + 3 + 0 + 7 + + + 6 + 0 + 7 + + + 7 + 0 + 7 + + + 8 + 3 + 2 + + + 9 + 0 + 2 + + + 9 + 3 + 3 + + + 10 + 0 + 2 + + + 10 + 3 + 3 + + + 11 + 0 + 2 + + + 11 + 3 + 3 + + + 12 + 0 + 2 + + + 12 + 3 + 3 + + + 13 + 0 + 2 + + + 13 + 3 + 3 + + + 14 + 3 + 2 + + + 15 + 0 + 6 + + + 16 + 0 + 5 + + + 17 + 2 + 1 + + + 17 + 6 + 1 + + + 18 + 2 + 1 + + + -1 + 0 + 7 + + + -1 + 0 + 7 + + + -1 + 0 + 7 + + + 2 + 0 + 7 + + + 9 + 0 + 7 + + + 10 + 0 + 7 + + + 11 + 0 + 7 + + + 12 + 0 + 7 + + + 13 + 0 + 7 + + + 15 + 0 + 7 + + + 16 + 0 + 7 + + + 17 + 0 + 6 + + + 18 + 0 + 6 + + + Заголовок + + Rows + 0 + 3 + -1 + -1 + + + + ЗаголовокИнтервалов + + Rows + 15 + 15 + -1 + -1 + + + + ПустаяСтрока + + Rows + 6 + 7 + -1 + -1 + + + + Таблица + + Rows + 9 + 13 + -1 + -1 + + + + ТаблицаИнтервалов + + Rows + 18 + 18 + -1 + -1 + + + + ШапкаТаблицы + + Rows + 17 + 17 + -1 + -1 + + + + Solid + + + None + + + + + + + 49 + + + 99 + + + 34 + + + 59 + + + 66 + + + 27 + + + 252 + + + 0 + 72 + Text + + + 72 + + + 1 + + + 53 + + + 43 + + + 2 + 49 + Template + + + 138 + + + 67 + + + 154 + + + 209 + Template + + + 3 + 0 + 0 + #CCC085 + 95 + #F4ECC5 + Template + + + 0 + #CCC085 + 43 + Right + Wrap + Parameter + + + 3 + 0 + 0 + #CCC085 + 237 + #F4ECC5 + + + 0 + #CCC085 + 237 + Right + d3p1:White + Parameter + + + 3 + 0 + 0 + #CCC085 + 234 + #F4ECC5 + + + 0 + #CCC085 + 234 + Right + d3p1:White + Parameter + + + 3 + 0 + #CCC085 + 217 + #F4ECC5 + + + 0 + #CCC085 + 217 + Right + d3p1:White + Parameter + + + 0 + 49 + Text + + + 0 + + + 3 + 0 + #CCC085 + 95 + Right + #F4ECC5 + + + 3 + 0 + 0 + 0 + #CCC085 + 191 + Right + #F4ECC5 + + + 3 + 0 + #CCC085 + 191 + Right + #F4ECC5 + + + 3 + 0 + #CCC085 + 191 + Right + #F4ECC5 + Text + + + 3 + 1 + 191 + Right + + + 96 + + + 0 + #CCC085 + 95 + Right + Parameter + + + 0 + 0 + 0 + #CCC085 + 237 + Right + d3p1:White + Parameter + Cell + + + 0 + #CCC085 + 234 + Right + d3p1:White + Parameter + Cell + + + 0 + #CCC085 + 237 + Right + Parameter + Cell + + \ No newline at end of file diff --git a/SSL/src/Reports/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo b/SSL/src/Reports/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo new file mode 100644 index 000000000..36fcf94aa --- /dev/null +++ b/SSL/src/Reports/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo @@ -0,0 +1,68 @@ + + + + + + + АнализЖурналаРегистрации + + ru + Анализ журнала регистрации + + true + Report.АнализЖурналаРегистрации.Form.ФормаОтчета + Report.АнализЖурналаРегистрации.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов + + + ru + + + + ФормаОтчета + + ru + Форма отчета + + PersonalComputer + MobileDevice + + + СведенияОРегламентномЗадании + + ru + Сведения о регламентном задании + + PersonalComputer + MobileDevice + + + ОсновнаяСхемаКомпоновкиДанных + + ru + Основная схема компоновки данных + + DataCompositionSchema + + + МакетОтчетаПоОшибкамВЖурналеРегистрации + + ru + Макет отчета по ошибкам в журнале регистрации + + + + ПродолжительностьРаботыРегламентныхЗаданий + + ru + Продолжительность работы регламентных заданий + + + + РасшифровкаРегламентныхЗаданий + + ru + Расшифровка регламентных заданий + + + diff --git a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl index 75eb164e8..02b45286d 100644 --- a/SSL/src/Reports/АнализОпроса/ObjectModule.bsl +++ b/SSL/src/Reports/АнализОпроса/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -1111,3 +1113,5 @@ КонецФункции + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/БизнесПроцессы/БизнесПроцессы.mdo b/SSL/src/Reports/БизнесПроцессы/БизнесПроцессы.mdo index e0e78e852..47e6c3457 100644 --- a/SSL/src/Reports/БизнесПроцессы/БизнесПроцессы.mdo +++ b/SSL/src/Reports/БизнесПроцессы/БизнесПроцессы.mdo @@ -11,6 +11,7 @@ true Report.БизнесПроцессы.Template.Макет + SettingsStorage.ХранилищеВариантовОтчетов ru Отчет по бизнес-процессам diff --git a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl index ee1d04d25..3f11fa886 100644 --- a/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаЗагрузки/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -49,3 +51,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl index ee1d04d25..3f11fa886 100644 --- a/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl +++ b/SSL/src/Reports/ДатыЗапретаИзменения/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ @@ -49,3 +51,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html b/SSL/src/Reports/ЗависшиеЗадачи/Help/ru.html index fd287ce7c..75940b28b 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/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo b/SSL/src/Reports/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo index 7cc504eb2..b73fa8330 100644 --- a/SSL/src/Reports/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo +++ b/SSL/src/Reports/ЗависшиеЗадачи/ЗависшиеЗадачи.mdo @@ -12,6 +12,7 @@ true Report.ЗависшиеЗадачи.Form.ФормаОтчета Report.ЗависшиеЗадачи.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов ru diff --git a/SSL/src/Reports/Задания/Задания.mdo b/SSL/src/Reports/Задания/Задания.mdo index ccf327e9a..87d5b887e 100644 --- a/SSL/src/Reports/Задания/Задания.mdo +++ b/SSL/src/Reports/Задания/Задания.mdo @@ -11,6 +11,7 @@ true Report.Задания.Template.Макет + SettingsStorage.ХранилищеВариантовОтчетов ru Отчет по заданиям diff --git a/SSL/src/Reports/Задачи/Help/ru.html b/SSL/src/Reports/Задачи/Help/ru.html index d98e673ea..d1f502e7e 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/Задачи/Задачи.mdo b/SSL/src/Reports/Задачи/Задачи.mdo index 8dff8fd3f..ee217dd94 100644 --- a/SSL/src/Reports/Задачи/Задачи.mdo +++ b/SSL/src/Reports/Задачи/Задачи.mdo @@ -12,6 +12,7 @@ true Report.Задачи.Form.ФормаОтчета Report.Задачи.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов ru diff --git a/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html b/SSL/src/Reports/ЗадачиИстекающиеНаДату/Help/ru.html index 70651d393..6fd2910c2 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/ЗадачиИстекающиеНаДату/ЗадачиИстекающиеНаДату.mdo b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ЗадачиИстекающиеНаДату.mdo index 9eabdbad9..c3d045a8c 100644 --- a/SSL/src/Reports/ЗадачиИстекающиеНаДату/ЗадачиИстекающиеНаДату.mdo +++ b/SSL/src/Reports/ЗадачиИстекающиеНаДату/ЗадачиИстекающиеНаДату.mdo @@ -12,6 +12,7 @@ true Report.ЗадачиИстекающиеНаДату.Form.ФормаОтчета Report.ЗадачиИстекающиеНаДату.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов true diff --git a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl index c8f2e0c2d..06a722d48 100644 --- a/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl +++ b/SSL/src/Reports/ПраваДоступа/Forms/ФормаОтчета/Module.bsl @@ -4,23 +4,25 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - // Отказ от инициализации, чтобы гарантировать получение формы при передаче параметра "АвтоТест". + // Возврат при получении формы для анализа. Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Если НЕ ЗначениеЗаполнено(Параметры.Пользователь) - ИЛИ ( НЕ Пользователи.ЭтоПолноправныйПользователь() + ИЛИ ( НЕ Пользователи.ЭтоПолноправныйПользователь() И Параметры.Пользователь <> Пользователи.ТекущийПользователь() ) Тогда - // + Отказ = Истина; Возврат; КонецЕсли; // Установка заголовка формы. - Заголовок = УправлениеДоступом.ЗаголовокПодчиненнойФормы(НСтр("ru = 'Права доступа: %1 (%2)'"), Параметры.Пользователь); + Заголовок = УправлениеДоступомСлужебный.ЗаголовокПодчиненнойФормы( + НСтр("ru = 'Права доступа: %1 (%2)'"), Параметры.Пользователь); - Элементы.ПодробныеСведенияОПравахДоступа.Видимость = НЕ УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); + Элементы.ПодробныеСведенияОПравахДоступа.Видимость = + НЕ УправлениеДоступомПереопределяемый.УпрощенныйИнтерфейсНастройкиПравДоступа(); ВывестиОтчет(Параметры.Пользователь); @@ -69,7 +71,7 @@ Свойства = Новый Структура; Свойства.Вставить("Ссылка", Ссылка); - // Вывод заголовка + // Вывод заголовка. Если ТипЗнч(Ссылка) = Тип("СправочникСсылка.Пользователи") Тогда Свойства.Вставить("ПредставлениеВидаОбъекта", НСтр("ru = 'пользователя'")); Свойства.Вставить("ПредставлениеВидаОбъектаДоп", НСтр("ru = 'пользователю'")); @@ -101,20 +103,30 @@ Область = Макет.ПолучитьОбласть("СвойстваПользователяИБДетали1"); СвойстваПользователяИБ = Неопределено; - РолиПользователяИБ = Неопределено; + УстановитьПривилегированныйРежим(Истина); - ПользовательИБПрочитан = Пользователи.ПрочитатьПользователяИБ(ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ИдентификаторПользователяИБ"), СвойстваПользователяИБ, РолиПользователяИБ); + + ПользовательИБПрочитан = Пользователи.ПрочитатьПользователяИБ( + ОбщегоНазначения.ПолучитьЗначениеРеквизита(Ссылка, "ИдентификаторПользователяИБ"), + СвойстваПользователяИБ); + УстановитьПривилегированныйРежим(Ложь); + Если ПользовательИБПрочитан Тогда Область.Параметры.ДоступКИнформационнойБазеРазрешен = Истина; Документ.Вывести(Область, 2); - // + Область = Макет.ПолучитьОбласть("СвойстваПользователяИБДетали2"); Область.Параметры.Заполнить(СвойстваПользователяИБ); - Область.Параметры.ПользовательИнфБазыЯзыкПредставление = ПредставлениеЯзыка(СвойстваПользователяИБ.ПользовательИнфБазыЯзык); - Область.Параметры.ПользовательИнфБазыРежимЗапускаПредставление = ПредставлениеРежимаЗапуска(СвойстваПользователяИБ.ПользовательИнфБазыРежимЗапуска); - Если НЕ ЗначениеЗаполнено(СвойстваПользователяИБ.ПользовательИнфБазыПользовательОС) Тогда - Область.Параметры.ПользовательИнфБазыПользовательОС = НСтр("ru = 'Не задан'"); + + Область.Параметры.ЯзыкПредставление = + ПредставлениеЯзыка(СвойстваПользователяИБ.Язык); + + Область.Параметры.РежимЗапускаПредставление = + ПредставлениеРежимаЗапуска(СвойстваПользователяИБ.РежимЗапуска); + + Если НЕ ЗначениеЗаполнено(СвойстваПользователяИБ.ПользовательОС) Тогда + Область.Параметры.ПользовательОС = НСтр("ru = 'Не указан'"); КонецЕсли; Документ.Вывести(Область, 2); Иначе @@ -140,15 +152,18 @@ КонецЕсли; КонецЕсли; - // Вывод групп доступа + // Вывод групп доступа. УстановитьПривилегированныйРежим(Истина); Запрос = Новый Запрос; - Запрос.УстановитьПараметр("Пользователь", Ссылка); - Запрос.УстановитьПараметр("ВыводПравГруппы", ВыводПравГруппы); - Запрос.УстановитьПараметр("СинонимыРолей", ПользователиСерверПовтИсп.СинонимыРолей()); - Запрос.УстановитьПараметр("СинонимыТаблиц", УправлениеДоступомСерверПовтИсп.СинонимыТаблиц()); - Запрос.УстановитьПараметр("ПраваОМДРолей", УправлениеДоступомСерверПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей(Истина)); + Запрос.УстановитьПараметр("Пользователь", Ссылка); + Запрос.УстановитьПараметр("ВыводПравГруппы", ВыводПравГруппы); + Запрос.УстановитьПараметр("СинонимыРолей", ПользователиСлужебныйПовтИсп.СинонимыРолей()); + Запрос.УстановитьПараметр("СинонимыТаблиц", УправлениеДоступомСлужебныйПовтИсп.СинонимыТаблиц()); + + Запрос.УстановитьПараметр("ПраваОМДРолей", + УправлениеДоступомСлужебныйПовтИсп.ОграничиваемыеПраваОбъектовМетаданныхРолей(Истина)); + Запрос.УстановитьПараметр("ВидыОграниченийПрав", ВидыОграниченийПравОбъектовМетаданных()); Запрос.Текст = @@ -224,8 +239,8 @@ | ИЛИ ТИПЗНАЧЕНИЯ(&Пользователь) = ТИП(Справочник.ВнешниеПользователи) | ИЛИ ГруппыПользователей.ГруппаДоступа = &Пользователь) | ПО СправочникГруппыДоступа.Ссылка = ПользователиГруппДоступа.Ссылка - | И ((НЕ СправочникГруппыДоступа.ПометкаУдаления)) - | И ((НЕ СправочникГруппыДоступа.Профиль.ПометкаУдаления)) + | И (НЕ СправочникГруппыДоступа.ПометкаУдаления) + | И (НЕ СправочникГруппыДоступа.Профиль.ПометкаУдаления) |; | |//////////////////////////////////////////////////////////////////////////////// @@ -369,11 +384,11 @@ | КОГДА ПраваОМДРолей.Просмотр | И ПраваОМДРолей.ЧтениеБезОграничения | ТОГДА 0 - | КОГДА (НЕ ПраваОМДРолей.Просмотр) + | КОГДА НЕ ПраваОМДРолей.Просмотр | И ПраваОМДРолей.ЧтениеБезОграничения | ТОГДА 1 | КОГДА ПраваОМДРолей.Просмотр - | И (НЕ ПраваОМДРолей.ЧтениеБезОграничения) + | И НЕ ПраваОМДРолей.ЧтениеБезОграничения | ТОГДА 2 | ИНАЧЕ 3 | КОНЕЦ КАК ВидРолей, @@ -506,33 +521,33 @@ | КОГДА ПраваОМДРолей.ДобавлениеБезОграничения | И ПраваОМДРолей.ИзменениеБезОграничения | ТОГДА 0 - | КОГДА (НЕ ПраваОМДРолей.ДобавлениеБезОграничения) + | КОГДА НЕ ПраваОМДРолей.ДобавлениеБезОграничения | И ПраваОМДРолей.ИзменениеБезОграничения | ТОГДА 100 | КОГДА ПраваОМДРолей.ДобавлениеБезОграничения - | И (НЕ ПраваОМДРолей.ИзменениеБезОграничения) + | И НЕ ПраваОМДРолей.ИзменениеБезОграничения | ТОГДА 200 | ИНАЧЕ 300 | КОНЕЦ + ВЫБОР | КОГДА ПраваОМДРолей.Добавление | И ПраваОМДРолей.Изменение | ТОГДА 0 - | КОГДА (НЕ ПраваОМДРолей.Добавление) + | КОГДА НЕ ПраваОМДРолей.Добавление | И ПраваОМДРолей.Изменение | ТОГДА 10 | КОГДА ПраваОМДРолей.Добавление - | И (НЕ ПраваОМДРолей.Изменение) + | И НЕ ПраваОМДРолей.Изменение | ТОГДА 20 | ИНАЧЕ 30 | КОНЕЦ + ВЫБОР | КОГДА ПраваОМДРолей.ИнтерактивноеДобавление | И ПраваОМДРолей.Редактирование | ТОГДА 0 - | КОГДА (НЕ ПраваОМДРолей.ИнтерактивноеДобавление) + | КОГДА НЕ ПраваОМДРолей.ИнтерактивноеДобавление | И ПраваОМДРолей.Редактирование | ТОГДА 1 | КОГДА ПраваОМДРолей.ИнтерактивноеДобавление - | И (НЕ ПраваОМДРолей.Редактирование) + | И НЕ ПраваОМДРолей.Редактирование | ТОГДА 2 | ИНАЧЕ 3 | КОНЕЦ КАК ВидРолей, @@ -710,27 +725,36 @@ Документ.НачатьАвтогруппировкуСтрок(); Если ПодробныеСведенияОПравахДоступа Тогда - // Вывод групп доступа - ОписанияГруппДоступа = РезультатыЗапроса[4].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам).Строки; - ОднаПерсональнаяГруппа = ОписанияГруппДоступа.Количество() = 1 И ЗначениеЗаполнено(ОписанияГруппДоступа[0].Участник); - // + // Вывод групп доступа. + ОписанияГруппДоступа = РезультатыЗапроса[4].Выгрузить( + ОбходРезультатаЗапроса.ПоГруппировкам).Строки; + + ОднаПерсональнаяГруппа + = ОписанияГруппДоступа.Количество() = 1 + И ЗначениеЗаполнено(ОписанияГруппДоступа[0].Участник); + Область = Макет.ПолучитьОбласть("ВсеГруппыДоступаГруппировка"); Область.Параметры.Заполнить(Свойства); - Область.Параметры.ПредставлениеДоступа = ?(ОднаПерсональнаяГруппа, НСтр("ru = 'Ограничения доступа'"), НСтр("ru = 'Группы доступа'")); + + Область.Параметры.ПредставлениеДоступа = ?( + ОднаПерсональнаяГруппа, + НСтр("ru = 'Ограничения доступа'"), + НСтр("ru = 'Группы доступа'")); + Документ.Вывести(Область, 1); Документ.Вывести(ОбластьОтступ, 2); - // + Для каждого ОписаниеГруппыДоступа Из ОписанияГруппДоступа Цикл Если НЕ ОднаПерсональнаяГруппа Тогда Область = Макет.ПолучитьОбласть("ГруппаДоступаГруппировка"); Область.Параметры.Заполнить(ОписаниеГруппыДоступа); Документ.Вывести(Область, 2); КонецЕсли; - // Вывод случаев участия в группе + // Вывод случаев участия в группе. Если ОписаниеГруппыДоступа.Строки.Количество() = 1 И ОписаниеГруппыДоступа.Строки[0].Участник = Ссылка Тогда // Пользователь входит в группу доступа только явно - // поэтому вывод не требуется + // поэтому вывод не требуется. Иначе Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппу"); Документ.Вывести(Область, 3); @@ -738,32 +762,53 @@ Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппуЯвно"); Документ.Вывести(Область, 3); КонецЕсли; - ОписанияГруппПользователей = ОписаниеГруппыДоступа.Строки.НайтиСтроки(Новый Структура("ГрупповоеУчастие, ПодчиненноеУчастие", Истина, Ложь)); + Отбор = Новый Структура("ГрупповоеУчастие, ПодчиненноеУчастие", Истина, Ложь); + ОписанияГруппПользователей = ОписаниеГруппыДоступа.Строки.НайтиСтроки(Отбор); Если ОписанияГруппПользователей.Количество() > 0 Тогда - Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппуКакУчастникГруппПользователей"); + + Область = Макет.ПолучитьОбласть( + "ГруппаДоступаДеталиПользовательВходитВГруппуКакУчастникГруппПользователей"); + Документ.Вывести(Область, 3); Для каждого ОписаниеГруппыПользователя ИЗ ОписанияГруппПользователей Цикл - Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппаКакПредставлениеУчастника"); + + Область = Макет.ПолучитьОбласть( + "ГруппаДоступаДеталиПользовательВходитВГруппаКакПредставлениеУчастника"); + Область.Параметры.Заполнить(ОписаниеГруппыПользователя); Документ.Вывести(Область, 3); КонецЦикла; КонецЕсли; - ОписанияПодчиненныхПользователей = ОписаниеГруппыДоступа.Строки.НайтиСтроки(Новый Структура("ГрупповоеУчастие, ПодчиненноеУчастие", Ложь, Истина)); + Отбор = Новый Структура("ГрупповоеУчастие, ПодчиненноеУчастие", Ложь, Истина); + ОписанияПодчиненныхПользователей = ОписаниеГруппыДоступа.Строки.НайтиСтроки(Отбор); Если ОписанияПодчиненныхПользователей.Количество() > 0 Тогда - Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппуКакРуководитель"); + + Область = Макет.ПолучитьОбласть( + "ГруппаДоступаДеталиПользовательВходитВГруппуКакРуководитель"); + Документ.Вывести(Область, 3); Для каждого ОписаниеПодчиненногоПользователя ИЗ ОписанияПодчиненныхПользователей Цикл - Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппаКакПредставлениеУчастника"); + + Область = Макет.ПолучитьОбласть( + "ГруппаДоступаДеталиПользовательВходитВГруппаКакПредставлениеУчастника"); + Область.Параметры.Заполнить(ОписаниеПодчиненногоПользователя); Документ.Вывести(Область, 3); КонецЦикла; КонецЕсли; - ОписанияГруппПодчиненныхПользователей = ОписаниеГруппыДоступа.Строки.НайтиСтроки(Новый Структура("ГрупповоеУчастие, ПодчиненноеУчастие", Истина, Истина)); + Отбор = Новый Структура("ГрупповоеУчастие, ПодчиненноеУчастие", Истина, Истина); + ОписанияГруппПодчиненныхПользователей = ОписаниеГруппыДоступа.Строки.НайтиСтроки(Отбор); Если ОписанияГруппПодчиненныхПользователей.Количество() > 0 Тогда - Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппуКакРуководительОдноИзУчастниковГруппыПользователей"); + + Область = Макет.ПолучитьОбласть( + "ГруппаДоступаДеталиПользовательВходитВГруппуКакРуководительОдноИзУчастниковГруппыПользователей"); + Документ.Вывести(Область, 3); Для каждого ОписаниеГруппыПодчиненныхПользователей ИЗ ОписанияГруппПодчиненныхПользователей Цикл - Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПользовательВходитВГруппаКакПредставлениеУчастника"); + + Область = Макет.ПолучитьОбласть( + "ГруппаДоступаДеталиПользовательВходитВГруппаКакПредставлениеУчастника"); + Область.Параметры.Заполнить(ОписаниеГруппыПодчиненныхПользователей); Документ.Вывести(Область, 3); КонецЦикла; @@ -771,20 +816,20 @@ КонецЕсли; Если НЕ ОднаПерсональнаяГруппа Тогда - // Вывод профиля + // Вывод профиля. Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиПрофиль"); Область.Параметры.Заполнить(ОписаниеГруппыДоступа); Документ.Вывести(Область, 3); КонецЕсли; - // Вывод администратора участников + // Вывод администратора участников. Если НЕ ОднаПерсональнаяГруппа И ЗначениеЗаполнено(ОписаниеГруппыДоступа.Администратор) Тогда Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиАдминистратор"); Область.Параметры.Заполнить(ОписаниеГруппыДоступа); Документ.Вывести(Область, 3); КонецЕсли; - // Вывод описания + // Вывод описания. Если НЕ ОднаПерсональнаяГруппа И ЗначениеЗаполнено(ОписаниеГруппыДоступа.Описание) Тогда Область = Макет.ПолучитьОбласть("ГруппаДоступаДеталиОписание"); Область.Параметры.Заполнить(ОписаниеГруппыДоступа); @@ -795,7 +840,7 @@ Документ.Вывести(ОбластьОтступ, 3); КонецЦикла; - // Вывод ролей по профилям + // Вывод ролей по профилям. РолиПоПрофилям = РезультатыЗапроса[6].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); РолиПоПрофилям.Строки.Сортировать("ПредставлениеПрофиля Возр, ПредставлениеРоли Возр"); @@ -820,9 +865,19 @@ Документ.Вывести(ОбластьОтступ, 2); КонецЕсли; - // Вывод объектов для просмотра + // Вывод объектов для просмотра. ПраваОбъектов = РезультатыЗапроса[9].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - ПраваОбъектов.Строки.Сортировать("ПорядокВидаОбъектов Возр, ПредставлениеОбъекта Возр, ПредставлениеПрофиля Возр, ВидРолей Возр, ПредставлениеРоли Возр, ПредставлениеГруппыДоступа Возр, ПредставлениеВидаДоступа Возр, ПредставлениеЗначенияДоступа Возр", Истина); + + ПраваОбъектов.Строки.Сортировать( + "ПорядокВидаОбъектов Возр, + |ПредставлениеОбъекта Возр, + |ПредставлениеПрофиля Возр, + |ВидРолей Возр, + |ПредставлениеРоли Возр, + |ПредставлениеГруппыДоступа Возр, + |ПредставлениеВидаДоступа Возр, + |ПредставлениеЗначенияДоступа Возр", + Истина); Область = Макет.ПолучитьОбласть("ПраваОбъектовГруппировка"); Область.Параметры.ПредставлениеГруппировкиПравОбъектов = НСтр("ru = 'Просмотр объектов'"); @@ -839,7 +894,7 @@ КонецЕсли; Область.Параметры.Заполнить(ОписаниеВидаОбъектов); Документ.Вывести(Область, 2); - // + Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаЗаголовокДоп"); Если ПодробныеСведенияОПравахДоступа Тогда Область.Параметры.ПредставлениеПрофилиИлиГруппыДоступа = НСтр("ru = '(профиль, роли)'"); @@ -872,25 +927,38 @@ Для каждого ОписаниеВидаРолей Из ОписаниеПрофиля.Строки Цикл Если ОписаниеВидаРолей.ВидРолей < 1000 Тогда Если ПодробныеСведенияОПравахДоступа Тогда - // Описание роли с/без ограничений + // Описание роли с/без ограничений. Для каждого ОписаниеРоли Из ОписаниеВидаРолей.Строки Цикл + Если ОписаниеВидаРолей.Строки.Количество() > 1 - И ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) < ОписаниеВидаРолей.Строки.Количество()-1 Тогда - ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ","; + И ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) + < ОписаниеВидаРолей.Строки.Количество()-1 Тогда + + ПредставлениеРолейПрофиля + = ПредставлениеРолейПрофиля + + ОписаниеРоли.ПредставлениеРоли + ","; + КоличествоРолей = КоличествоРолей + 1; КонецЕсли; Если ОписаниеВидаРолей.ЧтениеБезОграничения Тогда ВсеРолиСОграничением = Ложь; КонецЕсли; - Если ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) = ОписаниеВидаРолей.Строки.Количество()-1 Тогда - ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ","; + + Если ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) = + ОписаниеВидаРолей.Строки.Количество()-1 Тогда + + ПредставлениеРолейПрофиля + = ПредставлениеРолейПрофиля + + ОписаниеРоли.ПредставлениеРоли + + ","; + КоличествоРолей = КоличествоРолей + 1; КонецЕсли; ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + Символы.ПС; КонецЦикла; КонецЕсли; ИначеЕсли ОписаниеВидаРолей.Строки[0].Строки.Количество() > 0 Тогда - // Описание ограничений доступа для ролей с ограничениями + // Описание ограничений доступа для ролей с ограничениями. Для каждого ОписаниеГруппыДоступа Из ОписаниеВидаРолей.Строки[0].Строки Цикл Индекс = ОписаниеГруппыДоступа.Строки.Количество()-1; Пока Индекс >= 0 Цикл @@ -905,15 +973,23 @@ КонецЕсли; Если УпрощенныйИнтерфейс Тогда Область.Параметры.ПрофильИлиГруппаДоступа = ОписаниеПрофиля.ГруппаДоступа; - Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеПрофиля.ПредставлениеГруппыДоступа; + + Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = + ОписаниеПрофиля.ПредставлениеГруппыДоступа; Иначе Область.Параметры.ПрофильИлиГруппаДоступа = ОписаниеГруппыДоступа.ГруппаДоступа; Если ПодробныеСведенияОПравахДоступа Тогда ПредставлениеРолейПрофиля = СокрЛП(ПредставлениеРолейПрофиля); - Если ЗначениеЗаполнено(ПредставлениеРолейПрофиля) И Прав(ПредставлениеРолейПрофиля, 1) = "," Тогда - ПредставлениеРолейПрофиля = Лев(ПредставлениеРолейПрофиля, СтрДлина(ПредставлениеРолейПрофиля)-1); + + Если ЗначениеЗаполнено(ПредставлениеРолейПрофиля) + И Прав(ПредставлениеРолейПрофиля, 1) = "," Тогда + + ПредставлениеРолейПрофиля = Лев( + ПредставлениеРолейПрофиля, + СтрДлина(ПредставлениеРолейПрофиля) - 1); КонецЕсли; - Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа + Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа + = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа + " |(" + НСтр("ru = 'профиль'") + ": " + ОписаниеПрофиля.ПредставлениеПрофиля + ", " @@ -922,7 +998,8 @@ |" + СокрЛП(ПредставлениеРолейПрофиля) + ")"; Иначе - Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа; + Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = + ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа; КонецЕсли; КонецЕсли; Если ВсеРолиСОграничением Тогда @@ -940,7 +1017,9 @@ КонецЕсли; Область.Параметры.ВидДоступа = ОписаниеВидаДоступа.ВидДоступа; Если ОписаниеВидаДоступа.Строки.Количество() = 0 Тогда - Область.Параметры.ПредставлениеВидаДоступа = ОписаниеВидаДоступа.ПредставлениеВидаДоступа + + Область.Параметры.ПредставлениеВидаДоступа + = ОписаниеВидаДоступа.ПредставлениеВидаДоступа + " (" + ?(ОписаниеВидаДоступа.ДоступРазрешен, НСтр("ru = 'без запрещенных'"), @@ -953,43 +1032,82 @@ "") + ")"; Иначе - Область.Параметры.ПредставлениеВидаДоступа = ОписаниеВидаДоступа.ПредставлениеВидаДоступа + Область.Параметры.ПредставлениеВидаДоступа + = ОписаниеВидаДоступа.ПредставлениеВидаДоступа + " (" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(ОписаниеВидаДоступа.ДоступРазрешен, НСтр("ru = 'запрешенные'"), НСтр("ru = 'разрешенные'")), Свойства.ПредставлениеВидаОбъектаДоп) - + ?(ОписаниеВидаДоступа.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.Пользователи, + + ?(ОписаниеВидаДоступа.ВидДоступа + = ПланыВидовХарактеристик.ВидыДоступа.Пользователи, НСтр("ru = ', текущий пользователь всегда разрешен'"), "") - + ?(ОписаниеВидаДоступа.ВидДоступа = ПланыВидовХарактеристик.ВидыДоступа.ВнешниеПользователи, + + ?(ОписаниеВидаДоступа.ВидДоступа + = ПланыВидовХарактеристик.ВидыДоступа.ВнешниеПользователи, НСтр("ru = ', текущий внешний пользователь всегда разрешен'"), "") + "):"; КонецЕсли; - ВывестиОбласть(Документ, Область, 3, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, НачальнаяСтрокаОбластиГруппыДоступа); + + ВывестиОбласть( + Документ, + Область, + 3, + НачальнаяСтрокаОбластиОбъекта, + КонечнаяСтрокаОбластиОбъекта, + НачальнаяСтрокаОбластиГруппыДоступа); + Для каждого ОписаниеЗначенияДоступа Из ОписаниеВидаДоступа.Строки Цикл Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрокаЗначенияДоступа"); - Область.Параметры.ПредставлениеЗначенияДоступа = ОписаниеЗначенияДоступа.ПредставлениеЗначенияДоступа; - Область.Параметры.ЗначениеДоступа = ОписаниеЗначенияДоступа.ЗначениеДоступа; - ВывестиОбласть(Документ, Область, 3, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, НачальнаяСтрокаОбластиГруппыДоступа); + + Область.Параметры.ПредставлениеЗначенияДоступа = + ОписаниеЗначенияДоступа.ПредставлениеЗначенияДоступа; + + Область.Параметры.ЗначениеДоступа = + ОписаниеЗначенияДоступа.ЗначениеДоступа; + + ВывестиОбласть( + Документ, + Область, + 3, + НачальнаяСтрокаОбластиОбъекта, + КонечнаяСтрокаОбластиОбъекта, + НачальнаяСтрокаОбластиГруппыДоступа); КонецЦикла; КонецЦикла; КонецЕсли; Если Область <> Неопределено Тогда - ВывестиОбласть(Документ, Область, 3, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, НачальнаяСтрокаОбластиГруппыДоступа); + ВывестиОбласть( + Документ, + Область, + 3, + НачальнаяСтрокаОбластиОбъекта, + КонечнаяСтрокаОбластиОбъекта, + НачальнаяСтрокаОбластиГруппыДоступа); КонецЕсли; - // Установка границы видов доступа текущей группы доступа - УстановитьГраницыВидовИЗначенийДоступа(Документ, НачальнаяСтрокаОбластиГруппыДоступа, КонечнаяСтрокаОбластиОбъекта); + // Установка границы видов доступа текущей группы доступа. + УстановитьГраницыВидовИЗначенийДоступа( + Документ, + НачальнаяСтрокаОбластиГруппыДоступа, + КонечнаяСтрокаОбластиОбъекта); // Объединение ячеек группы доступа и установка границы - ОбъединитьЯчейкиУстановитьГраницы(Документ, НачальнаяСтрокаОбластиГруппыДоступа, КонечнаяСтрокаОбластиОбъекта, 3); + ОбъединитьЯчейкиУстановитьГраницы( + Документ, + НачальнаяСтрокаОбластиГруппыДоступа, + КонечнаяСтрокаОбластиОбъекта, + 3); КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; // Объединение ячеек объектаи установка границы - ОбъединитьЯчейкиУстановитьГраницы(Документ, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, 2); + ОбъединитьЯчейкиУстановитьГраницы( + Документ, + НачальнаяСтрокаОбластиОбъекта, + КонечнаяСтрокаОбластиОбъекта, + 2); КонецЦикла; Документ.Вывести(ОбластьОтступ, 3); Документ.Вывести(ОбластьОтступ, 3); @@ -999,9 +1117,18 @@ Документ.Вывести(ОбластьОтступ, 2); Документ.Вывести(ОбластьОтступ, 2); - // Вывод объектов для редактирования + // Вывод объектов для редактирования. ПраваОбъектов = РезультатыЗапроса[10].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); - ПраваОбъектов.Строки.Сортировать("ПорядокВидаОбъектов Возр, ПредставлениеОбъекта Возр, ПредставлениеПрофиля Возр, ВидРолей Возр, ПредставлениеРоли Возр, ПредставлениеГруппыДоступа Возр, ПредставлениеВидаДоступа Возр, ПредставлениеЗначенияДоступа Возр", Истина); + ПраваОбъектов.Строки.Сортировать( + "ПорядокВидаОбъектов Возр, + |ПредставлениеОбъекта Возр, + |ПредставлениеПрофиля Возр, + |ВидРолей Возр, + |ПредставлениеРоли Возр, + |ПредставлениеГруппыДоступа Возр, + |ПредставлениеВидаДоступа Возр, + |ПредставлениеЗначенияДоступа Возр", + Истина); Область = Макет.ПолучитьОбласть("ПраваОбъектовГруппировка"); Область.Параметры.ПредставлениеГруппировкиПравОбъектов = НСтр("ru = 'Редактирование объектов'"); @@ -1028,7 +1155,9 @@ Область.Параметры.Заполнить(ОписаниеВидаОбъектов); Документ.Вывести(Область, 3); - ДобавлениеИспользуется = ВРег(Лев(ОписаниеВидаОбъектов.ВидОбъектов, СтрДлина("Регистр"))) <> ВРег("Регистр"); + ДобавлениеИспользуется = + ВРег(Лев(ОписаниеВидаОбъектов.ВидОбъектов, СтрДлина("Регистр"))) <> ВРег("Регистр"); + Для каждого ОписаниеОбъекта Из ОписаниеВидаОбъектов.Строки Цикл НачальнаяСтрокаОбластиОбъекта = Неопределено; КонечнаяСтрокаОбластиОбъекта = Неопределено; @@ -1067,26 +1196,39 @@ ВсеРолиСОграничением = Истина; Для каждого ОписаниеВидаРолей Из ОписаниеПрофиля.Строки Цикл Если ОписаниеВидаРолей.ВидРолей < 1000 Тогда - // Описание роли с/без ограничений + // Описание роли с/без ограничений. Если ПодробныеСведенияОПравахДоступа Тогда Для каждого ОписаниеРоли Из ОписаниеВидаРолей.Строки Цикл + Если ОписаниеВидаРолей.Строки.Количество() > 1 - И ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) < ОписаниеВидаРолей.Строки.Количество()-1 Тогда - ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ","; + И ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) + < ОписаниеВидаРолей.Строки.Количество()-1 Тогда + + ПредставлениеРолейПрофиля = + ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ","; + КоличествоРолей = КоличествоРолей + 1; КонецЕсли; - Если ОписаниеВидаРолей.ДобавлениеБезОграничения И ОписаниеВидаРолей.ИзменениеБезОграничения Тогда + + Если ОписаниеВидаРолей.ДобавлениеБезОграничения + И ОписаниеВидаРолей.ИзменениеБезОграничения Тогда + ВсеРолиСОграничением = Ложь; КонецЕсли; - Если ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) = ОписаниеВидаРолей.Строки.Количество()-1 Тогда - ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ","; + + Если ОписаниеВидаРолей.Строки.Индекс(ОписаниеРоли) = + ОписаниеВидаРолей.Строки.Количество()-1 Тогда + + ПредставлениеРолейПрофиля = + ПредставлениеРолейПрофиля + ОписаниеРоли.ПредставлениеРоли + ","; + КоличествоРолей = КоличествоРолей + 1; КонецЕсли; ПредставлениеРолейПрофиля = ПредставлениеРолейПрофиля + Символы.ПС; КонецЦикла; КонецЕсли; ИначеЕсли ОписаниеВидаРолей.Строки[0].Строки.Количество() > 0 Тогда - // Описание ограничений доступа для ролей с ограничениями + // Описание ограничений доступа для ролей с ограничениями. Для каждого ОписаниеГруппыДоступа Из ОписаниеВидаРолей.Строки[0].Строки Цикл Индекс = ОписаниеГруппыДоступа.Строки.Количество()-1; Пока Индекс >= 0 Цикл @@ -1106,10 +1248,16 @@ Область.Параметры.ПрофильИлиГруппаДоступа = ОписаниеГруппыДоступа.ГруппаДоступа; Если ПодробныеСведенияОПравахДоступа Тогда ПредставлениеРолейПрофиля = СокрЛП(ПредставлениеРолейПрофиля); - Если ЗначениеЗаполнено(ПредставлениеРолейПрофиля) И Прав(ПредставлениеРолейПрофиля, 1) = "," Тогда - ПредставлениеРолейПрофиля = Лев(ПредставлениеРолейПрофиля, СтрДлина(ПредставлениеРолейПрофиля)-1); + + Если ЗначениеЗаполнено(ПредставлениеРолейПрофиля) + И Прав(ПредставлениеРолейПрофиля, 1) = "," Тогда + + ПредставлениеРолейПрофиля = Лев( + ПредставлениеРолейПрофиля, + СтрДлина(ПредставлениеРолейПрофиля)-1); КонецЕсли; - Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа + Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа + = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа + " |(" + НСтр("ru = 'профиль'") + ": " + ОписаниеПрофиля.ПредставлениеПрофиля + ", " @@ -1118,7 +1266,8 @@ |" + СокрЛП(ПредставлениеРолейПрофиля) + ")"; Иначе - Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа; + Область.Параметры.ПредставлениеПрофиляИлиГруппыДоступа = + ОписаниеГруппыДоступа.ПредставлениеГруппыДоступа; КонецЕсли; КонецЕсли; Если ВсеРолиСОграничением Тогда @@ -1143,7 +1292,9 @@ КонецЕсли; Область.Параметры.ВидДоступа = ОписаниеВидаДоступа.ВидДоступа; Если ОписаниеВидаДоступа.Строки.Количество() = 0 Тогда - Область.Параметры.ПредставлениеВидаДоступа = ОписаниеВидаДоступа.ПредставлениеВидаДоступа + + Область.Параметры.ПредставлениеВидаДоступа + = ОписаниеВидаДоступа.ПредставлениеВидаДоступа + " (" + ?(ОписаниеВидаДоступа.ДоступРазрешен, НСтр("ru = 'без запрещенных'"), @@ -1156,7 +1307,8 @@ "") + ")"; Иначе - Область.Параметры.ПредставлениеВидаДоступа = ОписаниеВидаДоступа.ПредставлениеВидаДоступа + Область.Параметры.ПредставлениеВидаДоступа + = ОписаниеВидаДоступа.ПредставлениеВидаДоступа + " (" + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ?(ОписаниеВидаДоступа.ДоступРазрешен, @@ -1171,28 +1323,65 @@ "") + "):"; КонецЕсли; - ВывестиОбласть(Документ, Область, 3, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, НачальнаяСтрокаОбластиГруппыДоступа); + + ВывестиОбласть( + Документ, + Область, + 3, + НачальнаяСтрокаОбластиОбъекта, + КонечнаяСтрокаОбластиОбъекта, + НачальнаяСтрокаОбластиГруппыДоступа); + Для каждого ОписаниеЗначенияДоступа Из ОписаниеВидаДоступа.Строки Цикл Область = Макет.ПолучитьОбласть("ПраваОбъектовТаблицаСтрокаЗначенияДоступа"); - Область.Параметры.ПредставлениеЗначенияДоступа = ОписаниеЗначенияДоступа.ПредставлениеЗначенияДоступа; - Область.Параметры.ЗначениеДоступа = ОписаниеЗначенияДоступа.ЗначениеДоступа; - ВывестиОбласть(Документ, Область, 3, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, НачальнаяСтрокаОбластиГруппыДоступа); + + Область.Параметры.ПредставлениеЗначенияДоступа = + ОписаниеЗначенияДоступа.ПредставлениеЗначенияДоступа; + + Область.Параметры.ЗначениеДоступа = + ОписаниеЗначенияДоступа.ЗначениеДоступа; + + ВывестиОбласть( + Документ, + Область, + 3, + НачальнаяСтрокаОбластиОбъекта, + КонечнаяСтрокаОбластиОбъекта, + НачальнаяСтрокаОбластиГруппыДоступа); КонецЦикла; КонецЦикла; КонецЕсли; Если Область <> Неопределено Тогда - ВывестиОбласть(Документ, Область, 3, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, НачальнаяСтрокаОбластиГруппыДоступа); + ВывестиОбласть( + Документ, + Область, + 3, + НачальнаяСтрокаОбластиОбъекта, + КонечнаяСтрокаОбластиОбъекта, + НачальнаяСтрокаОбластиГруппыДоступа); КонецЕсли; - // Установка границы видов доступа текущей группы доступа - УстановитьГраницыВидовИЗначенийДоступа(Документ, НачальнаяСтрокаОбластиГруппыДоступа, КонечнаяСтрокаОбластиОбъекта); - // Объединение ячеек группы доступа и установка границы - ОбъединитьЯчейкиУстановитьГраницы(Документ, НачальнаяСтрокаОбластиГруппыДоступа, КонечнаяСтрокаОбластиОбъекта, 3); + // Установка границы видов доступа текущей группы доступа. + УстановитьГраницыВидовИЗначенийДоступа( + Документ, + НачальнаяСтрокаОбластиГруппыДоступа, + КонечнаяСтрокаОбластиОбъекта); + + // Объединение ячеек группы доступа и установка границы. + ОбъединитьЯчейкиУстановитьГраницы( + Документ, + НачальнаяСтрокаОбластиГруппыДоступа, + КонечнаяСтрокаОбластиОбъекта, + 3); КонецЦикла; КонецЕсли; КонецЦикла; КонецЦикла; - // Объединение ячеек объекта и установка границы - ОбъединитьЯчейкиУстановитьГраницы(Документ, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, 2); + // Объединение ячеек объекта и установка границы. + ОбъединитьЯчейкиУстановитьГраницы( + Документ, + НачальнаяСтрокаОбластиОбъекта, + КонечнаяСтрокаОбластиОбъекта, + 2); КонецЦикла; Документ.Вывести(ОбластьОтступ, 3); Документ.Вывести(ОбластьОтступ, 3); @@ -1216,7 +1405,9 @@ ПраваПоЗначениям.Строки.Сортировать("ПредставлениеВидаОбъектов Возр"); Для каждого ОписаниеТипаЗначений Из ПраваПоЗначениям.Строки Цикл - ПраваПоЗначению = УправлениеДоступом.ВозможныеПраваПоЗначениюДоступа(ОписаниеТипаЗначений.ТипЗначенияПолноеИмя); + + ПраваПоЗначению = УправлениеДоступомСлужебный.ВозможныеПраваПоЗначениюДоступа( + ОписаниеТипаЗначений.ТипЗначенияПолноеИмя); Для каждого ОписаниеОбъекта Из ОписаниеТипаЗначений.Строки Цикл ОписаниеОбъекта.ПолноеНаименование = ОписаниеОбъекта.ЗначениеДоступа.ПолноеНаименование(); @@ -1280,11 +1471,20 @@ Область = Макет.ПолучитьОбласть("ПраваПоЗначениямДеталиОбъект"); Область.Параметры.Заполнить(ОписаниеОбъекта); Документ.Вывести(Область, 2); - МакетСтроки.Область("R1C1").Текст = ?(ОписаниеОбъекта.РаспространяетсяВИерархии, "+", ""); + + МакетСтроки.Область("R1C1").Текст = ?( + ОписаниеОбъекта.РаспространяетсяВИерархии, "+", ""); + МакетСтроки.Область("R1C1").ШиринаКолонки = 6; - МакетСтроки.Область("R1C2").Текст = ?(ОписаниеОбъекта.Запрещено, НСтр("ru = 'Запрещено'"), НСтр("ru = 'Разрешено'")); + + МакетСтроки.Область("R1C2").Текст = ?( + ОписаниеОбъекта.Запрещено, + НСтр("ru = 'Запрещено'"), + НСтр("ru = 'Разрешено'")); + МакетСтроки.Область("R1C2").ШиринаКолонки = 12; - Для НомерОбластиПрава = 3 По ПраваПоЗначению.Количество()+2 Цикл + + Для НомерОбластиПрава = 3 По ПраваПоЗначению.Количество() + 2 Цикл НомерЯчейки = "R1C" + Формат(НомерОбластиПрава, "ЧГ="); МакетСтроки.Область(НомерЯчейки).Текст = ""; КонецЦикла; @@ -1299,11 +1499,18 @@ НомерЯчейки = "R1C" + Формат(ПраваПоЗначению.Количество() + 3, "ЧГ="); Если НЕ ВыводПравГруппы Тогда Если ОписаниеОбъекта.ГрупповоеУчастие И НЕ ОписаниеОбъекта.ПодчиненноеУчастие Тогда - МакетСтроки.Область(НомерЯчейки).Текст = ОписаниеПрава.ПользовательНаименование + " (" + НСтр("ru = 'группа'") + ")"; + + МакетСтроки.Область(НомерЯчейки).Текст = + ОписаниеПрава.ПользовательНаименование + " (" + НСтр("ru = 'группа'") + ")"; + ИначеЕсли ОписаниеОбъекта.ГрупповоеУчастие И ОписаниеОбъекта.ПодчиненноеУчастие Тогда - МакетСтроки.Область(НомерЯчейки).Текст = ОписаниеПрава.ПользовательНаименование + " (" + НСтр("ru = 'группа подчиненного'") + ")"; + + МакетСтроки.Область(НомерЯчейки).Текст = + ОписаниеПрава.ПользовательНаименование + " (" + НСтр("ru = 'группа подчиненного'") + ")"; + ИначеЕсли НЕ ОписаниеОбъекта.ГрупповоеУчастие И ОписаниеОбъекта.ПодчиненноеУчастие Тогда - МакетСтроки.Область(НомерЯчейки).Текст = ОписаниеПрава.ПользовательНаименование + " (" + НСтр("ru = 'подчиненный'") + ")";; + МакетСтроки.Область(НомерЯчейки).Текст = + ОписаниеПрава.ПользовательНаименование + " (" + НСтр("ru = 'подчиненный'") + ")";; КонецЕсли; КонецЕсли; МакетСтроки.Область(НомерЯчейки).ШиринаКолонки = 40; @@ -1316,7 +1523,12 @@ КонецПроцедуры &НаСервере -Процедура ВывестиОбласть(Знач Документ, Область, Уровень, НачальнаяСтрокаОбластиОбъекта, КонечнаяСтрокаОбластиОбъекта, НачальнаяСтрокаОбластиГруппыДоступа) +Процедура ВывестиОбласть(Знач Документ, + Область, + Уровень, + НачальнаяСтрокаОбластиОбъекта, + КонечнаяСтрокаОбластиОбъекта, + НачальнаяСтрокаОбластиГруппыДоступа) Если НачальнаяСтрокаОбластиОбъекта = Неопределено Тогда НачальнаяСтрокаОбластиОбъекта = Документ.Вывести(Область, Уровень); @@ -1334,9 +1546,16 @@ КонецПроцедуры &НаСервере -Процедура ОбъединитьЯчейкиУстановитьГраницы(Знач Документ, Знач НачальнаяСтрокаОбласти, Знач КонечнаяСтрокаОбласти, Знач НомерКолонки) +Процедура ОбъединитьЯчейкиУстановитьГраницы(Знач Документ, + Знач НачальнаяСтрокаОбласти, + Знач КонечнаяСтрокаОбласти, + Знач НомерКолонки) - Область = Документ.Область(НачальнаяСтрокаОбласти.Верх, НомерКолонки, КонечнаяСтрокаОбласти.Низ, НомерКолонки); + Область = Документ.Область( + НачальнаяСтрокаОбласти.Верх, + НомерКолонки, + КонечнаяСтрокаОбласти.Низ, + НомерКолонки); Область.Объединить(); @@ -1348,15 +1567,27 @@ КонецПроцедуры &НаСервере -Процедура УстановитьГраницыВидовИЗначенийДоступа(Знач Документ, Знач НачальнаяСтрокаОбластиГруппыДоступа, Знач КонечнаяСтрокаОбластиОбъекта) +Процедура УстановитьГраницыВидовИЗначенийДоступа(Знач Документ, + Знач НачальнаяСтрокаОбластиГруппыДоступа, + Знач КонечнаяСтрокаОбластиОбъекта) ЛинияГраницы = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Точечная); - Область = Документ.Область(НачальнаяСтрокаОбластиГруппыДоступа.Верх, 4, НачальнаяСтрокаОбластиГруппыДоступа.Верх, 5); + Область = Документ.Область( + НачальнаяСтрокаОбластиГруппыДоступа.Верх, + 4, + НачальнаяСтрокаОбластиГруппыДоступа.Верх, + 5); + Область.ГраницаСверху = ЛинияГраницы; - Область = Документ.Область(КонечнаяСтрокаОбластиОбъекта.Низ, 4, КонечнаяСтрокаОбластиОбъекта.Низ, 5); - Область.ГраницаСнизу = ЛинияГраницы; + Область = Документ.Область( + КонечнаяСтрокаОбластиОбъекта.Низ, + 4, + КонечнаяСтрокаОбластиОбъекта.Низ, + 5); + + Область.ГраницаСнизу = ЛинияГраницы; КонецПроцедуры @@ -1411,7 +1642,10 @@ Функция ВидыОграниченийПравОбъектовМетаданных() Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ПостоянныеВидыОграничений", УправлениеДоступомСерверПовтИсп.ПостоянныеВидыОграниченийПравОбъектовМетаданных()); + Запрос.УстановитьПараметр( + "ПостоянныеВидыОграничений", + УправлениеДоступомСлужебныйПовтИсп.ПостоянныеВидыОграниченийПравОбъектовМетаданных()); + Запрос.Текст = "ВЫБРАТЬ | ПостоянныеВидыОграничений.Таблица, diff --git a/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx b/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx index 5863cd315..6d2e2e369 100644 --- a/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx +++ b/SSL/src/Reports/ПраваДоступа/Templates/Макет/Template.mxlx @@ -291,7 +291,7 @@ 30 - ПользовательИнфБазыИмя + Имя @@ -321,7 +321,7 @@ 32 - ПользовательИнфБазыАутентификацияСтандартная + АутентификацияСтандартная @@ -344,7 +344,7 @@ 32 - ПользовательИнфБазыЗапрещеноИзменятьПароль + ЗапрещеноИзменятьПароль @@ -367,7 +367,7 @@ 32 - ПользовательИнфБазыПоказыватьВСпискеВыбора + ПоказыватьВСпискеВыбора @@ -397,7 +397,7 @@ 32 - ПользовательИнфБазыАутентификацияОС + АутентификацияОС @@ -420,7 +420,7 @@ 30 - ПользовательИнфБазыПользовательОС + ПользовательОС @@ -450,7 +450,7 @@ 33 - ПользовательИнфБазыЯзыкПредставление + ЯзыкПредставление @@ -473,7 +473,7 @@ 33 - ПользовательИнфБазыРежимЗапускаПредставление + РежимЗапускаПредставление diff --git a/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html b/SSL/src/Reports/ПросроченныеЗадачи/Help/ru.html index 990fc7dd9..94e95ac9e 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/ПросроченныеЗадачи/ПросроченныеЗадачи.mdo b/SSL/src/Reports/ПросроченныеЗадачи/ПросроченныеЗадачи.mdo index f5971983f..96af0a8de 100644 --- a/SSL/src/Reports/ПросроченныеЗадачи/ПросроченныеЗадачи.mdo +++ b/SSL/src/Reports/ПросроченныеЗадачи/ПросроченныеЗадачи.mdo @@ -12,6 +12,7 @@ true Report.ПросроченныеЗадачи.Form.ФормаОтчета Report.ПросроченныеЗадачи.Template.ОсновнаяСхемаКомпоновкиДанных + SettingsStorage.ХранилищеВариантовОтчетов true diff --git a/SSL/src/Roles/АдминистраторСистемы/Rights.rights b/SSL/src/Roles/АдминистраторСистемы/Rights.rights index 9c20d192a..ebfd68627 100644 --- a/SSL/src/Roles/АдминистраторСистемы/Rights.rights +++ b/SSL/src/Roles/АдминистраторСистемы/Rights.rights @@ -15,7 +15,7 @@ - InformationRegister.АдресныйКлассификатор.Command.ОткрытьАдресныйКлассификатор + InformationRegister.АдресныйКлассификатор.Command.АдресныйКлассификатор View true @@ -158,6 +158,25 @@ true + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.НаличиеПрисоединенныхФайлов.StandardAttribute.LineNumber @@ -181,7 +200,7 @@ - Catalog.КлассификаторВалют.Attribute.НаименованиеПолное + Catalog.УдалитьКлассификаторВалют.Attribute.НаименованиеПолное View true @@ -826,17 +845,6 @@ true - - DataProcessor.КонтрольЖурналаРегистрации - - Use - true - - - View - true - - InformationRegister.АдресныйКлассификатор.Resource.Наименование @@ -934,93 +942,13 @@ - Configuration.БиблиотекаСтандартныхПодсистем + Catalog.ОбщиеДанныеИнформационногоЦентра.Attribute.Идентификатор - Administration + View 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 + Edit true @@ -1428,6 +1356,13 @@ true + + CommonCommand.ДополнительныеОтчетыИОбработкиПечатныеФормы + + View + true + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПроводитьРезервноеКопированиеПриВосстановленииДанных @@ -1513,6 +1448,13 @@ true + + Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ + + View + true + + InformationRegister.ПодчиненныеПользователи.StandardAttribute.LineNumber @@ -1524,6 +1466,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + true + + + Edit + true + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -1546,6 +1499,28 @@ true + + InformationRegister.ОбластиПерсональныхДанных.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаОбработкиДляОтладкиЗагрузки + + View + true + + + Edit + true + + Constant.РежимИспользованияИнформационнойБазы @@ -1595,6 +1570,10 @@ Edit true + + InteractiveDelete + true + InteractiveSetDeletionMark true @@ -1752,6 +1731,25 @@ true + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор @@ -1796,6 +1794,141 @@ true + + Catalog.ОбщиеДанныеИнформационногоЦентра + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.ОбщиеДанныеИнформационногоЦентра.StandardAttribute.Code + + View + true + + + Edit + true + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения @@ -2122,6 +2255,25 @@ true + + Constant.КлючОбластиДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил @@ -2133,6 +2285,17 @@ true + + InformationRegister.ПравилаДляОбменаДанными.Resource.РежимПротоколированияОбменаДанными + + View + true + + + Edit + true + + Catalog.ИдентификаторыОбъектовМетаданных @@ -2424,7 +2587,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Resource.Кратность + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Кратность View true @@ -2563,6 +2726,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + true + + + Edit + true + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -2585,6 +2759,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + true + + + Edit + true + + InformationRegister.БлокировкиСеансовОбластиДанных @@ -2675,6 +2860,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + true + + + Edit + true + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация @@ -2686,6 +2882,17 @@ true + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользуетХранилищеВариантов + + View + true + + + Edit + true + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы @@ -2864,6 +3071,25 @@ true + + Constant.ТребуетсяОбновлениеИнформационнойБазы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя @@ -2875,6 +3101,25 @@ true + + Constant.ПоддержкаРезервногоКопирования + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения @@ -3178,6 +3423,17 @@ true + + InformationRegister.ОбластиКРезервномуКопированию.Dimension.ОбластьДанных + + View + true + + + Edit + true + + InformationRegister.ПравилаДляОбменаДанными.Resource.ПравилаЗачитанные @@ -3270,6 +3526,17 @@ true + + InformationRegister.ПравилаДляОбменаДанными.Resource.НеОстанавливатьПоОшибке + + View + true + + + Edit + true + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ИмяПланаОбмена @@ -3355,6 +3622,36 @@ true + + Catalog.ОбщиеДанныеИнформационногоЦентра.Attribute.ДатаНачалаАктуальности + + View + true + + + Edit + true + + + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.LineNumber @@ -3377,6 +3674,17 @@ true + + InformationRegister.ПравилаДляОбменаДанными.Resource.РежимОтладки + + View + true + + + Edit + true + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИнформацияОПравилах @@ -3388,6 +3696,80 @@ true + + InformationRegister.ОбластиКРезервномуКопированию + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ОбластиКРезервномуКопированию.StandardAttribute.Active + + View + true + + + Edit + true + + + + InformationRegister.ОбластиКРезервномуКопированию.StandardAttribute.LineNumber + + View + true + + + Edit + true + + + + InformationRegister.ОбластиКРезервномуКопированию.StandardAttribute.Recorder + + View + true + + + Edit + true + + + + InformationRegister.ОбластиКРезервномуКопированию.StandardAttribute.Period + + View + true + + + Edit + true + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + true + + + Edit + true + + Catalog.СообщенияСистемы.Attribute.Заблокировано @@ -3399,6 +3781,13 @@ true + + CommonCommand.ДополнительныеОтчетыИОбработкиСозданиеСвязанныхОбъектов + + View + true + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования @@ -3556,6 +3945,25 @@ true + + InformationRegister.НазначениеДополнительныхОбработок + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.LineNumber @@ -3883,6 +4291,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + true + + + Edit + true + + InformationRegister.СоставыГруппПользователей.StandardAttribute.LineNumber @@ -4056,17 +4475,6 @@ true - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - true - - - Edit - true - - InformationRegister.НеразделенныеПользователи @@ -4430,17 +4838,6 @@ true - - Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Используется - - View - true - - - Edit - true - - DataProcessor.РезервноеКопированиеИБ.Attribute.ВариантРасписанияРезервногоКопирования @@ -4494,7 +4891,7 @@ - Constant.КаталогВременныхФайловСообщенийОбменаДляWindows + Constant.КаталогВременныхФайловДляWindows Read true @@ -4545,6 +4942,97 @@ true + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + true + + + DataAdministration + true + + + UpdateDataBaseConfiguration + true + + + ExclusiveMode + true + + + ActiveUsers + true + + + EventLog + true + + + ThinClient + true + + + WebClient + true + + + ThickClient + true + + + ExternalConnection + true + + + Automation + true + + + TechnicalSpecialistMode + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + SaveUserData + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + + Output + true + + InformationRegister.КэшПрограммныхИнтерфейсов @@ -4609,7 +5097,7 @@ - Catalog.КлассификаторВалют + Catalog.УдалитьКлассификаторВалют Read true @@ -4656,7 +5144,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Predefined + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Predefined View true @@ -4667,7 +5155,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Ref + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Ref View true @@ -4678,7 +5166,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.DeletionMark + Catalog.УдалитьКлассификаторВалют.StandardAttribute.DeletionMark View true @@ -4689,7 +5177,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.IsFolder + Catalog.УдалитьКлассификаторВалют.StandardAttribute.IsFolder View true @@ -4700,7 +5188,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Owner + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Owner View true @@ -4711,7 +5199,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Parent + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Parent View true @@ -4722,7 +5210,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Description + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description View true @@ -4733,7 +5221,18 @@ - Catalog.КлассификаторВалют.StandardAttribute.Code + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Code + + View + true + + + Edit + true + + + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПротоколаОбмена View true @@ -4763,7 +5262,7 @@ - Constant.КаталогВременныхФайловСообщенийОбменаДляLinux + Constant.КаталогВременныхФайловДляLinux Read true @@ -4875,7 +5374,7 @@ - InformationRegister.КурсыВалютПоКлассификатору + InformationRegister.УдалитьКурсыВалютПоКлассификатору Read true @@ -4894,7 +5393,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Active + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Active View true @@ -4905,14 +5404,14 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.LineNumber + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.LineNumber View true - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Recorder + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Recorder View true @@ -4923,7 +5422,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Period + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Period View true @@ -4955,6 +5454,17 @@ true + + InformationRegister.ПравилаДляОбменаДанными.Resource.РежимОтладкиЗагрузки + + View + true + + + Edit + true + + InformationRegister.ПравилаДляОбменаДанными.Attribute.ИспользоватьФильтрВыборочнойРегистрацииОбъектов @@ -4966,6 +5476,17 @@ true + + Catalog.ОбщиеДанныеИнформационногоЦентра.Attribute.Дата + + View + true + + + Edit + true + + InformationRegister.ПравилаДляОбменаДанными.Dimension.ВидПравил @@ -5029,6 +5550,17 @@ true + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSЗапомнитьПароль + + View + true + + + Edit + true + + InformationRegister.ЗависимостиПравДоступа.StandardAttribute.LineNumber @@ -5365,6 +5897,25 @@ true + + Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ЕдиницаИзмеренияПериодаХраненияРезервныхКопий @@ -5461,6 +6012,25 @@ true + + Constant.НастройкаПодчиненногоУзлаРИБЗавершена + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.ИсточникиВнешнихЗадач.StandardAttribute.LineNumber @@ -5483,6 +6053,17 @@ true + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаОбработкиДляОтладкиВыгрузки + + View + true + + + Edit + true + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ПериодХраненияРезервныхКопий @@ -5571,6 +6152,64 @@ true + + Catalog.ОбщиеДанныеИнформационногоЦентра.Attribute.ТипИнформации + + View + true + + + Edit + true + + + + Catalog.КлассификаторБанковРФ + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + Constant.СписокЗапрещенныхРасширений @@ -5620,6 +6259,17 @@ true + + InformationRegister.ЗамерыВремени.StandardAttribute.LineNumber + + View + true + + + Edit + true + + InformationRegister.ЗамерыВремени.StandardAttribute.Recorder @@ -5642,6 +6292,17 @@ true + + InformationRegister.НастройкиВариантовОтчетов.StandardAttribute.LineNumber + + View + true + + + Edit + true + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера @@ -5705,6 +6366,17 @@ true + + Catalog.ОбщиеДанныеИнформационногоЦентра.Attribute.ДатаОкончанияАктуальности + + View + true + + + Edit + true + + InformationRegister.АдресныйКлассификатор.Dimension.КодАдресногоОбъектаВКоде @@ -5782,6 +6454,13 @@ true + + CommonCommand.ДополнительныеОтчетыИОбработкиОтчеты + + View + true + + Constant.РазмерБлокаПередачиФайла @@ -5867,6 +6546,25 @@ true + + Constant.СообщениеОбменаДаннымиИзГлавногоУзла + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Constant.АдресВебСервисаОбменаДанными @@ -6071,7 +6769,7 @@ - Catalog.КлассификаторВалют.Attribute.ПараметрыПрописиНаРусском + Catalog.УдалитьКлассификаторВалют.Attribute.ПараметрыПрописиНаРусском View true @@ -6260,6 +6958,13 @@ true + + CommonForm.ДополнительныеОтчетыИОбработки + + View + true + + InformationRegister.ОбластиДанных @@ -6382,6 +7087,13 @@ true + + CommonForm.НастройкаМоихОтчетовИОбработок + + View + true + + InformationRegister.ДатыЗапретаИзменения.StandardAttribute.LineNumber @@ -6413,7 +7125,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Resource.Курс + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Курс View true @@ -6460,6 +7172,36 @@ true + + InformationRegister.ПравилаДляОбменаДанными.Resource.РежимОтладкиВыгрузки + + View + true + + + Edit + true + + + + Constant.ЭтоАвтономноеРабочееМесто + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Catalog.ТомаХраненияФайлов @@ -6613,6 +7355,17 @@ true + + Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.Раздел + + View + true + + + Edit + true + + InformationRegister.НастройкиОтправителя.Command.НастройкиОтправителя @@ -6686,6 +7439,25 @@ true + + Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы + + Read + true + + + Update + true + + + View + true + + + Edit + true + + InformationRegister.АдресныеСокращения.Dimension.Код @@ -6719,6 +7491,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + true + + + Edit + true + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия @@ -6775,7 +7558,142 @@ - InformationRegister.КурсыВалютПоКлассификатору.Dimension.Валюта + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Dimension.Валюта + + View + true + + + Edit + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра + + Read + true + + + Insert + true + + + Update + true + + + Delete + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InteractiveDeleteMarked + true + + + InputByString + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Predefined + + View + true + + + Edit + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Ref + + View + true + + + Edit + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.DeletionMark + + View + true + + + Edit + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.IsFolder + + View + true + + + Edit + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Owner + + View + true + + + Edit + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Parent + + View + true + + + Edit + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Description + + View + true + + + Edit + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра.StandardAttribute.Code View true @@ -6807,6 +7725,17 @@ true + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеНастроек + + View + true + + + Edit + true + + InformationRegister.АдресныеСокращения.Dimension.Уровень @@ -6829,6 +7758,17 @@ true + + Catalog.ОбщиеДанныеИнформационногоЦентра.Attribute.ВнешняяСсылка + + View + true + + + Edit + true + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация @@ -6961,6 +7901,25 @@ true + + Constant.НастройкаАвтономногоРабочегоМестаЗавершена + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.ВидТранспортаОбмена @@ -6972,6 +7931,17 @@ true + + Catalog.ОбщиеДанныеИнформационногоЦентра.Attribute.Критичность + + View + true + + + Edit + true + + ExchangePlan.ИзмененияПоставляемыхДанных.Attribute.ОбластьДанных @@ -7195,6 +8165,53 @@ 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.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы @@ -7258,6 +8275,17 @@ true + + Catalog.ОбщиеДанныеИнформационногоЦентра.Attribute.ТекстHTML + + View + true + + + Edit + true + + InformationRegister.ОчередьЗаданий.Resource.ДатаНачалаПоследнегоЗапуска @@ -7299,15 +8327,11 @@ - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена + CommonCommand.ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта View true - - Edit - true - InformationRegister.ОчередьЗаданий.Resource.Использование @@ -7320,4 +8344,15 @@ true + + Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяОбъекта + + View + true + + + Edit + true + + diff --git a/SSL/src/Roles/Администрирование/Rights.rights b/SSL/src/Roles/Администрирование/Rights.rights index 1cb48754b..e6e17be97 100644 --- a/SSL/src/Roles/Администрирование/Rights.rights +++ b/SSL/src/Roles/Администрирование/Rights.rights @@ -3,6 +3,25 @@ false false false + + InformationRegister.ОбластиПерсональныхДанных + + Read + true + + + Update + true + + + View + true + + + Edit + true + + Configuration.БиблиотекаСтандартныхПодсистем diff --git a/SSL/src/Roles/БазовыеПрава/Rights.rights b/SSL/src/Roles/БазовыеПрава/Rights.rights index bd1cffe5a..a05c1c325 100644 --- a/SSL/src/Roles/БазовыеПрава/Rights.rights +++ b/SSL/src/Roles/БазовыеПрава/Rights.rights @@ -288,6 +288,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами @@ -328,6 +339,105 @@ 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.Заметки.StandardAttribute.Predefined @@ -485,6 +595,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + InformationRegister.НапоминанияПользователя.Dimension.Источник @@ -496,6 +617,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + Catalog.Заметки.Attribute.ДатаИзменения @@ -507,6 +639,39 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + CommonForm.ВыборРолиИсполнителя @@ -514,6 +679,13 @@ true + + CommonForm.Вопрос + + View + true + + CommonForm.ВыборОбъектовМетаданных @@ -553,6 +725,24 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + CommonForm.ВыборФорматаВложений + + View + true + + Catalog.Заметки.Attribute.Содержание @@ -729,6 +919,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + CommonForm.ВыборИсполнителяБизнесПроцесса @@ -835,6 +1036,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.НапоминанияПользователя.Attribute.СпособУстановкиВремениНапоминания @@ -857,6 +1069,13 @@ false + + CommonForm.ОтправкаПечатнойФормыПоПочте + + View + true + + CommonForm.НапоминаниеПриРедактировании @@ -915,6 +1134,46 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + CommonForm.ПечатьДокументов + + View + true + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + Catalog.ВидыКонтактнойИнформации.Attribute.РеквизитДопУпорядочивания @@ -944,6 +1203,28 @@ true + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + InformationRegister.НапоминанияПользователя.Attribute.Расписание @@ -1091,10 +1372,69 @@ - CommonForm.ВсеОтчеты + InformationRegister.ЗамерыВремени.StandardAttribute.Active View - true + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false @@ -1108,13 +1448,6 @@ false - - CommonForm.ПечатьДокументов - - View - true - - InformationRegister.НапоминанияПользователя.Dimension.ВремяСобытия @@ -1167,9 +1500,9 @@ - CommonForm.НастройкаПечатныхФормПередОтправкой + Constant.ИспользоватьРазделениеПоОбластямДанных - View + Read true @@ -1209,6 +1542,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + CommonCommand.ПерсональнаяНастройкаПроксиСервера @@ -1242,12 +1586,30 @@ - CommonForm.Вопрос + CommonForm.ДлительнаяОперация View true + + CommonForm.СохранениеПечатнойФормы + + View + true + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + CommonForm.ВыборПрисоединенныхФайлов @@ -1262,6 +1624,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + ExchangePlan.ОбменВнешнимиЗаданиями.StandardAttribute.ReceivedNo diff --git a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights index a7d9a9a96..83d2dd249 100644 --- a/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights +++ b/SSL/src/Roles/ВыводНаПринтерФайлБуферОбмена/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2104,37 +2093,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна @@ -2146,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2487,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2751,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3224,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3324,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3752,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3818,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3972,6 +3908,94 @@ 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.РезультатОбновления @@ -5007,18 +5031,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5678,7 +5691,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5699,17 +5712,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5831,6 +5833,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5941,6 +5954,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6073,6 +6097,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6106,6 +6141,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6216,17 +6262,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6843,17 +6878,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6877,7 +6901,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7734,6 +7758,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7800,17 +7835,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7888,17 +7912,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8175,7 +8188,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8504,6 +8517,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8526,17 +8550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9935,18 +9948,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9990,7 +9992,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -10022,6 +10024,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10407,17 +10420,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10583,17 +10585,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10661,18 +10652,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10880,17 +10860,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11353,17 +11322,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11452,6 +11410,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11529,6 +11498,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11573,6 +11564,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись @@ -11760,17 +11782,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12299,6 +12310,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12607,6 +12629,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12761,17 +12794,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13102,17 +13124,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13245,17 +13256,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13608,17 +13608,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13641,17 +13630,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13729,6 +13707,50 @@ 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.ПояснениеКомментария @@ -13762,6 +13784,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14136,6 +14169,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14169,17 +14213,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14301,17 +14334,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14521,17 +14543,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15709,17 +15720,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16732,6 +16732,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16941,17 +16952,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17128,17 +17128,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17414,17 +17403,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17601,17 +17579,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17668,7 +17635,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18228,6 +18195,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18295,7 +18273,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18426,17 +18415,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18613,17 +18591,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ВыполнениеОбменовДанными/Rights.rights b/SSL/src/Roles/ВыполнениеОбменовДанными/Rights.rights index 8723a5fa3..0bad37a48 100644 --- a/SSL/src/Roles/ВыполнениеОбменовДанными/Rights.rights +++ b/SSL/src/Roles/ВыполнениеОбменовДанными/Rights.rights @@ -38,13 +38,6 @@ true - - CommonForm.ВыполнениеОбменаДанными - - View - true - - WebService.Exchange_2_0_1_6.Operation.FileExists @@ -66,6 +59,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + CommonCommand.ОткрытьСценарииОбменовДанными @@ -98,6 +102,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + WebService.Exchange.Operation.Upload @@ -105,6 +120,94 @@ true + + 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 + + CommonCommand.ОткрытьОбменыДанными @@ -148,6 +251,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + CommonCommand.ВыполнитьОбменДанными @@ -162,6 +276,50 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.SaveFileFromParts @@ -187,6 +345,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных @@ -208,6 +377,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.PutFileIntoStorage @@ -215,6 +395,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными @@ -222,6 +413,13 @@ true + + WebService.Exchange_2_0_1_6.Operation.Ping + + Use + true + + WebService.Exchange_2_0_1_6.Operation.GetContinuousOperationStatus @@ -236,6 +434,39 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.PutFilePart @@ -243,6 +474,17 @@ true + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными @@ -254,6 +496,17 @@ true + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.UploadData @@ -283,6 +536,61 @@ true + + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + CommonForm.ОбменыДанными @@ -290,6 +598,24 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + WebService.Exchange_2_0_1_6.Operation.TestConnection + + Use + true + + WebService.Exchange_2_0_1_6.Operation.ReleaseFile @@ -297,6 +623,13 @@ true + + DataProcessor.УниверсальныйОбменДаннымиXML + + Use + true + + WebService.Exchange.Operation.Download @@ -322,6 +655,28 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.PrepareGetFile @@ -336,6 +691,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных diff --git a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights index e56a583c8..cd21a7c9e 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеБазовойНСИ/Rights.rights @@ -4,7 +4,7 @@ true false - InformationRegister.АдресныйКлассификатор.Command.ОткрытьАдресныйКлассификатор + InformationRegister.АдресныйКлассификатор.Command.АдресныйКлассификатор View true @@ -207,6 +207,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты @@ -285,6 +296,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + CommonForm.ПраваДоступаУпрощенно @@ -314,6 +336,94 @@ true + + 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.АдресныеСокращения @@ -392,6 +502,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город @@ -403,6 +524,50 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Resource.АльтернативныеНазвания @@ -411,7 +576,7 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Command.ПроверкаУчетнойЗаписи + Catalog.УчетныеЗаписиЭлектроннойПочты.Command.ПроверитьУчетнуюЗапись View true @@ -457,6 +622,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.ВидыДокументовФизическихЛиц @@ -496,6 +672,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + CommonForm.ПраваДоступа @@ -657,6 +844,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.СоставыГруппПользователей @@ -678,6 +876,39 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + Report.ПраваДоступа @@ -704,6 +935,56 @@ true + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ЗначенияСвойствОбъектовИерархия + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора @@ -754,6 +1035,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.Код @@ -801,38 +1093,58 @@ - Catalog.КлассификаторБанковРФ - - Read - true - - - Insert - true - - - Update - true - + InformationRegister.ЗамерыВремени.StandardAttribute.Active View - true + false Edit - true + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.LineNumber + + View + false - InteractiveSetDeletionMark - true + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Recorder + + View + false - InteractiveClearDeletionMark - true + Edit + false + + + + InformationRegister.ЗамерыВремени.StandardAttribute.Period + + View + false - InputByString - true + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false @@ -945,7 +1257,18 @@ - CommonCommand.ДополнительныеСведения + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + CommonCommand.ДополнительныеСведенияКоманднаяПанель View true @@ -990,6 +1313,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна @@ -1055,6 +1389,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -1063,7 +1408,7 @@ - CommonForm.РедактированиеЗначенийСвойств + CommonForm.РедактированиеДополнительныхСведений View true @@ -1076,4 +1421,15 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights index ad0c6fff4..fba50db30 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/Rights.rights @@ -41,9 +41,426 @@ InteractiveClearDeletionMark true + + InteractiveDeleteMarked + true + InputByString true + + CommonForm.ПанельОтчетов + + View + true + + + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + CommonForm.ФормаВариантаОтчета + + View + true + + + + 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 + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + CommonForm.ФормаНастроекОтчета + + View + true + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + CommonForm.ВыборПроизвольногоПериода + + View + true + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + CommonForm.ОтправкаТабличныхДокументовПоПочте + + View + true + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + CommonForm.ФормаОтчета + + View + true + + + + 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 + + + + InformationRegister.НастройкиВариантовОтчетов + + Read + true + + + Update + true + + + View + true + + + Edit + true + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/ДобавлениеИзменениеВариантовОтчетов.mdo b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/ДобавлениеИзменениеВариантовОтчетов.mdo index 8c3d0b73f..4a26db46f 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/ДобавлениеИзменениеВариантовОтчетов.mdo +++ b/SSL/src/Roles/ДобавлениеИзменениеВариантовОтчетов/ДобавлениеИзменениеВариантовОтчетов.mdo @@ -3,6 +3,6 @@ ДобавлениеИзменениеВариантовОтчетов ru - Добавление и изменение вариантов отчетов + Добавление изменение вариантов отчетов diff --git a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights index 6079c205e..2653a23fa 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВзаимодействий/Rights.rights @@ -271,6 +271,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьДляНовыхСообщенийПростойТекст @@ -371,6 +382,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляОтправки @@ -382,6 +404,94 @@ 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.НастройкиУчетныхЗаписейЭлектроннойПочты.Command.Настройки @@ -490,6 +600,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Dimension.УчетнаяЗаписьЭлектроннойПочты @@ -497,6 +618,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + Document.ЭлектронноеПисьмоВходящее.Command.Переслать @@ -504,6 +636,39 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ОтветственныйЗаВедениеПапок @@ -737,6 +902,16 @@ Read true + + Update + true + + #ПоЗначениямИНаборамРасширенный( "РегистрСведений.ПредметыПапкиВзаимодействий","Изменение","", +"", +"", +"Объект","Взаимодействие","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","", "","","" ) + + View true @@ -770,6 +945,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -890,6 +1076,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 @@ -1047,6 +1244,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьПриОтветеПересылкеФорматированныйДокумент @@ -1201,6 +1409,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.АдресЭлектроннойПочты @@ -1212,6 +1431,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПодписьПриОтветеПересылкеПростойТекст @@ -1226,6 +1467,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -1237,6 +1489,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + InformationRegister.НастройкиУчетныхЗаписейЭлектроннойПочты.Resource.ПерсональнаяУчетнаяЗапись @@ -1255,6 +1518,61 @@ 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПериодХраненияСообщенийНаСервере @@ -1273,6 +1591,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИмяПользователя @@ -1424,6 +1753,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + InformationRegister.ИдентификаторыПолученныхЭлектронныхПисем.Dimension.Идентификатор @@ -1564,6 +1904,28 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.Взаимодействия diff --git a/SSL/src/Roles/ДобавлениеИзменениеВнешнихПользователей/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеВнешнихПользователей/Rights.rights index 289a03a5f..974cd1964 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеВнешнихПользователей/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеВнешнихПользователей/Rights.rights @@ -3,6 +3,116 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + Catalog.ВнешниеПользователи.Command.ВнешнийДоступ @@ -10,6 +120,94 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.СоставыГруппПользователей @@ -56,6 +254,127 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ГруппыВнешнихПользователей @@ -95,4 +414,37 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights index 7d8b61d68..8336ac630 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеДополнительныхОтчетовИОбработок/Rights.rights @@ -36,17 +36,6 @@ false - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.Пользователь - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.Автор @@ -576,7 +565,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -609,7 +598,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1720,7 +1709,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2049,17 +2038,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2082,17 +2060,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2412,6 +2379,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2676,17 +2654,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3138,17 +3105,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3238,7 +3194,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3662,17 +3618,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3728,6 +3673,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3882,6 +3838,94 @@ 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.РезультатОбновления @@ -4895,18 +4939,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5555,7 +5588,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5576,17 +5609,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5708,6 +5730,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5818,6 +5851,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -5950,6 +5994,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -5983,6 +6038,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6093,17 +6159,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6687,17 +6742,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьЗаполнениеОбъекта - - View - false - - - Edit - false - - Catalog.Файлы.Attribute.ТекущаяВерсия @@ -6709,17 +6753,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6743,7 +6776,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7160,17 +7193,6 @@ false - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ДополнительныйОтчетИлиОбработка - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ИмяФайлаВнешнейОбработкиОбработчиковСобытий @@ -7457,17 +7479,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьПечатныеФормы - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена.Attribute.УзелИнформационнойБазы @@ -7578,6 +7589,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7644,17 +7666,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7732,17 +7743,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -7787,17 +7787,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипОбъекта - - View - false - - - Edit - false - - InformationRegister.НаборыЗначенийДоступа.Resource.Добавление @@ -8019,7 +8008,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8206,47 +8195,22 @@ - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Active + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам + + Read + true + + + Update + true + View - false + true Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Period - - View - false - - - Edit - false + true @@ -8348,6 +8312,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8370,17 +8345,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -8807,47 +8771,22 @@ - InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Active + InformationRegister.НазначениеДополнительныхОбработок + + Read + true + + + Update + true + View - false + true Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.LineNumber - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Recorder - - View - false - - - Edit - false - - - - InformationRegister.НазначениеДополнительныхОбработок.StandardAttribute.Period - - View - false - - - Edit - false + true @@ -9775,18 +9714,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9830,7 +9758,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9862,6 +9790,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -9906,17 +9845,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьСозданиеСвязанныхОбъектов - - View - false - - - Edit - false - - Document.Анкета.TabularSection.Состав.Attribute.ОткрытыйОтвет @@ -10126,17 +10054,6 @@ false - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Resource.Доступно - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ВестиДополнительныйКонтрольЗаписиВXML @@ -10236,17 +10153,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10401,17 +10307,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10479,18 +10374,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10698,17 +10582,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -10850,6 +10723,9 @@ Insert true + + ГДЕ &ОбластьДанныхИспользование <> ИСТИНА + Update @@ -10858,6 +10734,9 @@ Delete true + + ГДЕ &ОбластьДанныхИспользование <> ИСТИНА + View @@ -10879,6 +10758,10 @@ InteractiveClearDeletionMark true + + InteractiveDeleteMarked + true + InputByString true @@ -11126,17 +11009,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11225,6 +11097,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11302,6 +11185,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11533,17 +11438,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -11676,17 +11570,6 @@ false - - InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.Dimension.ИдентификаторКоманды - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ТипыДополнительногоОбъектаАдресации @@ -12072,6 +11955,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12380,6 +12274,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12534,17 +12439,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -12864,17 +12758,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13007,17 +12890,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13370,17 +13242,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13403,17 +13264,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13491,6 +13341,50 @@ 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.ПояснениеКомментария @@ -13524,6 +13418,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -13887,6 +13792,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -13920,17 +13836,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -13986,17 +13891,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Dimension.ТипФормы - - View - false - - - Edit - false - - InformationRegister.НаборыЗначенийДоступа.Attribute.ТипОбъекта @@ -14048,17 +13942,6 @@ true - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14268,17 +14151,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15280,17 +15152,6 @@ false - - InformationRegister.НазначениеДополнительныхОбработок.Resource.ИспользоватьОтчеты - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия3Разряд @@ -15445,17 +15306,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16457,6 +16307,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16666,17 +16527,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -16853,17 +16703,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17128,17 +16967,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17315,17 +17143,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17382,7 +17199,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -17942,6 +17759,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18009,7 +17837,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18140,17 +17979,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18316,17 +18144,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - CommonCommand.ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта diff --git a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights index d2e862034..53fe734aa 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеЗаданий/Rights.rights @@ -21,6 +21,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + SessionParameter.ТекущийПользователь @@ -28,6 +39,105 @@ true + + 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 + + Task.ЗадачаИсполнителя @@ -54,6 +164,72 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Task.ЗадачаИсполнителя.Command.ВсеЗадачи @@ -61,6 +237,28 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.ДанныеБизнесПроцессов @@ -79,6 +277,127 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Task.ЗадачаИсполнителя.Command.МоиЗадачи @@ -172,6 +491,39 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + InformationRegister.ДанныеБизнесПроцессов.Command.МоиБизнесПроцессы diff --git a/SSL/src/Roles/ДобавлениеИзменениеОбменовДанными/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОбменовДанными/Rights.rights index e73f34ec0..cea246ab6 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОбменовДанными/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОбменовДанными/Rights.rights @@ -52,13 +52,6 @@ true - - CommonForm.ВыполнениеОбменаДанными - - View - true - - WebService.Exchange_2_0_1_6.Operation.FileExists @@ -80,6 +73,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными @@ -130,6 +134,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + WebService.Exchange.Operation.Upload @@ -137,6 +152,94 @@ true + + 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 + + CommonCommand.ОткрытьОбменыДанными @@ -211,6 +314,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + CommonCommand.ВыполнитьОбменДанными @@ -239,6 +353,50 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.SaveFileFromParts @@ -264,6 +422,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + CommonCommand.ПерейтиВЖурналРегистрацииСобытийВыгрузкиДанных @@ -285,6 +454,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + WebService.Exchange.Operation.UpdateExchange @@ -306,6 +486,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными @@ -341,6 +532,39 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.PutFilePart @@ -348,6 +572,17 @@ true + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными @@ -359,6 +594,17 @@ true + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.UploadData @@ -411,6 +657,61 @@ true + + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + CommonForm.ОбменыДанными @@ -418,6 +719,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.ReleaseFile @@ -439,6 +751,17 @@ true + + DataProcessor.УниверсальныйОбменДаннымиXML + + Use + true + + + View + true + + WebService.Exchange.Operation.Download @@ -485,6 +808,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.RegisterOnlyCatalogData @@ -513,6 +847,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + WebService.Exchange_2_0_1_6.Operation.PrepareGetFile @@ -527,6 +872,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + CommonCommand.ПерейтиВЖурналРегистрацииСобытийЗагрузкиДанных diff --git a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights index 1f5c354d7..fe41d1281 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОбщейБазовойНСИ/Rights.rights @@ -3,6 +3,130 @@ false true false + + InformationRegister.АдресныйКлассификатор.Command.АдресныйКлассификатор + + View + true + + + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ.Command.КлассификаторБанковРФ + + View + true + + + + 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 + + InformationRegister.АдресныеСокращения @@ -41,6 +165,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + InformationRegister.ДанныеПроизводственногоКалендаря @@ -60,6 +195,72 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ПроизводственныеКалендари @@ -155,7 +356,51 @@ - Catalog.КлассификаторВалют + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + Catalog.УдалитьКлассификаторВалют Read true @@ -202,7 +447,7 @@ - InformationRegister.КурсыВалютПоКлассификатору + InformationRegister.УдалитьКурсыВалютПоКлассификатору Read true @@ -220,6 +465,17 @@ true + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора @@ -239,4 +495,153 @@ true + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + + + Catalog.КлассификаторБанковРФ + + Read + true + + + Insert + true + + + Update + true + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + true + + + InputByString + true + + + + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights index ad1670aa2..170a7c439 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОпросов/Rights.rights @@ -577,7 +577,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -610,7 +610,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1717,7 +1717,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2046,17 +2046,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2079,17 +2068,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2405,6 +2383,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2669,17 +2658,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3142,17 +3120,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3242,7 +3209,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3666,17 +3633,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3732,6 +3688,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3875,6 +3842,94 @@ 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.РезультатОбновления @@ -4925,18 +4980,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5596,7 +5640,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5617,17 +5661,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5749,6 +5782,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5859,6 +5903,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -5991,6 +6046,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6024,6 +6090,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6134,17 +6211,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6761,17 +6827,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6795,7 +6850,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7630,6 +7685,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7696,17 +7762,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7784,17 +7839,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8071,7 +8115,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8396,6 +8440,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8418,17 +8473,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9816,18 +9860,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9871,7 +9904,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9903,6 +9936,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10288,17 +10332,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10464,17 +10497,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10542,18 +10564,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10761,17 +10772,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11234,17 +11234,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11333,6 +11322,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11410,6 +11410,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11630,17 +11652,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12169,6 +12180,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12477,6 +12499,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12631,17 +12664,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -12972,17 +12994,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13104,17 +13115,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13467,17 +13467,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13500,17 +13489,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13588,6 +13566,50 @@ 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.ПояснениеКомментария @@ -13621,6 +13643,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -13995,6 +14028,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14028,17 +14072,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14160,17 +14193,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14380,17 +14402,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15564,17 +15575,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16583,6 +16583,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16792,17 +16803,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -16979,17 +16979,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17265,17 +17254,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17452,17 +17430,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17519,7 +17486,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18079,6 +18046,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18146,7 +18124,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18266,17 +18255,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18453,17 +18431,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights index f1b399780..455ba5bdb 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеОтветовНаВопросыАнкет/Rights.rights @@ -605,7 +605,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -638,7 +638,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1767,7 +1767,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2107,17 +2107,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2140,17 +2129,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2481,6 +2459,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2745,17 +2734,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3214,17 +3192,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3314,7 +3281,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3731,17 +3698,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3797,6 +3753,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3951,6 +3918,94 @@ 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.РезультатОбновления @@ -4965,18 +5020,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5636,7 +5680,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5657,17 +5701,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5789,6 +5822,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5899,6 +5943,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6031,6 +6086,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6064,6 +6130,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6174,17 +6251,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6801,17 +6867,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6835,7 +6890,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7681,6 +7736,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7747,17 +7813,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7835,17 +7890,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8122,7 +8166,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8451,6 +8495,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8473,17 +8528,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9859,18 +9903,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9914,7 +9947,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9946,6 +9979,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10320,17 +10364,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10496,17 +10529,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10574,18 +10596,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10793,17 +10804,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11266,17 +11266,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11365,6 +11354,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11442,6 +11442,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11673,17 +11695,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12212,6 +12223,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12520,6 +12542,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12674,17 +12707,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13004,17 +13026,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13147,17 +13158,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13510,17 +13510,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13543,17 +13532,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13631,6 +13609,50 @@ 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.ПояснениеКомментария @@ -13664,6 +13686,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14049,6 +14082,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14082,17 +14126,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14214,17 +14247,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14430,17 +14452,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15585,17 +15596,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16611,6 +16611,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16820,17 +16831,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17007,17 +17007,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17293,17 +17282,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17480,17 +17458,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17547,7 +17514,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18096,6 +18063,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18163,7 +18141,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18294,17 +18283,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18481,17 +18459,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights index d860b4982..9119f33ae 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеПерсональныхДанныхФизическихЛиц/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1731,7 +1731,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2071,17 +2071,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2104,17 +2093,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2420,6 +2398,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2684,17 +2673,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3146,17 +3124,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3246,7 +3213,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3674,17 +3641,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3729,6 +3685,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3834,6 +3801,94 @@ true + + 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.РезультатОбновления @@ -4858,18 +4913,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5525,7 +5569,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5546,17 +5590,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5678,6 +5711,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5788,6 +5832,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -5909,6 +5964,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -5942,6 +6008,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6052,17 +6129,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6679,17 +6745,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6713,7 +6768,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7559,6 +7614,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7625,17 +7691,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7713,17 +7768,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -7989,7 +8033,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8307,6 +8351,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8329,17 +8384,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9738,18 +9782,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9793,7 +9826,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9825,6 +9858,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10210,17 +10254,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10386,17 +10419,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10464,18 +10486,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10683,17 +10694,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11156,17 +11156,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11255,6 +11244,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11332,6 +11332,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11563,17 +11585,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12091,6 +12102,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12399,6 +12421,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12553,17 +12586,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -12894,17 +12916,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13037,17 +13048,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13389,17 +13389,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13422,17 +13411,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13510,6 +13488,50 @@ 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.ПояснениеКомментария @@ -13543,6 +13565,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -13906,6 +13939,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -13939,17 +13983,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14071,17 +14104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14291,17 +14313,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15479,17 +15490,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16491,6 +16491,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16700,17 +16711,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -16887,17 +16887,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17173,17 +17162,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17360,17 +17338,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17427,7 +17394,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -17987,6 +17954,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18054,7 +18032,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18185,17 +18174,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18372,17 +18350,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights index 610ba5128..c2fe12d05 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеПользователей/Rights.rights @@ -3,6 +3,28 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Constant.РежимИспользованияИнформационнойБазы @@ -14,6 +36,149 @@ true + + 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 + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.Пользователи @@ -53,6 +218,39 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.СоставыГруппПользователей @@ -67,6 +265,39 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + Catalog.ГруппыПользователей @@ -106,4 +337,125 @@ true + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights index caab8a22d..f5e001d6a 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРассылокОтчетов/Rights.rights @@ -47,34 +47,14 @@ - Configuration.БиблиотекаСтандартныхПодсистем + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя - MainWindowModeNormal - true + View + false - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - Output - true + Edit + false @@ -84,6 +64,105 @@ 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.РассылкиОтчетов.Command.СобытияРассылки @@ -91,6 +170,83 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + InformationRegister.СостоянияРассылокОтчетов.Resource.ПоследнийЗапуск @@ -98,6 +254,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + Catalog.РассылкиОтчетов.Command.ВыполнитьСейчас @@ -157,6 +324,158 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + Output + true + + + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + InformationRegister.СостоянияРассылокОтчетов.Dimension.Рассылка @@ -164,6 +483,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + InformationRegister.СостоянияРассылокОтчетов.Resource.Выполнена @@ -171,4 +501,26 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights index 6635dd0ca..ceb20ac27 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеРолейИсполнителей/Rights.rights @@ -14,6 +14,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Report.ЗадачиИстекающиеНаДату @@ -25,6 +36,105 @@ true + + 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 + + InformationRegister.ИсполнителиЗадач @@ -83,6 +193,61 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Report.ЗависшиеЗадачи @@ -94,6 +259,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + InformationRegister.ИсполнителиЗадач.Command.НастройкаРолевойАдресации @@ -101,6 +277,83 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач @@ -140,6 +393,90 @@ true + + InformationRegister.ИсполнителиЗадач.Command.ИсполнителиРоли + + View + true + + + + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + Report.Задачи @@ -151,4 +488,26 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights index 2ceb5d7a0..33da3a185 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеФизическихЛиц/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2115,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2456,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2720,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3193,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3293,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3721,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3787,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3892,6 +3859,94 @@ true + + 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.РезультатОбновления @@ -4927,18 +4982,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5598,7 +5642,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5619,17 +5663,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5751,6 +5784,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5861,6 +5905,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -5993,6 +6048,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6026,6 +6092,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6136,17 +6213,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6763,17 +6829,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6797,7 +6852,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7654,6 +7709,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7720,17 +7786,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7808,17 +7863,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8095,7 +8139,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8424,6 +8468,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8446,17 +8501,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9855,18 +9899,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9910,7 +9943,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9942,6 +9975,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10327,17 +10371,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10503,17 +10536,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10581,18 +10603,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10800,17 +10811,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11273,17 +11273,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11372,6 +11361,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11449,6 +11449,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11680,17 +11702,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12219,6 +12230,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12527,6 +12549,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12681,17 +12714,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13022,17 +13044,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13165,17 +13176,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13528,17 +13528,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13561,17 +13550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13649,6 +13627,50 @@ 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.ПояснениеКомментария @@ -13682,6 +13704,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14056,6 +14089,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14089,17 +14133,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14221,17 +14254,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14441,17 +14463,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15629,17 +15640,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16652,6 +16652,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16861,17 +16872,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17048,17 +17048,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17334,17 +17323,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17521,17 +17499,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17588,7 +17555,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18148,6 +18115,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18215,7 +18193,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18346,17 +18335,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18533,17 +18511,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights b/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights index eaf53b01e..a347742b0 100644 --- a/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights +++ b/SSL/src/Roles/ДобавлениеИзменениеШаблоновАнкет/Rights.rights @@ -556,7 +556,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -589,7 +589,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1640,7 +1640,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -1969,17 +1969,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2002,17 +1991,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -2332,6 +2310,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2596,17 +2585,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3047,17 +3025,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3147,7 +3114,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3564,17 +3531,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3630,6 +3586,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3773,6 +3740,94 @@ 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.РезультатОбновления @@ -4759,18 +4814,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5408,7 +5452,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5429,17 +5473,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5561,6 +5594,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5671,6 +5715,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -5803,6 +5858,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -5836,6 +5902,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -5924,17 +6001,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6551,17 +6617,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6585,7 +6640,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7431,6 +7486,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7497,17 +7563,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7585,17 +7640,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -7872,7 +7916,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8190,6 +8234,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8212,17 +8267,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9610,18 +9654,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9665,7 +9698,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9697,6 +9730,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10082,17 +10126,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВерсииФайлов.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -10247,17 +10280,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10325,18 +10347,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10544,17 +10555,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11006,17 +11006,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11105,6 +11094,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11182,6 +11182,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11402,17 +11424,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -11941,6 +11952,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12238,6 +12260,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12381,17 +12414,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -12722,17 +12744,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -12865,17 +12876,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13228,17 +13228,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13261,17 +13250,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13349,6 +13327,50 @@ 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.Зашифрован @@ -13371,6 +13393,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -13745,6 +13778,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -13778,17 +13822,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -13910,17 +13943,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14108,17 +14130,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15263,17 +15274,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16204,6 +16204,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16413,17 +16424,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -16600,17 +16600,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -16886,17 +16875,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17073,17 +17051,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17129,7 +17096,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -17689,6 +17656,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -17745,7 +17723,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -17876,17 +17865,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18063,17 +18041,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ЗапускAutomation/Rights.rights b/SSL/src/Roles/ЗапускAutomation/Rights.rights index b905c4ed8..012dc6697 100644 --- a/SSL/src/Roles/ЗапускAutomation/Rights.rights +++ b/SSL/src/Roles/ЗапускAutomation/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2104,37 +2093,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Automation - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна @@ -2146,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2487,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2751,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3224,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3324,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3752,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3818,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3972,6 +3908,94 @@ 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.РезультатОбновления @@ -5007,18 +5031,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5678,7 +5691,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5699,17 +5712,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5831,6 +5833,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5941,6 +5954,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6073,6 +6097,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6106,6 +6141,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6216,17 +6262,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6843,17 +6878,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6877,7 +6901,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7734,6 +7758,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7800,17 +7835,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7888,17 +7912,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8175,7 +8188,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8504,6 +8517,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8526,17 +8550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9935,18 +9948,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9990,7 +9992,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -10022,6 +10024,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10407,17 +10420,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10583,17 +10585,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10661,18 +10652,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10880,17 +10860,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11353,17 +11322,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11452,6 +11410,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11529,6 +11498,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11573,6 +11564,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Automation + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись @@ -11760,17 +11782,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12299,6 +12310,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12607,6 +12629,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12761,17 +12794,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13102,17 +13124,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13245,17 +13256,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13608,17 +13608,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13641,17 +13630,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13729,6 +13707,50 @@ 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.ПояснениеКомментария @@ -13762,6 +13784,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14136,6 +14169,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14169,17 +14213,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14301,17 +14334,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14521,17 +14543,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15709,17 +15720,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16732,6 +16732,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16941,17 +16952,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17128,17 +17128,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17414,17 +17403,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17601,17 +17579,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17668,7 +17635,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18228,6 +18195,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18295,7 +18273,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18426,17 +18415,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18613,17 +18591,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights index 85cf25ca2..ce664cfab 100644 --- a/SSL/src/Roles/ЗапускВебКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускВебКлиента/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2104,37 +2093,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - WebClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна @@ -2146,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2487,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2751,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3224,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3324,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3752,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3818,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3972,6 +3908,94 @@ 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.РезультатОбновления @@ -5007,18 +5031,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5678,7 +5691,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5699,17 +5712,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5831,6 +5833,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5941,6 +5954,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6073,6 +6097,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6106,6 +6141,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6216,17 +6262,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6843,17 +6878,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6877,7 +6901,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7734,6 +7758,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7800,17 +7835,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7888,17 +7912,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8175,7 +8188,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8504,6 +8517,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8526,17 +8550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9935,18 +9948,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9990,7 +9992,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -10022,6 +10024,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10407,17 +10420,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10583,17 +10585,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10661,18 +10652,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10880,17 +10860,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11353,17 +11322,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11452,6 +11410,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11529,6 +11498,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11573,6 +11564,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + WebClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись @@ -11760,17 +11782,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12299,6 +12310,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12607,6 +12629,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12761,17 +12794,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13102,17 +13124,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13245,17 +13256,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13608,17 +13608,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13641,17 +13630,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13729,6 +13707,50 @@ 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.ПояснениеКомментария @@ -13762,6 +13784,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14136,6 +14169,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14169,17 +14213,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14301,17 +14334,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14521,17 +14543,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15709,17 +15720,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16732,6 +16732,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16941,17 +16952,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17128,17 +17128,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17414,17 +17403,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17601,17 +17579,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17668,7 +17635,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18228,6 +18195,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18295,7 +18273,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18426,17 +18415,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18613,17 +18591,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights index e5304d780..611454e16 100644 --- a/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТолстогоКлиента/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2104,37 +2093,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThickClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна @@ -2146,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2487,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2751,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3224,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3324,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3752,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3818,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3972,6 +3908,94 @@ 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.РезультатОбновления @@ -5007,18 +5031,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5678,7 +5691,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5699,17 +5712,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5831,6 +5833,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5941,6 +5954,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6073,6 +6097,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6106,6 +6141,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6216,17 +6262,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6843,17 +6878,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6877,7 +6901,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7734,6 +7758,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7800,17 +7835,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7888,17 +7912,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8175,7 +8188,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8504,6 +8517,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8526,17 +8550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9935,18 +9948,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9990,7 +9992,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -10022,6 +10024,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10407,17 +10420,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10583,17 +10585,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10661,18 +10652,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10880,17 +10860,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11353,17 +11322,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11452,6 +11410,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11529,6 +11498,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11573,6 +11564,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThickClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись @@ -11760,17 +11782,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12299,6 +12310,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12607,6 +12629,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12761,17 +12794,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13102,17 +13124,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13245,17 +13256,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13608,17 +13608,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13641,17 +13630,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13729,6 +13707,50 @@ 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.ПояснениеКомментария @@ -13762,6 +13784,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14136,6 +14169,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14169,17 +14213,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14301,17 +14334,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14521,17 +14543,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15709,17 +15720,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16732,6 +16732,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16941,17 +16952,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17128,17 +17128,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17414,17 +17403,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17601,17 +17579,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17668,7 +17635,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18228,6 +18195,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18295,7 +18273,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18426,17 +18415,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18613,17 +18591,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights index 6857453e1..3d16d027b 100644 --- a/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights +++ b/SSL/src/Roles/ЗапускТонкогоКлиента/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2104,37 +2093,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - ThinClient - true - - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна @@ -2146,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2487,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2751,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3224,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3324,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3752,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3818,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3972,6 +3908,94 @@ 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.РезультатОбновления @@ -5007,18 +5031,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5678,7 +5691,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5699,17 +5712,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5831,6 +5833,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5941,6 +5954,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6073,6 +6097,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6106,6 +6141,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6216,17 +6262,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6843,17 +6878,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6877,7 +6901,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7734,6 +7758,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7800,17 +7835,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7888,17 +7912,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8175,7 +8188,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8504,6 +8517,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8526,17 +8550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9935,18 +9948,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9990,7 +9992,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -10022,6 +10024,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10407,17 +10420,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10583,17 +10585,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10661,18 +10652,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10880,17 +10860,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11353,17 +11322,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11452,6 +11410,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11529,6 +11498,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11573,6 +11564,37 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + ThinClient + true + + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись @@ -11760,17 +11782,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12299,6 +12310,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12607,6 +12629,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12761,17 +12794,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13102,17 +13124,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13245,17 +13256,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13608,17 +13608,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13641,17 +13630,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13729,6 +13707,50 @@ 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.ПояснениеКомментария @@ -13762,6 +13784,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14136,6 +14169,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14169,17 +14213,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14301,17 +14334,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14521,17 +14543,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15709,17 +15720,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16732,6 +16732,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16941,17 +16952,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17128,17 +17128,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17414,17 +17403,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17601,17 +17579,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17668,7 +17635,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18228,6 +18195,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18295,7 +18273,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18426,17 +18415,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18613,17 +18591,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights index 999446171..05ff7dbc1 100644 --- a/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights +++ b/SSL/src/Roles/ИзменениеВыполнениеЗадач/Rights.rights @@ -10,6 +10,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + SessionParameter.ТекущийПользователь @@ -28,6 +39,105 @@ true + + 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 + + Task.ЗадачаИсполнителя @@ -108,6 +218,72 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Task.ЗадачаИсполнителя.Command.ВсеЗадачи @@ -115,6 +291,28 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + CommonCommand.ЗадачиПоПредмету @@ -133,6 +331,61 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач @@ -148,6 +401,50 @@ true + + 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 + + CommonCommand.КартаМаршрутаБизнесПроцесса @@ -155,6 +452,28 @@ true + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Task.ЗадачаИсполнителя.Command.МоиЗадачи @@ -169,6 +488,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + Report.Задачи @@ -180,6 +510,28 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). diff --git a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights index 591de06ae..a87685198 100644 --- a/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ИзменениеДополнительныхСведений/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1654,7 +1654,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -1994,17 +1994,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2027,17 +2016,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2368,6 +2346,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2632,17 +2621,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3105,17 +3083,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3205,7 +3172,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3633,17 +3600,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3699,6 +3655,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3853,6 +3820,94 @@ 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.РезультатОбновления @@ -4511,6 +4566,14 @@ "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","", "","") + + View + true + + + Edit + true + Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.ЗначенияПолей @@ -4865,18 +4928,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5536,7 +5588,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5557,17 +5609,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5689,6 +5730,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5799,6 +5851,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -5931,6 +5994,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -5964,6 +6038,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6074,17 +6159,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6701,17 +6775,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6735,7 +6798,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7592,6 +7655,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7658,17 +7732,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7746,17 +7809,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8033,7 +8085,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8362,6 +8414,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8384,17 +8447,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9000,17 +9052,6 @@ false - - InformationRegister.ДополнительныеСведения.Dimension.Свойство - - View - false - - - Edit - false - - Catalog.СтраныМира.StandardAttribute.Predefined @@ -9793,18 +9834,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9848,7 +9878,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9880,6 +9910,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10265,17 +10306,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10441,17 +10471,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10519,18 +10538,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10738,17 +10746,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11189,6 +11186,13 @@ false + + CommonCommand.ДополнительныеСведенияПанельНавигации + + View + true + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена @@ -11211,17 +11215,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11310,6 +11303,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11387,6 +11391,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11618,17 +11644,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12157,6 +12172,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12465,6 +12491,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12619,17 +12656,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -12652,17 +12678,6 @@ false - - InformationRegister.ДополнительныеСведения.Resource.Значение - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ПутьКФайлу @@ -12960,17 +12975,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13103,17 +13107,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13389,17 +13382,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13422,17 +13404,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13510,6 +13481,50 @@ 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.ПояснениеКомментария @@ -13543,6 +13558,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -13917,6 +13943,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -13950,17 +13987,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14006,7 +14032,7 @@ - CommonCommand.ДополнительныеСведения + CommonCommand.ДополнительныеСведенияКоманднаяПанель View true @@ -14089,17 +14115,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14309,17 +14324,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -14705,17 +14709,6 @@ false - - InformationRegister.ДополнительныеСведения.Dimension.Объект - - View - false - - - Edit - false - - Catalog.ГруппыВнешнихПользователей.StandardAttribute.Predefined @@ -15497,17 +15490,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16520,6 +16502,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16729,17 +16722,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -16916,17 +16898,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17202,17 +17173,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17389,17 +17349,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17456,7 +17405,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18016,6 +17965,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18039,7 +17999,7 @@ - CommonForm.РедактированиеЗначенийСвойств + CommonForm.РедактированиеДополнительныхСведений View true @@ -18090,7 +18050,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18221,17 +18192,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18408,17 +18368,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights b/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights index 7d0dcbf45..07da17189 100644 --- a/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights +++ b/SSL/src/Roles/ИзменениеМакетовПечатныхФорм/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2071,17 +2071,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2104,17 +2093,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2445,6 +2423,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2709,17 +2698,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3182,17 +3160,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3282,7 +3249,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3710,17 +3677,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3776,6 +3732,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3930,6 +3897,94 @@ 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.РезультатОбновления @@ -4965,18 +5020,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5636,7 +5680,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5657,17 +5701,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5789,6 +5822,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5899,6 +5943,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6031,6 +6086,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6064,6 +6130,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6174,17 +6251,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6801,17 +6867,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6835,7 +6890,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7681,6 +7736,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7747,17 +7813,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7835,17 +7890,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8122,7 +8166,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8451,6 +8495,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8473,17 +8528,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9882,18 +9926,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9937,7 +9970,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9969,6 +10002,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10329,17 +10373,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10505,17 +10538,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10583,18 +10605,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10802,17 +10813,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11275,17 +11275,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11374,6 +11363,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11451,6 +11451,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11682,17 +11704,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12221,6 +12232,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12529,6 +12551,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12683,17 +12716,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13024,17 +13046,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13167,17 +13178,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13530,17 +13530,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13563,17 +13552,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13651,6 +13629,50 @@ 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.ПояснениеКомментария @@ -13684,6 +13706,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14047,6 +14080,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14080,17 +14124,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14212,17 +14245,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14432,17 +14454,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15620,17 +15631,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16643,6 +16643,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16841,17 +16852,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17028,17 +17028,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17314,17 +17303,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17501,17 +17479,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17568,7 +17535,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18128,6 +18095,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18195,7 +18173,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18326,17 +18315,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18513,17 +18491,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/Rights.rights b/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/Rights.rights index 3415e4f15..6dda6446b 100644 --- a/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/Rights.rights +++ b/SSL/src/Roles/ИзменениеТекущегоВнешнегоПользователя/Rights.rights @@ -3,6 +3,204 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.СоставыГруппПользователей @@ -42,6 +240,127 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ГруппыВнешнихПользователей @@ -60,4 +379,37 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights b/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights index 1ead875e9..ebf6d9b7d 100644 --- a/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights +++ b/SSL/src/Roles/ИзменениеТекущегоПользователя/Rights.rights @@ -3,6 +3,28 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Constant.РежимИспользованияИнформационнойБазы @@ -14,6 +36,149 @@ true + + 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 + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.Пользователи @@ -43,6 +208,39 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.СоставыГруппПользователей @@ -60,6 +258,39 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + Catalog.ГруппыПользователей @@ -78,4 +309,125 @@ true + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights index 03c4ab549..af247801f 100644 --- a/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights +++ b/SSL/src/Roles/ИзменениеУчастниковГруппДоступа/Rights.rights @@ -10,6 +10,193 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + CommonForm.ПраваДоступа @@ -17,6 +204,138 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ГруппыДоступа @@ -92,6 +411,39 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + ПоЗначениям // ПоЗначениям ( Таблица, Право, Модификатор, В1,П1, В2,Р2, ..., В(n), П(n)). diff --git a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights index 1d27998d9..8d9b9c88b 100644 --- a/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2104,41 +2093,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - MainWindowModeNormal - true - - - MainWindowModeWorkplace - true - - - MainWindowModeEmbeddedWorkplace - true - - - MainWindowModeFullscreenWorkplace - true - - - MainWindowModeKiosk - true - - - AnalyticsSystemClient - true - - - InteractiveOpenExtDataProcessors - true - - - InteractiveOpenExtReports - true - - Catalog.Пользователи.TabularSection.КонтактнаяИнформация.Attribute.Страна @@ -2150,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2491,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2755,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3228,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3328,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3756,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3822,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3976,6 +3908,94 @@ 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.РезультатОбновления @@ -5011,18 +5031,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5682,7 +5691,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5703,17 +5712,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5835,6 +5833,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5945,6 +5954,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6077,6 +6097,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6110,6 +6141,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6220,17 +6262,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6847,17 +6878,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6881,7 +6901,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7738,6 +7758,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7804,17 +7835,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7892,17 +7912,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8179,7 +8188,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8508,6 +8517,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8530,17 +8550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9939,18 +9948,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9994,7 +9992,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -10026,6 +10024,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10411,17 +10420,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10587,17 +10585,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10665,18 +10652,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10884,17 +10860,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11357,17 +11322,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11456,6 +11410,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11533,6 +11498,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11577,6 +11564,41 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + MainWindowModeNormal + true + + + MainWindowModeWorkplace + true + + + MainWindowModeEmbeddedWorkplace + true + + + MainWindowModeFullscreenWorkplace + true + + + MainWindowModeKiosk + true + + + AnalyticsSystemClient + true + + + InteractiveOpenExtDataProcessors + true + + + InteractiveOpenExtReports + true + + Document.ЭлектронноеПисьмоВходящее.Attribute.УчетнаяЗапись @@ -11764,17 +11786,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12303,6 +12314,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12611,6 +12633,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12765,17 +12798,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13106,17 +13128,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13249,17 +13260,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13612,17 +13612,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13645,17 +13634,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13733,6 +13711,50 @@ 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.ПояснениеКомментария @@ -13766,6 +13788,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14140,6 +14173,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14173,17 +14217,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14305,17 +14338,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14525,17 +14547,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15713,17 +15724,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16736,6 +16736,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16945,17 +16956,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17132,17 +17132,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17418,17 +17407,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17605,17 +17583,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17672,7 +17639,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18232,6 +18199,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18299,7 +18277,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18430,17 +18419,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18617,17 +18595,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights new file mode 100644 index 000000000..028c93f80 --- /dev/null +++ b/SSL/src/Roles/ИспользованиеВариантовОтчетов/Rights.rights @@ -0,0 +1,701 @@ + + + false + true + false + + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта + + Edit + false + + + + Catalog.ВариантыОтчетов + + Read + true + + ВариантыОтчетов ГДЕ (ВариантыОтчетов.Пользовательский = ЛОЖЬ + ИЛИ ВариантыОтчетов.ТолькоДляАвтора = ЛОЖЬ + ИЛИ ВариантыОтчетов.Автор = &ТекущийПользователь) + + + + Insert + true + + ВариантыОтчетов ГДЕ ВариантыОтчетов.Автор = &ТекущийПользователь + + + + Update + true + + ВариантыОтчетов ГДЕ ВариантыОтчетов.Автор = &ТекущийПользователь + + + + Delete + true + + ВариантыОтчетов ГДЕ ВариантыОтчетов.Автор = &ТекущийПользователь + + + + View + true + + + InteractiveInsert + true + + + Edit + true + + + InteractiveSetDeletionMark + true + + + InteractiveClearDeletionMark + 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.Code + + Edit + false + + + + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная + + Edit + false + + + + CommonForm.ПанельОтчетов + + View + true + + + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + CommonForm.ФормаВариантаОтчета + + View + true + + + + Catalog.ВариантыОтчетов.Attribute.КлючВарианта + + Edit + false + + + + Catalog.ВариантыОтчетов.Command.Открыть + + View + true + + + + Catalog.ВариантыОтчетов.Attribute.ТолькоДляАвтора + + 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.ИдентификаторыОбъектовМетаданных + + Read + true + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.Resource.Видимость + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Пользовательский + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию + + Edit + false + + + + CommonForm.ФормаНастроекОтчета + + View + true + + + + InformationRegister.НастройкиВариантовОтчетов.Dimension.Вариант + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + CommonForm.ВыборПроизвольногоПериода + + View + true + + + + Catalog.ВариантыОтчетов.Attribute.ТипОтчета + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + CommonForm.ОтправкаТабличныхДокументовПоПочте + + View + true + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + CommonForm.ФормаОтчета + + View + true + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + 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.НастройкиВариантовОтчетов + + Read + true + + ГДЕ (Пользователь = &ТекущийПользователь + ИЛИ Вариант.Автор = &ТекущийПользователь) + + + + Update + true + + ГДЕ (Пользователь = &ТекущийПользователь + ИЛИ Вариант.Автор = &ТекущийПользователь) + + + + + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.Resource.БыстрыйДоступ + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Command.РазместитьВРазделах + + View + true + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки + + Edit + false + + + + InformationRegister.НастройкиВариантовОтчетов.Dimension.Пользователь + + View + false + + + Edit + false + + + diff --git a/SSL/src/Roles/ЧтениеВариантовОтчетов/ЧтениеВариантовОтчетов.mdo b/SSL/src/Roles/ИспользованиеВариантовОтчетов/ИспользованиеВариантовОтчетов.mdo similarity index 57% rename from SSL/src/Roles/ЧтениеВариантовОтчетов/ЧтениеВариантовОтчетов.mdo rename to SSL/src/Roles/ИспользованиеВариантовОтчетов/ИспользованиеВариантовОтчетов.mdo index acf1bee24..9b2d66f86 100644 --- a/SSL/src/Roles/ЧтениеВариантовОтчетов/ЧтениеВариантовОтчетов.mdo +++ b/SSL/src/Roles/ИспользованиеВариантовОтчетов/ИспользованиеВариантовОтчетов.mdo @@ -1,8 +1,8 @@ - ЧтениеВариантовОтчетов + ИспользованиеВариантовОтчетов ru - Чтение вариантов отчетов + Использование вариантов отчетов diff --git a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights index 168f968f1..b4869513a 100644 --- a/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights +++ b/SSL/src/Roles/ИспользованиеДополнительныхОтчетовИОбработок/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2115,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2456,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2720,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3193,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3293,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3728,17 +3695,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3794,6 +3750,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3948,6 +3915,94 @@ 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.РезультатОбновления @@ -4983,18 +5038,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5654,7 +5698,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5675,17 +5719,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5807,6 +5840,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5917,6 +5961,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6049,6 +6104,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6082,6 +6148,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6192,17 +6269,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6819,17 +6885,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6853,7 +6908,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7710,6 +7765,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7776,17 +7842,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7864,17 +7919,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8151,7 +8195,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8343,6 +8387,13 @@ Read true + + Update + true + + ГДЕ Пользователь = &ТекущийПользователь + + InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам.StandardAttribute.Active @@ -8487,6 +8538,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8509,17 +8571,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9932,18 +9983,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9987,7 +10027,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -10019,6 +10059,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10404,17 +10455,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10580,17 +10620,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10658,18 +10687,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10877,17 +10895,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11357,17 +11364,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11456,6 +11452,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11533,6 +11540,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11764,17 +11793,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12303,6 +12321,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12611,6 +12640,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12765,17 +12805,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13106,17 +13135,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13249,17 +13267,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13612,17 +13619,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13645,17 +13641,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13733,6 +13718,50 @@ 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.ПояснениеКомментария @@ -13766,6 +13795,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14140,6 +14180,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14173,17 +14224,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14312,17 +14352,6 @@ true - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14532,17 +14561,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15727,17 +15745,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16757,6 +16764,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16966,17 +16984,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17153,17 +17160,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17439,17 +17435,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17626,17 +17611,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17693,7 +17667,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18253,6 +18227,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18320,7 +18305,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18451,17 +18447,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18638,17 +18623,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - CommonCommand.ДополнительныеОтчетыИОбработкиЗаполнениеОбъекта diff --git a/SSL/src/Roles/ИспользованиеЗаметок/Rights.rights b/SSL/src/Roles/ИспользованиеЗаметок/Rights.rights index 84508dec3..d9879f409 100644 --- a/SSL/src/Roles/ИспользованиеЗаметок/Rights.rights +++ b/SSL/src/Roles/ИспользованиеЗаметок/Rights.rights @@ -3,6 +3,116 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + Catalog.Заметки @@ -51,6 +161,127 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + CommonCommand.СоздатьЗаметкуПоПредмету @@ -58,6 +289,94 @@ true + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + CommonCommand.ЗаметкиПоПредмету @@ -65,6 +384,39 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.Заметки.Command.ВсеЗаметки diff --git a/SSL/src/Roles/ИспользованиеИнтеграцииСДокументооборот/Rights.rights b/SSL/src/Roles/ИспользованиеИнтеграцииСДокументооборот/Rights.rights index f17768fcb..469e549c1 100644 --- a/SSL/src/Roles/ИспользованиеИнтеграцииСДокументооборот/Rights.rights +++ b/SSL/src/Roles/ИспользованиеИнтеграцииСДокументооборот/Rights.rights @@ -49,6 +49,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + CommonForm.ДокументооборотБизнесПроцессОбработкаИсходящегоДокумента @@ -56,6 +67,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Constant.ИдентификаторКорневойПапкиФайлов1СДокументооборот @@ -67,6 +89,94 @@ true + + 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 + + CommonForm.ДокументооборотИсходящийДокумент @@ -81,6 +191,28 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + CommonCommand.ДокументооборотДокументы @@ -88,6 +220,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + CommonForm.ДокументооборотВыборПользователяСПодразделениями @@ -95,6 +238,28 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + CommonForm.ДокументооборотСозданиеНовогоФайла @@ -137,6 +302,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + CommonForm.ДокументооборотВыборИсполнителяБизнесПроцесса @@ -144,6 +320,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + CommonForm.ДокументооборотВыборОбъектовАдресацииРоли @@ -180,6 +367,50 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + CommonForm.ДокументооборотБизнесПроцессОбработкаВнутреннегоДокумента @@ -201,6 +432,28 @@ true + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + CommonForm.ДокументооборотВходящийДокумент @@ -208,6 +461,61 @@ true + + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + CommonForm.ДокументооборотКарточкаЗадачи @@ -222,6 +530,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + CommonForm.ДокументооборотБизнесПроцессИсполнение @@ -261,6 +580,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + CommonForm.ДокументооборотБизнесПроцессРассмотрение @@ -293,4 +623,26 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ИспользованиеИнформационногоЦентра/Rights.rights b/SSL/src/Roles/ИспользованиеИнформационногоЦентра/Rights.rights new file mode 100644 index 000000000..0869368d0 --- /dev/null +++ b/SSL/src/Roles/ИспользованиеИнформационногоЦентра/Rights.rights @@ -0,0 +1,433 @@ + + + false + true + false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + Catalog.ОбщиеДанныеИнформационногоЦентра + + Read + true + + + View + true + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + CommonForm.ИнформационныйЦентр + + View + true + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + CommonForm.ОтображениеНовостей + + View + true + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + CommonForm.ОтправкаСообщенияВТехподдержку + + View + true + + + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + CommonCommand.ОткрытьИнформационныйЦентр + + View + true + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + CommonForm.РедактированиеНовогоПисьма + + View + true + + + + InformationRegister.ОбластиДанных + + Read + true + + + View + true + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + Subsystem.СтандартныеПодсистемы.Subsystem.ИнформационныйЦентр + + View + true + + + + Catalog.ТипыИнформацииИнформационногоЦентра + + Read + true + + + View + true + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + diff --git a/SSL/src/Roles/ИспользованиеИнформационногоЦентра/ИспользованиеИнформационногоЦентра.mdo b/SSL/src/Roles/ИспользованиеИнформационногоЦентра/ИспользованиеИнформационногоЦентра.mdo new file mode 100644 index 000000000..481931a36 --- /dev/null +++ b/SSL/src/Roles/ИспользованиеИнформационногоЦентра/ИспользованиеИнформационногоЦентра.mdo @@ -0,0 +1,8 @@ + + + ИспользованиеИнформационногоЦентра + + ru + Использование информационного центра + + diff --git a/SSL/src/Roles/ИспользованиеНапоминаний/Rights.rights b/SSL/src/Roles/ИспользованиеНапоминаний/Rights.rights index c62773ceb..7f7060a5a 100644 --- a/SSL/src/Roles/ИспользованиеНапоминаний/Rights.rights +++ b/SSL/src/Roles/ИспользованиеНапоминаний/Rights.rights @@ -3,6 +3,17 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + CommonCommand.УстановитьНапоминаниеПоПредмету @@ -10,6 +21,193 @@ true + + 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 + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.НапоминанияПользователя @@ -35,6 +233,160 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + InformationRegister.НапоминанияПользователя.Command.МоиНапоминания diff --git a/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights b/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights index 2e9deadcf..f84336470 100644 --- a/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights +++ b/SSL/src/Roles/ИспользованиеУчетныхЗаписейЭлектроннойПочты/Rights.rights @@ -24,6 +24,28 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляОтправки @@ -31,6 +53,94 @@ 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.SMTPАутентификация @@ -46,7 +156,62 @@ - Catalog.УчетныеЗаписиЭлектроннойПочты.Command.ПроверкаУчетнойЗаписи + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + Catalog.УчетныеЗаписиЭлектроннойПочты.Command.ПроверитьУчетнуюЗапись View true @@ -59,6 +224,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -142,6 +318,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СерверВходящейПочтыPOP3 @@ -156,6 +343,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИспользоватьДляПолучения @@ -170,6 +368,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.АдресЭлектроннойПочты @@ -177,6 +386,39 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -184,6 +426,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортPOP3 @@ -191,6 +444,61 @@ 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПериодХраненияСообщенийНаСервере @@ -198,6 +506,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ИмяПользователя @@ -219,6 +538,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -233,6 +563,28 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.СпособPOP3Аутентификации diff --git a/SSL/src/Roles/ИспользованиеЭЦП/Rights.rights b/SSL/src/Roles/ИспользованиеЭЦП/Rights.rights index d7207f3a3..ef1ac0509 100644 --- a/SSL/src/Roles/ИспользованиеЭЦП/Rights.rights +++ b/SSL/src/Roles/ИспользованиеЭЦП/Rights.rights @@ -3,6 +3,17 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + CommonForm.ВводПароляСОписаниями @@ -31,6 +42,171 @@ true + + 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 + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + CommonForm.НастройкиЭЦП @@ -38,6 +214,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + CommonForm.ВыборПодписей @@ -59,6 +246,72 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + CommonForm.СертификатЭЦП @@ -73,4 +326,103 @@ true + + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights b/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights index a402b1bb8..890dd6564 100644 --- a/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights +++ b/SSL/src/Roles/НастройкаИОценкаПроизводительности/Rights.rights @@ -70,6 +70,10 @@ Edit true + + InteractiveDelete + true + InteractiveSetDeletionMark true @@ -94,4 +98,23 @@ true + + InformationRegister.ЗамерыВремени + + Read + true + + + Update + true + + + View + true + + + Edit + true + + diff --git a/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights b/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights index 01a02563e..af4e3157e 100644 --- a/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights +++ b/SSL/src/Roles/ПодготовкаСогласияНаОбработкуПерсональныхДанных/Rights.rights @@ -38,6 +38,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаСФайлами @@ -45,6 +56,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ПолнотекстовыйПоиск @@ -52,6 +74,94 @@ true + + 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 + + Subsystem.СтандартныеПодсистемы.Subsystem.ОбновлениеКонфигурации @@ -73,6 +183,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ВебСервисыРаботыСФайлами @@ -80,6 +201,50 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.РегламентныеЗадания @@ -87,6 +252,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.УправлениеИтогамиИАгрегатами @@ -174,6 +350,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ФайловыеФункции @@ -189,7 +376,7 @@ - Subsystem.СтандартныеПодсистемы.Subsystem.КонтрольЖурналаРегистрации + Subsystem.СтандартныеПодсистемы.Subsystem.АнализЖурналаРегистрации View true @@ -202,6 +389,17 @@ true + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ОбменДанными @@ -209,6 +407,39 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ПрефиксацияОбъектов @@ -255,6 +486,28 @@ true + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ВерсионированиеОбъектов @@ -276,6 +529,50 @@ true + + 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 + + Subsystem.СтандартныеПодсистемы.Subsystem.ВнешниеБизнесПроцессыИЗадачи @@ -283,6 +580,17 @@ true + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ДатыЗапретаИзменения @@ -297,6 +605,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ИнтеграцияС1СДокументооборот @@ -360,6 +679,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.СтруктураПодчиненности @@ -395,6 +725,28 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Subsystem.СтандартныеПодсистемы.Subsystem.ОбновлениеВерсииИБ diff --git a/SSL/src/Roles/ПолныеПрава/Rights.rights b/SSL/src/Roles/ПолныеПрава/Rights.rights index 2e0716f48..cd53473ff 100644 --- a/SSL/src/Roles/ПолныеПрава/Rights.rights +++ b/SSL/src/Roles/ПолныеПрава/Rights.rights @@ -3,17 +3,6 @@ true true false - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ПоказыватьОповещение - - View - false - - - Edit - false - - DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.ВариантРасписанияРезервногоКопирования @@ -82,10 +71,6 @@ SessionParameter.ОбластьДанныхИспользование - - Get - false - Set false @@ -187,9 +172,9 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды + InformationRegister.ПоставляемыеДанныеТребующиеОбработки - View + Update false @@ -197,6 +182,34 @@ false + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.StandardAttribute.Period + + Edit + false + + Catalog.ШаблоныАнкет @@ -220,7 +233,7 @@ - Catalog.КлассификаторВалют.Attribute.НаименованиеПолное + Catalog.УдалитьКлассификаторВалют.Attribute.НаименованиеПолное Edit false @@ -772,17 +785,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Модификатор - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодХраненияРезервныхКопий @@ -812,17 +814,6 @@ false - - DataProcessor.КонтрольЖурналаРегистрации - - Use - false - - - View - false - - InformationRegister.АдресныйКлассификатор.Resource.Наименование @@ -936,45 +927,6 @@ false - - Configuration.БиблиотекаСтандартныхПодсистем - - Administration - false - - - UpdateDataBaseConfiguration - false - - - ExclusiveMode - false - - - ThickClient - false - - - ExternalConnection - false - - - Automation - false - - - TechnicalSpecialistMode - false - - - InteractiveOpenExtDataProcessors - false - - - InteractiveOpenExtReports - false - - Constant.ИмяСлужебногоПользователяСервисаПоставляемыхДанных @@ -1029,17 +981,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.РегламентноеЗаданиеGUID - - View - false - - - Edit - false - - DataProcessor.РезервноеКопированиеИБ.Attribute.ОчисткаКаталогаСРезервнымиКопиямиПриПереполнении @@ -1271,17 +1212,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Ответственный - - View - false - - - Edit - false - - InformationRegister.НастройкиТранспортаОбмена.Resource.WSПароль @@ -1336,17 +1266,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение.Attribute.ПолноеИмяОбъектаМетаданных - - View - false - - - Edit - false - - InformationRegister.АдресныйКлассификатор.Dimension.ТипАдресногоЭлемента @@ -1482,6 +1401,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -1524,6 +1454,10 @@ Catalog.КлючевыеОперации + + Read + false + Insert false @@ -1536,6 +1470,10 @@ Delete false + + View + false + InteractiveInsert false @@ -1560,6 +1498,10 @@ InteractiveDeleteMarked false + + InputByString + false + InteractiveDeletePredefinedData false @@ -1576,9 +1518,45 @@ InteractiveDeleteMarkedPredefinedData false + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + Edit false @@ -1586,6 +1564,10 @@ Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + Edit false @@ -1593,6 +1575,10 @@ Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + Edit false @@ -1600,6 +1586,10 @@ Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + Edit false @@ -1607,6 +1597,10 @@ Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + Edit false @@ -1614,6 +1608,10 @@ Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + Edit false @@ -1621,6 +1619,10 @@ Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + Edit false @@ -1628,6 +1630,10 @@ Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + Edit false @@ -1674,9 +1680,9 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Идентификатор + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных - View + Update false @@ -1684,6 +1690,34 @@ false + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Active + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.LineNumber + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Recorder + + Edit + false + + + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.StandardAttribute.Period + + Edit + false + + DataProcessor.РезервноеКопированиеИБ.Attribute.ВыполнитьРезервноеКопированиеСейчас @@ -1706,6 +1740,65 @@ false + + Catalog.ОбщиеДанныеИнформационногоЦентра + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InputByString + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСжиматьФайлИсходящегоСообщения @@ -1806,17 +1899,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Комментарий - - View - false - - - Edit - false - - InformationRegister.СостоянияОбменовДанными.Dimension.ДействиеПриОбмене @@ -1942,6 +2024,49 @@ false + + Constant.КлючОбластиДанных + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Catalog.ИдентификаторыОбъектовМетаданных @@ -2125,17 +2250,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.БезопасныйРежим - - View - false - - - Edit - false - - Constant.ОбщийКаталогВременныхФайлов @@ -2205,7 +2319,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Resource.Кратность + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Кратность Edit false @@ -2363,6 +2477,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -2377,6 +2502,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + InformationRegister.БлокировкиСеансовОбластиДанных @@ -2558,6 +2694,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация @@ -2569,6 +2716,13 @@ false + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.Dimension.КодОбработчика + + Edit + false + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Dimension.УзелИнформационнойБазы @@ -2598,17 +2752,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Версия - - View - false - - - Edit - false - - Document.ЗапланированноеВзаимодействие @@ -2854,6 +2997,49 @@ false + + Constant.ТребуетсяОбновлениеИнформационнойБазы + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя @@ -2861,6 +3047,49 @@ false + + Constant.ПоддержкаРезервногоКопирования + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.EMAILСжиматьФайлИсходящегоСообщения @@ -3013,17 +3242,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Вид - - View - false - - - Edit - false - - Catalog.СценарииОбменовДанными.Attribute.ИспользоватьРегламентноеЗадание @@ -3208,17 +3426,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыОбъекта - - View - false - - - Edit - false - - DataProcessor.ОценкаПроизводительности.Attribute.Шаг @@ -3406,6 +3613,13 @@ false + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Resource.КоличествоПопыток + + Edit + false + + InformationRegister.ОчередьЗаданий.Resource.ИсполняющееФоновоеЗадание @@ -3417,6 +3631,75 @@ false + + ExchangePlan.ОбменВнешнимиЗаданиямиС1СДокументооборот + + InteractiveDelete + false + + + + InformationRegister.ОбластиКРезервномуКопированию + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + ReadDataHistoryOfMissingData + false + + + UpdateDataHistory + false + + + UpdateDataHistoryOfMissingData + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.СообщенияСистемы.Attribute.Заблокировано @@ -3435,6 +3718,13 @@ false + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.Dimension.ОбластьДанных + + Edit + false + + DataProcessor.НастройкаРезервногоКопированияИБ.Attribute.КодТипаРезервногоКопирования @@ -3718,17 +4008,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Назначение - - View - false - - - Edit - false - - Catalog.СообщенияСистемы.Attribute.ПодробноеПредставлениеОшибки @@ -3853,7 +4132,7 @@ - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка View false @@ -3972,24 +4251,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Разделы.Attribute.УдалитьИмяРаздела - - View - false - - - Edit - false - - - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - Edit - false - - InformationRegister.НеразделенныеПользователи @@ -4156,164 +4417,26 @@ Catalog.ДополнительныеОтчетыИОбработки Insert - false - - - Update - false + true + + ГДЕ &ОбластьДанныхИспользование <> ИСТИНА + Delete - false - - - View - false - - - InteractiveInsert - false - - - Edit - false + true + + ГДЕ &ОбластьДанныхИспользование <> ИСТИНА + 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.ДополнительныеОтчетыИОбработки.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 @@ -4378,7 +4501,11 @@ - Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Используется + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + Edit false @@ -4461,7 +4588,7 @@ - Constant.КаталогВременныхФайловСообщенийОбменаДляWindows + Constant.КаталогВременныхФайловДляWindows Read false @@ -4516,6 +4643,10 @@ Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + Edit false @@ -4528,6 +4659,45 @@ false + + Configuration.БиблиотекаСтандартныхПодсистем + + Administration + false + + + UpdateDataBaseConfiguration + false + + + ExclusiveMode + false + + + ThickClient + false + + + ExternalConnection + false + + + Automation + false + + + TechnicalSpecialistMode + false + + + InteractiveOpenExtDataProcessors + false + + + InteractiveOpenExtReports + false + + InformationRegister.КэшПрограммныхИнтерфейсов @@ -4580,7 +4750,7 @@ - Catalog.КлассификаторВалют + Catalog.УдалитьКлассификаторВалют Insert false @@ -4635,56 +4805,56 @@ - Catalog.КлассификаторВалют.StandardAttribute.Predefined + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Predefined Edit false - Catalog.КлассификаторВалют.StandardAttribute.Ref + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Ref Edit false - Catalog.КлассификаторВалют.StandardAttribute.DeletionMark + Catalog.УдалитьКлассификаторВалют.StandardAttribute.DeletionMark Edit false - Catalog.КлассификаторВалют.StandardAttribute.IsFolder + Catalog.УдалитьКлассификаторВалют.StandardAttribute.IsFolder Edit false - Catalog.КлассификаторВалют.StandardAttribute.Owner + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Owner Edit false - Catalog.КлассификаторВалют.StandardAttribute.Parent + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Parent Edit false - Catalog.КлассификаторВалют.StandardAttribute.Description + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description Edit false - Catalog.КлассификаторВалют.StandardAttribute.Code + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Code Edit false @@ -4702,7 +4872,7 @@ - Constant.КаталогВременныхФайловСообщенийОбменаДляLinux + Constant.КаталогВременныхФайловДляLinux Read false @@ -4846,7 +5016,7 @@ - InformationRegister.КурсыВалютПоКлассификатору + InformationRegister.УдалитьКурсыВалютПоКлассификатору Update false @@ -4857,28 +5027,28 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Active + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Active Edit false - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.LineNumber + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.LineNumber Edit false - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Recorder + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Recorder Edit false - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Period + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Period Edit false @@ -4969,6 +5139,17 @@ Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSЗапомнитьПароль Edit false @@ -5020,6 +5201,17 @@ false + + Catalog.ЗначенияСвойствОбъектовИерархия + + InteractiveDelete + false + + + InteractiveDeletePredefinedData + false + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора @@ -5061,6 +5253,10 @@ Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + Edit false @@ -5261,7 +5457,22 @@ - Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИмяФайла + InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел + + Edit + false + + + + Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы + + Read + false + + + Update + false + View false @@ -5270,11 +5481,28 @@ Edit false - - - InformationRegister.НастройкиТранспортаОбмена.Dimension.Узел - Edit + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion false @@ -5358,6 +5586,49 @@ false + + Constant.НастройкаПодчиненногоУзлаРИБЗавершена + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Catalog.ГруппыИсполнителейЗадач @@ -5497,14 +5768,58 @@ Catalog.КлассификаторБанковРФ + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + InteractiveDelete false + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + InteractiveDeletePredefinedData false + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + Constant.СписокЗапрещенныхРасширений @@ -5549,6 +5864,13 @@ false + + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных.Dimension.ИдентификаторФайла + + Edit + false + + InformationRegister.ЗамерыВремени @@ -5759,17 +6081,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.ХранилищеОбработки - - View - false - - - Edit - false - - DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма @@ -5781,17 +6092,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Публикация - - View - false - - - Edit - false - - InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.Год @@ -5882,6 +6182,49 @@ false + + Constant.СообщениеОбменаДаннымиИзГлавногоУзла + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Constant.АдресВебСервисаОбменаДанными @@ -5936,17 +6279,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.Представление - - View - false - - - Edit - false - - InformationRegister.ДанныеПроизводственногоКалендаря.Dimension.ПроизводственныйКалендарь @@ -6169,7 +6501,7 @@ - Catalog.КлассификаторВалют.Attribute.ПараметрыПрописиНаРусском + Catalog.УдалитьКлассификаторВалют.Attribute.ПараметрыПрописиНаРусском Edit false @@ -6500,7 +6832,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Resource.Курс + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Курс Edit false @@ -6574,6 +6906,49 @@ false + + Constant.ЭтоАвтономноеРабочееМесто + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + Catalog.ТомаХраненияФайлов @@ -6787,17 +7162,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.TabularSection.Команды.Attribute.ВариантЗапуска - - View - false - - - Edit - false - - InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПассивноеСоединение @@ -6823,6 +7187,49 @@ false + + Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы + + Read + false + + + Update + false + + + View + false + + + Edit + false + + + ReadDataHistory + false + + + UpdateDataHistory + false + + + UpdateDataHistoryVersionComment + false + + + ViewDataHistory + false + + + EditDataHistoryVersionComment + false + + + SwitchToDataHistoryVersion + false + + InformationRegister.АдресныеСокращения.Dimension.Код @@ -6852,6 +7259,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMИмяИнформационнойБазыНаСервере1СПредприятия @@ -6888,6 +7306,13 @@ false + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Dimension.КодОбработчика + + Edit + false + + InformationRegister.ОчередьЗаданий.Resource.ИмяМетода @@ -6900,12 +7325,71 @@ - InformationRegister.КурсыВалютПоКлассификатору.Dimension.Валюта + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Dimension.Валюта Edit false + + Catalog.ТипыИнформацииИнформационногоЦентра + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InputByString + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + Catalog.Файлы @@ -6942,17 +7426,6 @@ false - - Catalog.ДополнительныеОтчетыИОбработки.Attribute.Информация - - View - false - - - Edit - false - - InformationRegister.НастройкиТранспортаОбмена.Resource.WSURLВебСервиса @@ -6967,6 +7440,13 @@ false + + InformationRegister.НастройкиТранспортаОбмена.Resource.WSИспользоватьПередачуБольшогоОбъемаДанных + + Edit + false + + InformationRegister.ОбщиеНастройкиУзловИнформационныхБаз.Resource.НачальнаяВыгрузкаДанных @@ -7003,6 +7483,13 @@ false + + InformationRegister.ПоставляемыеДанныеТребующиеОбработки.Dimension.ИдентификаторФайла + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.FTPСоединениеПуть @@ -7032,6 +7519,49 @@ 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.ВидТранспортаОбмена @@ -7298,6 +7828,61 @@ false + + Catalog.ПоставляемыеДанные + + Insert + false + + + Update + false + + + Delete + false + + + InteractiveInsert + false + + + Edit + false + + + InteractiveDelete + false + + + InteractiveSetDeletionMark + false + + + InteractiveClearDeletionMark + false + + + InteractiveDeleteMarked + false + + + InteractiveDeletePredefinedData + false + + + InteractiveSetDeletionMarkPredefinedData + false + + + InteractiveClearDeletionMarkPredefinedData + false + + + InteractiveDeleteMarkedPredefinedData + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.COMВариантРаботыИнформационнойБазы @@ -7307,10 +7892,6 @@ SessionParameter.ОбластьДанныхЗначение - - Get - false - Set false @@ -7423,22 +8004,18 @@ - CommonForm.ПодключениеКонечнойТочки + ExchangePlan.ОбменВнешнимиЗаданиями - View + InteractiveDelete false - Catalog.ДополнительныеОтчетыИОбработки.Attribute.ИспользоватьДляФормыСписка + CommonForm.ПодключениеКонечнойТочки View false - - Edit - false - DataProcessor.РезервноеКопированиеИБ.Attribute.ПериодОтложенногоОповещения @@ -7451,13 +8028,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - Edit - false - - InformationRegister.ОчередьЗаданий.Resource.Использование diff --git a/SSL/src/Roles/ПроверкаДоступныхОбновленийКонфигурации/Rights.rights b/SSL/src/Roles/ПроверкаДоступныхОбновленийКонфигурации/Rights.rights index 3211925fd..ba89f7e94 100644 --- a/SSL/src/Roles/ПроверкаДоступныхОбновленийКонфигурации/Rights.rights +++ b/SSL/src/Roles/ПроверкаДоступныхОбновленийКонфигурации/Rights.rights @@ -3,6 +3,127 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации @@ -14,6 +135,83 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + Constant.СтатусОбновленияКонфигурации @@ -25,4 +223,158 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/РаботаСБиблиотекойФайлов/Rights.rights b/SSL/src/Roles/РаботаСБиблиотекойФайлов/Rights.rights index 188f09f86..59d0b2a16 100644 --- a/SSL/src/Roles/РаботаСБиблиотекойФайлов/Rights.rights +++ b/SSL/src/Roles/РаботаСБиблиотекойФайлов/Rights.rights @@ -3,6 +3,116 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + CommonForm.БиблиотекаФайлов @@ -10,6 +120,204 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + CommonCommand.БиблиотекаФайлов @@ -17,6 +325,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + CommonForm.КарточкаФайлаИзБиблиотекиФайлов @@ -24,4 +343,37 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights index cffa7eb79..31540ea67 100644 --- a/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights +++ b/SSL/src/Roles/РаботаСПапкамиФайлов/Rights.rights @@ -565,7 +565,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -615,7 +615,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1715,7 +1715,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2055,17 +2055,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2088,17 +2077,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2429,6 +2407,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2696,17 +2685,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3157,17 +3135,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3257,7 +3224,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3648,17 +3615,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3714,6 +3670,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3868,6 +3835,94 @@ 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.РезультатОбновления @@ -4895,18 +4950,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5562,7 +5606,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5583,17 +5627,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5715,6 +5748,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5825,6 +5869,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -5946,6 +6001,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -5975,6 +6041,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6081,17 +6158,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6678,17 +6744,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6712,7 +6767,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7520,6 +7575,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7586,17 +7652,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7663,17 +7718,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -7950,7 +7994,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8268,6 +8312,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8290,17 +8345,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9662,18 +9706,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9717,7 +9750,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9749,6 +9782,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10119,17 +10163,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10284,17 +10317,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10362,18 +10384,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10570,17 +10581,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -10995,17 +10995,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11083,6 +11072,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11160,6 +11160,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11380,17 +11402,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -11904,6 +11915,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12212,6 +12234,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12366,17 +12399,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -12696,17 +12718,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -12839,17 +12850,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13202,17 +13202,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13224,17 +13213,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13312,6 +13290,50 @@ 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.ПояснениеКомментария @@ -13341,6 +13363,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -13711,6 +13744,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -13744,17 +13788,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -13876,17 +13909,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14092,17 +14114,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15258,17 +15269,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16288,6 +16288,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16497,17 +16508,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -16644,17 +16644,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -16898,17 +16887,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17085,17 +17063,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17152,7 +17119,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -17701,6 +17668,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -17764,7 +17742,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -17884,17 +17873,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18071,17 +18049,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights b/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights index 9f465aa66..e77c9ce26 100644 --- a/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights +++ b/SSL/src/Roles/РедактированиеРеквизитовОбъектов/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2115,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2456,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2720,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3193,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3293,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3721,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3787,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3941,6 +3908,94 @@ 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.РезультатОбновления @@ -4976,18 +5031,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5647,7 +5691,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5668,17 +5712,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5800,6 +5833,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5910,6 +5954,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6042,6 +6097,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6075,6 +6141,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6185,17 +6262,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6812,17 +6878,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6846,7 +6901,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7703,6 +7758,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7769,17 +7835,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7857,17 +7912,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8144,7 +8188,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8473,6 +8517,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8495,17 +8550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9904,18 +9948,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9959,7 +9992,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9991,6 +10024,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10376,17 +10420,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10552,17 +10585,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10630,18 +10652,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10849,17 +10860,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11322,17 +11322,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11421,6 +11410,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11498,6 +11498,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11729,17 +11751,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12268,6 +12279,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12576,6 +12598,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12730,17 +12763,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13071,17 +13093,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13214,17 +13225,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13577,17 +13577,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13610,17 +13599,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13698,6 +13676,50 @@ 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.ПояснениеКомментария @@ -13731,6 +13753,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14105,6 +14138,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14138,17 +14182,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14270,17 +14303,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14490,17 +14512,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15678,17 +15689,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16701,6 +16701,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16910,17 +16921,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17097,17 +17097,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17383,17 +17372,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17570,17 +17548,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17637,7 +17604,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18197,6 +18164,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18264,7 +18242,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18395,17 +18384,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18582,17 +18560,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/РежимВсеФункции/Rights.rights b/SSL/src/Roles/РежимВсеФункции/Rights.rights index 6f602424e..b57d27508 100644 --- a/SSL/src/Roles/РежимВсеФункции/Rights.rights +++ b/SSL/src/Roles/РежимВсеФункции/Rights.rights @@ -3,6 +3,237 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + Configuration.БиблиотекаСтандартныхПодсистем @@ -34,4 +265,125 @@ true + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/СохранениеДанныхПользователя/Rights.rights b/SSL/src/Roles/СохранениеДанныхПользователя/Rights.rights index 96302445d..e58f5bf2f 100644 --- a/SSL/src/Roles/СохранениеДанныхПользователя/Rights.rights +++ b/SSL/src/Roles/СохранениеДанныхПользователя/Rights.rights @@ -3,6 +3,237 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + Configuration.БиблиотекаСтандартныхПодсистем @@ -34,4 +265,125 @@ true + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/Rights.rights b/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/Rights.rights index 1890f446a..803f7bb0d 100644 --- a/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/Rights.rights +++ b/SSL/src/Roles/УдаленныйДоступБазоваяФункциональность/Rights.rights @@ -3,6 +3,171 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + WebService.InterfaceVersion.Operation.GetVersions @@ -10,4 +175,191 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights index a50c75746..878ccd189 100644 --- a/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights +++ b/SSL/src/Roles/УдаленныйДоступОбменДаннымиВМоделиСервиса/Rights.rights @@ -873,7 +873,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -884,7 +884,7 @@ - Catalog.КлассификаторВалют.Attribute.НаименованиеПолное + Catalog.УдалитьКлассификаторВалют.Attribute.НаименованиеПолное View false @@ -983,7 +983,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -2541,7 +2541,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -3013,17 +3013,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.РазделенныеРегламентныеЗадания.Resource.Использование @@ -3101,17 +3090,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -3860,17 +3838,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -4399,17 +4366,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -4521,7 +4477,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -5114,17 +5070,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -5180,6 +5125,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -5543,17 +5499,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ТолькоВидДоступа @@ -6709,18 +6654,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -6774,6 +6708,13 @@ false + + WebService.RemoteAdministrationOfExchange_2_0_1_6.Operation.Ping + + Use + true + + InformationRegister.ПравилаДляОбменаДанными.Resource.ИмяФайлаПравил @@ -7600,7 +7541,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Resource.Кратность + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Кратность View false @@ -7632,17 +7573,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город @@ -7654,17 +7584,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -8105,6 +8024,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -8292,6 +8222,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -8468,17 +8409,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -9227,17 +9157,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя @@ -9272,7 +9191,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -9392,17 +9311,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение - - View - false - - - Edit - false - - Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.Attribute.Комментарий @@ -10492,17 +10400,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -10591,17 +10488,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.УведомитьОДоставке @@ -10922,7 +10808,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -11504,17 +11390,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -13308,18 +13183,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -13363,7 +13227,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -13395,6 +13259,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -13857,17 +13732,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -14297,17 +14161,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - InformationRegister.НеразделенныеПользователи.StandardAttribute.Active @@ -14474,18 +14327,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -14715,17 +14557,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.РассылкиОтчетов.Attribute.Папка @@ -15265,17 +15096,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -15474,17 +15294,6 @@ false - - Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Используется - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -15706,7 +15515,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Predefined + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Predefined View false @@ -15717,7 +15526,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Ref + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Ref View false @@ -15728,7 +15537,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.DeletionMark + Catalog.УдалитьКлассификаторВалют.StandardAttribute.DeletionMark View false @@ -15739,7 +15548,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.IsFolder + Catalog.УдалитьКлассификаторВалют.StandardAttribute.IsFolder View false @@ -15750,7 +15559,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Owner + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Owner View false @@ -15761,7 +15570,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Parent + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Parent View false @@ -15772,7 +15581,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Description + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description View false @@ -15783,7 +15592,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Code + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Code View false @@ -15980,17 +15789,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -16168,7 +15966,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Active + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Active View false @@ -16179,7 +15977,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.LineNumber + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.LineNumber View false @@ -16190,7 +15988,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Recorder + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Recorder View false @@ -16201,7 +15999,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Period + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Period View false @@ -17230,17 +17028,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -17604,17 +17391,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -17780,17 +17556,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -18260,17 +18025,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -18403,17 +18157,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -19169,17 +18912,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -19323,17 +19055,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -19598,17 +19319,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -20457,7 +20167,7 @@ - Catalog.КлассификаторВалют.Attribute.ПараметрыПрописиНаРусском + Catalog.УдалитьКлассификаторВалют.Attribute.ПараметрыПрописиНаРусском View false @@ -21083,17 +20793,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -21183,7 +20882,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Resource.Курс + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Курс View false @@ -22602,7 +22301,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Dimension.Валюта + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Dimension.Валюта View false @@ -22678,17 +22377,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -22865,17 +22553,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолныйСиноним @@ -23206,17 +22883,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -23437,17 +23103,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Комментарий @@ -23526,7 +23181,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -24351,7 +24006,7 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -24526,17 +24181,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -24867,17 +24511,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights index daf0fc696..a30bda4cc 100644 --- a/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights +++ b/SSL/src/Roles/УдаленныйДоступОбменСообщениями/Rights.rights @@ -873,7 +873,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -884,7 +884,7 @@ - Catalog.КлассификаторВалют.Attribute.НаименованиеПолное + Catalog.УдалитьКлассификаторВалют.Attribute.НаименованиеПолное View false @@ -983,7 +983,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -2457,7 +2457,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2936,17 +2936,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.РазделенныеРегламентныеЗадания.Resource.Использование @@ -3024,17 +3013,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -3779,17 +3757,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -4303,17 +4270,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -4425,7 +4381,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -5025,17 +4981,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -5091,6 +5036,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -5454,17 +5410,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяВоВнешнемСоединении - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ТолькоВидДоступа @@ -6588,18 +6533,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -7464,7 +7398,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Resource.Кратность + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Кратность View false @@ -7496,17 +7430,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город @@ -7518,17 +7441,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -7976,6 +7888,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -8170,6 +8093,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -8346,17 +8280,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -9105,17 +9028,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.НастройкиТранспортаОбмена.Resource.WSИмяПользователя @@ -9150,7 +9062,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -9270,17 +9182,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ЗагрузкаДанныхВыполняетсяЧерезВнешнееСоединение - - View - false - - - Edit - false - - Catalog.НастройкиЗаполненияОбъектов1СДокументооборота.Attribute.Комментарий @@ -10337,17 +10238,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -10436,17 +10326,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - WebService.MessageExchange_2_0_1_6.Operation.GetIBParameters @@ -10763,7 +10642,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -11345,17 +11224,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -13102,18 +12970,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -13157,7 +13014,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -13189,6 +13046,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -13640,17 +13508,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -14036,17 +13893,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - InformationRegister.НеразделенныеПользователи.StandardAttribute.Active @@ -14213,18 +14059,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -14454,17 +14289,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.РассылкиОтчетов.Attribute.Папка @@ -15004,17 +14828,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -15202,17 +15015,6 @@ false - - Catalog.ИдентификаторыОбъектовМетаданных.Attribute.Используется - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -15434,7 +15236,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Predefined + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Predefined View false @@ -15445,7 +15247,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Ref + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Ref View false @@ -15456,7 +15258,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.DeletionMark + Catalog.УдалитьКлассификаторВалют.StandardAttribute.DeletionMark View false @@ -15467,7 +15269,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.IsFolder + Catalog.УдалитьКлассификаторВалют.StandardAttribute.IsFolder View false @@ -15478,7 +15280,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Owner + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Owner View false @@ -15489,7 +15291,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Parent + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Parent View false @@ -15500,7 +15302,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Description + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Description View false @@ -15511,7 +15313,7 @@ - Catalog.КлассификаторВалют.StandardAttribute.Code + Catalog.УдалитьКлассификаторВалют.StandardAttribute.Code View false @@ -15697,17 +15499,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -15892,7 +15683,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Active + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Active View false @@ -15903,7 +15694,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.LineNumber + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.LineNumber View false @@ -15914,7 +15705,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Recorder + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Recorder View false @@ -15925,7 +15716,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.StandardAttribute.Period + InformationRegister.УдалитьКурсыВалютПоКлассификатору.StandardAttribute.Period View false @@ -16914,17 +16705,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -17288,17 +17068,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -17464,17 +17233,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -17944,17 +17702,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -18076,17 +17823,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -18813,17 +18549,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -18974,17 +18699,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -19245,17 +18959,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -20093,7 +19796,7 @@ - Catalog.КлассификаторВалют.Attribute.ПараметрыПрописиНаРусском + Catalog.УдалитьКлассификаторВалют.Attribute.ПараметрыПрописиНаРусском View false @@ -20719,17 +20422,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -20819,7 +20511,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Resource.Курс + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Resource.Курс View false @@ -22183,7 +21875,7 @@ - InformationRegister.КурсыВалютПоКлассификатору.Dimension.Валюта + InformationRegister.УдалитьКурсыВалютПоКлассификатору.Dimension.Валюта View false @@ -22248,17 +21940,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -22435,17 +22116,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - Catalog.ИдентификаторыОбъектовМетаданных.Attribute.ПолныйСиноним @@ -22783,17 +22453,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -23003,17 +22662,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -23081,7 +22729,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -23575,6 +23223,13 @@ false + + WebService.MessageExchange_2_0_1_6.Operation.Ping + + Use + true + + Catalog.РассылкиОтчетов.Attribute.ИспользоватьПапку @@ -23873,7 +23528,7 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -24048,17 +23703,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -24378,17 +24022,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/Rights.rights b/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/Rights.rights deleted file mode 100644 index 879741858..000000000 --- a/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/Rights.rights +++ /dev/null @@ -1,6 +0,0 @@ - - - false - false - false - diff --git a/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/УдалитьПолныеПраваОбластиДанных.mdo b/SSL/src/Roles/УдалитьПолныеПраваОбластиДанных/УдалитьПолныеПраваОбластиДанных.mdo deleted file mode 100644 index fcd882882..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 b2bc05f19..7ae8f9949 100644 --- a/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights +++ b/SSL/src/Roles/ЧтениеБазовойНСИ/Rights.rights @@ -3,6 +3,13 @@ false true false + + InformationRegister.АдресныйКлассификатор.Command.АдресныйКлассификатор + + View + true + + CommonForm.ВводТелефона @@ -82,6 +89,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты @@ -108,6 +126,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + CommonForm.ПраваДоступаУпрощенно @@ -137,6 +166,94 @@ true + + 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.АдресныеСокращения @@ -159,6 +276,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Город @@ -181,6 +309,50 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.Пользователи @@ -214,6 +386,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.ВидыДокументовФизическихЛиц @@ -229,6 +412,17 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + CommonForm.ПраваДоступа @@ -321,6 +515,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.СоставыГруппПользователей @@ -335,6 +540,39 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + Report.ПраваДоступа @@ -361,6 +599,17 @@ true + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + InformationRegister.ВерсииОбъектовАдресногоКлассификатора @@ -383,6 +632,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ЗначенияСвойствОбъектов @@ -409,6 +669,61 @@ true + + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.Организации.StandardAttribute.Predefined @@ -497,6 +812,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + ChartOfCharacteristicTypes.ВидыДоступа @@ -515,6 +841,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + Catalog.Организации.TabularSection.КонтактнаяИнформация.Attribute.Страна @@ -548,6 +885,28 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + ПоЗначениям // ПоЗначениям ( Таблица, Право, Модификатор, В1,П1, В2,Р2, ..., В(n), П(n)). diff --git a/SSL/src/Roles/ЧтениеВариантовОтчетов/Rights.rights b/SSL/src/Roles/ЧтениеВариантовОтчетов/Rights.rights deleted file mode 100644 index 51665005f..000000000 --- a/SSL/src/Roles/ЧтениеВариантовОтчетов/Rights.rights +++ /dev/null @@ -1,175 +0,0 @@ - - - false - true - false - - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название - - 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 - - - - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.КлючВарианта - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Описание - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь - - Edit - false - - - - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений - - Edit - false - - - diff --git a/SSL/src/Roles/ЧтениеВерсийОбъектов/Rights.rights b/SSL/src/Roles/ЧтениеВерсийОбъектов/Rights.rights index c7e0189d0..90b4d986e 100644 --- a/SSL/src/Roles/ЧтениеВерсийОбъектов/Rights.rights +++ b/SSL/src/Roles/ЧтениеВерсийОбъектов/Rights.rights @@ -10,6 +10,28 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + CommonCommand.ИсторияИзменений @@ -17,6 +39,149 @@ true + + 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 + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + InformationRegister.НастройкиВерсионированияОбъектов.Dimension.ТипОбъекта @@ -72,6 +237,28 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Вариант @@ -83,6 +270,138 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -94,4 +413,37 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ЧтениеВнешнихПользователей/Rights.rights b/SSL/src/Roles/ЧтениеВнешнихПользователей/Rights.rights index ed24fe20f..4dad14cb2 100644 --- a/SSL/src/Roles/ЧтениеВнешнихПользователей/Rights.rights +++ b/SSL/src/Roles/ЧтениеВнешнихПользователей/Rights.rights @@ -3,6 +3,116 @@ false true false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Predefined + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Ref + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.DeletionMark + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.IsFolder + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Owner + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Parent + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Description + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.StandardAttribute.Code + + View + false + + + Edit + false + + Catalog.ВнешниеПользователи.Command.ВнешнийДоступ @@ -10,6 +120,94 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + InformationRegister.СоставыГруппПользователей @@ -32,6 +230,127 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ГруппыВнешнихПользователей @@ -47,4 +366,37 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + diff --git a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights index 058e97c51..e25dae277 100644 --- a/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights +++ b/SSL/src/Roles/ЧтениеДополнительныхСведений/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2115,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2456,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2720,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3193,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3293,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3721,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3787,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3941,6 +3908,94 @@ 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.РезультатОбновления @@ -4976,18 +5031,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5647,7 +5691,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5668,17 +5712,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5800,6 +5833,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5910,6 +5954,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6042,6 +6097,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6075,6 +6141,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6185,17 +6262,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6812,17 +6878,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6846,7 +6901,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7703,6 +7758,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7769,17 +7835,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7857,17 +7912,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8144,7 +8188,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8473,6 +8517,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8495,17 +8550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9900,18 +9944,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9955,7 +9988,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9987,6 +10020,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10372,17 +10416,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10548,17 +10581,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10626,18 +10648,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10845,17 +10856,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11296,6 +11296,13 @@ false + + CommonCommand.ДополнительныеСведенияПанельНавигации + + View + true + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ПарольАрхиваСообщенияОбмена @@ -11318,17 +11325,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11417,6 +11413,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11494,6 +11501,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11725,17 +11754,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12264,6 +12282,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12572,6 +12601,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12726,17 +12766,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13063,17 +13092,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13206,17 +13224,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13569,17 +13576,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13602,17 +13598,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13690,6 +13675,50 @@ 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.ПояснениеКомментария @@ -13723,6 +13752,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14097,6 +14137,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14130,17 +14181,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14186,7 +14226,7 @@ - CommonCommand.ДополнительныеСведения + CommonCommand.ДополнительныеСведенияКоманднаяПанель View true @@ -14269,17 +14309,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14489,17 +14518,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15673,17 +15691,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16696,6 +16703,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16905,17 +16923,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17092,17 +17099,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17378,17 +17374,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17565,17 +17550,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17632,7 +17606,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18192,6 +18166,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18215,7 +18200,7 @@ - CommonForm.РедактированиеЗначенийСвойств + CommonForm.РедактированиеДополнительныхСведений View true @@ -18266,7 +18251,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18397,17 +18393,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18584,17 +18569,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights index 091fd656b..dd0bb2f83 100644 --- a/SSL/src/Roles/ЧтениеЗаданий/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗаданий/Rights.rights @@ -32,6 +32,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + SessionParameter.ТекущийПользователь @@ -50,6 +61,105 @@ true + + 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 + + Task.ЗадачаИсполнителя @@ -76,6 +186,61 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + CommonCommand.ЗадачиПоБизнесПроцессу @@ -83,6 +248,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Task.ЗадачаИсполнителя.Command.ВсеЗадачи @@ -90,6 +266,149 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + 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 + + + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Task.ЗадачаИсполнителя.Command.МоиЗадачи @@ -139,6 +458,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + Report.Задачи @@ -150,6 +480,28 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). diff --git a/SSL/src/Roles/ЧтениеЗадач/Rights.rights b/SSL/src/Roles/ЧтениеЗадач/Rights.rights index 794f2ee44..6af1dfed9 100644 --- a/SSL/src/Roles/ЧтениеЗадач/Rights.rights +++ b/SSL/src/Roles/ЧтениеЗадач/Rights.rights @@ -10,6 +10,17 @@ true + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + SessionParameter.ТекущийПользователь @@ -28,6 +39,105 @@ true + + 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 + + Task.ЗадачаИсполнителя @@ -80,6 +190,72 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Task.ЗадачаИсполнителя.Command.ВсеЗадачи @@ -87,6 +263,28 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + CommonCommand.ЗадачиПоПредмету @@ -94,6 +292,61 @@ true + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + ChartOfCharacteristicTypes.ОбъектыАдресацииЗадач @@ -109,6 +362,72 @@ true + + 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.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Task.ЗадачаИсполнителя.Command.МоиЗадачи @@ -123,6 +442,17 @@ true + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + Report.Задачи @@ -134,6 +464,28 @@ true + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + ПоЗначениямИНаборамРасширенный // ПоЗначениямИНаборамРасширенный ( Таблица, Право, Модификатор, ПрисоединяемыеТаблицы, О, В1,П1,О1, В2,П2,О2,..., В(n), П(n), О(n)). diff --git a/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights b/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights index 62b8d0ca1..bddaa87af 100644 --- a/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights +++ b/SSL/src/Roles/ЧтениеОтветовНаВопросыАнкет/Rights.rights @@ -577,7 +577,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -610,7 +610,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1687,7 +1687,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2015,17 +2015,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2048,17 +2037,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2381,6 +2359,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2645,17 +2634,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3110,17 +3088,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3210,7 +3177,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3626,17 +3593,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3692,6 +3648,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3838,6 +3805,94 @@ 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.РезультатОбновления @@ -4839,18 +4894,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5502,7 +5546,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5523,17 +5567,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5655,6 +5688,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5765,6 +5809,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -5897,6 +5952,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -5930,6 +5996,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6032,17 +6109,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6659,17 +6725,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6693,7 +6748,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7534,6 +7589,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7600,17 +7666,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7688,17 +7743,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -7975,7 +8019,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8300,6 +8344,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8322,17 +8377,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9702,18 +9746,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9757,7 +9790,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9789,6 +9822,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10166,17 +10210,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10338,17 +10371,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10416,18 +10438,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10635,17 +10646,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11104,17 +11104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11203,6 +11192,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11280,6 +11280,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11503,17 +11525,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12042,6 +12053,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12346,6 +12368,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12496,17 +12529,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -12833,17 +12855,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -12972,17 +12983,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13346,17 +13346,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13379,17 +13368,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13467,6 +13445,50 @@ 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.ПояснениеКомментария @@ -13496,6 +13518,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -13870,6 +13903,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -13903,17 +13947,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14035,17 +14068,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14247,17 +14269,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15411,17 +15422,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16397,6 +16397,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16617,17 +16628,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -16804,17 +16804,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17090,17 +17079,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17277,17 +17255,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17340,7 +17307,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -17892,6 +17859,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -17955,7 +17933,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18082,17 +18071,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18269,17 +18247,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights b/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights index 7846ec122..8f8d7396b 100644 --- a/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights +++ b/SSL/src/Roles/ЧтениеПерсональныхДанныхФизическихЛиц/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1738,7 +1738,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2078,17 +2078,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2111,17 +2100,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2447,6 +2425,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2711,17 +2700,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3180,17 +3158,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3280,7 +3247,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3708,17 +3675,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3770,6 +3726,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3907,6 +3874,94 @@ 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.РезультатОбновления @@ -4938,18 +4993,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5612,7 +5656,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5633,17 +5677,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5765,6 +5798,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5875,6 +5919,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6003,6 +6058,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6036,6 +6102,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6146,17 +6223,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6773,17 +6839,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6807,7 +6862,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7660,6 +7715,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7726,17 +7792,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7814,17 +7869,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8097,7 +8141,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8422,6 +8466,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8444,17 +8499,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9853,18 +9897,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9908,7 +9941,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9940,6 +9973,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10325,17 +10369,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10501,17 +10534,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10579,18 +10601,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10798,17 +10809,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11271,17 +11271,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11370,6 +11359,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11447,6 +11447,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11678,17 +11700,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12213,6 +12224,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12521,6 +12543,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12675,17 +12708,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13016,17 +13038,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13159,17 +13170,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13518,17 +13518,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13551,17 +13540,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13639,6 +13617,50 @@ 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.ПояснениеКомментария @@ -13672,6 +13694,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14042,6 +14075,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14075,17 +14119,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14207,17 +14240,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14427,17 +14449,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15615,17 +15626,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16634,6 +16634,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16843,17 +16854,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17030,17 +17030,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17316,17 +17305,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17503,17 +17481,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17570,7 +17537,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18130,6 +18097,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18197,7 +18175,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18328,17 +18317,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18515,17 +18493,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights b/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights index ebb24e3bd..690a3ea63 100644 --- a/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights +++ b/SSL/src/Roles/ЧтениеФизическихЛиц/Rights.rights @@ -598,7 +598,7 @@ - Catalog.ВариантыОтчетов.Attribute.КлючОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьКлючОбъекта View false @@ -631,7 +631,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Название + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьНазвание View false @@ -1742,7 +1742,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Предопределенная + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.Предопределенная View false @@ -2082,17 +2082,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбработанныхОбъектовДляОбновленияСтатуса - - View - false - - - Edit - false - - InformationRegister.ИсполнителиЗадач.Dimension.ОсновнойОбъектАдресации @@ -2115,17 +2104,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилОчистки - - View - false - - - Edit - false - - Catalog.ШаблоныАнкет.Attribute.Заключение @@ -2456,6 +2434,17 @@ false + + InformationRegister.ЗамерыВремени.Attribute.ИмяПользователя + + View + false + + + Edit + false + + Catalog.Валюты.StandardAttribute.Predefined @@ -2720,17 +2709,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиВыгрузки - - View - false - - - Edit - false - - Task.ЗадачаИсполнителя.Attribute.ДатаНачала @@ -3193,17 +3171,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ДописыватьДанныеВПротоколОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.ДатаОкончания @@ -3293,7 +3260,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы.Attribute.Подсистема + Catalog.ВариантыОтчетов.TabularSection.Размещение.Attribute.УдалитьПодсистема View false @@ -3721,17 +3688,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИспользоватьТранзакции - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоВходящее.Attribute.Размер @@ -3787,6 +3743,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачалаПроверка + + View + false + + + Edit + false + + Catalog.СценарииОбменовДанными.TabularSection.НастройкиОбмена @@ -3924,6 +3891,94 @@ 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.РезультатОбновления @@ -4959,18 +5014,7 @@ - Catalog.ВариантыОтчетов.TabularSection.Подсистемы - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаДанных + Catalog.ВариантыОтчетов.TabularSection.Размещение View false @@ -5630,7 +5674,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПротоколаОбмена + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.КлючеваяОперация View false @@ -5651,17 +5695,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаПравилОбмена - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ВариантРаботыМастера @@ -5783,6 +5816,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаОкончания + + View + false + + + Edit + false + + InformationRegister.НастройкиТранспортаОбмена.Resource.ВидТранспортаСообщенийОбменаПоУмолчанию @@ -5893,6 +5937,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонца + + View + false + + + Edit + false + + DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.ИсточникПоле5 @@ -6025,6 +6080,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяНачала + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.Автор @@ -6058,6 +6124,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.КлючеваяОперация + + View + false + + + Edit + false + + Catalog.ВерсииФайлов.Attribute.ТипХраненияФайла @@ -6168,17 +6245,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.СохраненныеНастройки - - View - false - - - Edit - false - - DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ЭтоНастройкаРаспределеннойИнформационнойБазы @@ -6795,17 +6861,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КоличествоОбъектовНаТранзакцию - - View - false - - - Edit - false - - InformationRegister.ВерсииОбъектов.Attribute.АвторВерсии @@ -6829,7 +6884,7 @@ - Catalog.ВариантыОтчетов.Attribute.БыстрыйДоступ + Catalog.ВариантыОтчетов.Attribute.ВидимостьПоУмолчанию View false @@ -7686,6 +7741,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Шаг + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ПортSMTP @@ -7752,17 +7818,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилКонвертации - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.Attribute.Размер @@ -7840,17 +7895,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаНастройкиПараметров - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Отпечаток @@ -8127,7 +8171,7 @@ - Catalog.ВариантыОтчетов.Attribute.ТипВариантаОтчета + Catalog.ВариантыОтчетов.Attribute.ТипОтчета View false @@ -8456,6 +8500,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.Приоритет + + View + false + + + Edit + false + + Document.ТелефонныйЗвонок.TabularSection.НаборыЗначенийДоступа.Attribute.Добавление @@ -8478,17 +8533,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриВыгрузкеДанных - - View - false - - - Edit - false - - Document.ЭлектронноеПисьмоИсходящее.Attribute.ИдентификаторОснования @@ -9887,18 +9931,7 @@ - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.НеВыгружатьОбъектыПоСсылкам - - View - false - - - Edit - false - - - - Catalog.ВариантыОтчетов.Attribute.Администратор + Catalog.ВариантыОтчетов.Attribute.Автор View false @@ -9942,7 +9975,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа.Attribute.Пользователь + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа.Attribute.Пользователь View false @@ -9974,6 +10007,17 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяКонцаПроверка + + View + false + + + Edit + false + + DataProcessor.ОбновлениеКонфигурации.Attribute.ЗапомнитьПарольСервераОбновлений @@ -10359,17 +10403,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ТаблицаПравилВыгрузки - - View - false - - - Edit - false - - Catalog.ВопросыШаблонаАнкеты.Attribute.Заметки @@ -10535,17 +10568,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ВыполнятьОбменВРежимеОтладки - - View - false - - - Edit - false - - DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.КоличествоОбъектовСопоставленных @@ -10613,18 +10635,7 @@ - Catalog.ВариантыОтчетов.TabularSection.ИсключенияБыстрогоДоступа - - View - false - - - Edit - false - - - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляОбмена + Catalog.ВариантыОтчетов.TabularSection.УдалитьИсключенияБыстрогоДоступа View false @@ -10832,17 +10843,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколИнформационныхСообщений - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.Комментарий @@ -11305,17 +11305,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.КомментарийПриЗагрузкеДанных - - View - false - - - Edit - false - - Catalog.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы.Attribute.ТекстХранилище @@ -11404,6 +11393,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.УникальныйИдентификатор + + View + false + + + Edit + false + + DataProcessor.ПомощникИнтерактивногоОбменаДанными.TabularSection.ИнформацияСтатистики.Attribute.ТипОбъектаСтрокой @@ -11481,6 +11481,28 @@ false + + InformationRegister.ЗамерыВремени.Resource.ВремяВыполнения + + View + false + + + Edit + false + + + + Catalog.КлючевыеОперации.Attribute.МинимальноДопустимыйУровень + + View + false + + + Edit + false + + InformationRegister.ФайлыВРабочемКаталоге.Dimension.Версия @@ -11712,17 +11734,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВОкноСообщенийИнформационныхСообщений - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.Attribute.ПоляТаблицыПриемника @@ -12251,6 +12262,17 @@ false + + Catalog.КлючевыеОперации.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.ВПредставлениеВключатьИмяПользователя @@ -12559,6 +12581,17 @@ false + + Catalog.КлючевыеОперации.Attribute.Приоритет + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.СертификатыШифрования @@ -12713,17 +12746,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимОбмена - - View - false - - - Edit - false - - DataProcessor.ТранспортСообщенийОбменаEMAIL.Attribute.EMAILМаксимальныйДопустимыйРазмерСообщения @@ -13054,17 +13076,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелОбменаЗагрузкаФоновыхДанных - - View - false - - - Edit - false - - Document.Встреча.TabularSection.НаборыЗначенийДоступа.Attribute.ЗначениеДоступа @@ -13197,17 +13208,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ФлагРежимОтладки - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.TabularSection.ДоступныеОбновления.Attribute.Версия4Разряд @@ -13560,17 +13560,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОбработкиНастройкиЗагрузки - - View - false - - - Edit - false - - Catalog.НаборыДополнительныхРеквизитовИСведений.TabularSection.ДополнительныеРеквизиты @@ -13593,17 +13582,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяПланаОбменаВРО - - View - false - - - Edit - false - - Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.ИмяФайлаПодписи @@ -13681,6 +13659,50 @@ 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.ПояснениеКомментария @@ -13714,6 +13736,17 @@ false + + InformationRegister.ЗамерыВремени.Dimension.ДатаЗамера + + View + false + + + Edit + false + + Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаМодификацииУниверсальная @@ -14088,6 +14121,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.Диаграмма + + View + false + + + Edit + false + + Catalog.ВстречаПрисоединенныеФайлы.TabularSection.ЭлектронныеЦифровыеПодписи.Attribute.КомуВыданСертификат @@ -14121,17 +14165,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.УзелДляФоновогоОбмена - - View - false - - - Edit - false - - Catalog.ТелефонныйЗвонокПрисоединенныеФайлы.Attribute.ДатаСоздания @@ -14253,17 +14286,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ПостроительОтчета - - View - false - - - Edit - false - - Catalog.РолиИсполнителей.Attribute.ИспользуетсяСОбъектамиАдресации @@ -14473,17 +14495,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыгружатьТолькоРазрешенные - - View - false - - - Edit - false - - InformationRegister.НастройкиВерсионированияОбъектов.Resource.Использовать @@ -15661,17 +15672,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.РежимЗагрузкиДанных - - View - false - - - Edit - false - - DataProcessor.ГрупповоеИзменениеОбъектов.TabularSection.Операции.Attribute.ДопустимыеТипы @@ -16684,6 +16684,17 @@ false + + DataProcessor.ОценкаПроизводительности.Attribute.ДатаНачала + + View + false + + + Edit + false + + DataProcessor.ПомощникСозданияОбменаДанными.Attribute.ИспользоватьПараметрыТранспортаFTP @@ -16893,17 +16904,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ВыводВПротоколСообщенийОбОшибках - - View - false - - - Edit - false - - InformationRegister.ЗначенияГруппДоступа.Dimension.ЗначениеДоступа @@ -17080,17 +17080,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.Параметры - - View - false - - - Edit - false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ИмяАдминистратораИБ @@ -17366,17 +17355,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ОптимизированнаяЗаписьОбъектов - - View - false - - - Edit - false - - Catalog.УчетныеЗаписиЭлектроннойПочты.Attribute.Пользователь @@ -17553,17 +17531,6 @@ false - - DataProcessor.КонвертацияОбъектовИнформационныхБаз.Attribute.ИмяФайлаОбмена - - View - false - - - Edit - false - - DataProcessor.УниверсальныйОбменДаннымиXML.Attribute.НастройкаАвтоматическойЗагрузкиДанных @@ -17620,7 +17587,7 @@ - Catalog.ВариантыОтчетов.Attribute.ПредставлениеОбъекта + Catalog.ВариантыОтчетов.Attribute.УдалитьПредставлениеОбъекта View false @@ -18180,6 +18147,17 @@ false + + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность + + View + false + + + Edit + false + + InformationRegister.АдресныйКлассификатор.Dimension.КодРайонаВКоде @@ -18247,7 +18225,18 @@ - Catalog.ВариантыОтчетов.Attribute.ХранилищеЗначений + DataProcessor.ОценкаПроизводительности.TabularSection.Производительность.Attribute.ЦелевоеВремя + + View + false + + + Edit + false + + + + Catalog.ВариантыОтчетов.Attribute.Настройки View false @@ -18378,17 +18367,6 @@ false - - DataProcessor.ОбновлениеКонфигурации.Attribute.ПарольАдминистратораИБПроверка - - View - false - - - Edit - false - - Catalog.ГруппыДоступа.Attribute.ТипПользователей @@ -18565,17 +18543,6 @@ false - - InformationRegister.НастройкиТранспортаОбмена.Resource.ИмяФайлаПротоколаОбмена - - View - false - - - Edit - false - - DataProcessor.СопоставлениеОбъектовИнформационныхБаз.TabularSection.ТаблицаАвтоматическиСопоставленныхОбъектов.Attribute.УникальныйИдентификаторИсточника diff --git a/SSL/src/ScheduledJobs/ЗагрузкаКурсовВалют/Schedule.schedule b/SSL/src/ScheduledJobs/ЗагрузкаКурсовВалют/Schedule.schedule index db5dafdc8..8a6bad146 100644 --- a/SSL/src/ScheduledJobs/ЗагрузкаКурсовВалют/Schedule.schedule +++ b/SSL/src/ScheduledJobs/ЗагрузкаКурсовВалют/Schedule.schedule @@ -1,5 +1,5 @@ - + Mon Tue Wed diff --git a/SSL/src/ScheduledJobs/ЗаполнениеДанныхДляОграниченияДоступа/ЗаполнениеДанныхДляОграниченияДоступа.mdo b/SSL/src/ScheduledJobs/ЗаполнениеДанныхДляОграниченияДоступа/ЗаполнениеДанныхДляОграниченияДоступа.mdo index bbcc4369a..b957ab56f 100644 --- a/SSL/src/ScheduledJobs/ЗаполнениеДанныхДляОграниченияДоступа/ЗаполнениеДанныхДляОграниченияДоступа.mdo +++ b/SSL/src/ScheduledJobs/ЗаполнениеДанныхДляОграниченияДоступа/ЗаполнениеДанныхДляОграниченияДоступа.mdo @@ -5,7 +5,7 @@ ru Заполнение данных для ограничения доступа - CommonModule.УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания + CommonModule.УправлениеДоступомСлужебный.ЗаполнениеДанныхДляОграниченияДоступаОбработчикЗадания Заполнение данных для ограничения доступа true 3 diff --git a/SSL/src/ScheduledJobs/ИзвлечениеТекста/ИзвлечениеТекста.mdo b/SSL/src/ScheduledJobs/ИзвлечениеТекста/ИзвлечениеТекста.mdo index c0ed4134a..4d46cbf11 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 deleted file mode 100644 index 0a74483f4..000000000 --- a/SSL/src/ScheduledJobs/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo +++ /dev/null @@ -1,14 +0,0 @@ - - - КонтрольЖурналаРегистрации - - ru - Контроль журнала регистрации - - CommonModule.КонтрольЖурналаРегистрацииСлужебный.ОбработкаРегламентногоЗадания_КонтрольОшибокВЖурналеРегистрации - Контроль журнала регистрации - true - true - 3 - 10 - diff --git a/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/ПланированиеОбработкиЗаданий.mdo b/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/ПланированиеОбработкиЗаданий.mdo index 3ed5e72f7..8dafcf377 100644 --- a/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/ПланированиеОбработкиЗаданий.mdo +++ b/SSL/src/ScheduledJobs/ПланированиеОбработкиЗаданий/ПланированиеОбработкиЗаданий.mdo @@ -7,6 +7,7 @@ CommonModule.ОчередьЗаданий.ПланированиеОбработкиЗаданий Планирование обработки заданий + 1 true 3 10 diff --git a/SSL/src/ScheduledJobs/СинхронизацияДанныхСПриложениемВИнтернете/Schedule.schedule b/SSL/src/ScheduledJobs/СинхронизацияДанныхСПриложениемВИнтернете/Schedule.schedule new file mode 100644 index 000000000..541280214 --- /dev/null +++ b/SSL/src/ScheduledJobs/СинхронизацияДанныхСПриложениемВИнтернете/Schedule.schedule @@ -0,0 +1,22 @@ + + + Mon + Tue + Wed + Thu + Fri + Sat + Sun + Jan + Feb + Mar + Apr + May + Jun + Jul + Aug + Sep + Oct + Nov + Dec + diff --git a/SSL/src/ScheduledJobs/СинхронизацияДанныхСПриложениемВИнтернете/СинхронизацияДанныхСПриложениемВИнтернете.mdo b/SSL/src/ScheduledJobs/СинхронизацияДанныхСПриложениемВИнтернете/СинхронизацияДанныхСПриложениемВИнтернете.mdo new file mode 100644 index 000000000..7a75cb3e5 --- /dev/null +++ b/SSL/src/ScheduledJobs/СинхронизацияДанныхСПриложениемВИнтернете/СинхронизацияДанныхСПриложениемВИнтернете.mdo @@ -0,0 +1,15 @@ + + + СинхронизацияДанныхСПриложениемВИнтернете + + ru + Синхронизация данных с приложением в Интернете + + Используется для синхронизации данных автономного рабочего места с приложением в Интернете + CommonModule.АвтономнаяРаботаСлужебный.СинхронизироватьДанныеСПриложениемВИнтернете + Синхронизация данных с приложением в Интернете + 1 + true + 3 + 10 + diff --git a/SSL/src/ScheduledJobs/КонтрольЖурналаРегистрации/Schedule.schedule b/SSL/src/ScheduledJobs/УдалениеНеактуальныхСообщенийОбмена/Schedule.schedule similarity index 74% rename from SSL/src/ScheduledJobs/КонтрольЖурналаРегистрации/Schedule.schedule rename to SSL/src/ScheduledJobs/УдалениеНеактуальныхСообщенийОбмена/Schedule.schedule index 06bd33233..41f11237a 100644 --- a/SSL/src/ScheduledJobs/КонтрольЖурналаРегистрации/Schedule.schedule +++ b/SSL/src/ScheduledJobs/УдалениеНеактуальныхСообщенийОбмена/Schedule.schedule @@ -1,5 +1,5 @@ - + Mon Tue Wed @@ -19,6 +19,4 @@ Oct Nov Dec - - diff --git a/SSL/src/ScheduledJobs/УдалениеНеактуальныхСообщенийОбмена/УдалениеНеактуальныхСообщенийОбмена.mdo b/SSL/src/ScheduledJobs/УдалениеНеактуальныхСообщенийОбмена/УдалениеНеактуальныхСообщенийОбмена.mdo new file mode 100644 index 000000000..16375a88c --- /dev/null +++ b/SSL/src/ScheduledJobs/УдалениеНеактуальныхСообщенийОбмена/УдалениеНеактуальныхСообщенийОбмена.mdo @@ -0,0 +1,15 @@ + + + УдалениеНеактуальныхСообщенийОбмена + + ru + Удаление неактуальных сообщений обмена + + Выполняет удаление файлов сообщений обмена, которые не были удалены из-за сбоев в работе системы. Удалению подлежат файлы с датой размещения более суток. + CommonModule.ОбменДаннымиСервер.УдалитьНеактуальныеСообщенияОбмена + Удаление неактуальных сообщений обмена + true + true + 3 + 10 + diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form index d890023ee..932569048 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Form.form @@ -1,11 +1,7 @@ - - <key>ru</key> - <value>Выбор варианта отчета</value> - - СписокВариантовОтчета + ДеревоВариантовОтчета 1 true true @@ -13,39 +9,32 @@ true - СписокВариантовОтчета + ДеревоВариантовОтчета - false None Add Copy - CopyToClipboard Delete EndEdit + HierarchicalList + List MoveDown MoveUp - OutputList - SelectAll - SortListAsc - SortListDesc + Tree - Наименование + ДеревоВариантовОтчетаПредставление 4 - - <key>ru</key> - <value>Название</value> - true true true - СписокВариантовОтчета.Наименование + ДеревоВариантовОтчета.Наименование - НаименованиеРасширеннаяПодсказка - 37 + ДеревоВариантовОтчетаПредставлениеРасширеннаяПодсказка + 26 Label true true @@ -54,56 +43,11 @@ - НаименованиеКонтекстноеМеню + ДеревоВариантовОтчетаПредставлениеКонтекстноеМеню 5 true InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - Автор - 11 - - <key>ru</key> - <value>Автор</value> - - true - true - - true - - - СписокВариантовОтчета.Автор - - - АвторРасширеннаяПодсказка - 39 - Label - true - true - - Left - - - - АвторКонтекстноеМеню - 12 - true - - InputField Auto true Left @@ -114,26 +58,45 @@ true true true - true Normal None - СписокВариантовОтчетаКоманднаяПанель + ДеревоВариантовОтчетаКоманднаяПанель 3 Left + + ValueChoice + ДеревоВариантовОтчетаВыборЗначения + Selection - СписокВариантовОтчетаВыбор + ДеревоВариантовОтчетаВыбор + + + BeforeAddRow + ДеревоВариантовОтчетаПередНачаломДобавления + + + BeforeDeleteRow + ДеревоВариантовОтчетаПередУдалением + + + OnActivateRow + ДеревоВариантовОтчетаПриАктивизацииСтроки + + + BeforeRowChange + ДеревоВариантовОтчетаПередНачаломИзменения - СписокВариантовОтчетаСтрокаПоиска - 28 + ДеревоВариантовОтчетаСтрокаПоиска + 17 - СписокВариантовОтчетаСтрокаПоискаРасширеннаяПодсказка - 30 + ДеревоВариантовОтчетаСтрокаПоискаРасширеннаяПодсказка + 19 Label true true @@ -142,21 +105,21 @@ - СписокВариантовОтчетаСтрокаПоискаКонтекстноеМеню - 29 + ДеревоВариантовОтчетаСтрокаПоискаКонтекстноеМеню + 18 true - СписокВариантовОтчета + ДеревоВариантовОтчета true - СписокВариантовОтчетаСостояниеПросмотра - 31 + ДеревоВариантовОтчетаСостояниеПросмотра + 20 - СписокВариантовОтчетаСостояниеПросмотраРасширеннаяПодсказка - 33 + ДеревоВариантовОтчетаСостояниеПросмотраРасширеннаяПодсказка + 22 Label true true @@ -165,22 +128,22 @@ - СписокВариантовОтчетаСостояниеПросмотраКонтекстноеМеню - 32 + ДеревоВариантовОтчетаСостояниеПросмотраКонтекстноеМеню + 21 true ViewStatusAddition - СписокВариантовОтчета + ДеревоВариантовОтчета true - СписокВариантовОтчетаУправлениеПоиском - 34 + ДеревоВариантовОтчетаУправлениеПоиском + 23 - СписокВариантовОтчетаУправлениеПоискомРасширеннаяПодсказка - 36 + ДеревоВариантовОтчетаУправлениеПоискомРасширеннаяПодсказка + 25 Label true true @@ -189,19 +152,19 @@ - СписокВариантовОтчетаУправлениеПоискомКонтекстноеМеню - 35 + ДеревоВариантовОтчетаУправлениеПоискомКонтекстноеМеню + 24 true SearchControlAddition - СписокВариантовОтчета + ДеревоВариантовОтчета true - СписокВариантовОтчетаРасширеннаяПодсказка - 27 + ДеревоВариантовОтчетаРасширеннаяПодсказка + 16 Label true true @@ -210,22 +173,24 @@ - СписокВариантовОтчетаКонтекстноеМеню + ДеревоВариантовОтчетаКонтекстноеМеню 2 true - true + Tree + true + true true true true - MultiRow -
                true
                + true 1 1 AutoUse AutoUse true true + false false false true @@ -234,108 +199,34 @@ ExpandAllLevels true true + true + true + + ДеревоВариантовОтчета.ИндексКартинки + + + CommonPicture.КоллекцияПиктограммЭлементов + None None None true -
                - - ГруппаОписание - 20 - - КартинкаИнфо - 18 - - <key>ru</key> - <value>Картинка инфо</value> - - true - true - - true - - - КартинкаИнфоРасширеннаяПодсказка - 50 - Label - true - true - - Left - - - - КартинкаИнфоКонтекстноеМеню - 19 - true - - 2 - true - 1 - true - - - CommonPicture.Информация - - - - - Описание - 16 - true - true - - true - - - Items.СписокВариантовОтчета.CurrentData.Описание - - None - - ОписаниеРасширеннаяПодсказка - 51 - Label - true - true - - Left - - - - ОписаниеКонтекстноеМеню - 17 - true - - LabelField - true - Enter - true - Left - true - - true - 2 - true - false - - + + ВариантОписание + 11 true true true - - <key>ru</key> - <value>Группа описание</value> - - - ru - Группа описание - + + ВариантОписание + + Left - ГруппаОписаниеРасширеннаяПодсказка - 49 + ВариантОписаниеРасширеннаяПодсказка + 36 Label true true @@ -343,17 +234,79 @@ Left - UsualGroup - - Auto - true - true - Auto - Auto + + ВариантОписаниеКонтекстноеМеню + 12 + true + + InputField + true + Enter + true + Left + true + + true + 2 + true + true + false + true + true + true + true + true + true + + Style.ПоясняющийТекст + + Normal + + + + ВариантАвтор + 9 + true + true + + true + + + ВариантАвтор + + + ВариантАвторРасширеннаяПодсказка + 38 + Label + true + true + + Left + + + + ВариантАвторКонтекстноеМеню + 10 + true + + InputField + true + Enter + true + Left + true + + true + true + true + false + true + true + true + true + Normal - Top - true ФормаКоманднаяПанель -1 @@ -365,10 +318,9 @@ true - false ВыбратьРасширеннаяПодсказка - 23 + 13 Label true true @@ -376,8 +328,8 @@ Left - Form.Command.Выбрать - PictureAndText + Form.Item.ДеревоВариантовОтчета.StandardCommand.Choose + Auto true true true @@ -385,16 +337,16 @@ Auto - СписокВариантовОтчетаНайти - 21 + Изменить + 7 true true true - СписокВариантовОтчетаНайтиРасширеннаяПодсказка - 24 + ИзменитьРасширеннаяПодсказка + 14 Label true true @@ -402,7 +354,7 @@ Left - Form.Item.СписокВариантовОтчета.StandardCommand.Find + Form.Item.ДеревоВариантовОтчета.StandardCommand.Change Normal Auto true @@ -410,17 +362,25 @@ UserCmds Auto - - ФормаОтменитьПоиск - 22 + + КоманднаяПанельДерева + 8 true true true + + <key>ru</key> + <value>Командная панель дерева</value> + + + ru + Командная панель дерева + - ФормаОтменитьПоискРасширеннаяПодсказка - 25 + КоманднаяПанельДереваРасширеннаяПодсказка + 15 Label true true @@ -428,48 +388,33 @@ Left - Form.Item.СписокВариантовОтчета.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - - ФормаЗакрыть - 13 - true - true - - true - - - ФормаЗакрытьРасширеннаяПодсказка - 26 - Label - true - true - - Left - - - Form.StandardCommand.Close - Normal - PictureAndText - true - true - UserCmds - Auto + + Item.ДеревоВариантовОтчета + Left + true OnCreateAtServer ПриСозданииНаСервере - DontBlock + Abort + Cancel + Close + CustomizeForm + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 50 + 15 + LockOwner true + true true Vertical true @@ -479,14 +424,14 @@ auto true - СписокВариантовОтчета + ДеревоВариантовОтчета <key>ru</key> - <value>Список вариантов отчета</value> + <value>Дерево вариантов отчета</value> 1 - ValueTable + ValueTree true @@ -513,10 +458,45 @@ - КлючВариантаОтчета + Ссылка <key>ru</key> - <value>Ключ варианта отчета</value> + <value>Ссылка</value> + + 2 + + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + КлючВарианта + + <key>ru</key> + <value>Ключ варианта</value> + + 4 + + String + + + + true + + + true + + + + Группа + + <key>ru</key> + <value>Группа</value> 3 @@ -531,14 +511,17 @@ - Ссылка + ИндексКартинки <key>ru</key> - <value>Ссылка</value> + <value>Индекс картинки</value> 5 - CatalogRef.ВариантыОтчетов + Number + + 10 + true @@ -548,12 +531,12 @@ - ЧастоИспВариант + АвторТекущийПользователь <key>ru</key> - <value>Часто исп вариант</value> + <value>Автор текущий пользователь</value> - 2 + 6 Boolean @@ -570,7 +553,7 @@ ru Автор - 4 + 7 CatalogRef.Пользователи @@ -581,33 +564,13 @@ true - - АвторПредставление - - <key>ru</key> - <value>Автор представление</value> - - 6 - - String - - 500 - - - - true - - - true - - Описание <key>ru</key> <value>Описание</value> - 7 + 8 String @@ -620,77 +583,61 @@ - - СтандартныеНастройки - - <key>ru</key> - <value>Стандартные настройки</value> - - 2 - - ValueList - - - true - - - true - - - СтандартныеНастройки.Check - - - СтандартныеНастройки.Picture - - - СтандартныеНастройки.RowsCount - - - - - - - КлючОбъекта - - <key>ru</key> - <value>Ключ объекта</value> - - 3 - - String - - - - true - - - true - - - - КлючТекущихНастроек - - <key>ru</key> - <value>Ключ текущих настроек</value> - - 4 - - String - - - - true - - - true - - ТекущийПользователь <key>ru</key> <value>Текущий пользователь</value> + 4 + + CatalogRef.Пользователи + + + true + + + true + + + + ОтчетИнформация + + <key>ru</key> + <value>Отчет информация</value> + + 2 + + + true + + + true + + + + ПолныеПраваНаВарианты + + <key>ru</key> + <value>Полные права на варианты</value> + + 3 + + Boolean + + + true + + + true + + + + ВариантАвтор + + <key>ru</key> + <value>Автор</value> + 5 CatalogRef.Пользователи @@ -703,14 +650,15 @@ - РейтингВариантовОтчета + ВариантОписание <key>ru</key> - <value>Рейтинг вариантов отчета</value> + <value>Описание</value> 6 - ValueTable + String + true @@ -718,64 +666,7 @@ true - - Ключ - - <key>ru</key> - <value>Ключ</value> - - 1 - - String - - - - true - - - true - - - - Значение - - <key>ru</key> - <value>Значение</value> - - 2 - - Date - - - - true - - - true - - - - Выбрать - - <key>ru</key> - <value>Выбрать</value> - - 1 - - true - - - StdPicture.ChooseFromList - - - - Выбрать - - - Auto - Auto - КлючОбъекта @@ -786,21 +677,7 @@ СтандартныеНастройки - - ValueList - - - - ТекущийПользователь - - CatalogRef.Пользователи - - - - ПоказыватьТолькоИзбранные - - Boolean - + diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html index b68061907..f2a68b3c2 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Help/ru.html @@ -1,13 +1,4 @@ - -

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

                -

                Для того, что бы выбрать нужный вариант отчета требуется установить курсор таблицы на нужный вариант отчета и нажать на кнопку "Выбор"

                -

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

                -

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

                -

                Отмеченные (используемые) варианты отчета

                -

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

                -

                Если нужно отметить или снять отметку варианта для этого нужно нажать на кнопку "Отметить".

                -

                См. также: 

                -

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

                -

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

                -

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

                -

                 

                \ No newline at end of file + +

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

                +

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

                +

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

                \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl index ca8ce8178..93dfc4a5f 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/ВыборВариантаОтчета/Module.bsl @@ -3,147 +3,208 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; - КлючОбъекта = Параметры.КлючОбъекта; - КлючТекущихНастроек = Параметры.КлючТекущихНастроек; - СтандартныеНастройки = Параметры.СтандартныеНастройки; - ТекущийПользователь = Параметры.ТекущийПользователь; - ПоказыватьТолькоИзбранные = Параметры.ПоказыватьТолькоИзбранные; + КлючВарианта = Параметры.КлючТекущихНастроек; + ТекущийПользователь = Пользователи.ТекущийПользователь(); + + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(Параметры.КлючОбъекта); + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ВызватьИсключение ОтчетИнформация.ТекстОшибки; + КонецЕсли; + ОтчетИнформация.Удалить("ОтчетМетаданные"); + ОтчетИнформация.Удалить("ТекстОшибки"); + ОтчетИнформация.Вставить("ОтчетПолноеИмя", Параметры.КлючОбъекта); + ОтчетИнформация = Новый ФиксированнаяСтруктура(ОтчетИнформация); + + ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка, + | ВариантыОтчетов.Наименование, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВЫБОР + | КОГДА ВариантыОтчетов.Пользовательский = ЛОЖЬ + | ТОГДА 1 + | КОГДА ВариантыОтчетов.Автор = &ТекущийПользователь + | ТОГДА 2 + | ИНАЧЕ 3 + | КОНЕЦ КАК Группа, + | ВариантыОтчетов.Автор, + | ВариантыОтчетов.Описание + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ + | + |УПОРЯДОЧИТЬ ПО + | Группа + |ИТОГИ ПО + | Группа"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Отчет", ОтчетИнформация.Отчет); + Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь); + Запрос.Текст = ТекстЗапроса; + + Группы = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); + Пока Группы.Следующий() Цикл + ГруппаДерева = ДеревоВариантовОтчета.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(ГруппаДерева, Группы); + Если Группы.Группа = 1 Тогда + ГруппаДерева.Наименование = НСтр("ru = 'Предопределенные'"); + ИначеЕсли Группы.Группа = 2 Тогда + ГруппаДерева.Наименование = НСтр("ru = 'Мои'"); + Иначе + ГруппаДерева.Наименование = НСтр("ru = 'Общие'"); + КонецЕсли; - Если НЕ ЗначениеЗаполнено(ТекущийПользователь) тогда - ТекущийПользователь = Пользователи.ТекущийПользователь(); - Параметры.ТекущийПользователь = ТекущийПользователь; - КонецЕсли; - - ЗаполнитьСписокВариантовОтчета(); - - СтрокиТекВарианта = СписокВариантовОтчета.НайтиСтроки(Новый Структура("КлючВариантаОтчета", КлючТекущихНастроек)); - Если СтрокиТекВарианта.Количество() > 0 тогда - Элементы.СписокВариантовОтчета.ТекущаяСтрока = СтрокиТекВарианта[0].ПолучитьИдентификатор(); - КонецЕсли; + ГруппаДерева.ИндексКартинки = 0; + + Варианты = Группы.Выбрать(); + Пока Варианты.Следующий() Цикл + + Вариант = ГруппаДерева.ПолучитьЭлементы().Добавить(); + ЗаполнитьЗначенияСвойств(Вариант, Варианты); + Вариант.ИндексКартинки = -1; + Если Вариант.КлючВарианта = КлючВарианта Тогда + Элементы.ДеревоВариантовОтчета.ТекущаяСтрока = Вариант.ПолучитьИдентификатор(); + КонецЕсли; + Вариант.АвторТекущийПользователь = (Вариант.Автор = ТекущийПользователь); + Если НЕ ЗначениеЗаполнено(Вариант.Описание) Тогда + Вариант.Описание = Вариант.Наименование; + КонецЕсли; + + КонецЦикла; + КонецЦикла; + ДобавитьПредопределенныеВариантыВнешнегоОтчета(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ СписокВариантовОтчета +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоВариантовОтчета &НаКлиенте -Процедура СписокВариантовОтчетаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ВыбратьИЗакрытьФорму(); +Процедура ДеревоВариантовОтчетаПриАктивизацииСтроки(Элемент) + Вариант = Элементы.ДеревоВариантовОтчета.ТекущиеДанные; + Если Вариант = Неопределено Тогда + Возврат; + КонецЕсли; + + Если НЕ ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда + ВариантАвтор = Неопределено; + ВариантОписание = ""; + Иначе + ВариантАвтор = Вариант.Автор; + ВариантОписание = Вариант.Описание; + КонецЕсли; КонецПроцедуры -//////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ КОМАНД ФОРМЫ +&НаКлиенте +Процедура ДеревоВариантовОтчетаПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; + ОткрытьВариантДляИзменения(); +КонецПроцедуры &НаКлиенте -Процедура Выбрать(Команда) - ВыбратьИЗакрытьФорму(); +Процедура ДеревоВариантовОтчетаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоВариантовОтчетаПередУдалением(Элемент, Отказ) + Отказ = Истина; +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоВариантовОтчетаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ВыбратьИЗакрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоВариантовОтчетаВыборЗначения(Элемент, Значение, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ВыбратьИЗакрыть(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ -&НаСервере -Процедура ЗаполнитьСписокВариантовОтчета(КлючВарианта = Неопределено) - - ВариантыОтчета = РеквизитФормыВЗначение("СписокВариантовОтчета"); - ВариантыОтчета.Очистить(); - ВариантыОтчета.Колонки.Добавить("ДатаИспользования"); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ - | Справочник.Наименование КАК Наименование, - | Справочник.Ссылка, - | Справочник.КлючВарианта, - | Справочник.Администратор, - | Справочник.Администратор.Наименование КАК АдминистраторПредставление, - | ПОДСТРОКА(Справочник.Описание, 0, 1000) КАК Описание - |ИЗ - | Справочник.ВариантыОтчетов КАК Справочник - |ГДЕ - | Справочник.КлючОбъекта = &КлючОбъекта - | И Справочник.ПометкаУдаления = ЛОЖЬ - | - |УПОРЯДОЧИТЬ ПО - | Наименование"; - - Запрос.Параметры.Вставить("КлючОбъекта", КлючОбъекта); - - УстановитьПривилегированныйРежим(истина); - РезультатЗапроса = Запрос.Выполнить(); - Выборка = РезультатЗапроса.Выбрать(); - УстановитьПривилегированныйРежим(ложь); - - Пока Выборка.Следующий() Цикл - СтрокаСписка = ВариантыОтчета.Добавить(); - СтрокаСписка.Наименование = Выборка.Наименование; - СтрокаСписка.КлючВариантаОтчета = Выборка.КлючВарианта; - СтрокаСписка.Ссылка = Выборка.Ссылка; - СтрокаСписка.Автор = Выборка.Администратор; - СтрокаСписка.АвторПредставление = Выборка.АдминистраторПредставление; - СтрокаСписка.Описание = Выборка.Описание; - КонецЦикла; - - ДобавитьВариантыВнешнегоОтчета(КлючОбъекта, ВариантыОтчета); - - ЗначениеВРеквизитФормы(ВариантыОтчета, "СписокВариантовОтчета"); - +&НаКлиенте +Процедура ВыбратьИЗакрыть() + Вариант = Элементы.ДеревоВариантовОтчета.ТекущиеДанные; + Если Вариант = Неопределено Тогда + Возврат; + КонецЕсли; + Если ЗначениеЗаполнено(Вариант.КлючВарианта) Тогда + Закрыть(Новый ВыборНастроек(Вариант.КлючВарианта)); + КонецЕсли; КонецПроцедуры +&НаКлиенте +Процедура ОткрытьВариантДляИзменения() + Вариант = Элементы.ДеревоВариантовОтчета.ТекущиеДанные; + Если Вариант = Неопределено ИЛИ НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда + Возврат; + КонецЕсли; + Если НЕ ПравоИзмененияВарианта(Вариант, ПолныеПраваНаВарианты) Тогда + Предупреждение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав доступа для изменения варианта ""%1"".'"), + Вариант.Наименование + ) + ); + Возврат; + КонецЕсли; + ОткрытьЗначение(Вариант.Ссылка); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПравоИзмененияВарианта(Вариант, ПолныеПраваНаВарианты) + Возврат ПолныеПраваНаВарианты ИЛИ Вариант.АвторТекущийПользователь; +КонецФункции + &НаСервере -Процедура ДобавитьВариантыВнешнегоОтчета(КлючОбъекта, ВариантыОтчета) - СтрокаВнешнийОтчет = "ВнешнийОтчет."; - ДлинаСтрокиВнешнийОтчет = СтрДлина(СтрокаВнешнийОтчет); - Если Лев(КлючОбъекта, ДлинаСтрокиВнешнийОтчет) <> СтрокаВнешнийОтчет Тогда +Процедура ДобавитьПредопределенныеВариантыВнешнегоОтчета() + + Если ОтчетИнформация.ТипОтчета <> Перечисления.ТипыОтчетов.Внешний Тогда Возврат; КонецЕсли; Попытка - ВнешнийОтчет = ВнешниеОтчеты.Создать(Сред(КлючОбъекта, ДлинаСтрокиВнешнийОтчет + 1)); + ОтчетОбъект = ВнешниеОтчеты.Создать(ОтчетИнформация.ОтчетИмя); Исключение - ЗаписьЖурналаРегистрации( - НСтр("ru = 'Варианты отчетов. Подключение внешнего отчета'"), - УровеньЖурналаРегистрации.Ошибка, - , - , + ВариантыОтчетов.ОшибкаПоВарианту(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( - НСтр("ru = 'Ошибка подключения внешнего отчета %1:'"), - КлючОбъекта + НСтр("ru = 'Не удалось получить список предопределенных вариантов + |внешнего отчета ""%1"":'"), + ОтчетИнформация.ОтчетИмя ) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) ); Возврат; КонецПопытки; - СхемаКД = ВнешнийОтчет.СхемаКомпоновкиДанных; - Если ТипЗнч(СхемаКД) <> Тип("СхемаКомпоновкиДанных") Тогда + Если ОтчетОбъект.СхемаКомпоновкиДанных = Неопределено Тогда Возврат; КонецЕсли; - Для Каждого ВариантНастроекКД Из СхемаКД.ВариантыНастроек Цикл - Если ВариантыОтчета.Найти(ВариантНастроекКД.Имя, "КлючВариантаОтчета") = Неопределено Тогда - СтрокаСписка = ВариантыОтчета.Добавить(); - СтрокаСписка.Наименование = ВариантНастроекКД.Представление; - СтрокаСписка.КлючВариантаОтчета = ВариантНастроекКД.Имя; - СтрокаСписка.Ссылка = Неопределено; - СтрокаСписка.Автор = Неопределено; - СтрокаСписка.АвторПредставление = ""; - СтрокаСписка.Описание = ""; - КонецЕсли; + ГруппаДерева = ДеревоВариантовОтчета.ПолучитьЭлементы().Добавить(); + ГруппаДерева.Группа = 1; + ГруппаДерева.Наименование = НСтр("ru = 'Предопределенные'"); + + Для Каждого ВариантНастроекКД Из ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек Цикл + Вариант = ГруппаДерева.ПолучитьЭлементы().Добавить(); + Вариант.Группа = 3; + Вариант.КлючВарианта = ВариантНастроекКД.Имя; + Вариант.Наименование = ВариантНастроекКД.Представление; + Вариант.ИндексКартинки = -1; + Вариант.АвторТекущийПользователь = Ложь КонецЦикла; -КонецПроцедуры - -&НаКлиенте -Процедура ВыбратьИЗакрытьФорму() - ТекущийВариант = Элементы.СписокВариантовОтчета.ТекущиеДанные; - Если ТекущийВариант <> Неопределено Тогда - Закрыть(Новый ВыборНастроек(ТекущийВариант.КлючВариантаОтчета)); - Иначе - Закрыть(); - КонецЕсли; + КонецПроцедуры diff --git a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/ConditionalAppearance.dcssca b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/ConditionalAppearance.dcssca similarity index 50% rename from SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/ConditionalAppearance.dcssca rename to SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/ConditionalAppearance.dcssca index 557cea106..4140342dd 100644 --- a/SSL/src/Catalogs/ВариантыОтчетов/Forms/НастройкаГруппировкиПоРазделам/ConditionalAppearance.dcssca +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/ConditionalAppearance.dcssca @@ -1,67 +1,17 @@ - false - ДеревоПодсистемНазвание + ВариантыОтчета + + + ВариантыОтчетаНаименование - ДеревоПодсистем.Отчет - NotFilled - - - - - false - Шрифт - - - - - - - - ДеревоПодсистемНазвание - - - - - ДеревоПодсистем.Отчет - Filled - - - ДеревоПодсистем.Предопредленная - Equal - true - - - - - ЦветТекста - #8371FF - - - Шрифт - - - - - - - - ДеревоПодсистемНазвание - - - - - ДеревоПодсистем.Отчет - Filled - - - ДеревоПодсистем.Предопредленная + ВариантыОтчета.Пользовательский Equal false @@ -69,11 +19,50 @@ ЦветТекста - #0000FF + style:СкрытыйВариантОтчета - Шрифт - + false + Видимость + false + + + false + Доступность + false + + + + + + + ВариантыОтчета + + + ВариантыОтчетаНаименование + + + + + ПолныеПраваНаВарианты + Equal + false + + + ВариантыОтчета.АвторТекущийПользователь + Equal + false + + + + + ЦветТекста + style:СкрытыйВариантОтчета + + + false + Доступность + false diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form index 39bce0333..c0b3dee95 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Form.form @@ -2,32 +2,47 @@ Страницы - 34 + 24 - СтраницаВыбораВарианта - 36 - - Группа - 65 + Страница1 + 25 + + ВариантыОтчета + 1 + true + true + + true + + + ВариантыОтчета + + None + Add + CancelSearch + Copy + CopyToClipboard + EndEdit + Find + MoveDown + MoveUp + OutputList + SortListAsc + SortListDesc - СоздатьНовыйВариантОтчета - 37 + ВариантыОтчетаНаименование + 4 true true true - СоздатьНовыйВариантОтчета + ВариантыОтчета.Наименование - None - - OnChange - СоздатьНовыйВариантОтчетаПриИзменении - - СоздатьНовыйВариантОтчетаРасширеннаяПодсказка - 80 + ВариантыОтчетаНаименованиеРасширеннаяПодсказка + 115 Label true true @@ -36,84 +51,57 @@ - СоздатьНовыйВариантОтчетаКонтекстноеМеню - 38 + ВариантыОтчетаНаименованиеКонтекстноеМеню + 5 true - RadioButtonField - Enter + InputField + Auto true Left true - - 1 - - - ru - Создать новый вариант отчета - - - 1 - - - - - ru - Сохранить в существующий вариант отчета - - - 0 - - - Vertical - - - - ПанельСправки - 66 - - Справка - 67 - true - true - - true - - - СправкаРасширеннаяПодсказка - 83 - Label - true - true - - Left - - - Form.StandardCommand.Help - Normal - Auto + true true - UserCmds - Auto - - true - true - - true - - - <key>ru</key> - <value>Панель справки</value> - - - ru - Панель справки - - true + true + true + true + Normal + + + None + + ВариантыОтчетаКоманднаяПанель + 3 + Left + true + + + Selection + ВариантыОтчетаВыбор + + + BeforeAddRow + ВариантыОтчетаПередНачаломДобавления + + + BeforeDeleteRow + ВариантыОтчетаПередУдалением + + + OnActivateRow + ВариантыОтчетаПриАктивизацииСтроки + + + BeforeRowChange + ВариантыОтчетаПередНачаломИзменения + + + ВариантыОтчетаСтрокаПоиска + 106 - ПанельСправкиРасширеннаяПодсказка - 82 + ВариантыОтчетаСтрокаПоискаРасширеннаяПодсказка + 108 Label true true @@ -121,9 +109,353 @@ Left - CommandBar - - Right + + ВариантыОтчетаСтрокаПоискаКонтекстноеМеню + 107 + true + + ВариантыОтчета + + true + + + + ВариантыОтчетаСостояниеПросмотра + 109 + + ВариантыОтчетаСостояниеПросмотраРасширеннаяПодсказка + 111 + Label + true + true + + Left + + + + ВариантыОтчетаСостояниеПросмотраКонтекстноеМеню + 110 + true + + ViewStatusAddition + ВариантыОтчета + + true + + + + ВариантыОтчетаУправлениеПоиском + 112 + + ВариантыОтчетаУправлениеПоискомРасширеннаяПодсказка + 114 + Label + true + true + + Left + + + + ВариантыОтчетаУправлениеПоискомКонтекстноеМеню + 113 + true + + SearchControlAddition + ВариантыОтчета + + true + + + + ВариантыОтчетаРасширеннаяПодсказка + 105 + Label + true + true + + Left + + + + ВариантыОтчетаКонтекстноеМеню + 2 + + ВариантыОтчетаУдалить + 14 + true + true + + true + + + ВариантыОтчетаУдалитьРасширеннаяПодсказка + 103 + Label + true + true + + Left + + + Form.Item.ВариантыОтчета.StandardCommand.Delete + Normal + Picture + true + true + UserCmds + Auto + InCommandBarAndInAdditionalSubmenu + + + ВариантыОтчетаИзменить + 51 + true + true + + true + + + ВариантыОтчетаИзменитьРасширеннаяПодсказка + 104 + Label + true + true + + Left + + + Form.Item.ВариантыОтчета.StandardCommand.Change + Normal + Auto + true + true + UserCmds + Auto + + true + + true + true + true + true + true + 1 + 1 + AutoUse + AutoUse + true + true + false + false + false + false + false + Auto + true + true + None + None + None + true + + + + Наименование + 52 + true + true + + true + + + ВариантНаименование + + + OnChange + НаименованиеПриИзменении + + + НаименованиеРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + + НаименованиеКонтекстноеМеню + 53 + true + + InputField + true + Enter + true + Left + true + + + AutoComplete + НаименованиеАвтоПодбор + + true + true + true + false + true + true + true + true + true + Normal + + + + ОписаниеВнешнегоОтчета + 95 + true + + true + + + ВариантОписание + + false + Left + + ОписаниеВнешнегоОтчетаРасширеннаяПодсказка + 127 + Label + true + true + + Left + + + + ОписаниеВнешнегоОтчетаКонтекстноеМеню + 96 + true + + InputField + Enter + true + Left + true + + + StartChoice + ОписаниеНачалоВыбора + + true + 2 + true + true + false + true + false + true + false + true + false + false + false + true + true + true + Normal + + + + ГруппаАвтор + 46 + + ТолькоДляАвтора + 49 + true + true + + true + + + ВариантТолькоДляАвтора + + Right + + OnChange + ТолькоДляАвтораПриИзменении + + + ТолькоДляАвтораРасширеннаяПодсказка + 130 + Label + true + true + + Left + + + + ТолькоДляАвтораКонтекстноеМеню + 50 + true + + CheckBoxField + Enter + true + Left + true + + + + Автор + 47 + true + true + + true + + + ВариантАвтор + + None + + АвторРасширеннаяПодсказка + 132 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 48 + true + + InputField + Enter + true + Left + true + + + Clearing + АвторОчистка + + 35 + true + true + false + true + true + true + true + Normal true @@ -133,15 +465,15 @@ <key>ru</key> - <value>Группа</value> + <value>Группа автор</value> ru - Группа + Группа заголовок Размещение опубликован - ГруппаРасширеннаяПодсказка - 79 + ГруппаАвторРасширеннаяПодсказка + 129 Label true true @@ -158,368 +490,150 @@ Auto - - Варианты - 1 - true - true - - true - - - Варианты - - false - None - Add - Change - Copy - CopyToClipboard - Delete - EndEdit - MoveDown - MoveUp - SelectAll - SortListAsc - SortListDesc - - ВариантыВариант - 10 - true - true - - true - - - Варианты.Наименование - - - ВариантыВариантРасширеннаяПодсказка - 96 - Label - true - true - - Left - - - - ВариантыВариантКонтекстноеМеню - 11 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - ВариантыАвтор - 46 - true - true - - true - - - Варианты.Автор - - - ВариантыАвторРасширеннаяПодсказка - 98 - Label - true - true - - Left - - - - ВариантыАвторКонтекстноеМеню - 47 - true - - InputField - Auto - true - Left - true - - 7 - true - true - true - true - true - true - Normal - - - Top - - ВариантыКоманднаяПанель - 3 - - ВариантыОтчетаНайти - 63 - true - true - - true - - - ВариантыОтчетаНайтиРасширеннаяПодсказка - 84 - Label - true - true - - Left - - - Form.Item.Варианты.StandardCommand.Find - Normal - Auto - true - true - UserCmds - Auto - - - ВариантыОтчетаОтменитьПоиск - 64 - true - true - - true - - - ВариантыОтчетаОтменитьПоискРасширеннаяПодсказка - 85 - Label - true - true - - Left - - - Form.Item.Варианты.StandardCommand.CancelSearch - Normal - Auto - true - true - UserCmds - Auto - - Left - - - Selection - ВариантыВыбор - - - OnActivateRow - ВариантыПриАктивизацииСтроки - - - ВариантыСтрокаПоиска - 87 - - ВариантыСтрокаПоискаРасширеннаяПодсказка - 89 - Label - true - true - - Left - - - - ВариантыСтрокаПоискаКонтекстноеМеню - 88 - true - - Варианты - - true - - - - ВариантыСостояниеПросмотра - 90 - - ВариантыСостояниеПросмотраРасширеннаяПодсказка - 92 - Label - true - true - - Left - - - - ВариантыСостояниеПросмотраКонтекстноеМеню - 91 - true - - ViewStatusAddition - Варианты - - true - - - - ВариантыУправлениеПоиском - 93 - - ВариантыУправлениеПоискомРасширеннаяПодсказка - 95 - Label - true - true - - Left - - - - ВариантыУправлениеПоискомКонтекстноеМеню - 94 - true - - SearchControlAddition - Варианты - - true - - - - ВариантыРасширеннаяПодсказка - 86 - Label - true - true - - Left - - - - ВариантыКонтекстноеМеню - 2 - true - - true - true - true - MultiRow -
                true
                - 1 - 1 - AutoUse - AutoUse - true - true - false - false - true - Auto - Auto - true - true - true - true - None - None - None - true - -
                - ГруппаОписание - 58 - - КартинкаИнфо - 59 - - <key>ru</key> - <value>Картинка инфо</value> - - true - true - - true - - - КартинкаИнфоРасширеннаяПодсказка - 109 + ПерезаписьИлиНовый + 86 + + Перезапись + 87 + + ДекорацияПерезапись + 89 + + <key>ru</key> + <value>Будет перезаписан существующий вариант отчета. +</value> + + true + true + + true + + + ДекорацияПерезаписьРасширеннаяПодсказка + 136 + Label + true + true + + Left + + + + ДекорацияПерезаписьКонтекстноеМеню + 90 + true + Label true - true - - Left - - - - КартинкаИнфоКонтекстноеМеню - 60 - true - - 2 - true - 1 - true - - - CommonPicture.Информация - - - - - ВариантыОтчетаОписание - 56 - true - true - - true - - - Items.Варианты.CurrentData.Описание - - None - - ВариантыОтчетаОписаниеРасширеннаяПодсказка - 110 - Label - true - true - - Left - - - - ВариантыОтчетаОписаниеКонтекстноеМеню - 57 - true - - LabelField - Auto - true - Left - true - - true - 2 + 1 true false + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Перезапись</value> + + + ru + Перезапись + + + ПерезаписьРасширеннаяПодсказка + 135 + Label + true + true + + Left + + + Page + + Vertical + auto + + + + Новый + 88 + + ДекорацияНовый + 91 + + <key>ru</key> + <value>Будет сохранен новый вариант отчета.</value> + + true + true + + true + + + ДекорацияНовыйРасширеннаяПодсказка + 138 + Label + true + true + + Left + + + + ДекорацияНовыйКонтекстноеМеню + 92 + true + + Label + true + 1 + true + false + + Style.ПоясняющийТекст + + + Left + + + true + true + + true + + + <key>ru</key> + <value>Новый</value> + + + ru + Новый + + + НовыйРасширеннаяПодсказка + 137 + Label + true + true + + Left + + + Page + + Vertical + auto true @@ -529,15 +643,15 @@ <key>ru</key> - <value>Группа описание</value> + <value>Перезапись или новый</value> ru - Группа описание + Перезапись или новый - ГруппаОписаниеРасширеннаяПодсказка - 108 + ПерезаписьИлиНовыйРасширеннаяПодсказка + 134 Label true true @@ -545,15 +659,50 @@ Left - UsualGroup - - Auto - true - true - Auto + Pages + Auto
                + + ДекорацияДалее + 93 + + <key>ru</key> + <value>Нажмите "Далее" для размещения варианта отчета в разделах программы.</value> + + true + true + + true + + + ДекорацияДалееРасширеннаяПодсказка + 139 + Label + true + true + + Left + + + + ДекорацияДалееКонтекстноеМеню + 94 + true + + Label + true + 1 + true + false + + Style.ПоясняющийТекст + + + Left + + true true @@ -561,15 +710,15 @@ <key>ru</key> - <value>Страница выбора варианта</value> + <value>Страница1</value> ru - Страница выбора варианта + Страница1 - СтраницаВыбораВариантаРасширеннаяПодсказка - 78 + Страница1РасширеннаяПодсказка + 102 Label true true @@ -584,22 +733,129 @@
                - СтраницаПараметровЗаписиВарианта - 35 - - ГруппаСправка - 68 - - Справка1 - 69 + Страница2 + 26 + + ДеревоПодсистем + 74 + true + true + + true + + + ДеревоПодсистем + + None + Add + Copy + Delete + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree + + ГруппаКолонок + 77 + + ДеревоПодсистемИспользование + 78 + true + true + + true + + + ДеревоПодсистем.Использование + + None + + OnChange + ДеревоПодсистемИспользованиеПриИзменении + + + ДеревоПодсистемИспользованиеРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + ДеревоПодсистемИспользованиеКонтекстноеМеню + 79 + true + + CheckBoxField + Auto + true + Left + true + + + + ДеревоПодсистемПредставление + 80 + true + true + + true + + + ДеревоПодсистем.Представление + + + ДеревоПодсистемПредставлениеРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + + ДеревоПодсистемПредставлениеКонтекстноеМеню + 81 + true + + InputField + true + Auto + true + Left + true + + true + true + true + true + true + true + Normal + + true true true + + <key>ru</key> + <value>Группа колонок</value> + + + ru + Группа колонок + - Справка1РасширеннаяПодсказка - 114 + ГруппаКолонокРасширеннаяПодсказка + 151 Label true true @@ -607,56 +863,143 @@ Left - Form.StandardCommand.Help - Normal - Auto - true - true - UserCmds - Auto + ColumnGroup + + InCell + auto + true + - true - true - - true - - - <key>ru</key> - <value>Группа справка</value> - - - ru - Группа справка - - - ГруппаСправкаРасширеннаяПодсказка - 113 - Label - true - true - - Left + + ДеревоПодсистемВажность + 82 + true + true + + true + + + ДеревоПодсистем.Важность + + + OnChange + ДеревоПодсистемВажностьПриИзменении + + + ДеревоПодсистемВажностьРасширеннаяПодсказка + 156 + Label + true + true + + Left + + + + ДеревоПодсистемВажностьКонтекстноеМеню + 83 + true + + InputField + Auto + true + Left + true + + 8 + true + true + true + false + true + true + false + false + true + true + true + Normal - - CommandBar - + + + ДеревоПодсистемКоманднаяПанель + 76 Left - - - - ВариантНаименование - 6 - true - true - - true - - - ВариантНаименование - + + + ДеревоПодсистемСтрокаПоиска + 142 + + ДеревоПодсистемСтрокаПоискаРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + ДеревоПодсистемСтрокаПоискаКонтекстноеМеню + 143 + true + + ДеревоПодсистем + + true + + + + ДеревоПодсистемСостояниеПросмотра + 145 + + ДеревоПодсистемСостояниеПросмотраРасширеннаяПодсказка + 147 + Label + true + true + + Left + + + + ДеревоПодсистемСостояниеПросмотраКонтекстноеМеню + 146 + true + + ViewStatusAddition + ДеревоПодсистем + + true + + + + ДеревоПодсистемУправлениеПоиском + 148 + + ДеревоПодсистемУправлениеПоискомРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + + ДеревоПодсистемУправлениеПоискомКонтекстноеМеню + 149 + true + + SearchControlAddition + ДеревоПодсистем + + true + + - ВариантНаименованиеРасширеннаяПодсказка - 115 + ДеревоПодсистемРасширеннаяПодсказка + 141 Label true true @@ -665,38 +1008,50 @@ - ВариантНаименованиеКонтекстноеМеню - 7 + ДеревоПодсистемКонтекстноеМеню + 75 true - InputField - Enter - true - Left - true - - true - true - true - true - true - Normal - + Tree + true + true + 15 + true + true +
                true
                + 1 + 1 + AutoUse + AutoUse + true + true + false + true + Auto + Auto + ExpandAllLevels + true + true + None + None + None + true
                - ВариантАвтор - 54 + ВидимостьПоУмолчанию + 65 true true true - ВариантАвтор + ВариантВидимостьПоУмолчанию + Right - ВариантАвторРасширеннаяПодсказка - 117 + ВидимостьПоУмолчаниюРасширеннаяПодсказка + 166 Label true true @@ -705,28 +1060,20 @@ - ВариантАвторКонтекстноеМеню - 55 + ВидимостьПоУмолчаниюКонтекстноеМеню + 66 true - InputField + CheckBoxField Enter true Left true - - true - true - true - true - true - true - Normal - + - ВариантОписание - 42 + Описание + 8 true true @@ -735,10 +1082,11 @@ ВариантОписание - Top + false + Left - ВариантОписаниеРасширеннаяПодсказка - 119 + ОписаниеРасширеннаяПодсказка + 168 Label true true @@ -747,8 +1095,8 @@ - ВариантОписаниеКонтекстноеМеню - 43 + ОписаниеКонтекстноеМеню + 9 true InputField @@ -757,98 +1105,29 @@ Left true + + StartChoice + ОписаниеНачалоВыбора + true + 2 true + true + false true + false true + false + true + false + false + false true true true Normal - - БыстрыйДоступ - 70 - true - true - - true - - - БыстрыйДоступ - - - БыстрыйДоступРасширеннаяПодсказка - 121 - Label - true - true - - Left - - - - БыстрыйДоступКонтекстноеМеню - 71 - true - - LabelField - Enter - true - Left - true - - - Click - БыстрыйДоступНажатие - - true - true - true - - - - Разделы - 72 - true - true - - true - - - Разделы - - - РазделыРасширеннаяПодсказка - 123 - Label - true - true - - Left - - - - РазделыКонтекстноеМеню - 73 - true - - LabelField - Enter - true - Left - true - - - Click - РазделыНажатие - - true - true - true - - true true @@ -856,15 +1135,15 @@ <key>ru</key> - <value>Страница параметров записи варианта</value> + <value>Страница2</value> ru - Страница параметров записи варианта + Страница2 - СтраницаПараметровЗаписиВариантаРасширеннаяПодсказка - 112 + Страница2РасширеннаяПодсказка + 140 Label true true @@ -893,7 +1172,7 @@ СтраницыРасширеннаяПодсказка - 77 + 101 Label true true @@ -912,16 +1191,16 @@ ФормаКоманднаяПанель -1 - ФормаНазад - 41 + Назад + 23 true - true + false true - ФормаНазадРасширеннаяПодсказка - 74 + НазадРасширеннаяПодсказка + 97 Label true true @@ -938,16 +1217,16 @@ Auto - ФормаДалее - 40 + Далее + 15 true true true - ФормаДалееРасширеннаяПодсказка - 75 + ДалееРасширеннаяПодсказка + 98 Label true true @@ -964,20 +1243,16 @@ Auto - ФормаГотово - 39 - - <key>ru</key> - <value>Сохранить</value> - + Сохранить + 55 true true true - ФормаГотовоРасширеннаяПодсказка - 76 + СохранитьРасширеннаяПодсказка + 99 Label true true @@ -985,7 +1260,7 @@ Left - Form.Command.Готово + Form.Command.Сохранить Auto true true @@ -993,15 +1268,65 @@ UserCmds Auto + + Отмена + 16 + true + true + + true + + + ОтменаРасширеннаяПодсказка + 100 + Label + true + true + + Left + + + Form.StandardCommand.Cancel + Normal + Auto + true + true + UserCmds + Auto + Right + true + + NotificationProcessing + ОбработкаОповещения + + + OnOpen + ПриОткрытии + OnCreateAtServer ПриСозданииНаСервере + + FillCheckProcessingAtServer + ОбработкаПроверкиЗаполненияНаСервере + + Abort + Close CustomizeForm - DontBlock + Ignore + No + OK + RestoreValues + Retry + SaveValues + Yes + 60 + LockOwner true + true true Vertical true @@ -1011,12 +1336,45 @@ auto true - Варианты + ПрототипКлюч <key>ru</key> - <value>Варианты</value> + <value>Прототип ключ</value> 1 + + String + + + + true + + + true + + + + ОтчетИнформация + + <key>ru</key> + <value>Отчет информация</value> + + 2 + + + true + + + true + + + + ВариантыОтчета + + <key>ru</key> + <value>Ранее сохраненные варианты</value> + + 3 ValueTable @@ -1026,17 +1384,15 @@ true - true - Наименование + Ссылка <key>ru</key> - <value>Наименование</value> + <value>Ссылка</value> - 2 + 1 - String - + CatalogRef.ВариантыОтчетов true @@ -1046,12 +1402,29 @@ - Описание + Пользовательский <key>ru</key> - <value>Описание</value> + <value>Пользовательский</value> - 4 + 2 + + Boolean + + + true + + + true + + + + Наименование + + <key>ru</key> + <value>Наименование</value> + + 3 String @@ -1069,7 +1442,7 @@ ru Автор - 5 + 4 CatalogRef.Пользователи @@ -1081,63 +1454,12 @@ - Ссылка + Описание <key>ru</key> - <value>Ссылка</value> + <value>Описание</value> - 6 - - CatalogRef.ВариантыОтчетов - - - true - - - true - - - - БыстрыйДоступ - - <key>ru</key> - <value>Быстрый доступ</value> - - 3 - - Boolean - - - true - - - true - - - - ТипВариантаОтчета - - <key>ru</key> - <value>Тип варианта отчета</value> - - 8 - - EnumRef.ТипыВариантовОтчетов - - - true - - - true - - - - КлючОбъекта - - <key>ru</key> - <value>Ключ объекта</value> - - 1 + 5 String @@ -1149,13 +1471,30 @@ true + + Тип + + <key>ru</key> + <value>Тип</value> + + 6 + + EnumRef.ТипыОтчетов + + + true + + + true + + КлючВарианта <key>ru</key> <value>Ключ варианта</value> - 9 + 7 String @@ -1168,12 +1507,29 @@ - ПоказыватьВСписке + АвторТекущийПользователь <key>ru</key> - <value>Показывать в списке</value> + <value>Автор текущий пользователь</value> - 7 + 8 + + Boolean + + + true + + + true + + + + ТолькоДляАвтора + + <key>ru</key> + <value>Доступен только автору</value> + + 9 Boolean @@ -1185,65 +1541,29 @@ + + ПолныеПраваНаВарианты + + <key>ru</key> + <value>Полные права на варианты</value> + + 4 + + 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 - - CatalogRef.Пользователи - - - true - - - true - - - - ВариантОписание - - <key>ru</key> - <value>Описание</value> - 6 String @@ -1257,14 +1577,15 @@ - ВариантИсключенияБыстрогоДоступа + ВариантОписание <key>ru</key> - <value>Исключения быстрого доступа</value> + <value>Описание</value> - 10 + 7 - ValueTable + String + true @@ -1272,101 +1593,14 @@ true - - Пользователь - - <key>ru</key> - <value>Пользователь</value> - - 1 - - CatalogRef.Пользователи - - - true - - - true - - - ВариантПодсистемы + ВариантТолькоДляАвтора <key>ru</key> - <value>Подсистемы</value> + <value>Только для автора:</value> - 11 - - ValueTable - - - true - - - true - - - Подсистема - - <key>ru</key> - <value>Подсистема</value> - - 1 - - String - - - - true - - - true - - - - Название - - <key>ru</key> - <value>Название</value> - - 2 - - String - - - - true - - - true - - - - Предопределенная - - <key>ru</key> - <value>Предопределенная</value> - - 3 - - Boolean - - - true - - - true - - - - - ВариантБыстрыйДоступ - - <key>ru</key> - <value>Быстрый доступ</value> - - 9 + 8 Boolean @@ -1378,14 +1612,14 @@ - ДеревоПодсистем + ВариантСсылка <key>ru</key> - <value>Дерево подсистем</value> + <value>Ссылка</value> - 12 + 9 - ValueTree + CatalogRef.ВариантыОтчетов true @@ -1393,89 +1627,51 @@ true - - ПутьКПодсистеме - - <key>ru</key> - <value>Путь к подсистеме</value> - - 1 - - String - - - - true - - - true - - - - Название - - <key>ru</key> - <value>Название</value> - - 2 - - String - - - - true - - - true - - - - Предопределенная - - <key>ru</key> - <value>Предопределенная</value> - - 3 - - Boolean - - - true - - - true - - - - Использование - - <key>ru</key> - <value>Использование</value> - - 4 - - Boolean - - - true - - - true - - - СоздатьНовыйВариантОтчета + ВариантКлючВарианта <key>ru</key> - <value>Создать новый вариант отчета</value> + <value>Ключ варианта</value> - 13 + 5 - Number - - 1 - + String + + + + true + + + true + + + + ПрототипСсылка + + <key>ru</key> + <value>Прототип ссылка</value> + + 11 + + CatalogRef.ВариантыОтчетов + + + true + + + true + + + + НастроитьРазмещениеПослеСохранения + + <key>ru</key> + <value>Настроить размещение после сохранения</value> + + 12 + + Boolean true @@ -1490,7 +1686,7 @@ ru Автор - 15 + 14 CatalogRef.Пользователи @@ -1502,15 +1698,14 @@ - ИсходныйКлючВарианта + ТекущийПользователь <key>ru</key> - <value>Исходный ключ варианта</value> + <value>Текущий пользователь</value> - 17 + 10 - String - + CatalogRef.Пользователи true @@ -1520,12 +1715,32 @@ - ПравоМенятьЧужиеВарианты + ИдентификаторТекущейСтроки <key>ru</key> - <value>Право менять чужие варианты</value> + <value>Идентификатор текущей строки</value> - 20 + 16 + + Number + + 10 + + + + true + + + true + + + + ВариантВидимостьПоУмолчанию + + <key>ru</key> + <value>По умолчанию виден в панелях отчетов других пользователей</value> + + 17 Boolean @@ -1537,14 +1752,14 @@ - ВыбранныйВариант + ДеревоПодсистем <key>ru</key> - <value>Выбранный вариант</value> + <value>Раздел, группа</value> - 7 + 13 - CatalogRef.ВариантыОтчетов + ValueTree true @@ -1552,72 +1767,200 @@ true + + Ссылка + + <key>ru</key> + <value>Ссылка</value> + + 1 + + CatalogRef.ИдентификаторыОбъектовМетаданных + + + true + + + true + + + + Представление + + <key>ru</key> + <value>Раздел, Группа</value> + + 2 + + String + + + + true + + + true + + + + Имя + + <key>ru</key> + <value>Имя</value> + + 3 + + String + + 100 + + + + true + + + true + + + + ПолноеИмя + + <key>ru</key> + <value>Полное имя</value> + + 4 + + String + + + + true + + + true + + + + Приоритет + + <key>ru</key> + <value>Приоритет</value> + + 5 + + String + + 100 + + + + true + + + true + + + + Использование + + <key>ru</key> + <value>Использование</value> + + 6 + + Number + + 1 + + + + true + + + true + + + + Важность + + <key>ru</key> + <value>Важность</value> + + 9 + + String + + 15 + + + + true + + + true + + + + ИспользованиеПоУмолчанию + 8 + + Number + + 1 + + + + true + + + true + + + + ВажностьПоУмолчанию + + <key>ru</key> + <value>Важность по умолчанию</value> + + 7 + + String + + 15 + + + + true + + + true + + + + ИзмененПользователем + + <key>ru</key> + <value>Изменен пользователем</value> + + 10 + + Boolean + + + true + + + true + + - - БыстрыйДоступ - - <key>ru</key> - <value>Быстрый доступ</value> - - 5 - - String - - - - true - - - true - - - - Разделы - - <key>ru</key> - <value>Разделы</value> - - 8 - - String - - - - true - - - true - - - - Готово - - <key>ru</key> - <value>сохранить</value> - - 4 - - ru - Сохранить - - - true - - - - Готово - - - Auto - Auto - Далее <key>ru</key> - <value>Далее >></value> + <value>Далее >></value> - 5 + 1 ru Далее @@ -1637,9 +1980,9 @@ Назад <key>ru</key> - <value><< Назад</value> + <value><< Назад</value> - 6 + 3 ru Назад @@ -1655,6 +1998,28 @@ Auto Auto + + Сохранить + + <key>ru</key> + <value>Сохранить</value> + + 2 + + ru + Сохранить + + + true + + + + Сохранить + + + Auto + Auto + КлючОбъекта @@ -1663,12 +2028,6 @@ КлючТекущихНастроек - - ТекущийПользователь - - CatalogRef.Пользователи - - diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html index b13bfd035..7bddcc2e3 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Help/ru.html @@ -1,9 +1,7 @@ - -

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

                -

                Для того, что бы сохранить вариант отчета требуется в поле "Название варианта отчета" ввести названии варианта и нажать на кнопку "Сохранить". Если требуется перезаписать вариант отчета, нужно выбрать вариант отчета из списка и нажать на кнопку "Сохранить"

                -

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

                -

                Если требуется удалить не правильно сохраненный вариант отчета. Для этого требуется выделить в списке вариантов отчета нужный вариант и нажать кнопку "Удалить вариант отчета".

                -

                См. также: 

                -

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

                -

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

                -

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

                \ No newline at end of file + +

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

                +

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

                +

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

                +

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

                +

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

                +

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

                \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl index 2e13d0836..f82b0af22 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/Forms/СохранениеВариантаОтчета/Module.bsl @@ -3,519 +3,581 @@ &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) - Перем КлючВарианта; + КлючОтчета = Параметры.КлючОбъекта; + ПрототипКлюч = Параметры.КлючТекущихНастроек; - Если Параметры.Свойство("АвтоТест") Тогда + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОтчета); + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ВызватьИсключение ОтчетИнформация.ТекстОшибки; + КонецЕсли; + ОтчетИнформация.Удалить("ОтчетМетаданные"); + ОтчетИнформация.Удалить("ТекстОшибки"); + ОтчетИнформация.Вставить("ЭтоВнешний", ОтчетИнформация.ТипОтчета = Перечисления.ТипыОтчетов.Внешний); + ОтчетИнформация = Новый ФиксированнаяСтруктура(ОтчетИнформация); + + ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); + + Элементы.ТолькоДляАвтора.Подсказка = Метаданные.Справочники.ВариантыОтчетов.Реквизиты.ТолькоДляАвтора.Подсказка; + + Если НЕ ПолныеПраваНаВарианты Тогда + Элементы.ТолькоДляАвтора.Доступность = Ложь; + Элементы.ВидимостьПоУмолчанию.Доступность = Ложь; + Элементы.Автор.Доступность = Ложь; + КонецЕсли; + + ТекущийПользователь = Пользователи.ТекущийПользователь(); + + ТекстЗапроса = + "ВЫБРАТЬ РАЗРЕШЕННЫЕ + | ВариантыОтчетов.Ссылка КАК Ссылка, + | ВариантыОтчетов.Пользовательский КАК Пользовательский, + | ВариантыОтчетов.Наименование КАК Наименование, + | ВариантыОтчетов.Автор КАК Автор, + | ВариантыОтчетов.Описание КАК Описание, + | ВариантыОтчетов.ТипОтчета КАК Тип, + | ВариантыОтчетов.КлючВарианта КАК КлючВарианта, + | ВариантыОтчетов.ТолькоДляАвтора КАК ТолькоДляАвтора, + | ВЫБОР + | КОГДА ВариантыОтчетов.Автор = &ТекущийПользователь + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ + | КОНЕЦ КАК АвторТекущийПользователь + |ИЗ + | Справочник.ВариантыОтчетов КАК ВариантыОтчетов + |ГДЕ + | ВариантыОтчетов.Отчет = &Отчет + | И ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; + + Запрос = Новый Запрос; + Запрос.УстановитьПараметр("Отчет", ОтчетИнформация.Отчет); + Запрос.УстановитьПараметр("ТекущийПользователь", ТекущийПользователь); + Запрос.Текст = ТекстЗапроса; + + ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); + + ВариантыОтчета.Загрузить(ТаблицаЗначений); + + ДобавитьПредопределенныеВариантыВнешнегоОтчета(); + + ВариантыОтчета.Сортировать("Наименование Возр"); + + ИдентификаторТекущейСтроки = -1; + Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("КлючВарианта", ПрототипКлюч)); + Если Найденные.Количество() > 0 Тогда + Вариант = Найденные[0]; + ПрототипСсылка = Вариант.Ссылка; + ВариантОписание = Вариант.Описание; + ИдентификаторТекущейСтроки = Вариант.ПолучитьИдентификатор(); + Элементы.ВариантыОтчета.ТекущаяСтрока = ИдентификаторТекущейСтроки; + ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтаФорма); + КонецЕсли; + + ВариантыОтчетов.ДеревоПодсистемДобавитьУсловноеОформление(ЭтаФорма); + + Если ОтчетИнформация.ЭтоВнешний Тогда + Элементы.ОписаниеВнешнегоОтчета.Видимость = Истина; + Элементы.Назад.Видимость = Ложь; + Элементы.Далее.Видимость = Ложь; + Элементы.ДекорацияДалее.Видимость = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаСервере +Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) + Если НЕ ЗначениеЗаполнено(ВариантНаименование) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Поле ""Наименование"" не заполнено'"), + , + "Наименование" + ); + Отказ = Истина; + ИначеЕсли ВариантыОтчетов.НаименованиеЗанято(ОтчетИнформация.Отчет, ВариантСсылка, ВариантНаименование) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" занято, необходимо указать другое Наименование.'"), + ВариантНаименование + ), + , + "Наименование" + ); + Отказ = Истина; + КонецЕсли; +КонецПроцедуры + +&НаКлиенте +Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) + Если Источник = ИмяФормы Тогда Возврат; КонецЕсли; - // Определяет возможность редактирования чужих вариантов - // и возможность изменения настроек видимости варианта - ПравоМенятьЧужиеВарианты = Пользователи.РолиДоступны("ДобавлениеИзменениеВариантовОтчетов"); - - УстановитьПривилегированныйРежим(Истина); - Если НЕ ПравоМенятьЧужиеВарианты Тогда - Элементы.БыстрыйДоступ.Доступность = Ложь; - Элементы.ВариантАвтор.Доступность = Ложь; - КонецЕсли; - - ИсходныйКлючОбъекта = Параметры.КлючОбъекта; - ИсходныйКлючВарианта = Параметры.КлючТекущихНастроек; - ТекущийПользователь = Пользователи.ТекущийПользователь(); - - Запрос = Новый Запрос; - Запрос.Текст = - "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ - | ВариантыОтчета.Администратор КАК Автор, - | ВариантыОтчета.Ссылка, - | ВариантыОтчета.Наименование КАК Наименование, - | ВариантыОтчета.КлючОбъекта, - | ВариантыОтчета.КлючВарианта, - | ПОДСТРОКА(ВариантыОтчета.Описание, 0, 1000) КАК Описание, - | ВариантыОтчета.БыстрыйДоступ, - | ВариантыОтчета.ТипВариантаОтчета, - | ВЫБОР - | КОГДА ВариантыОтчета.ТипВариантаОтчета В (&ТипыВыводимыхВариантов) - | ТОГДА ИСТИНА - | ИНАЧЕ ЛОЖЬ - | КОНЕЦ КАК ПоказыватьВСписке - |ИЗ - | Справочник.ВариантыОтчетов КАК ВариантыОтчета - |ГДЕ - | ВариантыОтчета.КлючОбъекта = &КлючОбъекта - | И ВариантыОтчета.ПометкаУдаления = ЛОЖЬ - | И ВариантыОтчета.Администратор = &ТекущийПользователь - | - |УПОРЯДОЧИТЬ ПО - | Наименование"; - - Если ПравоМенятьЧужиеВарианты Тогда - Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ВариантыОтчета.Администратор = &ТекущийПользователь", ""); - Иначе - Запрос.Параметры.Вставить("ТекущийПользователь", ТекущийПользователь); - КонецЕсли; - - ТипыВыводимыхВариантов = Новый Массив; - ТипыВыводимыхВариантов.Добавить(Перечисления.ТипыВариантовОтчетов.Пользовательский); - ТипыВыводимыхВариантов.Добавить(Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет); - - Запрос.Параметры.Вставить("КлючОбъекта", ИсходныйКлючОбъекта); - Запрос.Параметры.Вставить("КлючВарианта", ИсходныйКлючВарианта); - Запрос.Параметры.Вставить("ТипыВыводимыхВариантов", ТипыВыводимыхВариантов); - - Варианты.Загрузить(Запрос.Выполнить().Выгрузить()); - - СоздатьНовыйВариантОтчета = 1; - - ПоказываемыеВСписке = Варианты.НайтиСтроки(Новый Структура("ПоказыватьВСписке", Истина)); - ЕстьВариантыДляЗаписи = (ПоказываемыеВСписке.Количество() > 0); - - НайденныеВарианты = Варианты.НайтиСтроки(Новый Структура("КлючВарианта", ИсходныйКлючВарианта)); - Если НайденныеВарианты.Количество() > 0 Тогда + Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() + И ТипЗнч(Параметр) = Тип("Структура") + И Параметр.Свойство("Ссылка") Тогда - // Позиционирование в таблице вариантов на исходном варианте - Вариант = НайденныеВарианты[0]; - Элементы.Варианты.ТекущаяСтрока = Вариант.ПолучитьИдентификатор(); - - // Заполнение параметров варианта по исходному варианту - ВариантНаименование = Вариант.Наименование; - ВариантОписание = Вариант.Описание; - ВариантАвтор = Вариант.Автор; - ВариантБыстрыйДоступ = Вариант.БыстрыйДоступ; - ВариантИсключенияБыстрогоДоступа.Загрузить(Вариант.Ссылка.ИсключенияБыстрогоДоступа.Выгрузить()); - ВариантПодсистемы.Загрузить(Вариант.Ссылка.Подсистемы.Выгрузить()); - - // Перезапись варианта только если есть на это доступ - Если ЕстьВариантыДляЗаписи И (ПравоМенятьЧужиеВарианты ИЛИ ВариантАвтор = ТекущийПользователь) Тогда - СоздатьНовыйВариантОтчета = 0; + Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Ссылка", Параметр.Ссылка)); + Если Найденные.Количество() = 1 Тогда + Вариант = Найденные[0]; + ЗаполнитьЗначенияСвойств(Вариант, Параметр); + Вариант.АвторТекущийПользователь = (Вариант.Автор = ТекущийПользователь); + ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтаФорма); КонецЕсли; - Иначе - - // Заполнение параметров варианта параметрами по умолчанию - ВариантАвтор = ТекущийПользователь; - ВариантБыстрыйДоступ = Ложь; - ВариантИсключенияБыстрогоДоступа.Очистить(); - ВариантИсключенияБыстрогоДоступа.Добавить().Пользователь = ТекущийПользователь; - КонецЕсли; - Если НЕ ЕстьВариантыДляЗаписи Тогда - // Переход к странице записи нового варианта - Элементы.СоздатьНовыйВариантОтчета.Доступность = Ложь; - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПараметровЗаписиВарианта; - - ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма); - КонецЕсли; +КонецПроцедуры - ЗаполнитьПодсистемы(); - - ВидимостьДоступность(ЭтаФорма); - - Элементы.Варианты.ОтборСтрок = Новый ФиксированнаяСтруктура("ПоказыватьВСписке", Истина); +&НаКлиенте +Процедура ПриОткрытии(Отказ) + ТекущийЭлемент = Элементы.Наименование; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ШАПКИ ФОРМЫ &НаКлиенте -Процедура СоздатьНовыйВариантОтчетаПриИзменении(Элемент) - ВидимостьДоступность(ЭтаФорма, "СоздатьНовыйВариантОтчета"); +Процедура НаименованиеПриИзменении(Элемент) + Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Наименование", ВариантНаименование)); + Если Найденные.Количество() > 0 Тогда + Элементы.ВариантыОтчета.ТекущаяСтрока = Найденные[0].ПолучитьИдентификатор(); + ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтаФорма); + Иначе + ВариантСсылка = Неопределено; + УстановитьЧтоБудетДальше(ЭтаФорма, Ложь); + КонецЕсли; КонецПроцедуры &НаКлиенте -Процедура БыстрыйДоступНажатие(Элемент, СтандартнаяОбработка) - СтандартнаяОбработка = Ложь; - - ИсключенияБыстрогоДоступа = Новый СписокЗначений; - Для Каждого СтрокаТаблицы Из ВариантИсключенияБыстрогоДоступа Цикл - ИсключенияБыстрогоДоступа.Добавить(СтрокаТаблицы.Пользователь); - КонецЦикла; - ПараметрыФормы = Новый Структура("БыстрыйДоступ, ИсключенияБыстрогоДоступа", ВариантБыстрыйДоступ, ИсключенияБыстрогоДоступа); - - Структура = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаБыстрогоДоступа", ПараметрыФормы, ЭтаФорма); - Если Структура = Неопределено тогда - Возврат; - КонецЕсли; - - ВариантБыстрыйДоступ = Структура.БыстрыйДоступ; - - ВариантИсключенияБыстрогоДоступа.Очистить(); - Для Каждого ЭлементСписка Из Структура.ИсключенияБыстрогоДоступа Цикл - ВариантИсключенияБыстрогоДоступа.Добавить().Пользователь = ЭлементСписка.Значение; - КонецЦикла; - - ВидимостьДоступность(ЭтаФорма, "БыстрыйДоступ"); +Процедура НаименованиеАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) + Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Наименование", Текст)); + УстановитьЧтоБудетДальше(ЭтаФорма, Найденные.Количество() > 0); КонецПроцедуры &НаКлиенте -Процедура РазделыНажатие(Элемент, СтандартнаяОбработка) +Процедура ТолькоДляАвтораПриИзменении(Элемент) + УстановитьВидимостьПоУмолчанию(ЭтаФорма); +КонецПроцедуры + +&НаКлиенте +Процедура АвторОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; - - ПараметрыФормы = Новый Структура("АдресДереваПодсистем, Подсистемы, НовыйЭлементСправочника"); - ПараметрыФормы.Подсистемы = ВариантПодсистемы; - ПараметрыФормы.НовыйЭлементСправочника = (СоздатьНовыйВариантОтчета = 1); - - ПодготовитьПараметрыНастройкиПодсистем(ПараметрыФормы); - - Результат = ОткрытьФормуМодально("Справочник.ВариантыОтчетов.Форма.НастройкаПодсистем", ПараметрыФормы, ЭтаФорма); - - Если Результат = Неопределено Тогда - Возврат; - КонецЕсли; - - ВариантПодсистемы.Очистить(); - Для Каждого СтрокаТаблицы Из Результат.СписокПодсистем Цикл - ЗаполнитьЗначенияСвойств(ВариантПодсистемы.Добавить(), СтрокаТаблицы); - КонецЦикла; - - ЗафиксироватьРезультатНастройкиПодсистем(Результат); - - ВидимостьДоступность(ЭтаФорма, "Подсистемы"); +КонецПроцедуры + +&НаКлиенте +Процедура ОписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + ОбщегоНазначенияКлиент.ОткрытьФормуРедактированияМногострочногоТекста( + ВариантОписание, + ВариантОписание, + Модифицированность, + НСтр("ru = 'Описание'") + ); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// -// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ Варианты +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ВариантыОтчета &НаКлиенте -Процедура ВариантыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) - ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма); +Процедура ВариантыОтчетаПриАктивизацииСтроки(Элемент) + Если ИдентификаторТекущейСтроки = Элементы.ВариантыОтчета.ТекущаяСтрока Тогда + Возврат; + КонецЕсли; + ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтаФорма); КонецПроцедуры &НаКлиенте -Процедура ВариантыПриАктивизацииСтроки(Элемент) - ВидимостьДоступность(ЭтаФорма, "Варианты"); +Процедура ВариантыОтчетаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) + СтандартнаяОбработка = Ложь; + СохранитьИЗакрыть(); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантыОтчетаПередНачаломИзменения(Элемент, Отказ) + Отказ = Истина; + ОткрытьВариантДляИзменения(); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантыОтчетаПередУдалением(Элемент, Отказ) + Вариант = Элементы.ВариантыОтчета.ТекущиеДанные; + Если Вариант = Неопределено ИЛИ НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + Если НЕ ПолныеПраваНаВарианты И НЕ Вариант.АвторТекущийПользователь Тогда + Отказ = Истина; + Предупреждение(НСтр("ru = 'Недостаточно прав доступа для удаления варианта'") + " " + Вариант.Наименование); + Возврат; + КонецЕсли; + + Если НЕ Вариант.Пользовательский Тогда + Отказ = Истина; + Предупреждение(НСтр("ru = 'Невозможно удалить предопределенный вариант.'")); + Возврат; + КонецЕсли; + + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Пометить ""%1"" на удаление?'"), + Вариант.Наименование + ); + + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); + Если Ответ <> КодВозвратаДиалога.Да Тогда + Отказ = Истина; + Возврат; + КонецЕсли; + + УдалитьВариантНаСервере(Вариант.Ссылка); + ВариантСсылка = Неопределено; + УстановитьЧтоБудетДальше(ЭтаФорма, ЗначениеЗаполнено(ВариантСсылка)); +КонецПроцедуры + +&НаКлиенте +Процедура ВариантыОтчетаПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) + Отказ = Истина; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоПодсистем + +&НаКлиенте +Процедура ДеревоПодсистемИспользованиеПриИзменении(Элемент) + ВариантыОтчетовКлиент.ДеревоПодсистемИспользованиеПриИзменении(ЭтаФорма, Элемент); +КонецПроцедуры + +&НаКлиенте +Процедура ДеревоПодсистемВажностьПриИзменении(Элемент) + ВариантыОтчетовКлиент.ДеревоПодсистемВажностьПриИзменении(ЭтаФорма, Элемент); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ -&НаКлиенте -Процедура Далее(Команда) - ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма); -КонецПроцедуры - &НаКлиенте Процедура Назад(Команда) - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбораВарианта; - ВидимостьДоступность(ЭтаФорма, "ТекущаяСтраница"); + Элементы.Страницы.ТекущаяСтраница = Элементы.Страница1; + Элементы.Назад.Доступность = Ложь; + Элементы.Далее.Заголовок = ""; + Элементы.Далее.Доступность = Истина; КонецПроцедуры &НаКлиенте -Процедура Готово(Команда) - Если НЕ Элементы.ФормаГотово.Доступность Тогда - Возврат; +Процедура Далее(Команда) + Если ПерейтиНаСтраницу2Клиент() Тогда + ПерезаполнитьДерево(); КонецЕсли; - - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбораВарианта Тогда - Если НЕ ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма) Тогда - Возврат; - КонецЕсли; - КонецЕсли; - - Если ВариантНаименование = "" тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Не задано наименование.'"), , "ВариантНаименование"); - Возврат; - КонецЕсли; - - КлючСохраненногоВарианта = СохранитьВариант(СоздатьНовыйВариантОтчета = 1); - Оповестить("Запись_ХранилищеВариантовОтчетов", Новый Структура, ЭтаФорма); - Закрыть(Новый ВыборНастроек(КлючСохраненногоВарианта)); +КонецПроцедуры + +&НаКлиенте +Процедура Сохранить(Команда) + СохранитьИЗакрыть(); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ //////////////////////////////////////////////////////////////////////////////// -// Сервер +// Клиент -&НаСервере -Процедура ЗаполнитьПодсистемы() - УстановитьПривилегированныйРежим(Истина); - - Дерево = Новый ДеревоЗначений; - Дерево.Колонки.Добавить("ПутьКПодсистеме", Новый ОписаниеТипов("Строка")); - Дерево.Колонки.Добавить("Название", Новый ОписаниеТипов("Строка")); - Дерево.Колонки.Добавить("Предопределенная", Новый ОписаниеТипов("Булево")); - Дерево.Колонки.Добавить("Использование", Новый ОписаниеТипов("Булево")); - - ДобавитьВложенныеПодсистемы(Метаданные, Дерево, ""); - - СписокВиртуальныхПодсистем = ВариантыОтчетовПереопределяемый.ОписаниеВиртуальныхПодсистем(); - Для Каждого ЭлементСписка Из СписокВиртуальныхПодсистем Цикл - МассивПодсистем = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ЭлементСписка.Значение, "\"); - Если МассивПодсистем.Количество() > 0 Тогда - СтрокаРодитель = Дерево; - ПутьКПодсистеме = ""; - Для Каждого ИмяПодсистемы Из МассивПодсистем Цикл - ПутьКПодсистеме = ПутьКПодсистеме + ?(ПутьКПодсистеме = "", "", "\") + ИмяПодсистемы; - СтрокаДерева = СтрокаРодитель.Строки.Найти(ПутьКПодсистеме, "ПутьКПодсистеме"); - Если СтрокаДерева = Неопределено Тогда - СтрокаДерева = СтрокаРодитель.Строки.Добавить(); - СтрокаДерева.ПутьКПодсистеме = ПутьКПодсистеме; - СтрокаДерева.Название = ""; - СтрокаДерева.Предопределенная = Ложь; - СтрокаДерева.Использование = Ложь; - КонецЕсли; - СтрокаРодитель = СтрокаДерева; - КонецЦикла; - СтрокаДерева.Название = ЭлементСписка.Представление; - КонецЕсли; - КонецЦикла; - - Для Каждого СтрокаТаблицы Из ВариантПодсистемы Цикл - Найденные = Дерево.Строки.НайтиСтроки(Новый Структура("ПутьКПодсистеме", СтрокаТаблицы.Подсистема), Истина); - Для Каждого СтрокаДерева Из Найденные Цикл - СтрокаДерева.Использование = Истина; - КонецЦикла; - КонецЦикла; - - ЗначениеВРеквизитФормы(Дерево, "ДеревоПодсистем"); -КонецПроцедуры - -&НаСервере -Процедура ДобавитьВложенныеПодсистемы(ОбъектМетаданных, СтрокаРодитель, ПутьРодителя = "") - УстановитьПривилегированныйРежим(Истина); - - Для Каждого Подсистема Из ОбъектМетаданных.Подсистемы Цикл - - Если Не Подсистема.ВключатьВКомандныйИнтерфейс тогда - Продолжить; - КонецЕсли; - - СтрокаДерева = СтрокаРодитель.Строки.Добавить(); - СтрокаДерева.ПутьКПодсистеме = ПутьРодителя + ?(ПутьРодителя = "", "", "\") + Подсистема.Имя; - СтрокаДерева.Название = Подсистема.Синоним; - СтрокаДерева.Предопределенная = Ложь; - СтрокаДерева.Использование = Ложь; - - ДобавитьВложенныеПодсистемы(Подсистема, СтрокаДерева, СтрокаДерева.ПутьКПодсистеме); - - КонецЦикла; - -КонецПроцедуры - -&НаСервере -Функция СохранитьВариант(СоздатьНовый = Истина) - - УстановитьПривилегированныйРежим(Истина); - - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбораВарианта Тогда - Вариант = Варианты.НайтиПоИдентификатору(Элементы.Варианты.ТекущаяСтрока); - ВариантСсылка = Вариант.Ссылка; - КонецЕсли; - - Если СоздатьНовый Тогда - ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); - ВариантОбъект.КлючОбъекта = ИсходныйКлючОбъекта; - ВариантОбъект.КлючВарианта = Строка(Новый УникальныйИдентификатор()); - Если Метаданные.Отчеты.Найти(СтрЗаменить(ИсходныйКлючОбъекта, "Отчет.", "")) = Неопределено Тогда - ВариантОбъект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.ВнешнийОтчет; - Иначе - ВариантОбъект.ТипВариантаОтчета = Перечисления.ТипыВариантовОтчетов.Пользовательский; - КонецЕсли; - Иначе - ВариантОбъект = ВыбранныйВариант.ПолучитьОбъект(); - КонецЕсли; - - ВариантОбъект.Администратор = ВариантАвтор; - ВариантОбъект.Наименование = ВариантНаименование; - ВариантОбъект.ПредставлениеОбъекта = ВариантНаименование; - ВариантОбъект.Описание = ВариантОписание; - ВариантОбъект.БыстрыйДоступ = ВариантБыстрыйДоступ; - ВариантОбъект.ИсключенияБыстрогоДоступа.Загрузить(ВариантИсключенияБыстрогоДоступа.Выгрузить()); - ВариантОбъект.Подсистемы.Загрузить(ВариантПодсистемы.Выгрузить()); - - ВариантОбъект.Записать(); - - Возврат ВариантОбъект.КлючВарианта; -КонецФункции - -&НаСервере -Процедура ПодготовитьПараметрыНастройкиПодсистем(ПараметрыФормы) - - ДеревоЗначений = ДанныеФормыВЗначение(ДеревоПодсистем, Тип("ДеревоЗначений")); - ПараметрыФормы.АдресДереваПодсистем = ПоместитьВоВременноеХранилище(ДеревоЗначений, ЭтаФорма.УникальныйИдентификатор); - -КонецПроцедуры - -&НаСервере -Процедура ЗафиксироватьРезультатНастройкиПодсистем(ВозвращаемыеПараметры) - - ДеревоЗначений = ПолучитьИзВременногоХранилища(ВозвращаемыеПараметры.АдресДереваПодсистем); - ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПодсистем"); - УдалитьИзВременногоХранилища(ВозвращаемыеПараметры.АдресДереваПодсистем); - -КонецПроцедуры - -//////////////////////////////////////////////////////////////////////////////// -// Сервер + Клиент - -&НаКлиентеНаСервереБезКонтекста -Процедура ВидимостьДоступность(ЭтаФорма, Изменения = "") - Элементы = ЭтаФорма.Элементы; - - Если Изменения = "" - ИЛИ Изменения = "Варианты" - ИЛИ Изменения = "ТекущаяСтраница" - ИЛИ Изменения = "СоздатьНовыйВариантОтчета" - Тогда - - // По умолчанию все кнопки неактивны - ДоступностьКнопкиГотово = Ложь; - ДоступностьКнопкиДалее = Ложь; - ДоступностьКнопкиНазад = Ложь; - ДоступностьВариантов = Ложь; - ДоступностьОписания = Истина; - ЗаголовокФормы = ""; - - Если Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаВыбораВарианта Тогда - ЗаголовокФормы = НСтр("ru = 'Сохранить вариант отчета'"); - // Пользователь выбирает вариант - Если ЭтаФорма.СоздатьНовыйВариантОтчета = 1 Тогда - ДоступностьКнопкиДалее = Истина; - ИначеЕсли Элементы.Варианты.ТекущаяСтрока <> Неопределено Тогда - ДоступностьВариантов = Истина; - Вариант = ЭтаФорма.Варианты.НайтиПоИдентификатору(Элементы.Варианты.ТекущаяСтрока); - Если ЭтаФорма.ПравоМенятьЧужиеВарианты - ИЛИ Вариант <> Неопределено И Вариант.Автор = ЭтаФорма.ТекущийПользователь Тогда - // - ДоступностьКнопкиГотово = Истина; - ДоступностьКнопкиДалее = Истина; - КонецЕсли; - КонецЕсли; - Иначе - // Пользователь редактирует настройки варианта - ДоступностьКнопкиНазад = Истина; - ДоступностьКнопкиГотово = Истина; - // Запрещено менять описание предопределенных вариантов - Если ЭтаФорма.СоздатьНовыйВариантОтчета = 1 Тогда - ЗаголовокФормы = НСтр("ru = 'Сохранить новый вариант'"); - Иначе - ЗаголовокФормы = НСтр("ru = 'Перезаписать вариант'"); - Если Элементы.Варианты.ТекущаяСтрока <> Неопределено Тогда - Вариант = ЭтаФорма.Варианты.НайтиПоИдентификатору(Элементы.Варианты.ТекущаяСтрока); - Предопределенный = ПредопределенноеЗначение("Перечисление.ТипыВариантовОтчетов.Предопределенный"); - Отчет = ПредопределенноеЗначение("Перечисление.ТипыВариантовОтчетов.Отчет"); - Если Вариант.ТипВариантаОтчета = Предопределенный ИЛИ Вариант.ТипВариантаОтчета = Отчет Тогда - ДоступностьОписания = Ложь; - КонецЕсли; - КонецЕсли; - КонецЕсли; - КонецЕсли; - - Элементы.ФормаГотово.Доступность = ДоступностьКнопкиГотово; - Элементы.ФормаДалее.Доступность = ДоступностьКнопкиДалее; - Элементы.ФормаНазад.Доступность = ДоступностьКнопкиНазад; - Элементы.Варианты.Доступность = ДоступностьВариантов; - Элементы.ВариантОписание.ТолькоПросмотр = НЕ ДоступностьОписания; - ЭтаФорма.Заголовок = ЗаголовокФормы; - КонецЕсли; - - Если Изменения = "" ИЛИ Изменения = "БыстрыйДоступ" Тогда - ЭтаФорма.БыстрыйДоступ = ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма); - КонецЕсли; - - Если Изменения = "" ИЛИ Изменения = "Подсистемы" Тогда - ЭтаФорма.Разделы = ПредставлениеРазделов(ЭтаФорма); - КонецЕсли; -КонецПроцедуры - -&НаКлиентеНаСервереБезКонтекста -Функция ПодготовитьПараметрыЗаписиВарианта(ЭтаФорма) - Элементы = ЭтаФорма.Элементы; - - Если НЕ Элементы.ФормаДалее.Доступность Тогда +&НаКлиенте +Функция ПерейтиНаСтраницу2Клиент() + Если НЕ ЗначениеЗаполнено(ВариантНаименование) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + НСтр("ru = 'Поле ""Наименование"" не заполнено'"), + , + "ВариантНаименование" + ); Возврат Ложь; КонецЕсли; - ТекущийПользователь = ЭтаФорма.ТекущийПользователь; - - // Создание нового варианта от перезаписи текущего отличается - // только процессом получения объекта и заполнением ключей ключа варианта - Если ЭтаФорма.СоздатьНовыйВариантОтчета = 1 тогда - - ЭтаФорма.ВариантАвтор = ТекущийПользователь; - ЭтаФорма.ВариантБыстрыйДоступ = Ложь; - ЭтаФорма.ВариантИсключенияБыстрогоДоступа.Очистить(); - ЭтаФорма.ВариантИсключенияБыстрогоДоступа.Добавить().Пользователь = ТекущийПользователь; - - ВидимостьДоступность(ЭтаФорма, "БыстрыйДоступ"); - - Иначе - - Идентификатор = Элементы.Варианты.ТекущаяСтрока; - Если Идентификатор = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Выберите вариант.'"), , "Варианты"); + Если ЗначениеЗаполнено(ВариантСсылка) Тогда + Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Ссылка", ВариантСсылка)); + Вариант = Найденные[0]; + Если НЕ ПравоЗаписиВарианта(Вариант, ПравоНастройкиВарианта(Вариант, ПолныеПраваНаВарианты)) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав на изменение варианта ""%1"", необходимо выбрать другой вариант или изменить Наименование.'"), + ВариантНаименование + ), + , + "ВариантНаименование" + ); Возврат Ложь; КонецЕсли; - Вариант = ЭтаФорма.Варианты.НайтиПоИдентификатору(Идентификатор); - Если Вариант = Неопределено Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Выберите вариант.'"), , "Варианты"); - Возврат Ложь; - КонецЕсли; - Если НЕ ЭтаФорма.ПравоМенятьЧужиеВарианты И Вариант.Автор <> ТекущийПользователь Тогда - ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Изменять вариант может только автор.'"), , "Варианты"); - Возврат Ложь; - КонецЕсли; - ЭтаФорма.ВыбранныйВариант = Вариант.Ссылка; + ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Заменить ранее сохраненный вариант отчета ""%1""?'"), + ВариантНаименование + ); - ЭтаФорма.ВариантНаименование = Вариант.Наименование; - ЭтаФорма.ВариантОписание = Вариант.Описание; + Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); + Если Ответ <> КодВозвратаДиалога.Да Тогда + Возврат Ложь; + КонецЕсли; КонецЕсли; - Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПараметровЗаписиВарианта; + // Для внешних отчетов выполняются только проверки заполнения, без переключения страницы. + Если ОтчетИнформация.ЭтоВнешний Тогда + Возврат Истина; + КонецЕсли; - ВидимостьДоступность(ЭтаФорма, "ТекущаяСтраница"); + // Для отчетов конфигурации переключается страница. + Если ВариантТолькоДляАвтора Тогда + ВариантВидимостьПоУмолчанию = Ложь; + Элементы.ВидимостьПоУмолчанию.Видимость = Ложь; + Иначе + Элементы.ВидимостьПоУмолчанию.Видимость = Истина; + КонецЕсли; + + Элементы.Страницы.ТекущаяСтраница = Элементы.Страница2; + Элементы.Назад.Доступность = Истина; + Элементы.Далее.Доступность = Ложь; Возврат Истина; КонецФункции -&НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеНастроекБыстрогоДоступа(ЭтаФорма) - ВариантБыстрыйДоступ = ЭтаФорма.ВариантБыстрыйДоступ; - ВариантИсключенияБыстрогоДоступа = ЭтаФорма.ВариантИсключенияБыстрогоДоступа; - - Результат = ""; - Для Каждого СтрокаТаблицы Из ВариантИсключенияБыстрогоДоступа Цикл - ПредставлениеСтроки = СокрЛП(Строка(СтрокаТаблицы.Пользователь)); - Если ПредставлениеСтроки <> "" Тогда - Если Результат = "" Тогда - Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все кроме:'") +" ", ""); - Результат = Результат + ПредставлениеСтроки; - Иначе - Результат = Результат +", "+ ПредставлениеСтроки; - КонецЕсли; +&НаКлиенте +Процедура ОткрытьВариантДляИзменения() + Вариант = Элементы.ВариантыОтчета.ТекущиеДанные; + Если Вариант = Неопределено ИЛИ НЕ ЗначениеЗаполнено(Вариант.Ссылка) Тогда + Возврат; + КонецЕсли; + Если НЕ ПравоНастройкиВарианта(Вариант, ПолныеПраваНаВарианты) Тогда + Предупреждение( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Недостаточно прав доступа для изменения варианта ""%1"".'"), + Вариант.Наименование + ) + ); + Возврат; + КонецЕсли; + ОткрытьЗначение(Вариант.Ссылка); +КонецПроцедуры + +&НаКлиенте +Процедура СохранитьИЗакрыть() + Страница2Заполнена = (Элементы.Страницы.ТекущаяСтраница = Элементы.Страница2); + Если НЕ Страница2Заполнена Тогда + Если НЕ ПерейтиНаСтраницу2Клиент() Тогда + Возврат; КонецЕсли; - КонецЦикла; - - Если Результат = "" Тогда - Результат = ?(ВариантБыстрыйДоступ, НСтр("ru = 'Все'"), НСтр("ru = 'Пользователи не выбраны'")); КонецЕсли; - Возврат Результат; -КонецФункции + Если ПроверитьИЗаписатьНаСервере(Страница2Заполнена) И ЗначениеЗаполнено(ВариантКлючВарианта) Тогда + + ВариантыОтчетовКлиент.ОбновитьОткрытыеПанелиОтчетов(, ИмяФормы); + + Закрыть(Новый ВыборНастроек(ВариантКлючВарианта)); + + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Клиент и сервер &НаКлиентеНаСервереБезКонтекста -Функция ПредставлениеРазделов(ЭтаФорма) - ВариантПодсистемы = ЭтаФорма.ВариантПодсистемы; +Процедура ВариантыОтчетаОбработчикАктивизацииСтроки(ЭтаФорма) + ЭтаФорма.ИдентификаторТекущейСтроки = ЭтаФорма.Элементы.ВариантыОтчета.ТекущаяСтрока; - Результат = ""; - Для Каждого СтрокаТаблицы Из ВариантПодсистемы Цикл - ПредставлениеСтроки = СокрЛП(СтрокаТаблицы.Название); - Если ПредставлениеСтроки <> "" Тогда - Результат = Результат + ПредставлениеСтроки + ", "; - КонецЕсли; - КонецЦикла; + Вариант = ЭтаФорма.ВариантыОтчета.НайтиПоИдентификатору(ЭтаФорма.ИдентификаторТекущейСтроки); + Если Вариант = Неопределено Тогда + Возврат; + КонецЕсли; - Если Результат = "" Тогда - Результат = НСтр("ru = 'Разделы не выбраны'"); + ПравоНастройкиВарианта = ПравоНастройкиВарианта(Вариант, ЭтаФорма.ПолныеПраваНаВарианты); + ПравоЗаписиВарианта = ПравоЗаписиВарианта(Вариант, ПравоНастройкиВарианта); + ЭтаФорма.Элементы.ВариантыОтчетаИзменить.Доступность = ПравоНастройкиВарианта; + ЭтаФорма.Элементы.ВариантыОтчетаУдалить.Доступность = ПравоЗаписиВарианта; + Если ПравоЗаписиВарианта Тогда + ЭтаФорма.ВариантНаименование = Вариант.Наименование; + ЭтаФорма.ВариантТолькоДляАвтора = Вариант.ТолькоДляАвтора; + ЭтаФорма.ВариантАвтор = Вариант.Автор; + ЭтаФорма.ВариантСсылка = Вариант.Ссылка; + ЭтаФорма.ВариантОписание = Вариант.Описание; Иначе - Результат = Лев(Результат, СтрДлина(Результат)-2); + ЭтаФорма.ВариантНаименование = СформироватьСвободноеНаименование(Вариант, ЭтаФорма.ВариантыОтчета); + ЭтаФорма.ВариантТолькоДляАвтора = Истина; + ЭтаФорма.ВариантАвтор = ЭтаФорма.ТекущийПользователь; + ЭтаФорма.ВариантСсылка = Неопределено; + ЭтаФорма.ВариантОписание = ""; КонецЕсли; - Возврат Результат; + УстановитьЧтоБудетДальше(ЭтаФорма, ЗначениеЗаполнено(ЭтаФорма.ВариантСсылка)); + УстановитьВидимостьПоУмолчанию(ЭтаФорма); +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Функция ПравоНастройкиВарианта(Вариант, ПолныеПраваНаВарианты) + Возврат (ПолныеПраваНаВарианты ИЛИ Вариант.АвторТекущийПользователь) И ЗначениеЗаполнено(Вариант.Ссылка); КонецФункции +&НаКлиентеНаСервереБезКонтекста +Функция ПравоЗаписиВарианта(Вариант, ПравоНастройкиВарианта) + Возврат Вариант.Пользовательский И ПравоНастройкиВарианта; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Функция СформироватьСвободноеНаименование(Вариант, ВариантыОтчета) + ШаблонИмениВарианта = СокрЛП(Вариант.Наименование) +" - "+ НСтр("ru = 'копия'"); + + СвободноеНаименование = ШаблонИмениВарианта; + Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Наименование", СвободноеНаименование)); + Если Найденные.Количество() = 0 Тогда + Возврат СвободноеНаименование; + КонецЕсли; + + ШаблонИмениВарианта = ШаблонИмениВарианта +" (%1)"; + НомерВарианта = 1; + Пока Истина Цикл + НомерВарианта = НомерВарианта + 1; + СвободноеНаименование = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + ШаблонИмениВарианта, + Формат(НомерВарианта, "") + ); + Найденные = ВариантыОтчета.НайтиСтроки(Новый Структура("Наименование", СвободноеНаименование)); + Если Найденные.Количество() = 0 Тогда + Возврат СвободноеНаименование; + КонецЕсли; + КонецЦикла; +КонецФункции + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьВидимостьПоУмолчанию(ЭтаФорма) + ЭтаФорма.Элементы.ВидимостьПоУмолчанию.Видимость = НЕ (ЭтаФорма.ОтчетИнформация.ЭтоВнешний И ЭтаФорма.ВариантТолькоДляАвтора); + Если ЭтаФорма.ВариантТолькоДляАвтора Тогда + ЭтаФорма.ВариантВидимостьПоУмолчанию = Ложь; + КонецЕсли; +КонецПроцедуры + +&НаКлиентеНаСервереБезКонтекста +Процедура УстановитьЧтоБудетДальше(ЭтаФорма, Перезапись) + Если Перезапись Тогда + ЭтаФорма.Элементы.ПерезаписьИлиНовый.ТекущаяСтраница = ЭтаФорма.Элементы.Перезапись; + Иначе + ЭтаФорма.Элементы.ПерезаписьИлиНовый.ТекущаяСтраница = ЭтаФорма.Элементы.Новый; + КонецЕсли; +КонецПроцедуры + +//////////////////////////////////////////////////////////////////////////////// +// Вызов сервера + +&НаСервереБезКонтекста +Процедура УдалитьВариантНаСервере(Ссылка) + ВариантОбъект = Ссылка.ПолучитьОбъект(); + ВариантОбъект.УстановитьПометкуУдаления(Истина); +КонецПроцедуры + +&НаСервере +Функция ПерезаполнитьДерево() + Если ЗначениеЗаполнено(ВариантСсылка) Тогда + ВариантОснование = ВариантСсылка; + Иначе + ВариантОснование = ПрототипСсылка; + КонецЕсли; + + ДеревоПриемник = ВариантыОтчетов.ДеревоПодсистемСформировать(ЭтаФорма, ВариантОснование); + + Найденные = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("Использование", 1), Истина); + Для Каждого Приемник Из Найденные Цикл + Приемник.ИспользованиеПоУмолчанию = 0; + Приемник.ВажностьПоУмолчанию = ""; + Приемник.ИзмененПользователем = Истина; + КонецЦикла; + + ЗначениеВРеквизитФормы(ДеревоПриемник, "ДеревоПодсистем"); + + Возврат Истина; +КонецФункции + +&НаСервере +Функция ПроверитьИЗаписатьНаСервере(Страница2Заполнена) + Если НЕ Страница2Заполнена И НЕ ОтчетИнформация.ЭтоВнешний Тогда + ПерезаполнитьДерево(); + КонецЕсли; + + ВариантЭтоНовый = НЕ ЗначениеЗаполнено(ВариантСсылка); + + Если ВариантЭтоНовый И ВариантыОтчетов.НаименованиеЗанято(ОтчетИнформация.Отчет, ВариантСсылка, ВариантНаименование) Тогда + ОбщегоНазначенияКлиентСервер.СообщитьПользователю( + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = '""%1"" занято, необходимо указать другое Наименование.'"), + ВариантНаименование + ), + , + "ВариантНаименование" + ); + Возврат Ложь; + КонецЕсли; + + Если ВариантЭтоНовый Тогда + ВариантОбъект = Справочники.ВариантыОтчетов.СоздатьЭлемент(); + ВариантОбъект.Отчет = ОтчетИнформация.Отчет; + ВариантОбъект.ТипОтчета = ОтчетИнформация.ТипОтчета; + ВариантОбъект.КлючВарианта = Строка(Новый УникальныйИдентификатор()); + ВариантОбъект.Пользовательский = Истина; + Иначе + ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); + КонецЕсли; + + Если ОтчетИнформация.ЭтоВнешний Тогда + ВариантОбъект.Размещение.Очистить(); + Иначе + ВариантыОтчетов.ДеревоПодсистемЗаписать(ЭтаФорма, ВариантОбъект); + КонецЕсли; + + ВариантОбъект.Автор = ВариантАвтор; + ВариантОбъект.Наименование = ВариантНаименование; + ВариантОбъект.Описание = ВариантОписание; + ВариантОбъект.ТолькоДляАвтора = ВариантТолькоДляАвтора; + + Если ОтчетИнформация.ЭтоВнешний Тогда + ВариантОбъект.ВидимостьПоУмолчанию = Ложь; + Иначе + ВариантОбъект.ВидимостьПоУмолчанию = ВариантВидимостьПоУмолчанию; + КонецЕсли; + + ВариантОбъект.Записать(); + + ВариантСсылка = ВариантОбъект.Ссылка; + ВариантКлючВарианта = ВариантОбъект.КлючВарианта; + Возврат Истина; +КонецФункции + +//////////////////////////////////////////////////////////////////////////////// +// Сервер + +&НаСервере +Процедура ДобавитьПредопределенныеВариантыВнешнегоОтчета() + + Если НЕ ОтчетИнформация.ЭтоВнешний Тогда + Возврат; + КонецЕсли; + + Попытка + ОтчетОбъект = ВнешниеОтчеты.Создать(ОтчетИнформация.ОтчетИмя); + Исключение + ВариантыОтчетов.ОшибкаПоВарианту(Неопределено, + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( + НСтр("ru = 'Не удалось получить список предопределенных вариантов + |внешнего отчета ""%1"":'"), + ОтчетИнформация.ОтчетИмя + ) + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()) + ); + Возврат; + КонецПопытки; + + Если ОтчетОбъект.СхемаКомпоновкиДанных = Неопределено Тогда + Возврат; + КонецЕсли; + + Для Каждого ВариантНастроекКД Из ОтчетОбъект.СхемаКомпоновкиДанных.ВариантыНастроек Цикл + Вариант = ВариантыОтчета.Добавить(); + Вариант.Пользовательский = Ложь; + Вариант.Наименование = ВариантНастроекКД.Представление; + Вариант.КлючВарианта = ВариантНастроекКД.Имя; + Вариант.ТолькоДляАвтора = Ложь; + Вариант.АвторТекущийПользователь = Ложь; + КонецЦикла; + +КонецПроцедуры diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl index eec35d798..73f86f999 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ManagerModule.bsl @@ -2,66 +2,66 @@ // ПРОГРАММНЫЙ ИНТЕРФЕЙС // Удаляет настройку из хранилища. -// +// // Параметры: -// КлючОбъекта - (...) Ключ объекта настройки. -// |- (Неопределено) - Удаляются настройки всех отчетов. -// |- (Строка) - Полное имя отчета с точкой. -// КлючНастроек - (...) Ключ удаляемых настроек. -// |- (Неопределено) - Удаляются все варианты отчета. -// |- (Строка) - Ключ варианта отчета. -// Пользователь - (...) Пользователь, настройки которого удаляются. -// |- (Неопределено) - Удаляются настройки всех пользователей -// |- (Строка) - Имя пользователя ИБ -// |- (УникальныйИдентификатор) - Идентификатор пользователя ИБ -// |- (ПользовательИнформационнойБазы) - Пользователь ИБ -// |- (СправочникСсылка.Пользователи) - Пользователь +// КлючОтчета (...) Ключ объекта настройки. +// |- (Неопределено) Удаляются настройки всех отчетов. +// |- (Строка) Полное имя отчета с точкой. +// КлючВарианта (...) Ключ удаляемых настроек. +// |- (Неопределено) Удаляются все варианты отчета. +// |- (Строка) Ключ варианта отчета. +// Пользователь (...) Пользователь, настройки которого удаляются. +// |- (Неопределено) Удаляются настройки всех пользователей +// |- (Строка) Имя пользователя ИБ +// |- (УникальныйИдентификатор) Идентификатор пользователя ИБ +// |- (ПользовательИнформационнойБазы) Пользователь ИБ +// |- (СправочникСсылка.Пользователи) Пользователь // // Подробнее - см. СтандартноеХранилищеНастроекМенеджер.Удалить() // -Процедура Удалить(КлючОбъекта, КлючНастроек, Пользователь) Экспорт - - ВариантыОтчетов.ПравоИзмененияВариантов(КлючОбъекта, Истина); +Процедура Удалить(КлючОтчета, КлючВарианта, Пользователь) Экспорт +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда ТекстЗапроса = - "ВЫБРАТЬ РАЗЛИЧНЫЕ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | Варианты.Ссылка |ИЗ | Справочник.ВариантыОтчетов КАК Варианты |ГДЕ - | Варианты.КлючОбъекта = &КлючОбъекта - | И Варианты.Администратор = &Администратор - | И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID + | Варианты.Отчет = &Отчет + | И Варианты.Автор = &Автор + | И Варианты.Автор.ИдентификаторПользователяИБ = &GUID | И Варианты.КлючВарианта = &КлючВарианта | И Варианты.ПометкаУдаления = ЛОЖЬ - | И Варианты.ТипВариантаОтчета <> &ТипПредопределенный - | И Варианты.ТипВариантаОтчета <> &ТипОтчет"; + | И Варианты.Пользовательский = ИСТИНА"; Запрос = Новый Запрос; - Запрос.УстановитьПараметр("ТипПредопределенный", Перечисления.ТипыВариантовОтчетов.Предопределенный); - Запрос.УстановитьПараметр("ТипОтчет", Перечисления.ТипыВариантовОтчетов.Отчет); - Если КлючОбъекта = Неопределено Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Варианты.КлючОбъекта = &КлючОбъекта", "ИСТИНА"); + Если КлючОтчета = Неопределено Тогда + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Варианты.Отчет = &Отчет", "ИСТИНА"); Иначе - Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОтчета); + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ВызватьИсключение ОтчетИнформация.ТекстОшибки; + КонецЕсли; + Запрос.УстановитьПараметр("Отчет", ОтчетИнформация.Отчет); КонецЕсли; - Если КлючНастроек = Неопределено Тогда + Если КлючВарианта = Неопределено Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.КлючВарианта = &КлючВарианта", ""); Иначе - Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); + Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); КонецЕсли; Если Пользователь = Неопределено Тогда - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Администратор = &Администратор", ""); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Автор = &Автор", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Автор.ИдентификаторПользователяИБ = &GUID", ""); ИначеЕсли ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда Запрос.УстановитьПараметр("Администратор", Пользователь); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Автор.ИдентификаторПользователяИБ = &GUID", ""); Иначе @@ -69,7 +69,7 @@ ИдентификаторПользователя = Пользователь; Иначе Если ТипЗнч(Пользователь) = Тип("Строка") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); Если ПользовательИБ = Неопределено Тогда Возврат; КонецЕсли; @@ -82,77 +82,81 @@ КонецЕсли; Запрос.УстановитьПараметр("GUID", ИдентификаторПользователя); - ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Администратор = &Администратор", ""); + ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "И Варианты.Автор = &Автор", ""); КонецЕсли; Запрос.Текст = ТекстЗапроса; - УстановитьПривилегированныйРежим(Истина); - Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); ВариантОбъект.УстановитьПометкуУдаления(Истина); КонецЦикла; - УстановитьПривилегированныйРежим(Ложь); - +#КонецЕсли + КонецПроцедуры // Получает список настроек из хранилища. Значениями элементов списка являются ключи настроек. -// +// // Параметры: -// КлючОбъекта - (Строка) Полное имя отчета с точкой. -// Пользователь - (...) Пользователь, настройки которого получаются. Необязательный параметр. -// |- (Неопределено) - Получаются настройки текущего пользователя -// |- (Строка) - Имя пользователя ИБ -// |- (УникальныйИдентификатор) - Идентификатор пользователя ИБ -// |- (ПользовательИнформационнойБазы) - Пользователь ИБ -// |- (СправочникСсылка.Пользователи) - Пользователь +// КлючОтчета (Строка) Полное имя отчета с точкой. +// Пользователь (...) Пользователь, настройки которого получаются. Необязательный параметр. +// |- (Неопределено) Получаются настройки текущего пользователя +// |- (Строка) Имя пользователя ИБ +// |- (УникальныйИдентификатор) Идентификатор пользователя ИБ +// |- (ПользовательИнформационнойБазы) Пользователь ИБ +// |- (СправочникСсылка.Пользователи) Пользователь // // Отличия от механизма платформы: // Вместо права "АдминистрированиеДанных" проверяются права доступа к отчету. -// +// // Возвращаемое значение: -// (СписокЗначений) - список вариантов отчета -// |- Значение - (Строка) Ключ варианта. -// |- Представление - (Строка) Представление варианта. -// -Функция ПолучитьСписок(КлючОбъекта, Пользователь = Неопределено) Экспорт +// (СписокЗначений) Список вариантов отчета +// |- Значение (Строка) Ключ варианта. +// |- Представление (Строка) Представление варианта. +// +Функция ПолучитьСписок(КлючОтчета, Пользователь = Неопределено) Экспорт Результат = Новый СписокЗначений; - ВариантыОтчетов.ПравоИзмененияВариантов(КлючОбъекта, Истина); +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + Если ТипЗнч(КлючОтчета) = Тип("Строка") Тогда + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОтчета); + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ВызватьИсключение ОтчетИнформация.ТекстОшибки; + КонецЕсли; + ОтчетСсылка = ОтчетИнформация.Отчет; + Иначе + ОтчетСсылка = КлючОтчета; + КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ РАЗЛИЧНЫЕ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | Варианты.КлючВарианта, - | Варианты.Представление + | Варианты.Наименование |ИЗ | Справочник.ВариантыОтчетов КАК Варианты |ГДЕ - | Варианты.КлючОбъекта = &КлючОбъекта - | И Варианты.Администратор = &Администратор - | И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID + | Варианты.Отчет = &Отчет + | И Варианты.Автор = &Администратор + | И Варианты.Автор.ИдентификаторПользователяИБ = &GUID | И Варианты.ПометкаУдаления = ЛОЖЬ - | И Варианты.ТипВариантаОтчета <> &ТипПредопределенный - | И Варианты.ТипВариантаОтчета <> &ТипОтчет"; - Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); - Запрос.УстановитьПараметр("ТипПредопределенный", Перечисления.ТипыВариантовОтчетов.Предопределенный); - Запрос.УстановитьПараметр("ТипОтчет", Перечисления.ТипыВариантовОтчетов.Отчет); + | И Варианты.Пользовательский = ИСТИНА"; + Запрос.УстановитьПараметр("Отчет", ОтчетСсылка); ТекущийПользователь = Пользователи.ТекущийПользователь(); Если Пользователь = Неопределено Тогда Запрос.УстановитьПараметр("Администратор", ТекущийПользователь); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID", ""); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Автор.ИдентификаторПользователяИБ = &GUID", ""); ИначеЕсли ТипЗнч(Пользователь) = Тип("СправочникСсылка.Пользователи") Тогда Запрос.УстановитьПараметр("Администратор", Пользователь); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Администратор.ИдентификаторПользователяИБ = &GUID", ""); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Автор.ИдентификаторПользователяИБ = &GUID", ""); Иначе @@ -160,7 +164,9 @@ ИдентификаторПользователя = Пользователь; Иначе Если ТипЗнч(Пользователь) = Тип("Строка") Тогда - ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); + УстановитьПривилегированныйРежим(Истина); + ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(Пользователь); + УстановитьПривилегированныйРежим(Ложь); Если ПользовательИБ = Неопределено Тогда Возврат Результат; КонецЕсли; @@ -173,177 +179,206 @@ КонецЕсли; Запрос.УстановитьПараметр("GUID", ИдентификаторПользователя); - Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Администратор = &Администратор", ""); + Запрос.Текст = СтрЗаменить(Запрос.Текст, "И Варианты.Автор = &Администратор", ""); КонецЕсли; - УстановитьПривилегированныйРежим(Истина); - ТаблицаВариантов = Запрос.Выполнить().Выгрузить(); Для Каждого СтрокаТаблицы Из ТаблицаВариантов Цикл - Результат.Добавить(СтрокаТаблицы.КлючВарианта, СтрокаТаблицы.Представление); + Результат.Добавить(СтрокаТаблицы.КлючВарианта, СтрокаТаблицы.Наименование); КонецЦикла; - УстановитьПривилегированныйРежим(Ложь); - Возврат Результат; +#КонецЕсли КонецФункции //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + // Обработчик чтения настроек варианта отчета -// +// // Параметры: -// КлючОбъекта - (Строка) Полное имя отчета с точкой -// КлючНастроек - (Строка) Ключ варианта отчета -// Настройки - (*) Настройки варианта отчета -// ОписаниеНастроек - (ОписаниеНастроек) -// Пользователь - (Строка) Имя пользователя ИБ +// КлючОтчета (Строка) Полное имя отчета с точкой +// КлючВарианта (Строка) Ключ варианта отчета +// Настройки (*) Настройки варианта отчета +// ОписаниеНастроек (ОписаниеНастроек) +// Пользователь (Строка) Имя пользователя ИБ // Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. // Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. // -Процедура ОбработкаЗагрузки(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, Пользователь) +Процедура ОбработкаЗагрузки(КлючОтчета, КлючВарианта, Настройки, ОписаниеНастроек, Пользователь) + + Если ТипЗнч(КлючОтчета) = Тип("Строка") Тогда + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОтчета); + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ВызватьИсключение ОтчетИнформация.ТекстОшибки; + КонецЕсли; + ОтчетСсылка = ОтчетИнформация.Отчет; + Иначе + ОтчетСсылка = КлючОтчета; + КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ВариантыОтчетов.Наименование, - | ВариантыОтчетов.ХранилищеЗначений + | ВариантыОтчетов.Настройки |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ - | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта + | ВариантыОтчетов.Отчет = &Отчет | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; - Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); - Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); - - УстановитьПривилегированныйРежим(Истина); + Запрос.УстановитьПараметр("Отчет", ОтчетСсылка); + Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда + Если ОписаниеНастроек = Неопределено Тогда + ОписаниеНастроек = Новый ОписаниеНастроек; + ОписаниеНастроек.КлючОбъекта = КлючОтчета; + ОписаниеНастроек.КлючНастроек = КлючВарианта; + ОписаниеНастроек.Пользователь = Пользователь; + КонецЕсли; ОписаниеНастроек.Представление = Выборка.Наименование; - Настройки = Выборка.ХранилищеЗначений.Получить(); + Настройки = Выборка.Настройки.Получить(); КонецЕсли; - - УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры // Обработчик записи настроек варианта отчета -// +// // Параметры: -// КлючОбъекта - (Строка) Полное имя отчета с точкой -// КлючНастроек - (Строка) Ключ варианта отчета -// Настройки - (*) Настройки варианта отчета -// ОписаниеНастроек - (ОписаниеНастроек, Неопределено) -// Пользователь - (Строка, Неопределено) Имя пользователя ИБ +// КлючОтчета (Строка) Полное имя отчета с точкой +// КлючВарианта (Строка) Ключ варианта отчета +// Настройки (*) Настройки варианта отчета +// ОписаниеНастроек (ОписаниеНастроек, Неопределено) +// Пользователь (Строка, Неопределено) Имя пользователя ИБ // Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. // Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. // -Процедура ОбработкаСохранения(КлючОбъекта, КлючНастроек, Настройка, ОписаниеНастроек, Пользователь) +Процедура ОбработкаСохранения(КлючОтчета, КлючВарианта, Настройки, ОписаниеНастроек, Пользователь) + + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОтчета); + + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ВызватьИсключение ОтчетИнформация.ТекстОшибки; + КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ + "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВариантыОтчетов.Ссылка |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ - | ВариантыОтчетов.КлючОбъекта = &КлючОбъекта + | ВариантыОтчетов.Отчет = &Отчет | И ВариантыОтчетов.КлючВарианта = &КлючВарианта"; - Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); - Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); - - УстановитьПривилегированныйРежим(Истина); + Запрос.УстановитьПараметр("Отчет", ОтчетИнформация.Отчет); + Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ВариантОбъект = Выборка.Ссылка.ПолучитьОбъект(); - ВариантОбъект.ХранилищеЗначений = Новый ХранилищеЗначения(Настройка); + ВариантОбъект.Настройки = Новый ХранилищеЗначения(Настройки); Если ОписаниеНастроек <> Неопределено Тогда ВариантОбъект.Наименование = ОписаниеНастроек.Представление; КонецЕсли; ВариантОбъект.Записать(); КонецЕсли; - УстановитьПривилегированныйРежим(Ложь); - КонецПроцедуры // Обработчик получения описания настроек варианта отчета -// +// // Параметры: -// КлючОбъекта - (Строка) Полное имя отчета с точкой -// КлючНастроек - (Строка) Ключ варианта отчета -// ОписаниеНастроек - (ОписаниеНастроек) -// Пользователь - (Строка, Неопределено) Имя пользователя ИБ +// КлючОтчета (Строка) Полное имя отчета с точкой +// КлючВарианта (Строка) Ключ варианта отчета +// ОписаниеНастроек (ОписаниеНастроек) +// Пользователь (Строка, Неопределено) Имя пользователя ИБ // Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. // Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. // -Процедура ОбработкаПолученияОписания(КлючОбъекта, КлючНастроек, ОписаниеНастроек, Пользователь) +Процедура ОбработкаПолученияОписания(КлючОтчета, КлючВарианта, ОписаниеНастроек, Пользователь) + + Если ТипЗнч(КлючОтчета) = Тип("Строка") Тогда + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОтчета); + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ВызватьИсключение ОтчетИнформация.ТекстОшибки; + КонецЕсли; + ОтчетСсылка = ОтчетИнформация.Отчет; + Иначе + ОтчетСсылка = КлючОтчета; + КонецЕсли; Если ОписаниеНастроек = Неопределено Тогда ОписаниеНастроек = Новый ОписаниеНастроек; КонецЕсли; - ОписаниеНастроек.КлючОбъекта = КлючОбъекта; - ОписаниеНастроек.КлючНастроек = КлючНастроек; + ОписаниеНастроек.КлючОбъекта = КлючОтчета; + ОписаниеНастроек.КлючНастроек = КлючВарианта; Если ТипЗнч(Пользователь) = Тип("Строка") Тогда - ОписаниеНастроек.Пользователь = Пользователь; - КонецЕсли; - - Если НЕ ВариантыОтчетов.ПравоИзмененияВариантов(КлючОбъекта) Тогда - Возврат; + ОписаниеНастроек.Пользователь = Пользователь; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 - | Варианты.Представление КАК Представление + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 + | Варианты.Представление КАК Представление, + | Варианты.ПометкаУдаления, + | Варианты.Пользовательский |ИЗ | Справочник.ВариантыОтчетов КАК Варианты |ГДЕ - | Варианты.КлючОбъекта = &КлючОбъекта + | Варианты.Отчет = &Отчет | И Варианты.КлючВарианта = &КлючВарианта"; - Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); - Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); + Запрос.УстановитьПараметр("Отчет", ОтчетСсылка); + Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); - УстановитьПривилегированныйРежим(Истина); - ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); - УстановитьПривилегированныйРежим(Ложь); + Выборка = Запрос.Выполнить().Выбрать(); - Если ТаблицаЗначений.Количество() = 1 Тогда - ОписаниеНастроек.Представление = ТаблицаЗначений[0].Представление; + Если Выборка.Следующий() Тогда + ОписаниеНастроек.Представление = Выборка.Представление; + ОписаниеНастроек.ДополнительныеСвойства.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления); + ОписаниеНастроек.ДополнительныеСвойства.Вставить("Пользовательский", Выборка.Пользовательский); КонецЕсли; КонецПроцедуры // Обработчик установки описания настроек варианта отчета -// +// // Параметры: -// КлючОбъекта - (Строка) Полное имя отчета с точкой -// КлючНастроек - (Строка) Ключ варианта отчета -// ОписаниеНастроек - (ОписаниеНастроек) -// Пользователь - (Строка) Имя пользователя ИБ. +// КлючОтчета (Строка) Полное имя отчета с точкой +// КлючВарианта (Строка) Ключ варианта отчета +// ОписаниеНастроек (ОписаниеНастроек) +// Пользователь (Строка) Имя пользователя ИБ. // Не используется, так как подсистема "Варианты отчетов" не разделяет варианты по авторам. // Уникальность хранения и выборки гарантируется уникальностью пар ключей отчетов и вариантов. // -Процедура ОбработкаУстановкиОписания(КлючОбъекта, КлючНастроек, ОписаниеНастроек, Пользователь) +Процедура ОбработкаУстановкиОписания(КлючОтчета, КлючВарианта, ОписаниеНастроек, Пользователь) + + Если ТипЗнч(КлючОтчета) = Тип("Строка") Тогда + ОтчетИнформация = ВариантыОтчетов.СформироватьИнформациюОбОтчетеПоПолномуИмени(КлючОтчета); + Если ТипЗнч(ОтчетИнформация.ТекстОшибки) = Тип("Строка") Тогда + ВызватьИсключение ОтчетИнформация.ТекстОшибки; + КонецЕсли; + ОтчетСсылка = ОтчетИнформация.Отчет; + Иначе + ОтчетСсылка = КлючОтчета; + КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = - "ВЫБРАТЬ ПЕРВЫЕ 1 + "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | Варианты.Ссылка |ИЗ | Справочник.ВариантыОтчетов КАК Варианты |ГДЕ - | Варианты.КлючОбъекта = &КлючОбъекта + | Варианты.Отчет = &Отчет | И Варианты.КлючВарианта = &КлючВарианта"; - Запрос.УстановитьПараметр("КлючОбъекта", КлючОбъекта); - Запрос.УстановитьПараметр("КлючВарианта", КлючНастроек); - - УстановитьПривилегированныйРежим(Истина); + Запрос.УстановитьПараметр("Отчет", ОтчетСсылка); + Запрос.УстановитьПараметр("КлючВарианта", КлючВарианта); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда @@ -352,7 +387,6 @@ ВариантОбъект.Записать(); КонецЕсли; - УстановитьПривилегированныйРежим(Ложь); - КонецПроцедуры +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo index 246ee6605..357d2b38b 100644 --- a/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo +++ b/SSL/src/SettingsStorages/ХранилищеВариантовОтчетов/ХранилищеВариантовОтчетов.mdo @@ -1,7 +1,7 @@ - + ХранилищеВариантовОтчетов @@ -10,20 +10,6 @@ SettingsStorage.ХранилищеВариантовОтчетов.Form.СохранениеВариантаОтчета SettingsStorage.ХранилищеВариантовОтчетов.Form.ВыборВариантаОтчета - - СохранениеВариантаОтчета - - ru - Сохранение варианта отчета - - - - ru - - - PersonalComputer - MobileDevice - ВыборВариантаОтчета @@ -38,4 +24,18 @@ PersonalComputer MobileDevice + + СохранениеВариантаОтчета + + ru + Сохранение варианта отчета + + + + ru + + + PersonalComputer + MobileDevice + diff --git a/SSL/src/StyleItems/ВидДняВоскресеньеЦвет/ВидДняВоскресеньеЦвет.mdo b/SSL/src/StyleItems/ВидДняВоскресеньеЦвет/ВидДняВоскресеньеЦвет.mdo new file mode 100644 index 000000000..52c9e22f8 --- /dev/null +++ b/SSL/src/StyleItems/ВидДняВоскресеньеЦвет/ВидДняВоскресеньеЦвет.mdo @@ -0,0 +1,13 @@ + + + ВидДняВоскресеньеЦвет + + ru + Вид дня производственного календаря "Воскресенье" + + + + Web.Red + + + diff --git a/SSL/src/StyleItems/ВидДняНеУказанЦвет/ВидДняНеУказанЦвет.mdo b/SSL/src/StyleItems/ВидДняНеУказанЦвет/ВидДняНеУказанЦвет.mdo new file mode 100644 index 000000000..18f17f570 --- /dev/null +++ b/SSL/src/StyleItems/ВидДняНеУказанЦвет/ВидДняНеУказанЦвет.mdo @@ -0,0 +1,13 @@ + + + ВидДняНеУказанЦвет + + ru + Вид дня производственного календаря не указан + + + + Web.Red + + + diff --git a/SSL/src/StyleItems/ВидДняПраздникЦвет/ВидДняПраздникЦвет.mdo b/SSL/src/StyleItems/ВидДняПраздникЦвет/ВидДняПраздникЦвет.mdo new file mode 100644 index 000000000..25a94c950 --- /dev/null +++ b/SSL/src/StyleItems/ВидДняПраздникЦвет/ВидДняПраздникЦвет.mdo @@ -0,0 +1,13 @@ + + + ВидДняПраздникЦвет + + ru + Вид дня производственного календаря "Праздник" + + + + Web.Violet + + + diff --git a/SSL/src/StyleItems/ВидДняПредпраздничныйЦвет/ВидДняПредпраздничныйЦвет.mdo b/SSL/src/StyleItems/ВидДняПредпраздничныйЦвет/ВидДняПредпраздничныйЦвет.mdo new file mode 100644 index 000000000..f6f7f9b20 --- /dev/null +++ b/SSL/src/StyleItems/ВидДняПредпраздничныйЦвет/ВидДняПредпраздничныйЦвет.mdo @@ -0,0 +1,13 @@ + + + ВидДняПредпраздничныйЦвет + + ru + Вид дня производственного календаря "Предпраздничный" + + + + Web.DarkBlue + + + diff --git a/SSL/src/StyleItems/ВидДняРабочийЦвет/ВидДняРабочийЦвет.mdo b/SSL/src/StyleItems/ВидДняРабочийЦвет/ВидДняРабочийЦвет.mdo new file mode 100644 index 000000000..4d75960e4 --- /dev/null +++ b/SSL/src/StyleItems/ВидДняРабочийЦвет/ВидДняРабочийЦвет.mdo @@ -0,0 +1,13 @@ + + + ВидДняРабочийЦвет + + ru + Вид дня производственного календаря "Рабочий" + + + + Web.Black + + + diff --git a/SSL/src/StyleItems/ВидДняСубботаЦвет/ВидДняСубботаЦвет.mdo b/SSL/src/StyleItems/ВидДняСубботаЦвет/ВидДняСубботаЦвет.mdo new file mode 100644 index 000000000..6d689792b --- /dev/null +++ b/SSL/src/StyleItems/ВидДняСубботаЦвет/ВидДняСубботаЦвет.mdo @@ -0,0 +1,13 @@ + + + ВидДняСубботаЦвет + + ru + Вид дня производственного календаря "Суббота" + + + + Web.DarkRed + + + diff --git a/SSL/src/StyleItems/ВидимыйВариантОтчета/ВидимыйВариантОтчета.mdo b/SSL/src/StyleItems/ВидимыйВариантОтчета/ВидимыйВариантОтчета.mdo new file mode 100644 index 000000000..fdbdfbd5a --- /dev/null +++ b/SSL/src/StyleItems/ВидимыйВариантОтчета/ВидимыйВариантОтчета.mdo @@ -0,0 +1,15 @@ + + + ВидимыйВариантОтчета + + ru + Видимый вариант отчета + + + + 22 + 39 + 121 + + + diff --git a/SSL/src/StyleItems/ГруппаВариантовОтчетов/ГруппаВариантовОтчетов.mdo b/SSL/src/StyleItems/ГруппаВариантовОтчетов/ГруппаВариантовОтчетов.mdo new file mode 100644 index 000000000..709d4fc47 --- /dev/null +++ b/SSL/src/StyleItems/ГруппаВариантовОтчетов/ГруппаВариантовОтчетов.mdo @@ -0,0 +1,14 @@ + + + ГруппаВариантовОтчетов + + ru + Группа вариантов отчетов + + + + 159 + 101 + + + diff --git a/SSL/src/StyleItems/ДобавленныйРеквизитФон/ДобавленныйРеквизитФон.mdo b/SSL/src/StyleItems/ДобавленныйРеквизитФон/ДобавленныйРеквизитФон.mdo new file mode 100644 index 000000000..032eda3cf --- /dev/null +++ b/SSL/src/StyleItems/ДобавленныйРеквизитФон/ДобавленныйРеквизитФон.mdo @@ -0,0 +1,15 @@ + + + ДобавленныйРеквизитФон + + ru + Добавленный реквизит фон + + + + 204 + 255 + 204 + + + diff --git a/SSL/src/StyleItems/ЗаголовокУдаленногоРеквизитаФон/ЗаголовокУдаленногоРеквизитаФон.mdo b/SSL/src/StyleItems/ЗаголовокУдаленногоРеквизитаФон/ЗаголовокУдаленногоРеквизитаФон.mdo new file mode 100644 index 000000000..807a17454 --- /dev/null +++ b/SSL/src/StyleItems/ЗаголовокУдаленногоРеквизитаФон/ЗаголовокУдаленногоРеквизитаФон.mdo @@ -0,0 +1,13 @@ + + + ЗаголовокУдаленногоРеквизитаФон + + ru + Заголовок удаленного реквизита фон + + + + Web.VioletRed + + + diff --git a/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаФон/ИзмененноеЗначениеРеквизитаФон.mdo b/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаФон/ИзмененноеЗначениеРеквизитаФон.mdo new file mode 100644 index 000000000..a83339682 --- /dev/null +++ b/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаФон/ИзмененноеЗначениеРеквизитаФон.mdo @@ -0,0 +1,13 @@ + + + ИзмененноеЗначениеРеквизитаФон + + ru + Измененное значение реквизита фон + + + + Web.LightCyan + + + diff --git a/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаЦвет/ИзмененноеЗначениеРеквизитаЦвет.mdo b/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаЦвет/ИзмененноеЗначениеРеквизитаЦвет.mdo new file mode 100644 index 000000000..6985c2bc8 --- /dev/null +++ b/SSL/src/StyleItems/ИзмененноеЗначениеРеквизитаЦвет/ИзмененноеЗначениеРеквизитаЦвет.mdo @@ -0,0 +1,13 @@ + + + ИзмененноеЗначениеРеквизитаЦвет + + ru + Измененное значение реквизита цвет + + + + Web.Blue + + + diff --git a/SSL/src/StyleItems/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет.mdo b/SSL/src/StyleItems/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет.mdo new file mode 100644 index 000000000..949f70950 --- /dev/null +++ b/SSL/src/StyleItems/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет/КонтактнаяИнформацияСРедактированиемВДиалогеЦвет.mdo @@ -0,0 +1,13 @@ + + + КонтактнаяИнформацияСРедактированиемВДиалогеЦвет + + ru + Контактная информация с редактированием в диалоге цвет + + + + Web.Cream + + + diff --git a/SSL/src/StyleItems/СкрытыйВариантОтчета/СкрытыйВариантОтчета.mdo b/SSL/src/StyleItems/СкрытыйВариантОтчета/СкрытыйВариантОтчета.mdo new file mode 100644 index 000000000..6c70bd8f1 --- /dev/null +++ b/SSL/src/StyleItems/СкрытыйВариантОтчета/СкрытыйВариантОтчета.mdo @@ -0,0 +1,13 @@ + + + СкрытыйВариантОтчета + + ru + Скрытый вариант отчета + + + + Web.Gray + + + diff --git a/SSL/src/StyleItems/УдаленныйРеквизитФон/УдаленныйРеквизитФон.mdo b/SSL/src/StyleItems/УдаленныйРеквизитФон/УдаленныйРеквизитФон.mdo new file mode 100644 index 000000000..dcf1eb477 --- /dev/null +++ b/SSL/src/StyleItems/УдаленныйРеквизитФон/УдаленныйРеквизитФон.mdo @@ -0,0 +1,13 @@ + + + УдаленныйРеквизитФон + + ru + Удаленный реквизит фон + + + + Web.LightPink + + + diff --git a/SSL/src/StyleItems/ФонВыделенияЦвет/ФонВыделенияЦвет.mdo b/SSL/src/StyleItems/ФонУправляющегоПоля/ФонУправляющегоПоля.mdo similarity index 80% rename from SSL/src/StyleItems/ФонВыделенияЦвет/ФонВыделенияЦвет.mdo rename to SSL/src/StyleItems/ФонУправляющегоПоля/ФонУправляющегоПоля.mdo index b54690de8..4dba188f8 100644 --- a/SSL/src/StyleItems/ФонВыделенияЦвет/ФонВыделенияЦвет.mdo +++ b/SSL/src/StyleItems/ФонУправляющегоПоля/ФонУправляющегоПоля.mdo @@ -1,9 +1,9 @@ - ФонВыделенияЦвет + ФонУправляющегоПоля ru - Фон выделения + Фон управляющего поля diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo index 2812dfae1..54d827eae 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АдресныйКлассификатор/АдресныйКлассификатор.mdo @@ -12,5 +12,6 @@ InformationRegister.ВерсииОбъектовАдресногоКлассификатора CommonModule.АдресныйКлассификатор CommonModule.АдресныйКлассификаторКлиентСервер + CommonModule.АдресныйКлассификаторВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольЖурналаРегистрации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html similarity index 56% rename from SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольЖурналаРегистрации/Help/ru.html rename to SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/Help/ru.html index 6ad4b4ab2..5ba834a86 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 new file mode 100644 index 000000000..8b01c6008 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/АнализЖурналаРегистрации/АнализЖурналаРегистрации.mdo @@ -0,0 +1,16 @@ + + + АнализЖурналаРегистрации + + ru + Анализ журнала регистрации + + true + + + ru + + + Report.АнализЖурналаРегистрации + Subsystem.СтандартныеПодсистемы + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo index d3586e8e0..ec50a9ac9 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Анкетирование/Анкетирование.mdo @@ -39,7 +39,7 @@ Role.ДобавлениеИзменениеШаблоновАнкет Role.ДобавлениеИзменениеОпросов FunctionalOption.ИспользоватьАнкетирование - EventSubscription.НастроитьПорядокВариантовОтветовАнкет - EventSubscription.СброситьПорядокВариантовОтветовАнкет + EventSubscription.ВариантыОтветовАнкетЗаполнитьЗначениеРеквизитаУпорядочивания + EventSubscription.ВариантыОтветовАнкетСброситьЗначениеРеквизитаУпорядочивания Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo index f79c4f1fb..611ce9129 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БазоваяФункциональность/БазоваяФункциональность.mdo @@ -42,7 +42,6 @@ StyleItem.ПоясняющийТекст CommonModule.ОбщегоНазначенияКлиентПовтИсп CommonForm.ВопросОбУстановкеРасширенияРаботыСФайлами - DataProcessor.УправлениеНастройкамиФорм CommonPicture.Информация CommonPicture.КоллекцияПиктограммЭлементов StyleItem.ПоясняющийОшибкуТекст @@ -55,7 +54,6 @@ CommonModule.СтандартныеПодсистемыПереопределяемый CommonModule.СтандартныеПодсистемыКлиент CommonForm.НерекомендуемаяВерсияПлатформы - CommonForm.Вопрос CommonForm.ВыборУзловПлановОбмена CommonModule.ЖурналРегистрации CommonModule.ЖурналРегистрацииКлиент @@ -71,7 +69,7 @@ Role.СохранениеДанныхПользователя CommonPicture.ИерархическийСписок StyleItem.ПросроченныеДанныеЦвет - StyleItem.ФонВыделенияЦвет + StyleItem.ФонУправляющегоПоля CommonPicture.КоллекцияВариантыВажности CommonModule.ОбщегоНазначенияКлиентПереопределяемый CommonModule.ДлительныеОперации @@ -102,5 +100,30 @@ InformationRegister.КэшПрограммныхИнтерфейсов Enum.ТипыДанныхКэшаПрограммныхИнтерфейсов Role.АдминистраторСистемы + CommonModule.ОбщегоНазначенияВызовСервераПереопределяемый + EventSubscription.ПриОтправкеДанныхГлавному + EventSubscription.ПриОтправкеДанныхПодчиненному + EventSubscription.ПриПолученииДанныхОтГлавного + EventSubscription.ПриПолученииДанныхОтПодчиненного + CommonPicture.ФорматExcel + CommonPicture.ФорматExcel2007 + CommonPicture.ФорматMXL + CommonPicture.ФорматHTML + CommonPicture.ФорматOpenOfficeCalc + CommonPicture.ФорматOpenOfficeWriter + CommonPicture.ФорматPDF + CommonPicture.ФорматTXT + CommonPicture.ФорматWord + CommonPicture.ФорматПустой + CommonPicture.ФорматWord2007 + CommonPicture.ОтправитьПолучитьПочту + Enum.ФорматыСохраненияОтчетов + CommonForm.Вопрос + Constant.КаталогВременныхФайловДляLinux + Constant.КаталогВременныхФайловДляWindows + FunctionalOption.СтандартныеПодсистемыВАвтономномРежиме + Constant.ЭтоАвтономноеРабочееМесто + FunctionalOption.РаботаВАвтономномРежиме + CommonPicture.СтатусыДокумента Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Банки/Банки.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Банки/Банки.mdo index fc08f23f7..cffa42911 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Банки/Банки.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Банки/Банки.mdo @@ -10,6 +10,5 @@ CommonModule.РаботаСБанками Constant.ВерсияКлассификатораБанковРФ Catalog.КлассификаторБанковРФ - CommonModule.РаботаСБанкамиВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/БизнесПроцессыИЗадачи/Help/ru.html index 765c86d6f..2d7955d6e 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 4a9081ac3..2041bbac3 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 5c67b9306..81d2a2b8c 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Валюты/Валюты.mdo @@ -17,5 +17,6 @@ InformationRegister.КурсыВалют CommonModule.РаботаСКурсамиВалют CommonModule.РаботаСКурсамиВалютКлиентСервер + CommonModule.РаботаСКурсамиВалютВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo index ea07a59a3..d05fd6d16 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВариантыОтчетов/ВариантыОтчетов.mdo @@ -10,16 +10,31 @@ CommonModule.ВариантыОтчетов Catalog.ВариантыОтчетов Subsystem.СтандартныеПодсистемы.Subsystem.ВариантыОтчетов - Enum.ТипыВариантовОтчетов - CommonForm.ПанельОтчетов + Enum.ТипыОтчетов CommonModule.ВариантыОтчетовПереопределяемый CommonModule.ВариантыОтчетовКлиент - CommonForm.ВсеОтчеты - CommonModule.ВариантыОтчетовКлиентПереопределяемый Role.ДобавлениеИзменениеВариантовОтчетов - CommonPicture.ЗакрепитьВариантОтчета - CommonPicture.ОткрепитьВариантОтчета - CommonModule.ВариантыОтчетовВызовСервераПовтИсп - Role.ЧтениеВариантовОтчетов + Role.ИспользованиеВариантовОтчетов + CommonModule.ВариантыОтчетовКлиентСервер + CommonModule.ВариантыОтчетовПовтИсп + InformationRegister.НастройкиВариантовОтчетов + CommonPicture.БыстрыйДоступ + CommonPicture.БыстрыйДоступДобавить + CommonPicture.БыстрыйДоступУдалить + StyleItem.СкрытыйВариантОтчета + StyleItem.ВидимыйВариантОтчета + CommonForm.ПанельОтчетов + StyleItem.ГруппаВариантовОтчетов + Enum.ДоступныеПериодыОтчета + CommonModule.ФормаОтчетаКлиентПереопределяемый + CommonModule.ФормаОтчетаПереопределяемый + CommonModule.ФункцииОтчетовКлиентСервер + CommonForm.ФормаОтчета + CommonForm.ФормаНастроекОтчета + CommonForm.ФормаВариантаОтчета + CommonPicture.БыстрыеНастройкиОтчета + CommonForm.ВыборПроизвольногоПериода + CommonForm.ОтправкаТабличныхДокументовПоПочте + CommonPicture.ЭлектронноеПисьмо Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html index ff7a56e2b..1e70d0cf8 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

                \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo index f5353d628..2152d4447 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ВерсионированиеОбъектов/ВерсионированиеОбъектов.mdo @@ -25,5 +25,10 @@ FunctionalOption.ИспользоватьВерсионированиеОбъектов Role.ЧтениеВерсийОбъектов FunctionalOptionsParameter.ТипВерсионируемогоОбъекта + StyleItem.ДобавленныйРеквизитФон + StyleItem.ЗаголовокУдаленногоРеквизитаФон + StyleItem.ИзмененноеЗначениеРеквизитаФон + StyleItem.ИзмененноеЗначениеРеквизитаЦвет + StyleItem.УдаленныйРеквизитФон Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo index 6f61d1851..2c83347b6 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Взаимодействия/Взаимодействия.mdo @@ -72,7 +72,6 @@ CommonPicture.СнятьПризнакРассмотреноУВзаимодействия CommonPicture.ПереместитьВПапкуПисем CommonPicture.ПереместитьВЗакладкиВзаимодействия - CommonPicture.ОтправитьПолучитьПочту CommonPicture.ПрименитьПравилаОбработкиПисем CommonPicture.ПапкиЭлектронныхПисем CommonPicture.ВидыНавигацииПоВзаимодействиямОтПредметовВзаимодействий diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html index d739116ca..bf0519d7e 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ГрупповоеИзменениеОбъектов/Help/ru.html @@ -1 +1 @@ -С помощью группового изменения объектов пользователь может за одно действие изменить значения реквизитов, дополнительных реквизитов или дополнительных сведений (далее по тексту: реквизитов) у выбранных объектов определенного типа. Для работы с групповым изменением объектов пользователю не требуются дополнительные роли. Если пользователю доступно редактирование самого объекта, то ему доступно и групповое изменение объекта. Для перехода к помощнику группового изменения можно воспользоваться командой Изменить выделенные командной панели или контекстного меню списка, предварительно выбрав в списке набор объектов с помощью множественного выделения. \ No newline at end of file +С помощью группового изменения объектов пользователь может за одно действие изменить значения реквизитов, дополнительных реквизитов или дополнительных сведений (далее по тексту: реквизитов) у выбранных объектов определенного типа. Для работы с групповым изменением объектов пользователю не требуются дополнительные роли. Если пользователю доступно редактирование самого объекта, то ему доступно и групповое изменение объекта. Для перехода к помощнику группового изменения можно воспользоваться командой Изменить выделенные командной панели или контекстного меню списка, предварительно выбрав в списке набор объектов с помощью множественного выделения. \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/Help/ru.html index db54ee83c..3b65be9bb 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 125b8fb2a..84a8a50d0 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ДополнительныеОтчетыИОбработки/ДополнительныеОтчетыИОбработки.mdo @@ -30,12 +30,12 @@ InformationRegister.ПользовательскиеНастройкиДоступаКОбработкам CommonModule.ДополнительныеОтчетыИОбработкиПереопределяемый CommonForm.НастройкаМоихОтчетовИОбработок - CommonModule.ДополнительныеОтчетыИОбработкиСобытия FunctionalOption.ИспользоватьДополнительныеОбработкиЗаполненияОбъекта FunctionalOption.ИспользоватьДополнительныеОтчеты FunctionalOption.ИспользоватьДополнительныеПечатныеФормы FunctionalOption.ИспользоватьДополнительныеОбработкиСозданияСвязанныхОбъектов FunctionalOptionsParameter.ТипФормыСДополнительнымиОтчетамиИОбработками FunctionalOptionsParameter.ТипОбъектаСДополнительнымиОтчетамиИОбработками + CommonModule.ДополнительныеОтчетыИОбработкиВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/Help/ru.html index 6be893bdb..52ac02452 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 c1bada86b..0d277c233 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗавершениеРаботыПользователей/ЗавершениеРаботыПользователей.mdo @@ -21,5 +21,7 @@ CommonForm.ПараметрыАдминистрированияСервернойИБ CommonModule.СоединенияИБПовтИсп InformationRegister.БлокировкиСеансовОбластиДанных + CommonModule.СоединенияИБКлиентПереопределяемый + CommonModule.СоединенияИБВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html index d4b374968..843042626 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗапретРедактированияРеквизитовОбъектов/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

                \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo index 797054028..f795f3333 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ЗащитаПерсональныхДанных/ЗащитаПерсональныхДанных.mdo @@ -14,5 +14,7 @@ StyleItem.СобытиеОтказ Role.ПодготовкаСогласияНаОбработкуПерсональныхДанных DataProcessor.СогласиеНаОбработкуПерсональныхДанных + CommonModule.ЗащитаПерсональныхДанных + InformationRegister.ОбластиПерсональныхДанных Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнформационныйЦентр/ИнформационныйЦентр.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнформационныйЦентр/ИнформационныйЦентр.mdo new file mode 100644 index 000000000..03d940368 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ИнформационныйЦентр/ИнформационныйЦентр.mdo @@ -0,0 +1,21 @@ + + + ИнформационныйЦентр + + ru + Информационный центр + + true + CommonModule.ИнформационныйЦентрКлиент + CommonModule.ИнформационныйЦентрСервер + CommonModule.ИнформационныйЦентрСерверПереопределяемый + Role.ИспользованиеИнформационногоЦентра + CommonForm.ИнформационныйЦентр + CommonForm.ОтправкаСообщенияВТехподдержку + Catalog.ОбщиеДанныеИнформационногоЦентра + CommonModule.ОбработчикКаналовСообщенийИнформационногоЦентра + CommonForm.ОтображениеНовостей + CommonCommand.ОткрытьИнформационныйЦентр + Catalog.ТипыИнформацииИнформационногоЦентра + Subsystem.СтандартныеПодсистемы + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/Help/ru.html index 4184cfa42..7aff6b0f8 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 e6695c1eb..0ebf8efa6 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КалендарныеГрафики/КалендарныеГрафики.mdo @@ -20,5 +20,11 @@ Catalog.ПроизводственныеКалендари Enum.ВидыДнейПроизводственногоКалендаря Enum.ВидыКалендарей + StyleItem.ВидДняВоскресеньеЦвет + StyleItem.ВидДняНеУказанЦвет + StyleItem.ВидДняПраздникЦвет + StyleItem.ВидДняПредпраздничныйЦвет + StyleItem.ВидДняРабочийЦвет + StyleItem.ВидДняСубботаЦвет Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/Help/ru.html index 9a6198b7d..904e176b8 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

                \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo index f80129730..8e26c9568 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтактнаяИнформация/КонтактнаяИнформация.mdo @@ -26,8 +26,9 @@ CommonModule.УправлениеКонтактнойИнформациейКлассификаторыКлиент EventSubscription.ЗаполнитьКонтактнуюИнформацию CommonModule.УправлениеКонтактнойИнформациейСобытия - EventSubscription.НастроитьПорядокВидовКонтактнойИнформации - EventSubscription.СброситьПорядокВидовКонтактнойИнформации + EventSubscription.ВидыКонтактнойИнформацииЗаполнитьЗначениеРеквизитаУпорядочивания + EventSubscription.ВидыКонтактнойИнформацииСброситьЗначениеРеквизитаУпорядочивания CommonModule.УправлениеКонтактнойИнформациейКлиентСервер + StyleItem.КонтактнаяИнформацияСРедактированиемВДиалогеЦвет Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольДинамическогоОбновленияКонфигурации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольДинамическогоОбновленияКонфигурации/Help/ru.html index 515448dd1..8bff77921 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/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo deleted file mode 100644 index 61f8b3429..000000000 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/КонтрольЖурналаРегистрации/КонтрольЖурналаРегистрации.mdo +++ /dev/null @@ -1,19 +0,0 @@ - - - КонтрольЖурналаРегистрации - - ru - Контроль журнала регистрации - - true - - - ru - - - CommonModule.КонтрольЖурналаРегистрацииСлужебный - ScheduledJob.КонтрольЖурналаРегистрации - Constant.АдресатыПолученияОтчетаПоЖурналуРегистрации - DataProcessor.КонтрольЖурналаРегистрации - Subsystem.СтандартныеПодсистемы - diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/НастройкаПорядкаЭлементов/Help/ru.html index 502cc1d02..63fc2647a 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 e62919c48..ea25eaa05 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 2dc39aa32..2386eb378 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбменДанными/ОбменДанными.mdo @@ -23,7 +23,6 @@ Enum.РезультатыВыполненияОбмена Enum.ВидыТранспортаСообщенийОбмена DataProcessor.ЗагрузкаПравилРегистрацииОбъектов - DataProcessor.КонвертацияОбъектовИнформационныхБаз DataProcessor.ТранспортСообщенийОбменаFILE InformationRegister.НастройкиТранспортаОбмена CommonCommand.НастроитьПараметрыТранспортаСообщенийОбмена @@ -88,17 +87,21 @@ EventSubscription.ОтменитьОтправкуДанныхУзлаВРаспределеннойИнформационнойБазе WebService.Exchange InformationRegister.СообщенияОбменаДанными - Constant.КаталогВременныхФайловСообщенийОбменаДляWindows - Constant.КаталогВременныхФайловСообщенийОбменаДляLinux InformationRegister.ИзмененияОбщихДанныхУзлов EventSubscription.ЗарегистрироватьИзмененияОбщихДанныхУзлов - CommonForm.ВыполнениеОбменаДанными Constant.ИспользоватьОбменДаннымиВЛокальномРежиме Constant.ИспользоватьОбменДаннымиВМоделиСервиса CommonModule.ОбменДаннымиКлиентПереопределяемый WebService.Exchange_2_0_1_6 FunctionalOption.ИспользоватьОбменДанными - EventSubscription.ПриОтправкеДанныхПодчиненному - EventSubscription.ПриПолученииДанныхОтПодчиненного + Constant.СообщениеОбменаДаннымиИзГлавногоУзла + CommonModule.ОбменДаннымиГлобальный + DataProcessor.ВыполнениеОбменаДанными + CommonForm.ДополнительноеОписание + CommonTemplate.ИнструкцияКакВыполнитьУстановкуОбновленияВручную + CommonModule.ОбменДаннымиВызовСервера + CommonModule.ОбменДаннымиКлиентСервер + DataProcessor.КонвертацияОбъектовИнформационныхБаз + ScheduledJob.УдалениеНеактуальныхСообщенийОбмена Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo index 0a81a93f0..5282ec984 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеВерсииИБ/ОбновлениеВерсииИБ.mdo @@ -12,5 +12,8 @@ InformationRegister.ВерсииПодсистем CommonModule.ОбновлениеИнформационнойБазыКлиентПереопределяемый CommonForm.ОписаниеИзмененийСистемы + Constant.ТребуетсяОбновлениеИнформационнойБазы + CommonModule.ОбновлениеИнформационнойБазыСобытия + CommonModule.ОбновлениеИнформационнойБазыВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html index 0418d279e..9b68b1295 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/Help/ru.html @@ -1,2 +1,2 @@ - +

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

                \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo index 3447ea1ef..93f8fe37f 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОбновлениеКонфигурации/ОбновлениеКонфигурации.mdo @@ -21,5 +21,6 @@ Constant.СтатусОбновленияКонфигурации DataProcessor.ОбновлениеКонфигурации CommonModule.ОбновлениеКонфигурацииКлиентСервер + CommonModule.ОбновлениеКонфигурацииВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi index 7ad8270b6..ea13db40b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ОценкаПроизводительности/CommandInterface.cmi @@ -1,11 +1,5 @@ - - - Constant.ВыполнятьЗамерыПроизводительности.StandardCommand.Open - - - NavigationPanelOrdinary diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Help/ru.html index da0c41cf1..b52cb6684 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 6ae49babd..52a948af7 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Печать/Печать.mdo @@ -14,8 +14,6 @@ CommonPicture.ОтправитьEmail CommonModule.УправлениеПечатьюКлиент CommonModule.УправлениеПечатью - CommonForm.НастройкаПечатныхФормПередОтправкой - CommonForm.ПечатьДокументов CommandGroup.Печать CommonModule.УправлениеПечатьюMSWordКлиент CommonModule.УправлениеПечатьюOOWriterКлиент @@ -30,5 +28,10 @@ CommonPicture.ИспользоватьПользовательскийМакет CommonPicture.ИспользоватьПоставляемыйМакет CommonModule.УправлениеПечатьюПереопределяемый + CommonForm.ОтправкаПечатнойФормыПоПочте + CommonForm.ПечатьДокументов + CommonForm.СохранениеПечатнойФормы + CommonForm.ВыборФорматаВложений + CommonModule.УправлениеПечатьюВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/Help/ru.html index c1e63230b..5c4f8986f 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/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo index f8cfc163d..326fb5dd6 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолнотекстовыйПоиск/ПолнотекстовыйПоиск.mdo @@ -19,7 +19,6 @@ DataProcessor.ПолнотекстовыйПоискВДанных DataProcessor.УправлениеПолнотекстовымПоиском Constant.ИспользоватьПолнотекстовыйПоиск - CommonModule.ПолнотекстовыйПоискКлиентПереопределяемый FunctionalOption.ИспользоватьПолнотекстовыйПоиск Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html index 3784cf27c..379d46368 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПолучениеФайловИзИнтернета/Help/ru.html @@ -1,2 +1,2 @@ - +

                В отдельных случаях, конфигурации требуется доступ к сети Интернет, например, для загрузки адресного классификатора с сайта фирмы «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 5ef54d792..eebd2be83 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 293d83987..608e07225 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Пользователи/Пользователи.mdo @@ -26,7 +26,7 @@ CommonPicture.СостояниеПользователя03 CommonPicture.СостояниеПользователя02 CommonPicture.СостояниеПользователя01 - CommonModule.ПользователиСерверПовтИсп + CommonModule.ПользователиСлужебныйПовтИсп CommonPicture.ПоказатьТолькоВыбранныеРоли CommonPicture.СостояниеПользователя07 CommonPicture.СостояниеПользователя08 @@ -42,7 +42,7 @@ Role.ДобавлениеИзменениеВнешнихПользователей Role.ИзменениеТекущегоВнешнегоПользователя SessionParameter.ТекущийВнешнийПользователь - CommonModule.ПользователиСобытия + CommonModule.ПользователиСлужебный CommonModule.ВнешниеПользователи Role.ИзменениеТекущегоПользователя Role.ДобавлениеИзменениеПользователей @@ -50,5 +50,11 @@ FunctionalOption.ИспользоватьВнешнихПользователей FunctionalOption.ИспользоватьГруппыПользователей Enum.ТипыПользователей + CommonModule.ПользователиСлужебныйКлиент + CommonModule.ПользователиКлиентСервер + CommonModule.ПользователиСлужебныйКлиентСервер + CommonModule.ПользователиСлужебныйВызовСервера + CommonPicture.ПрочиеПользовательскиеНастройки + DataProcessor.НастройкиПользователей Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/Help/ru.html index 254c97f7e..fb71d017d 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 ba1b7f345..9e7bb4cc0 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/ПрефиксацияОбъектов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрефиксацияОбъектов/ПрефиксацияОбъектов.mdo @@ -15,6 +15,8 @@ CommonModule.ПрефиксацияОбъектовПовтИсп CommonModule.ПрефиксацияОбъектовКлиентСервер CommonModule.ПрефиксацияОбъектовКлиентСерверПереопределяемый - CommonModule.ПрефиксацияОбъектов + CommonModule.ПрефиксацияОбъектовВызовСервера + CommonModule.ПрефиксацияОбъектовПереопределяемый + CommonModule.ПерепрефиксацияОбъектов Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo index 906106d83..69d7097c6 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ПрисоединенныеФайлы/ПрисоединенныеФайлы.mdo @@ -5,7 +5,7 @@ ru Присоединенные файлы - CommonModule.ПрисоединенныеФайлы + CommonModule.ПрисоединенныеФайлыСлужебный CommonModule.ПрисоединенныеФайлыКлиент InformationRegister.НаличиеПрисоединенныхФайлов InformationRegister.ПрисоединенныеФайлы @@ -15,7 +15,9 @@ CommonForm.ВыборПрисоединенныхФайлов CommonForm.ФайлыВТоме CommonCommand.ФайлыВТоме - CommonModule.ПрисоединенныеФайлыСобытия + CommonModule.ПрисоединенныеФайлы FunctionalOption.ИспользоватьЭЦПВПрисоединенныхФайлах + CommonModule.ПрисоединенныеФайлыСлужебныйКлиент + CommonModule.ПрисоединенныеФайлыСлужебныйВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo index fa3056b16..9a2bc5c10 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/БазоваяФункциональностьВМоделиСервиса/БазоваяФункциональностьВМоделиСервиса.mdo @@ -13,7 +13,6 @@ Constant.СообщениеБлокировкиПриОбновленииКонфигурации Enum.РежимыИспользованияИнформационнойБазы Enum.СтатусыОбластейДанных - Role.УдалитьПолныеПраваОбластиДанных SessionParameter.ОбластьДанныхЗначение SessionParameter.ОбластьДанныхИспользование CommonAttribute.ОбластьДанных @@ -29,5 +28,9 @@ Constant.ИмяПользователяАгентаСервиса Constant.АдресАгентаСервиса XDTOPackage.AgentScripts + XDTOPackage.Сообщения + CommonModule.СообщенияВМоделиСервиса + CommonModule.СообщенияВМоделиСервисаПовтИсп + Constant.КлючОбластиДанных Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo index 4d98ab40a..70e7b5fd0 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ВалютыВМоделиСервиса/ВалютыВМоделиСервиса.mdo @@ -6,7 +6,10 @@ Валюты в модели сервиса true - InformationRegister.КурсыВалютПоКлассификатору - Catalog.КлассификаторВалют + InformationRegister.УдалитьКурсыВалютПоКлассификатору + Catalog.УдалитьКлассификаторВалют + CommonModule.КурсыВалютВМоделиСервиса + CommonCommand.ЗагрузитьКурсыВалют + XDTOPackage.CurrencyRates Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo index 114b15530..2bb3a2d51 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменДаннымиВМоделиСервиса/ОбменДаннымиВМоделиСервиса.mdo @@ -17,5 +17,26 @@ FunctionalOption.ИспользоватьОбменДаннымиВМоделиСервиса WebService.RemoteAdministrationOfExchange_2_0_1_6 Role.УдаленныйДоступОбменДаннымиВМоделиСервиса + DataProcessor.ПомощникСозданияАвтономногоРабочегоМеста + CommonModule.АвтономнаяРаботаСлужебный + CommonModule.ОбменДаннымиВМоделиСервисаПереопределяемый + CommonForm.АвтономнаяРаботаВМоделиСервиса + CommonCommand.АвтономнаяРаботаВМоделиСервиса + CommonForm.ОтключениеАвтономногоРабочегоМеста + CommonCommand.АвтономнаяРабота + CommonForm.АвтономнаяРабота + ScheduledJob.СинхронизацияДанныхСПриложениемВИнтернете + Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриНачалеРаботыПрограммы + Constant.СинхронизироватьДанныеСПриложениемВИнтернетеПриЗавершенииРаботыПрограммы + CommonModule.ОбменДаннымиВМоделиСервисаКлиент + Constant.ПрефиксПоследнегоАвтономногоРабочегоМеста + Constant.НастройкаАвтономногоРабочегоМестаЗавершена + EventSubscription.ОтключитьАвтоматическуюСинхронизациюДанныхСПриложениемВИнтернете + EventSubscription.ИгнорироватьОтправкуНеразделенныхДанныхВСервис + EventSubscription.ИгнорироватьПолучениеНеразделенныхДанныхВСервисе + CommonModule.АвтономнаяРаботаВызовСервераСлужебный + CommonForm.ПарольДляСинхронизацииДанных + Constant.ИспользоватьАвтономнуюРаботуВМоделиСервиса + FunctionalOption.ИспользоватьАвтономнуюРаботуВМоделиСервиса Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo index d075a0185..6f650616b 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ОбменСообщениями/ОбменСообщениями.mdo @@ -26,5 +26,6 @@ CommonModule.ОбменСообщениямиПовтИсп Role.УдаленныйДоступОбменСообщениями WebService.MessageExchange_2_0_1_6 + CommonModule.ОбменСообщениямиВызовСервера Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo index 25e9749ee..4873febf1 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/ПоставляемыеДанные/ПоставляемыеДанные.mdo @@ -26,5 +26,10 @@ CommonModule.ПоставляемыеДанныеКлиентСервер CommonModule.ПоставляемыеДанныеПереопределяемый CommonModule.ПоставляемыеДанныеПовтИсп + XDTOPackage.SuppliedData + CommonModule.ОбработчикКаналовСообщенийПоставляемыхДанных + InformationRegister.ОбластиТребующиеОбработкиПоставляемыхДанных + InformationRegister.ПоставляемыеДанныеТребующиеОбработки + Catalog.ПоставляемыеДанные Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/РезервноеКопированиеОбластейДанных/РезервноеКопированиеОбластейДанных.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/РезервноеКопированиеОбластейДанных/РезервноеКопированиеОбластейДанных.mdo new file mode 100644 index 000000000..bd4b79f93 --- /dev/null +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/РезервноеКопированиеОбластейДанных/РезервноеКопированиеОбластейДанных.mdo @@ -0,0 +1,22 @@ + + + РезервноеКопированиеОбластейДанных + + ru + Резервное копирование областей данных + + true + CommonModule.ОбработчикКаналовСообщенийУправлениеРезервнымКопированием + CommonModule.РезервноеКопированиеОбластейДанныхПовтИсп + CommonForm.НастройкиРезервногоКопированияПриложений + CommonCommand.СоздатьРезервнуюКопию + CommonForm.СозданиеРезервнойКопии + CommonModule.РезервноеКопированиеОбластейДанных + Constant.ПоддержкаРезервногоКопирования + FunctionalOption.ПоддержкаРезервногоКопирования + InformationRegister.ОбластиКРезервномуКопированию + XDTOPackage.КонтрольРезервногоКопированияОбластейДанных_1_0_2_1 + XDTOPackage.УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1 + CommonModule.ОбработчикСообщенийУправленияРезервнымКопированием + Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса + diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo index 1360a01da..902514639 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/Subsystems/УдаленноеАдминистрирование/УдаленноеАдминистрирование.mdo @@ -7,14 +7,13 @@ true Constant.КонечнаяТочкаМенеджераСервиса - XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса - XDTOPackage.КонтрольУдаленногоАдминистрирования XDTOPackage.СообщенияУдаленногоАдминистрирования - CommonModule.СообщенияУдаленногоАдминистрирования - CommonModule.СообщенияУдаленногоАдминистрированияПовтИсп CommonModule.ОбработчикКаналовСообщенийУдаленногоАдминистрирования Constant.ВнутреннийАдресМенеджераСервиса Constant.ИмяСлужебногоПользователяМенеджераСервиса Constant.ПарольСлужебногоПользователяМенеджераСервиса + XDTOPackage.КонтрольУдаленногоАдминистрирования_1_0_2_1 + XDTOPackage.УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1 + CommonModule.ОбработчикСообщенийУдаленногоАдминистрирования Subsystem.СтандартныеПодсистемы.Subsystem.РаботаВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo index 64e270023..bc7f24011 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаВМоделиСервиса/РаботаВМоделиСервиса.mdo @@ -16,6 +16,7 @@ ОчередьЗаданий ПользователиВМоделиСервиса ПоставляемыеДанные + РезервноеКопированиеОбластейДанных УдаленноеАдминистрирование УправлениеДоступомВМоделиСервиса ФайловыеФункцииВМоделиСервиса diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/Help/ru.html index b28fb1610..37cfc03cf 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 9fd515bc2..f265716df 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСПочтовымиСообщениями/РаботаСПочтовымиСообщениями.mdo @@ -25,5 +25,6 @@ CommonPicture.ПриложитьФайл CommonCommand.НастройкаСистемнойУчетнойЗаписиЭлектроннойПочты Role.ИспользованиеУчетныхЗаписейЭлектроннойПочты + CommonModule.ЭлектроннаяПочтаВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/Help/ru.html index 188ad36e8..ef1c1cc53 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/РаботаСФайлами/РаботаСФайлами.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo index 6f39b9f18..68607cbb8 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РаботаСФайлами/РаботаСФайлами.mdo @@ -44,7 +44,7 @@ Enum.ВариантыСжатияTIFF Enum.ФорматыХраненияМногостраничныхФайлов Enum.ФорматыХраненияОдностраничныхФайлов - CommonModule.РаботаСФайламиСобытия + CommonModule.РаботаСФайлами CommonModule.РаботаСФайламиВызовСервераПереопределяемый InformationRegister.ХранимыеФайлыВерсий EventSubscription.СкопироватьРеквизитыВерсииФайловВФайл @@ -52,5 +52,9 @@ CommonModule.РаботаСФайламиКлиентПереопределяемый Enum.ТипыФайловДляВстроенногоРедактора Role.РаботаСПапкамиФайлов + CommonPicture.СправкаВНачало + CommonPicture.СправкаПереходВниз + CommonPicture.СтрелкаВнизСправка + CommonModule.РаботаСФайламиСлужебный Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo index 81d4ba174..691754257 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РассылкаОтчетов/РассылкаОтчетов.mdo @@ -8,28 +8,16 @@ true Catalog.РассылкиОтчетов Enum.ПериодичностиРасписанийРассылокОтчетов - CommonPicture.ФорматTXT - CommonPicture.ФорматMXL - CommonPicture.ФорматПустой - CommonPicture.ФорматWord2007 - CommonPicture.ФорматOpenOfficeCalc - CommonPicture.ФорматHTML - CommonPicture.ФорматExcel - CommonPicture.ФорматExcel2007 - CommonModule.РассылкаОтчетов CommonModule.РассылкаОтчетовПовтИсп CommonModule.РассылкаОтчетовПереопределяемый CommonModule.РассылкаОтчетовКлиентСервер - Enum.ФорматыСохраненияОтчетов CommonModule.РассылкаОтчетовКлиент CommonModule.РассылкаОтчетовВызовСервера InformationRegister.СостоянияРассылокОтчетов ScheduledJob.РассылкаОтчетов Role.ДобавлениеИзменениеРассылокОтчетов CommonPicture.СостояниеРассылкиОтчетов - CommonPicture.ФорматPDF - CommonPicture.ФорматOpenOfficeWriter - CommonPicture.ФорматWord - CommonModule.РассылкаОтчетовКлиентПереопределяемый + CommonPicture.РассылкаОтчетов + CommonModule.РассылкаОтчетов Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/Help/ru.html index bf6042e26..69faa7995 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 15e735a77..a99fdd445 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/РегламентныеЗадания.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РегламентныеЗадания/РегламентныеЗадания.mdo @@ -15,10 +15,13 @@ CommonPicture.ВыполнитьРегламентноеЗаданиеВручную CommonPicture.ЗапуститьОтдельныйСеансДляВыполненияРегламентныхЗаданий CommonPicture.ОшибкаВыполненияРегламентныхЗаданий - CommonModule.РегламентныеЗаданияГлобальный + CommonModule.РегламентныеЗаданияСлужебныйГлобальный CommonModule.РегламентныеЗаданияКлиент CommonModule.РегламентныеЗаданияСервер DataProcessor.РегламентныеИФоновыеЗадания Constant.НастройкиВыполненияРегламентныхЗаданий + CommonModule.РегламентныеЗаданияСлужебныйКлиент + CommonModule.РегламентныеЗаданияСлужебный + CommonModule.РегламентныеЗаданияСлужебныйВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo index dd2dadad9..fee003adb 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/РезервноеКопированиеИБ/РезервноеКопированиеИБ.mdo @@ -10,5 +10,6 @@ CommonModule.РезервноеКопированиеИБКлиентГлобальный DataProcessor.НастройкаРезервногоКопированияИБ DataProcessor.РезервноеКопированиеИБ + CommonModule.РезервноеКопированиеИБВызовСервера Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html index e373db852..362090d01 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Help/ru.html @@ -1,3 +1,3 @@ - +

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

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

                  \ No newline at end of file diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo index 9996c938d..97863fd70 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/Свойства/Свойства.mdo @@ -18,15 +18,17 @@ CommonModule.УправлениеСвойствамиПереопределяемый CommonModule.УправлениеСвойствами Constant.ИспользоватьДополнительныеРеквизитыИСведения - CommonForm.РедактированиеЗначенийСвойств + CommonForm.РедактированиеДополнительныхСведений Catalog.ЗначенияСвойствОбъектов Catalog.НаборыДополнительныхРеквизитовИСведений InformationRegister.ДополнительныеСведения ChartOfCharacteristicTypes.ДополнительныеРеквизитыИСведения - CommonCommand.ДополнительныеСведения + CommonCommand.ДополнительныеСведенияКоманднаяПанель Role.ЧтениеДополнительныхСведений Role.ИзменениеДополнительныхСведений StyleItem.УдаленныйДополнительныйРеквизитШрифт FunctionalOption.ИспользоватьДополнительныеРеквизитыИСведения + CommonCommand.ДополнительныеСведенияПанельНавигации + Catalog.ЗначенияСвойствОбъектовИерархия Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/Help/ru.html index 1aaa1fd2d..16516ec74 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 6d4e67a17..5878a9fe3 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеДоступом/УправлениеДоступом.mdo @@ -28,7 +28,7 @@ InformationRegister.ТаблицыГруппДоступа ChartOfCharacteristicTypes.ВидыДоступа SessionParameter.ОграничиватьДоступПоВидуПользователи - CommonModule.УправлениеДоступомСобытия + CommonModule.УправлениеДоступомСлужебный ScheduledJob.ЗаполнениеДанныхДляОграниченияДоступа InformationRegister.ПраваПоЗначениямДоступа SessionParameter.ВидыДоступаЧерезПраваПоЗначениямДоступа @@ -37,7 +37,7 @@ SessionParameter.ОграничиватьДоступПоВидуПравоЧтения SessionParameter.ОграничиватьДоступПоВидуУсловие SessionParameter.ОграничиватьДоступПоВидуОбъект - CommonModule.УправлениеДоступомСерверПовтИсп + CommonModule.УправлениеДоступомСлужебныйПовтИсп InformationRegister.ЗависимостиПравДоступа SessionParameter.ОграничиватьДоступПоВидуПравоДобавления SessionParameter.ОграничиватьДоступПоВидуПравоИзменения diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеИтогамиИАгрегатами/Help/ru.html b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/УправлениеИтогамиИАгрегатами/Help/ru.html index f51bfa39d..7f3e2efe6 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 b28aadd11..1b4810ac6 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФайловыеФункции/ФайловыеФункции.mdo @@ -9,8 +9,8 @@ CommonForm.ВыборДействияПриОбнаруженииБолееНовогоФайла CommonForm.ВыборДействияПриОбнаруженииФайлаДругогоРазмера ScheduledJob.ИзвлечениеТекста - CommonModule.ФайловыеФункции - CommonModule.ФайловыеФункцииКлиентСервер + CommonModule.ФайловыеФункцииСлужебный + CommonModule.ФайловыеФункцииСлужебныйКлиентСервер CommonForm.СозданиеНачальногоОбразаСФайлами CommonPicture.ОткрытьФайл CommonPicture.СохранитьФайлКак @@ -25,12 +25,11 @@ CommonForm.ВыборПутиКАрхивуФайловТомов CommonForm.ДобавлениеПодписиИзФайла CommonForm.ОтчетОСохраненииФайлов - CommonModule.ФайловыеФункцииКлиент - CommonModule.ФайловыеФункцииКлиентПовтИсп + CommonModule.ФайловыеФункцииСлужебныйКлиент + CommonModule.ФайловыеФункцииСлужебныйКлиентПовтИсп CommonPicture.КоллекцияСкрепка CommonForm.ВыборСертификатовШифрования CommonForm.ВводПароляСОписаниями - CommonModule.ОбменФайламиСобытия CommonForm.НапоминаниеПриРедактировании CommonPicture.Зашифрован CommonPicture.ЗакончитьРедактированиеФайла @@ -44,10 +43,9 @@ Constant.СписокЗапрещенныхРасширений StyleItem.ФайлЗанятыйДругимПользователем StyleItem.ФайлЗанятыйТекущимПользователем - CommonModule.ФайловыеФункцииПереопределяемый CommonModule.ОбменФайламиВызовСервера Constant.ХранитьФайлыВТомахНаДиске - CommonModule.ФайловыеФункцииПовтИсп + CommonModule.ФайловыеФункцииСлужебныйПовтИсп CommonPicture.ОбновитьФайлИзФайлаНаДиске Constant.СписокРасширенийФайловOpenDocument FunctionalOption.ХранитьФайлыВТомахНаДиске @@ -57,5 +55,7 @@ Constant.СписокРасширенийТекстовыхФайлов InformationRegister.КодировкиВерсийФайлов Enum.СпособыОткрытияФайлаНаПросмотр + CommonModule.ФайловыеФункцииСлужебныйВызовСервера + CommonModule.ФайловыеФункции Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo index 02bb87a60..96cbfdf13 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/Subsystems/ФизическиеЛица/ФизическиеЛица.mdo @@ -16,6 +16,6 @@ CommonModule.ФизическиеЛица Role.ЧтениеФизическихЛиц CommonModule.ФизическиеЛицаКлиент - CommonModule.ФизическиеЛицаПереопределяемый + CommonModule.ФизическиеЛицаКлиентСервер Subsystem.СтандартныеПодсистемы diff --git a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo index e37964f1b..74440db38 100644 --- a/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo +++ b/SSL/src/Subsystems/СтандартныеПодсистемы/СтандартныеПодсистемы.mdo @@ -7,6 +7,7 @@ true АдресныйКлассификатор + АнализЖурналаРегистрации Анкетирование БазоваяФункциональность Банки @@ -25,10 +26,10 @@ ЗапретРедактированияРеквизитовОбъектов ЗащитаПерсональныхДанных ИнтеграцияС1СДокументооборот + ИнформационныйЦентр КалендарныеГрафики КонтактнаяИнформация КонтрольДинамическогоОбновленияКонфигурации - КонтрольЖурналаРегистрации НапоминанияПользователя НастройкаПорядкаЭлементов ОбменДанными diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form index a853c632a..dfaa15b8a 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Form.form @@ -20,7 +20,7 @@ НаименованиеРасширеннаяПодсказка - 78 + 76 Label true true @@ -60,7 +60,7 @@ НомерРасширеннаяПодсказка - 80 + 78 Label true true @@ -103,7 +103,7 @@ true ГруппаШапкаРасширеннаяПодсказка - 77 + 75 Label true true @@ -136,7 +136,7 @@ ДатаРасширеннаяПодсказка - 83 + 81 Label true true @@ -176,7 +176,7 @@ СрокИсполненияРасширеннаяПодсказка - 85 + 83 Label true true @@ -220,7 +220,7 @@ true ГруппаВходящиеРасширеннаяПодсказка - 82 + 80 Label true true @@ -253,7 +253,7 @@ ИсполнительРасширеннаяПодсказка - 88 + 86 Label true true @@ -295,7 +295,7 @@ РольИсполнителяРасширеннаяПодсказка - 90 + 88 Label true true @@ -337,7 +337,7 @@ ОсновнойОбъектАдресацииРасширеннаяПодсказка - 92 + 90 Label true true @@ -380,7 +380,7 @@ ДополнительныйОбъектАдресацииРасширеннаяПодсказка - 94 + 92 Label true true @@ -417,7 +417,7 @@ <key>ru</key> - <value>Адресована</value> + <value>Задача адресована</value> System.DefaultGUIFont @@ -428,7 +428,7 @@ ГруппаАдресацияРасширеннаяПодсказка - 87 + 85 Label true true @@ -440,7 +440,7 @@ Vertical Auto - NormalSeparation + StrongSeparation true true auto @@ -464,7 +464,7 @@ БизнесПроцессРасширеннаяПодсказка - 97 + 95 Label true true @@ -506,7 +506,7 @@ ТочкаМаршрутаРасширеннаяПодсказка - 99 + 97 Label true true @@ -552,7 +552,7 @@ true ГруппаБизнесПроцессРасширеннаяПодсказка - 96 + 94 Label true true @@ -562,8 +562,9 @@ UsualGroup + Vertical Auto - NormalSeparation + StrongSeparation true true auto @@ -588,7 +589,7 @@ Right ВыполненаРасширеннаяПодсказка - 102 + 100 Label true true @@ -621,7 +622,7 @@ ДатаИсполненияРасширеннаяПодсказка - 104 + 102 Label true true @@ -668,7 +669,7 @@ true ГруппаРезультатРасширеннаяПодсказка - 101 + 99 Label true true @@ -679,7 +680,7 @@ UsualGroup Auto - NormalSeparation + StrongSeparation true true auto @@ -687,6 +688,8 @@ Auto + Bottom + true ФормаКоманднаяПанель -1 @@ -701,7 +704,7 @@ false ЗакрытьРасширеннаяПодсказка - 74 + 73 Label true true @@ -716,32 +719,6 @@ UserCmds Auto - - ФормаИзменитьФорму - 73 - true - true - - true - - - ФормаИзменитьФормуРасширеннаяПодсказка - 75 - Label - true - true - - Left - - - Form.StandardCommand.CustomizeForm - Normal - Auto - true - true - UserCmds - Auto - Справка 70 @@ -753,7 +730,7 @@ false СправкаРасширеннаяПодсказка - 76 + 74 Label true true @@ -769,7 +746,7 @@ UserCmds Auto - Left + Right OnCreateAtServer diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/Дополнительно/Help/ru.html index 82fa2d31c..2ce21ef31 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/ЗадачиПоБизнесПроцессу/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form index af18562b1..7f1484baa 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Form.form @@ -22,7 +22,7 @@ КоманднаяПанельСпискаРасширеннаяПодсказка - 54 + 55 Label true true @@ -68,7 +68,7 @@ true НомерРасширеннаяПодсказка - 65 + 66 Label true true @@ -112,7 +112,7 @@ НаименованиеРасширеннаяПодсказка - 67 + 68 Label true true @@ -156,7 +156,7 @@ ДатаРасширеннаяПодсказка - 69 + 70 Label true true @@ -196,7 +196,7 @@ ИсполнительРасширеннаяПодсказка - 71 + 72 Label true true @@ -236,7 +236,7 @@ ПредметРасширеннаяПодсказка - 73 + 74 Label true true @@ -274,10 +274,10 @@ СписокСтрокаПоиска - 56 + 57 СписокСтрокаПоискаРасширеннаяПодсказка - 58 + 59 Label true true @@ -287,7 +287,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 57 + 58 true Список @@ -297,10 +297,10 @@ СписокСостояниеПросмотра - 59 + 60 СписокСостояниеПросмотраРасширеннаяПодсказка - 61 + 62 Label true true @@ -310,7 +310,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 60 + 61 true ViewStatusAddition @@ -321,10 +321,10 @@ СписокУправлениеПоиском - 62 + 63 СписокУправлениеПоискомРасширеннаяПодсказка - 64 + 65 Label true true @@ -334,7 +334,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 63 + 64 true SearchControlAddition @@ -345,7 +345,7 @@ СписокРасширеннаяПодсказка - 55 + 56 Label true true @@ -391,43 +391,6 @@ true - - ПоказыватьВыполненные - 21 - true - - true - - - ПоказыватьВыполненные - - Right - - OnChange - ПоказыватьВыполненныеПриИзменении - - - ПоказыватьВыполненныеРасширеннаяПодсказка - 83 - Label - true - true - - Left - - - - ПоказыватьВыполненныеКонтекстноеМеню - 22 - true - - CheckBoxField - Enter - true - Left - true - - ДеревоЗадач 25 @@ -440,6 +403,17 @@ ДеревоЗадач None + Add + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree ДеревоЗадачВажность 40 @@ -808,7 +782,7 @@ ДеревоЗадачИзменитьРасширеннаяПодсказка - 89 + 88 Label true true @@ -834,7 +808,7 @@ ДеревоЗадачОбновитьРасширеннаяПодсказка - 90 + 89 Label true true @@ -849,6 +823,7 @@ true UserCmds Auto + InAdditionalSubmenu Справка @@ -860,7 +835,7 @@ СправкаРасширеннаяПодсказка - 91 + 90 Label true true @@ -876,6 +851,32 @@ UserCmds Auto + + ДеревоЗадачВывестиСписок + 54 + true + true + + true + + + ДеревоЗадачВывестиСписокРасширеннаяПодсказка + 91 + Label + true + true + + Left + + + Form.Item.ДеревоЗадач.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + Left @@ -976,7 +977,7 @@ ДеревоЗадачКонтекстноеМенюИзменитьРасширеннаяПодсказка - 85 + 84 Label true true @@ -1002,7 +1003,7 @@ ДеревоЗадачКонтекстноеМенюОбновитьРасширеннаяПодсказка - 86 + 85 Label true true @@ -1028,7 +1029,7 @@ ДеревоЗадачКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 87 + 86 Label true true @@ -1054,7 +1055,7 @@ ДеревоЗадачКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 88 + 87 Label true true @@ -1100,6 +1101,44 @@ None true + + ПоказыватьВыполненные + 21 + true + true + + true + + + ПоказыватьВыполненные + + Right + + OnChange + ПоказыватьВыполненныеПриИзменении + + + ПоказыватьВыполненныеРасширеннаяПодсказка + 125 + Label + true + true + + Left + + + + ПоказыватьВыполненныеКонтекстноеМеню + 22 + true + + CheckBoxField + Enter + true + Left + true + + None false @@ -1357,38 +1396,16 @@ - - СоздатьЗадание - - <key>ru</key> - <value>Задание</value> - - 1 - - ru - Создать задание - - - true - - - - СоздатьЗадание - - - Auto - Auto - Изменить <key>ru</key> - <value>Открыть</value> + <value>Изменить</value> 2 ru - Изменить + Изменить задачу true @@ -1414,7 +1431,7 @@ 3 ru - Обновить + Обновить список задач true diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl index 971ed9266..3338a450f 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоБизнесПроцессу/Module.bsl @@ -17,17 +17,18 @@ Элементы.ДеревоЗадач.Видимость = Ложь; КонецЕсли; - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора - (Список.Отбор,"БизнесПроцесс", Параметры.ЗначениеОтбора); Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Задачи бизнес-процесса %1'"), Строка(Параметры.ЗначениеОтбора)); БизнесПроцессыИЗадачиСервер.УстановитьОформлениеЗадач(Список.УсловноеОформление); - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - Список.Отбор, "Выполнена", Ложь); Если ИспользоватьПодчиненныеБизнесПроцессы Тогда ЗаполнитьДеревоЗадач(); Элементы.СрокИсполнения.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДФ='дд.ММ.гггг ЧЧ:мм'", "ДЛФ=D"); + Иначе + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора + (Список.Отбор,"БизнесПроцесс", Параметры.ЗначениеОтбора); + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Список.Отбор, "Выполнена", Ложь); КонецЕсли; КонецПроцедуры @@ -41,12 +42,10 @@ &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Выполнена"); - Если НЕ Настройки["ПоказыватьВыполненные"] Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - Список.Отбор,"Выполнена", Ложь); - КонецЕсли; + ПоказыватьВыполненные = Настройки["ПоказыватьВыполненные"]; + ОбновитьСписокЗадач(); + КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// @@ -55,12 +54,7 @@ &НаКлиенте Процедура ПоказыватьВыполненныеПриИзменении(Элемент) - ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Выполнена"); - - Если НЕ ПоказыватьВыполненные Тогда - ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( - Список.Отбор, "Выполнена", Ложь); - КонецЕсли; + ОбновитьСписокЗадач(); КонецПроцедуры @@ -91,13 +85,6 @@ //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ КОМАНД ФОРМЫ -&НаКлиенте -Процедура СоздатьЗадание(Команда) - - БизнесПроцессыИЗадачиКлиент.СоздатьЗадание(ЭтаФорма); - -КонецПроцедуры - &НаКлиенте Процедура Обновить(Команда) @@ -118,15 +105,36 @@ //////////////////////////////////////////////////////////////////////////////// // СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ +&НаСервере +Процедура ОбновитьСписокЗадач() + + ИспользоватьПодчиненныеБизнесПроцессы = ПолучитьФункциональнуюОпцию("ИспользоватьПодчиненныеБизнесПроцессы"); + Если ИспользоватьПодчиненныеБизнесПроцессы Тогда + ЗаполнитьДеревоЗадач(); + Иначе + ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "Выполнена"); + Если НЕ ПоказыватьВыполненные Тогда + ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора( + Список.Отбор, "Выполнена", Ложь); + КонецЕсли; + КонецЕсли; + +КонецПроцедуры + &НаКлиенте Процедура ОткрытьТекущуюСтрокуДереваЗадач() - Если Элементы.ДеревоЗадач.ТекущиеДанные <> Неопределено Тогда - Если ТипЗнч(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - Иначе - ОткрытьЗначение(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - КонецЕсли; + Если Элементы.ДеревоЗадач.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Истина; + Если ТипЗнч(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда + СтандартнаяОбработка = Не БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); + КонецЕсли; + + Если СтандартнаяОбработка Тогда + ОткрытьЗначение(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); КонецЕсли; КонецПроцедуры @@ -228,15 +236,19 @@ | КОНЕЦ КАК Важность, | ВЫБОР | КОГДА Задачи.СостояниеБизнесПроцесса = ЗНАЧЕНИЕ(Перечисление.СостоянияБизнесПроцессов.Остановлен) - | ТОГДА Истина - | ИНАЧЕ Ложь + | ТОГДА ИСТИНА + | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Остановлен |ИЗ | Задача.ЗадачаИсполнителя КАК Задачи |ГДЕ - | Задачи.БизнесПроцесс = &БизнесПроцесс - | И Задачи.ПометкаУдаления = Ложь"; - + | Задачи.БизнесПроцесс = &БизнесПроцесс + | И Задачи.ПометкаУдаления = ЛОЖЬ"; + Если Не ПоказыватьВыполненные Тогда + Запрос.Текст = Запрос.Текст + " + | И Задачи.Выполнена = &Выполнена"; + Запрос.УстановитьПараметр("Выполнена", Ложь); + КонецЕсли; Запрос.УстановитьПараметр("БизнесПроцесс", БизнесПроцессСсылка); Результат = Запрос.Выполнить(); diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form index f009976bf..be4518e3d 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Form.form @@ -22,7 +22,7 @@ КоманднаяПанельСпискаРасширеннаяПодсказка - 51 + 52 Label true true @@ -68,7 +68,7 @@ true НомерРасширеннаяПодсказка - 62 + 63 Label true true @@ -112,7 +112,7 @@ НаименованиеРасширеннаяПодсказка - 64 + 65 Label true true @@ -152,7 +152,7 @@ ИсполнительРасширеннаяПодсказка - 66 + 67 Label true true @@ -192,7 +192,7 @@ СрокИсполненияРасширеннаяПодсказка - 68 + 69 Label true true @@ -232,10 +232,10 @@ СписокСтрокаПоиска - 53 + 54 СписокСтрокаПоискаРасширеннаяПодсказка - 55 + 56 Label true true @@ -245,7 +245,7 @@ СписокСтрокаПоискаКонтекстноеМеню - 54 + 55 true Список @@ -255,10 +255,10 @@ СписокСостояниеПросмотра - 56 + 57 СписокСостояниеПросмотраРасширеннаяПодсказка - 58 + 59 Label true true @@ -268,7 +268,7 @@ СписокСостояниеПросмотраКонтекстноеМеню - 57 + 58 true ViewStatusAddition @@ -279,10 +279,10 @@ СписокУправлениеПоиском - 59 + 60 СписокУправлениеПоискомРасширеннаяПодсказка - 61 + 62 Label true true @@ -292,7 +292,7 @@ СписокУправлениеПоискомКонтекстноеМеню - 60 + 61 true SearchControlAddition @@ -303,7 +303,7 @@ СписокРасширеннаяПодсказка - 52 + 53 Label true true @@ -367,7 +367,7 @@ ПоказыватьВыполненныеРасширеннаяПодсказка - 78 + 79 Label true true @@ -399,6 +399,17 @@ ДеревоЗадач None + Add + Copy + Delete + EndEdit + HierarchicalList + List + MoveDown + MoveUp + SortListAsc + SortListDesc + Tree ДеревоЗадачВажность 28 @@ -417,7 +428,7 @@ ДеревоЗадачВажностьРасширеннаяПодсказка - 97 + 99 Label true true @@ -470,7 +481,7 @@ ВыполненаРасширеннаяПодсказка - 99 + 101 Label true true @@ -511,7 +522,7 @@ ДеревоЗадачОстановленРасширеннаяПодсказка - 101 + 103 Label true true @@ -563,7 +574,7 @@ None ДеревоЗадачТипРасширеннаяПодсказка - 104 + 106 Label true true @@ -615,7 +626,7 @@ ДеревоЗадачНаименованиеРасширеннаяПодсказка - 106 + 108 Label true true @@ -659,7 +670,7 @@ ТипИНаименованиеРасширеннаяПодсказка - 103 + 105 Label true true @@ -687,7 +698,7 @@ ДеревоЗадачИсполнительРасширеннаяПодсказка - 108 + 110 Label true true @@ -733,7 +744,7 @@ СрокИсполнения1РасширеннаяПодсказка - 110 + 112 Label true true @@ -775,7 +786,7 @@ ДеревоЗадачИзменитьРасширеннаяПодсказка - 84 + 85 Label true true @@ -801,7 +812,7 @@ ДеревоЗадачОбновитьРасширеннаяПодсказка - 85 + 86 Label true true @@ -816,6 +827,7 @@ true UserCmds Auto + InAdditionalSubmenu Справка @@ -827,7 +839,7 @@ СправкаРасширеннаяПодсказка - 86 + 87 Label true true @@ -843,6 +855,32 @@ UserCmds Auto + + ДеревоЗадачВывестиСписок + 51 + true + true + + true + + + ДеревоЗадачВывестиСписокРасширеннаяПодсказка + 88 + Label + true + true + + Left + + + Form.Item.ДеревоЗадач.StandardCommand.OutputList + Normal + Auto + true + true + UserCmds + Auto + Left @@ -851,10 +889,10 @@ ДеревоЗадачСтрокаПоиска - 88 + 90 ДеревоЗадачСтрокаПоискаРасширеннаяПодсказка - 90 + 92 Label true true @@ -864,7 +902,7 @@ ДеревоЗадачСтрокаПоискаКонтекстноеМеню - 89 + 91 true ДеревоЗадач @@ -874,10 +912,10 @@ ДеревоЗадачСостояниеПросмотра - 91 + 93 ДеревоЗадачСостояниеПросмотраРасширеннаяПодсказка - 93 + 95 Label true true @@ -887,7 +925,7 @@ ДеревоЗадачСостояниеПросмотраКонтекстноеМеню - 92 + 94 true ViewStatusAddition @@ -898,10 +936,10 @@ ДеревоЗадачУправлениеПоиском - 94 + 96 ДеревоЗадачУправлениеПоискомРасширеннаяПодсказка - 96 + 98 Label true true @@ -911,7 +949,7 @@ ДеревоЗадачУправлениеПоискомКонтекстноеМеню - 95 + 97 true SearchControlAddition @@ -922,7 +960,7 @@ ДеревоЗадачРасширеннаяПодсказка - 87 + 89 Label true true @@ -943,7 +981,7 @@ ДеревоЗадачКонтекстноеМенюИзменитьРасширеннаяПодсказка - 80 + 81 Label true true @@ -969,7 +1007,7 @@ ДеревоЗадачКонтекстноеМенюОбновитьРасширеннаяПодсказка - 81 + 82 Label true true @@ -995,7 +1033,7 @@ ДеревоЗадачКонтекстноеМенюКопироватьВБуферОбменаРасширеннаяПодсказка - 82 + 83 Label true true @@ -1021,7 +1059,7 @@ ДеревоЗадачКонтекстноеМенюВывестиСписокРасширеннаяПодсказка - 83 + 84 Label true true @@ -1146,7 +1184,7 @@ ПоказыватьВыполненные <key>ru</key> - <value>Показывать выполненные</value> + <value>Показывать выполненные задачи</value> 2 @@ -1348,12 +1386,12 @@ Изменить <key>ru</key> - <value>Открыть</value> + <value>Изменить</value> 1 ru - Изменить + Изменить задачу true @@ -1379,7 +1417,7 @@ 2 ru - Обновить + Обновить список задач true diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl index 4912c47d3..48e845021 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ЗадачиПоПредмету/Module.bsl @@ -309,12 +309,17 @@ &НаКлиенте Процедура ОткрытьТекущуюСтрокуДереваЗадач() - Если Элементы.ДеревоЗадач.ТекущиеДанные <> Неопределено Тогда - Если ТипЗнч(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда - БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - Иначе - ОткрытьЗначение(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); - КонецЕсли; + Если Элементы.ДеревоЗадач.ТекущиеДанные = Неопределено Тогда + Возврат; + КонецЕсли; + + СтандартнаяОбработка = Истина; + Если ТипЗнч(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда + СтандартнаяОбработка = Не БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); + КонецЕсли; + + Если СтандартнаяОбработка Тогда + ОткрытьЗначение(Элементы.ДеревоЗадач.ТекущиеДанные.Ссылка); КонецЕсли; КонецПроцедуры diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачи/Help/ru.html index a3bc06f48..7011e066e 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/МоиЗадачиДляРабочегоСтола/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/МоиЗадачиДляРабочегоСтола/Help/ru.html index a3bc06f48..7011e066e 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/ПеренаправитьЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form index 7aa71fd7f..262c3e26f 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Form.form @@ -524,7 +524,7 @@ ФормаКоманднаяПанель -1 - OK + Перенаправить 3 true true @@ -533,7 +533,7 @@ false - OKРасширеннаяПодсказка + ПеренаправитьРасширеннаяПодсказка 43 Label true @@ -542,7 +542,7 @@ Left - Form.Command.OK + Form.Command.Перенаправить Auto true true @@ -835,15 +835,15 @@ - OK + Перенаправить <key>ru</key> - <value>OK</value> + <value>Перенаправить</value> 1 ru - OK + Перенаправить задачу новому исполнителю true diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ПеренаправитьЗадачи/Help/ru.html index a2c60ef44..c895c5a05 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/ФормаЗадачи/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form index d48ddc3c2..9138ee696 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Form.form @@ -13,7 +13,7 @@ ДекорацияКартинкаРасширеннаяПодсказка - 130 + 136 Label true true @@ -47,7 +47,8 @@ 94 <key>ru</key> - <value>Это общая форма задачи. Для выполнения этой задачи можно открыть специальную форму.</value> + <value>Здесь представлены общие сведения о задаче. +Для выполнения задачи необходимо перейти в специальную форму задачи.</value> true true @@ -56,7 +57,7 @@ ДекорацияТекстРасширеннаяПодсказка - 132 + 138 Label true true @@ -91,7 +92,7 @@ ДекорацияОткрытьФормуЗадачиРасширеннаяПодсказка - 133 + 139 Label true true @@ -128,7 +129,7 @@ ГруппаФормаВыполненияТекстРасширеннаяПодсказка - 131 + 137 Label true true @@ -151,40 +152,11 @@ true - false - - ГруппаФормаВыполненияРасширеннаяПодсказка - 129 - Label - true - true - - Left - - - UsualGroup - - Auto - NormalSeparation - true - true - Auto - Auto - - - - ГруппаСостояние - 99 - true - true - - true - true false - ГруппаСостояниеРасширеннаяПодсказка - 134 + ГруппаФормаВыполненияРасширеннаяПодсказка + 135 Label true true @@ -203,146 +175,18 @@ - ГруппаЗаголовок - 83 - - Автор - 78 - true - true - - true - - - Объект.Автор - - - АвторРасширеннаяПодсказка - 136 - Label - true - true - - Left - - - - АвторКонтекстноеМеню - 79 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - Дата - 113 - true - true - - true - - - Объект.Date - - - ДатаРасширеннаяПодсказка - 138 - Label - true - true - - Left - - - - ДатаКонтекстноеМеню - 114 - true - - InputField - true - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - - - Номер - 115 - true - true - - true - - - Объект.Number - - - НомерРасширеннаяПодсказка - 140 - Label - true - true - - Left - - - - НомерКонтекстноеМеню - 116 - true - - InputField - Enter - true - Left - true - - true - true - true - true - true - true - Normal - - + ГруппаСостояние + 99 true true true - - <key>ru</key> - <value>Группа заголовок</value> - true + false - ГруппаЗаголовокРасширеннаяПодсказка - 135 + ГруппаСостояниеРасширеннаяПодсказка + 140 Label true true @@ -353,6 +197,7 @@ UsualGroup Auto + StrongSeparation true true Auto @@ -360,30 +205,541 @@ - ГруппаИсполнение - 28 - - Исполнитель - 20 + Шапка + 124 + + ГруппыШапки + 127 + + ГруппаАвторИсполнитель + 83 + + Автор + 78 + true + true + + true + + + Объект.Автор + + + АвторРасширеннаяПодсказка + 144 + Label + true + true + + Left + + + + АвторКонтекстноеМеню + 79 + true + + InputField + true + Enter + true + Left + true + + true + true + true + true + true + true + Normal + + + + Исполнитель + 20 + + <key>ru</key> + <value>Исполнитель</value> + + true + true + + true + + + Объект.Исполнитель + + + ru + Исполнитель + + + ИсполнительРасширеннаяПодсказка + 146 + Label + true + true + + Left + + + + ИсполнительКонтекстноеМеню + 21 + true + + InputField + true + Enter + true + Left + true + Left + + true + true + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Автор и исполнитель</value> + + + ГруппаАвторИсполнительРасширеннаяПодсказка + 143 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаРеквизитыШапки + 28 + + ГруппаДатаИСрок + 125 + + Дата + 113 + true + true + + true + + + Объект.Date + + + ДатаРасширеннаяПодсказка + 150 + Label + true + true + + Left + + + + ДатаКонтекстноеМеню + 114 + true + + InputField + true + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + СрокИсполнения + 12 + true + true + + true + + + Объект.СрокИсполнения + + + СрокИсполненияРасширеннаяПодсказка + 152 + Label + true + true + + Left + + + + СрокИсполненияКонтекстноеМеню + 13 + true + + InputField + Enter + true + Left + true + Left + + true + true + false + true + true + true + true + Normal + + + true + true + + true + + + <key>ru</key> + <value>Дата и срок</value> + + + ГруппаДатаИСрокРасширеннаяПодсказка + 149 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + + ГруппаНомерИВажность + 126 + + Номер + 115 + true + true + + true + + + Объект.Number + + + НомерРасширеннаяПодсказка + 155 + Label + true + true + + Left + + + + НомерКонтекстноеМеню + 116 + true + + InputField + Enter + true + Left + true + + true + true + false + true + true + true + true + Normal + + + + Важность + 16 + true + true + + true + + + Объект.Важность + + + ВажностьРасширеннаяПодсказка + 157 + Label + true + true + + Left + + + + ВажностьКонтекстноеМеню + 17 + true + + InputField + Enter + true + Left + true + Left + + 16 + true + true + false + true + true + true + + Style.BorderColor + + Normal + + + true + true + + true + + + <key>ru</key> + <value>Номер и важность</value> + + + ГруппаНомерИВажностьРасширеннаяПодсказка + 154 + Label + true + true + + Left + + + UsualGroup + + Vertical + Auto + true + true + Auto + Auto + + + true + true + + true + + + <key>ru</key> + <value>Реквизиты шапки</value> + + + + ГруппаРеквизитыШапкиРасширеннаяПодсказка + 148 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + true + true + + true + <key>ru</key> - <value>Исполнитель</value> + <value>Группы шапки</value> + + ГруппыШапкиРасширеннаяПодсказка + 142 + Label + true + true + + Left + + + UsualGroup + + Auto + true + true + Auto + Auto + + + + ГруппаПриоритет + 88 + + СрокНачалаИсполнения + 85 + true + true + + true + + + Объект.ДатаНачала + + + СрокНачалаИсполненияРасширеннаяПодсказка + 160 + Label + true + true + + Left + + + + СрокНачалаИсполненияКонтекстноеМеню + 86 + true + + InputField + Enter + true + Left + true + + 10 + true + true + + ru + ДЛФ=D + + true + true + true + Normal + + + + СрокНачалаИсполненияВремя + 110 + true + true + + true + + + Объект.ДатаНачала + + None + + СрокНачалаИсполненияВремяРасширеннаяПодсказка + 162 + Label + true + true + + Left + + + + СрокНачалаИсполненияВремяКонтекстноеМеню + 111 + true + + InputField + Enter + true + Left + true + + 8 + true + true + false + + ru + ДЛФ=T + + true + true + true + Normal + + true true true - - Объект.Исполнитель - - + <key>ru</key> - <value>Исполнитель</value> - </toolTip> + <value>Приоритет</value> + - ИсполнительРасширеннаяПодсказка - 143 + ГруппаПриоритетРасширеннаяПодсказка + 159 Label true true @@ -391,114 +747,13 @@ Left - - ИсполнительКонтекстноеМеню - 21 - true - - InputField - true - Enter - true - Left - true - Left - - true - true - true - true - true - true - Normal - - - - СрокИсполнения - 12 - true - true - - true - - - Объект.СрокИсполнения - - - СрокИсполненияРасширеннаяПодсказка - 145 - Label - true - true - - Left - - - - СрокИсполненияКонтекстноеМеню - 13 - true - - InputField - Enter - true - Left - true - Left - - true - true - true - true - true - true - Normal - - - - Важность - 16 - true - true - - true - - - Объект.Важность - - - ВажностьРасширеннаяПодсказка - 147 - Label - true - true - - Left - - - - ВажностьКонтекстноеМеню - 17 - true - - InputField - Enter - true - Left - true - Left - - 10 - true - true - false - true - true - true - - Style.BorderColor - - Normal + UsualGroup + + Auto + true + true + Auto + Auto true @@ -506,144 +761,9 @@ true - - <key>ru</key> - <value>Исполнение</value> - - - System.DefaultGUIFont - true - false - false - false - - true - ГруппаИсполнениеРасширеннаяПодсказка - 142 - Label - true - true - - Left - - - UsualGroup - - Auto - true - true - Auto - Auto - - - - ГруппаПриоритет - 88 - - СрокНачалаИсполнения - 85 - true - true - - true - - - Объект.ДатаНачала - - - СрокНачалаИсполненияРасширеннаяПодсказка - 150 - Label - true - true - - Left - - - - СрокНачалаИсполненияКонтекстноеМеню - 86 - true - - InputField - Enter - true - Left - true - - 10 - true - true - - ru - ДЛФ=D - - true - true - true - Normal - - - - СрокНачалаИсполненияВремя - 110 - true - true - - true - - - Объект.ДатаНачала - - None - - СрокНачалаИсполненияВремяРасширеннаяПодсказка - 152 - Label - true - true - - Left - - - - СрокНачалаИсполненияВремяКонтекстноеМеню - 111 - true - - InputField - Enter - true - Left - true - - 8 - true - true - false - - ru - ДЛФ=T - - true - true - true - Normal - - - true - true - - true - - - <key>ru</key> - <value>Приоритет</value> - - - ГруппаПриоритетРасширеннаяПодсказка - 149 + ШапкаРасширеннаяПодсказка + 141 Label true true @@ -653,7 +773,9 @@ UsualGroup + Vertical Auto + StrongSeparation true true Auto @@ -676,7 +798,7 @@ НаименованиеРасширеннаяПодсказка - 155 + 165 Label true true @@ -714,11 +836,11 @@ true - Объект.Предмет + ПредметСтрокой ПредметРасширеннаяПодсказка - 157 + 167 Label true true @@ -737,6 +859,10 @@ Left true + + Click + ПредметНажатие + true true true @@ -756,7 +882,7 @@ None ОписаниеРасширеннаяПодсказка - 159 + 169 Label true true @@ -808,7 +934,7 @@ ГруппаСодержаниеРасширеннаяПодсказка - 154 + 164 Label true true @@ -820,10 +946,9 @@ Vertical Auto - WeakSeparation + NormalSeparation true true - auto Auto Auto @@ -845,7 +970,7 @@ false ВыполненаРасширеннаяПодсказка - 163 + 173 Label true true @@ -858,6 +983,7 @@ Normal Auto true + 1 true UserCmds Auto @@ -883,7 +1009,7 @@ ДатаИсполненияРасширеннаяПодсказка - 164 + 174 Label true true @@ -930,7 +1056,7 @@ None ДатаИсполненияВремяРасширеннаяПодсказка - 166 + 176 Label true true @@ -979,7 +1105,7 @@ true ГруппаВыполненаДатаРасширеннаяПодсказка - 162 + 172 Label true true @@ -1005,16 +1131,10 @@ ru Результат выполнения - - System.DefaultGUIFont - true - false - false - false - + ГруппаРезультатРасширеннаяПодсказка - 161 + 171 Label true true @@ -1048,7 +1168,7 @@ false ЗаписатьИЗакрытьРасширеннаяПодсказка - 124 + 130 Label true true @@ -1074,7 +1194,7 @@ ОсновнаяКоманднаяПанельРасширеннаяПодсказка - 125 + 131 Label true true @@ -1083,7 +1203,7 @@ - FormCommandPanelGlobalCommands + Form @@ -1097,7 +1217,7 @@ false ДополнительноРасширеннаяПодсказка - 126 + 132 Label true true @@ -1115,17 +1235,16 @@ InAdditionalSubmenu - Справка - 43 + ФормаИзменитьФорму + 129 true true true - false - СправкаРасширеннаяПодсказка - 127 + ФормаИзменитьФормуРасширеннаяПодсказка + 133 Label true true @@ -1133,7 +1252,7 @@ Left - Form.StandardCommand.Help + Form.StandardCommand.CustomizeForm Normal Auto true @@ -1142,16 +1261,16 @@ Auto - ФормаПеречитать - 123 + ФормаСправка + 128 true true true - ФормаПеречитатьРасширеннаяПодсказка - 128 + ФормаСправкаРасширеннаяПодсказка + 134 Label true true @@ -1159,7 +1278,7 @@ Left - Form.StandardCommand.Reread + Form.StandardCommand.Help Normal Auto true @@ -1177,6 +1296,12 @@ OnCreateAtServer ПриСозданииНаСервере + Activate + Copy + Delete + Execute + ExecuteAndClose + SetDeletionMark DontBlock true true diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl index 761a8587a..b2b818696 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаЗадачи/Module.bsl @@ -36,6 +36,18 @@ КонецПроцедуры +&НаКлиенте +Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) + + Если ТипЗнч(Объект.Предмет) = Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда + БизнесПроцессыИЗадачиКлиент.ОткрытьФормуВыполненияЗадачи(Объект.Предмет); + Иначе + ОткрытьЗначение(Объект.Предмет); + КонецЕсли; + СтандартнаяОбработка = Ложь; + +КонецПроцедуры + &НаКлиенте Процедура ДатаИсполненияПриИзменении(Элемент) @@ -102,3 +114,4 @@ Элементы.ГруппаСостояние, Элементы.ДатаИсполнения); КонецПроцедуры + diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form index c1a08fd35..5ec0e4861 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Forms/ФормаСписка/Form.form @@ -311,7 +311,7 @@ ru - все + все задачи 0 @@ -1373,7 +1373,7 @@ ПоАвтору <key>ru</key> - <value>По автору</value> + <value>Автор</value> 2 @@ -1393,7 +1393,7 @@ ПоИсполнителю <key>ru</key> - <value>По исполнителю</value> + <value>Исполнитель</value> 3 @@ -1413,7 +1413,7 @@ ПоказыватьЗадачи <key>ru</key> - <value>Показывать задачи</value> + <value>Показывать</value> 4 diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html index 443a2c279..da972f51a 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html +++ b/SSL/src/Tasks/ЗадачаИсполнителя/Help/ru.html @@ -1,4 +1,4 @@ - +

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

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

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

                      diff --git a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl index de225651d..4466ba2b4 100644 --- a/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl +++ b/SSL/src/Tasks/ЗадачаИсполнителя/ObjectModule.bsl @@ -1,3 +1,5 @@ +#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда + //////////////////////////////////////////////////////////////////////////////// // ПРОГРАММНЫЙ ИНТЕРФЕЙС @@ -83,7 +85,7 @@ КонецЕсли; Если ПредыдущаяПометкаУдаления <> ПометкаУдаления Тогда - БизнесПроцессыИЗадачиВызовСервера.ПриПометкеУдаленияЗадачи(Ссылка, ПометкаУдаления); + БизнесПроцессыИЗадачиСервер.ПриПометкеУдаленияЗадачи(Ссылка, ПометкаУдаления); КонецЕсли; Если НЕ Ссылка.Пустая() Тогда @@ -99,8 +101,10 @@ КонецЕсли; // СтандартныеПодсистемы.УправлениеДоступом - ГруппаИсполнителейЗадач = БизнесПроцессыИЗадачиВызовСервера.ГруппаИсполнителейЗадач(РольИсполнителя, + УстановитьПривилегированныйРежим(Истина); + ГруппаИсполнителейЗадач = БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации); + УстановитьПривилегированныйРежим(Ложь); // Конец СтандартныеПодсистемы.УправлениеДоступом // Заполнение реквизита ДатаПринятияКИсполнению @@ -136,7 +140,7 @@ НачатьТранзакцию(); Попытка - ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиВызовСервера.ПолучитьБизнесПроцессыГлавнойЗадачи(Ссылка); + ПодчиненныеБизнесПроцессы = БизнесПроцессыИЗадачиСервер.БизнесПроцессыГлавнойЗадачи(Ссылка); Если ПодчиненныеБизнесПроцессы <> Неопределено Тогда Для Каждого ПодчиненныйБизнесПроцесс Из ПодчиненныеБизнесПроцессы Цикл БизнесПроцессОбъект = ПодчиненныйБизнесПроцесс.ПолучитьОбъект(); @@ -153,3 +157,5 @@ КонецПроцедуры + +#КонецЕсли \ No newline at end of file diff --git a/SSL/src/WebServices/Exchange/Module.bsl b/SSL/src/WebServices/Exchange/Module.bsl index caa75dc59..fcf252a50 100644 --- a/SSL/src/WebServices/Exchange/Module.bsl +++ b/SSL/src/WebServices/Exchange/Module.bsl @@ -311,7 +311,7 @@ Если НайтиФайлы(ИмяФайла).Количество() = 0 Тогда ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2. |Необходимо убедиться, что в форме настройки программы заданы значения констант - |КаталогВременныхФайловСообщенийОбменаДляLinux и КаталогВременныхФайловСообщенийОбменаДляWindows.'" + |КаталогВременныхФайловДляLinux и КаталогВременныхФайловДляWindows.'" ); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(НомерЧасти), Строка(TransferId)); ВызватьИсключение(ТекстСообщения); @@ -338,7 +338,7 @@ ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); КонецЕсли; - КаталогВыгрузки = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + КаталогВыгрузки = ОбщегоНазначенияПовтИсп.КаталогВременногоХранилищаФайлов(); ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВыгрузки, Разархиватор.Элементы[0].Имя); @@ -382,7 +382,7 @@ УстановитьПривилегированныйРежим(Истина); - ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), FileName); + ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбщегоНазначенияПовтИсп.КаталогВременногоХранилищаФайлов(), FileName); Файл = Новый Файл(ПолноеИмяВременногоФайла); @@ -539,9 +539,9 @@ Параметры = Новый Массив; Параметры.Добавить(УзелИнформационнойБазы); - Параметры.Добавить(Данные); + Параметры.Добавить(ОбменДаннымиСервер.МассивИдентификаторовОбъектовМетаданных(Данные)); - ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузки", + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузкиФоновымЗаданием", Параметры, , НСтр("ru = 'Создание обмена данными.'") @@ -586,7 +586,7 @@ ВременныйКаталог = "{ИдентификаторСессии}"; ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "ИдентификаторСессии", Строка(ИдентификаторСессии)); - Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); + Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбщегоНазначенияПовтИсп.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); Возврат Результат; КонецФункции diff --git a/SSL/src/WebServices/Exchange_2_0_1_6/Exchange_2_0_1_6.mdo b/SSL/src/WebServices/Exchange_2_0_1_6/Exchange_2_0_1_6.mdo index 91d2a511b..f9d5b04d5 100644 --- a/SSL/src/WebServices/Exchange_2_0_1_6/Exchange_2_0_1_6.mdo +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Exchange_2_0_1_6.mdo @@ -985,4 +985,66 @@ + + Ping + + ru + Ping + + + string + http://www.w3.org/2001/XMLSchema + + true + Ping + Managed + + + TestConnection + + ru + Test connection + + + boolean + http://www.w3.org/2001/XMLSchema + + TestConnection + Managed + + ExchangePlanName + + ru + Exchange plan name + + + string + http://www.w3.org/2001/XMLSchema + + + + NodeCode + + ru + Node code + + + string + http://www.w3.org/2001/XMLSchema + + + + Result + + ru + Result + + + string + http://www.w3.org/2001/XMLSchema + + true + Out + + 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 8e3b9c143..7d7eff2a2 100644 --- a/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/Exchange_2_0_1_6/Module.bsl @@ -244,10 +244,8 @@ // Соответствует операции GetFilePart Функция GetFilePart(TransferId, PartNumber, PartData) - ИмяФайла = "data.zip.[n]"; - ИмяФайла = СтрЗаменить(ИмяФайла, "[n]", Формат(PartNumber, "ЧГ=0")); + ИменаФайлов = НайтиФайлЧасти(ВременныйКаталогВыгрузки(TransferId), PartNumber); - ИменаФайлов = НайтиФайлы(ВременныйКаталогВыгрузки(TransferId), ИмяФайла); Если ИменаФайлов.Количество() = 0 Тогда ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2'"); @@ -313,7 +311,7 @@ Если НайтиФайлы(ИмяФайла).Количество() = 0 Тогда ШаблонСообщения = НСтр("ru = 'Не найден фрагмент %1 сессии передачи с идентификатором %2. |Необходимо убедиться, что в форме настройки программы заданы значения констант - |КаталогВременныхФайловСообщенийОбменаДляLinux и КаталогВременныхФайловСообщенийОбменаДляWindows.'" + |КаталогВременныхФайловДляLinux и КаталогВременныхФайловДляWindows.'" ); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Строка(НомерЧасти), Строка(TransferId)); ВызватьИсключение(ТекстСообщения); @@ -340,7 +338,7 @@ ВызватьИсключение(НСтр("ru = 'Файл архива не содержит данных.'")); КонецЕсли; - КаталогВыгрузки = ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(); + КаталогВыгрузки = ОбщегоНазначенияПовтИсп.КаталогВременногоХранилищаФайлов(); ИмяФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(КаталогВыгрузки, Разархиватор.Элементы[0].Имя); @@ -384,13 +382,34 @@ УстановитьПривилегированныйРежим(Истина); - ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), FileName); + ПолноеИмяВременногоФайла = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбщегоНазначенияПовтИсп.КаталогВременногоХранилищаФайлов(), FileName); Файл = Новый Файл(ПолноеИмяВременногоФайла); Возврат Файл.Существует(); КонецФункции +// Соответствует операции Ping +Функция Ping() + // Проверка связи. + Возврат ""; +КонецФункции + +// Соответствует операции TestConnection +Функция TestConnection(ИмяПланаОбмена, КодУзла, Результат) + + ОбменДаннымиСервер.ПроверитьВозможностьВыполненияОбменов(); + + УстановитьПривилегированныйРежим(Истина); + + Если ПланыОбмена[ИмяПланаОбмена].НайтиПоКоду(КодУзла).Пустая() Тогда + Результат = НСтр("ru = 'Возможность синхронизации данных отключена администратором приложения в Интернете.'"); + Возврат Ложь; + КонецЕсли; + + Возврат Истина; +КонецФункции + //////////////////////////////////////////////////////////////////////////////// // Локальные служебные процедуры и функции @@ -541,9 +560,9 @@ Параметры = Новый Массив; Параметры.Добавить(УзелИнформационнойБазы); - Параметры.Добавить(Данные); + Параметры.Добавить(ОбменДаннымиСервер.МассивИдентификаторовОбъектовМетаданных(Данные)); - ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузки", + ФоновоеЗадание = ФоновыеЗадания.Выполнить("ОбменДаннымиСервер.ЗарегистрироватьДанныеДляНачальнойВыгрузкиФоновымЗаданием", Параметры, , НСтр("ru = 'Создание обмена данными.'") @@ -588,8 +607,34 @@ ВременныйКаталог = "{ИдентификаторСессии}"; ВременныйКаталог = СтрЗаменить(ВременныйКаталог, "ИдентификаторСессии", Строка(ИдентификаторСессии)); - Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбменДаннымиПовтИсп.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); + Результат = ОбщегоНазначенияКлиентСервер.ПолучитьПолноеИмяФайла(ОбщегоНазначенияПовтИсп.КаталогВременногоХранилищаФайлов(), ВременныйКаталог); Возврат Результат; КонецФункции +Функция НайтиФайлЧасти(Знач Каталог, Знач НомерФайла) + + Для КоличествоРазрядов = КоличествоРазрядовЦисла(НомерФайла) По 5 Цикл + + ФорматнаяСтрока = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ЧЦ=%1; ЧВН=; ЧГ=0", Строка(КоличествоРазрядов)); + + ИмяФайла = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("data.zip.%1", Формат(НомерФайла, ФорматнаяСтрока)); + + ИменаФайлов = НайтиФайлы(Каталог, ИмяФайла); + + Если ИменаФайлов.Количество() > 0 Тогда + + Возврат ИменаФайлов; + + КонецЕсли; + + КонецЦикла; + + Возврат Новый Массив; +КонецФункции + +Функция КоличествоРазрядовЦисла(Знач Число) + + Возврат СтрДлина(Формат(Число, "ЧДЦ=0; ЧГ=0")); + +КонецФункции diff --git a/SSL/src/WebServices/Files/Module.bsl b/SSL/src/WebServices/Files/Module.bsl index e31fc039f..6e98a7ca6 100644 --- a/SSL/src/WebServices/Files/Module.bsl +++ b/SSL/src/WebServices/Files/Module.bsl @@ -138,7 +138,7 @@ ДанныеФайла.BinaryData = ХранилищеФайла.Получить(); Иначе - ПолныйПуть = ФайловыеФункции.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; + ПолныйПуть = ФайловыеФункцииСлужебный.ПолныйПутьТома(ВерсияСсылка.Том) + ВерсияСсылка.ПутьКФайлу; Попытка ДанныеФайла.BinaryData = Новый ДвоичныеДанные(ПолныйПуть); Исключение @@ -207,7 +207,7 @@ НовыйФайл = РаботаСФайламиВызовСервера.СоздатьФайлСВерсией( Папка, ФайлXDTO.Name, - ФайловыеФункцииКлиентСервер.РасширениеБезТочки(ФайлXDTO.Extension), + ФайловыеФункцииСлужебныйКлиентСервер.РасширениеБезТочки(ФайлXDTO.Extension), ВремяИзменения, ВремяИзмененияУниверсальное, ДвоичныеДанные.Размер(), diff --git a/SSL/src/WebServices/InterfaceVersion/Module.bsl b/SSL/src/WebServices/InterfaceVersion/Module.bsl index 8655dd135..cb4cf62bc 100644 --- a/SSL/src/WebServices/InterfaceVersion/Module.bsl +++ b/SSL/src/WebServices/InterfaceVersion/Module.bsl @@ -55,7 +55,13 @@ МассивВерсий = Неопределено; СтруктураПоддерживаемыхВерсий = Новый Структура; - СтандартныеПодсистемыПереопределяемый.ПолучитьПоддерживаемыеВерсии(СтруктураПоддерживаемыхВерсий); + СтандартныеПодсистемыПереопределяемый.ПолучитьПоддерживаемыеВерсииПрограммныхИнтерфейсов(СтруктураПоддерживаемыхВерсий); + + // СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса + МассивВерсий = Новый Массив; + МассивВерсий.Добавить("1.0.2.1"); + СтруктураПоддерживаемыхВерсий.Вставить("СообщенияВМоделиСервиса", МассивВерсий); + // Конец СтандартныеПодсистемы.РаботаВМоделиСервиса.БазоваяФункциональностьВМоделиСервиса СтруктураПоддерживаемыхВерсий.Свойство(InterfaceName, МассивВерсий); diff --git a/SSL/src/WebServices/MessageExchange/Module.bsl b/SSL/src/WebServices/MessageExchange/Module.bsl index 4fd86d3c7..d9f68446a 100644 --- a/SSL/src/WebServices/MessageExchange/Module.bsl +++ b/SSL/src/WebServices/MessageExchange/Module.bsl @@ -26,7 +26,7 @@ // Обрабатываем очередь сообщений Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы(); + ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы(ЗагруженныеСообщения); Иначе @@ -104,9 +104,10 @@ СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключения.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключения.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключения.WSПароль); + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключения.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключения.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключения.WSПароль); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); // добавляем запись в РС РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); diff --git a/SSL/src/WebServices/MessageExchange_2_0_1_6/MessageExchange_2_0_1_6.mdo b/SSL/src/WebServices/MessageExchange_2_0_1_6/MessageExchange_2_0_1_6.mdo index 9a45f9486..7f46c189b 100644 --- a/SSL/src/WebServices/MessageExchange_2_0_1_6/MessageExchange_2_0_1_6.mdo +++ b/SSL/src/WebServices/MessageExchange_2_0_1_6/MessageExchange_2_0_1_6.mdo @@ -254,4 +254,18 @@ + + Ping + + ru + Ping + + + string + http://www.w3.org/2001/XMLSchema + + true + Ping + Managed + 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 09707fa04..1f469cf17 100644 --- a/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/MessageExchange_2_0_1_6/Module.bsl @@ -26,7 +26,7 @@ // Обрабатываем очередь сообщений Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда - ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы(); + ОбменСообщениямиВнутренний.ОбработатьОчередьСообщенийСистемы(ЗагруженныеСообщения); Иначе @@ -109,9 +109,10 @@ СтруктураЗаписи.Вставить("Узел", КонечнаяТочка); СтруктураЗаписи.Вставить("ВидТранспортаСообщенийОбменаПоУмолчанию", Перечисления.ВидыТранспортаСообщенийОбмена.WS); - СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключения.WSURLВебСервиса); - СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключения.WSИмяПользователя); - СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключения.WSПароль); + СтруктураЗаписи.Вставить("WSURLВебСервиса", НастройкиПодключения.WSURLВебСервиса); + СтруктураЗаписи.Вставить("WSИмяПользователя", НастройкиПодключения.WSИмяПользователя); + СтруктураЗаписи.Вставить("WSПароль", НастройкиПодключения.WSПароль); + СтруктураЗаписи.Вставить("WSЗапомнитьПароль", Истина); // добавляем запись в РС РегистрыСведений.НастройкиТранспортаОбмена.ОбновитьЗапись(СтруктураЗаписи); @@ -161,3 +162,8 @@ КонецФункции +// Соответствует операции Ping +Функция Ping() + +КонецФункции + 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 ee663cad7..25ce2823c 100644 --- a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/Module.bsl @@ -154,3 +154,8 @@ Возврат Истина; КонецФункции + +// Соответствует операции Ping +Функция Ping() + +КонецФункции diff --git a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/RemoteAdministrationOfExchange_2_0_1_6.mdo b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/RemoteAdministrationOfExchange_2_0_1_6.mdo index a6601e15c..36423a1c5 100644 --- a/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/RemoteAdministrationOfExchange_2_0_1_6.mdo +++ b/SSL/src/WebServices/RemoteAdministrationOfExchange_2_0_1_6/RemoteAdministrationOfExchange_2_0_1_6.mdo @@ -172,4 +172,18 @@ Out + + Ping + + ru + Ping + + + string + http://www.w3.org/2001/XMLSchema + + true + Ping + Managed + diff --git a/SSL/src/XDTOPackages/CurrencyRates/CurrencyRates.mdo b/SSL/src/XDTOPackages/CurrencyRates/CurrencyRates.mdo new file mode 100644 index 000000000..9d86e7361 --- /dev/null +++ b/SSL/src/XDTOPackages/CurrencyRates/CurrencyRates.mdo @@ -0,0 +1,9 @@ + + + CurrencyRates + + ru + Currency rates + + http://www.1c.ru/SaaS/SuppliedData/CurrencyRates + diff --git a/SSL/src/XDTOPackages/CurrencyRates/Package.xdto b/SSL/src/XDTOPackages/CurrencyRates/Package.xdto new file mode 100644 index 000000000..672f10d14 --- /dev/null +++ b/SSL/src/XDTOPackages/CurrencyRates/Package.xdto @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/SuppliedData/Package.xdto b/SSL/src/XDTOPackages/SuppliedData/Package.xdto new file mode 100644 index 000000000..707442caf --- /dev/null +++ b/SSL/src/XDTOPackages/SuppliedData/Package.xdto @@ -0,0 +1,51 @@ + + + + + + Background + Interactive + InteractiveAndBackground + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/SuppliedData/SuppliedData.mdo b/SSL/src/XDTOPackages/SuppliedData/SuppliedData.mdo new file mode 100644 index 000000000..0e8b744fc --- /dev/null +++ b/SSL/src/XDTOPackages/SuppliedData/SuppliedData.mdo @@ -0,0 +1,9 @@ + + + SuppliedData + + ru + Supplied data + + http://www.1c.ru/SaaS/SuppliedData + diff --git a/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1/Package.xdto b/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1/Package.xdto new file mode 100644 index 000000000..8a23f85bc --- /dev/null +++ b/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1/Package.xdto @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1.mdo b/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1.mdo new file mode 100644 index 000000000..f78be43ee --- /dev/null +++ b/SSL/src/XDTOPackages/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1/КонтрольРезервногоКопированияОбластейДанных_1_0_2_1.mdo @@ -0,0 +1,9 @@ + + + КонтрольРезервногоКопированияОбластейДанных_1_0_2_1 + + ru + Контроль резервного копирования областей данных 1.0.2.1 + + http://www.1c.ru/SaaS/ControlZonesBackup/1.0.2.1 + diff --git a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/Package.xdto b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/Package.xdto deleted file mode 100644 index d97fd2dd7..000000000 --- a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/Package.xdto +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_1/Package.xdto b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_1/Package.xdto new file mode 100644 index 000000000..a362fc2a9 --- /dev/null +++ b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_1/Package.xdto @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/КонтрольУдаленногоАдминистрирования.mdo b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_1/КонтрольУдаленногоАдминистрирования_1_0_2_1.mdo similarity index 58% rename from SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/КонтрольУдаленногоАдминистрирования.mdo rename to SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_1/КонтрольУдаленногоАдминистрирования_1_0_2_1.mdo index e5b7e866a..b60e0c6ec 100644 --- a/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования/КонтрольУдаленногоАдминистрирования.mdo +++ b/SSL/src/XDTOPackages/КонтрольУдаленногоАдминистрирования_1_0_2_1/КонтрольУдаленногоАдминистрирования_1_0_2_1.mdo @@ -1,9 +1,9 @@ - - КонтрольУдаленногоАдминистрирования + + КонтрольУдаленногоАдминистрирования_1_0_2_1 ru - Контроль удаленного администрирования + Контроль удаленного администрирования 1.0.2.1 - http://www.1c.ru/SaaS/RemoteAdministration/Control + http://www.1c.ru/SaaS/RemoteAdministration/Control/1.0.2.1 diff --git a/SSL/src/XDTOPackages/Сообщения/Package.xdto b/SSL/src/XDTOPackages/Сообщения/Package.xdto new file mode 100644 index 000000000..a139bda7b --- /dev/null +++ b/SSL/src/XDTOPackages/Сообщения/Package.xdto @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/Сообщения/Сообщения.mdo b/SSL/src/XDTOPackages/Сообщения/Сообщения.mdo new file mode 100644 index 000000000..ea361f31c --- /dev/null +++ b/SSL/src/XDTOPackages/Сообщения/Сообщения.mdo @@ -0,0 +1,9 @@ + + + Сообщения + + ru + Сообщения + + http://www.1c.ru/SaaS/Messages + diff --git a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/Package.xdto b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/Package.xdto deleted file mode 100644 index bbb252bcf..000000000 --- a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/Package.xdto +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - [^@]+@[^\.]+\..+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1/Package.xdto b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1/Package.xdto new file mode 100644 index 000000000..807fc6b56 --- /dev/null +++ b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1/Package.xdto @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/УдаленноеАдминистрированиеВМоделиСервиса.mdo b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1.mdo similarity index 56% rename from SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/УдаленноеАдминистрированиеВМоделиСервиса.mdo rename to SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1.mdo index 3ec123762..d7a596009 100644 --- a/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса/УдаленноеАдминистрированиеВМоделиСервиса.mdo +++ b/SSL/src/XDTOPackages/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1/УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1.mdo @@ -1,9 +1,9 @@ - - УдаленноеАдминистрированиеВМоделиСервиса + + УдаленноеАдминистрированиеВМоделиСервиса_1_0_2_1 ru - Удаленное администрирование в модели сервиса + Удаленное администрирование в модели сервиса 1.0.2.1 - http://www.1c.ru/SaaS/RemoteAdministration/App + http://www.1c.ru/SaaS/RemoteAdministration/App/1.0.2.1 diff --git a/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1/Package.xdto b/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1/Package.xdto new file mode 100644 index 000000000..e328a41dd --- /dev/null +++ b/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1/Package.xdto @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1.mdo b/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1.mdo new file mode 100644 index 000000000..8da8fcbbd --- /dev/null +++ b/SSL/src/XDTOPackages/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1/УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1.mdo @@ -0,0 +1,9 @@ + + + УправлениеРезервнымКопированиемОбластейДанных_1_0_2_1 + + ru + Управление резервным копированием областей данных 1.0.2.1 + + http://www.1c.ru/SaaS/ManageZonesBackup/1.0.2.1 +
              Обновить индекс